MCP Server for Kingsoft Cloud (Ksyun) Python SDK
Project description
Ksyun MCP Server
MCP Server for Kingsoft Cloud (Ksyun) Python SDK — 让 LLM 直接调用金山云 API。
功能
- ksyun_api — 调用任意金山云 API
- ksyun_list_services — 列出所有可用服务及版本
- ksyun_list_actions — 列出指定服务版本的 API Action 及参数
- ksyun_audit_query — 查询审计日志
- ksyun://services 资源 — 浏览所有服务/版本/Action 摘要
- ksyun://audit/recent 资源 — 最近 10 条审计记录
大响应自动分页:MCP 协议的
structuredContent输出有约 50KB 大小限制。当 API 返回数据超过 40KB 时,ksyun_api会自动缓存完整响应并返回第一批数据,同时在_meta中附加next_marker。LLM 只需再次调用同一 API 并传入page_marker="<next_marker>"即可获取下一批数据,直到所有数据返回完毕。缓存有效期为 10 分钟。
安装
从 PyPI 安装(推荐)
pip install ksyun-mcp-server
SDK (
kingsoftcloud-sdk-python) 会作为依赖自动安装。
从源码安装(开发用)
cd ksyun-mcp-server
pip install -e ".[dev]"
更新
已安装的 MCP Server 更新到最新版本后,需要重启 MCP 客户端(Claude Desktop / Cursor / VS Code 等)才能生效。
从压缩包安装的更新
先在项目目录下构建压缩包:
cd ksyun-mcp-server
pip install build
python -m build
构建产物在 dist/ 目录下,用新版本的压缩包重新安装即可:
pip install dist/ksyun_mcp_server-0.2.2.tar.gz
也可以指定
.whl文件:pip install dist/ksyun_mcp_server-0.2.2-py3-none-any.whl
从源码安装的更新
如果是可编辑安装(pip install -e),拉取最新代码后即自动生效:
cd ksyun-mcp-server
git pull
# 无需重新 pip install,-e 模式下代码变更即时生效
如果是非可编辑安装,重新执行安装命令:
cd ksyun-mcp-server
pip install ".[dev]"
重启 MCP 客户端
| 客户端 | 重启方式 |
|---|---|
| Claude Desktop | 完全退出应用后重新打开 |
| Cursor | 重新加载窗口(Cmd+Shift+P → Reload Window) |
| VS Code | 重新加载窗口(Cmd+Shift+P → Reload Window) |
配置
通过环境变量或 .env 文件配置(二选一):
方式一:环境变量(推荐,无需 .env 文件)
在启动命令的 env 字段中直接传入凭证,无需创建 .env 文件:
{
"mcpServers": {
"ksyun": {
"command": "ksyun-mcp-server",
"env": {
"KSYUN_ACCESS_KEY_ID": "your_ak",
"KSYUN_SECRET_ACCESS_KEY": "your_sk",
"KSYUN_REGION": "cn-beijing-6"
}
}
}
}
方式二:.env 文件
复制 .env.example 为 .env 并填入凭证:
cp .env.example .env
| 环境变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
KSYUN_ACCESS_KEY_ID |
✅ | 金山云 AccessKey ID | |
KSYUN_SECRET_ACCESS_KEY |
✅ | 金山云 Secret AccessKey | |
KSYUN_REGION |
cn-beijing-6 |
默认地域 | |
KSYUN_AUDIT_BACKEND |
file |
审计后端:file / sqlite |
|
KSYUN_AUDIT_DIR |
~/.ksyun-mcp |
审计日志目录 | |
KSYUN_AUDIT_REDACT_FIELDS |
password,secret,token,... |
脱敏字段名 | |
KSYUN_SDK_PATH |
自动检测 | SDK 路径(一般无需设置) |
在各工具中使用
Claude Desktop
编辑 claude_desktop_config.json(路径:%APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"ksyun": {
"command": "ksyun-mcp-server",
"env": {
"KSYUN_ACCESS_KEY_ID": "your_ak",
"KSYUN_SECRET_ACCESS_KEY": "your_sk",
"KSYUN_REGION": "cn-beijing-6"
}
}
}
}
如果
ksyun-mcp-server不在 PATH 中,将command改为 Python 解释器的完整路径:"command": "C:\\Users\\you\\.venv\\Scripts\\ksyun-mcp-server.exe"
Cursor
编辑 ~/.cursor/mcp.json 或项目目录下 .cursor/mcp.json:
{
"mcpServers": {
"ksyun": {
"command": "ksyun-mcp-server",
"env": {
"KSYUN_ACCESS_KEY_ID": "your_ak",
"KSYUN_SECRET_ACCESS_KEY": "your_sk",
"KSYUN_REGION": "cn-beijing-6"
}
}
}
}
VS Code (Copilot / Continue)
在 VS Code settings.json 中:
{
"mcp.servers": {
"ksyun": {
"command": "ksyun-mcp-server",
"env": {
"KSYUN_ACCESS_KEY_ID": "your_ak",
"KSYUN_SECRET_ACCESS_KEY": "your_sk",
"KSYUN_REGION": "cn-beijing-6"
}
}
}
}
任意支持 MCP 的工具
只要工具支持 stdio 传输的 MCP Server,配置模式一致:
| 字段 | 值 |
|---|---|
| command | ksyun-mcp-server |
| transport | stdio(默认,无需指定) |
| env | KSYUN_ACCESS_KEY_ID + KSYUN_SECRET_ACCESS_KEY(必填),其余可选 |
打包与发布
本地构建
cd ksyun-mcp-server
pip install build
python -m build
构建产物在 dist/ 目录下:ksyun_mcp_server-0.2.2-py3-none-any.whl 和 ksyun_mcp_server-0.2.2.tar.gz。
发布到 PyPI
pip install twine
twine upload dist/*
需要 PyPI API Token,在
~/.pypirc或环境变量TWINE_PASSWORD中配置。
发布到 TestPyPI(测试用)
twine upload --repository testpypi dist/*
用户安装方式
发布后,用户只需一行命令即可安装使用:
pip install ksyun-mcp-server
然后在任意 MCP 客户端中配置 "command": "ksyun-mcp-server" 即可。
更新记录
v0.2.2
- 修复
_parse_client_py潜在 bug:多数投票可能在比较遍历之后改变 content_type 默认值,导致 form 类型的 action 被遗漏而错误继承 JSON 默认值。重构为先收集所有 action 的 content_type,再进行多数投票,最后用最终默认值过滤action_content_types字典 - 更新文档:README "打包与发布" 和 "更新" 部分的文件名引用从 v0.2.0 更新到 v0.2.2
v0.2.1
- 修复参数传递问题:LLM 经常将 API 参数扁平化到顶层(如
{"service":"vpc", "SecurityGroupId":"xxx"}而非{"service":"vpc", "params":{"SecurityGroupId":"xxx"}}),FastMCP 的 Pydantic 模型默认静默丢弃多余字段导致params={}。通过 monkey-patchArgModelBase(extra="allow"+ 扩展model_dump_one_level)自动将顶层多余字段合并到params字典中 - 增强 docstring:在工具描述中说明参数嵌套规则,并提示扁平化参数也会被自动收集
- 参数值类型转换:调用 SDK 前自动将所有
params值转为字符串,兼容 LLM 传入的整数等非字符串类型 - 空参数警告:当
params为空但 action 要求必填参数时记录 warning 日志,便于排查
v0.2.0
- 新增大响应自动分页:当 API 返回数据超过 40KB 时,
ksyun_api会自动缓存完整响应并分批返回,通过_meta.next_marker和page_marker参数实现逐页获取,确保数据不丢失(缓存有效期 10 分钟) - 修复:
ksyun_api工具参数名从_marker改为page_marker,解决 FastMCP 不允许下划线开头参数的InvalidSignature错误 - 移除:删除无效的
ksyun_max_response_bytes配置项(MCP 框架硬限制无法通过配置绕过)
v0.1.0
- 初始版本
- 支持
ksyun_api、ksyun_list_services、ksyun_list_actions、ksyun_audit_query工具 - 支持
ksyun://services、ksyun://audit/recent资源 - 审计日志支持 file / sqlite 两种后端,敏感字段自动脱敏
审计
所有通过 MCP Server 发起的 API 调用都会自动记录审计日志,包含:
- 时间戳、服务名、版本、Action、地域
- 请求参数(敏感字段自动脱敏)
- 调用状态(success/error)、错误信息、RequestId
- 调用耗时(ms)
使用 ksyun_audit_query 工具或 ksyun://audit/recent 资源查看审计记录。
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ksyun_mcp_server-0.2.2.tar.gz.
File metadata
- Download URL: ksyun_mcp_server-0.2.2.tar.gz
- Upload date:
- Size: 26.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d111239f6545bcbd403c1602203125a4a6f8209a7dbd12c00121b4865b6f009b
|
|
| MD5 |
7250bd8941be632e9a1a6f7f8d75a551
|
|
| BLAKE2b-256 |
5948c6cbc2b7f00c56a973daa01f367f690bf0d515b2a5ad9dd822e51df04e19
|
File details
Details for the file ksyun_mcp_server-0.2.2-py3-none-any.whl.
File metadata
- Download URL: ksyun_mcp_server-0.2.2-py3-none-any.whl
- Upload date:
- Size: 20.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ea45546033696fb73dad137e4426a4eca473dbe9d3afb4185d371394d0b4d61
|
|
| MD5 |
dc0b9bf502d4c5f17e605102be982df9
|
|
| BLAKE2b-256 |
910239eaa2efbd253ffad8ea939ee4512fc442b8ee119f69a00ccc725fee9d7a
|