SonarQube

官方

提供与SonarQube服务器或云的无缝集成,并支持在代理上下文中直接分析代码片段

你可以用 SonarQube MCP 做什么?

  • 连接到 SonarQube Cloud 或 Server — 配置 sonarsource/sonarqube-mcp 容器并提供令牌、组织密钥或服务器 URL,将你的助手连接到 SonarQube。
  • 分析代码片段 — 让助手分析代码片段或文件,并通过挂载工作区直接从磁盘读取文件。
  • 搜索和管理问题 — 通过 issues 工具集查找和更新 SonarQube 问题。
  • 审查安全热点 — 通过 security-hotspots 工具集搜索和审查安全热点。
  • 浏览项目和质量门禁 — 查询项目密钥、质量门禁、规则、度量指标和覆盖率数据。
  • 限制工具集并启用只读模式 — 使用 SONARQUBE_TOOLSETS 和 SONARQUBE_READ_ONLY 控制加载哪些工具,并阻止写入操作。

文档

Sonar logo

Build Quality Gate Status

SonarQube MCP Server

SonarQube MCP Server 是一个模型上下文协议 (MCP) 服务器,可与 SonarQube Server 或 Cloud 无缝集成,用于代码质量和安全性分析。 它还支持直接在智能体上下文中分析代码片段。

从快速设置开始,或详细了解 SonarQube 产品系列。

快速设置

安全最佳实践

🔒 重要提示:SonarQube 令牌是敏感凭据。请遵循以下安全实践:

使用 CLI 命令时:

  • 避免在命令行参数中硬编码令牌 – 它们会被保存到 shell 历史记录中
  • 使用环境变量 – 运行命令前,将令牌设置为环境变量

使用配置文件时:

  • 切勿将令牌提交到版本控制系统
  • 尽可能在配置文件中使用环境变量替换

🚀 生成配置

最快的入门方式是使用 SonarQube MCP Server 配置生成器——这是一个交互式工具,可为你首选的 AI 智能体客户端生成可直接使用的配置。

手动设置

如果你更愿意自行配置,最简单的方法是使用我们的容器镜像 sonarsource/sonarqube-mcp。使用 sonarsource/sonarqube-mcp 自动更新(使用 --pull=always),或固定到版本标签(例如 sonarsource/sonarqube-mcp:1.19.0.2785),以确保部署可复现。某些版本还会使用与之对应的 SonarQube Server 版本进行标记,格式为 <SQS major>.<SQS minor>.<patch>(例如 sonarsource/sonarqube-mcp:2026.5.0);每发布一个面向该 SonarQube Server 版本的 MCP 版本,补丁号就会递增。如果你想在本地构建,请参阅下文。

**注意:**以下示例使用 docker,但任何兼容 OCI 的容器运行时都可以使用(例如 Podman、nerdctl)。只需将 docker 替换为你首选的工具即可。

Antigravity

SonarQube MCP Server 已在 Antigravity MCP Store 中提供。请按照以下说明操作:

  1. 打开智能体侧边栏
  2. 点击右上角的三个点 (...),然后选择 MCP Servers
  3. 搜索 SonarQube 并选择 Install
  4. 提供所需的 SonarQube 用户令牌。连接 SonarQube Cloud 时,也可以提供组织密钥;连接 SonarQube Server 时,也可以提供 SonarQube URL。

对于 SonarQube Cloud US,请将 URL 设置为 https://sonarqube.us。

或者,你也可以通过 mcp_config.json 手动配置服务器:

  • 连接 SonarQube Cloud:

在智能体侧边栏中,点击三个点 (...) -> MCP Store -> Manage MCP Servers -> View raw config,然后添加以下内容:

{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_ORG", "sonarsource/sonarqube-mcp"],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_TOKEN>",
        "SONARQUBE_ORG": "<YOUR_ORG>"
      }
    }
  }
}

对于 SonarQube Cloud US,请将 "SONARQUBE_URL": "https://sonarqube.us" 手动添加到 env 部分,并将 "-e", "SONARQUBE_URL" 添加到 args 数组中。

  • 连接 SonarQube Server:
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_URL", "sonarsource/sonarqube-mcp"],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_USER_TOKEN>",
        "SONARQUBE_URL": "<YOUR_SERVER_URL>"
      }
    }
  }
}
Claude Code
  • 连接 SonarQube Cloud:
claude mcp add sonarqube \
  --env SONARQUBE_TOKEN=$SONAR_TOKEN \
  --env SONARQUBE_ORG=$SONAR_ORG \
  -- docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_ORG sonarsource/sonarqube-mcp

对于 SonarQube Cloud US,请将 --env SONARQUBE_URL=https://sonarqube.us 添加到命令中。

  • 连接 SonarQube Server:
claude mcp add sonarqube \
  --env SONARQUBE_TOKEN=$SONAR_USER_TOKEN \
  --env SONARQUBE_URL=$SONAR_URL \
  -- docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_URL sonarsource/sonarqube-mcp
Codex CLI

手动编辑 ~/.codex/config.toml 处的配置文件,并添加以下配置:

  • 连接 SonarQube Cloud:
[mcp_servers.sonarqube]
command = "docker"
args = ["run", "--init", "--pull=always", "--rm", "-i", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_ORG", "sonarsource/sonarqube-mcp"]
env = { "SONARQUBE_TOKEN" = "<YOUR_USER_TOKEN>", "SONARQUBE_ORG" = "<YOUR_ORG>" }

对于 SonarQube Cloud US,请将 "SONARQUBE_URL" = "https://sonarqube.us" 添加到 env 部分,并将 "-e", "SONARQUBE_URL" 添加到 args 数组中。

  • 连接 SonarQube Server:
[mcp_servers.sonarqube]
command = "docker"
args = ["run", "--init", "--pull=always", "--rm", "-i", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_URL", "sonarsource/sonarqube-mcp"]
env = { "SONARQUBE_TOKEN" = "<YOUR_TOKEN>", "SONARQUBE_URL" = "<YOUR_SERVER_URL>" }
Cursor
  • 连接 SonarQube Cloud:

Install for SonarQube Cloud

对于 SonarQube Cloud US,安装后请在 MCP 配置的 env 部分中手动添加 "SONARQUBE_URL": "https://sonarqube.us"。

  • 连接 SonarQube Server:

Install for SonarQube Server

Gemini CLI

**注意:**Gemini CLI 扩展已迁移至 sonarqube-agent-plugins 仓库。今后请从该仓库安装。

你可以使用以下命令安装我们的 MCP 服务器扩展:

gemini extensions install https://github.com/SonarSource/sonarqube-agent-plugins

启动 Gemini 前,需要设置所需的环境变量:

所需环境变量:

  • 对于 SonarQube Cloud:

    • SONARQUBE_TOKEN - SonarQube Cloud 令牌
    • SONARQUBE_ORG - 组织密钥
    • SONARQUBE_URL - (可选)对于 SonarQube Cloud US,设置为 https://sonarqube.us
  • 对于 SonarQube Server:

    • SONARQUBE_TOKEN - SonarQube Server 用户令牌
    • SONARQUBE_URL - SonarQube Server URL

安装后,扩展将安装在 <home>/.gemini/extensions/sonarqube/gemini-extension.json 下。

GitHub Copilot CLI

启动 Copilot CLI 后,运行以下命令以添加 SonarQube MCP 服务器:

/mcp add

你需要提供有关 MCP 服务器的不同信息,可以使用 Tab 键在各字段间切换。

  • 连接 SonarQube Cloud:
Server Name: sonarqube
Server Type: Local (Press 1)
Command: docker
Arguments: run, --init, --pull=always, --rm, -i, -e, SONARQUBE_TOKEN, -e, SONARQUBE_ORG, sonarsource/sonarqube-mcp
Environment Variables: SONARQUBE_TOKEN=<YOUR_TOKEN>,SONARQUBE_ORG=<YOUR_ORG>
Tools: *

对于 SonarQube Cloud US,请将 -e, SONARQUBE_URL 添加到 Arguments,并将 SONARQUBE_URL=https://sonarqube.us 添加到 Environment Variables。

  • 连接 SonarQube Server:
Server Name: sonarqube
Server Type: Local (Press 1)
Command: docker
Arguments: run, --init, --pull=always, --rm, -i, -e, SONARQUBE_TOKEN, -e, SONARQUBE_URL, sonarsource/sonarqube-mcp
Environment Variables: SONARQUBE_TOKEN=<YOUR_USER_TOKEN>,SONARQUBE_URL=<YOUR_SERVER_URL>
Tools: *

配置文件位于 ~/.copilot/mcp-config.json。

GitHub Copilot coding agent

GitHub Copilot coding agent 可以在 CI/CD 中直接使用 SonarQube MCP 服务器。

要将机密添加到 Copilot 环境,请参阅 Copilot 文档。只有名称以 COPILOT_MCP_ 为前缀的机密才可用于 MCP 配置。

在 GitHub 仓库中,依次进入 Settings -> Copilot -> Coding agent,并在 MCP 配置部分添加以下配置:

  • 连接 SonarQube Cloud:
{
  "mcpServers": {
    "sonarqube": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "--rm",
        "-i",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "COPILOT_MCP_SONARQUBE_TOKEN",
        "SONARQUBE_ORG": "COPILOT_MCP_SONARQUBE_ORG"
      },
      "tools": ["*"]
    }
  }
}

