Sandbox
@call518/MCP-OpenStack-Ops

MCP server for OpenStack operations and monitoring

This project connects an agent to OpenStack through MCP so it can list, inspect, and manage cloud resources from the same place it reasons and writes. It is built around project-scoped access, default read-only behavior, and tool groups for compute, networking, storage, identity, Heat, and Octavia.

44 stars13 forksPythonUpdated 11d ago
Who it's for

Builders who want their agent to inspect and operate an OpenStack project safely from Claude, Open WebUI, or another MCP client.

What it delivers

You can ask your agent to check OpenStack status, inspect resources, and run approved changes without switching to the cloud console.

What it does

Project-scoped access

Every tool enforces the configured `OS_PROJECT_NAME` so actions stay inside one tenant.

Read-only by default

Modify tools only register when `ALLOW_MODIFY_OPERATIONS=true`, which keeps normal runs auditable.

Broad OpenStack coverage

The server provides 90+ tools across compute, networking, storage, images, identity, Heat, and load balancing.

Bulk and filtered actions

Several setters accept comma-delimited targets or filters so you can act on multiple resources at once.

Status and usage tools

Tools like `get_service_status`, `get_resource_monitoring`, and quota queries surface service health and capacity.

Multiple transport options

The repo includes `stdio` and `streamable-http` setups plus Docker packaging for local and proxy-based use.

How to get it

  1. 1Run
    # Start all services
    docker-compose up -d
    
    # Check logs
    docker-compose logs mcp-server
    docker-compose logs mcpo-proxy

README

MCP-OpenStack-Ops

MCP OpenStack Operations Server: A comprehensive MCP (Model Context Protocol) server providing OpenStack project management and monitoring capabilities with built-in safety controls and single-project scope.

License: MIT Python Docker Pulls BuyMeACoffee

Deploy to PyPI with tag PyPI PyPI - Downloads


Architecture & Internal (DeepWiki)

Ask DeepWiki


Features

  • Project-Scoped Operations: Every tool enforces the configured OS_PROJECT_NAME, validating resource ownership so actions stay inside a single tenant.
  • Safety-Gated Writes: Modify (set_*) tooling only registers when ALLOW_MODIFY_OPERATIONS=true, keeping default deployments read-only and auditable.
  • 90+ Purpose-Built Tools: Broad coverage across compute, networking, storage, images, identity, Heat, and Octavia load balancing tasks—all constrained to the current project.
  • Bulk & Filtered Actions: Instance, volume, network, image, snapshot, and keypair managers accept comma-delimited targets or filter criteria to orchestrate bulk changes intentionally.
  • Post-Action Feedback & Async Guidance: Mutating tools reuse a shared result handler that adds emoji status checks, asynchronous timing notes, and follow-up verification commands.
  • Monitoring & Usage Insights: get_service_status, get_resource_monitoring, get_usage_statistics, and quota tools surface service availability, utilization, and capacity for the active project.
  • Unified Instance Queries: The get_instance tool consolidates name, ID, status, and free-form search paths with pagination plus summary/detailed modes.
  • Server Insight & Audit Trail: Dedicated tools expose server events, hypervisor details, availability zones, quotas, and resource ownership to speed diagnostics.
  • Load Balancer Management: Octavia tools cover listeners, pools, members, health monitors, flavors, quotas, and amphora operations with the same safety gates.
  • Connection & Deployment Flexibility: Connection caching, configurable service endpoints, Docker packaging, and both stdio/streamable-http transports support proxy/bastion and multi-project setups.

⚠️ Compatibility Notice: This MCP server is developed and optimized for OpenStack Epoxy (2025.1) as the primary target environment. However, it is compatible with most modern OpenStack releases (Dalmatian, Caracal, Bobcat, etc.) as the majority of APIs remain consistent across versions. Only a few specific API endpoints may require adaptation for full compatibility with older releases.

🚧 Coming Soon: Dynamic multi-version OpenStack API compatibility is actively under development and will be available in upcoming releases, providing seamless support for all major OpenStack deployments automatically.

🔧 OpenStackSDK Version Customization for Older Releases

Officially Supported Releases:

  • ✅ OpenStack Epoxy (2025.1) - Fully tested
  • ✅ OpenStack Dalmatian (2024.2) - Fully tested

