sonarqube-mcp
👁 PyPI
👁 Python
👁 License: MIT
用于 SonarQube 的 MCP 服务器。允许 LLM 代理(Claude Code、Cursor、OpenCode 等)发现项目、获取主要指标、检查质量门禁状态、通过严重性/类型过滤器搜索问题,并按任何指标的最差值对项目进行排名。
Python,FastMCP,stdio 传输。
适用于任何 SonarQube 9.x / 10.x 实例(自托管)以及 SonarCloud。
为什么需要另一个 SonarQube MCP?
现有的几个社区 SonarQube MCP 通常仅限于单项目读取。此版本增加了跨项目排名 (sonarqube_worst_metrics) —— 这是技术负责人实际上在分类会议中会进行的操作:“向我展示组织中覆盖率最差的前 10 个服务”。所有工具均为只读且经过安全参数化(Pydantic 输入验证,严重性/类型白名单)。
Related MCP server: sonarqube-api-mcp
设计亮点
工具注解 — 所有五个工具都带有
readOnlyHint: True、destructiveHint: False、idempotentHint: True。此服务器无法对 SonarQube 进行任何修改。结构化输出 — 每个工具都返回一个类型化负载 (TypedDict) + Markdown 摘要,因此无论客户端是否支持结构化内容,都能获得可用的响应。
结构化错误 — 401 / 403 / 404 / 400 / 429 / 5xx 映射到可操作的提示(例如“重新生成令牌”、“使用 sonarqube_list_projects 检查项目键”)。
Pydantic 输入验证 — 针对每个参数;在发送请求之前,会根据有效的 SonarQube 枚举检查严重性/类型过滤器。
跨项目最差指标排名 — 在后台批量处理
/api/measures/search调用,并根据所选指标的“高即为差”或“低即为差”进行升序或降序排序。
功能 (5 个工具)
发现
sonarqube_list_projects— 带有可选文本过滤器的分页项目搜索
单项目洞察
sonarqube_project_metrics— 单个项目的度量指标(默认集涵盖错误/覆盖率/异味/评级/ncloc/测试/警报状态)sonarqube_quality_gate_status— 质量门禁状态 + 每个条件的失败情况
问题分类
sonarqube_get_issues— 按严重性/类型/解决状态过滤的问题搜索
跨项目排名
sonarqube_worst_metrics— 按指标最差值排序的前 N 个项目(例如覆盖率最差、错误最多)
安装
需要 Python 3.10+。
# via uvx (recommended — no install, just run)
uvx --from sonarqube-mcp sonarqube-mcp
# or via pipx
pipx install sonarqube-mcp配置
claude mcp add sonarqube -s project \
--env SONARQUBE_URL=https://sonar.example.com \
--env SONARQUBE_TOKEN=squ_your_token \
--env SONARQUBE_SSL_VERIFY=true \
-- uvx --from sonarqube-mcp sonarqube-mcp或者在 .mcp.json 中:
{
"mcpServers": {
"sonarqube": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "sonarqube-mcp", "sonarqube-mcp"],
"env": {
"SONARQUBE_URL": "https://sonar.example.com",
"SONARQUBE_TOKEN": "${SONARQUBE_TOKEN}",
"SONARQUBE_SSL_VERIFY": "true"
}
}
}
}检查:
claude mcp list
# sonarqube: uvx --from sonarqube-mcp sonarqube-mcp - ✓ Connected环境变量
变量 | 必需 | 描述 |
| 是 | SonarQube URL(末尾无斜杠) |
| 是 | 持有者令牌。生成路径:我的账户 → 安全 → 令牌 |
| 否 |
|
关于 HTTP 代理的说明。 客户端有意禁用了基于环境的代理发现 (trust_env=False),因为自托管的 SonarQube 通常只能在内部网络中访问。如果您连接到 SonarCloud 或任何位于企业代理之后的 SonarQube,目前需要在进程级别删除代理变量 —— 后续版本计划增加 SONARQUBE_TRUST_ENV_PROXY 开关。
使用示例
“列出所有匹配 'einvy' 的 SonarQube 项目”
“
einvy:aut_einvy的质量门禁状态是什么?”“向我展示错误最多的前 10 个项目”
“查找
einvy:aut_einvy中所有 BLOCKER / CRITICAL 级别的漏洞”“
einvy:qa_assistant的覆盖率是多少?”“匹配查询 'einvy' 的覆盖率最差的前 5 个项目”
指标方向(由 sonarqube_worst_metrics 使用)
高即为差(降序排序 —— 越多越差):
bugs, code_smells, vulnerabilities, duplicated_lines_density, reliability_rating, security_rating, security_review_rating, sqale_rating, open_issues
低即为差(升序排序 —— 越少越差):
coverage, line_coverage, branch_coverage, test_success_density, tests
SonarQube 中的评级是数字字符串,从 "1" (A,最好) 到 "5" (E,最差)。
安全性
所有工具均为
readOnlyHint: True— 无法修改 SonarQube。从不调用
POST/PUT/DELETE。严重性/类型/限定符输入在 API 调用前会根据 SonarQube 枚举进行验证,因此工具会在拼写错误时快速失败,而不是调用 API。
性能特征
除了
sonarqube_worst_metrics外,每个工具都对 SonarQube 进行一次 HTTP 调用,后者执行一次搜索调用 + ⌈候选池/100⌉ 次批量指标调用。默认设置下通常 ≤ 2 次调用。在健康的 SonarQube 实例上,单工具响应时间通常 < 500 毫秒。
分页直接传递给 SonarQube (
p+ps参数) — MCP 服务器中没有全量结果缓冲。sonarqube_worst_metrics将candidate_pool上限设为 500 — 在拥有数千个项目的实例上,请在排名之前使用query=进行预过滤(请参阅工具文档字符串)。SonarQube 没有发布硬性速率限制。如果收到 429,服务器会显示一个可操作的错误(“重试前等待 30-60 秒;减小 page_size”)。
开发
git clone https://github.com/mshegolev/sonarqube-mcp.git
cd sonarqube-mcp
pip install -e '.[dev]'
pytest许可证
MIT © Mikhail Shchegolev
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mshegolev/sonarqube-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