对于 SonarQube Cloud US,请将 "-e", "SONARQUBE_URL" 添加到 args 数组,并将 "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL" 添加到 env 部分,然后设置机密 COPILOT_MCP_SONARQUBE_URL=https://sonarqube.us。

  • 连接 SonarQube Server:
{
  "mcpServers": {
    "sonarqube": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "--rm",
        "-i",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_URL",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "COPILOT_MCP_SONARQUBE_USER_TOKEN",
        "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL"
      },
      "tools": ["*"]
    }
  }
}
Kiro

在工作区目录中创建 .kiro/settings/mcp.json 文件(如果已存在则编辑),并添加以下配置:

  • 连接 SonarQube Cloud:
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e", 
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_TOKEN>",
        "SONARQUBE_ORG": "<YOUR_ORG>"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

对于 SonarQube Cloud US,请将 "-e", "SONARQUBE_URL" 添加到 args 数组,并将 "SONARQUBE_URL": "https://sonarqube.us" 添加到 env 部分。

  • 连接 SonarQube Server:
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e", 
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_URL",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_USER_TOKEN>",
        "SONARQUBE_URL": "<YOUR_SERVER_URL>"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
VS Code

你可以使用以下按钮简化在 VS Code 中的安装过程。

Install for SonarQube Cloud

对于 SonarQube Cloud US,安装后请在 MCP 配置的 env 部分中手动添加 "SONARQUBE_URL": "https://sonarqube.us"。

Install for SonarQube Server

Windsurf

SonarQube MCP Server 可作为 Windsurf 插件使用。请按照以下说明操作:

  1. 打开 Windsurf Settings > Cascade > MCP Servers,然后选择 Open MCP Marketplace
  2. 在 Cascade MCP Marketplace 中搜索 sonarqube
  3. 选择 SonarQube MCP Server,然后选择 Install
  4. 添加所需的 SonarQube 用户令牌。也可以选择添加 SonarQube Cloud 的默认组织密钥,或添加 SonarQube Server 或 Community Build 的 SonarQube URL。

对于 SonarQube Cloud US,请将 URL 设置为 https://sonarqube.us。

Zed

在 Zed 中打开 Extensions 视图并搜索 SonarQube MCP Server。 安装扩展时,系统会提示你提供所需的环境变量:

  • 使用 SonarQube Cloud 时:
{
  "sonarqube_token": "YOUR_SONARQUBE_TOKEN",
  "sonarqube_org": "SONARQUBE_ORGANIZATION_KEY",
  "docker_path": "DOCKER_PATH"
}

对于 SonarQube Cloud US,请将 "sonarqube_url": "https://sonarqube.us" 添加到配置中。

  • 使用 SonarQube Server 时:
{
  "sonarqube_token": "YOUR_SONARQUBE_USER_TOKEN",
  "sonarqube_url": "YOUR_SONARQUBE_SERVER_URL",
  "docker_path": "DOCKER_PATH"
}

docker_path 是 docker 可执行文件的路径。示例:

Linux/macOS:/usr/bin/docker 或 /usr/local/bin/docker

Windows:C:\Program Files\Docker\Docker\resources\bin\docker.exe

💡 **提示:**我们建议定期拉取最新镜像,或在报告问题前拉取,以确保使用最新功能和修复。

手动安装

你可以将以下代码片段复制到 MCP 服务器配置文件中,手动安装 SonarQube MCP 服务器:

  • 连接 SonarQube Cloud:
{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_ORG",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>"
    }
  }
}
  • 连接 SonarQube Server:
{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

与 SonarQube for IDE 集成

SonarQube MCP Server 可以与 SonarQube for IDE 集成,进一步优化开发工作流,并直接在 IDE 中提供更完善的代码分析和洞察。

配置

使用 SonarQube for IDE 时,应将 SONARQUBE_IDE_PORT 环境变量设置为正确的端口号。SonarQube for VS Code 提供了“快速安装”按钮,可自动设置正确的端口配置。

例如,使用 SonarQube Cloud 时:

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_ORG",
      "-e",
      "SONARQUBE_IDE_PORT",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>",
      "SONARQUBE_IDE_PORT": "<64120-64130>"
    }
  }
}

在 Linux 上的容器中运行 MCP 服务器时,容器无法访问运行在 localhost 上的 SonarQube for IDE 嵌入式服务器。若要允许容器连接到 SonarQube for IDE 服务器,请在容器运行命令中添加 --network=host 选项。

配置

根据你的环境,需要提供特定的环境变量。

基础配置

运行 MCP Server 时,应添加以下变量:

环境变量描述
STORAGE_PATH必填的可写目录绝对路径,SonarQube MCP Server 将在此目录中存储文件(例如,用于创建、更新和持久化);使用容器镜像时会自动提供
SONARQUBE_PROJECT_KEY可选的默认项目密钥。设置后,所有需要项目密钥的工具都会自动使用此值 — 其架构中将完全移除 projectKey 参数。适用于仅处理单个项目的情况。
SONARQUBE_IDE_PORT可选端口号,范围为 64120 到 64130,用于连接 SonarQube MCP Server 与 SonarQube for IDE。
SONARQUBE_FORCE_LOCAL_ANALYSIS设置为 true,即可在 Cloud stdio 上使用 analyze_code_snippet,而非 Vortex 分析,包括适用于已获授权的组织。需要 analysis 工具集。默认值:false。对 SonarQube Server 或 Cloud HTTP 无效。
SONARQUBE_DEBUG_ENABLED设置为 true 时启用调试日志。调试日志会同时写入日志文件和 STDERR。适用于排查连接或配置问题。默认值:false。
SONARQUBE_LOG_TO_FILE_DISABLED设置为 true 时,完全禁用将日志写入磁盘。不会在 STORAGE_PATH/logs/ 下创建日志文件。适用于不希望记录文件日志的容器化或临时环境。默认值:false。

工作区挂载(减少上下文膨胀)

默认情况下,分析工具 analyze_code_snippet 要求代理将完整文件内容作为 fileContent 参数传入。对于大型文件,或在一个会话中分析多个文件时,这会显著增加上下文窗口的使用量和成本。

**解决方案:**将项目目录挂载到容器中的 /app/mcp-workspace。检测到此挂载后,服务器会使用相对于项目的 filePath 参数直接从磁盘读取文件 — 文件内容不会经过代理上下文。

{
  "args": [
    "run", "-i", "--rm", "--init", "--pull=always",
    "-e", "SONARQUBE_TOKEN",
    "-e", "SONARQUBE_ORG",
    "-v", "/path/to/your/project:/app/mcp-workspace",
    "sonarsource/sonarqube-mcp"
  ]
}

挂载后,分析工具会使用 filePath 直接读取文件;无需使用 fileContent。

通过 stdio 时,分析方式会在启动时选定(取决于已启用的工具集):

  • **SonarQube Cloud:**使用工作区挂载且至少有一个已获授权的组织时,采用 Vortex 分析(run_advanced_code_analysis);否则采用本地分析。Vortex 分析仅接受已获授权的组织。
  • **SonarQube Server:**对于已获授权的实例,采用 Vortex 分析(需要工作区挂载);对于未启用 Vortex 的实例,采用本地分析。

如果已连接 SonarQube for IDE,本地分析会使用它;否则使用 analyze_code_snippet。未挂载时,代码片段分析需要 fileContent。

在 Cloud stdio 上,SONARQUBE_ORG 会将授权检查限定在该组织。若要对所有组织使用代码片段,请设置 SONARQUBE_FORCE_LOCAL_ANALYSIS=true、启用 analysis 工具集并重启。此设置仅影响 Cloud stdio。

通过 HTTP/HTTPS 时,如果 MCP 服务器具有启动时的 SONARQUBE_TOKEN 且启用了 analysis 工具集,Cloud 和 Server 均支持 analyze_code_snippet。初始化分析器需要启动令牌(Cloud 插件可匿名下载);调用时会使用调用方的令牌,并在 Cloud 上使用为请求选定的组织,以获取质量配置文件和启用的规则。没有启动令牌时,即使设置了 SONARQUBE_FORCE_LOCAL_ANALYSIS=true,代码片段分析和分析器下载也会被禁用。无需 Vortex 授权。

选择性启用工具

MCP 客户端会在每次对话中将每个已启用工具的名称、描述和输入架构加载到代理上下文中。使用 SONARQUBE_TOOLSETS 限制此列表,可减少上下文用量和每个会话的令牌成本。

默认情况下,仅启用重要工具集。仅在需要时启用其他工具集。