For older OpenStack releases (Wallaby, Caracal, Bobcat, etc.), you may need to customize the OpenStackSDK version to match your environment. The SDK version must be changed in BOTH files:

Step 1: Modify Dockerfile.MCP-Server

RUN pip install \
        'uv>=0.8.5' \
        'mcpo>=0.0.17' \
        'fastmcp>=2.12.3' \
        'aiohttp>=3.12.0' \
        'openstacksdk==3.1.1' \  # ← Change to your required version (e.g., 3.1.1 for Wallaby)
        'python-dotenv>=1.0.0'

Step 2: Modify pyproject.toml

dependencies = [
    "fastmcp>=2.12.3",
    "openstacksdk==3.1.1",  # ← Must match Dockerfile version
    "python-dotenv>=1.1.1",
    # ... other dependencies
]

Step 3: Rebuild Docker Image

docker-compose build --no-cache mcp-server
docker-compose up -d

OpenStackSDK Version Reference:

OpenStack ReleaseRecommended SDK VersionNotes
Epoxy (2025.1)>=3.3.0Current default
Dalmatian (2024.2)>=3.2.0Fully compatible
Caracal (2024.1)>=3.1.0May require testing
Bobcat (2023.2)>=3.0.0May require testing
Wallaby (2021.1)==3.1.1Downgrade required

⚠️ Important: Both Dockerfile.MCP-Server and pyproject.toml must have the same version to avoid dependency conflicts during container runtime.


Screenshots

OpenStack Dashboard (Epoxy 2025.1)

OpenStack Dashboard (Epoxy 2025.1)

MCP Query Example - Cluster Status

Example Cluster Status


🆕 Latest Enhancements (v1.x)

Bulk Operations & Filter-based Targeting

Revolutionary approach to resource management enabling one-step operations:

# Traditional approach (multiple steps):
1. search_instances("test") → get list
2. set_instance("vm1", "stop") → stop individually  
3. set_instance("vm2", "stop") → stop individually

# NEW enhanced approach (single step):
set_instance(action="stop", name_contains="test")  # ✨ Stops ALL instances containing "test"

Supported Tools with Enhanced Capabilities:

  • set_instance: Bulk lifecycle management with filtering (name_contains, status, flavor_contains, image_contains)
  • set_volume: Bulk volume operations with filtering (name_contains, status, size filtering)
  • set_image: Bulk image management with filtering (name_contains, status)
  • set_networks: Bulk network operations with filtering (name_contains, status)
  • set_keypair: Bulk keypair management with filtering (name_contains)
  • set_snapshot: Bulk snapshot operations with filtering (name_contains, status)

Input Format Flexibility:

# Single resource
resource_names="vm1"

# Multiple resources (comma-separated)
resource_names="vm1,vm2,vm3"

# JSON array format
resource_names='["vm1", "vm2", "vm3"]'

# Filter-based (automatic target identification)
name_contains="test", status="ACTIVE"

Post-Action Status Verification

Every operation now provides immediate feedback with visual indicators:

✅ Bulk Instance Management - Action: stop
📊 Total instances: 3
✅ Successes: 2
❌ Failures: 1

Post-Action Status:
🟢 test-vm-1: SHUTOFF  
🟢 test-vm-2: SHUTOFF
🔴 test-vm-3: ERROR

Unified Resource Queries

New consolidated get_instance tool replaces multiple separate tools:

  • ❌ Old: get_instance_details, get_instance_info, get_instance_status, get_instance_network_info
  • ✅ New: get_instance(instance_names="vm1,vm2") - Single tool, comprehensive information

📊 OpenStack CLI vs MCP Tools Mapping

Detailed Mapping by Category

1. 🖥️ Compute (Nova)

