关于 sonarqube-mcp
用于在代码质量工作流中调用 SonarQube 和 SonarCloud MCP 工具的技能,指导 Agent 检查质量门禁、筛选问题、分析代码片段并查询规则说明。
主要功能
- 01检查项目质量门禁
- 02搜索和筛选问题
- 03推送前分析代码片段
- 04获取项目指标
- 05查询规则说明
适用场景
- 01合并前检查 Pull Request
- 02整理项目中的高严重级别问题
- 03提交前审查代码片段
- 04了解 Sonar 规则的标记原因
MCP 相关
该技能指导使用 SonarQube MCP Server,其工具可查询质量门禁、搜索和更新问题、分析代码片段、获取项目指标及查询规则。使用前需配置 SonarQube Server 或 SonarCloud 的凭据。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ giuseppe-trisciuoglio/ developer-kit --skill sonarqube-mcp安装后在 Claude Code 中输入/sonarqube-mcp确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/best-practices.mdllm-context.mdmetrics.mdseverity-levels.md详细介绍
SonarQube MCP 集成
通过 Model Context Protocol(MCP)服务直接使用 SonarQube 和 SonarCloud 的功能,在 Agent 工作流中执行代码质量检查、发现问题并运行推送前分析。
概述
本技能介绍如何使用 SonarQube MCP 服务工具,并提供使用模式。它支持以下自动化工作流:
- 在合并或部署前检查质量门状态
- 按严重性和项目发现问题并进行分类处理
- 在提交前本地分析代码片段(左移)
- 通过完整文档了解 SonarQube 规则
适用场景
在以下情况下使用本技能:
- 用户想在合并 PR 前检查项目是否通过质量门
- 用户想查找一个或多个 SonarQube 项目中的严重或阻断级问题
- 用户想在推送到 CI 前分析代码片段中的问题
- 用户想了解某条 Sonar 规则标记其代码的原因
- 用户请求提交前或推送前的质量反馈
触发短语:“检查质量门”、“sonarqube 质量门”、“查找 sonar 问题”、“搜索 sonar 问题”、“用 sonar 分析代码”、“检查 sonar 规则”、“sonarcloud 问题”、“推送前 sonar 检查”、“sonar 提交前检查”
前提条件与设置
该插件包含一个 .mcp.json,可通过 Docker 自动启动 SonarQube MCP Server。使用本技能前,请设置所需的环境变量:
SonarQube Server(远程或本地):
export SONARQUBE_TOKEN="squ_your_token"
export SONARQUBE_URL="https://sonarqube.mycompany.com" # or http://host.docker.internal:9000 for local Docker
SonarCloud:
export SONARQUBE_TOKEN="squ_your_token"
export SONARQUBE_ORG="your-org-key" # required for SonarCloud
# SONARQUBE_URL is not needed for SonarCloud
要求:
- 必须安装并运行 Docker
- 始终需要
SONARQUBE_TOKEN - SonarQube Server 需要
SONARQUBE_URL(本地实例请使用host.docker.internal) - SonarCloud 需要
SONARQUBE_ORG(此时省略SONARQUBE_URL)
快速开始
-
设置 SonarQube/SonarCloud 凭据:
# SonarQube Server export SONARQUBE_TOKEN="squ_your_token" export SONARQUBE_URL="https://sonarqube.mycompany.com" # SonarCloud export SONARQUBE_TOKEN="squ_your_token" export SONARQUBE_ORG="your-org-key" -
确认 MCP 工具可用:
- 工具名称遵循以下模式:
mcp__sonarqube-mcp__<tool-name>
- 工具名称遵循以下模式:
-
如果 MCP 服务无法启动,请检查:
- Docker 是否正在运行
- 是否已设置环境变量
- 参考:Docker Hub 上的 mcp/sonarqube
参考文档
references/metrics.md— 常见 SonarQube 指标及其含义references/severity-levels.md— Sonar 严重性级别和影响类别references/best-practices.md— PR 检查和提交前分析的工作流references/llm-context.md— 面向大模型 Agent 的工具选择指南和参数映射
操作说明
步骤 1:确定所需操作
判断用户需要执行哪项操作:
| 用户意图 | 使用的工具 |
|---|---|
| 检查项目是否通过质量门 | get_project_quality_gate_status |
| 查找项目中的严重问题 | search_sonar_issues_in_projects |
| 提交前分析代码 | analyze_code_snippet |
| 了解被标记的规则 | show_rule |
| 获取详细的项目指标 | get_component_measures |
| 将问题标记为误报 | change_sonar_issue_status |
如果用户的意图不明确,请先询问项目键和目标,再继续操作。
步骤 2:质量门监控
使用 get_project_quality_gate_status 验证项目是否符合质量标准。
参数:
projectKey(字符串)— SonarQube/SonarCloud 中的项目键pullRequest(字符串,可选)— 用于检查 PR 专属质量门的拉取请求 IDanalysisId(字符串,可选)— 特定分析 ID
注意:此工具没有
branch参数。如果不提供pullRequest或analysisId,工具将返回默认分支的质量门状态。
模式 — 检查默认分支的质量门:
{
"name": "get_project_quality_gate_status",
"arguments": {
"projectKey": "my-application"
}
}
模式 — 合并前检查 PR 的质量门:
{
"name": "get_project_quality_gate_status",
"arguments": {
"projectKey": "backend-service",
"pullRequest": "456"
}
}
解读响应:
status: "OK"— 质量门已通过,可以安全地合并/部署status: "ERROR"— 质量门未通过;检查conditions数组中的未达标指标- 每个条件会显示:
metricKey、actualValue、errorThreshold、comparator
有关指标键的更多信息,请参阅 references/metrics.md。
步骤 3:发现问题并进行分类
使用 search_sonar_issues_in_projects 查找问题并确定优先级。
参数:
projects(数组,可选)— 项目键列表;省略则搜索所有可访问的项目severities(数组,可选)— 筛选条件:BLOCKER、HIGH、MEDIUM、LOW、INFOpullRequestId(字符串,可选)— 将搜索范围限定为特定 PRp(整数,可选)— 页码(默认值:1)ps(整数,可选)— 每页条目数(默认值:100,最大值:500)
模式 — 查找阻断和严重问题:
{
"name": "search_sonar_issues_in_projects",
"arguments": {
"projects": ["my-backend", "my-frontend"],
"severities": ["BLOCKER", "HIGH"],
"p": 1,
"ps": 50
}
}
模式 — 搜索 PR 中的问题:
{
"name": "search_sonar_issues_in_projects",
"arguments": {
"projects": ["my-service"],
"pullRequestId": "123",
"severities": ["HIGH", "MEDIUM"],
"p": 1,
"ps": 100
}
}
使用 change_sonar_issue_status 管理问题:
使用此工具将问题标记为误报或已接受的技术债务:
{
"name": "change_sonar_issue_status",
"arguments": {
"key": "AY1234",
"status": "falsepositive",
"comment": "This pattern is safe in our context because..."
}
}
有效状态:falsepositive(不是真正的问题)、accept(已确认的技术债务)、reopen(重置为未解决)
更改问题状态前,务必先向用户展示问题列表。未经用户明确确认,绝不要自行将问题标记为误报。
步骤 4:推送前分析(左移)
使用 analyze_code_snippet 在提交前对代码运行 SonarQube 分析。
参数:
projectKey(字符串)— 用于提供上下文的项目键fileContent(字符串,必需)— 要分析的文件的完整内容language(字符串,可选)— 用于提高准确性的语言提示codeSnippet(字符串,可选)— 将结果限定在fileContent中的特定子范围
支持的语言: javascript、typescript、python、java、go、php、cs、cpp、kotlin、ruby、scala、swift
模式 — 提交前分析 TypeScript 文件:
{
"name": "analyze_code_snippet",
"arguments": {
"projectKey": "my-typescript-app",
"fileContent": "async function fetchUser(id: string) {\n const query = `SELECT * FROM users WHERE id = ${id}`;\n return db.execute(query);\n}",
"language": "typescript"
}
}
模式 — 分析 Python 文件:
{
"name": "analyze_code_snippet",
"arguments": {
"projectKey": "my-python-service",
"fileContent": "import pickle\n\ndef load_model(path):\n with open(path, 'rb') as f:\n return pickle.load(f)",
"language": "python"
}
}
响应解读:
- 每个问题都包含:
ruleKey、严重级别、清洁代码属性、影响类别、行号、快速修复是否可用 - 提交前处理严重级别为
CRITICAL和HIGH的问题 - 对于不熟悉的规则,使用
ruleKey值调用show_rule
步骤 5:了解规则
使用 show_rule 了解规则存在的原因,以及如何修复被标记的代码。
参数:
key(字符串)— 格式为<language>:<rule-id>的规则键(例如,typescript:S1082、java:S2068)
模式 — 获取规则文档:
{
"name": "show_rule",
"arguments": {
"key": "typescript:S1082"
}
}
响应包含: 规则名称、类型、严重级别、完整说明、标签(例如,cwe、owasp-a2)、语言、修复工作量估算、代码示例(不合规与合规)。
步骤 6:获取组件度量
使用 get_component_measures 获取项目、目录或文件的详细指标。
参数:
projectKey(字符串)— SonarQube/SonarCloud 中的项目键pullRequest(字符串,可选)— 用于 PR 范围指标的 PR IDmetricKeys(数组)— 要获取的指标键列表
常见指标键: coverage、bugs、vulnerabilities、code_smells、complexity、cognitive_complexity、ncloc、duplicated_lines_density、new_coverage、new_bugs
模式 — 项目健康状况仪表板:
{
"name": "get_component_measures",
"arguments": {
"projectKey": "my-project-key",
"metricKeys": ["coverage", "bugs", "vulnerabilities", "code_smells", "ncloc"]
}
}
完整的指标参考,请参阅 references/metrics.md。
步骤 7:向用户展示结果
每次调用工具后:
- 以易于理解的形式总结调查结果
- 标记需要关注的问题(BLOCKER、HIGH 严重性)
- 根据调查结果提出后续操作建议
- 在采取修复措施(例如更改问题状态、修改代码)之前,等待用户确认
示例
示例 1:合并前质量门禁检查
用户请求:“检查项目 backend-api 在 PR #234 上是否通过质量门禁”
{
"name": "get_project_quality_gate_status",
"arguments": {
"projectKey": "backend-api",
"pullRequest": "234"
}
}
**如果门禁未通过:**提取未通过的条件并展示给用户,然后使用 search_sonar_issues_in_projects 按同一个 PR 筛选,显示实际问题。
示例 2:推送前左移分析
用户请求:“在我推送之前分析这个 Go 函数”
{
"name": "analyze_code_snippet",
"arguments": {
"projectKey": "my-go-service",
"fileContent": "func handler(w http.ResponseWriter, r *http.Request) {\n id := r.URL.Query().Get(\"id\")\n query := fmt.Sprintf(\"SELECT * FROM orders WHERE id = %s\", id)\n rows, _ := db.Query(query)\n // ...\n}",
"language": "go"
}
}
展示调查结果 → 对于每个问题,可选择调用 show_rule,并传入 ruleKey 值来解释修复方法。
示例 3:对项目中的 BLOCKER 问题进行分类处理
用户请求:“显示 payment-service 中所有的 blocker 问题”
{
"name": "search_sonar_issues_in_projects",
"arguments": {
"projects": ["payment-service"],
"severities": ["BLOCKER"],
"p": 1,
"ps": 50
}
}
按类别(安全性、可靠性、可维护性)对结果分组并展示给用户。对于不熟悉的规则,可提供调用 show_rule 的选项。
最佳实践
- 环境设置 — 每个会话只需设置一次凭据;MCP 服务会自动获取
- 合并前始终检查质量门禁 — 在任何 PR 审查工作流中运行
get_project_quality_gate_status - 安全问题左移 — 在开发期间使用
analyze_code_snippet,而不仅仅是在 CI 中使用 - 按严重性确定优先级 — 优先处理 BLOCKER 和 HIGH 问题;记录对 MEDIUM 和 LOW 问题的处理决定
- 对不熟悉的键使用
show_rule— 未了解规则意图之前,切勿忽略该规则 - 对大型结果集进行分页 — 使用
p和ps参数;处理多页响应以确保完整覆盖 - 切勿自主更改问题状态 — 始终向用户展示问题,并在调用
change_sonar_issue_status之前获得明确确认 - 提供语言提示 — 在
analyze_code_snippet中指定language,以获得更准确的分析
约束和警告
- 必须配置并运行 MCP 服务;使用前请确认工具可用
analyze_code_snippet会独立分析代码片段——在 CI 中,完整的项目上下文可能会影响结果- 更改问题状态(误报、不予修复)需要相应的 SonarQube 权限
- SonarCloud 和 SonarQube Server API 大体兼容,但部分功能有所不同;请查看
references/llm-context.md - 对于问题较多的项目,必须进行分页;检查响应中的
paging.total和paging.pageSize,以确定是否需要继续遍历后续页面 - 质量门禁状态反映最近一次已完成的分析——如果代码有变更,请触发新的分析