Token导航 LogoToken导航TokenDH.com
MCP Openstack Ops logo
运维云端stdio官方级别未说明来源级核验

MCP Openstack Ops

MCP Server

一个基于MCP协议的OpenStack项目管理与监控服务器,提供项目范围内的资源管理和安全控制功能。

工具数

87

提示词数

0

GitHub Stars

27

资源数

0
PythonClaude云端部署Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

call518

提供方

call518

最后核验

2026/5/17 20:21

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

uv run python -m mcp_openstack_ops --help

详细介绍

MCP OpenStack运维

MCP OpenStack操作服务器:一个全面的MCP(模型上下文协议)服务器,提供OpenStack项目管理和监控功能,具有内置的安全控制和单个项目范围。

![License: MIT](https://opensource.org/licenses/MIT) Python

![BuyMeACoffee](https://www.buymeacoffee.com/call518)

![Deploy to PyPI with tag](https://github.com/call518/MCP-OpenStack-Ops/actions/workflows/pypi-publish.yml) PyPI

______________________________________________________________________

建筑与内部(DeepWiki)

![Ask DeepWiki](https://deepwiki.com/call518/MCP-OpenStack-Ops)

______________________________________________________________________

特性

  • 项目范围操作:每个工具都强制执行配置 OS_PROJECT_NAME,验证资源所有权,以便操作保持在单个租户内。
  • 安全防护写入:修改(set_*)工具仅在以下情况下注册 ALLOW_MODIFY_OPERATIONS=true,保持默认部署的只读性和可审计性。
  • 90+专用工具:广泛覆盖计算、网络、存储、映像、身份、Heat和Octavia负载平衡任务,所有这些任务都受当前项目的限制。
  • 批量和筛选操作:实例、卷、网络、映像、快照和密钥对管理器接受逗号分隔的目标或筛选条件,以有意编排批量更改。
  • 行动后反馈和异步指导:突变工具重用共享结果处理程序,该处理程序添加表情符号状态检查、异步计时注释和后续验证命令。
  • 监控和使用洞察: get_service_status, get_resource_monitoring, get_usage_statistics,以及活动项目的配额工具表面服务可用性、利用率和容量。
  • 统一实例查询:The get_instance 该工具通过分页和摘要/详细模式整合了名称、ID、状态和自由形式的搜索路径。
  • 服务器洞察和审计跟踪:专用工具公开服务器事件、管理程序详细信息、可用区域、配额和资源所有权,以加快诊断速度。
  • 负载均衡器管理:Octavia工具涵盖了具有相同安全门的监听器、池、成员、健康监测器、口味、配额和双耳罐操作。
  • 连接和部署灵活性:连接缓存、可配置服务端点、Docker打包,以及两者兼而有之 stdio/streamable-http 传输支持代理/堡垒和多项目设置。
⚠️ 兼容性通知:此MCP服务器是为以下目的开发和优化的 OpenStack环氧树脂(2025.1) 作为主要目标环境。然而,它与大多数现代OpenStack版本(达尔马提亚、卡拉卡尔、山猫等)兼容,因为大多数API在版本之间保持一致。只有少数特定的API端点可能需要进行调整,以与旧版本完全兼容。 🚧 即将推出:动态多版本OpenStack API兼容性正在积极开发中,并将在即将发布的版本中提供,自动为所有主要的OpenStack部署提供无缝支持。

🔧 OpenStackSDK旧版本定制

官方支持的版本:

  • ✅ 开源云平台 环氧树脂(2025.1) -经过全面测试
  • ✅ 开源云平台 达尔马提亚犬(2024.2) -经过全面测试

对于较旧的OpenStack版本 (Wallaby、Caracal、Bobcat等),您可能需要自定义OpenStackSDK版本以匹配您的环境。必须更改SDK版本 文件:

第一步:修改 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'

第二步:修改 pyproject.toml

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

步骤3:重建Docker镜像

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

OpenStackSDK版本参考:

OpenStack发布推荐SDK版本注意事项
环氧树脂(2025.1)>=3.3.0当前默认值
达尔马提亚犬(2024.2)>=3.2.0完全兼容
卡拉卡尔(2024.1)>=3.1.0可能需要测试
山猫(2023.2)>=3.0.0可能需要测试
小袋鼠(2021.1)==3.1.1需要降级
⚠️ 重要:两者都有 Dockerfile.MCP-Serverpyproject.toml 必须有 相同版本 以避免容器运行时发生依赖冲突。

______________________________________________________________________

截图

OpenStack仪表板(环氧树脂2025.1)

OpenStack Dashboard (Epoxy 2025.1)

MCP查询示例-群集状态

Example Cluster Status

______________________________________________________________________

🆕 最新增强功能(v1.x)

批量操作和基于过滤器的目标定位

革命性的资源管理方法,实现一步式操作:

# 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"

具有增强功能的支持工具:

  • set_instance:具有过滤功能的批量生命周期管理(名称_内容、状态、风味_内容、图像_内容)
  • set_volume:具有过滤功能的批量卷操作(名称_内容、状态、大小过滤)
  • set_image:具有过滤功能的批量图像管理(name_contains、status)
  • set_networks:具有过滤功能的批量网络操作(name_contains、status)
  • set_keypair:带过滤的批量密钥对管理(name_contains)
  • set_snapshot:具有筛选功能的批量快照操作(name_contains、status)

输入格式灵活性:

# 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"

行动后状态验证

现在,每项操作都会通过视觉指示器提供即时反馈:

✅ 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

统一资源查询

新合并 get_instance 该工具取代了多个单独的工具:

  • ❌ 老的 get_instance_details, get_instance_info, get_instance_status, get_instance_network_info
  • ✅ 新 get_instance(instance_names="vm1,vm2") -单一工具,全面信息

______________________________________________________________________

📊 OpenStack CLI与MCP工具映射

按类别详细映射

1. 🖥️ 计算(Nova)

OpenStack CLI命令MCP工具状态注释
openstack server listget_instance新统一 -分页、过滤支持
openstack server showget_instance增强 -替换get_instance_by_name、get_instance_by-id
openstack server createset_instance (操作=“创建”)增强 -批量创建支持
openstack server start/stop/rebootset_instance增强 -带过滤的批量操作
openstack server deleteset_instance (操作=“删除”)增强 -使用name_contains过滤进行批量删除
openstack server backup createset_server_backup通过轮换创建备份
openstack server image createset_instance (操作=“快照”)图像/快照创建
openstack server shelve/unshelveset_instance实例搁置
openstack server lock/unlockset_instance实例锁定
openstack server pause/unpauseset_instance实例暂停
openstack server suspend/resumeset_instance实例暂停
openstack server resizeset_instance (操作=“调整大小”)实例大小调整
openstack server resize confirmset_instance (操作=“confirm_resize”)调整大小确认
openstack server resize revertset_instance (操作=“恢复大小”)调整大小还原
openstack server rebuildset_instance (操作=“重建”)实例重建
openstack server rescue/unrescueset_instance恢复模式
openstack server migrateset_server_migration (动作=“迁移”)实时迁移
openstack server evacuateset_server_migration (动作=“疏散”)服务器疏散
openstack server migration listset_server_migration (动作=“列表”)迁移列表
openstack server migration showset_server_migration (动作=“显示”)迁移详细信息
openstack server migration abortset_server_migration (操作=“中止”)迁移中止
openstack server migration confirmset_server_migration (动作=“确认”)迁移确认
openstack server migration force completeset_server_migration (动作=“强制完成”)部队迁移完成
openstack server add networkset_server_network (操作=“add_network”)网络连接
openstack server remove networkset_server_network (操作=“remove_network”)网络分离
openstack server add portset_server_network (操作=“add_port”)端口附件
openstack server remove portset_server_network (操作=“remove_port”)港口支队
openstack server add floating ipset_server_floating_ip (操作=“添加”)浮动IP协会
openstack server remove floating ipset_server_floating_ip (动作=“删除”)浮动IP解除关联
openstack server add fixed ipset_server_fixed_ip (操作=“添加”)固定IP添加
openstack server remove fixed ipset_server_fixed_ip (动作=“删除”)固定IP删除
openstack server add security groupset_server_security_group (操作=“添加”)安全组添加
openstack server remove security groupset_server_security_group (动作=“删除”)安全组删除
openstack server add volumeset_server_volume (动作=“附加”)卷附件
openstack server remove volumeset_server_volume (操作=“分离”)体积分离
openstack server setset_server_properties (动作=“设置”)服务器属性设置
openstack server unsetset_server_properties (动作=“未设置”)服务器属性未设置
openstack server dump createset_server_dump服务器转储创建
openstack server event listget_server_events服务器事件跟踪
openstack server group listget_server_groups服务器组列表
openstack server group create/deleteset_server_group服务器组管理
openstack flavor listget_flavor_list (通过cluster_status)口味列表
openstack flavor create/deleteset_flavor风味管理
openstack keypair listget_keypair_list钥匙扣列表
openstack keypair create/deleteset_keypair密钥对管理
openstack hypervisor listget_hypervisor_details管理程序查询
openstack availability zone listget_availability_zones可用区域列表

2. 🌐 网络(中子)

OpenStack CLI命令MCP工具状态注释
openstack network listget_network_details详细的网络信息
openstack network showget_network_details (名称参数)特定网络查询
openstack network createset_networks (操作=“创建”)增强 -批量网络创建
openstack network deleteset_networks (操作=“删除”)增强 -带过滤的批量删除
openstack network setset_networks (操作=“更新”)增强 -批量更新
openstack subnet listget_network_details (包括子网)包含子网信息
openstack subnet create/deleteset_subnets子网管理
openstack router listget_routers路由器列表
openstack router create/delete(尚未实施)🚧路由器管理
openstack floating ip listget_floating_ips浮动IP列表
openstack floating ip createset_floating_ip (操作=“创建”)浮动IP创建
openstack floating ip deleteset_floating_ip (操作=“删除”)浮动IP删除
openstack floating ip setset_floating_ip (动作=“设置”)浮动IP属性设置
openstack floating ip showset_floating_ip (动作=“显示”)浮动IP详细信息
openstack floating ip unsetset_floating_ip (动作=“未设置”)浮动IP财产清算
openstack floating ip pool listget_floating_ip_pools浮动IP池列表
openstack floating ip port forwarding createset_floating_ip_port_forwarding (操作=“创建”)端口转发创建
openstack floating ip port forwarding deleteset_floating_ip_port_forwarding (操作=“删除”)端口转发删除
openstack floating ip port forwarding listset_floating_ip_port_forwarding (动作=“列表”)端口转发列表
openstack floating ip port forwarding setset_floating_ip_port_forwarding (动作=“设置”)端口转发更新
openstack floating ip port forwarding showset_floating_ip_port_forwarding (动作=“显示”)端口转发详细信息
openstack security group listget_security_groups安全组列表
openstack security group create/delete(尚未实施)🚧安全组管理
openstack port listget_network_details (包括端口)包括港口信息
openstack port create/deleteset_network_ports港口管理
openstack network qos policy list(尚未实施)🚧QoS策略列表
openstack network qos policy createset_network_qos_policiesQoS策略管理
openstack network agent listget_service_status (包括代理人)网络代理
openstack network agent setset_network_agents网络代理管理

3. 💾 储存(煤渣)

OpenStack CLI命令MCP工具状态注释
openstack volume listget_volume_list卷列表
openstack volume showget_volume_list (过滤)具体数量查询
openstack volume create/deleteset_volume卷创建/删除
openstack volume setset_volume (操作=“修改”)体积属性修改
openstack volume type listget_volume_types卷类型列表
openstack volume type create/delete(尚未实施)🚧卷类型管理
openstack volume snapshot listget_volume_snapshots快照列表
openstack volume snapshot create/deleteset_snapshot快照管理
openstack backup list(尚未实施)🚧备份列表
openstack backup create/deleteset_volume_backups卷备份管理
openstack volume transfer request list(尚未实施)🚧批量转移
openstack server volume listget_server_volumes服务器卷列表
openstack server add/remove volumeset_server_volume服务器卷连接/分离
openstack volume group list(尚未实施)🚧卷组列表
openstack volume group createset_volume_groups卷组管理
openstack volume qos list(尚未实施)🚧QoS列表
openstack volume qos createset_volume_qosQoS管理

4. 🖼️ 图片(一瞥)

OpenStack CLI命令MCP工具状态注释
openstack image listget_image_detail_list图片列表
openstack image showget_image_detail_list (过滤)具体图像查询
openstack image createset_image (操作=“创建”)使用min_disk、min_ram和属性增强图像创建
openstack image deleteset_image (操作=“删除”)图像删除
openstack image setset_image (操作=“更新”)图像属性修改
openstack image saveset_image (操作=“保存”)图片下载
openstack image add project(尚未实施)🚧项目共享
openstack image member list(尚未实施)🚧会员列表
openstack image member createset_image_members图像成员管理
openstack image set --propertyset_image_metadata图像元数据
openstack image set --public/privateset_image_visibility图像可见性设置

5. 👥 身份(Keystone)

OpenStack CLI命令MCP工具状态注释
openstack user listget_user_list用户列表
openstack user showget_user_list (过滤)特定用户查询
openstack user create/delete(尚未实施)🚧用户管理
openstack project listget_project_details项目列表
openstack project showget_project_details (名称参数)具体项目查询
openstack project create/deleteset_project项目管理
openstack role listget_role_assignments角色列表
openstack role assignment listget_role_assignments角色分配列表
openstack role create/deleteset_roles角色管理
openstack domain list(尚未实施)🚧域名列表
openstack domain create/deleteset_domains域名管理
openstack group list(尚未实施)🚧集团列表
openstack group create/deleteset_identity_groups集团管理
openstack service listget_service_status服务列表
openstack service create/deleteset_services服务管理
openstack endpoint listget_service_status (包括端点)端点信息

6. 🔥 编排(热)

OpenStack CLI命令MCP工具状态注释
openstack stack listget_heat_stacks堆栈列表
openstack stack showget_heat_stacks (过滤)特定堆栈查询
openstack stack createset_heat_stack (操作=“创建”)堆栈创建
openstack stack deleteset_heat_stack (操作=“删除”)堆栈删除
openstack stack updateset_heat_stack (操作=“更新”)堆栈更新
openstack stack suspend/resumeset_heat_stack堆栈暂停/恢复
openstack stack resource list(尚未实施)🚧堆栈资源列表
openstack stack event list(尚未实施)🚧堆栈事件列表
openstack stack template show(尚未实施)🚧模板查询
openstack stack output list(尚未实施)🚧堆栈输出列表

7. ⚖️ 负载平衡器(Octavia)

OpenStack CLI命令MCP工具状态注释
openstack loadbalancer listget_load_balancer_status带分页的负载平衡器列表
openstack loadbalancer showget_load_balancer_status负载均衡器详细信息
openstack loadbalancer createset_load_balancer (操作=“创建”)负载平衡器创建
openstack loadbalancer deleteset_load_balancer (操作=“删除”)删除负载平衡器
openstack loadbalancer setset_load_balancer (操作=“更新”)负载平衡器属性更新
openstack loadbalancer stats showget_load_balancer_status负载平衡器统计信息
openstack loadbalancer status showget_load_balancer_status负载平衡器状态树
openstack loadbalancer failoverset_load_balancer (操作=“故障转移”)负载平衡器故障转移
openstack loadbalancer unsetset_load_balancer (动作=“未设置”)负载平衡器属性未设置
听众管理
openstack loadbalancer listener listget_load_balancer_listeners负载均衡器的侦听器列表
openstack loadbalancer listener createset_load_balancer_listener (操作=“创建”)侦听器创建(HTTP/HTTPS/TCP/UDP)
openstack loadbalancer listener deleteset_load_balancer_listener (操作=“删除”)侦听器删除
openstack loadbalancer listener showget_load_balancer_listeners听众详细信息
openstack loadbalancer listener setset_load_balancer_listener (操作=“更新”)侦听器属性更新
openstack loadbalancer listener stats showget_load_balancer_listeners听众统计
openstack loadbalancer listener unsetset_load_balancer_listener (动作=“未设置”)侦听器属性未设置
游泳池管理
openstack loadbalancer pool listget_load_balancer_pools池列表(全部或按听众)
openstack loadbalancer pool createset_load_balancer_pool (操作=“创建”)使用算法创建池
openstack loadbalancer pool deleteset_load_balancer_pool (操作=“删除”)池删除
openstack loadbalancer pool setset_load_balancer_pool (操作=“更新”)泳池物业更新
openstack loadbalancer pool showget_load_balancer_pools池详细信息
openstack loadbalancer pool stats showget_load_balancer_pools池统计
openstack loadbalancer pool unsetset_load_balancer_pool (动作=“未设置”)池属性未设置
成员管理
openstack loadbalancer member listget_load_balancer_members池成员列表
openstack loadbalancer member createset_load_balancer_member (操作=“创建”)池成员创建
openstack loadbalancer member deleteset_load_balancer_member (操作=“删除”)池成员删除
openstack loadbalancer member setset_load_balancer_member (操作=“更新”)池成员属性更新
openstack loadbalancer member showget_load_balancer_members池成员详细信息
openstack loadbalancer member unsetset_load_balancer_member (动作=“未设置”)池成员属性未设置
健康监测管理
openstack loadbalancer healthmonitor listget_load_balancer_health_monitors健康监测器列表
openstack loadbalancer healthmonitor createset_load_balancer_health_monitor (操作=“创建”)健康监视器创建
openstack loadbalancer healthmonitor deleteset_load_balancer_health_monitor (操作=“删除”)健康监视器删除
openstack loadbalancer healthmonitor setset_load_balancer_health_monitor (操作=“更新”)健康监测器更新
openstack loadbalancer healthmonitor showget_load_balancer_health_monitors健康监测器详细信息
openstack loadbalancer healthmonitor unsetset_load_balancer_health_monitor (动作=“未设置”)未设置健康监视器属性
L7政策管理
openstack loadbalancer l7policy listget_load_balancer_l7_policiesL7保单列表
openstack loadbalancer l7policy createset_load_balancer_l7_policy (操作=“创建”)L7策略创建
openstack loadbalancer l7policy deleteset_load_balancer_l7_policy (操作=“删除”)L7策略删除
openstack loadbalancer l7policy setset_load_balancer_l7_policy (操作=“更新”)L7政策更新
openstack loadbalancer l7policy showget_load_balancer_l7_policiesL7政策详情
openstack loadbalancer l7policy unsetset_load_balancer_l7_policy (动作=“未设置”)L7保单属性未设置
L7规则管理 🆕
openstack loadbalancer l7rule listget_load_balancer_l7_rulesL7规则列表
openstack loadbalancer l7rule createset_load_balancer_l7_rule (操作=“创建”)L7规则创建
openstack loadbalancer l7rule deleteset_load_balancer_l7_rule (操作=“删除”)L7规则删除
openstack loadbalancer l7rule setset_load_balancer_l7_rule (操作=“更新”)L7规则更新
openstack loadbalancer l7rule showget_load_balancer_l7_rulesL7规则详细信息
openstack loadbalancer l7rule unsetset_load_balancer_l7_rule (动作=“未设置”)L7规则属性未设置
安芙兰管理 🆕
openstack loadbalancer amphora listget_load_balancer_amphorae安芙兰上市
openstack loadbalancer amphora showset_load_balancer_amphora (动作=“显示”)Amphora详细信息
openstack loadbalancer amphora configureset_load_balancer_amphora (操作=“配置”)Amphora配置
openstack loadbalancer amphora failoverset_load_balancer_amphora (操作=“故障转移”)Amphora故障切换
openstack loadbalancer amphora delete不适用OpenStack SDK不支持
openstack loadbalancer amphora stats show不适用OpenStack SDK不支持
供应商管理
openstack loadbalancer provider listget_load_balancer_providers提供商列表
openstack loadbalancer provider capability listget_load_balancer_providers提供商能力列表
可用区管理 🆕
openstack loadbalancer availabilityzone listget_load_balancer_availability_zones可用区域列表
openstack loadbalancer availabilityzone showget_load_balancer_availability_zones可用区详细信息
openstack loadbalancer availabilityzone createset_load_balancer_availability_zone (操作=“创建”)可用区创建
openstack loadbalancer availabilityzone deleteset_load_balancer_availability_zone (操作=“删除”)可用区删除
openstack loadbalancer availabilityzone setset_load_balancer_availability_zone (操作=“更新”)可用区域更新
openstack loadbalancer availabilityzone unsetset_load_balancer_availability_zone (动作=“未设置”)可用区属性未设置
风味管理 🆕
openstack loadbalancer flavor listget_load_balancer_flavors口味列表
openstack loadbalancer flavor showget_load_balancer_flavors风味细节
openstack loadbalancer flavor createset_load_balancer_flavor (操作=“创建”)风味创造
openstack loadbalancer flavor deleteset_load_balancer_flavor (操作=“删除”)风味删除
openstack loadbalancer flavor setset_load_balancer_flavor (操作=“更新”)口味更新
openstack loadbalancer flavor unsetset_load_balancer_flavor (动作=“未设置”)风味属性未设置
风味档案管理
openstack loadbalancer flavorprofile listget_load_balancer_flavor_profiles风味简介列表
openstack loadbalancer flavorprofile showget_load_balancer_flavor_profiles风味简介详细信息
openstack loadbalancer flavorprofile createset_load_balancer_flavor_profile (操作=“创建”)风味档案创建
openstack loadbalancer flavorprofile setset_load_balancer_flavor_profile (操作=“更新”)风味档案更新
openstack loadbalancer flavorprofile unsetset_load_balancer_flavor_profile (动作=“未设置”)风味配置文件属性未设置
openstack loadbalancer flavorprofile deleteset_load_balancer_flavor_profile (操作=“删除”)🚧待执行
配额管理 🆕
openstack loadbalancer quota listget_load_balancer_quotas配额列表
openstack loadbalancer quota showget_load_balancer_quotas配额详细信息
openstack loadbalancer quota setset_load_balancer_quota (动作=“设置”)配额设置
openstack loadbalancer quota resetset_load_balancer_quota (动作=“重置”)配额重置

8. 📊 监控和记录

OpenStack CLI命令MCP工具状态注释
资源监控get_resource_monitoring资源监控
服务状态get_service_status服务状态查询
集群概述get_cluster_status集群概述
服务日志set_service_logs服务日志管理
系统指标set_metrics指标管理
报警管理set_alarms报警管理
计算代理set_compute_agents计算代理管理
使用统计get_usage_statistics使用统计

9. 📏 使用和配额

OpenStack CLI命令MCP工具状态注释
openstack quota showget_quota配额查询
openstack quota setset_quota配额设置
openstack usage showget_usage_statistics使用情况查询
openstack limits showget_quota (包括限制)限额查询
资源利用get_resource_monitoring资源利用

______________________________________________________________________

快速开始

💡 需要OpenStack集群进行测试吗?\ 查看此综合指南: 教程:安装OpenStack多节点集群/w Kolla Ansible(环氧树脂/达尔马提亚)\ 非常适合设置测试环境来探索MCP OpenStack Ops功能。

Flow Diagram of Quickstart/Tutorial

1.环境设置

# 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

环境配置

配置您的 .env 带有OpenStack凭据的文件:

# 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配置

对于使用SSL/TLS的安全OpenStack部署:

# 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

协议配置说明:

  • OS_AUTH_PROTOCOL=http:用于本地开发或仅支持HTTP的OpenStack部署
  • OS_AUTH_PROTOCOL=https:用于启用SSL/TLS的生产环境
  • 什么时候 https 未设置 OS_CACERT,SSL验证已禁用(不安全但功能正常)
  • 为了安全的生产部署,始终提供 OS_CACERT 使用您的CA证书路径

2.运行服务器

# Start all services
docker-compose up -d

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

容器架构:

  • mcp服务器:带工具的OpenStack MCP服务器
  • mcpo代理:OpenAPI(REST-API)
  • 打开webui:用于测试和交互的Web界面
📌 备注:Web UI配置说明基于OpenWebUI v0.6.22。菜单位置和设置在较新版本中可能有所不同。

服务URL-Docker内部:

  • MCP服务器: localhost:8080 (HTTP传输)
  • MCPO代理: localhost:8000 (OpenStack API代理)
  • 打开WebUI: localhost:3000 (Web界面)

服务URL-Docker外部:

  • MCP服务器: host.docker.internal:18005 (HTTP传输)
  • MCPO代理: host.docker.internal:8005 (OpenStack API代理)
  • 打开WebUI: host.docker.internal:3005 (Web界面)

用于Claude桌面集成

添加到您的Claude Desktop配置中:

{
  "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"
      }
    }
  }
}

______________________________________________________________________

服务器配置

命令行选项

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

环境变量

变量描述默认值用法
OpenStack身份验证
OS_AUTH_HOSTOpenStack身份服务主机必需身份验证主机地址
OS_AUTH_PORTOpenStack身份服务端口必需身份验证端口
OS_AUTH_PROTOCOL连接协议(http或https)http使用 https 使用SSL/TLS进行生产
OS_CACERTHTTPS的SSL CA证书路径可选安全HTTPS连接所必需的(例如。, /etc/ssl/certs/ca.pem).如果未设置HTTPS,则禁用SSL验证(不安全)
OS_USERNAMEOpenStack用户名必填用户凭据
OS_PASSWORDOpenStack密码必填用户凭据
OS_PROJECT_NAMEOpenStack项目名称必填项目范围
OS_IDENTITY_API_VERSION标识API版本3API版本
OS_PROJECT_DOMAIN_NAME项目域名default域范围
OS_USER_DOMAIN_NAME用户域名default域范围
OS_REGION_NAMEOpenStack区域RegionOne区域范围
OpenStack服务端口
OS_COMPUTE_PORT计算服务端口8774Nova端点
OS_NETWORK_PORT网络服务端口9696中子端点
OS_VOLUME_PORT卷服务端口8776煤渣终点
OS_IMAGE_PORT图像服务端口9292一瞥终点
OS_PLACEMENT_PORT放置服务端口8780放置终点
OS_HEAT_STACK_PORT热编排服务端口8004加热API终点
OS_HEAT_STACK_CFN_PORT热云形成服务端口18888加热CFN API端点(默认值:8000,为避免Docker端口冲突而更改)
MCP服务器配置
MCP_LOG_LEVEL日志记录级别INFO开发调试
ALLOW_MODIFY_OPERATIONS启用修改操作false状态修改的安全控制
FASTMCP_TYPE运输类型stdio很少需要改变
FASTMCP_HOSTHTTP主机地址127.0.0.1仅适用于HTTP模式
FASTMCP_PORTHTTP端口号8080仅适用于HTTP模式
身份验证(可选)
REMOTE_AUTH_ENABLE为可流式传输的http模式启用承载令牌身份验证false生产安全
REMOTE_SECRET_KEY承载令牌身份验证的密钥启用身份验证时需要生产安全

______________________________________________________________________

🔒 项目隔离和安全

单一项目范围操作

MCP OpenStack运维在严格定义的项目范围内运行OS_PROJECT_NAME 环境变量。这在多租户OpenStack环境中提供了完全的租户隔离和数据隐私。

主要安全功能:

  • 100%完全资源隔离:所有操作都仅限于具有增强安全验证的指定项目内的资源
  • 零跨租户数据泄漏:高级项目所有权验证可防止访问其他项目的资源
  • 多层安全过滤:每个服务都通过当前项目ID实现智能资源过滤,并进行额外验证
  • 安全资源查找:所有资源搜索都使用具有所有权验证的项目范围查找
  • 共享资源访问:智能地包括共享/公共资源(网络、图像),同时保持严格的安全边界
  • 跨项目访问预防:加强对其他项目中类似名称资源的意外操作的保护

按项目筛选的资源:

服务项目范围内的资源备注
身份用户(通过角色分配),角色分配仅限在当前项目中具有角色的用户
计算实例、风格(嵌入式数据)、密钥对项目范围内的所有实例
图像私人图像(拥有)、公共/社区/共享图像智能过滤可防止零图像问题
网络网络、子网、安全组、浮动IP、路由器包括用于访问的共享/外部网络
存储卷、快照、备份项目中的所有存储资源
编排热堆栈、堆栈资源项目内的所有编排
负载均衡器负载均衡器、监听器、池项目内的所有负载均衡
监控资源使用情况、项目配额项目特定的监控数据

安全验证和测试

项目隔离安全测试

要验证项目隔离是否正常工作,请运行附带的安全测试:

# Run project isolation security test
python test_project_isolation.py

预期测试结果:

🔒 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!

安全功能已验证:

  • ✅ 项目ID验证和匹配
  • ✅ 所有服务的资源所有权验证
  • ✅ 服务级别项目过滤
  • ✅ 具有跨项目保护的安全资源查找
  • ✅ 防止对其他项目资源的意外操作

为了管理多个OpenStack项目,部署多个具有不同配置的MCP服务器实例 OS_PROJECT_NAME 值:

示例:管理3个项目

# 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桌面多项目配置示例:

{
  "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"
      }
    }
  }
}

