项目简介

本项目 'Sentry MCP Server' 是一个 MCP 服务器的实现,它扩展了大型语言模型 (LLM) 的能力,使其能够访问和利用 Sentry 错误监控平台的数据。通过此服务器,LLM 客户端可以调用预定义的工具来查询 Sentry 中的 issue 信息,从而实现更智能的错误分析和问题排查。

主要功能点

  • 集成 Sentry: 连接到 Sentry 错误监控平台,利用 Sentry API 获取实时的错误和异常数据。
  • 提供 'get_sentry_issue' 工具: 注册并提供名为 'get_sentry_issue' 的工具,允许 LLM 客户端通过 issue ID 或 URL 查询 Sentry 中的错误详情,包括标题、状态、级别、首次/末次发生时间、计数以及详细的堆栈跟踪信息。
  • 支持 Stdio 和 SSE 传输协议: 支持通过标准输入输出 (Stdio) 和服务器发送事件 (SSE) 两种传输协议与 MCP 客户端进行通信,满足不同应用场景的需求。
  • 返回结构化信息: 工具调用结果以结构化的文本形式返回,方便 LLM 理解和利用 Sentry issue 的关键信息。

安装步骤

  1. 克隆仓库

    git clone https://github.com/ParadeTo/mcp-servers.git
    cd mcp-servers/sentry
  2. 安装依赖

    虽然 'package.json' 文件未在仓库中直接提供,但根据代码内容,可以推断需要安装以下依赖:

    npm install @modelcontextprotocol/sdk axios eventsource

    或者使用 yarn:

    yarn add @modelcontextprotocol/sdk axios eventsource

    注意: 'eventsource' 依赖可能仅在客户端 'chat' 目录的 SSE 模式下需要,服务端 'sentry' 目录可能不需要,但为了完整性安装上。

  3. 构建项目

    npm run build

    或者

    yarn build

    这将会在 'sentry/dist' 目录生成编译后的 JavaScript 代码。

服务器配置

为了让 MCP 客户端能够连接到 Sentry MCP Server,需要提供服务器的启动命令和参数。以下是 Stdio 和 SSE 两种传输协议的配置示例:

Stdio 模式配置

{
  "serverName": "sentry-mcp-server-stdio",
  "command": "node",
  "args": [
    "./sentry/dist/index.js",
    "--stdio",
    "YOUR_SENTRY_BASE_URL",  // 请替换为您的 Sentry Base URL,例如 "https://your_sentry_domain/api/0/"
    "YOUR_SENTRY_API_KEY"   // 请替换为您的 Sentry API Key
  ]
}

参数说明:

  • 'command': 启动服务器的命令,这里使用 'node' 运行 JavaScript 代码。
  • 'args': 传递给服务器的参数列表,包括:
    • '"./sentry/dist/index.js"': 编译后的服务器入口文件路径。
    • '"--stdio"': 指定使用 Stdio 传输协议。
    • '"YOUR_SENTRY_BASE_URL"': [必填] Sentry 组织或项目的 Base URL,通常形如 'https://your_sentry_domain/api/0/'。
    • '"YOUR_SENTRY_API_KEY"': [必填] 用于访问 Sentry API 的 API Key,需要具有读取 issue 信息的权限。

SSE 模式配置

{
  "serverName": "sentry-mcp-server-sse",
  "command": "node",
  "args": [
    "./sentry/dist/index.js",
    "--sse",
    "3000" // SSE 服务器监听的端口号,默认为 3000
  ],
   "sseUrl": "http://localhost:3000/sse?sentry_base_url=YOUR_SENTRY_BASE_URL&sentry_api_key=YOUR_SENTRY_API_KEY", // 请替换为您的 Sentry Base URL 和 API Key
   "messageUrl": "http://localhost:3000/messages"
}

