Skip to main content
Glama
ZStack MCP Server

ZStack MCP Server

Official
by zstackio

ZStack MCP Server

让 AI 能够动态查询和调用 ZStack Cloud 的 2000+ API 的 MCP Server。

功能特性

  • API 搜索: 根据关键词搜索 ZStack API,支持模糊匹配

  • API 描述: 获取 API 的详细参数说明

  • API 执行: 执行 ZStack API 并返回结果

  • 监控指标搜索: 搜索可用的监控指标

  • 监控数据获取: 获取指定指标的监控数据

Related MCP server: CloudStack 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,包括:

  • Query* - 查询类

  • Get* - 获取类

  • List* - 列表类

  • Describe* - 描述类

  • Check* - 检查类

  • Count* - 计数类

  • 其他只读操作...

如需调用写操作 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 禁用

  • 显式传入 limit 时不会被覆盖

  • 裁剪发生时响应中会包含 _truncation 字段,提示使用 limit/start 翻页或 fields 精简返回字段

使用方式

作为 MCP Server 运行

# 使用 uvx 直接运行(无需安装)
uvx zstack-mcp-server

# 或使用 pipx
pipx run zstack-mcp-server

# 如果已安装,直接运行
zstack-mcp-server

SSE 模式运行

默认使用 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 原生环境变量)

Streamable HTTP 模式运行

# 命令行方式
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

HTTP 头认证(多租户模式)

在 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"
      }
    }
  }
}

特性:

  • 同一账号的 Session 会自动缓存复用,不会每次请求都创建新 Session

  • 不同 X-ZStack-API-URL 的请求会路由到不同的 ZStack 环境

  • stdio 模式下无 HTTP 头,自动回退到环境变量认证,行为不变

在 Claude Desktop 中配置

在 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" 可启用写操作(创建/删除/修改等)

可用工具

1. search_api

根据关键词搜索 ZStack API。

参数:

  • keywords (list[str]): 搜索关键词,如 ["Query", "Vm"]

  • category (str, 可选): 按分类过滤

  • limit (int, 默认 15): 最多返回数量

2. describe_api

获取指定 API 的详细参数说明。

参数:

  • api_name (str): API 名称,如 "QueryVmInstance"

3. execute_api

执行 ZStack API。

参数:

  • api_name (str): API 名称

  • parameters (dict): API 参数

4. search_metric

搜索可用的监控指标。

参数:

  • keywords (list[str]): 搜索关键词

  • namespace (str, 可选): 按命名空间过滤(支持模糊匹配,如 vm/host)

  • limit (int, 默认 20): 最多返回数量

  • match_mode (str, 默认 or): 关键词匹配模式(and/or)

  • prefer_namespaces (list[str], 可选): 优先排序的命名空间列表(默认 ["ZStack/VM","ZStack/Host"])

💡 提示:不确定 namespace 时可先不传,返回结果会带 namespace 值供选择 💡 默认 match_mode=or(多关键词并集);如需交集请显式传 and 💡 指标名称在不同 namespace 可能重名,建议指定 namespace 或 prefer_namespaces 以确保排序优先

5. get_metric_data

获取监控数据。

参数:

  • namespace (str): 命名空间

  • metric_name (str): 指标名称

  • start_time (str|int, 可选): 开始时间 (ISO 或秒级时间戳)

  • end_time (str|int, 可选): 结束时间 (ISO 或秒级时间戳)

  • period (int, 默认 60): 采样周期(秒)

  • labels (list[str]|dict, 可选): 标签过滤,如 ["VMUuid=xxx"] 或 {"VMUuid":"xxx"}

  • summary_only (bool, 可选): 仅返回统计信息(点数/最大/最小/平均/方差/标准差)

数据量提示:

  • 返回点数估算:ceil((end_time - start_time) / period) * series_count

  • series_count 为不同 label 组合数量;不传 labels 时可能返回多组序列

  • 建议通过缩短时间范围、增大 period 或增加 labels 过滤避免输出过大

6. get_metric_summary