这允许Claude独立访问每个项目,在环境之间完全隔离。

📁 即用型配置文件:

完整的多项目配置示例可在 mcp-config.json.multi-project:

  • 生产:为安全起见,只读操作(ALLOW_MODIFY_OPERATIONS=false)
  • 发展:已启用完整操作(ALLOW_MODIFY_OPERATIONS=true)
  • 测试:已启用调试日志记录(MCP_LOG_LEVEL=DEBUG)
# Copy and customize the multi-project configuration
cp mcp-config.json.multi-project ~/.config/claude-desktop/mcp_servers.json
# Edit with your OpenStack credentials

______________________________________________________________________

安全控制

修改操作保护

默认情况下,所有可以修改或删除OpenStack资源的操作都是 残疾的 为了安全:

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

受保护的操作(当 ALLOW_MODIFY_OPERATIONS=false):

  • 实例管理(启动、停止、重新启动、暂停、取消暂停)
  • 卷操作(创建、删除、附着、分离)
  • 密钥对管理(创建、删除、导入)
  • 浮动IP操作(创建、删除、关联、解除关联)
  • 快照管理(创建、删除)
  • 图像管理(创建、删除、更新)
  • 热堆操作(创建、删除、更新)

始终可用(只读操作):

  • 集群状态和监控
  • 资源列表(实例、卷、网络等)
  • 服务状态检查
  • 使用和配额信息
  • 搜索和过滤操作

