SonarQube MCP Server
MCP SonarQube Server
Servidor Model Context Protocol (MCP) para integração com SonarQube, permitindo acesso às funcionalidades de análise de código via MCP.
🚀 Quick Start
Método 1: Usando uvx (Recomendado) ⭐
Pré-requisito: Instale o uv primeiro:
# Windows (PowerShell)
irm https://astral.sh/uv/install.ps1 | iex
# Linux/Mac
curl -LsSf https://astral.sh/uv/install.sh | shConfiguração no Cursor:
{
"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"
}
}
}
}⚠️ IMPORTANTE:
Substitua
seu_token_aquipelo seu token do SonarQubeO
--fromé obrigatório para especificar que o pacote vem de um repositório Git
Método 2: Execução Direta do GitHub (Fallback)
Se uvx não estiver disponível, use:
{
"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"
}
}
}
}📋 Pré-requisitos
Python 3.8 ou superior
Acesso a um servidor SonarQube
Token de autenticação do SonarQube
uvinstalado (para método uvx) ou Python commcperequests
🔧 Instalação
Instalar uv (para usar uvx)
Windows:
irm https://astral.sh/uv/install.ps1 | iexLinux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | shInstalar dependências manualmente (se não usar uvx)
pip install mcp requestsComo obter o token do SonarQube
Acesse o SonarQube
Vá em My Account > Security
Gere um novo token
Copie o token (ele só será exibido uma vez)
🛠️ Ferramentas Disponíveis
1. search_issues
Busca issues do SonarQube em projetos.
Parâmetros:
projectKeys(array, opcional): Lista de chaves de projetosseverities(array, opcional): Filtrar por severidade (BLOCKER, CRITICAL, MAJOR, MINOR, INFO)statuses(array, opcional): Filtrar por status (OPEN, CONFIRMED, REOPENED, RESOLVED, CLOSED)pageSize(integer, opcional): Tamanho da página (padrão: 100)page(integer, opcional): Número da página (padrão: 1)
Exemplo:
search_issues com projectKeys=["com.thomsonreuters:rt-data-scanner"] e severities=["CRITICAL", "MAJOR"]2. get_project_measures
Obtém métricas de um projeto (cobertura, complexidade, linhas de código, etc.).
Parâmetros:
projectKey(string, obrigatório): Chave do projetometricKeys(array, opcional): Lista de métricas a buscar
Exemplo:
get_project_measures com projectKey="com.thomsonreuters:rt-data-scanner" e metricKeys=["coverage", "ncloc", "complexity"]3. get_quality_gate_status
Obtém o status do Quality Gate de um projeto.
Parâmetros:
projectKey(string, obrigatório): Chave do projeto
Exemplo:
get_quality_gate_status com projectKey="com.thomsonreuters:rt-data-scanner"4. list_projects
Lista todos os projetos disponíveis no SonarQube.
Parâmetros:
page(integer, opcional): Número da página
Exemplo:
list_projects5. get_project_issues_summary
Obtém um resumo das issues de um projeto agrupadas por severidade e status.
Parâmetros:
projectKey(string, obrigatório): Chave do projeto
Exemplo:
get_project_issues_summary com projectKey="com.thomsonreuters:rt-data-scanner"6. ping_sonarqube
Verifica se o servidor SonarQube está acessível.
Exemplo:
ping_sonarqube📖 Exemplos de Uso
Buscar todas as issues críticas de um projeto
search_issues com projectKeys=["com.thomsonreuters:rt-data-scanner"] e severities=["CRITICAL"]Obter métricas de cobertura
get_project_measures com projectKey="com.thomsonreuters:rt-data-scanner" e metricKeys=["coverage"]Verificar status do Quality Gate
get_quality_gate_status com projectKey="com.thomsonreuters:rt-data-scanner"🔄 Métodos de Execução
Método 1: uvx (Recomendado) ⭐
O uvx é similar ao npx do Node.js - executa pacotes Python diretamente sem instalação prévia.
Vantagens:
✅ Sem necessidade de clonar o repositório
✅ Sem necessidade de instalar dependências manualmente
✅ Sempre usa a versão mais recente
✅ Isolamento de dependências
Formato do comando:
uvx --from git+https://github.com/JoaobatistaJuniorTR/mcp-sonar.git mcp-sonarqubeMétodo 2: Clonar e Executar Localmente
git clone https://github.com/JoaobatistaJuniorTR/mcp-sonar.git
cd mcp-sonar
pip install -r requirements.txtDepois configure no Cursor:
{
"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"
}
}
}
}🆘 Troubleshooting
Erro: "uvx: command not found"
Instale o uv primeiro (veja seção de instalação acima).
Erro: "Failed to build"
Verifique se o repositório está acessível
Tente limpar o cache:
uv cache cleanVerifique se o
pyproject.tomlestá correto
Erro: "ModuleNotFoundError: No module named 'mcp'"
Se estiver usando o método manual, instale as dependências:
pip install mcp requestsErro: "SONARQUBE_URL e SONARQUBE_TOKEN devem ser configurados"
Verifique se as variáveis estão no
envdo JSONReinicie o Cursor após alterar a configuração
Erro de autenticação
Verifique se o token está correto e não expirou
Certifique-se de que o token tem as permissões necessárias
Erro de conexão
Verifique se a URL do SonarQube está correta
Verifique se há firewall ou proxy bloqueando a conexão
📝 Estrutura do Projeto
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🤝 Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.
📄 Licença
Este projeto é para uso interno da organização.
🔗 Links
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/JoaobatistaJuniorTR/mcp-sonar'
If you have feedback or need assistance with the MCP directory API, please join our Discord server