IBM MQ MCP服务器
此存储库包含两个IBM MQ模型上下文协议(MCP)服务器,它们向AI代理(如Claude)公开IBM MQ监控和管理功能。两个服务器都通过HTTPS与IBM MQ的REST API和MQSC命令通信。
______________________________________________________________________
服务器概述
| 文件 | 服务器名称 | 访问级别 | 用例 |
|---|---|---|---|
| mqmcpserver_enterprise.py | mqmcpserver-enterprise | 完全读取权限 | 需要深入诊断的运营团队 |
| mqmcpserver_readolly_secure.py | mqmcpserver-enterprise-readonly | 严格只读(安全强化) | AI代理、审计员、只读操作员 |
______________________________________________________________________
mqmcpserver_enterprise.py
企业级MCP服务器,专为大型MQ基础设施(200多台服务器,500多个队列管理器)而设计。提供全面的监控、分析和健康报告工具。
工具
discover_all_queue_managers
发现并列出所有已配置MQ服务器上的所有队列管理器。
- 参数: 无
- 退货: 按状态和区域分组的发现报告,包括运行状态、环境和关键性元数据
- MQSC/API:
GET /qmgr/ - 用途: 初步基础设施发现,所有QM的健康检查
______________________________________________________________________
health_check_all_queues
对队列管理器上的所有队列进行全面的健康检查。标记深度阈值以上的队列和没有活动消费者的队列。
- 参数:
- qmgr_name (str)--队列管理器名称,例如。 QM1 - depth_threshold (int,默认值 80)--如果队列深度超过此百分比,则发出警报
- 退货: 包含警报(HIGH_DEPTH、NO_CONSUMERS)、汇总统计信息和按深度排列的前10个队列的运行状况报告
- MQSC命令:
DISPLAY QLOCAL(*) CURDEPTH MAXDEPTH IPPROCS OPPROCS - 用途: 日常健康检查、事故调查、产能监控
______________________________________________________________________
monitor_channel_status
监控队列管理器上的所有通道(发送方、接收方、服务器、集群)。
- 参数:
- qmgr_name (str)--队列管理器名称
- 退货: 通道状态报告分类为“正在运行”、“未活动”、“正在重试”或“已停止”。突出显示处于“重试”或“停止”状态的频道
- MQSC命令:
DISPLAY CHSTATUS(*) ALL - 用途: 连接故障排除、网络问题检测、群集运行状况
______________________________________________________________________
analyze_queue_depth_trends
分析当前队列深度,以确定容量问题和不断增长的队列。
- 参数:
- qmgr_name (str)--队列管理器名称 - queue_pattern (str,默认值 *)--队列名称过滤模式
- 退货: 容量分析,包括每个队列的利用率百分比、严重性分类(信息/警告/关键)和建议
- MQSC命令: `DISPLAY QLOCAL(
) CURDEPTH MAXDEPTH MSGAGE`
- 用途: 容量规划、识别慢速消费者、预测问题
______________________________________________________________________
get_application_connections
列出与队列管理器的所有活动应用程序连接。
- 参数:
- qmgr_name (str)--队列管理器名称
- 退货: 活动连接总数和连接详细信息行(可读性上限为50)
- MQSC命令:
DISPLAY CONN(*) ALL - 用途: 安全审计、解决应用程序问题、容量规划
______________________________________________________________________
check_dead_letter_queues
检查死信队列(DLQ)并报告消息累积。
- 参数:
- qmgr_name (str)--队列管理器名称
- 退货: DLQ深度和补救建议(如果存在消息)
- MQSC命令:
DISPLAY QLOCAL(SYSTEM.DEAD.LETTER.QUEUE) CURDEPTH MAXDEPTH - 用途: 排除邮件传递故障,识别有问题的应用程序
______________________________________________________________________
monitor_cluster_health
监控所有已配置队列管理器的MQ群集运行状况。
- 参数:
- cluster_name (str,默认值 *)--集群名称模式
- 退货: 来自每个响应队列管理器的群集成员状态
- MQSC命令:
DISPLAY CLUSQMGR() ALL - 用途: 集群故障排除,确保集群稳定性,检测大脑分裂
______________________________________________________________________
get_performance_metrics
检索队列管理器的性能指标。
- 参数:
- qmgr_name (str)--队列管理器名称
- 退货: 原始队列管理器状态数据,包括CPU、内存和消息速率指示器
- MQSC命令:
DISPLAY QMSTATUS(*) ALL - 用途: 性能故障排除、容量规划、SLA监控
______________________________________________________________________
generate_capacity_report
在所有队列管理器或筛选环境中生成容量规划报告。
- 参数:
- environment (str,默认值 all)--筛选条件 production, staging, development,或 all
- 退货: 执行摘要,包括QM总计数、队列计数、消息计数;按消息量排序的每个QM细分;以及缩放建议
- MQSC命令:
DISPLAY QLOCAL(*) CURDEPTH MAXDEPTH - 用途: 月度容量审查、预算规划、基础设施扩展决策
______________________________________________________________________
detect_anomalies
检测队列管理器行为中的异常,例如队列接近容量或没有消费者的消息。
- 参数:
- qmgr_name (str)--队列管理器名称
- 退货: 按类型(容量、NO_消耗者)分类的关键和高优先级问题的异常报告
- MQSC命令:
DISPLAY QLOCAL(*) CURDEPTH MAXDEPTH IPPROCS MSGAGE - 用途: 主动问题检测、自动监控、事件预防
______________________________________________________________________
batch_health_check
使用可选的区域和关键性过滤器并行跨多个队列管理器运行健康检查。
- 参数:
- region (str,默认值 all)--筛选条件 us-east, us-west, eu-west,或 all - criticality (str,默认值 all)--筛选条件 high, medium, low,或 all
- 退货: 包含总警报计数和每个QM状态(正常/警报/错误)的汇总报告
- 代表们:
health_check_all_queues每个匹配的队列管理器 - 用途: 日常健康检查、高管仪表板、SLA报告
______________________________________________________________________
mqmcpserver_readolly_secure.py
企业服务器的安全强化版本。所有MQSC命令在执行前都要经过一个验证层,该层强制执行严格的只读策略。此服务器可以安全地暴露给AI代理、审计员或任何无法修改MQ基础架构的用户。
工具
discover_all_queue_managers
与企业版相同,但明确仅使用HTTP GET 请求:
- 参数: 无
- 退货: 根据QM提供运行状态、地区、环境和关键性的发现报告
- API方法:
GET /qmgr/仅
______________________________________________________________________
health_check_all_queues
与企业版相同的功能,通过只读安全包装器执行。
- 参数:
- qmgr_name (str)--队列管理器名称 - depth_threshold (int,默认值 80)--警报百分比阈值
- 退货: 运行状况报告,或者如果底层命令被阻止,则显示安全违规消息
- MQSC命令(已验证):
DISPLAY QLOCAL(*) CURDEPTH MAXDEPTH IPPROCS OPPROCS
______________________________________________________________________
monitor_channel_status
与企业版相同的功能,通过只读安全包装器执行。
- 参数:
- qmgr_name (str)--队列管理器名称
- 退货: 通道状态报告,或者如果底层命令被阻止,则显示安全违规消息
- MQSC命令(已验证):
DISPLAY CHSTATUS(*) ALL
______________________________________________________________________
check_dead_letter_queues
与企业版功能相同,但明确指出不允许浏览或删除DLQ消息。
- 参数:
- qmgr_name (str)--队列管理器名称
- 退货: DLQ深度报告和建议,或安全违规消息
- MQSC命令(已验证):
DISPLAY QLOCAL(SYSTEM.DEAD.LETTER.QUEUE) CURDEPTH MAXDEPTH
______________________________________________________________________
get_security_policy
内联返回完整的安全策略文档——允许的操作、阻止的操作、执行详细信息和升级联系人。
- 参数: 无
- 退货: 格式化的安全策略,显示允许的MQSC命令、阻止的MQSC指令、允许/阻止的REST操作和更改管理过程
______________________________________________________________________
安全架构(只读服务器)
如何阻止写入命令
只读服务器强制执行多层安全模型。每个MQSC命令都经过 execute_mqsc_readonly() 在到达IBM MQ REST API之前。
AI Agent Tool Call
│
▼
execute_mqsc_readonly(qmgr_name, command)
│
├─► validate_mqsc_command(command)
│ │
│ ├─ Extracts the command verb (first word, uppercased)
│ ├─ Checks verb against BLOCKED_MQSC_COMMANDS blocklist
│ ├─ Checks verb against ALLOWED_MQSC_COMMANDS allowlist
│ └─ Scans full command text for dangerous keyword patterns
│
├─ If BLOCKED → log_security_event(CRITICAL) → return security violation message
│
└─ If ALLOWED → log_security_event(INFO) → send to IBM MQ REST API阻止MQSC命令
以下命令谓词被无条件阻止:
| 命令 | 原因 |
|---|---|
DEFINE | 创建队列、通道、进程等。 |
ALTER | 修改现有MQ对象定义 |
DELETE | 删除MQ对象 |
CLEAR | 清除队列中的所有消息 |
START | 启动频道、听众、服务 |
STOP | 停止频道、听众、服务 |
RESET | 重置通道统计信息或序列号 |
REFRESH | 刷新群集或安全配置 |
SUSPEND | 从群集中挂起队列管理器 |
RESUME | 恢复暂停的队列管理器 |
PING | 通过通道发送ping(副作用) |
RESOLVE | 解决有疑问的交易 |
MOVE | 在队列之间移动消息 |
SET | 更改系统参数 |
ARCHIVE | 归档日志文件 |
RECOVER | 恢复对象或事务 |
RCDMQIMG | 记录MQ映像以进行恢复 |
RCRMQOBJ | 从映像中重新创建MQ对象 |
允许的MQSC命令
只允许使用一个命令动词:
| 命令 | 描述 |
|---|---|
DISPLAY | 读取对象定义和运行时状态 |
除了块列表检查外,还会扫描命令文本以查找危险关键字(CLEAR, DELETE, ALTER, DEFINE, START, STOP, RESET)使用正则表达式防止通过嵌入式子命令注入。
HTTP方法限制
仅 GET 对于直接REST API调用是允许的。 POST, PUT, DELETE,以及 PATCH 被封锁。(注意:MQSC执行端点使用 POST 通过IBM MQ的REST API设计,但是 *内容* 该POST被验证为仅包含 DISPLAY 命令。)
被阻止的REST端点
| 端点模式 | 原因 |
|---|---|
/messaging/ | 消息发送和获取操作 |
/action/qmgr/*/mqsc | MQSC执行(单独验证) |
安全审计日志记录
每个命令执行(无论是允许还是阻止)都通过以下方式记录 log_security_event() 以结构化格式发送到stderr:
[] SECURITY [] : | 事件类型 | 严重性 | 触发器 |
|---|---|---|
ALLOWED_MQSC_COMMAND | 信息 | 命令通过验证并发送到MQ |
BLOCKED_MQSC_COMMAND | 关键 | 命令被安全层拒绝 |
MQSC_EXECUTION_ERROR | 警告 | 允许的命令在MQ REST API级别失败 |
在生产中,将这些日志重定向到SIEM或安全监控系统。
安全违规响应
当尝试执行被阻止的命令时,该工具会返回一个格式化错误,而不是执行任何操作:
╔════════════════════════════════════════════════════════════════════════════╗
║ SECURITY POLICY VIOLATION ║
╚════════════════════════════════════════════════════════════════════════════╝
❌ COMMAND BLOCKED: BLOCKED: 'ALTER' commands are not allowed...
Requested Command: ALTER QLOCAL(MY.QUEUE) MAXDEPTH(10000)
Queue Manager: QM1
Timestamp: 2025-01-15T10:30:00.000000
...在返回给调用者之前,该事件也会写入审计日志。
______________________________________________________________________
配置
两台服务器共享相同的 MQ_SERVERS 配置字典:
MQ_SERVERS = {
"QM1": {
"url": "https://localhost:9443/ibmmq/rest/v3/admin/",
"username": "admin",
"password": "passw0rd",
"region": "us-east",
"environment": "production",
"criticality": "high"
},
...
}通过扩展此字典添加其他队列管理器。对于只读服务器,使用具有最小权限(OAM)的专用只读IBM MQ服务帐户 +inq +browse 在对象上,否 +put, +get, +set,或管理权)。
______________________________________________________________________
运行服务器
# Enterprise server
python mqmcpserver_enterprise.py
# Read-only security hardened server
python mqmcpserver_readonly_secure.py两台服务器都使用 stdio 用于与Claude Desktop等MCP客户端集成的传输。
依赖项
pip install mcp httpx______________________________________________________________________
选择合适的服务器
| 场景 | 推荐服务器 |
|---|---|
| AI代理/LLM集成 | mqmcpserver_readonly_secure.py |
| 合规性审计 | mqmcpserver_readonly_secure.py |
| 只读操作员仪表板 | mqmcpserver_readonly_secure.py |
| 运营团队深度诊断 | mqmcpserver_enterprise.py |
| 容量规划和趋势 | 要么(企业拥有更多工具) |
| 暴露于人工智能的生产环境 | mqmcpserver_readonly_secure.py 只有 |
安全建议: 始终部署 mqmcpserver_readonly_secure.py 当MCP服务器可由AI代理访问时。企业服务器不提供写命令保护,只应在受控、受信任的上下文中使用。