⚠️ 要启用修改操作,请执行以下操作:

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

工具注册行为:

  • 什么时候 ALLOW_MODIFY_OPERATIONS=false:只有只读工具在MCP服务器上注册
  • 什么时候 ALLOW_MODIFY_OPERATIONS=true:所有工具(只读+修改操作)都已注册
  • 工具可用性在服务器启动时确定-更改此设置后需要重新启动

最佳实践:

  • 保持 ALLOW_MODIFY_OPERATIONS=false 在生产环境中
  • 仅在开发/测试环境中启用修改操作
  • 为不同的环境使用单独的配置
  • 在启用修改功能之前审查操作
  • 更改后重新启动MCP服务器 ALLOW_MODIFY_OPERATIONS 设置

______________________________________________________________________

💬 示例查询和使用模式

有关如何与此MCP服务器交互的综合示例,包括自然语言查询及其相应的工具映射,请参阅:

📖 示例查询和使用模式

本节包括:

  • 🎯 集群概述和状态查询
  • �️ 实例管理操作
  • 🌐 网络配置任务
  • � 存储管理工作流程
  • 🔥 热编排示例
  • ⚖️ 负载平衡器操作
  • � 高级搜索模式
  • 📊 监控和故障排除
  • 🧠 复杂的多工具查询组合

