A análise estática de código da plataforma utiliza o MCP oficial do SonarQube, o SonarSource/sonarqube-mcp-server, mantido pela própria SonarSource. Ele conecta assistentes de IA (Claude, Gemini, Copilot, Cursor, etc.) à instância de qualidade de código do Embrapa I/O (code.embrapa.io), permitindo consultar as issues de cada aplicação, o Quality Gate, as métricas, as duplicações e os hotspots de segurança, e até analisar um trecho de código antes do commit, tudo via linguagem natural.
Assim como o MCP do Sentry, e diferente dos demais MCPs da plataforma (servidores HTTP com login OAuth e URL de conexão), este roda por transporte stdio: o processo executa localmente, na máquina do desenvolvedor, num container Docker, e se conecta ao code.embrapa.io com um token pessoal.
Conectar
Não há URL de conexão (o transporte é stdio). O servidor é a imagem Docker oficial sonarsource/sonarqube-mcp, executada localmente. Pré-requisitos:
- Docker instalado e em execução (Docker Desktop, OrbStack ou o Docker Engine no Linux);
- um token de usuário do SonarQube criado em
code.embrapa.io(veja abaixo).
Comando base (referência; os clientes abaixo encapsulam isto):
docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_URL sonarsource/sonarqube-mcp
com as variáveis de ambiente:
SONARQUBE_URL=https://code.embrapa.io, que aponta para a instância da plataforma (sem ela, e comSONARQUBE_ORG, o servidor tentaria o SonarQube Cloud);SONARQUBE_TOKEN, o seu token de usuário.
Criar o token
- Acesse code.embrapa.io e faça login com a sua conta do GitLab da plataforma;
- Clique no seu avatar, no canto superior direito, e vá em My Account → Security;
- Em Generate Tokens, dê um nome ao token (ex.:
mcp), escolha o tipo User Token e uma validade, e clique em Generate; - Copie o token gerado (começa com
squ_…): ele não é exibido novamente.
Atenção! Use um token do tipo User Token. Tokens de projeto ou globais não funcionam com o servidor MCP. O token herda as permissões da sua conta: você só enxerga as aplicações dos projetos dos quais participa na plataforma.
Dica! O
--pull=alwaysatualiza a imagem a cada início. Para um ambiente estável, troque-o por uma versão fixa da imagem (ex.:sonarsource/sonarqube-mcp:1.30.0.4763) e atualize deliberadamente.
Funcionalidades
O servidor oficial expõe tools para os principais fluxos de qualidade de código:
Projetos e branches: listagem das aplicações acessíveis (cada aplicação da plataforma é um projeto no SonarQube, com a chave projeto_app, p.e. pasto-certo_api), das branches e dos merge requests analisados.
Issues: busca das issues (bugs, vulnerabilidades e code smells) por aplicação, severidade e arquivo, com a regra violada e a explicação de como corrigir, e mudança de status (aceitar, marcar como falso positivo, reabrir).
Quality Gate: situação do Quality Gate de cada aplicação (aprovado ou reprovado) e as condições que falharam.
Métricas: medidas de cada aplicação ou arquivo, como linhas de código, cobertura, duplicação, dívida técnica e as notas de manutenibilidade, confiabilidade e segurança.
Duplicações: arquivos com código duplicado e os trechos repetidos.
Hotspots de segurança: busca, detalhamento e revisão dos trechos sensíveis que pedem verificação humana.
Análise de trecho de código: análise de um arquivo ou trecho enviado pelo assistente, com as regras do SonarQube, antes mesmo do commit.
Nota! A instância da plataforma não importa os relatórios de cobertura de testes do pipeline das aplicações. Por isso, as tools de cobertura (
search_files_by_coverageeget_file_coverage_details) e a métrica de cobertura costumam retornar vazio: não é falha do servidor nem do token.
Exemplos de Prompts
Abaixo, exemplos do que pode ser solicitado em linguagem natural a um assistente de IA conectado a este MCP:
Liste as minhas aplicações no SonarQube e a situação do Quality Gate de cada uma.
Por que o Quality Gate da aplicação pasto-certo/api está reprovado?
Mostre as condições que falharam.
Quais são as vulnerabilidades e os bugs de severidade alta da aplicação
controlpec/api? Para cada um, diga o arquivo, a linha e como corrigir.
Quais arquivos da aplicação mecaniza/pwa têm mais código duplicado?
Analise este trecho de código com as regras do SonarQube antes do commit.
Revise os hotspots de segurança abertos da aplicação fertiliza/backend
e me ajude a decidir quais são seguros.
Configuração no Claude Code
Como o transporte é stdio, a configuração informa o comando a executar (não uma URL). O Claude Code é o cliente de referência na plataforma: comece por ele.
Adicione o servidor com um único comando (--scope user o deixa disponível em qualquer projeto):
claude mcp add sonarqube --scope user \
--env SONARQUBE_TOKEN=SEU_TOKEN \
--env SONARQUBE_URL=https://code.embrapa.io \
-- docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_URL sonarsource/sonarqube-mcp
Confirme a conexão com claude mcp list (o sonarqube deve aparecer como connected) ou digitando /mcp dentro do Claude Code. Na primeira execução, o Docker baixa a imagem, o que pode levar alguns segundos.
Dica! Para impedir que o assistente altere o status de issues e hotspots, acrescente
--env SONARQUBE_READ_ONLY=truee-e SONARQUBE_READ_ONLYao comando: o servidor passa a expor só as tools de leitura.
Outros clientes
De forma acessória, os demais clientes usam o mesmo servidor stdio. O bloco JSON canônico (formato mcpServers) é:
{
"mcpServers": {
"sonarqube": {
"command": "docker",
"args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_URL",
"sonarsource/sonarqube-mcp"],
"env": { "SONARQUBE_TOKEN": "SEU_TOKEN", "SONARQUBE_URL": "https://code.embrapa.io" }
}
}
}
Cursor, Windsurf, Antigravity e Claude Desktop usam exatamente esse bloco: cole-o no arquivo correspondente:
| Cliente | Arquivo de configuração |
|---|---|
| Claude Desktop | claude_desktop_config.json (via Customize → Developer → Edit Config) |
| Cursor | ~/.cursor/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Google Antigravity | ~/.gemini/antigravity/mcp_config.json |
OpenAI Codex CLI e Gemini CLI, com a mesma lógica do Claude Code:
# OpenAI Codex CLI
codex mcp add sonarqube --env SONARQUBE_TOKEN=SEU_TOKEN --env SONARQUBE_URL=https://code.embrapa.io \
-- docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_URL sonarsource/sonarqube-mcp
# Gemini CLI
gemini mcp add sonarqube -e SONARQUBE_TOKEN=SEU_TOKEN -e SONARQUBE_URL=https://code.embrapa.io \
-- docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_URL sonarsource/sonarqube-mcp
VS Code (GitHub Copilot): em .vscode/mcp.json (por projeto) ou nas User Settings, usa a chave servers com type: stdio:
{
"servers": {
"sonarqube": {
"type": "stdio",
"command": "docker",
"args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_URL",
"sonarsource/sonarqube-mcp"],
"env": { "SONARQUBE_TOKEN": "SEU_TOKEN", "SONARQUBE_URL": "https://code.embrapa.io" }
}
}
}
GitHub Copilot CLI: dentro dele, /mcp add, com tipo Local, comando docker, os mesmos argumentos e as duas variáveis de ambiente. A configuração fica em ~/.copilot/mcp-config.json.
Nota! A partir destes exemplos é possível extrapolar para outros clientes com suporte a MCP
stdiocom poucos ajustes.
Referência Técnica
A superfície de tools do servidor oficial evolui entre versões. Na versão 1.30, conectada ao code.embrapa.io (SonarQube Community Build 25.1), são 18 tools:
| Domínio | Tools |
|---|---|
| Projetos | search_my_sonarqube_projects, list_branches, list_pull_requests |
| Issues e regras | search_sonar_issues_in_projects, change_sonar_issue_status, show_rule |
| Quality Gate | get_project_quality_gate_status, list_quality_gates |
| Métricas | get_component_measures, search_metrics |
| Duplicações | search_duplicated_files, get_duplications |
| Hotspots de segurança | search_security_hotspots, show_security_hotspot, change_security_hotspot_status |
| Cobertura (sem dados) | search_files_by_coverage, get_file_coverage_details: a plataforma não importa a cobertura dos testes; retornam vazio. |
| Análise | analyze_code_snippet |
Nota! O servidor exige o SonarQube Server 2025.1 ou o Community Build 25.1 em diante e confere a versão da instância ao iniciar. Para a referência completa e sempre atualizada das tools, parâmetros e variáveis, consulte a documentação oficial (links abaixo).