PagerDuty MCP服务器
向LLM公开PagerDuty API功能的服务器。此服务器旨在以编程方式使用,具有结构化的输入和输出。
](https://pypi.org/project/pagerduty-mcp-server/) ](https://pypi.org/project/pagerduty-mcp-server/) ](https://github.com/wpfleger96/pagerduty-mcp-server/graphs/contributors) ](https://pypi.org/project/pagerduty-mcp-server/) 
概述
PagerDuty MCP服务器提供了一组用于与PagerDuy API交互的工具。这些工具旨在供LLM使用,以对事件、服务、团队和用户等PagerDuty资源执行各种操作。
入门指南
- 初始化本地Python环境:
cd pagerduty-mcp-server
brew install uv
uv sync- 配置身份验证(请参阅 认证 在......下面
认证
优先: X-PagerDuty-Token HTTP标头> PAGERDUTY_API_TOKEN 环境变量>OAuth 2.0 PKCE
选项1:X-PagerDuty令牌头(平台集成)
当作为按请求注入凭据的平台的一部分运行时,服务器会读取 X-PagerDuty-Token HTTP标头。这具有最高优先级,不需要任何本地配置。
选项2:API代币(建议大多数用户使用)
设置 PAGERDUTY_API_TOKEN 环境变量,或将其添加到 .env 项目根目录中的文件。服务器将自动从以下位置加载环境变量 .env 文件(如果存在)。
环境变量:
export PAGERDUTY_API_TOKEN=your_api_token_here.env 文件(推荐):
echo "PAGERDUTY_API_TOKEN=your_api_token_here" > .env选项3:OAuth 2.0 PKCE(本地交互使用)
OAuth可用于本地独立使用。它打开浏览器进行身份验证,并将令牌安全地存储在操作系统密钥环中。OAuth是选择加入的——它只在以下情况下激活 PAGERDUTY_CLIENT_ID 已设置,并且不存在API令牌。
设置:
- 在以下网址注册PagerDuty OAuth应用程序 集成→ 开发者工具→ 我的应用程序.
- 将所需范围设置为
read write. - 将重定向URI设置为
http://localhost:5173/oauth/pagerduty(默认端口)。 - 设置
PAGERDUTY_CLIENT_ID环境变量到应用程序的客户端ID。
可选配置:
- 集
PAGERDUTY_CLIENT_SECRET启用令牌刷新(机密客户端)。 - 集
PAGERDUTY_OAUTH_CALLBACK_PORT覆盖默认回调端口(5173).
用法
克劳德/光标
{
"mcpServers": {
"pagerduty-mcp-server": {
"command": "uvx",
"args": ["pagerduty-mcp-server"],
"env": {
"PAGERDUTY_API_TOKEN": "
"
}
}
}
}作为独立服务器
uv run pagerduty-mcp-server可用工具
阅读工具
get_escalation_policies--列出或获取升级策略的详细信息get_incidents--列出或获取事件的详细信息(支持按状态、紧急程度、服务、团队和时间范围进行筛选)get_oncalls--列出某个时间范围内的呼叫条目get_schedules--列出或获取时间表的详细信息get_services--列出或获取服务的详细信息get_teams--列出或获取团队的详细信息get_users--列出或获取用户的详细信息list_users_oncall--列出特定日程的待命用户build_user_context--为当前经过身份验证的用户构建上下文对象
写入工具
acknowledge_incident--确认事件(表示正在进行调查)resolve_incident--解决事件(阻止进一步升级)add_incident_note--在事件中添加注释(用于记录调查进度或背景)
这 include 参数
大多数阅读工具都接受可选 include 参数——要返回的字段名列表。指定后,每个响应对象中只包含这些字段,这减少了LLM上下文中的令牌使用。
# Return only id, title, and status for each incident
get_incidents(include=["id", "title", "status"])
# Return only id and name for each service
get_services(include=["id", "name"])看 工具文档 查看每个工具可用字段的完整列表。
响应格式
所有API回复都遵循一致的格式:
{
"metadata": {
"count": "",
"description": ""
},
"": [
{
"...": "..."
}
],
"error": {
"message": "",
"code": ""
}
}这 error 字段仅在发生错误时存在。响应中的资源名称始终是复数形式的,以保持一致性,即使返回了单个项目。
错误处理
当发生错误时,响应将包含一个具有以下结构的错误对象:
{
"metadata": {
"count": 0,
"description": "Error occurred while processing request"
},
"error": {
"message": "Invalid user ID provided",
"code": "INVALID_USER_ID"
}
}常见的错误场景包括:
- 无效的资源id(例如,user_id、team_id、service_id)
- 缺少必要参数
- 参数值无效
- API请求失败
- 响应处理错误
参数验证
- 所有ID参数必须是有效的PagerDuty资源ID
- 日期参数必须是有效的ISO8601时间戳
- 列出参数(例如。,
statuses,team_ids)必须包含有效值 - 列表参数中的无效值将被忽略
- 所需参数不能为
None或空字符串 - 对于
statuses在get_incidents,仅triggered,acknowledged,以及resolved是有效值 - 对于
urgency在事故中,仅high和low是有效值 - 这
limit参数可用于限制列表操作返回的结果数量
速率限制和分页
- 服务器遵守PagerDuty的速率限制
- 服务器会自动为您处理分页
- 这
limit参数可用于控制列表操作返回的结果数量 - 如果没有指定限制,服务器将返回最多
pagerduty_mcp_server.utils.RESPONSE_LIMIT默认结果
用户上下文
许多功能接受 current_user_context 参数(默认为 True)其基于该上下文自动过滤结果。当 current_user_context 是 True,您不能使用某些筛选参数,因为它们会与自动筛选冲突:
- 对于所有资源类型:
- user_ids 不能与一起使用 current_user_context=True
- 对于事件:
- team_ids 和 service_ids 不能与一起使用 current_user_context=True
- 关于服务:
- team_ids 不能与一起使用 current_user_context=True
- 对于升级策略:
- team_ids 不能与一起使用 current_user_context=True
- 随叫随到:
- user_ids 不能与一起使用 current_user_context=True - schedule_ids 仍可用于按特定计划进行筛选 - 查询将显示与当前用户团队相关的所有升级策略的呼叫 - 这对于回答诸如“我的团队目前有谁在待命?”之类的问题很有用 - 当前用户的ID未用作筛选器,因此您将看到所有随叫随到的团队成员
发展
运行测试
测试套件包括单元测试和集成测试。集成测试需要真正连接到PagerDuty API,而单元测试可以在没有API访问的情况下运行。
这 pytest-cov args是可选的,使用它们在输出中包含测试覆盖率报告。
运行所有测试(如果出现以下情况,集成测试将自动跳过 PAGERDUTY_API_TOKEN 未设置):
uv run pytest [--cov=src --cov-report=term-missing]仅运行单元测试(不需要API令牌):
uv run pytest -m unit [--cov=src --cov-report=term-missing]只运行集成测试(需要 PAGERDUTY_API_TOKEN 在环境中设置):
uv run pytest -m integration [--cov=src --cov-report=term-missing]仅运行与特定子模块相关的测试:
uv run pytest -m [--cov=src --cov-report=term-missing]使用MCP检查器调试服务器
npx @modelcontextprotocol/inspector uv run pagerduty-mcp-server文档
工具文档 -有关可用工具的详细信息,包括参数、返回类型和示例查询
惯例
- 所有API响应都遵循标准格式,包含元数据、资源列表和可选错误
- 为了保持一致性,响应中的资源名称始终是复数形式的
- 所有返回单个项目的函数仍然返回一个包含一个元素的列表
- 错误响应包括消息和代码
- 所有时间戳均采用ISO8601格式
- 测试标有pytest标记,以指示其类型(单元/集成)和测试的资源(事件、团队等)
查询示例
- 在传呼机值班期间,是否有分配给我的任何事件?
- 未来两周我有什么随叫随到的时间表吗?
- 还有谁是个性化团队的成员?