OpenStack CLI CommandMCP ToolStatusNotes
openstack server listget_instanceNEW UNIFIED - Pagination, filtering support
openstack server showget_instanceENHANCED - Replaces get_instance_by_name, get_instance_by_id
openstack server createset_instance (action="create")ENHANCED - Bulk creation support
openstack server start/stop/rebootset_instanceENHANCED - Bulk operations with filtering
openstack server deleteset_instance (action="delete")ENHANCED - Bulk deletion with name_contains filtering
openstack server backup createset_server_backupBackup creation with rotation
openstack server image createset_instance (action="snapshot")Image/snapshot creation
openstack server shelve/unshelveset_instanceInstance shelving
openstack server lock/unlockset_instanceInstance locking
openstack server pause/unpauseset_instanceInstance pausing
openstack server suspend/resumeset_instanceInstance suspension
openstack server resizeset_instance (action="resize")Instance resizing
openstack server resize confirmset_instance (action="confirm_resize")Resize confirmation
openstack server resize revertset_instance (action="revert_resize")Resize revert
openstack server rebuildset_instance (action="rebuild")Instance rebuilding
openstack server rescue/unrescueset_instanceRecovery mode
openstack server migrateset_server_migration (action="migrate")Live migration
openstack server evacuateset_server_migration (action="evacuate")Server evacuation
openstack server migration listset_server_migration (action="list")Migration listing
openstack server migration showset_server_migration (action="show")Migration details
openstack server migration abortset_server_migration (action="abort")Migration abort
openstack server migration confirmset_server_migration (action="confirm")Migration confirmation
openstack server migration force completeset_server_migration (action="force_complete")Force migration completion
openstack server add networkset_server_network (action="add_network")Network attachment
openstack server remove networkset_server_network (action="remove_network")Network detachment
openstack server add portset_server_network (action="add_port")Port attachment
openstack server remove portset_server_network (action="remove_port")Port detachment
openstack server add floating ipset_server_floating_ip (action="add")Floating IP association
openstack server remove floating ipset_server_floating_ip (action="remove")Floating IP disassociation
openstack server add fixed ipset_server_fixed_ip (action="add")Fixed IP addition
openstack server remove fixed ipset_server_fixed_ip (action="remove")Fixed IP removal
openstack server add security groupset_server_security_group (action="add")Security group addition
openstack server remove security groupset_server_security_group (action="remove")Security group removal
openstack server add volumeset_server_volume (action="attach")Volume attachment
openstack server remove volumeset_server_volume (action="detach")Volume detachment
openstack server setset_server_properties (action="set")Server property setting
openstack server unsetset_server_properties (action="unset")Server property unsetting
openstack server dump createset_server_dumpServer dump creation
openstack server event listget_server_eventsServer event tracking
openstack server group listget_server_groupsServer group listing
openstack server group create/deleteset_server_groupServer group management
openstack flavor listget_flavor_list (via cluster_status)Flavor listing
openstack flavor create/deleteset_flavorFlavor management
openstack keypair listget_keypair_listKeypair listing
openstack keypair create/deleteset_keypairKeypair management
openstack hypervisor listget_hypervisor_detailsHypervisor querying
openstack availability zone listget_availability_zonesAvailability zone listing

2. 🌐 Network (Neutron)

OpenStack CLI CommandMCP ToolStatusNotes
openstack network listget_network_detailsDetailed network information
openstack network showget_network_details (name param)Specific network query
openstack network createset_networks (action="create")ENHANCED - Bulk network creation
openstack network deleteset_networks (action="delete")ENHANCED - Bulk deletion with filtering
openstack network setset_networks (action="update")ENHANCED - Bulk updates
openstack subnet listget_network_details (includes subnets)Subnet information included
openstack subnet create/deleteset_subnetsSubnet management
openstack router listget_routersRouter listing
openstack router create/delete(Not yet implemented)🚧Router management
openstack floating ip listget_floating_ipsFloating IP listing
openstack floating ip createset_floating_ip (action="create")Floating IP creation
openstack floating ip deleteset_floating_ip (action="delete")Floating IP deletion
openstack floating ip setset_floating_ip (action="set")Floating IP property setting
openstack floating ip showset_floating_ip (action="show")Floating IP details
openstack floating ip unsetset_floating_ip (action="unset")Floating IP property clearing
openstack floating ip pool listget_floating_ip_poolsFloating IP pool listing
openstack floating ip port forwarding createset_floating_ip_port_forwarding (action="create")Port forwarding creation
openstack floating ip port forwarding deleteset_floating_ip_port_forwarding (action="delete")Port forwarding deletion
openstack floating ip port forwarding listset_floating_ip_port_forwarding (action="list")Port forwarding listing
openstack floating ip port forwarding setset_floating_ip_port_forwarding (action="set")Port forwarding updates
openstack floating ip port forwarding showset_floating_ip_port_forwarding (action="show")Port forwarding details
openstack security group listget_security_groupsSecurity group listing
openstack security group create/delete(Not yet implemented)🚧Security group management
openstack port listget_network_details (includes ports)Port information included
openstack port create/deleteset_network_portsPort management
openstack network qos policy list(Not yet implemented)🚧QoS policy listing
openstack network qos policy createset_network_qos_policiesQoS policy management
openstack network agent listget_service_status (includes agents)Network agents
openstack network agent setset_network_agentsNetwork agent management

