| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
让 AI 能够动态查询和调用 ZStack Cloud 的 2000+ API 的 MCP Server。
# 从 PyPI 安装
pip install zstack-mcp-server
# 或者使用 uv
uv pip install zstack-mcp-server💡 也可以不安装,直接用 uvx 或 pipx run 一键运行(见下方使用方式)
设置以下环境变量:
export ZSTACK_API_URL="http://localhost:8080" # ZStack API 地址
export ZSTACK_ALLOW_ALL_API="false" # 是否允许写操作(可选,默认 false)
# 认证方式一:用户名密码(会自动登录获取 Session)
export ZSTACK_ACCOUNT="admin" # 账户名
export ZSTACK_PASSWORD="your-password" # 密码(明文)
# 认证方式二:直接传入 SessionID(优先级更高,设置后忽略用户名密码)
export ZSTACK_SESSION_ID="your-session-uuid" # 已有的 Session UUID
# 查询响应控制(可选)
export ZSTACK_QUERY_DEFAULT_LIMIT="50" # Query API 默认 limit(设 0 禁用)
export ZSTACK_RESPONSE_SIZE_LIMIT="65536" # 响应大小上限,字节(设 0 禁用)| 方式 | 环境变量 | 说明 |
|---|---|---|
| 用户名密码 | ZSTACK_ACCOUNT + ZSTACK_PASSWORD | 自动登录获取 Session |
| Session ID | ZSTACK_SESSION_ID | 直接使用已有 Session(优先级更高) |
💡 如果同时设置了 ZSTACK_SESSION_ID 和用户名密码,会优先使用 Session ID
默认情况下,只允许调用只读 API,包括:
如需调用写操作 API(如 CreateVmInstance、DeleteVolume 等),需要设置:
export ZSTACK_ALLOW_ALL_API="true"⚠️ 警告: 启用写操作后,AI 可以执行创建、删除、修改等危险操作,请谨慎使用!
Query API 默认注入 limit=50,防止一次拉取全量数据撑满模型上下文窗口。响应超过 64KB 时会自动裁剪 inventories 列表,保证返回合法 JSON。
| 环境变量 | 默认值 | 说明 |
|---|---|---|
| ZSTACK_QUERY_DEFAULT_LIMIT | 50 | Query API 未指定 limit 时自动注入的默认值,设 0 禁用 |
| ZSTACK_RESPONSE_SIZE_LIMIT | 65536 | 响应大小上限(字节),超过后裁剪,设 0 禁用 |
# 使用 uvx 直接运行(无需安装)
uvx zstack-mcp-server
# 或使用 pipx
pipx run zstack-mcp-server
# 如果已安装,直接运行
zstack-mcp-server默认使用 stdio 传输。若需 SSE 模式,可用命令行或环境变量切换:
# 命令行方式
uvx zstack-mcp-server --transport sse --host 0.0.0.0 --port 8000
# 环境变量方式
export MCP_TRANSPORT="sse"
export MCP_HOST="0.0.0.0"
export MCP_PORT="8000"
export MCP_PATH="/sse" # 可选
uvx zstack-mcp-server说明:也兼容 FASTMCP_HOST / FASTMCP_PORT / FASTMCP_MOUNT_PATH(FastMCP 原生环境变量)
# 命令行方式
uvx zstack-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000 --streamable-path /mcp
# 环境变量方式
export MCP_TRANSPORT="streamable-http"
export MCP_HOST="0.0.0.0"
export MCP_PORT="8000"
export MCP_STREAMABLE_PATH="/mcp" # 可选
uvx zstack-mcp-server说明:也兼容 FASTMCP_STREAMABLE_HTTP_PATH
在 SSE 或 streamable-http 模式下,管理员可以启动一个共享的 MCP Server,多个用户通过 HTTP 头传入各自的凭据,实现多租户隔离。
支持的 HTTP 头:
| HTTP Header | 对应环境变量 | 说明 |
|---|---|---|
| X-ZStack-Account | ZSTACK_ACCOUNT | 账户名 |
| X-ZStack-Password | ZSTACK_PASSWORD | 密码 |
| X-ZStack-Session-Id | ZSTACK_SESSION_ID | 已有 Session(优先级高于账号密码) |
| X-ZStack-API-URL | ZSTACK_API_URL | ZStack 管理节点地址(可代理多套环境) |
凭据优先级:HTTP 头 > 环境变量
典型用法:
# 管理员启动共享 MCP Server
ZSTACK_ALLOW_ALL_API=false uvx zstack-mcp-server --transport streamable-http --host 0.0.0.0 --port 8000用户在 MCP 客户端配置中添加 HTTP 头即可使用各自的账号:
{
"mcpServers": {
"zstack": {
"transport": "streamable-http",
"url": "http://mcp-server:8000/mcp",
"headers": {
"X-ZStack-Account": "user-a",
"X-ZStack-Password": "password-a",
"X-ZStack-API-URL": "http://zstack-env-1:8080"
}
}
}
}特性:
在 claude_desktop_config.json 中添加:
方式一:使用用户名密码
{
"mcpServers": {
"zstack": {
"command": "uvx",
"args": ["zstack-mcp-server"],
"env": {
"ZSTACK_API_URL": "http://your-zstack-server:8080",
"ZSTACK_ACCOUNT": "admin",
"ZSTACK_PASSWORD": "your-password",
"ZSTACK_ALLOW_ALL_API": "false"
}
}
}
}方式二:使用 Session ID
{
"mcpServers": {
"zstack": {
"command": "uvx",
"args": ["zstack-mcp-server"],
"env": {
"ZSTACK_API_URL": "http://your-zstack-server:8080",
"ZSTACK_SESSION_ID": "your-session-uuid",
"ZSTACK_ALLOW_ALL_API": "false"
}
}
}
}💡 将 ZSTACK_ALLOW_ALL_API 设为 "true" 可启用写操作(创建/删除/修改等)
根据关键词搜索 ZStack API。
参数:
获取指定 API 的详细参数说明。
参数:
执行 ZStack API。
参数:
搜索可用的监控指标。
参数:
💡 提示:不确定 namespace 时可先不传,返回结果会带 namespace 值供选择 💡 默认 match_mode=or(多关键词并集);如需交集请显式传 and 💡 指标名称在不同 namespace 可能重名,建议指定 namespace 或 prefer_namespaces 以确保排序优先
获取监控数据。
参数:
数据量提示:
获取监控指标的聚合 TopN(按 label_key 分组)。
参数:
对于 Query 类 API,conditions 参数支持以下操作符:
| 操作符 | 含义 | 示例 |
|---|---|---|
| = | 等于 | name=test |
| != | 不等于 | state!=Deleted |
| > | 大于 | cpuNum>4 |
| >= | 大于等于 | memorySize>=1073741824 |
| < | 小于 | createDate<2024-01-01 |
| <= | 小于等于 | |
| ?= | 模糊匹配(LIKE,部分版本为 like) | name?=%test% |
| !?= | 模糊不匹配 | |
| ~= | 正则匹配 | name~=.*test.* |
| !~= | 正则不匹配 | |
| =null | 为空 | description=null |
| !=null | 不为空 | |
| in | 在列表中 | state?=Running,Stopped |
| not in | 不在列表中 | state!?=Deleted,Destroyed |
conditions 格式:
{
"conditions": [
{"name": "uuid", "op": "=", "value": "xxx"},
{"name": "state", "op": "in", "value": "Running,Stopped"}
]
}用户问: "帮我查一下 UUID 为 ae6e57a0 开头的 VM 的详情"
AI 会:
# 克隆仓库
git clone https://github.com/zstackio/zstack-mcp-server.git
cd zstack-mcp-server
# 安装开发依赖
pip install -e ".[dev]"
# 运行测试
pytestMIT
| Back | FazBrowse Home | New Git URL |