获取监控指标的聚合 TopN(按 label_key 分组)。

参数:

  • namespace (str): 命名空间

  • metric_name (str): 指标名称

  • label_key (str): 标签键,如 VMUuid/HostUuid

  • metric_names (list[str], 可选): 多指标合并(如 in/out)

  • start_time (str|int, 可选): 开始时间 (ISO 或秒级时间戳)

  • end_time (str|int, 可选): 结束时间 (ISO 或秒级时间戳)

  • period (int, 默认 60): 采样周期(秒)

  • aggregate (str, 默认 max): 单指标聚合方式 (max/avg/sum/min)

  • combine (str, 默认 sum): 多指标合并方式 (sum/avg/max/min)

  • threshold_op (str, 可选): 阈值比较符 (>,>=,<,<=,==,!=)

  • threshold_value (number, 可选): 阈值数值

  • top_n (int, 默认 10): 返回条数

  • resolve_resource (str, 可选): vm 或 host,用于解析名称

Query API 条件语法

对于 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 会:

  1. 调用 search_api(keywords=["Query", "Vm", "Instance"])

  2. 调用 describe_api(api_name="QueryVmInstance")

  3. 调用 execute_api(api_name="QueryVmInstance", parameters={"conditions": [{"name": "uuid", "op": "?=", "value": "ae6e57a0%"}]})

开发

# 克隆仓库
git clone https://github.com/zstackio/zstack-mcp-server.git
cd zstack-mcp-server

# 安装开发依赖
pip install -e ".[dev]"

# 运行测试
pytest

License

MIT

Available Tools

6 tools
describe_apiA

获取指定 ZStack API 的详细参数说明

Args: api_name: API 名称,如 "QueryVmInstance"

Returns: API 的精简信息。对于 Query API,仅返回核心参数和 queryableFields。

NameRequiredDescriptionDefault
api_nameYes

Output Schema

NameRequiredDescription
resultYes
execute_apiA

执行 ZStack API

注意: 默认只允许调用只读 API(Query/Get/List 等)。 如需调用写操作 API,请设置环境变量 ZSTACK_ALLOW_ALL_API=true

Args: api_name: API 名称,如 "QueryVmInstance" parameters: API 参数字典 对于 Query API,conditions 格式为: [{"name": "字段名", "op": "操作符", "value": "值"}, ...] 分页: limit(默认 50)、start(偏移量) 字段选择: fields(减少返回数据量)

Returns: API 执行结果 (JSON 格式)

Example: execute_api( api_name="QueryVmInstance", parameters={ "conditions": [ {"name": "uuid", "op": "like", "value": "ae6e57a0%"} ] } )

NameRequiredDescriptionDefault
api_nameYes
parametersYes

Output Schema

NameRequiredDescription
resultYes
get_metric_dataA

获取 ZStack 监控数据

Args: namespace: 命名空间,如 "ZStack/VM", "ZStack/Host" metric_name: 指标名称,如 "CPUUsedUtilization" start_time: 开始时间(ISO 或秒级时间戳) end_time: 结束时间(ISO 或秒级时间戳) period: 采样周期(秒),默认 60 labels: 标签过滤,如 ["VMUuid=xxx"] 或 {"VMUuid":"xxx"} summary_only: 仅返回统计信息(点数/最大/最小/平均/方差/标准差)

注意: 返回数据量与时间跨度和 period 成正比。可用估算公式: 点数 ≈ ceil((end_time - start_time) / period) * series_count series_count 为不同 label 组合数量;若不传 labels,可能返回多组系列 (例如指标包含 CPUNum/VMUuid 等 label 时每个组合都会产出一组序列)。 为避免输出过大:缩短时间范围、增大 period 或增加 labels 过滤。

Returns: 监控数据点列表

NameRequiredDescriptionDefault
namespaceYes
metric_nameYes
start_timeNo
end_timeNo
periodNo
labelsNo
summary_onlyNo

Output Schema

NameRequiredDescription
resultYes
get_metric_summaryB