3. 💾 Storage (Cinder)

OpenStack CLI CommandMCP ToolStatusNotes
openstack volume listget_volume_listVolume listing
openstack volume showget_volume_list (filtering)Specific volume query
openstack volume create/deleteset_volumeVolume creation/deletion
openstack volume setset_volume (action="modify")Volume property modification
openstack volume type listget_volume_typesVolume type listing
openstack volume type create/delete(Not yet implemented)🚧Volume type management
openstack volume snapshot listget_volume_snapshotsSnapshot listing
openstack volume snapshot create/deleteset_snapshotSnapshot management
openstack backup list(Not yet implemented)🚧Backup listing
openstack backup create/deleteset_volume_backupsVolume backup management
openstack volume transfer request list(Not yet implemented)🚧Volume transfer
openstack server volume listget_server_volumesServer volume listing
openstack server add/remove volumeset_server_volumeServer volume attach/detach
openstack volume group list(Not yet implemented)🚧Volume group listing
openstack volume group createset_volume_groupsVolume group management
openstack volume qos list(Not yet implemented)🚧QoS listing
openstack volume qos createset_volume_qosQoS management

4. 🖼️ Image (Glance)

OpenStack CLI CommandMCP ToolStatusNotes
openstack image listget_image_detail_listImage listing
openstack image showget_image_detail_list (filtering)Specific image query
openstack image createset_image (action="create")Enhanced image creation with min_disk, min_ram, properties
openstack image deleteset_image (action="delete")Image deletion
openstack image setset_image (action="update")Image property modification
openstack image saveset_image (action="save")Image download
openstack image add project(Not yet implemented)🚧Project sharing
openstack image member list(Not yet implemented)🚧Member listing
openstack image member createset_image_membersImage member management
openstack image set --propertyset_image_metadataImage metadata
openstack image set --public/privateset_image_visibilityImage visibility setting

5. 👥 Identity (Keystone)

OpenStack CLI CommandMCP ToolStatusNotes
openstack user listget_user_listUser listing
openstack user showget_user_list (filtering)Specific user query
openstack user create/delete(Not yet implemented)🚧User management
openstack project listget_project_detailsProject listing
openstack project showget_project_details (name param)Specific project query
openstack project create/deleteset_projectProject management
openstack role listget_role_assignmentsRole listing
openstack role assignment listget_role_assignmentsRole assignment listing
openstack role create/deleteset_rolesRole management
openstack domain list(Not yet implemented)🚧Domain listing
openstack domain create/deleteset_domainsDomain management
openstack group list(Not yet implemented)🚧Group listing
openstack group create/deleteset_identity_groupsGroup management
openstack service listget_service_statusService listing
openstack service create/deleteset_servicesService management
openstack endpoint listget_service_status (includes endpoints)Endpoint information

6. 🔥 Orchestration (Heat)

OpenStack CLI CommandMCP ToolStatusNotes
openstack stack listget_heat_stacksStack listing
openstack stack showget_heat_stacks (filtering)Specific stack query
openstack stack createset_heat_stack (action="create")Stack creation
openstack stack deleteset_heat_stack (action="delete")Stack deletion
openstack stack updateset_heat_stack (action="update")Stack update
openstack stack suspend/resumeset_heat_stackStack suspend/resume
openstack stack resource list(Not yet implemented)🚧Stack resource listing
openstack stack event list(Not yet implemented)🚧Stack event listing
openstack stack template show(Not yet implemented)🚧Template query
openstack stack output list(Not yet implemented)🚧Stack output listing

