MQ监控管理服务器

IBM MQ MCP服务器提供对IBM MQ的监控和管理能力,支持企业级诊断和安全只读访问,适用于AI代理集成和运维团队。

  • by binwalmanish
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 binwalmanish/sample-mq-mcp

使用说明

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(<pattern>) 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(<cluster>) 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:

[<ISO timestamp>] SECURITY [<SEVERITY>] <EVENT_TYPE>: <details>
事件类型 严重性 触发器
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代理访问时。企业服务器不提供写命令保护,只应在受控、受信任的上下文中使用。