返回市场
PagerDuty-MCP-服务器

PagerDuty-MCP-服务器

作者:wpfleger967 星标更新:2025-07-10

项目介绍

PagerDuty MCP Server

一个暴露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>

PyPI 下载量 Python 版本 GitHub 贡献者 PyPI 版本 许可证

概述

PagerDuty MCP Server 提供了一组与PagerDuty API交互的工具。这些工具旨在由LLMs使用,以执行各种操作,如事件、服务、团队和用户的管理。

安装

从PyPI安装

pip install pagerduty-mcp-server

从源码安装

# 克隆仓库
git clone https://github.com/wpfleger96/pagerduty-mcp-server.git
cd pagerduty-mcp-server

# 安装依赖
brew install uv
uv sync

需求

  • Python 3.13或更高版本
  • PagerDuty API密钥

配置

PagerDuty MCP Server需要在环境中设置PagerDuty API密钥:

PAGERDUTY_API_KEY=your_api_key_here

使用

作为Goose扩展

{
  "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"
  }
}

常见的错误场景包括:

  • 无效的资源ID(例如,user_id, team_id, service_id)
  • 缺少必需的参数
  • 参数值无效
  • API请求失败
  • 响应处理错误

参数验证

  • 所有ID参数必须是有效的PagerDuty资源ID
  • 日期参数必须是有效的ISO8601时间戳
  • 列表参数(例如,statuses, team_ids)必须包含有效值
  • 列表参数中的无效值将被忽略
  • 必需参数不能为None或空字符串
  • list_incidents中的statuses,只有triggered, acknowledged, 和 resolved是有效值
  • 在事件中的urgency,只有highlow是有效值
  • limit参数可用于限制列表操作返回的结果数量

速率限制和分页

  • 服务器尊重PagerDuty的速率限制
  • 服务器会自动为你处理分页
  • limit参数可用于控制列表操作返回的结果数量
  • 如果未指定限制,默认情况下服务器将返回最多{pagerduty_mcp_server.utils.RESPONSE_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_contextTrue时,您不能使用某些过滤参数,因为它们会与自动过滤冲突:

  • 对于所有资源类型:
    • user_ids不能与current_user_context=True一起使用
  • 对于事件:
    • team_idsservice_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的真实连接,因此在运行完整的测试套件之前,您需要在环境中设置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|...>

使用MCP Inspector调试服务器

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包会自动更新。

文档

工具文档 - 关于可用工具的详细信息,包括参数、返回类型和示例查询

规范

  • 所有API响应都遵循标准格式,包括元数据、资源列表和可选错误
  • 响应中的资源名称始终复数形式,以保持一致性
  • 返回单个项目的函数仍然返回一个元素的列表
  • 错误响应包括消息和代码
  • 所有时戳均为ISO8601格式
  • 测试用pytest标记来指示其类型(单元/集成)、测试的资源(事件、团队等)以及是否测试解析功能("parsers"标记)