使用说明
PagerDuty MCP服务器(运行)
PagerDuty MCP(模型上下文协议)服务器的Go实现,从官方Python实现移植而来。
特性
- 50+工具:全面覆盖PagerDuty API,包括事件、服务、团队、日程安排、活动编排等
- 读/写分离:为了安全起见,默认情况下禁用写入操作
- 单一二进制:编译为没有运行时依赖关系的单个可执行文件
- 交叉平台的:为Linux、macOS和Windows构建
先决条件
- 转到1.22或更高版本
- PagerDuty用户API令牌
获取PagerDuty API令牌
- 登录到PagerDuty
- 导航至 我的资料 > 用户设置 > API访问
- 点击 创建API用户令牌
- 安全地复制和存储令牌
安装
来源
git clone https://github.com/jeremyproffitt/go-mcp-pagerduty.git
cd go-mcp-pagerduty
go build -o pagerduty-mcp ./cmd/pagerduty-mcp
使用Go安装
go install github.com/jeremyproffitt/go-mcp-pagerduty/cmd/pagerduty-mcp@latest
配置
设置以下环境变量:
export PAGERDUTY_USER_API_KEY="your-api-key-here"
# Optional: For EU accounts
export PAGERDUTY_API_HOST="https://api.eu.pagerduty.com"
或者创建一个 .env 文件:
PAGERDUTY_USER_API_KEY=your-api-key-here
PAGERDUTY_API_HOST=https://api.pagerduty.com
用法
基本(只读模式)
./pagerduty-mcp
启用写入工具
./pagerduty-mcp --enable-write-tools
HTTP模式(适用于容器/Lambda)
./pagerduty-mcp --http --host 0.0.0.0 --port 3000
命令行选项
| 选项 | 描述 | 默认值 |
|---|---|---|
--http |
在HTTP模式下运行 | false |
--host |
HTTP服务器主机 | 127.0.0.1 |
--port |
HTTP服务器端口 | 3000 |
--enable-write-tools |
启用写入操作 | false |
HTTP模式详细信息
在HTTP模式下运行时,服务器会公开:
POST /-MCP JSON-RPC端点GET /health-健康检查端点(返回{"status":"ok","version":"X.X.X"})
认证:HTTP模式需要 Authorization 所有请求的标头(除 /health).授权层是可插拔的;默认情况下,它接受任何令牌。
按请求凭据:在HTTP模式下,PagerDuty令牌可以通过标头而不是环境变量传递,从而支持多用户场景:
| 标题 | 描述 |
|---|---|
X-PagerDuty-Token |
PagerDuty用户API密钥(重写 PAGERDUTY_USER_API_KEY) |
此标头会覆盖相应的环境变量(如果存在)。
MCP客户端配置
克劳德桌面版
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"pagerduty": {
"command": "/path/to/pagerduty-mcp",
"args": ["--enable-write-tools"],
"env": {
"PAGERDUTY_USER_API_KEY": "your-api-key-here"
}
}
}
}
VS Code
添加到您的 settings.json:
{
"mcp": {
"servers": {
"pagerduty": {
"type": "stdio",
"command": "/path/to/pagerduty-mcp",
"args": ["--enable-write-tools"],
"env": {
"PAGERDUTY_USER_API_KEY": "${input:pagerduty-api-key}"
}
}
}
}
}
光标
添加到光标设置中:
{
"mcpServers": {
"pagerduty": {
"type": "stdio",
"command": "/path/to/pagerduty-mcp",
"args": ["--enable-write-tools"],
"env": {
"PAGERDUTY_USER_API_KEY": "${input:pagerduty-api-key}"
}
}
}
}
码头工人
构建
docker build -t pagerduty-mcp:latest .
跑
docker run -i --rm \
-e PAGERDUTY_USER_API_KEY="your-api-key-here" \
pagerduty-mcp:latest --enable-write-tools
工具参考
事件
用于管理和调查PagerDuty事件的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_incidents |
列出按状态、日期、紧急程度、服务、团队过滤的事件 | statuses, date_range, since, until, service_ids |
get_incident |
按ID获取详细的事件信息 | incident_id (必填) |
get_outlier_incident |
基于机器学习的事件异常分析 | incident_id (必填), since |
get_past_incidents |
查找类似的历史事件以进行故障排除 | incident_id (必填), limit |
get_related_incidents |
查找可能相关的并发事件 | incident_id (必填) |
list_incident_notes |
列出事故调查记录和评论 | incident_id (必填) |
create_incident |
手动创建新事件(写入) | title, service_id (必填) |
manage_incidents |
批量更新事件(确认、解决、重新分配)(写入) | incident_ids (必填), status, urgency |
add_responders |
请求事件的其他响应者(书面) | incident_id, responder_ids (必填) |
add_note_to_incident |
在事件中添加调查说明(书写) | incident_id, note (必填) |
服务
用于管理受监控应用程序和组件的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_services |
列出服务(受监视的应用程序) | query, team_ids, limit |
get_service |
获取详细的服务信息 | service_id (必填) |
create_service |
创建新服务(写入) | name, escalation_policy_id (必填) |
update_service |
更新服务配置(写入) | service_id (必填), name, description |
团队
管理组织单位的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_teams |
在PagerDuty中列出团队 | query, limit |
get_team |
获取团队详细信息 | team_id (必填) |
list_team_members |
列出团队中的用户及其角色 | team_id (必填), limit |
create_team |
创建新团队(编写) | name (必填), description |
update_team |
更新团队名称或描述(书写) | team_id (必填) |
delete_team |
毁灭性:永久删除一个团队(写) | team_id (必填) |
add_team_member |
将用户添加到具有角色的团队(编写) | team_id, user_id (必填), role |
remove_team_member |
破坏性:将用户从团队中删除(写入) | team_id, user_id (必填) |
用户
管理用户信息的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
get_user_data |
获取当前已验证用户的信息 | 无 |
list_users |
列出帐户中的用户 | query, team_ids, limit |
日程表
用于管理随叫随到轮换的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_schedules |
通话时间表列表 | query, limit |
get_schedule |
通过渲染的随叫随到时段获取日程详细信息 | schedule_id (必填), since, until |
list_schedule_users |
列出日程表轮换中的用户 | schedule_id (必填), since, until |
create_schedule |
创建新计划(编写) | name, time_zone (必填) |
create_schedule_override |
创建临时随叫随到覆盖(写入) | schedule_id, user_id, start, end (必填) |
update_schedule |
更新计划元数据(写入) | schedule_id (必填) |
随叫随到
用于查找当前待命人员的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_oncalls |
列出当前和即将到来的随叫随到条目 | earliest, schedule_ids, user_ids, escalation_policy_ids |
升级政策
用于管理通知链的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_escalation_policies |
列出升级策略 | query, user_ids, team_ids, sort_by |
get_escalation_policy |
获取所有级别和目标的政策详细信息 | escalation_policy_id (必填) |
活动编排
用于管理事件路由和处理规则的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_event_orchestrations |
列出事件编排(事件规则) | limit |
get_event_orchestration |
获取编排详细信息和集成URL | orchestration_id (必填) |
get_event_orchestration_router |
获取服务路由的路由器规则 | orchestration_id (必填) |
get_event_orchestration_global |
获取全局规则(抑制、重复数据消除、转换) | orchestration_id (必填) |
get_event_orchestration_service |
获取服务级别编排规则 | service_id (必填) |
update_event_orchestration_router |
替换整个路由器配置(写入) | orchestration_id, config (必填) |
append_event_orchestration_router_rule |
安全添加单个路由规则(写入) | orchestration_id, route_to (必填) |
事件工作流
用于自动事件响应操作的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_incident_workflows |
列出可用的自动化工作流 | query, limit |
get_incident_workflow |
获取工作流详细信息和配置的操作 | workflow_id (必填) |
start_incident_workflow |
手动触发事件工作流(写入) | workflow_id, incident_id (必填) |
更改事件
用于将部署与事件关联起来的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_change_events |
列出部署和配置更改 | since, until, team_ids, service_ids |
get_change_event |
获取更改事件详细信息 | change_event_id (必填) |
list_service_change_events |
列出特定服务的更改 | service_id (必填), since, until |
list_incident_change_events |
列出与事件相关的更改 | incident_id (必填) |
警报分组
用于配置警报如何组合成事件的工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_alert_grouping_settings |
列出警报分组配置 | service_ids, limit |
get_alert_grouping_setting |
获取分组设置详细信息 | setting_id (必填) |
create_alert_grouping_setting |
创建新的分组配置(写入) | name, service_ids, type (必填) |
update_alert_grouping_setting |
更新分组配置(写入) | setting_id (必填) |
delete_alert_grouping_setting |
销毁:删除分组设置(写入) | setting_id (必填) |
状态页
公共事件沟通工具。
| 工具 | 说明 | 关键参数 |
|---|---|---|
list_status_pages |
列出公共状态页面 | limit |
list_status_page_severities |
列出状态页面的严重性选项 | status_page_id (必填) |
list_status_page_impacts |
列出影响级别选项 | status_page_id (必填) |
list_status_page_statuses |
列出状态生命周期选项 | status_page_id (必填) |
get_status_page_post |
获取事故/维修岗位详细信息 | status_page_id, post_id (必填) |
list_status_page_post_updates |
列出帖子的时间线条目 | status_page_id, post_id (必填) |
create_status_page_post |
创建公共事件公告(编写) | status_page_id, post_type, title (必填) |
create_status_page_post_update |
为现有帖子添加更新(编写) | status_page_id, post_id, message (必填) |
参数格式
ID格式
所有PagerDuty ID都遵循特定的模式:
| 实体 | 前缀 | 示例 |
|---|---|---|
| 事件 | P | PABC123 |
| 服务 | P | PDSVC123 |
| 用户 | P | PUSER123 |
| 团队 | P | PTEAM123 |
| 时间表 | P | PSCHED123 |
| 升级政策 | P | PESCPOL123 |
| 工作流 | P | PWFLOW123 |
| 编排 | E | E1A2B3C |
逗号分隔的ID
多个ID可以以逗号分隔的字符串形式传递:
service_ids: "PDSVC1,PDSVC2,PDSVC3"
team_ids: "PTEAM1,PTEAM2"
user_ids: "PUSER1,PUSER2"
incident_ids: "PABC123,PDEF456"
日期/时间格式
所有日期/时间参数都使用ISO 8601格式:
since: "2024-01-15T00:00:00Z"
until: "2024-01-15T23:59:59Z"
start: "2024-01-15T09:00:00-05:00"
时区
使用IANA时区标识符:
time_zone: "America/New_York"
time_zone: "Europe/London"
time_zone: "UTC"
time_zone: "Asia/Tokyo"
状态值
| 事件状态 | 描述 |
|---|---|
triggered |
新事件,等待确认 |
acknowledged |
响应者正在处理它 |
resolved |
事件已修复 |
| 紧迫性 | 描述 |
|---|---|
high |
立即通知 |
low |
可以等待营业时间 |
团队角色
role: "manager" # Full team management permissions
role: "responder" # Can respond to incidents
role: "observer" # Read-only access
警报分组类型
type: "time" # Group alerts within time window
type: "intelligent" # ML-based grouping
type: "content_based" # Group by matching fields
常见工作流
调查一个正在发生的事件
- 查找事件:使用
list_incidents随着statuses: "triggered,acknowledged" - 获取详细信息:使用
get_incident带有事件ID - 检查相关更改:使用
list_incident_change_events查看最近的部署是否导致了它 - 查找类似的过去事件:使用
get_past_incidents用于故障排除指导 - 检查相关事件:使用
get_related_incidents看看这是否是更大问题的一部分 - 复习笔记:使用
list_incident_notes查看调查进展
查找待命人员
- 当前随叫随到:使用
list_oncalls随着earliest: true根据日程表获取当前待命人员 - 针对特定团队:首次使用
list_teams要查找团队ID,则list_escalation_policies按团队筛选 - 针对特定服务:使用
get_service找到其升级策略,然后get_escalation_policy详情
应对事故
- 承认:使用
manage_incidents随着status: "acknowledged"以及您的事件ID - 添加注释:使用
add_note_to_incident记录你的调查 - 请求帮助:使用
add_responders引入额外的团队成员 - 解决:使用
manage_incidents随着status: "resolved"固定时
创建计划覆盖(假期覆盖)
- 查找日程表:使用
list_schedules使用名称过滤器 - 查找覆盖用户:使用
list_users获取他们的ID - 创建覆盖:使用
create_schedule_override带有日程ID、用户ID和时间范围
检查服务运行状况
- 列出所有服务:使用
list_services查看所有受监控的组件 - 获取服务详细信息:使用
get_service查看升级策略和集成 - 查看最近发生的事件:使用
list_incidents随着service_ids过滤器 - 检查最近的更改:使用
list_service_change_events查看部署
设置事件路由
- 列出编排:使用
list_event_orchestrations查找现有事件规则 - 查看当前路线:使用
get_event_orchestration_router查看规则 - 添加新规则:使用
append_event_orchestration_router_rule在不影响现有规则的情况下安全添加
公开事件沟通
- 查找状态页面:使用
list_status_pages获取您的公开状态页面 - 获取有效值:使用
list_status_page_statuses和list_status_page_severities - 创建帖子:使用
create_status_page_post具有适当的类型、头衔、状态、严重性 - 添加更新:使用
create_status_page_post_update随着事件的进展
错误处理
常见错误
| 错误 | 原因 | 解决方案 |
|---|---|---|
401 Unauthorized |
无效或过期的API令牌 | 在PagerDuty中重新生成API令牌 |
403 Forbidden |
令牌缺少所需的权限 | 检查用户角色和API令牌范围 |
404 Not Found |
资源ID不存在 | 验证ID格式和是否存在 |
400 Bad Request |
参数格式无效 | 检查日期格式、ID格式 |
429 Too Many Requests |
超出速率限制 | 等待并重试指数回退 |
速率限制
PagerDuty强制执行API速率限制。如果您收到429错误:
- 请至少等待1秒,然后重试
- 使用分页(
limit参数)以减小结果大小 - 尽可能缓存频繁访问的数据
写入工具错误
写入操作可能会失败,并出现其他验证错误:
- 服务需要升级策略:始终提供
escalation_policy_id创建服务时 - 状态转换无效:只能将事件状态更改为
acknowledged或resolved,不triggered - 覆盖时间冲突:计划替代不能与现有替代重叠
调试提示
- 验证ID是否存在:使用相应
get_*或list_*写入操作前的工具 - 检查权限:使用
get_user_data验证令牌的用户上下文 - 验证日期范围:确保
since在之前until日期符合ISO 8601标准 - 检查写入模式:确保服务器已启动
--enable-write-tools用于写入操作
发展
建筑物
go build -o pagerduty-mcp ./cmd/pagerduty-mcp
测试
go test ./...
代码检查
go vet ./...
golangci-lint run
许可证
Apache 2.0-有关详细信息,请参阅LICENSE文件。
致谢
这是一个Go端口 官方PagerDuty MCP服务器 python
