zsvirt-mcp-server
OfficialZSvirt MCP Server
AI가 ZSvirt의 2000+ API를 동적으로 조회하고 호출할 수 있게 해주는 MCP Server입니다.
기능 특징
API 검색: 키워드로 ZStack API를 검색, 퍼지 매칭 지원
API 설명: API의 상세 파라미터 설명 획득
API 실행: ZStack API를 실행하고 결과 반환
모니터링 지표 검색: 사용 가능한 모니터링 지표 검색
모니터링 데이터 조회: 지정된 지표의 모니터링 데이터 획득
Related MCP server: CloudStack MCP Server
설치
# 从 PyPI 安装
pip install zsvirt-mcp-server
# 或者使用 uv
uv pip install zsvirt-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 禁用)인증 방식 설명
방식 | 환경 변수 | 설명 |
사용자 이름/비밀번호 |
| 자동 로그인하여 Session 획득 |
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을 반환합니다.
환경 변수 | 기본값 | 설명 |
|
| Query API에 limit 미지정 시 자동 주입되는 기본값, |
|
| 응답 크기 상한(바이트), 초과 시 잘림, |
명시적으로
limit를 전달하면 덮어쓰지 않습니다잘림이 발생하면 응답에
_truncation필드가 포함되어limit/start로 페이지를 넘기거나fields로 반환 필드를 줄이도록 안내합니다
사용 방법
MCP Server로 실행
# 使用 uvx 直接运行(无需安装)
uvx zsvirt-mcp-server
# 或使用 pipx
pipx run zsvirt-mcp-server
# 如果已安装,直接运行
zsvirt-mcp-serverSSE 모드 실행
기본적으로 stdio 전송을 사용합니다. SSE 모드가 필요하면 명령줄 또는 환경 변수로 전환할 수 있습니다:
# 命令行方式
uvx zsvirt-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 zsvirt-mcp-server참고:
FASTMCP_HOST/FASTMCP_PORT/FASTMCP_MOUNT_PATH(FastMCP 네이티브 환경 변수)도 호환됩니다
Streamable HTTP 모드 실행
# 命令行方式
uvx zsvirt-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 zsvirt-mcp-server참고:
FASTMCP_STREAMABLE_HTTP_PATH도 호환됩니다
HTTP 헤더 인증 (멀티 테넌트 모드)
SSE 또는 streamable-http 모드에서 관리자는 공유 MCP Server를 시작하고 여러 사용자가 HTTP 헤더를 통해 각자의 자격 증명을 전달하여 멀티 테넌트 격리를 구현할 수 있습니다.
지원되는 HTTP 헤더:
HTTP Header | 대응 환경 변수 | 설명 |
|
| 계정 이름 |
|
| 비밀번호 |
|
| 기존 Session (계정/비밀번호보다 우선) |
|
| ZStack 관리 노드 주소 (여러 환경 프록시 가능) |
자격 증명 우선순위: HTTP 헤더 > 환경 변수
일반적인 사용 예:
# 管理员启动共享 MCP Server
ZSTACK_ALLOW_ALL_API=false uvx zsvirt-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에 다음을 추가합니다:
방법 1: 사용자 이름/비밀번호 사용
{
"mcpServers": {
"zstack": {
"command": "uvx",
"args": ["zsvirt-mcp-server"],
"env": {
"ZSTACK_API_URL": "http://your-zstack-server:8080",
"ZSTACK_ACCOUNT": "admin",
"ZSTACK_PASSWORD": "your-password",
"ZSTACK_ALLOW_ALL_API": "false"
}
}
}
}방법 2: Session ID 사용
{
"mcpServers": {
"zstack": {
"command": "uvx",
"args": ["zsvirt-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_countseries_count는 서로 다른 label 조합 수;labels를 전달하지 않으면 여러 시리즈가 반환될 수 있습니다시간 범위를 줄이거나
period를 늘리거나labels필터를 추가하여 출력이 너무 커지지 않도록 권장합니다
6. get_metric_summary
모니터링 지표의 집계 TopN을 가져옵니다 (label_key 기준 그룹화).
파라미터:
namespace(str): 네임스페이스metric_name(str): 지표 이름label_key(str): 라벨 키, 예:VMUuid/HostUuidmetric_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 파라미터는 다음 연산자를 지원합니다:
연산자 | 의미 | 예시 |
| 같음 |
|
| 같지 않음 |
|
| 큼 |
|
| 크거나 같음 |
|
| 작음 |
|
| 작거나 같음 | |
| 퍼지 매칭(LIKE, 일부 버전은 |
|
| 퍼지 불일치 | |
| 정규식 매칭 |
|
| 정규식 불일치 | |
| 비어 있음 |
|
| 비어 있지 않음 | |
| 목록에 포함 |
|
| 목록에 미포함 |
|
conditions 형식:
{
"conditions": [
{"name": "uuid", "op": "=", "value": "xxx"},
{"name": "state", "op": "in", "value": "Running,Stopped"}
]
}예시 상호작용
사용자 질문: "UUID가 ae6e57a0으로 시작하는 VM의 상세 정보를 조회해줘"
AI는:
search_api(keywords=["Query", "Vm", "Instance"])호출describe_api(api_name="QueryVmInstance")호출execute_api(api_name="QueryVmInstance", parameters={"conditions": [{"name": "uuid", "op": "?=", "value": "ae6e57a0%"}]})호출
개발
# 克隆仓库
git clone https://github.com/ZSvirt/zsvirt-mcp-server/zsvirt-mcp-server.git
cd zsvirt-mcp-server
# 安装开发依赖
pip install -e ".[dev]"
# 运行测试
pytestLicense
MIT
Available Tools
6 toolsdescribe_apiA
获取指定 ZStack API 的详细参数说明
Args: api_name: API 名称,如 "QueryVmInstance"
Returns: API 的精简信息。对于 Query API,仅返回核心参数和 queryableFields。
| Name | Required | Description | Default |
|---|---|---|---|
| api_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It does disclose the return behavior, noting that Query APIs return only core parameters and queryableFields, which is useful context beyond the tool name. However, it does not mention potential errors, authentication needs, or other behavioral traits, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, with a clear purpose statement followed by Args and Returns sections. Each sentence earns its place, and the example parameter value makes the usage instantly understandable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an output schema, the description is largely complete. It covers the purpose, parameter meaning, and return behavior. It could be slightly stronger by clarifying why a user would choose describe_api over search_api, but that is more of a usage-guideline gap than a completeness issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that api_name is an API name and gives a concrete example, which is sufficient for this single-parameter tool. More detail about accepted formats or validation rules would push it higher, but the provided semantics are clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches detailed parameter documentation for a specified ZStack API, using a specific verb and resource. However, it does not explicitly differentiate itself from siblings like search_api or execute_api beyond the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you already know the API name and need its parameter details, illustrated by the example "QueryVmInstance". There is no explicit guidance on when to prefer this tool over search_api or execute_api, so usage context is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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%"} ] } )
| Name | Required | Description | Default |
|---|---|---|---|
| api_name | Yes | ||
| parameters | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the critical safety trait that only read-only APIs are allowed by default and that write operations require an explicit environment variable. It also states the return format (JSON) and documents pagination/field-selection behavior, which goes beyond the sparse schema. It could add error behavior or mutation warnings, but the key behavioral constraints are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a short purpose, a critical safety note, clearly labeled Args, Returns, and Example sections. Every part adds value: the read-only guard is front-loaded, the conditions format is essential, and the example demonstrates realistic usage. There is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic executor with an open-ended parameters object and no annotations, the description provides the essential information: how to name an API, how to format query conditions, pagination/field controls, and the default write restriction. It is slightly incomplete regarding non-query API parameter conventions and possible error behaviors, but the example and Query API details make it sufficiently complete for common use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by explaining api_name with an example and by detailing the parameters dict, including the conditions array format, default limit, offset, and fields selection. This adds substantial meaning beyond the bare schema. It does not document parameter formats for write APIs, but the generic nature of the tool makes exhaustive documentation impractical.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('执行 ZStack API' / execute ZStack API) and the target resource (ZStack API), with a concrete example (QueryVmInstance). It does not explicitly contrast itself with siblings like search_api or describe_api, so it misses the top tier for sibling differentiation, but the intended purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance: read-only APIs are allowed by default, and write APIs require setting ZSTACK_ALLOW_ALL_API=true. It also explains Query API conditions and pagination defaults, which helps an agent use the tool correctly. However, it does not explicitly state when this tool should be used instead of sibling tools, nor when to avoid it, leaving usage context mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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: 监控数据点列表
| Name | Required | Description | Default |
|---|---|---|---|
| labels | No | ||
| period | No | ||
| end_time | No | ||
| namespace | Yes | ||
| start_time | No | ||
| metric_name | Yes | ||
| summary_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses output-size scaling with a formula, explains multi-series behavior when labels are omitted, and gives practical warnings for avoiding overly large responses. It does not cover auth, timeout, or error behavior, but for a read-only metric query it is fairly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The structure is clear and purposeful: a one-line purpose, an Args section covering all parameters, and a valuable note about output size. The length is justified for a 7-parameter tool with no schema descriptions, though the Returns section adds little beyond what an output schema would already provide.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For 7 parameters, no annotations, and an output schema present, the description covers the essential call semantics, data-volume behavior, and return type. Remaining gaps are minor: behavior when start_time/end_time are omitted, and the exact effect of summary_only on the returned structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates completely by explaining every parameter with examples, units, defaults, and format notes. It also clarifies labels and summary_only semantics beyond the schema, and the volume formula gives practical meaning to start_time, end_time, and period.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with '获取 ZStack 监控数据' (get ZStack monitoring data), naming a clear verb and resource. It does not explicitly contrast with siblings like get_metric_summary or search_metric, so differentiation is inferred from names rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as get_metric_summary or search_metric. The description focuses on how to use parameters and warns about output size, but it never states when this tool is the right choice or when to prefer a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 列表
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | ||
| period | No | ||
| combine | No | sum | |
| end_time | No | ||
| aggregate | No | max | |
| label_key | Yes | ||
| namespace | Yes | ||
| start_time | No | ||
| metric_name | Yes | ||
| metric_names | No | ||
| threshold_op | No | ||
| threshold_value | No | ||
| resolve_resource | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that it retrieves aggregated TopN values, but does not say whether the call is read-only, what happens when start_time/end_time are omitted, whether threshold filtering is applied before or after aggregation, or how pagination/limits behave.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The structure is compact and effective: a precise summary line, a well-organized Args list, and a short Returns line. Every entry earns its place, and the parameter list is scannable. It loses one point because the Returns section is extremely terse, though an output schema exists to fill that gap.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters, no annotations, 0% schema coverage), the description covers parameter semantics well but leaves critical contextual gaps: when to use it versus sibling tools, whether time ranges are required, and how the TopN grouping behaves. It is a usable but incomplete definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so thoroughly: every one of the 13 parameters gets context, including concrete examples for namespace and metric_name, allowed values for aggregate and combine, format guidance for time parameters, and defaults for period and top_n. This is exactly the kind of compensation needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The one-line summary states a specific verb and resource: fetch aggregated TopN metric values grouped by a label_key. It is clear about the operation, but it does not explicitly differentiate itself from siblings like get_metric_data or search_metric; it relies on the phrase 'aggregated TopN' to imply the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to prefer this tool over alternatives such as get_metric_data or search_metric. It lists parameters and return type, but never states the conditions, prerequisites, or scenarios for which this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_apiA
根据关键词搜索 ZStack API
Args: keywords: 搜索关键词列表,如 ["Query", "Vm"] 或 ["Create", "Volume"] 支持驼峰拆分匹配,如搜索 "vm" 可以匹配 "QueryVmInstance" category: 可选,按分类过滤,如 "vm", "volume", "network" limit: 最多返回数量,默认 15
Returns: 匹配的 API 列表,包含名称、描述、分类、调用类型
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| category | No | ||
| keywords | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and largely meets it: it reveals the camelCase-splitting matching mode, optional category filtering, and the default cap of 15 results. It does not cover edge cases like empty results or case sensitivity, but for a read-only search tool the core behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of one front-loaded purpose line followed by compact Args and Returns sections. Every clause earns its place, and there is no repetition of schema structure, boilerplate, or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter search tool with an output schema, this is nearly complete: it covers purpose, matching behavior, all parameters, defaults, and return content. The only notable omissions are explicit sibling routing and edge-case behavior, which are minor at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% — the input schema contains only titles and types. The Args section fully compensates by defining keywords as a list with camelCase matching, category as an optional filter, and limit as a max-return-count defaulting to 15, adding operational meaning the schema itself lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description '根据关键词搜索 ZStack API' names a specific verb (search) and resource (ZStack API), and the Returns section clarifies that it yields API metadata (name, description, category, call type) rather than executing calls. This clearly differentiates it from siblings like execute_api and search_metric, whose targets are different.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete matching-behavior example ('vm' matches 'QueryVmInstance' via camelCase splitting), which helps an agent phrase queries effectively. However, it does not explicitly state when to prefer this tool over describe_api/execute_api or when to use search_metric instead; routing is left implied by sibling names rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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: 匹配的监控指标列表,包含名称、描述、命名空间、可用标签
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| keywords | Yes | ||
| namespace | No | ||
| match_mode | No | or | |
| prefer_namespaces | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full behavioral burden. It discloses non-obvious behaviors: camel-case keyword splitting, fuzzy namespace matching, match_mode AND/OR logic, and prefer_namespaces sorting. These details give an agent a realistic model of how search results are filtered and ranked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is front-loaded with the core purpose, then organized under Args and Returns headings. Each line provides necessary operational detail (examples, defaults) without excessive fluff, making the definition scannable and efficient for an LLM to consume.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists, the description still summarizes return contents (name, description, namespace, available labels) and fully documents all five parameters, defaults, and matching/sorting behaviors. With no annotations and no schema-level descriptions, nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates completely. Every parameter—keywords, namespace, limit, match_mode, prefer_namespaces—has a format explanation, examples, and defaults. For instance, keywords is shown with ['CPU', 'Usage'] and the camel-case splitting rule, and match_mode explicitly defines 'and'/'or' and the default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific statement: '搜索可用的 ZStack 监控指标' (search available ZStack monitoring metrics). It clearly identifies a search operation over a distinct resource (monitoring metrics), separating it from sibling tools like search_api or get_metric_data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the name and purpose—searching available metrics before fetching data—but no explicit guidance is provided about when to choose this tool over siblings such as get_metric_data or get_metric_summary. There are no when-not or alternative conditions, leaving an agent to infer the positioning.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.6- First observed
describe_api - First observed
execute_api - First observed
get_metric_data - First observed
get_metric_summary - First observed
search_api - First observed
search_metric
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: search_api/describe_api/execute_api form an API discovery-to-execution pipeline, while search_metric/get_metric_data/get_metric_summary form a metrics retrieval pipeline. Even the two 'search' tools are unambiguously separated by their targets (APIs vs metrics).
All tool names follow a consistent verb_noun snake_case pattern: search_, describe_, execute_, get_. The repetition of 'search' and 'get' is intentional and predictable, with the noun disambiguating the target.
Six tools is a well-scoped count for a server focused on two complementary workflows: API introspection/execution and metric querying. Each tool earns its place without redundancy or bloat.
The API workflow is complete with search, describe, and execute, covering discovery through invocation. The metrics workflow is also complete with search, raw data retrieval, and aggregated summary, with no obvious dead ends or missing operations.
Maintenance
Related MCP Connectors
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Query OneLens cloud-cost data in natural language: breakdowns, trends, cost centers. Read-only.
Interact with the Stitch API using natural language commands.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI assistants to manage multi-cloud resources (AWS, Azure, GCP) including resource operations, cost analysis, monitoring metrics, and security compliance checks through natural language commands.2610 npm2MIT
- FlicenseNot gradedqualityDmaintenanceEnables 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.-

PlugLayer MCP Serverofficial
AlicenseCqualityBmaintenanceEnables deploying and managing infrastructure via natural language, including project/domain management, compute nodes, image deployment, and CI/CD integration.70MIT
ZStack MCP Serverofficial
AlicenseAqualityDmaintenanceEnables AI to dynamically search, describe, and execute 2000+ ZStack Cloud APIs, plus query monitoring metrics and data.611MIT