/ 目录 / 演练场 / SonarQube
● 官方 SonarSource 🔑 需要你的密钥

SonarQube

作者 SonarSource · SonarSource/sonarqube-mcp-server

将 SonarQube 问题、安全热点和质量门状态拉入你的 AI 工作流——无需打开 SonarQube UI 即可分类发现和草拟修复。

SonarSource 官方 MCP 包装 SonarQube Server 和 SonarCloud API。按严重级别、类型、组件或作者查询问题;检查安全热点;读取质量门状态和新代码增量。最适合每周质量评审和 PR 时的分类。

为什么要用

核心特性

实时演示

实际使用效果

sonarqube.replay ▶ 就绪
0/0

安装

选择你的客户端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "sonarqube": {
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  }
}

打开 Claude Desktop → Settings → Developer → Edit Config。保存后重启应用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "sonarqube": {
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  }
}

Cursor 使用与 Claude Desktop 相同的 mcpServers 格式。项目级配置优先于全局。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "sonarqube": {
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  }
}

点击 Cline 侧栏中的 MCP Servers 图标,然后选 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "sonarqube": {
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  }
}

格式与 Claude Desktop 相同。重启 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "sonarqube",
      "command": "npx",
      "args": [
        "-y",
        "sonarqube-mcp-server"
      ]
    }
  ]
}

Continue 使用服务器对象数组,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "sonarqube": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "sonarqube-mcp-server"
        ]
      }
    }
  }
}

加入 context_servers。Zed 保存后热重载。

claude mcp add sonarqube -- npx -y sonarqube-mcp-server

一行命令搞定。用 claude mcp list 验证,claude mcp remove 卸载。

使用场景

实战用法: SonarQube

在评审前分类 PR 上的新 SonarQube 问题

👤 希望专注于人工评审而非 lint 的评审者 ⏱ ~15 min beginner

何时使用: 一个 PR 有 15 个新 Sonar 发现。你想要 30 秒摘要:哪些是必须修复的,哪些是小问题。

前置条件
  • 具有 Execute Analysis + Browse 权限的 Sonar token — Sonar UI → Account → Security → Generate token
  • 项目 key — Sonar 项目 URL:/dashboard?id=<key>
步骤
  1. 拉取该分支的新代码问题
    列出项目 <key>、分支 <pr-branch> 的问题,sinceLeakPeriod=true。按严重级别分组。✓ 已复制
    → 新发现已分组
  2. 分类修复价值
    对每个 BLOCKER/CRITICAL,显示文件:行和规则。标记哪些看起来像真实 bug vs 噪音。✓ 已复制
    → 分类清单
  3. 草拟修复建议
    对于真实的 bug,通过文件系统 MCP 获取源代码片段,为每个提出最小化修复。✓ 已复制
    → 按问题的 diff 建议

结果: 一屏 PR 分类,包含评审者应该关注的 3 个东西。

注意事项
  • 低严重级别的'异味'淹没了真实 bug — 分类时始终过滤严重级别为 BLOCKER,CRITICAL,MAJOR;MINOR/INFO 单独一批
搭配使用: github · filesystem

跨项目生成周质量趋势报告

👤 工程经理 ⏱ ~25 min intermediate

何时使用: 周一早上:我们 12 个服务的技术债趋势如何?

步骤
  1. 列出项目和门状态
    列出所有项目的质量门状态。标记本周从 PASS 变为 FAIL 的任何项目。✓ 已复制
    → 回归已高亮
  2. 汇总热点和新 bug
    对每个失败的项目,拉取过去 7 天的开放安全热点和新 bug。每个项目排名前 3。✓ 已复制
    → 每个项目的可行动问题列表
  3. 格式化为 Markdown 摘要
    生成 markdown 报告:每个项目一个部分,新 bug/热点表格,覆盖率增量。✓ 已复制
    → 报告已准备好发布

结果: 周质量摘要供你的领导评审——每周格式一致。

注意事项
  • 含自动生成代码的项目污染报告 — 通过 Sonar 的 sonar.exclusions 排除它们;不要在 LLM 中过滤——在上游修复
搭配使用: notion

带上下文评审和分类安全热点

👤 应用安全 / 安全冠军工程师 ⏱ ~45 min advanced

何时使用: 季度安全评审:所有 TO_REVIEW 热点都已决策了吗?

步骤
  1. 列出未评审的热点
    列出项目 <key> 中状态为 TO_REVIEW 的热点。按规则分组(如 sql-injection, xss)。✓ 已复制
    → 按类别排队
  2. 拉取代码上下文
    对每个热点,获取源代码片段(±10 行)。判断它是真实风险还是上下文安全。✓ 已复制
    → 每个热点带理由的安全/风险裁定
  3. 应用决策
    对'安全'热点,提出分辨注释。我会评审 5 个为一批并批准;然后我们应用。✓ 已复制
    → 决策批处理已准备好应用

结果: 清理后的热点队列,每个决策有可审计的理由。

注意事项
  • 没有代码上下文的批量解决很危险 — 标记为安全前始终要求 Claude 引用确切行号
搭配使用: filesystem · github

预检查:这个 PR 会失败质量门吗?

