MCP-OpenStack-Ops logo

MCP-OpenStack-Ops

Community
call518

90+ production-safe OpenStack tools for AI agents via MCP. Project-scoped & read-only by default. Works with Claude, Open WebUI & any MCP client. FastMCP + OpenStack SDK. Available on PyPI, Docker Hub & Smithery.

Publishercall518
RepositoryMCP-OpenStack-Ops
LanguagePython
Forks
15
Stars
44
Available tools
0
Transport typestdio
Categories
LicenseMIT
Links
  • Connect tools to AI workflows

    MCP-OpenStack-Ops exposes MCP capabilities that can be used by compatible AI clients and agents.

  • 0 available tools

    Browse the callable actions below, including names and descriptions when provided by the server.

  • Ready-to-copy setup

    Use the installation snippets to configure this server in your preferred MCP client.

  • Open source signals

    44 stars and 15 forks from the linked repository.

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

dockerfile
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

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

bash
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:

bash
# 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:

python
# 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:

bash
✅ 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_instance✅NEW UNIFIED - Pagination, filtering support
openstack server showget_instance✅ENHANCED - Replaces get_instance_by_name, get_instance_by_id
openstack server createset_instance (action="create")✅ENHANCED - Bulk creation support
openstack server start/stop/rebootset_instance✅ENHANCED - Bulk operations with filtering
openstack server deleteset_instance (action="delete")✅ENHANCED - Bulk deletion with name_contains filtering
openstack server backup createset_server_backup✅Backup creation with rotation
openstack server image createset_instance (action="snapshot")✅Image/snapshot creation
openstack server shelve/unshelveset_instance✅Instance shelving
openstack server lock/unlockset_instance✅Instance locking
openstack server pause/unpauseset_instance✅Instance pausing
openstack server suspend/resumeset_instance✅Instance 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_instance✅Recovery 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_dump✅Server dump creation
openstack server event listget_server_events✅Server event tracking
openstack server group listget_server_groups✅Server group listing
openstack server group create/deleteset_server_group✅Server group management
openstack flavor listget_flavor_list (via cluster_status)✅Flavor listing
openstack flavor create/deleteset_flavor✅Flavor management
openstack keypair listget_keypair_list✅Keypair listing
openstack keypair create/deleteset_keypair✅Keypair management
openstack hypervisor listget_hypervisor_details✅Hypervisor querying
openstack availability zone listget_availability_zones✅Availability zone listing

2. 🌐 Network (Neutron)

OpenStack CLI CommandMCP ToolStatusNotes
openstack network listget_network_details✅Detailed 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_subnets✅Subnet management
openstack router listget_routers✅Router listing
openstack router create/delete(Not yet implemented)🚧Router management
openstack floating ip listget_floating_ips✅Floating 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_pools✅Floating 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_groups✅Security 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_ports✅Port management
openstack network qos policy list(Not yet implemented)🚧QoS policy listing
openstack network qos policy createset_network_qos_policies✅QoS policy management
openstack network agent listget_service_status (includes agents)✅Network agents
openstack network agent setset_network_agents✅Network agent management

3. 💾 Storage (Cinder)

OpenStack CLI CommandMCP ToolStatusNotes
openstack volume listget_volume_list✅Volume listing
openstack volume showget_volume_list (filtering)✅Specific volume query
openstack volume create/deleteset_volume✅Volume creation/deletion
openstack volume setset_volume (action="modify")✅Volume property modification
openstack volume type listget_volume_types✅Volume type listing
openstack volume type create/delete(Not yet implemented)🚧Volume type management
openstack volume snapshot listget_volume_snapshots✅Snapshot listing
openstack volume snapshot create/deleteset_snapshot✅Snapshot management
openstack backup list(Not yet implemented)🚧Backup listing
openstack backup create/deleteset_volume_backups✅Volume backup management
openstack volume transfer request list(Not yet implemented)🚧Volume transfer
openstack server volume listget_server_volumes✅Server volume listing
openstack server add/remove volumeset_server_volume✅Server volume attach/detach
openstack volume group list(Not yet implemented)🚧Volume group listing
openstack volume group createset_volume_groups✅Volume group management
openstack volume qos list(Not yet implemented)🚧QoS listing
openstack volume qos createset_volume_qos✅QoS management

4. 🖼️ Image (Glance)