______________________________________________________________________

性能优化

大规模环境支持

MCP服务器针对具有数千个实例的大型OpenStack环境进行了优化:

分页功能:

  • 默认限制可防止内存溢出(每个请求50个实例)
  • 可配置的安全限制(每次请求最多200个实例)
  • 基于偏移量的分页,用于浏览大型数据集
  • 性能指标跟踪(处理时间、每秒实例数)

搜索优化:

  • 两阶段搜索过程(基本信息过滤→ 详细信息检索)
  • 具有连接重用功能的智能缓存
  • 选择性API调用可最大限度地减少开销
  • 区分大小写的搜索选项,用于精确过滤

连接管理:

  • 具有有效性测试的全局连接缓存
  • 瞬态故障的自动重试机制
  • 用于高吞吐量场景的连接池

使用示例:

# 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

______________________________________________________________________

发展

添加新工具

编辑 src/mcp_openstack_ops/mcp_main.py 添加新的MCP工具:

@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函数

将实用程序功能添加到 src/mcp_openstack_ops/functions.py:

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

______________________________________________________________________

测试与验证

本地测试

# 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 OpenStack connection
uv run python -c "from src.mcp_openstack_ops.functions import get_openstack_connection; print(get_openstack_connection())"

______________________________________________________________________

🔐 安全和身份验证

