一个暴露PagerDuty API功能给LLMs的服务器。此服务器设计用于程序化使用,具有结构化的输入和输出。
<a href="https://glama.ai/mcp/servers/@wpfleger96/pagerduty-mcp-server"> <img width="380" height="200" src="https://gips3.baidu.com/it/u=3223359358,3487178243&fm=3081&app=3081&f=PNG?w=760&h=400" alt="PagerDuty Server MCP server" /> </a>PagerDuty MCP Server 提供了一组与PagerDuty API交互的工具。这些工具旨在由LLMs使用,以执行各种操作,如事件、服务、团队和用户的管理。
pip install pagerduty-mcp-server
# 克隆仓库
git clone https://github.com/wpfleger96/pagerduty-mcp-server.git
cd pagerduty-mcp-server
# 安装依赖
brew install uv
uv sync
PagerDuty MCP Server需要在环境中设置PagerDuty API密钥:
PAGERDUTY_API_KEY=your_api_key_here
{
"type": "stdio",
"enabled": true,
"args": [
"run",
"python",
"-m",
"pagerduty_mcp_server"
],
"commandInput": "uv run python -m pagerduty_mcp_server",
"timeout": 300,
"id": "pagerduty-mcp-server",
"name": "pagerduty-mcp-server",
"description": "pagerduty-mcp-server",
"env_keys": [
"PAGERDUTY_API_KEY"
],
"cmd": "uv"
}
uv run python -m pagerduty_mcp_server
所有API响应遵循一致的格式:
{
"metadata": {
"count": <int>, // 结果数量
"description": "<str>" // 结果的简短概述
},
<resource_type>: [ // 为了保持一致性,即使返回一个结果也总是复数形式
{
...
},
...
],
"error": { // 如果有错误,则存在
"message": "<str>", // 人类可读的错误描述
"code": "<str>" // 机器可读的错误代码
}
}
当发生错误时,响应将包括以下结构的错误对象:
{
"metadata": {
"count": 0,
"description": "处理请求时发生错误"
},
"error": {
"message": "提供的用户ID无效",
"code": "INVALID_USER_ID"
}
}
常见的错误场景包括:
statuses, team_ids)必须包含有效值None或空字符串list_incidents中的statuses,只有triggered, acknowledged, 和 resolved是有效值urgency,只有high和low是有效值limit参数可用于限制列表操作返回的结果数量limit参数可用于控制列表操作返回的结果数量from pagerduty_mcp_server import incidents
from pagerduty_mcp_server.utils import RESPONSE_LIMIT
# 列出当前用户团队的所有事件(包括已解决的)
incidents_list = incidents.list_incidents()
# 列出仅活跃事件
active_incidents = incidents.list_incidents(statuses=['triggered', 'acknowledged'])
# 列出特定服务的事件
service_incidents = incidents.list_incidents(service_ids=['SERVICE-1', 'SERVICE-2'])
# 列出特定团队的事件
team_incidents = incidents.list_incidents(team_ids=['TEAM-1', 'TEAM-2'])
# 列出特定日期范围内的事件
date_range_incidents = incidents.list_incidents(
since='2024-03-01T00:00:00Z',
until='2024-03-14T23:59:59Z'
)
# 限制返回结果数量的事件列表
limited_incidents = incidents.list_incidents(limit=10)
# 使用默认限制的事件列表
default_limit_incidents = incidents.list_incidents(limit=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仍可用于按特定日程过滤请注意,大多数测试需要与PagerDuty API的真实连接,因此在运行完整的测试套件之前,您需要在环境中设置PAGERDUTY_API_KEY。
uv run pytest
仅运行单元测试(即不需要在环境中设置PAGERDUTY_API_KEY的测试):
uv run pytest -m unit
仅运行集成测试:
uv run pytest -m integration
仅运行解析器测试:
uv run pytest -m parsers
仅运行与特定子模块相关的测试:
uv run pytest -m <client|escalation_policies|...>
npx @modelcontextprotocol/inspector uv run python -m pagerduty_mcp_server
此项目使用常规提交进行自动化发布。提交消息决定版本提升:
feat: → 小版本(1.0.0 → 1.1.0)fix: → 补丁版本(1.0.0 → 1.0.1)BREAKING CHANGE: → 大版本(1.0.0 → 2.0.0)CHANGELOG.md、GitHub发布和PyPI包会自动更新。
工具文档 - 关于可用工具的详细信息,包括参数、返回类型和示例查询