停机监控MCP服务器
MCP(模型上下文协议)服务器,使用StatusGator API监控AT&T、Verizon、T-Mobile、AWS、Google Cloud和Azure的服务中断。
特性
- 检查特定电信和云提供商的中断情况
- 获取详细的服务状态信息
- 查看所有受监控服务中的当前事件
- 在StatusGator数据库中搜索服务
- 实时状态监控
- 适用于n8n和web集成的流式HTTP传输
- Docker支持,易于部署
- Claude Desktop的标准传输
先决条件
- Docker和Docker Compose(用于容器化部署)
- 或Node.js 18+(用于本地开发)
- StatusGator API密钥(在 statusgator.com)
Docker快速入门
1.克隆和设置
git clone
cd outage-monitor-mcp2.选择身份验证方法
提供StatusGator API密钥有两个选项:
选项A:环境变量(用于测试/开发)
cp .env.example .env
# Edit .env and uncomment/set STATUSGATOR_API_KEY选项B:承载令牌(建议用于n8n)
- 跳过
.env配置 - 将API密钥作为承载令牌与每个请求一起传递到授权头中
- 看 n8n配置 在......下面
3.使用Docker Compose运行
docker-compose up -d服务器将在以下时间可用 http://localhost:3002
4.验证它是否正在运行
curl http://localhost:3002/health您应该看到:
{
"status": "ok",
"server": "outage-monitor-mcp",
"version": "1.0.0",
"timestamp": "2025-10-23T14:30:00.000Z"
}Docker命令
# Start the server
docker-compose up -d
# View logs
docker-compose logs -f
# Stop the server
docker-compose down
# Rebuild after code changes
docker-compose up -d --build
# Run on a different port
PORT=8080 docker-compose up -d与n8n一起使用
MCP服务器支持 承载令牌身份验证,非常适合n8n的MCP客户端配置。
身份验证设置
服务器通过两种方式接受StatusGator API密钥:
- 承载令牌(建议用于n8n) -通过
Authorization头球 - 环境变量 -设置
STATUSGATOR_API_KEY在服务器环境中
优先级:承载令牌优先于环境变量。
n8n MCP客户端配置
如果n8n具有本机MCP客户端支持:
- 添加一个 MCP客户端 n8n中的节点
- 配置身份验证:
- 认证类型:承载令牌 - 代币:您的StatusGator API密钥 - 运输:HTTP - 统一资源定位符: http://outage-monitor-mcp:3002/mcp (或 http://localhost:3002/mcp)
MCP客户端将在每次请求时自动发送承载令牌,服务器将使用它与StatusGator进行身份验证。
HTTP请求节点(备选)
如果使用标准HTTP请求节点:
- 在n8n中,添加一个 HTTP 请求 节点
- 配置节点:
- 方法:POST - 统一资源定位符: http://outage-monitor-mcp:3002/mcp (或 http://localhost:3002/mcp 如果在本地运行) - 认证:通用凭据类型 - 通用身份验证类型:标头身份验证 - 名字:授权 - 价值: Bearer YOUR_STATUSGATOR_API_KEY - 正文内容类型:JSON - 身体:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "check_outage",
"arguments": {
"service": "aws"
}
}
}服务器使用流式HTTP传输,这意味着所有请求都发送到一个 /mcp 使用JSON-RPC 2.0协议的端点。
示例n8n工作流
检查单一服务
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "check_outage",
"arguments": {
"service": "aws"
}
}
}检查所有服务
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "check_all_outages",
"arguments": {}
}
}获取服务状态
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_service_status",
"arguments": {
"service": "azure"
}
}
}API终点
GET /
服务器信息和可用工具
GET /health
健康检查端点
答复:
{
"status": "ok",
"server": "outage-monitor-mcp",
"version": "1.0.0",
"timestamp": "2025-10-23T14:30:00.000Z"
}POST /mcp
所有MCP请求的流式HTTP端点(JSON-RPC 2.0)
这是工具调用和MCP协议通信的主要端点。
可用工具
1. check_outage
检查特定服务是否出现中断。
参数:
service(必填):服务名称(att、verizon、t-mobile、aws、谷歌云、azure)
请求示例:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "check_outage",
"arguments": {
"service": "aws"
}
}
}答复:
{
"service": "Amazon Web Services",
"hasOutage": false,
"status": "operational",
"incidents": []
}2. check_all_outages
检查所有受监控的服务是否中断。
参数: 无
答复:
{
"total_services": 6,
"services_with_outages": 1,
"outages": [
{
"service": "AT&T",
"hasOutage": true,
"status": "degraded",
"incidents": [...]
}
],
"all_statuses": [...]
}3. get_service_status
获取特定服务的详细状态信息。
参数:
service(必填):服务名称
例子:
{
"service": "azure"
}答复:
{
"service_id": "microsoft-azure",
"service_name": "Microsoft Azure",
"status": "operational",
"current_incidents": [],
"last_checked": "2025-10-23T14:30:00.000Z"
}4. get_all_incidents
获取所有受监控服务中的所有当前事件。
参数: 无
答复:
{
"total_incidents": 2,
"incidents": [
{
"id": "incident-123",
"service_name": "Verizon",
"title": "Network connectivity issues",
"description": "Some users may experience...",
"status": "investigating",
"severity": "major",
"created_at": "2025-10-23T13:00:00.000Z",
"updated_at": "2025-10-23T14:00:00.000Z"
}
]
}5. search_service
在StatusGator数据库中按名称搜索服务。
参数:
service_name(必填):要搜索的服务的名称
例子:
{
"service_name": "cloudflare"
}6. get_historical_incidents
获取特定日期范围内服务的历史事件。非常适合分析过去的中断和事件模式。
参数:
service(必填):服务名称start_date(可选):ISO格式的开始日期(例如,“2025-01-01T00:00:00Z”)end_date(可选):ISO格式的结束日期(例如,“2025-01-31T23:59:59Z”)status(可选):按状态筛选(例如,“已解决”、“正在调查”)
例子:
{
"service": "aws",
"start_date": "2025-01-01T00:00:00Z",
"end_date": "2025-01-31T23:59:59Z"
}答复:
{
"service": "aws",
"start_date": "2025-01-01T00:00:00Z",
"end_date": "2025-01-31T23:59:59Z",
"total_incidents": 3,
"incidents": [
{
"id": "incident-456",
"service_name": "Amazon Web Services",
"title": "EC2 connectivity issues",
"created_at": "2025-01-15T10:30:00Z",
"resolved_at": "2025-01-15T12:45:00Z",
"status": "resolved"
}
]
}7. get_service_uptime
计算特定时间段内服务的正常运行时间统计数据。返回正常运行时间百分比和总停机时间。
参数:
service(必填):服务名称start_date(必填):ISO格式的开始日期end_date(必填):ISO格式的结束日期
例子:
{
"service": "verizon",
"start_date": "2025-01-01T00:00:00Z",
"end_date": "2025-01-31T23:59:59Z"
}答复:
{
"service_id": "verizon",
"service_name": "Verizon",
"period_start": "2025-01-01T00:00:00Z",
"period_end": "2025-01-31T23:59:59Z",
"total_incidents": 2,
"total_downtime_minutes": 180,
"uptime_percentage": 99.75,
"incidents": [...]
}8. get_multi_service_history
一次获取多个服务的事件历史记录。可用于比较运营商或云提供商之间的中断情况。
参数:
services(必填):服务名称数组start_date(可选):ISO格式的开始日期end_date(可选):ISO格式的结束日期
例子:
{
"services": ["att", "verizon", "t-mobile"],
"start_date": "2025-01-01T00:00:00Z",
"end_date": "2025-01-31T23:59:59Z"
}答复:
{
"services": ["att", "verizon", "t-mobile"],
"start_date": "2025-01-01T00:00:00Z",
"end_date": "2025-01-31T23:59:59Z",
"total_incidents": 5,
"history": {
"att": [...incidents...],
"verizon": [...incidents...],
"t-mobile": [...incidents...]
}
}支持服务列表
服务器监视这些服务:
- 美国电话电报公司 (
att) - 威瑞森 (
verizon) - 德国 (
t-mobile或tmobile) - 亚马逊网络服务 (
aws或amazon-web-services) - 谷歌云 (
google-cloud或gcp) - 微软 Azure (
azure或microsoft-azure)
本地开发(无Docker)
安装
- 克隆此存储库:
git clone
cd outage-monitor-mcp- 安装依赖项:
npm install- 创建一个
.env文件:
cp .env.example .env- 编辑
.env并添加您的API密钥:
STATUSGATOR_API_KEY=your_actual_api_key_here- 构建项目:
npm run build本地运行
HTTP模式(适用于n8n):
npm start
# or
MCP_TRANSPORT=http npm start标准模式(适用于克劳德桌面):
MCP_TRANSPORT=stdio npm start:stdio发展模式
npm run watchClaude桌面配置
要将此服务器与Claude Desktop(stdio模式)一起使用,请将其添加到MCP设置配置中:
适用于macOS (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"outage-monitor": {
"command": "node",
"args": ["/absolute/path/to/outage-monitor-mcp/dist/stdio.js"],
"env": {
"STATUSGATOR_API_KEY": "your_api_key_here"
}
}
}
}对于Windows (%APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"outage-monitor": {
"command": "node",
"args": ["C:\\path\\to\\outage-monitor-mcp\\dist\\stdio.js"],
"env": {
"STATUSGATOR_API_KEY": "your_api_key_here"
}
}
}
}认证
MCP服务器支持两种身份验证方法:
1.承载令牌(建议用于n8n)
在中传递StatusGator API密钥 Authorization 头球
Authorization: Bearer YOUR_STATUSGATOR_API_KEY这是n8n的推荐方法,因为它可以保证凭据的安全,并允许每个工作流进行动态配置。
卷曲示例:
curl -X POST http://localhost:3002/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_STATUSGATOR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'2.环境变量
设置 STATUSGATOR_API_KEY 环境变量:
export STATUSGATOR_API_KEY=your_api_key_here或者在你的 .env 文件:
STATUSGATOR_API_KEY=your_api_key_here这对于测试、开发或当服务器专用于单个API密钥时非常有用。
身份验证优先级
如果提供了这两种方法:
- 来自授权标头的承载令牌(优先)
- 环境变量
STATUSGATOR_API_KEY(回退)
如果两者都没有提供,请求将失败并出现身份验证错误。
环境变量
| 变量 | 描述 | 默认值 | 必填 |
|---|---|---|---|
STATUSGATOR_API_KEY | 您的StatusGator API密钥 | - | 否\* |
PORT | HTTP服务器端口 | 3002 | 没有 |
HOST | HTTP服务器主机 | 0.0.0.0 | 没有 |
MCP_TRANSPORT | 运输方式(http 或 stdio) | http | 没有 |
NODE_ENV | 节点环境 | production | 没有 |
\*如果使用承载令牌身份验证,则不需要
获取StatusGator API密钥
- 在以下网址注册StatusGator帐户 statusgator.com
- 转到设置(单击电路板名称旁边的3个点)
- 选择API菜单选项卡
- 复制您的API令牌
- 将其添加到您的
.env文件
建筑
outage-monitor-mcp/
├── src/
│ ├── index.ts # Main entry point (transport router)
│ ├── server.ts # Shared MCP server logic
│ ├── stdio.ts # Stdio transport (Claude Desktop)
│ ├── http-server.ts # Streamable HTTP transport (n8n, web)
│ └── statusgator.ts # StatusGator API client
├── dist/ # Compiled JavaScript (generated)
├── Dockerfile # Docker image definition
├── docker-compose.yml # Docker Compose configuration
├── package.json
├── tsconfig.json
├── .env.example
├── troubleshoot.sh # Automated troubleshooting script
├── TROUBLESHOOTING.md # Detailed troubleshooting guide
└── README.md发展
建筑
npm run build脚本
npm run build-将TypeScript编译为JavaScriptnpm start-运行服务器(默认为HTTP模式)npm run start:stdio-使用stdio传输运行npm run start:http-使用HTTP传输运行npm run dev-构建并运行npm run watch-开发观看模式
故障排除
快速诊断
如果您在将n8n连接到MCP服务器时遇到问题,请运行自动故障排除脚本:
./troubleshoot.sh这将检查:
- 容器状态和健康状况
- n8n和MCP服务器之间的网络连接
- 端口配置
- 身份验证设置
- 端点可访问性
有关详细的故障排除步骤,请参阅 故障排除.md
常见问题
n8n无法连接到MCP服务器
快速检查:
- 验证两个容器是否在同一个Docker网络上:
# Check MCP server networks
docker inspect outage-monitor-mcp --format='{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{end}}'
# Check n8n networks
docker inspect n8n --format='{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{end}}'- 测试n8n到MCP服务器的连接:
docker exec n8n wget -q -O - http://outage-monitor-mcp:3002/health- 如果容器名称无法解析,请使用IP地址:
# Get MCP server IP
docker inspect outage-monitor-mcp --format='{{range $k, $v := .NetworkSettings.Networks}}{{$v.IPAddress}}{{end}}'
# Use in n8n: http://172.x.x.x:3002/mcp- 验证n8n的URL是否正确:
- ✓ 对的: http://outage-monitor-mcp:3002/mcp - ✗ 错误: http://outage-monitor-mcp:3000/mcp (旧港口) - ✗ 错误: http://outage-monitor-mcp:3002/message (旧端点)
- 检查n8n MCP客户端中是否设置了承载令牌
看 故障排除.md 获取完整指南
Docker容器无法启动
- 检查日志:
docker-compose logs- 验证是否设置了API密钥:
docker-compose exec outage-monitor env | grep STATUSGATOR- 检查端口3002是否已在使用中:
lsof -i :3002身份验证错误
如果您收到“未提供API密钥”或401/403错误:
- 使用n8n MCP客户端:设置承载令牌:
- 身份验证类型:承载令牌 - 代币:您的StatusGator API密钥
- 使用HTTP请求节点:添加授权标头:
- 名称:授权书 - 价值: Bearer YOUR_STATUSGATOR_API_KEY
- 替代:在中设置环境变量
.env:
STATUSGATOR_API_KEY=your_key_here
docker-compose restartAPI速率限制
StatusGator有API速率限制。如果你超越了它们:
- API将返回429个状态代码
- 实施指数回退
- 考虑缓存结果
安全注意事项
- 永远不要承诺你的
.env文件 - 对敏感数据使用环境变量
- 在生产中,限制CORS的来源
http-server.ts - 考虑为HTTP端点添加身份验证
- 以非root用户身份运行容器(已配置)
api参考
此服务器使用 状态Gator API v3API提供:
- 来自3500多个服务的实时状态数据
- 历史事件数据
- 服务状态信息
- 事件详情和时间表
许可证
麻省理工学院
贡献
欢迎投稿!请随时提交拉取请求。
支持
关于以下问题:
- 此MCP服务器:在此存储库中打开问题
- StatusGator API:联系方式 StatusGator支持
- MCP协议:见 模型上下文协议文档
- n8n集成:请参阅 n8n文档
致谢
- 与 模型上下文协议SDK
- 由...驱动 状态Gator API
- Docker容器化,易于部署
- 用于n8n集成的流式HTTP传输