承载令牌身份验证

对于 streamable-http 模式下,此MCP服务器支持承载令牌身份验证,以确保远程访问的安全。在生产环境中运行服务器时,这一点尤为重要。

配置

启用身份验证:

# In .env file
REMOTE_AUTH_ENABLE=true
REMOTE_SECRET_KEY=my-test-secret-key-12345

或者通过CLI:

uv run python -m mcp_openstack_ops --type streamable-http --auth-enable --secret-key your-secure-secret-key-here

安全等级

  1. stdio模式 (默认):仅本地访问,无需身份验证
  2. 可流式传输的http+REMOTE_AUTH_ENABLE=false/undefined:无身份验证的远程访问⚠️ 不建议用于生产
  3. 可流式传输http+REMOTE_AUTH_ENABLE=true:使用承载令牌身份验证进行远程访问✅ 建议用于生产
🔒 默认策略: REMOTE_AUTH_ENABLE 默认为 false 如果未定义、为空或为null。这确保了服务器即使在没有显式身份验证配置的情况下也能启动。

客户端配置

启用身份验证后,MCP客户端必须在授权标头中包含Bearer令牌:

{
  "mcpServers": {
    "mcp-openstack-ops": {
      "type": "streamable-http",
      "url": "http://your-server:8000/mcp",
      "headers": {
        "Authorization": "Bearer your-secure-secret-key-here"
      }
    }
  }
}

