项目简介

这是一个基于 Model Context Protocol (MCP) 实现的应用后端(MCP 服务器),旨在将 SonarQube Cloud 的能力暴露给支持 MCP 的 LLM 客户端。它通过 MCP 标准协议提供访问 SonarQube Cloud 项目、问题、安全热点和代码重复的功能。

主要功能点

  • 列出项目: 允许 LLM 获取指定 Sonarcloud 组织下的所有项目列表。
  • 搜索问题: 允许 LLM 根据项目键、组织、分支、状态和严重性等条件搜索 Sonar 项目中的代码问题(Bug、漏洞、异味)。
  • 搜索安全热点: 允许 LLM 搜索 Sonar 项目中的安全热点,可按文件路径或状态过滤。
  • 展示代码重复: 允许 LLM 查看指定分支、拉取请求或文件内的代码重复块。
  • 标准接口: 通过 MCP 标准协议(基于 JSON-RPC)与 LLM 客户端通信,确保互操作性。
  • 多传输支持: 支持标准输入/输出 (Stdio) 和 Server-Sent Events (SSE) 等传输协议。

安装步骤

  1. 克隆仓库: 获取项目代码:
    git clone https://github.com/lreimer/sonar-mcp-server.git
    cd sonar-mcp-server
  2. 安装 Go: 如果你的系统没有安装 Go 语言环境,请先安装 Go (版本 1.18 或更高)。
  3. 构建服务器: 使用 Go 工具链构建可执行文件:
    go build -o sonar-mcp-server main.go
    或者使用 goreleaser 进行快照构建(需要安装 goreleaser):
    goreleaser build --snapshot --clean
    这会在 './dist/' 目录下生成可执行文件。

服务器配置

MCP 服务器通常需要被配置到 LLM 客户端中才能被使用。配置信息通常是一个 JSON 对象,客户端会根据此信息启动 MCP 服务器进程并与其通信。

例如,在支持 MCP 的 LLM 客户端中配置此服务器,你需要提供服务器名称、启动命令、参数和必要的环境变量。

  • 服务器名称: 用户自定义,例如 'sonar'。
  • 启动命令 (command): 指向你刚才构建的可执行文件的完整路径,例如 '/Users/youruser/path/to/sonar-mcp-server' 或 './dist/sonar-mcp-server_[...]/sonar-mcp-server'。
  • 参数 (args): 启动服务器的命令行参数。
    • 对于桌面客户端或本地终端使用,通常使用 Stdio 传输:'-t stdio'
    • 对于需要通过网络访问的场景(如云端部署),可以使用 SSE 传输:'-t sse -p 8080' (端口号可自定义)。
  • 环境变量 (env): MCP 服务器需要 Sonarcloud API 的访问令牌。
    • 'SONAR_TOKEN': 你的 Sonarcloud API 令牌。你需要从 Sonarcloud 账户设置中生成此令牌。

示例配置概念(请根据你的 LLM 客户端的实际配置格式调整,下方不是直接可用的代码):

// 这是一个概念示例,不是实际可运行的配置代码
{
  "server_name": "sonar",
  "command": "/path/to/your/sonar-mcp-server", // 替换为实际路径
  "args": ["-t", "stdio"], // 或 ["-t", "sse", "-p", "8080"]
  "environment_variables": {
    "SONAR_TOKEN": "<<你的 Sonarcloud API 令牌>>" // 替换为你的令牌
  }
}

基本使用方法

  1. 获取 Sonarcloud API 令牌: 登录 Sonarcloud,在用户设置中生成一个 API 令牌。
  2. 配置 MCP 客户端: 将构建好的 'sonar-mcp-server' 可执行文件路径、启动参数('-t stdio' 或 '-t sse' 及端口)以及 'SONAR_TOKEN' 环境变量配置到你的 LLM 客户端中。
  3. 启动客户端: 启动 LLM 客户端。客户端会自动启动配置好的 MCP 服务器并发现其提供的工具。
  4. 与 LLM 交互: 通过与 LLM 交互,LLM 可以根据你的指令调用声纳 MCP 服务器提供的工具(如“列出组织 my_org 的所有项目”、“查找项目 my_project 的未解决问题”等),获取 Sonarcloud 数据并用于回答或完成任务。

信息

分类

开发者工具