7. ⚖️ Load Balancer (Octavia)

OpenStack CLI CommandMCP ToolStatusNotes
openstack loadbalancer listget_load_balancer_statusLoad balancer listing with pagination
openstack loadbalancer showget_load_balancer_statusLoad balancer detailed information
openstack loadbalancer createset_load_balancer (action="create")Load balancer creation
openstack loadbalancer deleteset_load_balancer (action="delete")Load balancer deletion
openstack loadbalancer setset_load_balancer (action="update")Load balancer property update
openstack loadbalancer stats showget_load_balancer_statusLoad balancer statistics
openstack loadbalancer status showget_load_balancer_statusLoad balancer status tree
openstack loadbalancer failoverset_load_balancer (action="failover")Load balancer failover
openstack loadbalancer unsetset_load_balancer (action="unset")Load balancer property unset
Listener Management
openstack loadbalancer listener listget_load_balancer_listenersListener listing for load balancer
openstack loadbalancer listener createset_load_balancer_listener (action="create")Listener creation (HTTP/HTTPS/TCP/UDP)
openstack loadbalancer listener deleteset_load_balancer_listener (action="delete")Listener deletion
openstack loadbalancer listener showget_load_balancer_listenersListener detailed information
openstack loadbalancer listener setset_load_balancer_listener (action="update")Listener property update
openstack loadbalancer listener stats showget_load_balancer_listenersListener statistics
openstack loadbalancer listener unsetset_load_balancer_listener (action="unset")Listener property unset
Pool Management
openstack loadbalancer pool listget_load_balancer_poolsPool listing (all or by listener)
openstack loadbalancer pool createset_load_balancer_pool (action="create")Pool creation with algorithms
openstack loadbalancer pool deleteset_load_balancer_pool (action="delete")Pool deletion
openstack loadbalancer pool setset_load_balancer_pool (action="update")Pool property update
openstack loadbalancer pool showget_load_balancer_poolsPool detailed information
openstack loadbalancer pool stats showget_load_balancer_poolsPool statistics
openstack loadbalancer pool unsetset_load_balancer_pool (action="unset")Pool property unset
Member Management
openstack loadbalancer member listget_load_balancer_membersPool member listing
openstack loadbalancer member createset_load_balancer_member (action="create")Pool member creation
openstack loadbalancer member deleteset_load_balancer_member (action="delete")Pool member deletion
openstack loadbalancer member setset_load_balancer_member (action="update")Pool member property update
openstack loadbalancer member showget_load_balancer_membersPool member detailed information
openstack loadbalancer member unsetset_load_balancer_member (action="unset")Pool member property unset
Health Monitor Management
openstack loadbalancer healthmonitor listget_load_balancer_health_monitorsHealth mo

Files in the repo

Repository payload27 top-level entries
  • .github
  • img
  • scripts
  • src
  • .env.example
  • .env.test
  • .gitignore
  • .gitleaks.toml
  • .pre-commit-config.yaml
  • .python-version
  • build-mcp-server-docker-image.sh
  • build-mcpo-server-docker-image.sh
  • diagnose_openstack.py
  • docker-compose.yml
  • Dockerfile.MCP-Server
  • Dockerfile.MCPO-Proxy
  • LICENSE
  • main.py
  • MANIFEST.in
  • mcp-config.json.http
  • mcp-config.json.multi-project
  • mcp-config.json.stdio
  • pyproject.toml
  • README.md
  • test_compatibility.sh
  • test_project_isolation.py
  • uv.lock

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More connectors

High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

43k

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

14k
okf-memory/
okf-agent-memory

Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300µs in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.

547
tirth8205/
code-review-graph

Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.

31k
2akouwu/
reverify

Stop your AI from making things up — it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.

1.1k
t8y2/dbxConnectors

20 MB lightweight cross-platform database client for 90+ databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, and Dameng. Built-in AI, MCP Server, CLI, desktop and Docker. | 轻量级跨平台数据库管理工具,支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、达梦等 90+ 数据库,提供桌面端、Docker、CLI、内置 AI 助手和 MCP Server。

19k