OpenStack CLI CommandMCP ToolStatusNotes
openstack image listget_image_detail_list✅Image 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_members✅Image member management
openstack image set --propertyset_image_metadata✅Image metadata
openstack image set --public/privateset_image_visibility✅Image visibility setting

5. 👥 Identity (Keystone)

OpenStack CLI CommandMCP ToolStatusNotes
openstack user listget_user_list✅User listing
openstack user showget_user_list (filtering)✅Specific user query
openstack user create/delete(Not yet implemented)🚧User management
openstack project listget_project_details✅Project listing
openstack project showget_project_details (name param)✅Specific project query
openstack project create/deleteset_project✅Project management
openstack role listget_role_assignments✅Role listing
openstack role assignment listget_role_assignments✅Role assignment listing
openstack role create/deleteset_roles✅Role management
openstack domain list(Not yet implemented)🚧Domain listing
openstack domain create/deleteset_domains✅Domain management
openstack group list(Not yet implemented)🚧Group listing
openstack group create/deleteset_identity_groups✅Group management
openstack service listget_service_status✅Service listing
openstack service create/deleteset_services✅Service management
openstack endpoint listget_service_status (includes endpoints)✅Endpoint information

6. 🔥 Orchestration (Heat)

OpenStack CLI CommandMCP ToolStatusNotes
openstack stack listget_heat_stacks✅Stack 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_stack✅Stack 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_status✅Load balancer listing with pagination
openstack loadbalancer showget_load_balancer_status✅Load 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_status✅Load balancer statistics
openstack loadbalancer status showget_load_balancer_status✅Load 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_listeners✅Listener 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_listeners✅Listener detailed information
openstack loadbalancer listener setset_load_balancer_listener (action="update")✅Listener property update
openstack loadbalancer listener stats showget_load_balancer_listeners✅Listener statistics
openstack loadbalancer listener unsetset_load_balancer_listener (action="unset")✅Listener property unset
Pool Management
openstack loadbalancer pool listget_load_balancer_pools✅Pool 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_pools✅Pool detailed information
openstack loadbalancer pool stats showget_load_balancer_pools✅Pool statistics
openstack loadbalancer pool unsetset_load_balancer_pool (action="unset")✅Pool property unset
Member Management
openstack loadbalancer member listget_load_balancer_members✅Pool 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_members✅Pool 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_monitors✅Health monitor listing
openstack loadbalancer healthmonitor createset_load_balancer_health_monitor (action="create")✅Health monitor creation
openstack loadbalancer healthmonitor deleteset_load_balancer_health_monitor (action="delete")✅Health monitor deletion
openstack loadbalancer healthmonitor setset_load_balancer_health_monitor (action="update")✅Health monitor update
openstack loadbalancer healthmonitor showget_load_balancer_health_monitors✅Health monitor detailed information
openstack loadbalancer healthmonitor unsetset_load_balancer_health_monitor (action="unset")✅Health monitor property unset
L7 Policy Management
openstack loadbalancer l7policy listget_load_balancer_l7_policies✅L7 policy listing
openstack loadbalancer l7policy createset_load_balancer_l7_policy (action="create")✅L7 policy creation
openstack loadbalancer l7policy deleteset_load_balancer_l7_policy (action="delete")✅L7 policy deletion
openstack loadbalancer l7policy setset_load_balancer_l7_policy (action="update")✅L7 policy update
openstack loadbalancer l7policy showget_load_balancer_l7_policies✅L7 policy details
openstack loadbalancer l7policy unsetset_load_balancer_l7_policy (action="unset")✅L7 policy property unset
L7 Rule Management 🆕
openstack loadbalancer l7rule listget_load_balancer_l7_rules✅L7 rule listing
openstack loadbalancer l7rule createset_load_balancer_l7_rule (action="create")✅L7 rule creation
openstack loadbalancer l7rule deleteset_load_balancer_l7_rule (action="delete")✅L7 rule deletion
openstack loadbalancer l7rule setset_load_balancer_l7_rule (action="update")✅L7 rule update
openstack loadbalancer l7rule showget_load_balancer_l7_rules✅L7 rule details
openstack loadbalancer l7rule unsetset_load_balancer_l7_rule (action="unset")✅L7 rule property unset
Amphora Management 🆕
openstack loadbalancer amphora listget_load_balancer_amphorae✅Amphora listing
openstack loadbalancer amphora showset_load_balancer_amphora (action="show")✅Amphora details
openstack loadbalancer amphora configureset_load_balancer_amphora (action="configure")✅Amphora configuration
openstack loadbalancer amphora failoverset_load_balancer_amphora (action="failover")✅Amphora failover
openstack loadbalancer amphora deleteN/A❌Not supported by OpenStack SDK
openstack loadbalancer amphora stats showN/A❌Not supported by OpenStack SDK
Provider Management
openstack loadbalancer provider listget_load_balancer_providers✅Provider listing
openstack loadbalancer provider capability listget_load_balancer_providers✅Provider capability listing
Availability Zone Management 🆕
openstack loadbalancer availabilityzone listget_load_balancer_availability_zones✅Availability zone listing
openstack loadbalancer availabilityzone showget_load_balancer_availability_zones✅Availability zone details
openstack loadbalancer availabilityzone createset_load_balancer_availability_zone (action="create")✅Availability zone creation
openstack loadbalancer availabilityzone deleteset_load_balancer_availability_zone (action="delete")✅Availability zone deletion
openstack loadbalancer availabilityzone setset_load_balancer_availability_zone (action="update")✅Availability zone update
openstack loadbalancer availabilityzone unsetset_load_balancer_availability_zone (action="unset")✅Availability zone property unset
Flavor Management 🆕
openstack loadbalancer flavor listget_load_balancer_flavors✅Flavor listing
openstack loadbalancer flavor showget_load_balancer_flavors✅Flavor details
openstack loadbalancer flavor createset_load_balancer_flavor (action="create")✅Flavor creation
openstack loadbalancer flavor deleteset_load_balancer_flavor (action="delete")✅Flavor deletion
openstack loadbalancer flavor setset_load_balancer_flavor (action="update")✅Flavor update
openstack loadbalancer flavor unsetset_load_balancer_flavor (action="unset")✅Flavor property unset
Flavor Profile Management
openstack loadbalancer flavorprofile listget_load_balancer_flavor_profiles✅Flavor profile listing
openstack loadbalancer flavorprofile showget_load_balancer_flavor_profiles✅Flavor profile details
openstack loadbalancer flavorprofile createset_load_balancer_flavor_profile (action="create")✅Flavor profile creation
openstack loadbalancer flavorprofile setset_load_balancer_flavor_profile (action="update")✅Flavor profile update
openstack loadbalancer flavorprofile unsetset_load_balancer_flavor_profile (action="unset")✅Flavor profile property unset
openstack loadbalancer flavorprofile deleteset_load_balancer_flavor_profile (action="delete")🚧Pending implementation
Quota Management 🆕
openstack loadbalancer quota listget_load_balancer_quotas✅Quota listing
openstack loadbalancer quota showget_load_balancer_quotas✅Quota details
openstack loadbalancer quota setset_load_balancer_quota (action="set")✅Quota setting
openstack loadbalancer quota resetset_load_balancer_quota (action="reset")✅Quota reset