参数说明:

  • 'command': 启动服务器的命令,这里使用 'node' 运行 JavaScript 代码。
  • 'args': 传递给服务器的参数列表,包括:
    • '"./sentry/dist/index.js"': 编译后的服务器入口文件路径。
    • '"--sse"': 指定使用 SSE 传输协议。
    • '"3000"': [可选] SSE 服务器监听的端口号,默认为 3000。可以根据需要修改。
  • 'sseUrl': [必填] SSE 连接的 URL,包含 Sentry Base URL 和 API Key 作为查询参数,例如 'http://localhost:3000/sse?sentry_base_url=https://your_sentry_domain/api/0/&sentry_api_key=YOUR_SENTRY_API_KEY'。请务必替换 'YOUR_SENTRY_BASE_URL' 和 'YOUR_SENTRY_API_KEY' 为实际值。
  • 'messageUrl': [必填] 用于客户端向服务器发送消息的 POST 请求 URL,例如 'http://localhost:3000/messages'。

环境变量配置 (推荐)

为了安全起见,推荐使用环境变量来配置 'SENTRY_BASE_URL' 和 'SENTRY_API_KEY',而不是直接在命令行参数或配置文件中硬编码。

Stdio 模式环境变量配置

启动命令保持不变:

{
  "serverName": "sentry-mcp-server-stdio",
  "command": "node",
  "args": [
    "./sentry/dist/index.js",
    "--stdio"
  ]
}

在运行 MCP 客户端之前,设置环境变量:

export SENTRY_BASE_URL="YOUR_SENTRY_BASE_URL"
export SENTRY_API_KEY="YOUR_SENTRY_API_KEY"

SSE 模式环境变量配置

启动命令保持不变:

{
  "serverName": "sentry-mcp-server-sse",
  "command": "node",
  "args": [
    "./sentry/dist/index.js",
    "--sse",
    "3000"
  ],
   "sseUrl": "http://localhost:3000/sse",
   "messageUrl": "http://localhost:3000/messages"
}

在运行 MCP 客户端和 SSE 服务器之前,设置环境变量:

export SENTRY_BASE_URL="YOUR_SENTRY_BASE_URL"
export SENTRY_API_KEY="YOUR_SENTRY_API_KEY"

SSE 模式下,'sseUrl' 和 'messageUrl' 配置中不再需要包含 'sentry_base_url' 和 'sentry_api_key' 参数。

基本使用方法

  1. 启动 Sentry MCP Server: 根据选择的传输协议 (Stdio 或 SSE) 和配置,启动 Sentry MCP Server。

  2. 配置 MCP 客户端: 在 MCP 客户端中,配置连接到 Sentry MCP Server 的相关信息,包括服务器名称、启动命令和参数(或 SSE 连接 URL)。

  3. 调用 'get_sentry_issue' 工具: 在 LLM 对话或应用逻辑中,当需要获取 Sentry issue 信息时,指示 LLM 客户端调用 'get_sentry_issue' 工具,并提供 issue ID 或 URL 作为参数。

  4. 获取 Sentry issue 信息: MCP 客户端将请求发送到 Sentry MCP Server,服务器调用 Sentry API 获取 issue 数据,并将结构化的信息返回给客户端,最终传递给 LLM 进行分析和利用。

示例 (MCP 客户端代码片段,参考 'chat/src/client.ts')

import { MCPClient } from './client.js';

async function main() {
  const client = new MCPClient();
  await client.connect('stdio'); // 或 client.connect('http');

  const issueIdOrUrl = 'YOUR_SENTRY_ISSUE_ID_OR_URL'; // 替换为实际的 Issue ID 或 URL
  const sentryIssue = await client.getSentryIssue(issueIdOrUrl);
  console.log(sentryIssue); // 打印 Sentry issue 的详细信息
}

main();

注意: 在实际使用中,'YOUR_SENTRY_ISSUE_ID_OR_URL' 需要由 LLM 根据用户意图或上下文动态生成。

信息

分类

开发者工具