获取监控指标的聚合 TopN(按 label_key 分组)

Args: namespace: 命名空间,如 "ZStack/VM", "ZStack/Host" metric_name: 指标名称,如 "CPUOccupiedByVm" label_key: 标签键,如 "VMUuid", "HostUuid" metric_names: 可选,多指标合并(如 in/out) start_time: 开始时间(ISO 或秒级时间戳) end_time: 结束时间(ISO 或秒级时间戳) period: 采样周期(秒),默认 60 aggregate: 单指标聚合方式,可选 "max"|"avg"|"sum"|"min" combine: 多指标合并方式,可选 "sum"|"avg"|"max"|"min" threshold_op: 阈值比较符,如 >,>=,<,<=,==,!= threshold_value: 阈值数值 top_n: 返回条数,默认 10 resolve_resource: 可选 "vm" 或 "host",用于解析名称

Returns: 聚合后的 TopN 列表

NameRequiredDescriptionDefault
namespaceYes
metric_nameYes
label_keyYes
metric_namesNo
start_timeNo
end_timeNo
periodNo
aggregateNomax
combineNosum
threshold_opNo
threshold_valueNo
top_nNo
resolve_resourceNo

Output Schema

NameRequiredDescription
resultYes
search_apiA

根据关键词搜索 ZStack API

Args: keywords: 搜索关键词列表,如 ["Query", "Vm"] 或 ["Create", "Volume"] 支持驼峰拆分匹配,如搜索 "vm" 可以匹配 "QueryVmInstance" category: 可选,按分类过滤,如 "vm", "volume", "network" limit: 最多返回数量,默认 15

Returns: 匹配的 API 列表,包含名称、描述、分类、调用类型

NameRequiredDescriptionDefault
keywordsYes
categoryNo
limitNo

Output Schema

NameRequiredDescription
resultYes
search_metricA

搜索可用的 ZStack 监控指标

Args: keywords: 搜索关键词,如 ["CPU", "Usage"] 或 ["Memory"] 支持驼峰拆分匹配 namespace: 可选,按命名空间过滤(支持模糊匹配),如 "ZStack/VM", "vm", "host" limit: 最多返回数量,默认 20 match_mode: 关键词匹配模式,"and" 或 "or",默认 "or" prefer_namespaces: 优先排序的命名空间列表(默认 ["ZStack/VM","ZStack/Host"])

Returns: 匹配的监控指标列表,包含名称、描述、命名空间、可用标签

NameRequiredDescriptionDefault
keywordsYes
namespaceNo
limitNo
match_modeNoor
prefer_namespacesNo

Output Schema

NameRequiredDescription
resultYes

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.6
    • First observeddescribe_api
    • First observedexecute_api
    • First observedget_metric_data
    • First observedget_metric_summary
    • First observedsearch_api
    • First observedsearch_metric

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: describe_api provides API details, execute_api calls APIs, search_api finds APIs, and similarly for metrics (get_metric_data, get_metric_summary, search_metric). There is no overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., describe_api, get_metric_data, search_metric). No deviations or mixed conventions.

Tool Count5/5

With 6 tools covering API exploration/execution and metric data retrieval/aggregation/search, the count is well-scoped for a ZStack server. No tool feels extraneous, and the set is not overly sparse.

Completeness5/5

The tool set fully covers the domain: users can explore APIs (search, describe), execute any API (including write operations if configured), and access monitoring metrics (raw data, summary/aggregation, search). No obvious gaps hinder common workflows.

Maintenance

ActivityInactive
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables comprehensive management of CloudStack infrastructure through natural language, providing access to over 735 API methods for virtual machines, networking, and storage. It features enterprise-grade security with a safety confirmation system for destructive operations and extensive API coverage.
    Creative Commons Attribution Non Commercial Share Alike 4.0 International
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with natural language control over AWS, Azure, GCP, and Alibaba Cloud infrastructure through dynamic API discovery and execution. Supports 51,900+ cloud operations and includes OpenTofu integration for complete infrastructure lifecycle management.
    3
    MIT