8. 📊 Monitoring & Logging

OpenStack CLI CommandMCP ToolStatusNotes
Resource monitoringget_resource_monitoring✅Resource monitoring
Service statusget_service_status✅Service status query
Cluster overviewget_cluster_status✅Cluster overview
Service logsset_service_logs✅Service log management
System metricsset_metrics✅Metrics management
Alarm managementset_alarms✅Alarm management
Compute agentsset_compute_agents✅Compute agent management
Usage statisticsget_usage_statistics✅Usage statistics

9. 📏 Usage & Quota

OpenStack CLI CommandMCP ToolStatusNotes
openstack quota showget_quota✅Quota query
openstack quota setset_quota✅Quota setting
openstack usage showget_usage_statistics✅Usage query
openstack limits showget_quota (includes limits)✅Limits query
Resource utilizationget_resource_monitoring✅Resource utilization

Quick Start

💡 Need an OpenStack Cluster for Testing?
Check out this comprehensive guide: Tutorial: Install OpenStack Multinode Cluster /w Kolla-Ansible (Epoxy/Dalmatian)
Perfect for setting up a test environment to explore MCP-OpenStack-Ops capabilities.

Flow Diagram of Quickstart/Tutorial

1. Environment Setup

bash
# Clone and navigate to project
cd MCP-OpenStack-Ops

# Install dependencies
uv sync

# Configure environment
cp .env.example .env
# Edit .env with your OpenStack credentials

Environment Configuration

Configure your .env file with OpenStack credentials:

bash
# OpenStack Authentication (required)
OS_AUTH_HOST=your-openstack-host
OS_AUTH_PORT=5000
OS_AUTH_PROTOCOL=http  # Use 'https' for production with SSL/TLS
# OS_CACERT=/etc/ssl/certs/openstack-ca.pem  # Required for HTTPS (optional for HTTP)
OS_IDENTITY_API_VERSION=3
OS_USERNAME=your-username
OS_PASSWORD=your-password
OS_PROJECT_NAME=your-project
OS_PROJECT_DOMAIN_NAME=default
OS_USER_DOMAIN_NAME=default
OS_REGION_NAME=RegionOne

# OpenStack Service Ports (customizable)
OS_COMPUTE_PORT=8774
OS_NETWORK_PORT=9696
OS_VOLUME_PORT=8776
OS_IMAGE_PORT=9292
OS_PLACEMENT_PORT=8780
OS_HEAT_STACK_PORT=8004
OS_HEAT_STACK_CFN_PORT=8000

# MCP Server Configuration (optional)
MCP_LOG_LEVEL=INFO
ALLOW_MODIFY_OPERATIONS=false
FASTMCP_TYPE=stdio
FASTMCP_HOST=127.0.0.1
FASTMCP_PORT=8080

HTTPS Configuration for Production Environments

For secure OpenStack deployments with SSL/TLS:

bash
# Enable HTTPS protocol
OS_AUTH_PROTOCOL=https
OS_AUTH_HOST=your-secure-openstack-host
OS_AUTH_PORT=13000  # Your HTTPS Keystone port

# SSL Certificate Configuration
# Option 1: Use custom CA certificate (recommended for production)
OS_CACERT=/etc/ssl/certs/openstack-ca.pem

# Option 2: Skip CA certificate (SSL verification disabled - insecure)
# Just omit OS_CACERT - the server will warn you about insecure connection

# Docker: Mount CA certificate into container
# Add to docker-compose.yml volumes:
#   - /path/to/your/ca-cert.pem:/etc/ssl/certs/openstack-ca.pem:ro

Protocol Configuration Notes:

  • OS_AUTH_PROTOCOL=http: Use for local development or HTTP-only OpenStack deployments
  • OS_AUTH_PROTOCOL=https: Use for production environments with SSL/TLS enabled
  • When https is set without OS_CACERT, SSL verification is disabled (insecure but functional)
  • For secure production deployments, always provide OS_CACERT with your CA certificate path

2. Run Server

bash
# Start all services
docker-compose up -d

# Check logs
docker-compose logs mcp-server
docker-compose logs mcpo-proxy

Container Architecture:

  • mcp-server: OpenStack MCP server with tools
  • mcpo-proxy: OpenAPI (REST-API)
  • open-webui: Web interface for testing and interaction

📌 Note: Web-UI configuration instructions are based on OpenWebUI v0.6.22. Menu locations and settings may differ in newer versions.

Service URLs - Docker Internal:

  • MCP Server: localhost:8080 (HTTP transport)
  • MCPO Proxy: localhost:8000 (OpenStack API proxy)
  • Open WebUI: localhost:3000 (Web interface)

Service URLs - Docker External:

  • MCP Server: host.docker.internal:18005 (HTTP transport)
  • MCPO Proxy: host.docker.internal:8005 (OpenStack API proxy)
  • Open WebUI: host.docker.internal:3005 (Web interface)

For Claude Desktop Integration

Add to your Claude Desktop configuration:

json
{
  "mcpServers": {
    "mcp-openstack-ops": {
      "command": "uvx",
      "args": ["--python", "3.12", "mcp-openstack-ops"],
      "env": {
        "OS_AUTH_HOST": "your-openstack-host",
        "OS_AUTH_PORT": "5000",
        "OS_PROJECT_NAME": "your-project",
        "OS_USERNAME": "your-username",
        "OS_PASSWORD": "your-password",
        "OS_USER_DOMAIN_NAME": "Default",
        "OS_PROJECT_DOMAIN_NAME": "Default",
        "OS_REGION_NAME": "RegionOne",
        "OS_IDENTITY_API_VERSION": "3",
        "OS_INTERFACE": "internal",
        "OS_COMPUTE_PORT": "8774",
        "OS_NETWORK_PORT": "9696",
        "OS_VOLUME_PORT": "8776",
        "OS_IMAGE_PORT": "9292",
        "OS_PLACEMENT_PORT": "8780",
        "OS_HEAT_STACK_PORT": "8004",
        "OS_HEAT_STACK_CFN_PORT": "18888",
        "ALLOW_MODIFY_OPERATIONS": "false",
        "MCP_LOG_LEVEL": "INFO"
      }
    }
  }
}