安全最佳实践

  • 始终启用身份验证 在生产环境中使用流式http模式时
  • 使用强随机生成的密钥 (建议使用32+个字符)
  • 使用HTTPS 如果可能(使用SSL/TLS配置反向代理)
  • 限制网络访问 使用防火墙或网络策略
  • 定期旋转密钥 增强安全性
  • 监控访问日志 未经授权的访问尝试

错误处理

当身份验证失败时,服务器返回:

  • 401未经授权 用于丢失或无效的令牌
  • 详细的错误消息 JSON格式用于调试

______________________________________________________________________

🎯 最近的改进和增强

🔒 完成项目隔离安全实施

100%项目隔离保证:

  • 多层安全验证:为所有资源操作添加了全面的项目所有权验证
  • 增强的删除操作安全性:所有删除操作现在都使用带有所有权验证的安全项目范围查找
  • 创建操作安全:创建过程中的资源引用(网络、图像等)已验证项目所有权
  • 查询安全增强:所有列表/获取操作都包括明确的项目验证和资源所有权检查
  • 跨项目访问预防:对其他项目中类似名称资源的意外操作提供高级保护
  • 安全测试套件:已添加 test_project_isolation.py 用于全面的安全验证

技术实施:

  • 新的安全实用程序:已添加 get_current_project_id(), validate_resource_ownership(), find_resource_by_name_or_id() 函数
  • 服务级别安全:通过项目所有权验证增强了所有服务模块(计算、网络、存储等)
  • 安全资源查找:用安全的项目范围资源查找替换了不安全的基于名称的循环
  • 错误消息增强:改进了错误消息,以清楚地指示项目访问限制

