VOOZH about

URL: https://glama.ai/mcp/servers/mshegolev/sonarqube-mcp?locale=zh-CN

⇱ sonarqube-mcp by mshegolev | Glama


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: TruedestructiveHint: FalseidempotentHint: 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

SonarQube URL(末尾无斜杠)

SONARQUBE_TOKEN

持有者令牌。生成路径:我的账户 → 安全 → 令牌

SONARQUBE_SSL_VERIFY

true/false。默认:true

关于 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_metricscandidate_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

A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

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