环境变量描述
SONARQUBE_TOOLSETS以逗号分隔的待启用工具集列表。设置后,只有这些工具集可用。若未设置,则启用默认的重要工具集(analysis、ide、issues、projects、quality-gates、rules、duplications、measures、security-hotspots、dependency-risks、coverage、cag)。**注意:**始终启用 projects 工具集,因为其他操作需要它来查找项目密钥。Vortex 上下文工具(已弃用名称:Context Augmentation/CAG)和 Vortex 分析工具(已弃用名称:Advanced Analysis/A3S)仅在 stdio 模式下可用,并共享同一项组织授权 — 组织必须同时获得两者授权,才能使用其中任一工具。在 Cloud 上,内置分析会检查运行时选定的组织;代理上下文工具使用启动时选定的组织。在 SonarQube Server 上,当 CAG 和 A3S 中心均已获授权时,stdio 会列出 Vortex 上下文和 run_advanced_code_analysis。建议使用统一的 vortex 工具集键。已弃用的 cag 和 analysis 键仍可使用;若使用时未设置 vortex,则会发出启动警告,并在服务器说明中显示弃用提示。在 Streamable HTTP 模式下,客户端可以发送 SONARQUBE_TOOLSETS HTTP 标头,按请求进一步缩小范围,但无法启用超出服务器启动时所启用范围的工具集(请参阅下文的 Streamable HTTP transport)。
SONARQUBE_READ_ONLY设置为 true 时启用只读模式,禁用所有写入操作(例如更改问题状态)。如果同时设置 SONARQUBE_TOOLSETS,此筛选器会与其累积生效。默认值:false。在 Streamable HTTP 模式下,客户端可以发送 SONARQUBE_READ_ONLY HTTP 标头,将单个请求进一步限制为只读,但无法解除服务器级别的只读限制(请参阅下文的 Streamable HTTP transport)。
可用工具集 | 工具集 | 键 | 描述 | |-----------------------|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| | **分析** | `analysis` | 代码分析工具(通过 `analyze_code_snippet` 进行本地分析,**已弃用**,推荐使用 `analyze_file_list`/Vortex 分析) | | **IDE** | `ide` | SonarQube for IDE 桥接工具(文件分析、自动分析开关)——目前也包含在 `analysis` 中 | | **问题** | `issues` | 搜索和管理 SonarQube 问题 | | **安全热点** | `security-hotspots` | 搜索和审查安全热点 | | **项目** | `projects` | 浏览和搜索 SonarQube 项目 | | **质量门** | `quality-gates` | 访问质量门及其状态 | | **规则** | `rules` | 浏览和搜索 SonarQube 规则 | | **源代码** | `sources` | 访问源代码和 SCM 信息 | | **重复代码** | `duplications` | 查找项目中的重复代码 | | **度量** | `measures` | 获取指标和度量值(包含度量值和指标工具) | | **语言** | `languages` | 列出支持的编程语言 | | **组合** | `portfolios` | 管理组合和企业(Cloud 和 Server) | | **系统** | `system` | 系统管理工具(仅限 Server) | | **Webhooks** | `webhooks` | 管理 Webhooks | | **依赖项风险** | `dependency-risks` | 分析依赖项风险和安全问题(SCA) | | **覆盖率** | `coverage` | 测试覆盖率分析和改进工具 | | **Vortex 上下文** | `cag` | Vortex 上下文工具——仅限 stdio。**已弃用**,推荐使用 `vortex`(旧名称:Context Augmentation/CAG) | | **Vortex** | `vortex` | 统一的、**推荐使用**的工具集,以同一名称提供 Vortex 上下文和 Vortex 分析工具(仅限 stdio;Cloud 需要组织具备组合授权;Server 需要两个中心均已授权) | | **智能体就绪度** | `agentic-readiness` | 智能体就绪度评估工具(SonarQube Cloud,需要组织授权) | | **架构** | `architecture` | 读取架构、替换预期模型并管理项目指令(默认未启用) |

示例

启用分析、问题和质量门工具集(使用 Docker 和 SonarQube Cloud):

docker run --init --pull=always -i --rm \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_ORG="<org>" \
  -e SONARQUBE_TOOLSETS="analysis,issues,quality-gates" \
  sonarsource/sonarqube-mcp

注意:projects 工具集始终会自动启用,因此无需将其包含在 SONARQUBE_TOOLSETS 中。

启用只读模式(使用 Docker 和 SonarQube Cloud):

docker run --init --pull=always -i --rm \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_ORG="<org>" \
  -e SONARQUBE_READ_ONLY="true" \
  sonarsource/sonarqube-mcp

SonarQube Cloud

对于 stdio,请配置以下环境变量:

环境变量描述必需
SONARQUBE_TOKEN您的 SonarQube Cloud 令牌是
SONARQUBE_ORG可选的固定 SonarQube Cloud 组织键否
SONARQUBE_URL自定义 SonarQube Cloud URL(默认为 https://sonarcloud.io)。用于 SonarQube Cloud US:https://sonarqube.us否

示例:

  • SonarQube Cloud:只需设置 SONARQUBE_TOKEN。设置 SONARQUBE_ORG 后即可固定组织。
  • SonarQube Cloud US:设置 SONARQUBE_TOKEN 和 SONARQUBE_URL=https://sonarqube.us;SONARQUBE_ORG 为可选项。

SonarQube Server

环境变量描述必需
SONARQUBE_TOKEN您的 SonarQube Server USER 令牌是
SONARQUBE_URL您的 SonarQube Server URL是

**版本要求:**需要 SonarQube Server 2025.1(SQS)或 25.1(SonarQube Community Build)或更高版本。启动时,MCP 服务器会读取所连接实例的版本;如果版本过旧,则会报错退出(例如,不支持旧版 9.x/10.x Server 版本和 Community Build 24.x)。SonarQube Cloud 不受此检查限制。

⚠️ 连接 SonarQube Server 需要使用 USER 类型的令牌;如果使用项目令牌或全局令牌,将无法正常工作。

💡 配置提示(stdio 模式):未指定 URL 的令牌默认连接 SonarQube Cloud。设置 SONARQUBE_URL 可连接 SonarQube Server 或其他 Cloud 区域。设置 SONARQUBE_ORG 后即可固定 Cloud 组织。

在 stdio 中,设置 SONARQUBE_ORG 可固定 Cloud 组织。工具 organization 的参数会从架构中省略并被拒绝;当设置 SONARQUBE_PROJECT_KEY 时,projectKey 也会如此。

未设置 SONARQUBE_ORG 时,智能体可以调用 list_organizations,以发现用户帐户可访问的组织键、名称、ID 和 UUID,然后在支持组织的工具中将键作为可选的 organization 参数传入。stdio 会将唯一检测到的组织保留为默认组织;如果没有检测到组织或检测到多个组织,则默认组织未解析。工具参数仅适用于该次调用,不会更改检测到的默认组织。代码片段配置文件和规则查询会使用该次调用所选的组织。

对于 HTTP/HTTPS 令牌请求,服务器级别的 SONARQUBE_ORG 仍受支持以保持兼容性,但已弃用,并会记录启动警告。它会为每个请求固定组织,并拒绝客户端组织标头和工具 organization 参数。如果未配置服务器组织,可选的客户端 SONARQUBE_ORG 标头会为该请求固定组织,并禁止使用工具 organization 参数。未提供标头时,请使用工具参数。缺少所有组织信息时,需要组织的工具会提供发现组织的指引。组织发现以及 API 仅使用资源标识符的工具不需要组织参数。支持组织的问题搜索和依赖项风险授权检查会使用所选组织。配置 OAuth 时,不允许使用服务器级别的 SONARQUBE_ORG。OAuth 请求也会拒绝组织标头;请通过工具参数选择组织。

Vortex 上下文工具使用已配置或在启动时唯一检测到的组织。运行时组织参数不会重新配置代理上下文引擎;如果启动时组织未解析,则会跳过该代理。内置的 run_advanced_code_analysis 工具会在每次调用时检查所选组织是否具备 Vortex 组合授权。

传输模式

MCP 规范 定义了两种传输机制:Stdio 和 Streamable HTTP。SonarQube MCP Server 同时支持这两种机制:

MCP 传输服务器模式典型用途
Stdio默认(无 SONARQUBE_TRANSPORT)启动服务器作为子进程的本地 MCP 客户端(Cursor、Claude Code、VS Code 等)
Streamable HTTPSONARQUBE_TRANSPORT=http 或 https远程或多用户部署;客户端通过 HTTP(S) 连接到 /mcp(例如,使用自托管服务器 URL 的 Windsurf)

**注意:**Streamable HTTP 是当前的 MCP 网络传输方式。早期 MCP 版本中的旧版仅支持 SSE 的 HTTP 传输已弃用且不受支持。

1. Stdio(默认 - 推荐用于本地开发)

推荐用于本地开发和单用户设置,大多数 MCP 客户端均使用此模式。

示例 - 使用 Docker 和 SonarQube Cloud:

{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_ORG", "sonarsource/sonarqube-mcp"],
      "env": {
        "SONARQUBE_TOKEN": "<your-token>",
        "SONARQUBE_ORG": "<your-org>"
      }
    }
  }
}

2. HTTP(Streamable HTTP)

未加密的 Streamable HTTP 传输。多用户部署请改用 HTTPS。

⚠️ **不推荐:**本地开发请使用 Stdio;多用户生产部署请使用 HTTPS(Streamable HTTP)。

