PagerDuty MCP服务器

一个Go实现的PagerDuty MCP服务器,提供全面的PagerDuty API覆盖,包括事件、服务、团队、日程等管理功能,适用于事件响应和团队协作场景。

  • by JeremyProffittOrg
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 JeremyProffitt/go-mcp-pagerduty

使用说明

PagerDuty MCP服务器(运行)

PagerDuty MCP(模型上下文协议)服务器的Go实现,从官方Python实现移植而来。

特性

  • 50+工具:全面覆盖PagerDuty API,包括事件、服务、团队、日程安排、活动编排等
  • 读/写分离:为了安全起见,默认情况下禁用写入操作
  • 单一二进制:编译为没有运行时依赖关系的单个可执行文件
  • 交叉平台的:为Linux、macOS和Windows构建

先决条件

  • 转到1.22或更高版本
  • PagerDuty用户API令牌

获取PagerDuty API令牌

  1. 登录到PagerDuty
  2. 导航至 我的资料 > 用户设置 > API访问
  3. 点击 创建API用户令牌
  4. 安全地复制和存储令牌

安装

来源

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

常见工作流

调查一个正在发生的事件

  1. 查找事件:使用 list_incidents 随着 statuses: "triggered,acknowledged"
  2. 获取详细信息:使用 get_incident 带有事件ID
  3. 检查相关更改:使用 list_incident_change_events 查看最近的部署是否导致了它
  4. 查找类似的过去事件:使用 get_past_incidents 用于故障排除指导
  5. 检查相关事件:使用 get_related_incidents 看看这是否是更大问题的一部分
  6. 复习笔记:使用 list_incident_notes 查看调查进展

查找待命人员

  1. 当前随叫随到:使用 list_oncalls 随着 earliest: true 根据日程表获取当前待命人员
  2. 针对特定团队:首次使用 list_teams 要查找团队ID,则 list_escalation_policies 按团队筛选
  3. 针对特定服务:使用 get_service 找到其升级策略,然后 get_escalation_policy 详情

应对事故

  1. 承认:使用 manage_incidents 随着 status: "acknowledged" 以及您的事件ID
  2. 添加注释:使用 add_note_to_incident 记录你的调查
  3. 请求帮助:使用 add_responders 引入额外的团队成员
  4. 解决:使用 manage_incidents 随着 status: "resolved" 固定时

创建计划覆盖(假期覆盖)

  1. 查找日程表:使用 list_schedules 使用名称过滤器
  2. 查找覆盖用户:使用 list_users 获取他们的ID
  3. 创建覆盖:使用 create_schedule_override 带有日程ID、用户ID和时间范围

检查服务运行状况

  1. 列出所有服务:使用 list_services 查看所有受监控的组件
  2. 获取服务详细信息:使用 get_service 查看升级策略和集成
  3. 查看最近发生的事件:使用 list_incidents 随着 service_ids 过滤器
  4. 检查最近的更改:使用 list_service_change_events 查看部署

设置事件路由

  1. 列出编排:使用 list_event_orchestrations 查找现有事件规则
  2. 查看当前路线:使用 get_event_orchestration_router 查看规则
  3. 添加新规则:使用 append_event_orchestration_router_rule 在不影响现有规则的情况下安全添加

公开事件沟通

  1. 查找状态页面:使用 list_status_pages 获取您的公开状态页面
  2. 获取有效值:使用 list_status_page_statuses 和 list_status_page_severities
  3. 创建帖子:使用 create_status_page_post 具有适当的类型、头衔、状态、严重性
  4. 添加更新:使用 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
  • 覆盖时间冲突:计划替代不能与现有替代重叠

调试提示

  1. 验证ID是否存在:使用相应 get_* 或 list_* 写入操作前的工具
  2. 检查权限:使用 get_user_data 验证令牌的用户上下文
  3. 验证日期范围:确保 since 在之前 until 日期符合ISO 8601标准
  4. 检查写入模式:确保服务器已启动 --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