MCP SonarQube服务器
用于与SonarQube集成的模型上下文协议(MCP)服务器,允许通过MCP访问代码分析功能。
🚀 快速开始
方法1:使用UVX(推荐)⭐
先决条件安装: uv 第一:
# Windows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iex
# Linux/Mac
curl -LsSf https://astral.sh/uv/install.sh | sh光标设置 :
{
"mcpServers": {
"sonarqube": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/JoaobatistaJuniorTR/mcp-sonar.git",
"mcp-sonarqube"
],
"env": {
"SONARQUBE_URL": "https://sonar.qa.thomsonreuters.com",
"SONARQUBE_TOKEN": "seu_token_aqui"
}
}
}
}⚠️ 重要:
- 替换
seu_token_aqui您的 SonarQube 代币 - O
--from必须指定包来自 Git 仓库
方法2:直接运行 GitHub(Fallback)
硒 uvx 如果不可用,请使用:
{
"mcpServers": {
"sonarqube": {
"command": "python",
"args": [
"-c",
"import urllib.request, sys, tempfile, subprocess, os; url='https://raw.githubusercontent.com/JoaobatistaJuniorTR/mcp-sonar/main/sonarqube_mcp_server.py'; f=tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False, encoding='utf-8'); f.write(urllib.request.urlopen(url, timeout=30).read().decode('utf-8')); f.close(); subprocess.run([sys.executable, f.name], env=os.environ); os.unlink(f.name)"
],
"env": {
"SONARQUBE_URL": "https://sonar.qa.thomsonreuters.com",
"SONARQUBE_TOKEN": "seu_token_aqui"
}
}
}
}📋 先决条件
- Python 3.8或更高级
- 访问 SonarQube 服务器
- SonarQube 认证令牌
uv安装 (对于 uvx 方法) 或 Python 与mcperequests
🔧 安装
安装UV(使用UVX)
窗户:
irm https://astral.sh/uv/install.ps1 | iexLinux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh手动安装依赖关系( 如果不使用 uvx)
pip install mcp requests如何获得SonarQube令牌
- 访问 SonarQube
- 进去 我的账户 > 安全
- 创建新令牌
- 复制令牌( 只显示一次)
🛠️ 可用工具
1. search_issues
在项目中查找 SonarQube 问题。
参数 :
projectKeys(array, optional): 项目密钥列表severities(数组、操作):严重程度过滤器(阻塞、严重、主要、次要、信息)statuses(数组、操作):过滤器状态(打开、已确认、重新打开、已解决、已关闭)pageSize(integer, 可选): 页面大小 (默认: 100)page(integer, 可选): 页码 (默认: 1)
例如:
search_issues com projectKeys=["com.thomsonreuters:rt-data-scanner"] e severities=["CRITICAL", "MAJOR"]2. get_project_measures
获取项目的指标(覆盖范围,复杂性,代码行等)。
参数 :
projectKey(string, 必填): 项目密钥metricKeys(数组,可选):要搜索的度量列表
例如:
get_project_measures com projectKey="com.thomsonreuters:rt-data-scanner" e metricKeys=["coverage", "ncloc", "complexity"]3. get_quality_gate_status
获取项目的质量门状态。
参数 :
projectKey(string, 必填): 项目密钥
例如:
get_quality_gate_status com projectKey="com.thomsonreuters:rt-data-scanner"4. list_projects
列出 SonarQube 上所有可用的项目。
参数 :
page(整数,可选):页码
例如:
list_projects5. get_project_issues_summary
获取按严重程度和状态分组的项目问题摘要。
参数 :
projectKey(string, 必填): 项目密钥
例如:
get_project_issues_summary com projectKey="com.thomsonreuters:rt-data-scanner"6. ping_sonarqube
检查 SonarQube 服务器是否可用 。
例如:
ping_sonarqube📖 使用范例
查找项目中的所有关键问题
search_issues com projectKeys=["com.thomsonreuters:rt-data-scanner"] e severities=["CRITICAL"]获取覆盖度指标
get_project_measures com projectKey="com.thomsonreuters:rt-data-scanner" e metricKeys=["coverage"]通过质量门验证车辆状态
get_quality_gate_status com projectKey="com.thomsonreuters:rt-data-scanner"🔄 执行方法
方法1:UVX(推荐)⭐
O uvx 类似于 npx Node.js - 无需预先安装即可直接运行 Python 软件包。
优势:
- ✅ 无需克隆仓库
- ✅ 无需手动安装依赖关系
- ✅ 始终使用最新版本
- ✅ 依赖性隔离
命令格式 :
uvx --from git+https://github.com/JoaobatistaJuniorTR/mcp-sonar.git mcp-sonarqube方法2:克隆并在本地运行
git clone https://github.com/JoaobatistaJuniorTR/mcp-sonar.git
cd mcp-sonar
pip install -r requirements.txt然后在光标中配置:
{
"mcpServers": {
"sonarqube": {
"command": "python",
"args": [
"C:\\caminho\\para\\mcp-sonar\\sonarqube_mcp_server.py"
],
"env": {
"SONARQUBE_URL": "https://sonar.qa.thomsonreuters.com",
"SONARQUBE_TOKEN": "seu_token_aqui"
}
}
}
}🆘 故障排除
错误:“uvx:找不到命令”
安装或 uv 首先(参见上面的安装部分)。
错误:“构建失败”
- 检查仓库是否可访问
- 尝试清除缓存 :
uv cache clean - 检查是否
pyproject.toml正确
错误:“ModuleNotFoundError:没有名为'mcp'的模块”
如果使用手动方法,请安装依赖关系:
pip install mcp requests错误:“必须配置 SONARQUBE_URL 和 SONARQUBE_TOKEN”
- 检查变量是否在
env做JSON - 更改配置后重新启动光标
认证错误
- 检查令牌是否正确且没有过期
- 确保令牌具有必要的权限
连接错误
- 请检查 SonarQube URL 是否正确
- 检查是否有防火墙或代理阻止连接
📝 项目结构
mcp-sonar/
├── sonarqube_mcp_server.py # Servidor MCP principal
├── __main__.py # Entry point para execução modular
├── pyproject.toml # Configuração do projeto (para uvx)
├── requirements.txt # Dependências Python
├── README.md # Este arquivo
└── .gitignore # Arquivos ignorados pelo Git🤝 贡献
欢迎捐款!您可以随时打开 issues 或 pull requests。
📄 许可证
本项目供组织内部使用。
