Microsoft Operations Manager的MCP服务器
一种模型上下文协议(MCP)服务器实现,为与Microsoft System Center Operations Manager(SCOM)REST API交互提供工具。
概述
此MCP服务器实现了与Microsoft Operations Manager REST API的无缝集成,使您能够:
- 验证 使用SCOM服务器
- 检索警报详细信息 并搜索警报
- 查询监视器 标准灵活
- 管理仪表板 (创建和检索)
- 处理CSRF令牌 安全操作(SCOM 2019 UR1+)
特性
支持的操作
- 认证:支持CSRF令牌的基于网络的身份验证
- 警报管理:获取警报详细信息,通过过滤检索警报
- 监视器:使用自定义条件查询监控器
- 仪表盘:列出并创建监控仪表板
- 异步/等待:无阻塞I/O,实现高性能
- 错误处理:全面的错误处理和记录
先决条件
- Python 3.11+
- Docker和Docker Compose(用于容器化部署)
- 访问Microsoft Operations Manager 2019服务器或更高版本
- SCOM服务器的网络连接
地方发展设置
1.创建虚拟环境
python -m venv venv
# On Windows
.\venv\Scripts\activate
# On macOS/Linux
source venv/bin/activate2.安装依赖项
pip install -r requirements.txt3.运行服务器
python server.py服务器将启动并等待通过stdin/stdout传入的MCP连接。
Docker部署
使用Docker Compose构建和运行
# Start the service
docker-compose up -d
# View logs
docker-compose logs -f mcp-operations-manager
# Stop the service
docker-compose down手动构建Docker镜像
docker build -t mcp-operations-manager:latest .
docker run -d \
--name mcp-operations-manager \
-e LOG_LEVEL=INFO \
mcp-operations-manager:latestAzure容器应用部署
先决条件
- Azure CLI已安装并通过身份验证
- Azure容器注册表(或使用Docker Hub)
- Azure容器应用程序环境
部署步骤
# 1. Push image to Azure Container Registry
az acr build --registry --image mcp-operations-manager:latest .
# 2. Create Container App
az containerapp create \
--resource-group \
--name mcp-operations-manager \
--environment \
--image .azurecr.io/mcp-operations-manager:latest \
--cpu 1.0 \
--memory 0.5Gi \
--environment-variables LOG_LEVEL=INFO
# 3. View logs
az containerapp logs show \
--resource-group \
--name mcp-operations-manager配置
环境变量
创建一个 .env 文件基于 .env.example:
cp .env.example .env可用变量:
LOG_LEVEL:日志记录级别(调试、信息、警告、错误)SCOM_BASE_URL:SCOM服务器的基本URLSCOM_USERNAME:身份验证用户名SCOM_PASSWORD:身份验证密码SCOM_AUTH_MODE:身份验证模式(默认:网络)
Docker编写配置
编辑 docker-compose.yml 自定义:
- 端口映射
- 资源限制
- 环境变量
- 网络设置
- 卷装载
API工具
1.身份验证
使用SCOM服务器进行身份验证。
参数:
base_url(必填):SCOM服务器的基本URL(例如。,http://scomserver/OperationsManager)username(必填):用户名password(必填):密码auth_mode(可选):身份验证模式(默认:“网络”)
例子:
{
"name": "authenticate",
"arguments": {
"base_url": "http://scomserver/OperationsManager",
"username": "domain\\username",
"password": "password"
}
}2.获取警报详细信息
检索特定警报的详细信息。
参数:
alert_id(必需):警报ID(GUID)
例子:
{
"name": "get_alert_details",
"arguments": {
"alert_id": "6A88FBC1-0EDC-4173-9BB1-30FFEC296672"
}
}3.获取警报
使用可选过滤检索警报。
参数:
filter(可选):筛选条件(例如“SQL”)limit(可选):最大结果(默认值:100)
例子:
{
"name": "get_alerts",
"arguments": {
"filter": "SQL",
"limit": 50
}
}4.获取监视器
具有自定义条件的查询监视器。
参数:
criteria(可选):搜索条件(例如,“DisplayName LIKE%SQL%”)
例子:
{
"name": "get_monitors",
"arguments": {
"criteria": "DisplayName LIKE %SQL%"
}
}5.获取仪表板
列出所有可用的仪表板。
例子:
{
"name": "get_dashboards",
"arguments": {}
}6.创建仪表板
创建一个新的仪表板。
参数:
name(必填):仪表板名称path(必填):仪表板路径/ID
例子:
{
"name": "create_dashboard",
"arguments": {
"name": "TestAPIDashboard",
"path": "35b6eba3-6202-8738-a47f-16acf476230f"
}
}用法示例
PowerShell示例
# Authenticate with SCOM
$auth_response = Invoke-MCP -Tool authenticate -Arguments @{
base_url = "http://scomserver/OperationsManager"
username = "domain\username"
password = "password"
}
# Get alert details
$alert_response = Invoke-MCP -Tool get_alert_details -Arguments @{
alert_id = "6A88FBC1-0EDC-4173-9BB1-30FFEC296672"
}
# Get all SQL-related alerts
$alerts = Invoke-MCP -Tool get_alerts -Arguments @{
filter = "SQL"
limit = 100
}Python示例
import subprocess
import json
def call_mcp_tool(tool_name, arguments):
"""Call MCP tool via stdio"""
cmd = json.dumps({
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": tool_name,
"arguments": arguments
}
})
result = subprocess.run(
["python", "server.py"],
input=cmd,
capture_output=True,
text=True
)
return json.loads(result.stdout)
# Usage
auth_result = call_mcp_tool("authenticate", {
"base_url": "http://scomserver/OperationsManager",
"username": "domain\\username",
"password": "password"
})
print(auth_result)安全注意事项
CSRF令牌处理
服务器自动处理SCOM 2019 UR1及更高版本的CSRF令牌:
- 从身份验证响应中提取令牌
- 在所有后续请求中包含令牌
- 安全地管理会话和Cookie
SSL/TLS通信
对于生产部署:
- 在SCOM服务器配置中启用SSL验证
- 使用HTTPS端点而不是HTTP
- 实施适当的证书管理
身份验证最佳实践
- 不要硬编码凭据 生产中的环境变量
- 使用Azure密钥库或类似工具进行秘密管理
- 实施凭证轮换政策
- 使用具有最低所需权限的服务帐户
网络安全
部署到Azure容器应用程序时:
- 使用虚拟网络集成
- 配置网络安全组
- 实施入口限制
- 使用私有端点(如果可用)
监控和日志记录
日志级别
DEBUG:故障排除的详细信息INFO:一般信息性消息WARNING:可恢复问题的警告消息ERROR:失败的错误消息
查看日志
Docker编写:
docker-compose logs -f mcp-operations-managerAzure容器应用程序:
az containerapp logs show \
--resource-group \
--name mcp-operations-manager结构化日志记录
所有日志包括:
- 时间戳
- 日志级别
- 组件/模块名称
- 消息
- 堆栈跟踪(用于错误)
故障排除
身份验证失败
问题: “身份验证失败:401”
解决:
- 验证SCOM服务器URL是否可访问
- 检查用户名和密码
- 确保用户具有适当的SCOM权限
- 验证身份验证模式(网络/Windows)
CSRF令牌错误
问题: “CSRF令牌丢失或无效”
解决:
- 确保安装了SCOM 2019 UR1或更高版本
- 验证正在从身份验证响应中提取令牌
- 检查令牌是否包含在后续请求中
连接超时
问题: “与SCOM服务器的连接超时”
解决:
- 检查SCOM服务器的网络连接
- 验证防火墙规则是否允许HTTP/HTTPS流量
- 检查SCOM服务器是否正在运行并响应
- 如果网络速度慢,则增加超时值
内存/资源问题
解决:
- 调整Docker资源限制
docker-compose.yml - 监控容器内存使用情况
- 为高容量场景实施连接池
- 如果需要,启用请求速率限制
发展
项目结构
mcp-server-opsmanager/
├── server.py # Main server implementation
├── requirements.txt # Python dependencies
├── Dockerfile # Docker image definition
├── docker-compose.yml # Docker Compose configuration
├── .env.example # Environment variables template
├── README.md # This file
└── LICENSE # Apache 2.0 License添加新工具
要添加新的SCOM API操作,请执行以下操作:
- 添加方法
OperationsManagerClient类 - 在中创建工具定义
setup_tools() - 在中添加处理程序
handle_tool_call()
运行测试
# Install test dependencies
pip install pytest pytest-asyncio
# Run tests
pytest建筑
构件图
┌─────────────────────────────────────────────────────────────┐
│ MCP Client │
│ (Claude, Copilot, etc.) │
└────────────────────┬────────────────────────────────────────┘
│
│ MCP Protocol (JSON-RPC)
│ stdin/stdout
│
┌────────────────────▼────────────────────────────────────────┐
│ MCP Server (server.py) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Tool Handlers │ │
│ │ - authenticate │ │
│ │ - get_alert_details │ │
│ │ - get_alerts │ │
│ │ - get_monitors │ │
│ │ - get_dashboards │ │
│ │ - create_dashboard │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ OperationsManagerClient │ │
│ │ - Authentication & CSRF token handling │ │
│ │ - HTTP session management │ │
│ │ - API method wrappers │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────┬────────────────────────────────────────┘
│
│ HTTP(S)
│
┌────────────────────▼────────────────────────────────────────┐
│ Microsoft Operations Manager (SCOM) │
│ REST API Endpoints │
└─────────────────────────────────────────────────────────────┘性能优化
推荐的生产设置
Docker编写:
deploy:
resources:
limits:
cpus: '2'
memory: 1024M
reservations:
cpus: '1'
memory: 512MAzure容器应用程序:
--cpu 2.0 --memory 1.0Gi连接池
服务器使用httpx的连接池:
- 默认值:100个连接
- 线程数:10
- 超时:每个请求5秒
缓存建议
对于频繁访问的数据:
from functools import lru_cache
@lru_cache(maxsize=128)
async def get_cached_alert(alert_id):
return await scom_session.get_alert_details(alert_id)API 参考
基础URL
http:///OperationsManager认证
POST /authenticate
Content-Type: application/json
Body: Base64(AuthMode:Username:Password)警报操作
GET /data/alertDetails/{alertId}
POST /data/alertDetails监控操作
POST /data/class/monitors
Body: Criteria string (JSON)仪表板操作
GET /monitoring/dashboard
POST /monitoring/dashboard许可证
Apache 2.0许可证-有关详细信息,请参阅许可证文件
支持
对于问题、疑问或改进:
- 检查故障排除部分
- 查看SCOM REST API文档
- 检查MCP协议规范
- 在存储库中打开问题
参考文献
更新日志
1.0.0版本(首次发布)
- MCP服务器的初始实施
- 支持核心SCOM操作
- Docker和Docker Compose支持
- Azure容器应用部署指南
- 综合文档
______________________________________________________________________
最后更新时间: 2026年2月17日 状态: 生产就绪