Server Configuration

Command Line Options

bash
uv run python -m mcp_openstack_ops --help

Options:
  --log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
                        Logging level
  --type {stdio,streamable-http}
                        Transport type (default: stdio)
  --host HOST          Host address for HTTP transport (default: 127.0.0.1)
  --port PORT          Port number for HTTP transport (default: 8080)
  --auth-enable        Enable Bearer token authentication for streamable-http mode
  --secret-key SECRET  Secret key for Bearer token authentication

Environment Variables

VariableDescriptionDefaultUsage
OpenStack Authentication
OS_AUTH_HOSTOpenStack Identity service hostRequiredAuthentication host address
OS_AUTH_PORTOpenStack Identity service portRequiredAuthentication port
OS_AUTH_PROTOCOLConnection protocol (http or https)httpUse https for production with SSL/TLS
OS_CACERTSSL CA certificate path for HTTPSOptionalRequired for secure HTTPS connections (e.g., /etc/ssl/certs/ca.pem). If not set with HTTPS, SSL verification is disabled (insecure)
OS_USERNAMEOpenStack usernameRequiredUser credentials
OS_PASSWORDOpenStack passwordRequiredUser credentials
OS_PROJECT_NAMEOpenStack project nameRequiredProject scope
OS_IDENTITY_API_VERSIONIdentity API version3API version
OS_PROJECT_DOMAIN_NAMEProject domain namedefaultDomain scope
OS_USER_DOMAIN_NAMEUser domain namedefaultDomain scope
OS_REGION_NAMEOpenStack regionRegionOneRegional scope
OpenStack Service Ports
OS_COMPUTE_PORTCompute service port8774Nova endpoint
OS_NETWORK_PORTNetwork service port9696Neutron endpoint
OS_VOLUME_PORTVolume service port8776Cinder endpoint
OS_IMAGE_PORTImage service port9292Glance endpoint
OS_PLACEMENT_PORTPlacement service port8780Placement endpoint
OS_HEAT_STACK_PORTHeat orchestration service port8004Heat API endpoint
OS_HEAT_STACK_CFN_PORTHeat CloudFormation service port18888Heat CFN API endpoint (default: 8000, changed to avoid Docker port conflicts)
MCP Server Configuration
MCP_LOG_LEVELLogging levelINFODevelopment debugging
ALLOW_MODIFY_OPERATIONSEnable modify operationsfalseSafety control for state modifications
FASTMCP_TYPETransport typestdioRarely needed to change
FASTMCP_HOSTHTTP host address127.0.0.1For HTTP mode only
FASTMCP_PORTHTTP port number8080For HTTP mode only
Authentication (Optional)
REMOTE_AUTH_ENABLEEnable Bearer token authentication for streamable-http modefalseProduction security
REMOTE_SECRET_KEYSecret key for Bearer token authenticationRequired when auth enabledProduction security

🔒 Project Isolation & Security

Single Project Scope Operation

MCP-OpenStack-Ops operates within a strictly defined project scope determined by the OS_PROJECT_NAME environment variable. This provides complete tenant isolation and data privacy in multi-tenant OpenStack environments.

Key Security Features:

  • 100% Complete Resource Isolation: All operations are restricted to resources within the specified project with enhanced security validation
  • Zero Cross-tenant Data Leakage: Advanced project ownership validation prevents access to resources from other projects
  • Multi-layer Security Filtering: Each service implements intelligent resource filtering by current project ID with additional validation
  • Secure Resource Lookup: All resource searches use project-scoped lookup with ownership verification
  • Shared Resource Access: Intelligently includes shared/public resources (networks, images) while maintaining strict security boundaries
  • Cross-Project Access Prevention: Enhanced protection against accidental operations on similarly-named resources in other projects

Filtered Resources by Project:

ServiceProject-Scoped ResourcesNotes
IdentityUsers (via role assignments), Role assignmentsOnly users with roles in current project
ComputeInstances, Flavors (embedded data), KeypairsAll instances within project scope
ImagePrivate images (owned), Public/Community/Shared imagesSmart filtering prevents zero-image issues
NetworkNetworks, Subnets, Security Groups, Floating IPs, RoutersIncludes shared/external networks for access
StorageVolumes, Snapshots, BackupsAll storage resources within project
OrchestrationHeat Stacks, Stack ResourcesAll orchestration within project
Load BalancerLoad Balancers, Listeners, PoolsAll load balancing within project
MonitoringResource usage, Project quotasProject-specific monitoring data