👤 推送 PR 的开发者 ⏱ ~15 min intermediate

何时使用: 打开 PR 前:我引入了覆盖率下降或新的阻塞器吗?

步骤
  1. 启动分析(MCP 外)并等待
    提醒我在本地运行 sonar-scanner branch=<pr-branch>。完成后我会回来。✓ 已复制
    → 此分支的分析 ID
  2. 读取分支门状态
    获取项目 <key> 中分支 <pr-branch> 的质量门状态。显示每个条件 + 实际 vs 阈值。✓ 已复制
    → 按条件的 PASS/FAIL 表
  3. 专注于失败的条件
    对每个失败的条件,列出排名前 5 的贡献问题/文件。为每项建议一个改变。✓ 已复制
    → 具体修复列表

结果: 打开 PR 前确切知道哪个规则会失败 CI。

注意事项
  • 本地分析分支名称与 CI 的不匹配 — 显式传递 -Dsonar.branch.name=<exact ci branch>
搭配使用: github

从 Sonar 数据构建优先级技术债待办事项

👤 规划债务偿还冲刺的技术主管 ⏱ ~30 min intermediate

何时使用: 你有技术债冲刺预算;你想选择最高 ROI 项。

步骤
  1. 拉取所有具有工作量 + 严重级别的开放问题
    对项目 <key>,拉取具有工作量(分钟)和严重级别的开放问题。排除 MINOR/INFO。✓ 已复制
    → 具有工作量数据的问题集
  2. 按文件和规则聚类
    按(文件,规则)分组问题。求和每组的工作量。排名前 20 组——这些是一次修复-多次修复的机会。✓ 已复制
    → ROI 排名的分组
  3. 将排名前 10 的转换为 Linear 票
    对排名前 10 的每个,创建标题为'重构 <file> 以解决 N× <rule>'的 Linear 问题,包含估计小时数。✓ 已复制
    → 票已创建 + URL

结果: 一个冲刺就绪的债务待办事项,按实际成本-影响比排序。

注意事项
  • 工作量估计是静态的——它们不反映你的团队速度 — 将 Sonar 工作量视为相对的;乘以你的团队校准因素
搭配使用: linear

组合

与其他 MCP 搭配,撬动十倍杠杆

sonarqube + github

在 GitHub PR 上自动评论 Sonar 分类

对 PR #342,拉取该分支的 Sonar 新代码问题,汇总关键的,作为 PR 评审注释发布。✓ 已复制
sonarqube + linear

将质量门回归转换为 Linear 票

任何今天从门 FLIP 到 FAIL 的项目:创建分配给项目主管的 P2 Linear 问题。✓ 已复制
sonarqube + notion

周质量报告发布到 Notion

运行多项目周质量摘要;在'Engineering / Quality / Weekly'中创建 Notion 页面。✓ 已复制

工具

此 MCP 暴露的能力

工具输入参数何时调用成本
search_issues project_key, severities?, types?, branch?, since?, resolved? 查询 bug/异味/漏洞的主要工具 free
get_issue issue_key 深入了解一个问题的流程和更改日志 free
search_hotspots project_key, status?, branch? 安全评审工作流 free
get_quality_gate_status project_key, branch? CI/PR 工作流的门检查 free
list_projects organization? 发现你的组织中的项目 free
get_metrics project_key, metrics: str[], branch? 拉取覆盖率、重复度、技术债比率等 free

成本与限制

运行它的成本

API 配额
SonarCloud:慷慨、无文档化(~每分钟数百请求)。Server:受你的基础设施限制。
每次调用 Token 数
问题搜索:500–3000 token,取决于页面大小。
费用
SonarQube Community 免费。SonarCloud 对开源免费;付费从 ~$10/dev/mo 开始。
提示
使用 ps(页面大小)100 并分页;一次获取所有问题会爆炸上下文且较慢。

安全

权限、密钥、影响范围

最小权限: 在目标项目上浏览
凭据存储: 环境中的 SONAR_TOKEN(用户或项目 token);SONAR_URL 用于本地部署
数据出站: 仅调用 sonarcloud.io 或你的 SonarQube URL
切勿授予: 管理安全 全局管理员

故障排查

常见错误与修复

401 Unauthorized

SONAR_TOKEN 丢失或已撤销。在 Sonar UI → Account → Security 中重新生成。

验证: curl -u $SONAR_TOKEN: $SONAR_URL/api/authentication/validate
404 Component key not found

项目 key 区分大小写,与显示名称不同。检查项目仪表板 URL 参数 id=

Branch not found

Sonar 仅保留已分析的分支。确保你的 CI 运行 sonar-scanner-Dsonar.branch.name=...

Empty results despite expected issues

默认过滤可能排除已解决的;显式传递 resolved=falsesinceLeakPeriod=false

替代方案

SonarQube 对比其他方案

替代方案何时用它替代权衡
CodeQL / GitHub Advanced Security你在 GitHub 上,想要代码扫描与 PR 集成非安全问题的规则覆盖更窄
Semgrep MCP你想要快速、可定制的静态规则,不需要托管平台没有仪表板 / 质量门概念开箱即用

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills