返回市场
根节点-MCP服务器

根节点-MCP服务器

作者:Rootly-AI-Labs36 星标更新:2025-11-19

项目介绍

Rootly MCP Server

PyPI 版本 PyPI - 下载量 Python 版本 安装 MCP 服务器

与 Cursor、Windsurf 和 Claude 等兼容 MCP 的编辑器无缝集成的 Rootly API 服务器。无需离开您的 IDE 即可在一分钟内解决生产问题。

演示 GIF

预备条件

  • Python 3.12 或更高版本
  • uv 包管理器
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
  • 具有适当权限的 Rootly API 令牌(见下文)

API 令牌权限

MCP 服务器需要一个 Rootly API 令牌。根据您的需求选择适当的令牌类型:

  • 全局 API 密钥(推荐):对您整个 Rootly 实例中的所有实体具有完全访问权限。适用于跨团队、时间表和事件的组织级可见性。
  • 团队 API 密钥:具有该团队拥有的实体的完全读写权限。适合特定团队的工作流程。
  • 个人 API 密钥:继承创建它的用户的权限。适用于个人用例,但可能具有有限的可见性。

为了实现工具如 get_oncall_handoff_summaryget_oncall_shift_metrics 和组织级事件搜索的全部功能,建议使用 全局 API 密钥

安装

配置兼容 MCP 的编辑器(已测试 Cursor),使用以下配置之一。当您首次打开编辑器时,包将自动下载并安装。

使用 uv

{
  "mcpServers": {
    "rootly": {
      "command": "uv",
      "args": [
        "tool",
        "run",
        "--from",
        "rootly-mcp-server",
        "rootly-mcp-server"
      ],
      "env": {
        "ROOTLY_API_TOKEN": "<YOUR_ROOTLY_API_TOKEN>"
      }
    }
  }
}

使用 uvx

{
  "mcpServers": {
    "rootly": {
      "command": "uvx",
      "args": [
        "--from",
        "rootly-mcp-server",
        "rootly-mcp-server"
      ],
      "env": {
        "ROOTLY_API_TOKEN": "<YOUR_ROOTLY_API_TOKEN>"
      }
    }
  }
}

要自定义 allowed_paths 并访问额外的 Rootly API 路径,请克隆存储库并使用此配置:

{
  "mcpServers": {
    "rootly": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/rootly-mcp-server",
        "rootly-mcp-server"
      ],
      "env": {
        "ROOTLY_API_TOKEN": "<YOUR_ROOTLY_API_TOKEN>"
      }
    }
  }
}

连接到托管 MCP 服务器

或者,直接连接到我们的托管 MCP 服务器:

{
  "mcpServers": {
    "rootly": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.rootly.com/sse",
        "--header",
        "Authorization:${ROOTLY_AUTH_HEADER}"
      ],
      "env": {
        "ROOTLY_AUTH_HEADER": "Bearer <YOUR_ROOTLY_API_TOKEN>"
      }
    }
  }
}

功能

  • 动态工具生成:从 Rootly 的 OpenAPI(Swagger)规范自动创建 MCP 资源
  • 智能分页:默认每个请求 10 个项目以防止上下文窗口溢出
  • API 过滤:限制暴露的 API 端点以提高安全性和性能
  • 智能事件分析:智能工具分析历史事件数据
    • find_related_incidents:使用 TF-IDF 相似性分析找到历史上相似的事件
    • suggest_solutions:挖掘过去的事件解决方案以推荐可操作的解决方案
  • MCP 资源:将事件和团队数据作为结构化资源公开,便于 AI 引用
  • 智能模式识别:自动识别服务、错误类型和解决方案模式

可用工具

警报

  • listIncidentAlerts
  • listAlerts
  • attachAlert
  • createAlert

环境

  • listEnvironments
  • createEnvironment

功能

  • listFunctionalities
  • createFunctionality

工作流

  • listWorkflows
  • createWorkflow

事件

  • listIncidentActionItems
  • createIncidentActionItem
  • listIncident_Types
  • createIncidentType
  • search_incidents
  • find_related_incidents
  • suggest_solutions

值班

  • get_oncall_shift_metrics
  • get_oncall_handoff_summary
  • get_shift_incidents

服务及严重程度

  • listServices
  • createService
  • listSeverities
  • createSeverity

团队及用户

  • listTeams
  • createTeam
  • listUsers
  • getCurrentUser

元数据

  • list_endpoints

为什么限制路径?

我们限制暴露的 API 路径有两个关键原因:

  1. 上下文管理:Rootly 的全面 API 可能会压倒 AI 代理,影响它们执行简单任务的能力
  2. 安全性:控制通过 MCP 服务器可以访问的信息和操作

要暴露额外的路径,请修改 src/rootly_mcp_server/server.py 中的 allowed_paths 变量。

智能分析工具

MCP 服务器包括智能工具,分析历史事件数据以提供可操作的见解:

find_related_incidents

使用文本相似性分析找到历史上相似的事件:

find_related_incidents(incident_id="12345", similarity_threshold=0.15, max_results=5)
  • 输入:事件 ID、相似度阈值(0.0-1.0)、最大结果数
  • 输出:带有置信分数、匹配的服务和解决时间的相似事件
  • 用例:从过去的事件中获取上下文以理解模式和解决方案

suggest_solutions

通过分析类似事件是如何解决的来推荐解决方案:

suggest_solutions(incident_id="12345", max_solutions=3)
# 或对于新事件:
suggest_solutions(incident_title="支付 API 错误", incident_description="用户在结账时收到 500 错误")
  • 输入:事件 ID 或标题/描述文本
  • 输出:带有置信分数和时间估计的可操作解决方案建议
  • 用例:基于成功的过去解决方案获得智能建议

工作原理

  • 文本相似性:使用 TF-IDF 向量化和余弦相似性(scikit-learn)
  • 服务检测:自动从事件文本中识别受影响的服务
  • 模式识别:发现常见的错误类型、解决方案模式和时间估计
  • 备用模式:在没有 ML 库的情况下使用基于关键词的相似性工作
  • 解决方案挖掘:从解决方案摘要中提取可操作步骤

数据要求

为了获得最佳效果,请确保您的 Rootly 事件具有描述性的:

  • 标题:清晰、具体的事件描述
  • 摘要:关闭事件时的详细解决方案步骤
  • 服务标签:正确的服务标识

好的解决方案摘要示例:"重启了 auth-service,清除了 Redis 缓存,并将连接池从 10 增加到 50"

值班班次指标

获取任意时间段的值班班次指标,按用户、团队或时间表分组。包括主要/次要角色跟踪、班次计数、小时数和值班天数。

get_oncall_shift_metrics(
    start_date="2025-10-01",
    end_date="2025-10-31",
    group_by="user"
)

值班交接总结

完整的交接:当前/下一个值班人员+班次期间的事件。

# 所有值班(任何时区)
get_oncall_handoff_summary(
    team_ids="team-1,team-2",
    timezone="America/Los_Angeles"
)

# 区域过滤 - 仅显示亚太地区业务时间内亚太地区的值班人员
get_oncall_handoff_summary(
    timezone="Asia/Tokyo",
    filter_by_region=True
)

区域过滤仅显示指定时区业务时间(上午 9 点至下午 5 点)内的值班人员。

返回:带有 current_oncallnext_oncallshift_incidentsschedules

班次事件

一段时间内的事件,按严重程度/状态/标签过滤。

get_shift_incidents(
    start_time="2025-10-20T09:00:00Z",
    end_time="2025-10-20T17:00:00Z",
    severity="critical",  # 可选
    status="resolved",    # 可选
    tags="database,api"   # 可选
)

返回:incidents 列表 + summary(计数、平均解决时间、分组)

开发者设置及故障排除

预备条件

  • Python 3.12 或更高版本
  • 用于依赖管理的 uv

1. 设置虚拟环境

创建并激活虚拟环境:

uv venv .venv
source .venv/bin/activate  # 在运行脚本之前始终激活

2. 安装依赖项

安装所有项目依赖项:

uv pip install .

在开发过程中添加新的依赖项:

uv pip install <package>

3. 设置 Git Hooks(推荐给贡献者)

安装预提交钩子以在提交前自动运行代码检查和测试:

./scripts/setup-hooks.sh

这通过运行以下内容确保代码质量:

  • Ruff 代码检查
  • Pyright 类型检查
  • 单元测试

4. 验证安装

现在,服务器应该可以与兼容 MCP 的编辑器一起使用了。

对于开发者:在 tests/ 目录中提供了额外的测试工具。

在 Postman 上玩转它

<img src="https://run.pstmn.io/button.svg" alt="在 Postman 上运行" style="width: 128px; height: 32px;">

关于 Rootly AI 实验室

该项目由 Rootly AI 实验室 开发,在那里我们正在构建系统可靠性和运营卓越的未来。作为一个开源孵化器,我们分享想法、实验并快速原型化解决方案,以造福整个社区。 Rootly AI 徽标