Security Validation & Testing

Project Isolation Security Test

To verify that project isolation is working correctly, run the included security test:

bash
# Run project isolation security test
python test_project_isolation.py

Expected Test Results:

🔒 OpenStack Project Isolation Security Test
==================================================
📋 Testing project isolation for: your-project

1️⃣ Testing Connection and Project ID...
✅ Connection successful
✅ Current project ID: abc123-def456-ghi789
✅ Project name 'your-project' matches project ID

2️⃣ Testing Resource Ownership Validation...
✅ Found 5 compute instances
   Instance web-server-01: ✅ Owned
   Instance db-server-01: ✅ Owned
✅ Found 3/8 owned networks
✅ Found 10/10 owned volumes

3️⃣ Testing Service-Level Project Filtering...
✅ Compute service returned 5 instances
✅ Network service returned 3 networks  
✅ Storage service returned 10 volumes

4️⃣ Testing Secure Resource Lookup...
ℹ️  Network 'admin' not found or not accessible in current project
ℹ️  Instance 'demo' not found or not accessible in current project

🎯 Project Isolation Test Results
========================================
✅ All security tests passed!
✅ Project 'your-project' isolation verified
✅ Cross-project access prevention confirmed

🔒 Your OpenStack MCP Server is properly secured!

Security Features Validated:

  • ✅ Project ID verification and matching
  • ✅ Resource ownership validation for all services
  • ✅ Service-level project filtering
  • ✅ Secure resource lookup with cross-project protection
  • ✅ Prevention of accidental operations on other projects' resources

For managing multiple OpenStack projects, deploy multiple MCP server instances with different OS_PROJECT_NAME values:

Example: Managing 3 Projects

bash
# Project 1: Production Environment
OS_PROJECT_NAME=production
# ... other config
python -m mcp_openstack_ops --type stdio

# Project 2: Development Environment  
OS_PROJECT_NAME=development
# ... other config  
python -m mcp_openstack_ops --type streamable-http --port 8001

# Project 3: Testing Environment
OS_PROJECT_NAME=testing  
# ... other config
python -m mcp_openstack_ops --type streamable-http --port 8002

Claude Desktop Multi-Project Configuration Example:

json
{
  "mcpServers": {
    "openstack-production": {
      "command": "python",
      "args": ["-m", "mcp_openstack_ops", "--type", "stdio"],
      "env": {
        "OS_PROJECT_NAME": "production",
        "OS_USERNAME": "admin",
        "OS_PASSWORD": "your-password",
        "OS_AUTH_HOST": "192.168.35.2"
      }
    },
    "openstack-development": {
      "command": "python", 
      "args": ["-m", "mcp_openstack_ops", "--type", "stdio"],
      "env": {
        "OS_PROJECT_NAME": "development",
        "OS_USERNAME": "admin",
        "OS_PASSWORD": "your-password", 
        "OS_AUTH_HOST": "192.168.35.2"
      }
    },
    "openstack-testing": {
      "command": "python",
      "args": ["-m", "mcp_openstack_ops", "--type", "stdio"], 
      "env": {
        "OS_PROJECT_NAME": "testing",
        "OS_USERNAME": "admin",
        "OS_PASSWORD": "your-password",
        "OS_AUTH_HOST": "192.168.35.2"
      }
    }
  }
}

This allows Claude to access each project independently with complete isolation between environments.

📁 Ready-to-use Configuration File:

A complete multi-project configuration example is available at mcp-config.json.multi-project:

  • Production: Read-only operations for safety (ALLOW_MODIFY_OPERATIONS=false)
  • Development: Full operations enabled (ALLOW_MODIFY_OPERATIONS=true)
  • Testing: Debug logging enabled (MCP_LOG_LEVEL=DEBUG)
bash
# Copy and customize the multi-project configuration
cp mcp-config.json.multi-project ~/.config/claude-desktop/mcp_servers.json
# Edit with your OpenStack credentials

Safety Controls

Modification Operations Protection

By default, all operations that can modify or delete OpenStack resources are disabled for safety:

bash
# Default setting - Only read-only operations allowed
ALLOW_MODIFY_OPERATIONS=false