环境变量描述默认值
SONARQUBE_TRANSPORT设置为 http 以启用 Streamable HTTP 传输未设置(stdio)
SONARQUBE_HTTP_PORT端口号(1024-65535),或使用 0 由操作系统分配端口8080
SONARQUBE_HTTP_HOST绑定的主机(出于安全考虑,默认为 localhost)127.0.0.1
SONARQUBE_HTTP_ALLOWED_ORIGINS允许用于 CORS 的逗号分隔浏览器来源列表(例如 https://my-app.example.com)未设置
SONARQUBE_MCP_IN_CONTAINER在容器内运行时设置为 true。官方 Docker 镜像会自动设置此项;使用其他 OCI 运行时(Podman、Kubernetes、Nomad 等)时,请自行设置。false
注意: HTTP/HTTPS 通过 Authorization: Bearer <token> 接受用户的 SonarQube 令牌。Sonar 托管的 Cloud 服务也支持 OAuth。对于 SonarQube Cloud 令牌请求,组织按以下方式确定:
  • SONARQUBE_ORG 是可选的请求标头,用于为该请求固定组织。已弃用的服务器级配置会为所有请求固定组织,并拒绝客户端组织标头和工具组织参数。
  • 如果服务器配置和请求标头均未固定组织,支持组织的工具会接受可选的 organization 参数。如果组织已固定,则拒绝提供此参数。
  • 如果没有默认组织,代理可以仅使用令牌调用 list_organizations,然后将选定的键传递给后续工具。

客户端还可以通过提供 SONARQUBE_TOOLSETS 和/或 SONARQUBE_READ_ONLY 标头,按请求缩小可见工具的范围;这些标头会在服务器级配置的基础上进一步筛选——只能缩小范围,不能扩大范围。 请求之间不会保留会话状态。

已弃用: 对于 SonarQube 令牌,仍接受 SONARQUBE_TOKEN 请求标头以保持向后兼容,但将在未来版本中移除。请迁移到 Authorization: Bearer <token>。

3. HTTPS(基于 TLS 的 Streamable HTTP)(推荐用于多用户生产部署)

使用 TLS 加密的安全 Streamable HTTP 传输。需要 SSL 证书。

✅ 生产环境推荐: 通过 Streamable HTTP 为多个用户部署 MCP 服务器时,请使用 HTTPS。出于安全考虑,服务器默认绑定到 127.0.0.1(localhost)。

环境变量说明默认值
SONARQUBE_TRANSPORT设置为 https 以启用基于 TLS 的 Streamable HTTP 传输未设置(stdio)
SONARQUBE_HTTP_PORT端口号(HTTPS 通常为 8443),或 0,表示由操作系统分配端口8080
SONARQUBE_HTTP_HOST要绑定的主机(出于安全考虑,默认为 localhost)127.0.0.1
SONARQUBE_HTTP_ALLOWED_ORIGINS允许用于 CORS 的浏览器来源,以逗号分隔(例如 https://my-app.example.com)未设置
SONARQUBE_MCP_IN_CONTAINER在容器内运行时设置为 true。官方 Docker 镜像会自动设置此项;使用其他 OCI 运行时(Podman、Kubernetes、Nomad 等)时,请自行设置。false

SSL 证书配置(可选):

环境变量说明默认值
SONARQUBE_HTTPS_KEYSTORE_PATH密钥库文件的路径(.p12 或 .jks)/etc/ssl/mcp/keystore.p12
SONARQUBE_HTTPS_KEYSTORE_PASSWORD密钥库密码sonarlint
SONARQUBE_HTTPS_KEYSTORE_TYPE密钥库类型(PKCS12 或 JKS)PKCS12

示例 - 使用 SonarQube Cloud 的 Docker:

注意: 在容器中运行时,设置 SONARQUBE_HTTP_HOST=0.0.0.0,使容器监听所有接口并让运行时的端口映射生效;同时设置 SONARQUBE_MCP_IN_CONTAINER=true,告知服务器其运行在容器内。官方 Docker 镜像会自动设置后者;使用其他 OCI 运行时(Podman、Kubernetes、Nomad 等)时,请自行设置。主机侧的端口标志控制谁可以从容器外部访问服务器。SONARQUBE_HTTP_HOST=0.0.0.0 仅控制服务器在容器内监听的位置——默认情况下,浏览器 CORS 仍允许 localhost 来源。

对于在本机本地运行的服务器(仅可通过 localhost 访问):

docker run --init --pull=always -p 127.0.0.1:8443:8443 \
  -v $(pwd)/keystore.p12:/etc/ssl/mcp/keystore.p12:ro \
  -e SONARQUBE_TRANSPORT=https \
  -e SONARQUBE_HTTP_HOST=0.0.0.0 \
  -e SONARQUBE_HTTP_PORT=8443 \
  sonarsource/sonarqube-mcp

对于可从网络访问的服务器(远程部署):

docker run --init --pull=always -p 8443:8443 \
  -v $(pwd)/keystore.p12:/etc/ssl/mcp/keystore.p12:ro \
  -e SONARQUBE_TRANSPORT=https \
  -e SONARQUBE_HTTP_HOST=0.0.0.0 \
  -e SONARQUBE_HTTP_PORT=8443 \
  sonarsource/sonarqube-mcp

客户端配置(SonarQube Cloud):

对于 SonarQube 令牌请求,可在客户端标头中设置 SONARQUBE_ORG,以固定请求的组织;也可以省略该项,通过工具参数选择组织。

{
  "mcpServers": {
    "sonarqube-https": {
      "url": "https://your-server:8443/mcp",
      "headers": {
        "Authorization": "Bearer <your-token>",
        "SONARQUBE_TOOLSETS": "issues,quality-gates",
        "SONARQUBE_READ_ONLY": "true"
      }
    }
  }
}

客户端配置(SonarQube Server):

{
  "mcpServers": {
    "sonarqube-https": {
      "url": "https://your-server:8443/mcp",
      "headers": {
        "Authorization": "Bearer <your-token>",
        "SONARQUBE_TOOLSETS": "issues,quality-gates",
        "SONARQUBE_READ_ONLY": "true"
      }
    }
  }
}

注意: SONARQUBE_TOOLSETS 和 SONARQUBE_READ_ONLY 是可选的逐请求标头,可针对特定请求缩小服务器级工具集的范围。它们只能缩小范围——不能启用工具集,也不能解除服务器启动时设置的限制。

注意: 本地开发请改用 Stdio 传输(默认方式)。HTTPS Streamable HTTP 适用于配备适当 SSL 证书的多用户生产部署。

托管的 SonarQube Cloud OAuth

OAuth 支持面向 Sonar 托管的 SonarQube Cloud MCP 服务。请使用支持 OAuth 的 MCP 客户端,并在提示时登录;客户端配置中无需设置 OAuth 服务器。现有的 SonarQube 令牌客户端仍受支持。

mcp:tools:read 和 mcp:tools:write 作用域分别控制对读取工具和写入工具的访问,具体取决于你在 Cloud 中的权限。使用 list_organizations 和工具 organization 参数选择组织。

自托管部署继续使用 SonarQube 令牌;目前尚不支持 SonarQube Server 的 OAuth。

服务端点

在 Streamable HTTP 模式(http 或 https)下运行时,除了位于 /mcp 的 MCP 端点外,服务器还会公开几个无需身份验证的服务端点。这些端点供服务间使用(监控、编排、客户端兼容性检查),无需提供 Authorization 标头。

端点方法说明示例响应
/healthGET存活探针。服务器开始接受请求后,会返回 200 OK,响应正文为空。(空正文)
/infoGET以 JSON 格式返回 MCP 服务器版本。可用于验证已部署的服务器版本。{"version":"1.16.0"}

使用 Stdio 传输时,这些端点不可用。

自定义证书

如果你的 SonarQube Server 使用自签名证书或来自私有证书颁发机构(CA)的证书,可以将自定义证书添加到容器中,系统会自动安装这些证书。

配置

使用卷挂载

运行容器时,挂载包含证书的目录:

docker run --init --pull=always -i --rm \
  -v /path/to/your/certificates/:/usr/local/share/ca-certificates/:ro \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_URL="<url>" \
  sonarsource/sonarqube-mcp

支持的证书格式

容器支持以下证书格式:

  • .crt 文件(PEM 或 DER 编码)
  • .pem 文件(PEM 编码)

配置带证书的 MCP

使用自定义证书时,可以修改 MCP 配置以挂载证书:

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-v",
      "/path/to/your/certificates/:/usr/local/share/ca-certificates/:ro",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

注意: 不是在容器中运行,而是通过 JAR运行服务器?上面的卷挂载会将证书安装到容器的操作系统信任存储中,服务器也会读取该存储。如果无法使用操作系统信任存储——尤其是在不会查询该存储的 Windows 上——请将 JVM 指向包含 CA 证书的 Java 信任库:-Djavax.net.ssl.trustStore=/path/to/truststore.p12 -Djavax.net.ssl.trustStoreType=PKCS12 -Djavax.net.ssl.trustStorePassword=<passphrase>。该证书会添加到默认受信任证书之上。

代理

SonarQube MCP Server 通过标准 Java 代理系统属性支持 HTTP 和 SOCKS5 代理。

配置

HTTP/HTTPS 代理

可以使用 Java 系统属性配置代理设置。这些属性可以设为环境变量,也可以作为 JVM 参数传入。

常用代理属性:

属性说明示例
http.proxyHostHTTP 代理主机名proxy.example.com
http.proxyPortHTTP 代理端口8080
https.proxyHostHTTPS 代理主机名proxy.example.com
https.proxyPortHTTPS 代理端口8443
http.nonProxyHosts绕过代理的主机(以竖线分隔)localhost|127.0.0.1|*.internal.com

HTTP/HTTPS 代理身份验证:

属性说明示例
http.proxyUserHTTP 代理用户名myuser
http.proxyPasswordHTTP 代理密码mypassword
https.proxyUserHTTPS 代理用户名myuser
https.proxyPasswordHTTPS 代理密码mypassword

SOCKS5 代理

支持 SOCKS5 代理。

属性说明默认值示例
socksProxyHostSOCKS5 代理主机名—localhost
socksProxyPortSOCKS5 代理端口10801080
java.net.socks.usernameSOCKS5 用户名(需要身份验证时)—myuser
java.net.socks.passwordSOCKS5 密码(需要身份验证时)—mypassword

客户端证书(双向 TLS)

如果你的 SonarQube Server 要求客户端在 TLS 握手期间提供证书(双向 TLS),可以将 PKCS12 密钥库挂载到容器中,并通过 JAVA_OPTS 传入其位置。

配置

使用 PKCS12 密钥库

将 .p12 或 .pfx 文件挂载到容器中,并设置 JAVA_OPTS 环境变量以指定密钥库属性:

docker run --init --pull=always -i --rm \
  -v /path/to/client.p12:/etc/ssl/mcp/client.p12:ro \
  -e JAVA_OPTS="-Djavax.net.ssl.keyStore=/etc/ssl/mcp/client.p12 -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=<passphrase>" \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_URL="<url>" \
  sonarsource/sonarqube-mcp

注意: 容器进程必须能够读取证书文件。如有需要,请检查并修正权限:

ls -la /path/to/client.p12       # 查找 -rw-r--r-- (644) 或更宽松的权限
chmod 644 /path/to/client.p12    # 授予容器用户读取权限

如果密钥库没有密码短语,请省略 -Djavax.net.ssl.keyStorePassword。请注意,此处使用的密码短语可通过 docker inspect 或进程列表查看。

配置带客户端证书的 MCP

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run", "--init", "--pull=always", "-i", "--rm",
      "-v", "/path/to/client.p12:/etc/ssl/mcp/client.p12:ro",
      "-e", "JAVA_OPTS",
      "-e", "SONARQUBE_TOKEN",
      "-e", "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "JAVA_OPTS": "-Djavax.net.ssl.keyStore=/etc/ssl/mcp/client.p12 -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=<passphrase>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

在独立 JAR 中使用 PKCS12 密钥库

通过 JAR运行服务器时,请在 -jar 之前将密钥库属性作为 JVM 参数传入:

java \
  -Djavax.net.ssl.keyStore=/path/to/client.p12 \
  -Djavax.net.ssl.keyStoreType=PKCS12 \
  -Djavax.net.ssl.keyStorePassword=<passphrase> \
  -jar <path_to_sonarqube_mcp_server_jar>

如果密钥库没有密码短语,请省略 -Djavax.net.ssl.keyStorePassword。

配置带客户端证书的 MCP(JAR)

{
  "sonarqube": {
    "command": "java",
    "args": [
      "-Djavax.net.ssl.keyStore=/path/to/client.p12",
      "-Djavax.net.ssl.keyStoreType=PKCS12",
      "-Djavax.net.ssl.keyStorePassword=<passphrase>",
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

注意: PEM 证书和密钥文件(分别为 .crt/.key 文件)必须先转换为 PKCS12 格式。使用 openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 进行转换。

工具

分析

  • analyze_code_snippet - 使用 SonarQube 分析器分析文件内容,以识别代码质量和安全问题。为确保准确性,始终分析完整的文件内容。也可以选择将结果筛选为特定代码片段。

    已弃用: analyze_code_snippet 将在未来版本中移除。连接 SonarQube for IDE 以使用 analyze_file_list,或为组织启用 Vortex 分析以使用 run_advanced_code_analysis(见下文)。

    用法:

    • 挂载工作区时(推荐):传入 filePath(相对于项目的路径)——服务器会直接读取文件,避免文件内容进入代理上下文窗口
    • 未挂载工作区时:传入完整的 fileContent 以分析整个文件(报告所有问题)
    • 添加可选的 codeSnippet 以筛选结果——仅报告代码片段中的问题(自动检测代码片段位置)

    参数:

    • organization - SonarQube Cloud 组织密钥 - 可选字符串,仅限 Cloud
    • projectKey - SonarQube 项目密钥 - 必需字符串 (定义 SONARQUBE_PROJECT_KEY 时忽略)
    • filePath - 要分析文件的项目相对路径(例如,src/main/java/MyClass.java)。当工作区挂载到 /app/mcp-workspace 时使用 - 字符串
    • fileContent - 作为字符串的完整文件内容。未挂载工作区时必需 - 字符串
    • codeSnippet - 用于筛选问题的代码片段(必须与 fileContent 中的内容匹配) - 字符串
    • language - 代码语言(例如,'java'、'python'、'js'、'ts'、'tsx'、'jsx') - 字符串
    • scope - 文件范围:MAIN 或 TEST(默认值:MAIN) - 字符串

    支持的语言: Java、Kotlin、Python、Ruby、Go、JavaScript(js、jsx)、TypeScript(ts、tsx)、JSP、PHP、XML、HTML、CSS、CloudFormation、Kubernetes、Terraform、Azure Resource Manager、Ansible、Docker、Secrets detection

启用与 SonarQube for IDE 的集成时:(这两个工具同时标记在 analysis 和 ide 工具集中)

  • analyze_file_list - 使用 SonarQube for IDE 分析当前工作目录中的文件。此工具连接到正在运行的 SonarQube for IDE 实例,对文件列表执行代码质量分析。

    • file_absolute_paths - 要分析的绝对文件路径列表 - 必需字符串[]
  • toggle_automatic_analysis - 启用或禁用 SonarQube for IDE 自动分析。启用后,SonarQube for IDE 会在工作目录中的文件被修改时自动分析这些文件。禁用后,将关闭自动分析。

    • enabled - 启用或禁用自动分析 - 必需布尔值

在 SonarQube Server 上,当 CAG 和 A3S hubs 均已授权时,stdio 会列出 Vortex 上下文工具和 run_advanced_code_analysis。

Vortex 分析可用时:

要求工作区挂载到 /app/mcp-workspace

  • run_advanced_code_analysis - 对单个文件运行 Vortex 分析。SonarQube Server 使用 nil UUID 占位符。
    • organization - SonarQube Cloud 组织密钥 - 可选字符串,仅限 Cloud
    • projectKey - 项目密钥 - 必需字符串 (定义 SONARQUBE_PROJECT_KEY 时忽略)
    • branch - 用于检索最新分析上下文的分支名称 - 必需字符串
    • filePath - 要分析文件的项目相对路径(例如,src/main/java/MyClass.java)。- 必需字符串
    • fileScope - 定义文件所属范围:'MAIN' 或 'TEST'(默认值:MAIN) - 字符串

覆盖率

  • search_files_by_coverage - 按覆盖率升序搜索项目中的文件(覆盖率最低的文件优先)。此工具可帮助找出需要改进测试覆盖率的文件。

    • projectKey - 要搜索的项目密钥 - 必需字符串 (定义 SONARQUBE_PROJECT_KEY 时忽略)
    • branch - 可选的基于分支分析的分支名称。使用 list_branches 查找有效名称 - 字符串
    • pullRequest - 可选的拉取请求密钥/ID。使用 list_pull_requests 查找有效密钥 - 字符串
    • maxCoverage - 最大覆盖率阈值(0-100)。仅返回覆盖率 <= 此值的文件 - 数字
    • pageIndex - 页码索引(从 1 开始,默认值:1) - 数字
    • pageSize - 每页条目数(默认值:100,最大值:500) - 数字
  • get_file_coverage_details - 获取特定文件逐行的覆盖率信息,包括哪些具体行未覆盖,以及哪些行包含未完全覆盖的分支。此工具可帮助准确找出需要添加测试覆盖率的位置。在通过 search_files_by_coverage 找到覆盖率较低的文件后使用。

    • key - 文件密钥(例如 my_project:src/foo/Bar.java) - 必需字符串
    • branch - 可选的基于分支分析的分支名称。使用 list_branches 查找有效名称 - 字符串
    • pullRequest - 可选的拉取请求密钥/ID。使用 list_pull_requests 查找有效密钥 - 字符串
    • from - 要分析的起始行(从 1 开始,默认值:1) - 数字
    • to - 要分析的结束行(包含)。如果未指定,则返回所有行 - 数字

依赖项风险

注意:依赖项风险需要 SonarQube Advanced Security。在 SonarQube Server 上,需要 2025.4 Enterprise 或更高版本。

  • search_dependency_risks - 搜索 SonarQube 项目的软件成分分析问题(依赖项风险),并关联分析项目、应用程序或项目组合中出现的版本。
    • organization - SonarQube Cloud 组织密钥 - 可选字符串,仅限 Cloud
    • projectKey - 项目密钥 - 必需字符串 (定义 SONARQUBE_PROJECT_KEY 时忽略)
    • branch - 可选的基于分支分析的分支名称。使用 list_branches 查找有效名称 - 字符串
    • pullRequest - 可选的拉取请求密钥/ID。使用 list_pull_requests 查找有效密钥 - 字符串
    • pageIndex - 可选的页码索引(从 1 开始,默认值:1) - 整数
    • pageSize - 可选的每页条目数。必须大于 0 且小于或等于 500(默认值:100) - 整数

企业

注意:企业仅在连接到 SonarQube Cloud 时可用。

  • list_enterprises - 列出你有权访问的 SonarQube Cloud 企业。使用此工具查找可用于其他工具的企业 ID。
    • enterpriseKey - 用于筛选结果的可选企业密钥 - 字符串

问题

  • change_sonar_issue_status - 将 SonarQube 问题的状态更改为 "accept"、"falsepositive" 或 "reopen"。

    • key - 问题密钥 - 必需字符串
    • status - 问题的新状态 - 必需枚举 {"accept", "falsepositive", "reopen"}
    • comment - 解释状态更改原因的可选评论 - 字符串
  • search_sonar_issues_in_projects - 搜索我所在组织的项目中的 SonarQube 问题。

    • organization - SonarQube Cloud 组织密钥 - 可选字符串,仅限 Cloud
    • projectKeys - 可选的 SonarQube 项目密钥列表 - 字符串[]
    • branch - 可选的基于分支分析的分支名称。使用 list_branches 查找有效名称 - 字符串
    • pullRequest - 可选的拉取请求密钥/ID。使用 list_pull_requests 查找有效密钥 - 字符串
    • severities - 可选的严重性筛选列表。可能的值:INFO、LOW、MEDIUM、HIGH、BLOCKER - 字符串[]
    • impactSoftwareQualities - 可选的软件质量筛选列表。可能的值:MAINTAINABILITY、RELIABILITY、SECURITY - 字符串[]
    • issueStatuses - 可选的问题状态筛选列表。可能的值:OPEN、CONFIRMED、FALSE_POSITIVE、ACCEPTED、FIXED、IN_SANDBOX - 字符串[]
    • tags - 可选的问题标签筛选列表。标签均为小写 - 字符串[]
    • inNewCodePeriod - 仅返回新代码周期内的问题。projectKeys 和 files 中必须恰好有一项 - 布尔值
    • issueKey - 用于获取特定问题的可选问题密钥 - 字符串
    • pageIndex - 可选的页码索引(从 1 开始,默认值:1) - 整数
    • pageSize - 可选的每页条目数。必须大于 0 且小于或等于 500(默认值:100) - 整数

安全热点

  • search_security_hotspots - 搜索 SonarQube 项目中的安全热点。

    • projectKey - 项目或应用程序密钥 - 必需字符串 (定义 SONARQUBE_PROJECT_KEY 时忽略)
    • hotspotKeys - 要检索的特定安全热点密钥列表,以逗号分隔 - 字符串[]
    • branch - 可选的基于分支分析的分支名称。使用 list_branches 查找有效名称 - 字符串
    • pullRequest - 可选的拉取请求密钥/ID。使用 list_pull_requests 查找有效密钥 - 字符串
    • files - 可选的文件路径筛选列表 - 字符串[]
    • status - 可选的状态筛选:TO_REVIEW、REVIEWED - 字符串
    • resolution - 可选的解决方式筛选:FIXED、SAFE、ACKNOWLEDGED - 字符串
    • sinceLeakPeriod - 仅筛选泄漏期(新代码)以来创建的热点 - 布尔值
    • onlyMine - 仅显示分配给我的热点 - 布尔值
    • pageIndex - 可选的页码索引(从 1 开始,默认值:1) - 整数
    • pageSize - 可选的每页条目数。必须大于 0 且小于或等于 500(默认值:100) - 整数
  • show_security_hotspot - 获取特定安全热点的详细信息,包括规则详情、代码上下文、数据流和评论。

    • hotspotKey - 安全热点密钥 - 必需字符串
  • change_security_hotspot_status - 通过更改状态来审查安全热点。将状态标记为 REVIEWED 时,必须指定解决方式(FIXED、SAFE 或 ACKNOWLEDGED)。

    • hotspotKey - 安全热点密钥 - 必需字符串
    • status - 新状态 - 必需枚举 {"TO_REVIEW", "REVIEWED"}
    • resolution - 状态为 REVIEWED 时的解决方式 - 枚举 {"FIXED", "SAFE", "ACKNOWLEDGED"}
    • comment - 可选的审查评论 - 字符串

语言

  • list_languages - 列出此 SonarQube 实例支持的所有编程语言。
    • q - 用于匹配语言密钥/名称的可选模式 - 字符串

度量值

  • get_component_measures - 获取组件(项目、目录、文件)的 SonarQube 度量值。
    • projectKey - 项目密钥 - 未配置 SONARQUBE_PROJECT_KEY 时必需的字符串
    • branch - 可选的基于分支分析的分支名称。使用 list_branches 查找有效名称 - 字符串
    • metricKeys - 要检索的可选度量值密钥(例如 ncloc、complexity、violations、coverage) - 字符串[]
    • pullRequest - 可选的拉取请求密钥/ID。使用 list_pull_requests 查找有效密钥 - 字符串

指标

  • search_metrics - 搜索 SonarQube 指标。
    • pageIndex - 可选的页码索引(从 1 开始,默认值:1) - 整数
    • pageSize - 可选的每页条目数。必须大于 0 且小于或等于 500(默认值:100) - 整数

项目组合

  • list_portfolios - 列出 SonarQube 中可用的企业项目组合,并提供筛选和分页选项。

    对于 SonarQube Server:

    • q - 按名称或密钥筛选项目组合的可选搜索查询 - 字符串
    • favorite - 如果为 true,则仅返回收藏的项目组合 - 布尔值
    • pageIndex - 可选的页码(从 1 开始,默认值:1) - 整数
    • pageSize - 可选的每页条目数,最大值为 500(默认值:100) - 整数 对于 SonarQube Cloud:
    • enterpriseId - Enterprise uuid。仅当提供值为 true 的 'favorite' 参数时,才可省略 - String
    • q - 可选搜索查询,用于按名称筛选 portfolios - String
    • favorite - 如果省略 'enterpriseId' 参数,则必须为 true。若为 true,则仅返回当前登录用户收藏的 portfolios。'draft' 为 true 时不能设为 true - Boolean
    • draft - 若为 true,则仅返回当前登录用户创建的草稿。'favorite' 为 true 时不能设为 true - Boolean
    • pageIndex - 可选的待获取页面索引(默认值:1)- Integer
    • pageSize - 可选的待获取页面大小(默认值:50)- Integer

项目

  • list_organizations - 列出用户所属的 SonarQube Cloud 组织,包括键、名称、ID 和 UUID。后续工具中使用返回的键作为 organization。

  • search_my_sonarqube_projects - 查找 SonarQube 项目。响应采用分页形式。

    • organization - SonarQube Cloud 组织键 - 可选 String,仅限 Cloud
    • pageIndex - 可选的从 1 开始的页索引(默认值:1)- Integer
    • pageSize - 可选的页面大小。必须大于 0 且小于或等于 500(默认值:500)- Integer
    • q - 可选搜索查询,用于按项目名称(部分匹配)或键(精确匹配)筛选项目 - String
  • list_branches - 列出项目中已分析的分支。

    • SonarQube Cloud:返回长期(LONG)和短期(SHORT)分支,以及 type 和 mergeBranch 字段。可选的 branchTypes 筛选条件:ALL(默认值)、LONG 或 SHORT。
    • SonarQube Server:返回所有已分析的分支(名称、质量门状态、分析日期)。不支持 type、mergeBranch 或 branchTypes 筛选条件。
    • 在其他工具中使用返回的分支名称作为 branch 参数。对于拉取请求分析,请改用 list_pull_requests。
    • projectKey - 项目键(例如 my_project)- 必需 String (定义了 SONARQUBE_PROJECT_KEY 时忽略)
    • branchTypes - (仅限 SonarQube Cloud) 可选筛选条件:ALL(默认值)、LONG 或 SHORT - Enum {"ALL", "LONG", "SHORT"}
  • list_pull_requests - 列出项目的所有拉取请求。使用此工具可查找用于 PR 装饰分析(覆盖率、问题、质量门)的拉取请求。返回的拉取请求键/ID 可用于其他工具。对于不涉及拉取请求的基于分支的分析,请改用 list_branches。

    • projectKey - 项目键(例如 my_project)- 必需 String (定义了 SONARQUBE_PROJECT_KEY 时忽略)

质量门

  • get_project_quality_gate_status - 获取 SonarQube 项目的质量门状态。

    • analysisId - 可选分析 ID - String
    • branch - 基于分支的分析所用的可选分支名称。使用 list_branches 查找有效名称 - String
    • projectId - 可选项目 ID - String
    • projectKey - 可选项目键 - String
    • pullRequest - 可选拉取请求键/ID。使用 list_pull_requests 查找有效键 - String
  • list_quality_gates - 列出我的 SonarQube 中的所有质量门。

    • organization - SonarQube Cloud 组织键 - 可选 String,仅限 Cloud

规则

  • show_rule - 显示 SonarQube 规则的详细信息。
    • organization - SonarQube Cloud 组织键 - 可选 String,仅限 Cloud
    • key - 规则键 - 必需 String

重复代码

  • search_duplicated_files - 搜索 SonarQube 项目中存在代码重复的文件。默认情况下,会自动获取所有页面中的全部重复文件(最多 10,000 个文件)。仅返回存在重复代码的文件。

    • projectKey - 项目键 - 必需 String (定义了 SONARQUBE_PROJECT_KEY 时忽略)
    • branch - 基于分支的分析所用的可选分支名称。使用 list_branches 查找有效名称 - String
    • pullRequest - 可选拉取请求键/ID。使用 list_pull_requests 查找有效键 - String
    • pageSize - 手动分页时每页的可选结果数(最多 500)。若未指定,则自动获取所有重复文件 - Integer
    • pageIndex - 手动分页时的可选页码(从 1 开始)。若未指定,则自动获取所有重复文件 - Integer
  • get_duplications - 获取文件的重复代码信息。需要对该文件所属项目具有 Browse 权限。

    • key - 文件键 - 必需 String
    • branch - 基于分支的分析所用的可选分支名称。使用 list_branches 查找有效名称 - String
    • pullRequest - 可选拉取请求键/ID。使用 list_pull_requests 查找有效键 - String

源代码

  • get_raw_source - 从 SonarQube 获取原始文本格式的源代码。需要对该文件具有 'See Source Code' 权限。

    • key - 文件键 - 必需 String
    • branch - 基于分支的分析所用的可选分支名称。使用 list_branches 查找有效名称 - String
    • pullRequest - 可选拉取请求键/ID。使用 list_pull_requests 查找有效键 - String
  • get_scm_info - 获取 SonarQube 源文件的 SCM 信息。需要对该文件所属项目具有 See Source Code 权限。

    • key - 文件键 - 必需 String
    • commits_by_line - 值为 false 时按 SCM 提交对行分组,否则显示每行对应的提交 - String
    • from - 要返回的起始行号。从 1 开始 - Number
    • to - 要返回的结束行号(包含)- Number

系统

注意:仅在连接到 SonarQube Server 时才能使用系统工具。

  • get_system_health - 获取 SonarQube Server 实例的运行状况。返回 GREEN(完全正常运行)、YELLOW(可用但需要关注)或 RED(未运行)。

  • get_system_info - 获取 SonarQube Server 系统配置的详细信息,包括 JVM 状态、数据库、搜索索引和设置。需要 'Administer' 权限。

  • get_system_logs - 以纯文本格式获取 SonarQube Server 系统日志。需要系统管理权限。

    • name - 要获取的日志名称(可选)。可能的值:access、app、ce、deprecation、es、web。默认值:app - String
  • ping_system - Ping SonarQube Server 系统以检查其是否正常运行。以纯文本形式返回 'pong'。

  • get_system_status - 获取 SonarQube Server 的状态信息。返回状态(STARTING、UP、DOWN、RESTARTING、DB_MIGRATION_NEEDED、DB_MIGRATION_RUNNING)、版本和 ID。

Webhook

  • create_webhook - 为 SonarQube 组织或项目创建新的 webhook。需要对指定项目具有 'Administer' 权限,或具有全局 'Administer' 权限。

    • organization - SonarQube Cloud 组织键 - 可选 String,仅限 Cloud
    • name - Webhook 名称 - 必需 String
    • url - Webhook URL - 必需 String
    • projectKey - 项目专用 webhook 的可选项目键 - String
    • secret - 用于保护 webhook 负载的可选 webhook 密钥 - String
  • list_webhooks - 列出 SonarQube 组织或项目的所有 webhook。需要对指定项目具有 'Administer' 权限,或具有全局 'Administer' 权限。

    • organization - SonarQube Cloud 组织键 - 可选 String,仅限 Cloud
    • projectKey - 用于列出项目专用 webhook 的可选项目键 - String

上下文增强

架构工具
  • search_by_signature_patterns - 使用正则表达式模式,根据声明签名查找代码元素(类、方法、接口等)。

    • include_code_regex_list - 用于匹配签名的正则表达式模式列表 - 必需 String[]
    • exclude_code_regex_list - 用于从结果中排除内容的正则表达式模式列表 - String[]
    • include_glob - 文件筛选 glob 模式(例如 *.java)- String
    • exclude_glob - 文件排除 glob 模式 - String
    • fields - 要包含在响应中的字段,以逗号分隔 - String
    • limit - 要返回的最大结果数(默认值:10)- Integer
    • regex_lists_operator - 多个模式的组合方式:OR(默认值)或 AND - String
  • search_by_body_patterns - 使用正则表达式模式,根据实现代码体查找代码元素。适用于定位 API 或模式的实际使用位置。

    • include_code_regex_list - 用于匹配代码体的正则表达式模式列表 - 必需 String[]
    • exclude_code_regex_list - 用于从结果中排除内容的正则表达式模式列表 - String[]
    • include_glob - 文件筛选 glob 模式 - String
    • exclude_glob - 文件排除 glob 模式 - String
    • fields - 要包含在响应中的字段,以逗号分隔 - String
    • limit - 要返回的最大结果数(默认值:10)- Integer
    • regex_lists_operator - 多个模式的组合方式:OR(默认值)或 AND - String
  • get_upstream_call_flow - 跟踪哪些函数调用了指定函数。适用于查找所有调用方和入口点,并了解签名变更会造成哪些影响。

    • fqn - 函数的完全限定名称 - 必需 String
    • depth - 调用链深度(0=仅函数本身,1=直接调用方,依此类推)- Integer
    • fields - 要包含在响应中的字段,以逗号分隔 - String
  • get_downstream_call_flow - 跟踪指定函数调用了哪些函数。适用于影响分析和理解执行流程。

    • fqn - 函数的完全限定名称 - 必需 String
    • depth - 调用链深度(0=仅函数本身,1=直接被调用函数,依此类推)- Integer
    • fields - 要包含在响应中的字段,以逗号分隔 - String
  • get_source_code - 根据代码元素的完全限定名称,获取其完整源代码(签名和代码体)。

    • fqn - 元素的完全限定名称 - 必需 String
    • fields - 要包含在响应中的字段,以逗号分隔 - String
  • get_type_hierarchy - 获取类类型结构(类、接口、枚举、记录、异常、结构体)的完整继承层次结构。对于理解继承树和重构至关重要。

    • fqn - 类类型结构的完全限定名称 - 必需 String
    • fields - 要包含在响应中的字段,以逗号分隔 - String
  • get_references - 获取类或模块的直接入站和出站代码引用。仅返回直接引用(非传递引用)。

    • fqn - 类或模块的完全限定名称 - 必需 String
    • fields - 要包含在响应中的字段,以逗号分隔 - String
  • get_current_architecture - 获取按路径前缀和深度筛选的分层架构图。适用于探索模块结构和高层依赖关系。

    • depth - 层级深度(0=仅根节点,1=根节点及其子节点,依此类推)- 必需 Integer
    • path_prefix - 用于筛选节点的可选路径前缀(例如 com.example.service)- String
    • ecosystem - 用于筛选的可选生态系统(java、cs、py、js、ts)- String
  • get_intended_architecture - 获取用户定义的架构约束,指定哪些模块可以依赖其他模块。

指南工具
  • get_guidelines - 根据 SonarQube 项目问题、目录类别或两者的组合获取编码指南。
    • mode - 指南检索模式:project_based、category_based 或 combined - 必需字符串
    • categories - 类别名称列表(category_based 和 combined 模式必需)- String[]
    • languages - SonarQube 仓库键格式的目标语言列表(提供 categories 时必需)- String[]
    • file_paths - 用于筛选指南的可选文件路径列表 - String[]
第三方依赖工具
  • check_dependency - 在添加或更新第三方依赖项之前,检查其安全漏洞、供应链恶意软件和许可证合规性。
    • purl - 带版本的 Package URL (purl),遵循 purl-spec。格式:pkg:<type>/<namespace>/<name>@<version>(例如 pkg:npm/lodash@4.17.21、pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1、pkg:pypi/django@3.2.0)- 必需字符串
上下文增强环境变量
变量描述必需默认值
SONARQUBE_URLSonarQube Cloud URL是https://sonarcloud.io
SONARQUBE_TOKEN身份验证令牌是无
SONARQUBE_ORGCloud 组织;通过启动配置或唯一检测传递给代理否无
SONARQUBE_PROJECT_KEYSonarQube Cloud 上的项目键是无
SONAR_SQ_BRANCH显式覆盖 SonarQube 分支 *否无
SONARQUBE_DEBUG_ENABLED启用调试日志记录(用于故障排查)否False
SONAR_LOG_LEVEL日志详细程度(TRACE、DEBUG、INFO、WARNING、ERROR)否INFO
  • 不使用 git,或 git 分支名称与 SonarQube 中的分支名称不匹配时,必须提供此项。
项目专属配置(推荐)

首先,为项目导出 SONARQUBE_TOKEN 环境变量,并设置有效的个人访问令牌 (PAT)。

# macOS/Linux (Bash/Zsh)
export SONARQUBE_TOKEN="{<YourUserToken>}"

然后,挂载项目工作区,以便 Context Augmentation 服务器直接访问源文件:

{
  "mcpServers": {
    "sonarqube-mcp-server": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "--pull=always",
        "-e", "SONARQUBE_URL",
        "-e", "SONARQUBE_TOKEN",
        "-e", "SONARQUBE_ORG",
        "-e", "SONARQUBE_PROJECT_KEY",
        "-e", "SONARQUBE_TOOLSETS",
        "-v", "/ABSOLUTE/PATH/TO/YOUR/PROJECT:/app/mcp-workspace:rw",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_URL": "https://sonarcloud.io",
        "SONARQUBE_ORG": "<YourOrganizationKey>",
        "SONARQUBE_PROJECT_KEY": "<YourProjectKey>",
        "SONARQUBE_TOOLSETS": "cag"
      }
    }
  }
}

重要:在项目范围的配置中,不要将 SONARQUBE_TOKEN 放入 env 块。请将其导出为环境变量(export SONARQUBE_TOKEN=...)。Docker 会通过 -e SONARQUBE_TOKEN 将其传递到容器中。

智能体就绪度

注意:智能体就绪度工具仅适用于 SonarQube Cloud,且需要为组织启用此功能。

在 stdio 模式下,启动时会检查功能标志。通过 HTTP/HTTPS 使用时,将 agentic-readiness 添加到服务器的 SONARQUBE_TOOLSETS 中以启用这些工具。

  • start_agentic_readiness_assessment - 为项目启动智能体就绪度评估。立即返回状态 PENDING 和一个 assessmentId。使用 get_agentic_readiness_assessment 轮询结果。

    • projectKey - 项目键 - 必需字符串 (定义 SONARQUBE_PROJECT_KEY 时忽略)
    • branch - 要评估的分支。省略则使用项目的默认分支 - 字符串
  • get_agentic_readiness_assessment - 获取评估结果。使用相同的 assessmentId 重新调用,直到状态为 COMPLETED、FAILED 或 INTERRUPTED。完成后,返回总体级别以及各支柱的详细结果,其中包含建议操作和证据。

    • assessmentId - start_agentic_readiness_assessment 返回的评估 ID - 必需字符串
  • list_agentic_readiness_assessments - 按时间从新到旧列出项目的所有评估。使用 get_agentic_readiness_assessment 获取完整的支柱级结果。

    • projectKey - 要列出评估的项目键 - 必需字符串 (定义 SONARQUBE_PROJECT_KEY 时忽略)
    • branch - 按分支名称筛选评估。省略则列出所有分支的评估 - 字符串
    • pageIndex - 从 1 开始的页码(默认值:1)- 数字
    • pageSize - 每页项目数,最多 100(默认值:50)- 数字

架构

注意:在 stdio 或 HTTP/HTTPS 模式下,使用 SONARQUBE_TOOLSETS=architecture 启用这些工具。SonarQube Cloud 需要 Team 或 Enterprise 计划。SonarQube Server 需要 2026.6 或更高版本,且版本不低于 Developer;较旧版本或 Community Build 不提供这些工具。 请参阅架构工作流和恢复。

  • architecture_get - 读取当前依赖关系、预期架构、项目指令或发现项(偏差、缺陷和异味)。

    • target - current、intended、directives 或 findings;是否可用取决于 MCP 和 Server 构建版本 - 必需枚举
    • projectKey - 项目键 - 必需字符串 (定义 SONARQUBE_PROJECT_KEY 时忽略)
    • organization - 未配置时使用的 SonarQube Cloud 组织键 - 可选字符串,仅限 Cloud
    • component - 当前节点键或预期组路径的精确值;省略时使用顶层 - 字符串
    • depth - 仅适用于当前/预期架构:起始位置以下的层级数;当前架构默认为 1,预期架构默认为全部 - 数字
    • language - 仅适用于当前/预期架构/发现项:java、cs、js、ts 或 py - 枚举
    • directiveId - 按 UUID 获取完整指令,包括描述;用于替代分页 - 字符串
    • category / type - 仅适用于发现项:按其公布的类型筛选偏差、缺陷或异味 - 枚举
    • pageIndex - 仅适用于指令/发现项:从 1 开始的页码(默认值:1)- 数字
    • pageSize - 指令:摘要,默认值/最大值为 50。发现项:默认值为 50,最大值为 1000;0 表示仅计数 - 数字
  • architecture_set - 替换整个预期架构,或创建、更新和删除项目指令。在支持的 Cloud 和 Server 构建版本中,启用写入后可用。

    • target - intended 或 directives - 必需枚举
    • projectKey - 项目键 - 必需字符串 (定义 SONARQUBE_PROJECT_KEY 时忽略)
    • organization - 未配置时使用的 SonarQube Cloud 组织键 - 可选字符串,仅限 Cloud
    • model - JSON 字符串:完整的预期架构导出,或 models 数组(未提供的内容将被删除);或者包含 create、update 和 delete 数组的指令变更 - 必需字符串
    • dryRun - true 用于预览,false 用于应用 - 必需布尔值
    • revision - 仅适用于预期架构:来自 architecture_get 的修订版本;默认为完整导出的修订版本。应用清除操作时必需 - 字符串

示例提示

设置好 SonarQube MCP Server 后,以下是一些适用于常见实际场景的示例提示:

修复未通过的质量门禁
My quality gate is failing for my project. Can you help me understand why and fix the most critical issues?
The quality gate on my feature branch is red. What do I need to fix to get it passing before I can merge to main?
发布前和合并前检查
I'm about to merge my pull request <#247> for the <web-app> project. Can you check if there are any quality issues I should address first?
We're deploying to production tomorrow. Can you check the quality gate status and alert me to any critical issues in this branch?
提升代码质量
I want to reduce technical debt in my project. What are the top issues I should prioritize?
Our code coverage dropped below 70%. Can you identify which files have the lowest coverage and help me improve it?
理解并修复问题
I have 15 new code smells in my latest commit. Can you explain what they are and help me fix them?
SonarQube flagged a critical security vulnerability in <AuthController.java>. What's the issue and how do I fix it?
安全与依赖管理
We need to pass a security audit. Can you check all our projects for security vulnerabilities and create a prioritized list of what needs to be fixed?
Are there any known vulnerabilities in our dependencies? Check this project for dependency risks.
代码审查辅助
I just wrote this authentication function. Can you analyze it for security issues and code quality problems before I commit?
Review the changes in <src/database/migrations> for any potential bugs or security issues.
项目健康状况监控
Give me a health report for my project: quality gate status, number of bugs, Security Hotspots, and code coverage.
Compare code quality between our main branch and the develop branch. Are we introducing new issues?
团队协作
What are the most common rule violations across all our projects? We might need to update our coding standards.
Show me all the issues that were marked as false positives in the last month. Are we seeing patterns that suggest our rules need adjustment?

构建

建议使用 sonarsource/sonarqube-mcp 容器镜像。

若要在不使用 Docker 的情况下将服务器作为独立 JAR 运行,请从 SonarSource 二进制文件仓库 下载预构建版本。每个已发布版本都会以 sonarqube-mcp-server-<version>.jar 的形式发布在该仓库中(例如 sonarqube-mcp-server-1.19.0.2785.jar)。

从 JAR 运行

从二进制文件仓库下载所需版本的 JAR,然后将 MCP 客户端配置为使用 Java 21 或更高版本运行:

  • 连接到 SonarQube Cloud:
{
  "sonarqube": {
    "command": "java",
    "args": [
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "STORAGE_PATH": "<path_to_your_mcp_storage>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>"
    }
  }
}
  • 连接到 SonarQube Server:
{
  "sonarqube": {
    "command": "java",
    "args": [
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "STORAGE_PATH": "<path_to_your_mcp_storage>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}
从源代码构建

构建 SonarQube MCP Server 需要 Java Development Kit (JDK) 21 或更高版本。

运行以下 Gradle 命令以清理项目并构建应用程序:

./gradlew clean build -x test

JAR 文件将创建在 build/libs/ 中。

添加或更新依赖项后,请重新生成锁定文件:

./gradlew :dependencies --write-locks
./gradlew :its:dependencies --write-locks

使用上方的 从 JAR 运行 配置,并将 <path_to_sonarqube_mcp_server_jar> 指向 build/libs/ 中的 JAR。

故障排查

默认情况下,应用程序日志会写入 STORAGE_PATH/logs/mcp.log 文件。若要完全禁用文件日志记录,请设置 SONARQUBE_LOG_TO_FILE_DISABLED=true。

常见问题

“不支持 SonarQube 服务器版本”

MCP 服务器会在启动期间检查所连接的 SonarQube Server 版本。如果实例版本低于 2025.1 (SQS) 或 25.1 (SQCB),启动将失败并显示:

SonarQube server version is not supported, minimal version is SQS 2025.1 or SQCB 25.1

**解决方案:**将 SonarQube Server 升级到受支持的版本。此检查仅适用于连接 SonarQube Server 时(SONARQUBE_URL 且不含 SONARQUBE_ORG),不适用于 SonarQube Cloud。

“功能无法正常工作”或“缺少工具/功能”

您可能正在运行过时的 Docker 镜像。Docker 会在本地缓存镜像,因此不会自动获取更新。

**解决方案:**更新到最新版本:

docker pull sonarsource/sonarqube-mcp

拉取最新镜像后,重启 MCP 客户端以使用更新后的版本。

也可以在 docker run 命令中添加 --pull=always 标志,以便始终检查并拉取最新版本:

docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_ORG sonarsource/sonarqube-mcp

“我想固定到特定版本”

在 sonarsource/sonarqube-mcp 查看可用标签,并引用所需版本:

docker pull sonarsource/sonarqube-mcp:1.19.0.2785

docker run --init -i --rm \
  -e SONARQUBE_TOKEN -e SONARQUBE_ORG \
  sonarsource/sonarqube-mcp:1.19.0.2785

在 MCP 客户端配置中,使用 sonarsource/sonarqube-mcp:<version> 替代 sonarsource/sonarqube-mcp,并移除 --pull=always,以免 Docker 在不提示的情况下升级镜像。

数据与遥测

此服务器会收集匿名使用数据并将其发送给 SonarSource,以帮助改进产品。不会收集源代码或 IP 地址,SonarSource 也不会与任何其他人共享这些数据。可通过以下系统属性或环境变量禁用遥测数据收集:TELEMETRY_DISABLED=true。点击此处查看收集数据的示例。

许可证

版权所有 2025 SonarSource。

根据 SONAR Source-Available License v1.0 授权。遵循本文档使用 SonarQube MCP Server 属于非竞争性用途,因此符合 SSAL 的规定。

您通过 MCP 使用 SonarQube 受 SonarQube Cloud 服务条款 或 SonarQube Server 条款与条件 约束,包括仅将结果数据用于内部软件开发目的。