openstack-mcp
openstack-mcp
AI 어시스턴트가 OpenStack 클라우드를 검사하고 운영할 수 있게 해주는 MCP 서버 — 인스턴스 나열, 할당량 확인, 멈춘 VM의 콘솔 로그 읽기, 그리고 (허용한 경우) 서버 생성 및 삭제.
모든 OpenStack 배포 환경에서 작동합니다: CloudPe, OVHcloud, Infomaniak, 대학 및 연구 클라우드, 또는 로컬 DevStack. openstacksdk가 도달할 수 있는 모든 것을 이 서버로 구동할 수 있습니다.
기본적으로 읽기 전용입니다. 쓰기 작업은 명시적 옵트인이 필요하며, 삭제 작업은 두 번째 옵트인이 필요합니다. 프로젝트를 나열할 수 있는 어시스턴트는 사용자가 허용하지 않는 한 프로젝트를 삭제할 수 없습니다.
빠른 시작
소스에서 설치합니다 (아직 PyPI에 없음):
pipx install git+https://github.com/abhishekambad-leapswitch/openstack-mcp클라우드를 지정합니다. openstacksdk는 표준 OpenStack 구성을 읽으므로 clouds.yaml을 사용하거나:
# ~/.config/openstack/clouds.yaml
clouds:
cloudpe:
auth_type: v3applicationcredential
auth:
auth_url: https://<your-region>.cloudpe.com:5000/v3
application_credential_id: <id>
application_credential_secret: <secret>
region_name: RegionOne...또는 일반적인 환경 변수(OS_AUTH_URL, OS_APPLICATION_CREDENTIAL_ID, OS_APPLICATION_CREDENTIAL_SECRET)를 사용합니다. 이 서버는 사용자의 자격 증명을 자체적으로 저장하거나 전송하지 않습니다 — openstacksdk에 위임하며, openstack CLI와 동일한 방식으로 자격 증명을 해석합니다.
Claude Code
claude mcp add openstack --env OS_CLOUD=cloudpe -- openstack-mcpClaude Desktop / Cursor / 모든 MCP 클라이언트
{
"mcpServers": {
"openstack": {
"command": "openstack-mcp",
"env": { "OS_CLOUD": "cloudpe" }
}
}
}그런 다음 "어떤 VM이 다운되었나?", "m1.large 세 대를 더 만들 수 있는 할당량이 있나?", "web-03이 SSH를 수락하지 않습니다 — 콘솔 로그를 확인해 주세요." 같은 질문을 해보세요.
신뢰하기 전에 연결 상태를 확인하려면 드라이 체크를 실행하세요 — 서비스하거나 연결하지 않고 해석된 구성과 노출된 도구를 정확히 출력합니다:
openstack-mcp --checkopenstack-mcp 0.1.0
cloud: cloudpe
mode: read-only
max items per list: 50
12 tools: check_capacity, cloud_info, get_console_output, get_quotas, get_server,
list_flavors, list_images, list_keypairs, list_networks, list_security_groups,
list_servers, list_volumesRelated MCP server: PlugLayer MCP Server
안전 모델
대부분의 클라우드 MCP 서버는 어시스턴트에게 전체 API를 넘겨주고 잘되길 바랍니다. 이 서버는 게이트가 있습니다. "테스트 VM 삭제"라는 문장은 모델이 오해할 수 있기 때문입니다.
환경 변수 | 효과 |
(아무것도 설정하지 않음) | 읽기 전용. 검사 도구 12개. 쓰기 도구는 전혀 등록되지 않습니다 — 모델이 보고 호출할 수 없습니다. |
|
|
|
|
| 모든 목록 도구가 반환하는 항목 수를 제한합니다. |
| 사용할 |
추가 안전장치 두 가지:
delete_server는 확인을 요구합니다. 해석된 인스턴스의 정확한 이름과 일치하는confirm_name을 전달해야 합니다. VM 이름이web-01인데web-1을 삭제하라고 요청하면 추측하지 않고 거부합니다.도구에는 MCP 주석이 포함됩니다 (
read_only_hint,destructive_hint). 따라서 도구 실행 전에 사용자에게 위험을 알리는 클라이언트가 올바르게 알릴 수 있습니다.
도구 게이팅은 모델에게 정중히 요청하는 방식이 아니라 등록 시점에 적용됩니다 — 테스트 스위트의 실제 stdio 세션에서 검증되었습니다.
도구
읽기 (항상 사용 가능)
도구 | 용도 |
| 연결된 클라우드, 리전, 프로젝트와 활성화된 작업을 표시 |
| 상태와 IP가 포함된 인스턴스; 상태 또는 이름 부분 문자열로 필터링 |
| 단일 인스턴스의 전체 세부 정보: 플레이버, 이미지, 키 페어, 보안 그룹, 주소 |
| vCPU, RAM, 디스크가 포함된 인스턴스 크기 |
| 부팅 가능한 이미지 |
| 네트워크, 외부 네트워크 표시 |
| 보안 그룹 및 규칙 수 |
| 등록된 SSH 키 페어 |
| 블록 스토리지 볼륨 및 연결 대상 |
| 컴퓨트 할당량 사용량 대비 한도 |
| 플레이버 인스턴스 N개가 남은 할당량에 들어가는지 여부와, 들어가지 않을 경우 무엇이 막는지 |
| 직렬 콘솔 로그 — 부팅은 되지만 연결할 수 없는 VM용 |
쓰기 (옵트인)
도구 | 용도 |
| 하나 또는 여러 인스턴스 생성; |
| start / stop / reboot |
| 이름 확인과 함께 인스턴스 하나 삭제 ( |
알아두면 좋은 두 가지 설계 선택
응답은 의도적으로 작게 유지됩니다. openstacksdk는 서버당 60개 이상의 속성을 반환합니다. 그 모든 것을 모델에 전달하면 느리고 비용이 많이 들며 유용한 필드가 묻힙니다. 따라서 모든 도구는 정리된 프로젝션을 반환합니다 — 서버의 경우 id, 이름, 상태, 그리고 nova의 중첩 주소 구조 대신 평면화된 {network: [ips]} 맵입니다.
check_capacity는 배치가 조기에 실패하도록 존재합니다. VM 8개를 요청하고 다섯 번째에서 할당량 상한을 발견하면 반쯤 만들어진 난장판이 남습니다. 이 도구는 아무것도 생성되기 전에 인스턴스/vCPU/RAM 중 무엇이 먼저 제한에 걸리는지 보고합니다. create_servers 또한 성공한 것을 버리지 않고 인스턴스별 부분 실패를 보고합니다.
개발
git clone https://github.com/abhishekambad-leapswitch/openstack-mcp
cd openstack-mcp
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest && ruff check .테스트 스위트는 가짜 openstacksdk 연결을 대상으로 완전히 오프라인으로 실행됩니다 — 클라우드, 자격 증명, 비용이 없습니다. 도구 게이팅, 정리, 할당량 산술, 부분 실패 보고, 삭제 확인을 다룹니다.
대규모 프로비저닝
대화식이 아니라 선언적으로 플릿을 구축하려면 cloudpe-terraform-bulk-vm을 참조하세요 — 동일한 API에서 대량 VM 생성을 위한 Terraform입니다.
라이선스
MIT
Available Tools
12 toolscheck_capacityARead-only
Check whether count instances of flavor fit inside the project's
remaining quota, before attempting to create them.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| flavor | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description aligns with these by describing a read-only check. It adds value by specifying that the tool checks remaining quota, which is not explicitly stated in the annotations. No contradiction exists.
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 a single, concise sentence that is front-loaded with the main action and includes both parameters. There is no redundancy or extra information, making it efficient and easy to parse.
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?
The tool has an output schema, so return values are handled externally. The description covers the essential scenario (pre-creation check) and is sufficient for a simple tool. It could mention that results may be stale due to openWorldHint, but that is not critical for basic usage.
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?
The description directly explains both parameters: '`count` instances of `flavor`' clarifies that 'count' is the number of instances and 'flavor' is the instance type. Since schema description coverage is 0%, this inline explanation fully compensates and adds meaning beyond the raw schema.
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's purpose: 'Check whether `count` instances of `flavor` fit inside the project's remaining quota'. It uses a specific verb (check) and resource (capacity/quota), and explicitly distinguishes from sibling tools like get_quotas by focusing on fit rather than just returning quota values.
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 usage context with the phrase 'before attempting to create them', indicating when to use this tool (pre-creation). However, it does not explicitly mention alternatives or when not to use it, though the context is clear enough for an agent to select it appropriately over similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_infoARead-only
Identify the cloud, region, and project these tools are pointed at, and report which operations are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the tool's safety is known. The description adds that it reports which operations are enabled, which is a helpful behavioral detail, but it doesn't elaborate on the expected output format, variability, or any other side effects. With annotations covering the core safety profile, this is adequate but not rich.
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 a single, well-structured sentence that front-loads the primary purpose. Every word adds value without redundancy, making it highly concise and effective.
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 zero-parameter tool with an output schema, the description is sufficiently complete. It names the key outputs (cloud, region, project, enabled operations) and the context ('these tools are pointed at'). The low complexity of the tool doesn't warrant further elaboration.
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?
There are no parameters, so the description has no need to explain them. Schema coverage is 100% (empty schema is fully described). The baseline for zero parameters is 4, and the description doesn't need to compensate for missing parameter info.
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 what the tool does: identify the cloud, region, and project the tools are pointed at, and report enabled operations. It uses a specific verb ('identify') and resource ('cloud, region, project') and distinguishes itself from sibling tools that focus on individual resources rather than the environment.
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?
It provides clear context on what the tool is for (checking the environment) but lacks explicit guidance on when to use it versus alternatives or when not to use it. The distinction from siblings is implied by the focus on environment-level info, but no specific exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_console_outputARead-only
Read the serial console log of an instance -- the fastest way to diagnose a VM that boots but is unreachable.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | ||
| name_or_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is already conveyed. The description adds the diagnostic intent but does not disclose any additional behavioral traits such as potential rate limits, output size, or required permissions. Since annotations cover the read-only nature, the description is adequate but not rich.
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 extremely concise — two short sentences packed with purpose and use case. There is no fluff or redundancy. Every part adds value, and the key action is front-loaded.
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 simplicity of the tool (2 params, output schema present, read-only annotations), the description covers the core action and purpose. However, the lack of parameter documentation is a notable gap in an otherwise complete picture, and the description could benefit from noting that it requires an existing VM identifier.
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?
The description provides no explanation of the parameters 'name_or_id' or 'lines'. With schema description coverage at 0%, the description must compensate, and it fails to do so. It does not even hint that one must specify an instance identifier or that the number of lines is configurable.
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's purpose: 'Read the serial console log of an instance' and adds a specific use case ('fastest way to diagnose a VM that boots but is unreachable'). It uses a specific verb (Read) and resource (serial console log of an instance), and the differentiation from sibling tools (like get_server) is implicit but clear.
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 clear when-to-use scenario: 'the fastest way to diagnose a VM that boots but is unreachable.' It does not explicitly mention alternatives or when not to use it, but the context is sufficient for an agent to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotasARead-only
Report compute quota usage against limits: instances, vCPUs, and RAM.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and openWorldHint=true, so the tool is known to be a safe read operation. The description adds that it reports usage against limits, indicating it returns a comparison. It does not detail pagination or response structure, but with the output schema present and readOnlyHint covering safety, the description adds adequate value beyond annotations.
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 a single, concise sentence that is front-loaded with the verb and resource. It provides essential information without any superfluous words. Each word contributes to understanding the tool's purpose.
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 low complexity (no parameters, no nested objects) and the presence of an output schema, the description is sufficient. It clearly states what is reported. It might mention whether it covers all regions or projects, but with openWorldHint and low complexity, the description is complete enough for an agent to select and invoke it correctly.
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?
The tool has zero parameters, so there is no parameter schema to clarify. The schema description coverage is 100% (vacuously true). The description does not need to add parameter semantics. Baseline for 0 params is 4, and the description adds value by specifying the scope of the report without needing parameter details.
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 uses a specific verb 'Report' and explicitly names the resource 'compute quota usage' and the key attributes measured ('instances, vCPUs, and RAM'). This clearly distinguishes it from sibling tools like list_servers or list_flavors, which list entities rather than report usage against limits.
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 that this is the tool to check quota usage and limits, which is distinct from capacity check (check_capacity). It does not explicitly state when not to use it or name alternative tools, but the context implies its usage in compute resource planning. Given the sibling set includes check_capacity, some extra clarity could be added, but the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_serverARead-only
Full detail for one instance: flavor, image, key pair, security groups, addresses, and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| name_or_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the readOnlyHint annotation by listing the specific fields returned (flavor, image, key pair, etc.). This clarifies what 'full detail' means. It does not disclose potential errors or edge cases, but for a read-only operation with annotation, this is sufficient.
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 a single, concise sentence that is front-loaded with the core purpose ('Full detail for one instance') and then lists the key fields. No unnecessary words.
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 is a simple get-by-identifier operation with an existing output schema and read-only annotations, the description provides sufficient context by listing the returned attributes. It doesn't mention error cases, but that is not critical for such a straightforward read operation.
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?
The description mentions 'one instance' but does not explicitly explain the 'name_or_id' parameter. The parameter name is self-explanatory, and the description implies identification without stating it directly. Since schema coverage is 0%, the description should compensate more but doesn't fully.
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 'Full detail for one instance' and enumerates specific attributes (flavor, image, key pair, security groups, addresses, metadata), making the tool's purpose unambiguous and distinguishing it from list-type siblings like list_servers.
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 use for fetching details of a single instance, but does not explicitly state when to prefer this over siblings like list_servers or get_console_output. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flavorsARead-only
List available flavors (instance sizes) with vCPU, RAM, and disk.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and there's no destructive action, so the description does not need to repeat that. The description adds useful context by specifying that flavors are instance sizes and that the output includes vCPU, RAM, and disk, which goes beyond the annotations. No contradictions.
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?
One concise sentence, front-loaded with the verb 'List' and immediately states the resource and key attributes. No redundant information.
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?
While the tool is simple and has an output schema, the description omits any mention of the 'limit' parameter. For a listing tool with an optional limit, the description should at least hint at its purpose (e.g., 'with optional limit on number of flavors returned'). Without that, the description is incomplete for the parameter. However, given it's a simple list and output schema exists, it's otherwise sufficient.
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?
The description does not mention the 'limit' parameter at all. Schema coverage is 0% (the schema has no description field), so the description must compensate, but it doesn't. An agent would not know what 'limit' does without external knowledge, making this a significant gap.
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's purpose: 'List available flavors (instance sizes) with vCPU, RAM, and disk.' It uses a specific verb and resource, and distinguishes itself from sibling tools like list_servers or list_images by focusing on flavors and their attributes.
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 implicitly indicates usage: to get a list of flavor options with resource specs. However, it does not explicitly state when to use this over alternatives or any exclusions. Given the simplicity of the tool and the sibling list (cloud_info, list_servers, etc.), the purpose is clear enough, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_imagesARead-only
List bootable images, optionally filtered by a name substring.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true and openWorldHint=true, and the description aligns with these, so no contradiction. However, the description does not add behavioral context beyond the annotations, such as whether the list is paginated, sorted, or includes all image details. With openWorldHint=true, the agent might expect filtered results but the description doesn't explain the default visibility of all images. The description adds some value by stating 'bootable' and the filter, but lacks details on return behavior.
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 a single sentence, concise and front-loaded with the primary action. It effectively communicates the core purpose without unnecessary detail. Every word earns its place, and the optional filter is mentioned succinctly.
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 has an output schema (though not detailed here) and annotations indicating read-only and open-world behavior, the description is sufficiently complete for a simple list operation. The optional name filter is mentioned, and the limit parameter is self-explanatory. The tool is not overly complex, and the description covers the key aspects, though it could explicitly note pagination or output structure, but the output schema likely handles that.
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?
The schema has two optional parameters: name and limit, with 0% description coverage. The description mentions 'filtered by a name substring,' which partially explains the name parameter, but the limit parameter is not explained. Since the schema already provides parameter names, the description adds minimal additional semantics. Baseline 3 is appropriate given the schema exists, but coverage is low, so description should compensate more; it does provide the filter hint, earning a 3.
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 lists bootable images with an optional name substring filter. The verb 'list' and resource 'bootable images' are specific, and the 'optionally filtered' clause adds scope. It is distinguishable from siblings like list_servers, list_flavors, etc., though it doesn't explicitly contrast with them.
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 when to use this tool—when you need to list bootable images—but does not provide explicit guidance on when not to use it or mention alternatives. For instance, it doesn't clarify that get_server or cloud_info might be used for other image-related queries. The optional filtering is mentioned, but no context on the filter syntax or purpose beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_keypairsARead-only
List SSH key pairs registered in this project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and openWorldHint=true, which already indicate a safe, non-mutating operation. The description adds that it lists key pairs registered in this project, giving context about the scope (project-level). It does not contradict annotations and adds minimal extra value, but since annotations cover the key aspects, a 4 is appropriate for adding the project scope.
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 a single, concise sentence that fully expresses the purpose. No filler words. Perfect front-loading.
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 has no parameters, annotations declaring read-only and open world, and the description clearly states the purpose, the description is complete enough. An output schema exists, so return values are documented elsewhere. The only minor gap is not specifying whether the list includes all key pairs or just those associated with the current user, but this is not critical.
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?
The tool has zero parameters and the schema coverage is 100% (vacuously, as there are no properties). The description does not need to explain parameters, and there is nothing missing. Baseline for 0 params is 4, which is appropriate here.
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 action (list) and the resource (SSH key pairs), and scopes it to a project. It is distinct from siblings like list_servers and list_networks because the resource is unique, though it could have been more explicit about the project scope being the current one.
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 usage for retrieving key pair information, but does not provide explicit guidance on when to use this tool versus alternatives. Given the sibling tools are all listing operations for different resources, the resource name alone is sufficient to differentiate, but explicit 'when to use' guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_networksARead-only
List networks available to this project, flagging which are external.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds behavioral context beyond annotations by noting that the tool flags external networks and limits to project-scoped networks. This extra detail helps the agent understand what the output will contain without contradicting the annotations.
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 a single sentence, front-loaded with the verb and resource, and includes a key differentiator ('flagging which are external') with zero wasted words. It is concise and structured effectively.
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?
The tool is simple with one optional parameter and an output schema, so the description covers the core action. However, it omits any mention of the 'limit' parameter behavior or what 'external' means exactly, which could leave the agent uncertain about pagination or result interpretation. Given the existence of an output schema, return values are defined, but the missing parameter semantics slightly reduce completeness.
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 coverage is 0% because the description does not mention the 'limit' parameter at all. With only one optional parameter, the description should compensate by explaining its usage (e.g., 'limits the number of networks returned'), but it provides no parameter information. The parameter name 'limit' is self-explanatory, but the description fails to add any semantic value beyond the raw schema.
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 explicitly states the verb ('List'), the resource ('networks'), and the scope ('available to this project'), and adds a unique detail ('flagging which are external') that distinguishes it from sibling list tools like list_servers or list_images. This clearly defines the tool's purpose.
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 clear context by specifying 'available to this project', which implies the tool is scoped to the current project and should be used when needing network information. It does not explicitly exclude alternatives or mention when not to use it, but the context is unambiguous. No alternative tools are named, but the purpose is distinct enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_security_groupsBRead-only
List security groups and how many rules each contains.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and openWorldHint, which already convey that this is a safe read operation. The description adds the detail about rule counts, which is a small behavioral context, but it doesn't disclose potential rate limits, whether it returns all groups at once, or if it supports pagination. Given the annotations, the description partially complements them but does not go beyond basic expectations.
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 a single concise sentence that communicates the core purpose without excess. It is front-loaded and efficient.
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?
The tool has an output schema, but the description does not explain the return structure beyond rule counts. Given the simple parameter set and read-only nature, the description is minimally adequate but lacks details on pagination or ordering that could be important. It is complete enough for a basic list operation but not exemplary.
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?
With schema description coverage at 0%, the description must compensate for the parameter 'limit', but it does not mention it at all. The description ignores the limit parameter, leaving the agent without guidance on how to use it (e.g., whether it's for pagination or limiting results). This is a significant gap.
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 lists security groups and includes the count of rules each contains, which distinguishes it from sibling tools like list_networks or list_servers. However, it does not explicitly mention the scope (e.g., project-wide or all groups) that could further differentiate it.
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 does not provide guidance on when to use this tool versus alternatives, such as get_server for detailed info or list_keypairs. It lacks any mention of filtering, pagination, or context-specific usage, leaving the agent to infer when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_serversARead-only
List instances with their status and IP addresses. Optionally filter by status (e.g. ACTIVE, SHUTOFF) or by a name substring.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| limit | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, which cover the safety profile. The description adds value by disclosing the filtering behavior (status/name) and the return of IP addresses, but it doesn't discuss pagination, limit semantics, or other operational traits beyond that. Given the annotation coverage, this is a reasonable but not extensive transparency level.
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 two sentences, front-loaded with the core purpose and filters, with no redundant or extraneous content. Every word contributes to understanding the tool's function.
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 list operation with an output schema (which likely explains returned fields), the description adequately covers the main purpose and filtering options. The main gap is the unmentioned 'limit' parameter, but overall it is reasonably complete for its complexity and existing structured metadata.
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?
The schema has 0% description coverage, so the description must compensate. It clarifies 'status' (with examples ACTIVE, SHUTOFF) and 'name' (substring filter), but it entirely omits the 'limit' parameter, leaving its meaning (likely max results) ambiguous. This partial coverage meets a minimum but leaves a significant gap.
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 action ('List') and resource ('instances') along with specific output fields ('status and IP addresses'). It distinguishes itself from sibling tools like 'get_server' by indicating it lists multiple instances rather than retrieving a single one, and it's not tautological.
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 explicit usage context by mentioning optional filters for status and name substring, which helps agents know how to narrow results. However, it doesn't explicitly mention when to use this tool instead of alternatives (e.g., get_server) or any exclusion criteria, so it falls short of an explicit 'when-not' guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_volumesARead-only
List block storage volumes, their size, and what they are attached to.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety and open-world behavior are covered. The description adds the useful detail that volume size and attachments are returned, but it does not disclose pagination behavior, limit semantics, or any additional operational traits beyond what annotations provide.
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 a single, front-loaded sentence with no wasted words. It communicates the core purpose and key output aspects efficiently.
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 read-only list tool with one optional parameter, an output schema, and open-world annotation, the description is largely complete. It names the resource and salient output fields; the main gap is not describing the 'limit' parameter behavior, though the schema partially covers it.
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?
The schema contains one optional 'limit' parameter with default null, but schema description coverage is 0%. The description does not explain what 'limit' controls (e.g., maximum number of volumes returned, pagination size), so it fails to compensate for the lack of schema-level descriptive text.
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's action ('List') and resource ('block storage volumes'), and adds specific output details (size and attachments). It distinguishes itself from sibling list tools like list_servers and list_networks by naming the volume resource type.
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 explicit guidance on when to use this tool versus alternatives, no exclusions, and no stated fallback behavior. It only implies usage by naming the resource, which is not enough to satisfy this dimension.
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.
12 tool updates
v0.1.0- First observed
check_capacity - First observed
cloud_info - First observed
get_console_output - First observed
get_quotas - First observed
get_server - First observed
list_flavors - First observed
list_images - First observed
list_keypairs - First observed
list_networks - First observed
list_security_groups - First observed
list_servers - First observed
list_volumes
TDQS
Scored across 12 tools
Each tool targets a distinct resource or check: servers, flavors, images, networks, security groups, keypairs, volumes, quotas, and console output. Even get_quotas and check_capacity are clearly separated by descriptions: one reports usage, the other tests fit before creation. There is no meaningful overlap or ambiguity.
The vast majority of tools follow a clear list_<resource> or get_<resource> pattern, making the set predictable. The only outlier is cloud_info, which is a noun phrase rather than a verb_noun command, but it does not cause confusion.
Twelve tools is well-scoped for an OpenStack inspection and capacity-planning server. Each tool covers a distinct resource or diagnostic operation, and none feel redundant or unnecessary. The count is appropriate for the apparent purpose.
The set provides solid read-only coverage of compute, storage, network, security, and quota resources, but it has notable dead ends: check_capacity implies instance creation, yet no create_server exists, and security groups only expose rule counts rather than actual rules. For broader OpenStack management workflows, lifecycle operations and deeper network/security-group details are missing.
Maintenance
Related MCP Connectors
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Manage Rackspace Spot Kubernetes Cloudspaces, node pools, and VMs from your AI assistant.
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
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

PlugLayer MCP Serverofficial
AlicenseCqualityBmaintenanceEnables deploying and managing infrastructure via natural language, including project/domain management, compute nodes, image deployment, and CI/CD integration.70MIT- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to manage Massed Compute GPU instances, including browsing inventory, launching and managing VMs, and auditing billing.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to manage OpenStack cloud resources including compute, images, identity, network, and block storage via the Model Context Protocol.19Apache 2.0