Protected Operations (when ALLOW_MODIFY_OPERATIONS=false):

  • Instance management (start, stop, restart, pause, unpause)
  • Volume operations (create, delete, attach, detach)
  • Keypair management (create, delete, import)
  • Floating IP operations (create, delete, associate, disassociate)
  • Snapshot management (create, delete)
  • Image management (create, delete, update)
  • Heat stack operations (create, delete, update)

Always Available (Read-Only Operations):

  • Cluster status and monitoring
  • Resource listings (instances, volumes, networks, etc.)
  • Service status checks
  • Usage and quota information
  • Search and filtering operations

⚠️ To Enable Modify Operations:

bash
# Enable all operations (USE WITH CAUTION)
ALLOW_MODIFY_OPERATIONS=true

Tool Registration Behavior:

  • When ALLOW_MODIFY_OPERATIONS=false: Only read-only tools are registered with the MCP server
  • When ALLOW_MODIFY_OPERATIONS=true: All tools (read-only + modify operations) are registered
  • Tool availability is determined at server startup - restart required after changing this setting

Best Practices:

  • Keep ALLOW_MODIFY_OPERATIONS=false in production environments
  • Enable modify operations only in development/testing environments
  • Use separate configurations for different environments
  • Review operations before enabling modify capabilities
  • Restart the MCP server after changing the ALLOW_MODIFY_OPERATIONS setting

💬 Example Queries & Usage Patterns

For comprehensive examples of how to interact with this MCP server, including natural language queries and their corresponding tool mappings, see:

📖 Example Queries & Usage Patterns

This section includes:

  • 🎯 Cluster overview and status queries
  • �️ Instance management operations
  • 🌐 Network configuration tasks
  • � Storage management workflows
  • 🔥 Heat orchestration examples
  • ⚖️ Load balancer operations
  • � Advanced search patterns
  • 📊 Monitoring and troubleshooting
  • 🧠 Complex multi-tool query combinations

Performance Optimization

Large-Scale Environment Support

The MCP server is optimized for large OpenStack environments with thousands of instances:

Pagination Features:

  • Default limits prevent memory overflow (50 instances per request)
  • Configurable safety limits (maximum 200 instances per request)
  • Offset-based pagination for browsing large datasets
  • Performance metrics tracking (processing time, instances per second)

Search Optimization:

  • 2-phase search process (basic info filtering → detailed info retrieval)
  • Intelligent caching with connection reuse
  • Selective API calls to minimize overhead
  • Case-sensitive search options for precise filtering

Connection Management:

  • Global connection caching with validity testing
  • Automatic retry mechanisms for transient failures
  • Connection pooling for high-throughput scenarios

Usage Examples:

bash
# Safe large environment browsing
get_instance_details(limit=50, offset=0)     # First 50 instances
get_instance_details(limit=50, offset=50)    # Next 50 instances

# Emergency override for small environments
get_instance_details(include_all=True)       # All instances (use with caution)

# Optimized search for large datasets
search_instances("web", "name", limit=20)    # Search with reasonable limit

Development

Adding New Tools

Edit src/mcp_openstack_ops/mcp_main.py to add new MCP tools:

python
@mcp.tool()
async def my_openstack_tool(param: str) -> str:
    """
    Brief description of the tool's purpose.
    
    Functions:
    - List specific functions this tool performs
    - Describe the operations it enables
    - Mention when to use this tool
    
    Use when user requests [specific scenarios].
    
    Args:
        param: Description of the parameter
        
    Returns:
        Description of return value format.
    """
    try:
        logger.info(f"Tool called with param: {param}")
        # Implementation using functions.py helpers
        result = my_helper_function(param)
        
        response = {
            "timestamp": datetime.now().isoformat(),
            "result": result
        }
        
        return json.dumps(response, indent=2, ensure_ascii=False)
        
    except Exception as e:
        error_msg = f"Error: Failed to execute tool - {str(e)}"
        logger.error(error_msg)
        return error_msg

Helper Functions

Add utility functions to src/mcp_openstack_ops/functions.py:

python
def my_helper_function(param: str) -> dict:
    """Helper function for OpenStack operations"""
    try:
        conn = get_openstack_connection()
        
        # OpenStack SDK operations
        result = conn.some_service.some_operation(param)
        
        logger.info(f"Operation completed successfully")
        return {"success": True, "data": result}
        
    except Exception as e:
        logger.error(f"Helper function error: {e}")
        raise

Testing & Validation

Local Testing