完成项目范围界定实施

增强的安全性和租户隔离:

  • 所有服务项目范围:身份、计算、网络、存储、映像、编排、负载均衡器和监控服务现在按当前项目ID过滤资源
  • 零跨租户数据泄露:使用OpenStack SDK级别的自动过滤 current_project_id
  • 智能资源访问:智能处理共享/公共资源(网络、图像),同时保持安全边界

修复了图像服务问题 🖼️

解决了零图像计数问题:

  • 增强图像过滤:现在包括公共、社区、共享和项目拥有的图像
  • 智能可视性处理:正确处理不同的图像可见性类型
  • 防止空结果:修复了过于严格的过滤逻辑

改进的vCPU/RAM计算

固定实例资源显示:

  • 嵌入式风味数据使用:直接使用server.flavor属性,避免了404 API错误
  • 准确的资源报告:群集状态报告中的vCPU和RAM值正确
  • 消除了API故障:不再出现导致资源值为零的风味查找失败

增强文档 📚

综合项目范围界定文件:

  • 多项目管理指南:管理多个OpenStack项目的完整设置说明
  • 安全和隔离细节:租户隔离功能的详细说明
  • 即用型配置:预配置 mcp-config.json.multi-project 用于快速设置
  • 更新环境变量:增强 .env.example 在项目范围界定指导下

______________________________________________________________________

🚀 添加自定义工具

