Skip to main content
Glama

openstack-mcp

An MCP server that lets an AI assistant inspect and operate an OpenStack cloud — list instances, check quotas, read a stuck VM's console log, and (if you allow it) create and delete servers.

Works with any OpenStack deployment: CloudPe, OVHcloud, Infomaniak, university and research clouds, or a local DevStack. Anything openstacksdk can reach, this can drive.

Read-only by default. Writes require an explicit opt-in, and deletes require a second one. An assistant that can list your project cannot tear it down unless you decided it should be able to.

Quick start

Install from source (not yet on PyPI):

pipx install git+https://github.com/abhishekambad-leapswitch/openstack-mcp

Point it at a cloud. openstacksdk reads standard OpenStack config, so either a 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

...or the usual environment variables (OS_AUTH_URL, OS_APPLICATION_CREDENTIAL_ID, OS_APPLICATION_CREDENTIAL_SECRET). This server never stores or transmits your credentials itself — it hands off to openstacksdk, which resolves them the same way the openstack CLI does.

Claude Code

claude mcp add openstack --env OS_CLOUD=cloudpe -- openstack-mcp

Claude Desktop / Cursor / any MCP client

{
  "mcpServers": {
    "openstack": {
      "command": "openstack-mcp",
      "env": { "OS_CLOUD": "cloudpe" }
    }
  }
}

Then ask things like "which VMs are down?", "do I have quota for three more m1.large?", or "web-03 won't accept SSH — check its console log."

To confirm what you've wired up before trusting it, run a dry check — it prints the resolved config and exactly which tools are exposed, without serving or connecting:

openstack-mcp --check
openstack-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_volumes

Related MCP server: PlugLayer MCP Server

The safety model

Most cloud MCP servers hand an assistant the full API and hope for the best. This one is gated, because "delete the test VMs" is a sentence a model can misread.

Environment variable

Effect

(nothing set)

Read-only. 12 inspection tools. Write tools are not registered at all — the model cannot see or call them.

OPENSTACK_MCP_ALLOW_WRITE=true

Adds create_servers and power_action (14 tools).

OPENSTACK_MCP_ALLOW_DELETE=true

Adds delete_server (15 tools). Requires ALLOW_WRITE too — delete-without-write is treated as a config mistake and ignored.

OPENSTACK_MCP_MAX_ITEMS=50

Caps how many items any list tool returns.

OPENSTACK_MCP_CLOUD / OS_CLOUD

Which clouds.yaml entry to use.

Two further guardrails:

  • delete_server demands confirmation. You must pass confirm_name matching the resolved instance's exact name. Ask it to delete web-1 when the VM is called web-01 and it refuses rather than guessing.

  • Tools carry MCP annotations (read_only_hint, destructive_hint), so clients that surface risk to the user before running a tool can do so correctly.

Tool gating is enforced at registration, not by asking the model nicely — verified over a real stdio session in the test suite.

Tools

Read (always available)

Tool

Purpose

cloud_info

Which cloud, region, and project you're pointed at, and which operations are enabled

list_servers

Instances with status and IPs; filter by status or name substring

get_server

Full detail for one instance: flavor, image, key pair, security groups, addresses

list_flavors

Instance sizes with vCPU, RAM, disk

list_images

Bootable images

list_networks

Networks, flagging which are external

list_security_groups

Security groups and rule counts

list_keypairs

Registered SSH key pairs

list_volumes

Block storage volumes and what they're attached to

get_quotas

Compute quota usage vs limits

check_capacity

Whether N instances of a flavor fit in remaining quota, and what blocks it if not

get_console_output

Serial console log — for VMs that boot but are unreachable

Write (opt-in)

Tool

Purpose

create_servers

Create one or many instances; count > 1 names them <prefix>-01, -02, …

power_action

start / stop / reboot

delete_server

Delete one instance, with name confirmation (needs ALLOW_DELETE)

Two design choices worth knowing

Responses are deliberately small. openstacksdk returns 60+ attributes per server. Feeding all of that to a model is slow, expensive, and buries the useful fields, so every tool returns a trimmed projection — for a server that's id, name, status, and a flattened {network: [ips]} map instead of nova's nested address structure.

check_capacity exists so batches fail early. Asking for eight VMs and discovering the quota ceiling on the fifth leaves a half-built mess. This reports which of instances/vCPUs/RAM binds first, before anything is created. create_servers also reports partial failures per instance rather than throwing away what succeeded.

Development

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 .

The suite runs entirely offline against a fake openstacksdk connection — no cloud, no credentials, no charges. It covers the tool gating, the trimming, quota arithmetic, partial-failure reporting, and the delete confirmation.

Provisioning at scale

For standing up fleets declaratively rather than conversationally, see cloudpe-terraform-bulk-vm — Terraform for bulk VM creation on the same API.

License

MIT

Available Tools

12 tools
check_capacityA
Read-only

Check whether count instances of flavor fit inside the project's remaining quota, before attempting to create them.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
flavorYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_infoA
Read-only

Identify the cloud, region, and project these tools are pointed at, and report which operations are enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_outputA
Read-only

Read the serial console log of an instance -- the fastest way to diagnose a VM that boots but is unreachable.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNo
name_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_quotasA
Read-only

Report compute quota usage against limits: instances, vCPUs, and RAM.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_serverA
Read-only

Full detail for one instance: flavor, image, key pair, security groups, addresses, and metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
name_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_flavorsA
Read-only

List available flavors (instance sizes) with vCPU, RAM, and disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_imagesA
Read-only

List bootable images, optionally filtered by a name substring.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_keypairsA
Read-only

List SSH key pairs registered in this project.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_networksA
Read-only

List networks available to this project, flagging which are external.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_groupsB
Read-only

List security groups and how many rules each contains.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_serversA
Read-only

List instances with their status and IP addresses. Optionally filter by status (e.g. ACTIVE, SHUTOFF) or by a name substring.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
limitNo
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_volumesA
Read-only

List block storage volumes, their size, and what they are attached to.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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. Dates show when Glama detected each change.

  1. 12 tool updatesv0.1.0
    • First observedcheck_capacity
    • First observedcloud_info
    • First observedget_console_output
    • First observedget_quotas
    • First observedget_server
    • First observedlist_flavors
    • First observedlist_images
    • First observedlist_keypairs
    • First observedlist_networks
    • First observedlist_security_groups
    • First observedlist_servers
    • First observedlist_volumes

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct resource or action: list_* tools cover different collections (servers, flavors, images, networks, security groups, keypairs, volumes), get_server and get_quotas provide single-item or summary detail, check_capacity is specialized for quota feasibility, cloud_info handles context, and get_console_output is uniquely for diagnostics. No two tools overlap in purpose.

Naming Consistency4/5

Most tools follow a clear verb_noun convention (list_*, get_*, check_*). The only minor deviation is cloud_info, which uses a noun phrase instead of the verb-first pattern, but it's still descriptive and doesn't cause confusion.

Tool Count5/5

With 12 tools, the surface is well-scoped for an OpenStack introspection server. Each tool covers a meaningful piece of the domain (compute, network, storage, quotas) without redundancy or bloat, fitting comfortably within the ideal range.

Completeness2/5

The tool set is entirely read-only—no create, update, or delete operations for any resource (e.g., no create_server, delete_volume, update_security_group). While it excels at listing, retrieving, and capacity checking, it lacks lifecycle management capabilities that would be expected from a full OpenStack integration, leaving significant gaps for agents that need to modify infrastructure.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/abhishekambad-leapswitch/openstack-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server