bash
# Test with MCP Inspector (recommended)
./scripts/run-mcp-inspector-local.sh

# Test with debug logging
MCP_LOG_LEVEL=DEBUG uv run python -m mcp_openstack_ops

# Validate OpenStac

Use MCP-OpenStack-Ops MCP with multiple AI models

TypingMind connects MCP tools at the workspace level, so once MCP-OpenStack-Ops is connected, you can use it with different AI models in TypingMind instead of setting it up separately for each model. This MCP runs locally through the TypingMind MCP connector on your device.

Setup guide to use the local connector

Use this when the MCP server needs access to local files, apps, or private resources on your computer.

1

Open the MCP settings

In TypingMind, go to Settings, Advanced Settings, then Model Context Protocol and choose Setup Connector.

  1. Open TypingMind in your browser.
  2. Click the Settings icon.
  3. Go to Advanced Settings.
  4. Open the Model Context Protocol section.
  5. Click Setup Connector and choose This Device.
TypingMind MCP connector setup screen with This Device selected
2

Run the connector command

Choose This Device, copy the command from TypingMind, and run it in Terminal. Keep the process running while you use MCP.

  1. Copy the setup command shown by TypingMind.
  2. Open Terminal on macOS or Windows Terminal on Windows.
  3. Paste and run the command.
  4. Approve the package install if Terminal asks you to proceed.
  5. Keep the Terminal window running while using MCP tools.
3

Add MCP-OpenStack-Ops as a server

When the connector status is Ready, click Edit Servers and paste the MCP server configuration.

  1. Wait until the connector status shows Ready.
  2. Click Edit Servers.
  3. Paste the MCP-OpenStack-Ops MCP server configuration.
  4. Save the server list.
  5. Refresh if you want to confirm the connector is still ready.
TypingMind MCP settings showing active server and Edit Servers button
{
  "mcpServers": {
    "mcp-openstack-ops": {
      "command": "npx",
      "args": [
        "-y",
        "<mcp-server-package>"
      ]
    }
  }
}
4

Use it across models

Save the server list, open Plugins, enable the MCP-OpenStack-Ops MCP tools, then select any supported AI model in TypingMind and use the tools in chat or assign them to an AI agent.

  1. Open the Plugins page in TypingMind.
  2. Enable the MCP-OpenStack-Ops MCP tools.
  3. Start a chat and choose the AI model you want to use.
  4. Use the MCP tools in chat or assign them to an AI agent.
  5. Switch to another AI model whenever needed without reconnecting MCP.
TypingMind chat using enabled MCP tools with a selected AI model
Can you use MCP-OpenStack-Ops to help me with this task?
MCP-OpenStack-Ops
Sure. I read it.
Here is what I found using MCP-OpenStack-Ops.

Frequently asked questions

What is the MCP-OpenStack-Ops MCP server used for?

MCP-OpenStack-Ops is an MCP server that lets compatible AI clients connect to external tools and context. In TypingMind, you can add this MCP server once and make its tools available in your AI workspace.

Can I use MCP-OpenStack-Ops MCP with multiple AI models in TypingMind?

Yes. TypingMind connects MCP tools at the workspace level, so you can use MCP-OpenStack-Ops with different AI models such as Claude, ChatGPT, Gemini, or other models you have configured in TypingMind without setting up the MCP server separately for each model.

Why use MCP-OpenStack-Ops MCP with TypingMind?

TypingMind is one of the best frontends for LLM chat because it brings multiple AI models, prompts, plugins, AI agents, API keys, and MCP tools into one workspace. With MCP-OpenStack-Ops connected, you can use its MCP tools across your preferred models while keeping your chat workflow organized in TypingMind.

How do I connect MCP-OpenStack-Ops MCP to TypingMind?

MCP-OpenStack-Ops runs through the TypingMind local MCP connector. This is best when the MCP server needs access to local files, desktop apps, command-line tools, or private resources on your computer.

What tools does MCP-OpenStack-Ops MCP provide in TypingMind?

MCP-OpenStack-Ops exposes MCP capabilities that can be enabled from the TypingMind Plugins page and used in chat or assigned to AI agents.

Do I need to share my API keys with TypingMind to use MCP-OpenStack-Ops MCP?

No. TypingMind is local-first and lets you keep your model providers, API keys, prompts, and MCP configuration under your control. If MCP-OpenStack-Ops requires authentication, add the required headers, OAuth settings, or local configuration for that MCP server when you create the connection.

Related MCP Servers

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