此MCP服务器旨在易于扩展。按照以下步骤添加您自己的自定义工具:

分步指南

1. 添加辅助函数(可选)

添加可重用的数据函数 src/mcp_openstack_ops/functions.py:

async def get_your_custom_data(target_resource: str = None) -> List[Dict[str, Any]]:
    """Your custom data retrieval function."""
    # Example implementation - adapt to your OpenStack service
    conn = get_openstack_connection()
    results = []
    
    try:
        # Example: Custom query using OpenStack SDK
        resources = conn.your_service.list_resources(
            filters={'name': target_resource} if target_resource else {}
        )
        
        for resource in resources:
            results.append({
                'name': resource.name,
                'id': resource.id,
                'status': resource.status,
                'created_at': resource.created_at,
                # Add your custom fields
            })
            
    except Exception as e:
        logger.error(f"Failed to get custom data: {e}")
        return []
        
    return results

2. 创建MCP工具文件

创建一个新文件 src/mcp_openstack_ops/tools/get_your_custom_analysis.py:

"""Tool implementation for get_your_custom_analysis."""

import json
from datetime import datetime
from typing import Optional
from ..functions import get_your_custom_data  # Import your helper function
from ..mcp_main import (
    logger,
    mcp,
)

@mcp.tool()
async def get_your_custom_analysis(limit: int = 50, target_name: Optional[str] = None) -> str:
    """
    [Tool Purpose]: Brief description of what your tool does
    
    [Exact Functionality]:
    - Feature 1: Data aggregation and analysis
    - Feature 2: Resource monitoring and insights
    - Feature 3: Performance metrics and reporting
    
    [Required Use Cases]:
    - When user asks "your specific analysis request"
    - Your business-specific monitoring needs
    
    Args:
        limit: Maximum results (1-100)
        target_name: Target resource/service name
    
    Returns:
        Formatted analysis results
    """
    try:
        limit = max(1, min(limit, 100))  # Always validate input
        
        logger.info(f"Getting custom analysis, limit: {limit}, target: {target_name}")
        
        results = await get_your_custom_data(target_resource=target_name)
        
        if not results:
            return f"No custom analysis data found" + (f" for '{target_name}'" if target_name else "")
        
        # Apply limit
        results = results[:limit]
        
        # Format results as table
        table_data = []
        for item in results:
            table_data.append({
                'Name': item.get('name', 'N/A'),
                'ID': item.get('id', 'N/A'),
                'Status': item.get('status', 'N/A'),
                'Created': item.get('created_at', 'N/A'),
            })
        
        # Return formatted JSON
        return json.dumps({
            'title': f'Custom Analysis (Top {len(results)})',
            'data': table_data,
            'total_count': len(results),
            'timestamp': datetime.now().isoformat()
        }, indent=2)
        
    except Exception as e:
        logger.error(f"Failed to get custom analysis: {e}")
        return f"Error: {str(e)}"

3. 用于修改操作(可选)

如果您的工具执行修改操作,请使用 @conditional_tool 改为装饰师:

"""Tool implementation for set_your_custom_resource."""

from ..mcp_main import (
    conditional_tool,  # Use this instead of @mcp.tool()
    handle_operation_result,
    logger,
)
from ..functions import set_your_custom_resource

@conditional_tool  # Only registers when ALLOW_MODIFY_OPERATIONS=true
async def set_your_custom_resource(resource_name: str, action: str) -> str:
    """
    Manage your custom OpenStack resources.
    
    Use when user requests custom resource management.
    """
    try:
        result = set_your_custom_resource(resource_name, action)
        
        return handle_operation_result(
            result=result,
            operation_name="Custom Resource Management",
            details={
                'Resource': resource_name,
                'Action': action
            }
        )
        
    except Exception as e:
        logger.error(f"Custom resource operation failed: {e}")
        return f"Error: {str(e)}"

4. 更新提示模板(推荐)

将您的工具描述添加到 src/mcp_openstack_ops/prompt_template.md 为了更好地识别自然语言:

### **Your Custom Analysis Tool**

### X. **get_your_custom_analysis**
**Purpose**: Brief description of what your tool does
**Usage**: "Show me your custom analysis" or "Get custom analysis for resource_name"
**Features**: Data aggregation, resource monitoring, performance metrics
**Optional**: `target_name` parameter for specific resource analysis

5. 测试你的工具

# Local testing
./scripts/run-mcp-inspector-local.sh

# Or with Docker
docker-compose up -d
docker-compose logs -f mcp-server

# Test with natural language:
# "Show me your custom analysis"
# "Get custom analysis for target_name"

工具注册系统

MCP服务器使用自动工具发现。在中创建新文件时 src/mcp_openstack_ops/tools/,它通过自动注册 register_all_tools() 功能在 tools/__init__.py无需手动进行导入注册!

安全系统

  • 只读工具:使用 @mcp.tool() -始终可用
  • 修改工具:使用 @conditional_tool -仅在以下情况下可用 ALLOW_MODIFY_OPERATIONS=true
  • 连接:始终使用 get_openstack_connection() 用于OpenStack API访问
  • 项目隔离:所有操作都会自动限定范围 OS_PROJECT_NAME

就是这样!您的自定义工具已准备好用于自然语言查询。

______________________________________________________________________

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

贡献

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

目录标签

目录标签

PythonClaude云端部署OpenStack管理本地部署云计算项目隔离资源监控负载均衡管理

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

token

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

87

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiotoken部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP