SonarQube

officiel

Fournit une intégration transparente avec SonarQube Server ou Cloud, et permet l'analyse d'extraits de code directement dans le contexte de l'agent.

Que pouvez-vous faire avec SonarQube MCP ?

  • Se connecter à SonarQube Cloud ou Server — Configurez le conteneur sonarsource/sonarqube-mcp avec un jeton, une clé d’organisation ou l’URL d’un serveur pour connecter votre assistant à SonarQube.
  • Analyser des extraits de code — Demandez à l’assistant d’analyser un extrait de code ou un fichier, en montant un espace de travail pour lire directement les fichiers sur le disque.
  • Rechercher et gérer les problèmes — Recherchez et mettez à jour les problèmes SonarQube à l’aide de l’ensemble d’outils issues.
  • Examiner les points sensibles de sécurité — Recherchez et examinez les points sensibles de sécurité à l’aide de l’ensemble d’outils security-hotspots.
  • Parcourir les projets et les portes de qualité — Consultez les clés de projet, les portes de qualité, les règles, les mesures et les données de couverture.
  • Limiter les ensembles d’outils et activer le mode lecture seule — Utilisez SONARQUBE_TOOLSETS et SONARQUBE_READ_ONLY pour contrôler les outils chargés et bloquer les opérations d’écriture.

Documentation

Sonar logo

Build Quality Gate Status

SonarQube MCP Server

Le SonarQube MCP Server est un serveur Model Context Protocol (MCP) qui permet une intégration transparente avec SonarQube Server ou Cloud pour la qualité et la sécurité du code. Il prend également en charge l’analyse d’extraits de code directement dans le contexte de l’agent.

Commencez par la configuration rapide, ou découvrez-en davantage sur la famille de produits SonarQube.

Configuration rapide

Bonnes pratiques de sécurité

🔒 Important : Votre jeton SonarQube est une information d’identification sensible. Respectez ces pratiques de sécurité :

Lors de l’utilisation de commandes CLI :

  • Évitez d’inscrire les jetons en dur dans les arguments de ligne de commande : ils sont enregistrés dans l’historique du shell
  • Utilisez des variables d’environnement : définissez les jetons dans des variables d’environnement avant d’exécuter les commandes

Lors de l’utilisation de fichiers de configuration :

  • Ne validez jamais de jetons dans le système de contrôle de version
  • Utilisez la substitution de variables d’environnement dans les fichiers de configuration lorsque c’est possible

🚀 Générer votre configuration

Le moyen le plus rapide de commencer est d’utiliser le générateur de configuration SonarQube MCP Server : un outil interactif qui produit une configuration prête à l’emploi pour le client de votre agent IA préféré.

Configuration manuelle

Si vous préférez configurer les éléments vous-même, la méthode la plus simple consiste à utiliser notre image de conteneur sonarsource/sonarqube-mcp. Utilisez sonarsource/sonarqube-mcp pour les mises à jour automatiques (avec --pull=always), ou épinglez une balise de version (par exemple, sonarsource/sonarqube-mcp:1.19.0.2785) pour des déploiements reproductibles. Certaines versions sont également balisées avec la version de SonarQube Server à laquelle elles correspondent, sous la forme <SQS major>.<SQS minor>.<patch> (par exemple, sonarsource/sonarqube-mcp:2026.5.0), le numéro de correctif étant incrémenté pour chaque version MCP ciblant cette version de SonarQube Server. Consultez la suite si vous souhaitez le compiler localement.

Remarque : Bien que les exemples ci-dessous utilisent docker, tout environnement d’exécution de conteneurs compatible OCI convient (par exemple, Podman, nerdctl). Remplacez simplement docker par l’outil de votre choix.

Antigravity

SonarQube MCP Server est disponible dans la boutique MCP d’Antigravity. Suivez ces instructions :

  1. Ouvrez le panneau latéral de l’agent
  2. Cliquez sur les trois points (...) en haut à droite et sélectionnez MCP Servers
  3. Recherchez SonarQube et sélectionnez Install
  4. Fournissez le jeton utilisateur SonarQube requis. Vous pouvez également fournir la clé de votre organisation pour SonarQube Cloud ou l’URL de SonarQube si vous vous connectez à SonarQube Server.

Pour SonarQube Cloud US, définissez l’URL sur https://sonarqube.us.

Vous pouvez également configurer manuellement le serveur via mcp_config.json :

  • Pour vous connecter à SonarQube Cloud :

Dans le panneau latéral de l’agent, cliquez sur les trois points (...) -> MCP Store -> Manage MCP Servers -> View raw config, puis ajoutez ce qui suit :

{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_ORG", "sonarsource/sonarqube-mcp"],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_TOKEN>",
        "SONARQUBE_ORG": "<YOUR_ORG>"
      }
    }
  }
}

Pour SonarQube Cloud US, ajoutez "SONARQUBE_URL": "https://sonarqube.us" à la section env et "-e", "SONARQUBE_URL" au tableau args.

  • Pour vous connecter à SonarQube Server :
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_URL", "sonarsource/sonarqube-mcp"],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_USER_TOKEN>",
        "SONARQUBE_URL": "<YOUR_SERVER_URL>"
      }
    }
  }
}
Claude Code
  • Pour vous connecter à SonarQube Cloud :
claude mcp add sonarqube \
  --env SONARQUBE_TOKEN=$SONAR_TOKEN \
  --env SONARQUBE_ORG=$SONAR_ORG \
  -- docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_ORG sonarsource/sonarqube-mcp

Pour SonarQube Cloud US, ajoutez --env SONARQUBE_URL=https://sonarqube.us à la commande.

  • Pour vous connecter à SonarQube Server :
claude mcp add sonarqube \
  --env SONARQUBE_TOKEN=$SONAR_USER_TOKEN \
  --env SONARQUBE_URL=$SONAR_URL \
  -- docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_URL sonarsource/sonarqube-mcp
Codex CLI

Modifiez manuellement le fichier de configuration situé à ~/.codex/config.toml et ajoutez la configuration suivante :

  • Pour vous connecter à SonarQube Cloud :
[mcp_servers.sonarqube]
command = "docker"
args = ["run", "--init", "--pull=always", "--rm", "-i", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_ORG", "sonarsource/sonarqube-mcp"]
env = { "SONARQUBE_TOKEN" = "<YOUR_USER_TOKEN>", "SONARQUBE_ORG" = "<YOUR_ORG>" }

Pour SonarQube Cloud US, ajoutez "SONARQUBE_URL" = "https://sonarqube.us" à la section env et "-e", "SONARQUBE_URL" au tableau args.

  • Pour vous connecter à SonarQube Server :
[mcp_servers.sonarqube]
command = "docker"
args = ["run", "--init", "--pull=always", "--rm", "-i", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_URL", "sonarsource/sonarqube-mcp"]
env = { "SONARQUBE_TOKEN" = "<YOUR_TOKEN>", "SONARQUBE_URL" = "<YOUR_SERVER_URL>" }
Cursor
  • Pour vous connecter à SonarQube Cloud :

Install for SonarQube Cloud

Pour SonarQube Cloud US, ajoutez manuellement "SONARQUBE_URL": "https://sonarqube.us" à la section env de votre configuration MCP après l’installation.

  • Pour vous connecter à SonarQube Server :

Install for SonarQube Server

Gemini CLI

Remarque : L’extension Gemini CLI a été déplacée vers le dépôt sonarqube-agent-plugins. Veuillez désormais l’installer depuis ce dépôt.

Vous pouvez installer notre extension de serveur MCP à l’aide de la commande suivante :

gemini extensions install https://github.com/SonarSource/sonarqube-agent-plugins

Vous devrez définir les variables d’environnement requises avant de démarrer Gemini :

Variables d’environnement requises :

  • Pour SonarQube Cloud :

    • SONARQUBE_TOKEN - Votre jeton SonarQube Cloud
    • SONARQUBE_ORG - Votre clé d’organisation
    • SONARQUBE_URL - (Facultatif) Définissez sur https://sonarqube.us pour SonarQube Cloud US
  • Pour SonarQube Server :

    • SONARQUBE_TOKEN - Votre jeton USER SonarQube Server
    • SONARQUBE_URL - L’URL de votre SonarQube Server

Une fois installée, l’extension se trouvera sous <home>/.gemini/extensions/sonarqube/gemini-extension.json.

GitHub Copilot CLI

Après avoir démarré Copilot CLI, exécutez la commande suivante pour ajouter le serveur SonarQube MCP :

/mcp add

Vous devrez fournir différentes informations sur le serveur MCP. Vous pouvez utiliser la touche Tab pour passer d’un champ à l’autre.

  • Pour vous connecter à SonarQube Cloud :
Server Name: sonarqube
Server Type: Local (Press 1)
Command: docker
Arguments: run, --init, --pull=always, --rm, -i, -e, SONARQUBE_TOKEN, -e, SONARQUBE_ORG, sonarsource/sonarqube-mcp
Environment Variables: SONARQUBE_TOKEN=<YOUR_TOKEN>,SONARQUBE_ORG=<YOUR_ORG>
Tools: *

Pour SonarQube Cloud US, ajoutez -e, SONARQUBE_URL aux arguments et SONARQUBE_URL=https://sonarqube.us aux variables d’environnement.

  • Pour vous connecter à SonarQube Server :
Server Name: sonarqube
Server Type: Local (Press 1)
Command: docker
Arguments: run, --init, --pull=always, --rm, -i, -e, SONARQUBE_TOKEN, -e, SONARQUBE_URL, sonarsource/sonarqube-mcp
Environment Variables: SONARQUBE_TOKEN=<YOUR_USER_TOKEN>,SONARQUBE_URL=<YOUR_SERVER_URL>
Tools: *

Le fichier de configuration se trouve à l’emplacement ~/.copilot/mcp-config.json.

Agent de codage GitHub Copilot

L’agent de codage GitHub Copilot peut utiliser directement le serveur SonarQube MCP dans votre CI/CD.

Pour ajouter les secrets à votre environnement Copilot, suivez la documentation de Copilot. Seuls les secrets dont le nom est préfixé par COPILOT_MCP_ seront disponibles dans votre configuration MCP.

Dans votre dépôt GitHub, accédez à Settings -> Copilot -> Coding agent, puis ajoutez la configuration suivante dans la section de configuration MCP :

  • Pour vous connecter à SonarQube Cloud :
{
  "mcpServers": {
    "sonarqube": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "--rm",
        "-i",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "COPILOT_MCP_SONARQUBE_TOKEN",
        "SONARQUBE_ORG": "COPILOT_MCP_SONARQUBE_ORG"
      },
      "tools": ["*"]
    }
  }
}

Pour SonarQube Cloud US, ajoutez "-e", "SONARQUBE_URL" au tableau args et "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL" à la section env, puis définissez le secret COPILOT_MCP_SONARQUBE_URL=https://sonarqube.us.

  • Pour vous connecter à SonarQube Server :
{
  "mcpServers": {
    "sonarqube": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "--rm",
        "-i",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_URL",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "COPILOT_MCP_SONARQUBE_USER_TOKEN",
        "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL"
      },
      "tools": ["*"]
    }
  }
}
Kiro

Créez un fichier .kiro/settings/mcp.json dans le répertoire de votre espace de travail (ou modifiez-le s’il existe déjà), puis ajoutez la configuration suivante :

  • Pour vous connecter à SonarQube Cloud :
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e", 
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_TOKEN>",
        "SONARQUBE_ORG": "<YOUR_ORG>"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Pour SonarQube Cloud US, ajoutez "-e", "SONARQUBE_URL" au tableau args et "SONARQUBE_URL": "https://sonarqube.us" à la section env.

  • Pour vous connecter à SonarQube Server :
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e", 
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_URL",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_USER_TOKEN>",
        "SONARQUBE_URL": "<YOUR_SERVER_URL>"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
VS Code

Vous pouvez utiliser les boutons suivants pour simplifier le processus d’installation dans VS Code.

Install for SonarQube Cloud

Pour SonarQube Cloud US, ajoutez manuellement "SONARQUBE_URL": "https://sonarqube.us" à la section env de votre configuration MCP après l’installation.

Install for SonarQube Server

Windsurf

SonarQube MCP Server est disponible en tant que plug-in Windsurf. Suivez ces instructions :

  1. Ouvrez Settings > Cascade > MCP Servers dans Windsurf et sélectionnez Open MCP Marketplace
  2. Recherchez sonarqube dans la boutique MCP de Cascade
  3. Choisissez SonarQube MCP Server et sélectionnez Install
  4. Ajoutez le jeton utilisateur SonarQube requis. Vous pouvez également ajouter une clé d’organisation par défaut pour SonarQube Cloud, ou l’URL de SonarQube pour SonarQube Server ou Community Build.

Pour SonarQube Cloud US, définissez l’URL sur https://sonarqube.us.

Zed

Accédez à la vue Extensions dans Zed et recherchez SonarQube MCP Server. Lors de l’installation de l’extension, vous serez invité à fournir les variables d’environnement nécessaires :

  • Pour SonarQube Cloud :
{
  "sonarqube_token": "YOUR_SONARQUBE_TOKEN",
  "sonarqube_org": "SONARQUBE_ORGANIZATION_KEY",
  "docker_path": "DOCKER_PATH"
}

Pour SonarQube Cloud US, ajoutez "sonarqube_url": "https://sonarqube.us" à la configuration.

  • Pour SonarQube Server :
{
  "sonarqube_token": "YOUR_SONARQUBE_USER_TOKEN",
  "sonarqube_url": "YOUR_SONARQUBE_SERVER_URL",
  "docker_path": "DOCKER_PATH"
}

docker_path correspond au chemin d’accès à un exécutable docker. Exemples :

Linux/macOS : /usr/bin/docker ou /usr/local/bin/docker

Windows : C:\Program Files\Docker\Docker\resources\bin\docker.exe

💡 Conseil : Nous vous recommandons de récupérer régulièrement la dernière image, ou de le faire avant de signaler un problème, afin de disposer des fonctionnalités et correctifs les plus récents.

Installation manuelle

Vous pouvez installer manuellement le serveur SonarQube MCP en copiant l’extrait suivant dans le fichier de configuration des serveurs MCP :

  • Pour vous connecter à SonarQube Cloud :
{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_ORG",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>"
    }
  }
}
  • Pour vous connecter à SonarQube Server :
{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

Intégration avec SonarQube for IDE

Le SonarQube MCP Server peut s’intégrer à SonarQube for IDE afin d’améliorer davantage votre flux de développement, en fournissant une meilleure analyse du code et des informations directement dans votre IDE.

Configuration

Lorsque vous utilisez SonarQube for IDE, la variable d’environnement SONARQUBE_IDE_PORT doit être définie avec le numéro de port correct. SonarQube for VS Code comprend un bouton d’installation rapide qui configure automatiquement le port approprié.

Par exemple, avec SonarQube Cloud :

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_ORG",
      "-e",
      "SONARQUBE_IDE_PORT",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>",
      "SONARQUBE_IDE_PORT": "<64120-64130>"
    }
  }
}

Lors de l’exécution du serveur MCP dans un conteneur sous Linux, le conteneur ne peut pas accéder au serveur intégré de SonarQube for IDE exécuté sur localhost. Pour permettre au conteneur de se connecter au serveur SonarQube for IDE, ajoutez l’option --network=host à la commande de lancement du conteneur.

Configuration

Selon votre environnement, vous devez fournir des variables d’environnement spécifiques.

Base

Vous devez ajouter la variable suivante lors de l’exécution du serveur MCP :

Variable d’environnementDescription
STORAGE_PATHChemin absolu obligatoire vers un répertoire accessible en écriture où SonarQube MCP Server stockera ses fichiers (par exemple, pour leur création, leur mise à jour et leur persistance). Il est fourni automatiquement lors de l’utilisation de l’image de conteneur
SONARQUBE_PROJECT_KEYClé de projet par défaut facultative. Lorsqu’elle est définie, tous les outils qui nécessitent une clé de projet utilisent automatiquement cette valeur — le paramètre projectKey est entièrement supprimé de leur schéma. Utile lorsque vous travaillez sur un seul projet.
SONARQUBE_IDE_PORTNuméro de port facultatif compris entre 64120 et 64130, utilisé pour connecter SonarQube MCP Server à SonarQube for IDE.
SONARQUBE_FORCE_LOCAL_ANALYSISDéfinissez sur true pour utiliser analyze_code_snippet à la place de l’analyse Vortex sur Cloud stdio, y compris pour les organisations éligibles. Nécessite le jeu d’outils analysis. Valeur par défaut : false. Sans effet sur SonarQube Server ou Cloud HTTP.
SONARQUBE_DEBUG_ENABLEDLorsque cette variable est définie sur true, la journalisation de débogage est activée. Les journaux de débogage sont écrits à la fois dans le fichier journal et sur STDERR. Utile pour diagnostiquer les problèmes de connectivité ou de configuration. Valeur par défaut : false.
SONARQUBE_LOG_TO_FILE_DISABLEDLorsque cette variable est définie sur true, l’écriture des journaux sur le disque est entièrement désactivée. Aucun fichier journal ne sera créé sous STORAGE_PATH/logs/. Utile dans les environnements conteneurisés ou éphémères où la journalisation dans des fichiers n’est pas souhaitable. Valeur par défaut : false.

Montage de l’espace de travail (réduction de l’encombrement du contexte)

Par défaut, l’outil d’analyse analyze_code_snippet exige que l’agent transmette le contenu intégral du fichier comme argument fileContent. Pour les fichiers volumineux ou l’analyse de nombreux fichiers au cours d’une session, cela augmente considérablement l’utilisation de la fenêtre de contexte et le coût.

Solution : montez le répertoire de votre projet dans le conteneur à l’emplacement /app/mcp-workspace. Lorsque ce montage est détecté, le serveur lit directement les fichiers sur le disque à l’aide de l’argument filePath relatif au projet — le contenu des fichiers ne transite jamais par le contexte de l’agent.

{
  "args": [
    "run", "-i", "--rm", "--init", "--pull=always",
    "-e", "SONARQUBE_TOKEN",
    "-e", "SONARQUBE_ORG",
    "-v", "/path/to/your/project:/app/mcp-workspace",
    "sonarsource/sonarqube-mcp"
  ]
}

Avec un montage, les outils d’analyse lisent directement les fichiers à l’aide de filePath ; fileContent n’est pas nécessaire.

Avec stdio, le type d’analyse est sélectionné au démarrage (selon les jeux d’outils activés) :

  • SonarQube Cloud : analyse Vortex (run_advanced_code_analysis) avec un montage de l’espace de travail et au moins une organisation éligible ; analyse locale dans les autres cas. L’analyse Vortex n’accepte que les organisations éligibles.
  • SonarQube Server : analyse Vortex pour les instances éligibles (nécessite un montage de l’espace de travail) ; analyse locale pour les instances sans Vortex.

L’analyse locale utilise SonarQube for IDE s’il est connecté, ou analyze_code_snippet. Sans montage, l’analyse d’extraits nécessite fileContent.

Sur Cloud stdio, SONARQUBE_ORG limite la vérification d’éligibilité à cette organisation. Pour utiliser des extraits pour toutes les organisations, définissez SONARQUBE_FORCE_LOCAL_ANALYSIS=true, activez le jeu d’outils analysis, puis redémarrez. Ce paramètre ne concerne que Cloud stdio.

Sur HTTP/HTTPS, Cloud et Server prennent en charge analyze_code_snippet lorsque le serveur MCP dispose d’un SONARQUBE_TOKEN au démarrage et que le jeu d’outils analysis est activé. Le jeton de démarrage est nécessaire à l’initialisation de l’analyseur (les téléchargements de plug-ins Cloud sont anonymes) ; les appels utilisent le jeton de l’appelant et, sur Cloud, l’organisation sélectionnée pour la requête afin de récupérer les profils de qualité et les règles actives. Sans jeton de démarrage, l’analyse d’extraits et les téléchargements d’analyseurs sont désactivés, même avec SONARQUBE_FORCE_LOCAL_ANALYSIS=true. L’éligibilité Vortex n’est pas requise.

Activation sélective des outils

Les clients MCP chargent chaque outil activé — son nom, sa description et son schéma d’entrée — dans le contexte de l’agent à chaque conversation. Limiter cette liste avec SONARQUBE_TOOLSETS réduit l’utilisation du contexte et le coût en jetons de chaque session.

Par défaut, seuls les jeux d’outils importants sont activés. N’activez des jeux d’outils supplémentaires qu’en cas de besoin.

Variable d’environnementDescription
SONARQUBE_TOOLSETSListe de jeux d’outils à activer, séparés par des virgules. Lorsqu’elle est définie, seuls ces jeux d’outils sont disponibles. Si elle n’est pas définie, les jeux d’outils importants par défaut sont activés (analysis, ide, issues, projects, quality-gates, rules, duplications, measures, security-hotspots, dependency-risks, coverage, cag). Remarque : le jeu d’outils projects est toujours activé, car il est nécessaire pour trouver les clés de projet utilisées par d’autres opérations. Les outils de contexte Vortex (ancien nom : Context Augmentation/CAG) et les outils d’analyse Vortex (ancien nom : Advanced Analysis/A3S) ne sont disponibles qu’en mode stdio et partagent une seule éligibilité organisationnelle : une organisation doit être éligible aux deux pour pouvoir utiliser l’un ou l’autre. L’analyse intégrée de Cloud vérifie l’organisation sélectionnée à l’exécution ; les outils de contexte par proxy utilisent l’organisation de démarrage. Sur SonarQube Server, stdio répertorie le contexte Vortex et run_advanced_code_analysis lorsque les hubs CAG et A3S sont tous deux éligibles. Préférez la clé de jeu d’outils unifiée vortex. Les clés obsolètes cag et analysis restent fonctionnelles ; un avertissement au démarrage et une note d’obsolescence dans les instructions du serveur sont émis lorsqu’elles sont utilisées sans vortex. En mode Streamable HTTP, les clients peuvent envoyer un en-tête HTTP SONARQUBE_TOOLSETS pour restreindre davantage les outils par requête, mais ne peuvent pas activer de jeux d’outils au-delà de ceux avec lesquels le serveur a été lancé (voir Transport Streamable HTTP ci-dessous).
SONARQUBE_READ_ONLYLorsque cette variable est définie sur true, le mode lecture seule est activé et toutes les opérations d’écriture sont désactivées (par exemple, la modification du statut d’un problème). Ce filtre se cumule avec SONARQUBE_TOOLSETS si les deux sont définis. Valeur par défaut : false. En mode Streamable HTTP, les clients peuvent envoyer un en-tête HTTP SONARQUBE_READ_ONLY pour imposer le mode lecture seule à des requêtes individuelles, mais ne peuvent pas lever une restriction de lecture seule définie au niveau du serveur (voir Transport Streamable HTTP ci-dessous).
Jeux d’outils disponibles | Ensemble d’outils | Clé | Description | |-----------------------|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Analyse** | `analysis` | Outils d’analyse de code (analyse locale via `analyze_code_snippet`, **obsolète** au profit de l’analyse `analyze_file_list`/Vortex) | | **IDE** | `ide` | Outils de passerelle SonarQube for IDE (analyse de fichiers, activation/désactivation de l’analyse automatique) — également inclus actuellement dans `analysis` | | **Problèmes** | `issues` | Rechercher et gérer les problèmes SonarQube | | **Points sensibles de sécurité** | `security-hotspots` | Rechercher et examiner les points sensibles de sécurité | | **Projets** | `projects` | Parcourir et rechercher des projets SonarQube | | **Portes de qualité** | `quality-gates` | Accéder aux portes de qualité et à leur état | | **Règles** | `rules` | Parcourir et rechercher des règles SonarQube | | **Sources** | `sources` | Accéder au code source et aux informations SCM | | **Duplications** | `duplications` | Rechercher les duplications de code entre les projets | | **Mesures** | `measures` | Récupérer les mesures et les métriques (inclut les outils de mesures et de métriques) | | **Langages** | `languages` | Répertorier les langages de programmation pris en charge | | **Portefeuilles** | `portfolios` | Gérer les portefeuilles et les entreprises (Cloud et Server) | | **Système** | `system` | Outils d’administration système (Server uniquement) | | **Webhooks** | `webhooks` | Gérer les webhooks | | **Risques liés aux dépendances** | `dependency-risks` | Analyser les risques liés aux dépendances et les problèmes de sécurité (SCA) | | **Couverture** | `coverage` | Outils d’analyse et d’amélioration de la couverture des tests | | **Contexte Vortex** | `cag` | Outils de contexte Vortex — stdio uniquement. **Obsolète** au profit de `vortex` (ancien nom : Context Augmentation/CAG) | | **Vortex** | `vortex` | Ensemble d’outils unifié et **recommandé**, regroupant les outils de contexte et d’analyse Vortex sous un même nom (stdio uniquement ; Cloud nécessite un droit d’organisation combiné ; Server nécessite que les deux hubs soient autorisés) | | **Préparation agentique** | `agentic-readiness` | Outils d’évaluation de la préparation agentique (SonarQube Cloud, nécessite un droit d’organisation) | | **Architecture** | `architecture` | Lire l’architecture, remplacer les modèles prévus et gérer les directives du projet (non activé par défaut) |

Exemples

Activer les ensembles d’outils d’analyse, de problèmes et de portes de qualité (avec Docker et SonarQube Cloud) :

docker run --init --pull=always -i --rm \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_ORG="<org>" \
  -e SONARQUBE_TOOLSETS="analysis,issues,quality-gates" \
  sonarsource/sonarqube-mcp

Remarque : l’ensemble d’outils projects est toujours activé automatiquement ; vous n’avez donc pas besoin de l’inclure dans SONARQUBE_TOOLSETS.

Activer le mode lecture seule (avec Docker et SonarQube Cloud) :

docker run --init --pull=always -i --rm \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_ORG="<org>" \
  -e SONARQUBE_READ_ONLY="true" \
  sonarsource/sonarqube-mcp

SonarQube Cloud

Pour stdio, configurez les variables d’environnement suivantes :

Variable d’environnementDescriptionObligatoire
SONARQUBE_TOKENVotre jeton SonarQube CloudOui
SONARQUBE_ORGClé d’organisation SonarQube Cloud fixe facultativeNon
SONARQUBE_URLURL SonarQube Cloud personnalisée (par défaut, https://sonarcloud.io). Utilisez cette valeur pour SonarQube Cloud US : https://sonarqube.usNon

Exemples :

  • SonarQube Cloud : seul SONARQUBE_TOKEN est requis. SONARQUBE_ORG fixe l’organisation lorsqu’il est défini.
  • SonarQube Cloud US : définissez SONARQUBE_TOKEN et SONARQUBE_URL=https://sonarqube.us ; SONARQUBE_ORG est facultatif.

SonarQube Server

Variable d’environnementDescriptionObligatoire
SONARQUBE_TOKENVotre jeton USER SonarQube ServerOui
SONARQUBE_URLURL de votre SonarQube ServerOui

Version requise : SonarQube Server 2025.1 (SQS) ou 25.1 (SonarQube Community Build), ou une version ultérieure, est requis. Au démarrage, le serveur MCP lit la version de l’instance connectée et quitte avec une erreur si elle est trop ancienne (par exemple, les versions héritées 9.x/10.x de Server et les versions 24.x de Community Build ne sont pas prises en charge). SonarQube Cloud n’est pas soumis à cette vérification.

⚠️ La connexion à SonarQube Server nécessite un jeton de type USER et ne fonctionnera pas correctement si des jetons de projet ou des jetons globaux sont utilisés.

💡 Conseil de configuration (mode stdio) : un jeton sans URL utilise SonarQube Cloud par défaut. Définissez SONARQUBE_URL pour SonarQube Server ou une autre région Cloud. SONARQUBE_ORG fixe l’organisation Cloud lorsqu’il est défini.

En mode stdio, la définition de SONARQUBE_ORG fixe l’organisation Cloud. Les arguments de l’outil organization sont omis des schémas et rejetés, comme projectKey lorsque SONARQUBE_PROJECT_KEY est défini.

Lorsque SONARQUBE_ORG n’est pas défini, les agents peuvent appeler list_organizations pour découvrir les clés, noms, ID et UUID des organisations accessibles à leur compte utilisateur, puis transmettre une clé comme argument facultatif organization aux outils prenant en charge les organisations. Stdio conserve comme valeur par défaut une organisation détectée de manière unique ; si aucune organisation ou plusieurs organisations sont détectées, elle reste indéterminée. Un argument d’outil ne s’applique qu’à cet appel et ne modifie jamais la valeur par défaut détectée. Les recherches de profils d’extraits et de règles utilisent l’organisation sélectionnée pour cet appel.

Pour les requêtes de jeton HTTP/HTTPS, SONARQUBE_ORG au niveau du serveur reste pris en charge pour assurer la compatibilité, mais est obsolète et génère un avertissement au démarrage. Il fixe l’organisation pour chaque requête et rejette les en-têtes d’organisation du client ainsi que les arguments organization des outils. Lorsqu’aucune organisation n’est configurée sur le serveur, un en-tête client facultatif SONARQUBE_ORG fixe l’organisation pour cette requête et interdit les arguments organization des outils. En l’absence d’en-tête, utilisez l’argument de l’outil. Les outils qui nécessitent une organisation fournissent des instructions de découverte si toutes ces options sont absentes. La découverte des organisations et les outils dont les API utilisent uniquement des identifiants de ressources ne nécessitent pas d’argument d’organisation. La recherche de problèmes tenant compte de l’organisation et les vérifications des droits liés aux risques de dépendances utilisent l’organisation sélectionnée. Lorsque OAuth est configuré, SONARQUBE_ORG au niveau du serveur est rejeté. Les requêtes OAuth rejettent également les en-têtes d’organisation ; sélectionnez les organisations au moyen des arguments des outils.

Les outils de contexte Vortex utilisent l’organisation configurée ou détectée de manière unique au démarrage. Les arguments d’organisation fournis à l’exécution ne reconfigurent pas le moteur de contexte mandataire ; si l’organisation n’est pas déterminée au démarrage, ce proxy est ignoré. L’outil intégré run_advanced_code_analysis vérifie les droits combinés Vortex pour l’organisation sélectionnée à chaque appel.

Modes de transport

La spécification MCP définit deux mécanismes de transport : Stdio et Streamable HTTP. Le serveur MCP SonarQube prend en charge les deux :

Transport MCPMode serveurUtilisation habituelle
StdioPar défaut (sans SONARQUBE_TRANSPORT)Clients MCP locaux qui lancent le serveur en tant que sous-processus (Cursor, Claude Code, VS Code, etc.)
Streamable HTTPSONARQUBE_TRANSPORT=http ou httpsDéploiements distants ou multi-utilisateurs ; les clients se connectent à /mcp via HTTP(S) (par ex. Windsurf avec l’URL d’un serveur auto-hébergé)

Remarque : Streamable HTTP est le transport réseau MCP actuel. L’ancien transport HTTP SSE uniquement des versions précédentes de MCP est obsolète et n’est pas pris en charge.

1. Stdio (par défaut — recommandé pour le développement local)

Mode recommandé pour le développement local et les configurations mono-utilisateur, utilisé par la plupart des clients MCP.

Exemple — Docker avec SonarQube Cloud :

{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": ["run", "--init", "--pull=always", "-i", "--rm", "-e", "SONARQUBE_TOKEN", "-e", "SONARQUBE_ORG", "sonarsource/sonarqube-mcp"],
      "env": {
        "SONARQUBE_TOKEN": "<your-token>",
        "SONARQUBE_ORG": "<your-org>"
      }
    }
  }
}

2. HTTP (Streamable HTTP)

Transport Streamable HTTP non chiffré. Utilisez plutôt HTTPS pour les déploiements multi-utilisateurs.

⚠️ Non recommandé : utilisez Stdio pour le développement local ou HTTPS (Streamable HTTP) pour les déploiements de production multi-utilisateurs.

Variable d’environnementDescriptionValeur par défaut
SONARQUBE_TRANSPORTDéfinissez sur http pour activer le transport Streamable HTTPNon défini (stdio)
SONARQUBE_HTTP_PORTNuméro de port (1024-65535), ou 0 pour un port attribué par le système d’exploitation8080
SONARQUBE_HTTP_HOSTHôte auquel se lier (localhost par défaut, pour des raisons de sécurité)127.0.0.1
SONARQUBE_HTTP_ALLOWED_ORIGINSOrigines de navigateur autorisées pour CORS, séparées par des virgules (par ex. https://my-app.example.com)Non défini
SONARQUBE_MCP_IN_CONTAINERDéfinissez sur true lors de l’exécution dans un conteneur. L’image Docker officielle le définit automatiquement ; définissez-le vous-même avec d’autres environnements d’exécution OCI (Podman, Kubernetes, Nomad, etc.).false
Remarque : HTTP/HTTPS accepte le jeton SonarQube de l’utilisateur via Authorization: Bearer <token>. Le service Cloud hébergé de Sonar prend également en charge OAuth. Pour les requêtes de jeton SonarQube Cloud, l’organisation est déterminée comme suit :
  • SONARQUBE_ORG est un en-tête de requête facultatif qui fixe l’organisation pour cette requête. La configuration au niveau du serveur, désormais obsolète, la fixe pour toutes les requêtes et rejette les en-têtes d’organisation du client ainsi que les arguments d’organisation des outils.
  • Les outils prenant en charge les organisations acceptent un argument organization facultatif lorsque ni la configuration du serveur ni l’en-tête de requête ne fixe l’organisation. La fourniture de cet argument lorsque l’organisation est fixée est rejetée.
  • En l’absence de valeur par défaut, les agents peuvent appeler list_organizations avec leur seul jeton, puis transmettre la clé choisie aux outils suivants.

Les clients peuvent également restreindre les outils visibles pour chaque requête en fournissant les en-têtes SONARQUBE_TOOLSETS et/ou SONARQUBE_READ_ONLY ; ceux-ci appliquent un filtrage supplémentaire à la configuration au niveau du serveur : ils peuvent uniquement réduire la portée, jamais l’élargir. Aucun état de session n’est conservé entre les requêtes.

Obsolète : Pour les jetons SonarQube, l’en-tête de requête SONARQUBE_TOKEN est toujours accepté pour assurer la rétrocompatibilité, mais sera supprimé dans une version ultérieure. Migrez vers Authorization: Bearer <token>.

3. HTTPS (HTTP Streamable sur TLS) (recommandé pour les déploiements de production multi-utilisateurs)

Transport HTTP Streamable sécurisé avec chiffrement TLS. Nécessite des certificats SSL.

✅ Recommandé pour la production : utilisez HTTPS lors du déploiement du serveur MCP pour plusieurs utilisateurs via HTTP Streamable. Par défaut, le serveur se lie à 127.0.0.1 (localhost) pour des raisons de sécurité.

Variable d’environnementDescriptionValeur par défaut
SONARQUBE_TRANSPORTDéfinissez sur https pour activer le transport HTTP Streamable sur TLSNon défini (stdio)
SONARQUBE_HTTP_PORTNuméro de port (généralement 8443 pour HTTPS), ou 0 pour un port attribué par le système d’exploitation8080
SONARQUBE_HTTP_HOSTHôte auquel se lier (localhost par défaut pour des raisons de sécurité)127.0.0.1
SONARQUBE_HTTP_ALLOWED_ORIGINSOrigines de navigateur autorisées pour CORS, séparées par des virgules (par ex. https://my-app.example.com)Non défini
SONARQUBE_MCP_IN_CONTAINERDéfinissez sur true lors de l’exécution dans un conteneur. L’image Docker officielle le définit automatiquement ; définissez-le vous-même avec d’autres environnements d’exécution OCI (Podman, Kubernetes, Nomad, etc.).false

Configuration du certificat SSL (facultatif) :

Variable d’environnementDescriptionValeur par défaut
SONARQUBE_HTTPS_KEYSTORE_PATHChemin vers le fichier de keystore (.p12 ou .jks)/etc/ssl/mcp/keystore.p12
SONARQUBE_HTTPS_KEYSTORE_PASSWORDMot de passe du keystoresonarlint
SONARQUBE_HTTPS_KEYSTORE_TYPEType de keystore (PKCS12 ou JKS)PKCS12

Exemple - Docker avec SonarQube Cloud :

Remarque : lors de l’exécution dans un conteneur, définissez SONARQUBE_HTTP_HOST=0.0.0.0 afin que le conteneur écoute sur toutes les interfaces et que le mappage de ports de l’environnement d’exécution fonctionne, puis définissez SONARQUBE_MCP_IN_CONTAINER=true pour indiquer au serveur qu’il se trouve dans un conteneur. L’image Docker officielle définit automatiquement ce dernier ; définissez-le vous-même avec d’autres environnements d’exécution OCI (Podman, Kubernetes, Nomad, etc.). L’option de port côté hôte détermine qui peut accéder au serveur depuis l’extérieur du conteneur. SONARQUBE_HTTP_HOST=0.0.0.0 détermine uniquement où le serveur écoute à l’intérieur du conteneur : par défaut, CORS autorise toujours les origines localhost des navigateurs.

Pour un serveur exécuté localement sur votre machine (accessible uniquement depuis localhost) :

docker run --init --pull=always -p 127.0.0.1:8443:8443 \
  -v $(pwd)/keystore.p12:/etc/ssl/mcp/keystore.p12:ro \
  -e SONARQUBE_TRANSPORT=https \
  -e SONARQUBE_HTTP_HOST=0.0.0.0 \
  -e SONARQUBE_HTTP_PORT=8443 \
  sonarsource/sonarqube-mcp

Pour un serveur accessible depuis le réseau (déploiements distants) :

docker run --init --pull=always -p 8443:8443 \
  -v $(pwd)/keystore.p12:/etc/ssl/mcp/keystore.p12:ro \
  -e SONARQUBE_TRANSPORT=https \
  -e SONARQUBE_HTTP_HOST=0.0.0.0 \
  -e SONARQUBE_HTTP_PORT=8443 \
  sonarsource/sonarqube-mcp

Configuration du client (SonarQube Cloud) :

Pour les requêtes de jeton SonarQube, définissez éventuellement SONARQUBE_ORG dans les en-têtes du client afin de fixer l’organisation de la requête, ou omettez-le pour sélectionner les organisations au moyen des arguments des outils.

{
  "mcpServers": {
    "sonarqube-https": {
      "url": "https://your-server:8443/mcp",
      "headers": {
        "Authorization": "Bearer <your-token>",
        "SONARQUBE_TOOLSETS": "issues,quality-gates",
        "SONARQUBE_READ_ONLY": "true"
      }
    }
  }
}

Configuration du client (SonarQube Server) :

{
  "mcpServers": {
    "sonarqube-https": {
      "url": "https://your-server:8443/mcp",
      "headers": {
        "Authorization": "Bearer <your-token>",
        "SONARQUBE_TOOLSETS": "issues,quality-gates",
        "SONARQUBE_READ_ONLY": "true"
      }
    }
  }
}

Remarque : SONARQUBE_TOOLSETS et SONARQUBE_READ_ONLY sont des en-têtes de requête facultatifs qui restreignent l’ensemble d’outils défini au niveau du serveur pour la requête concernée. Ils peuvent uniquement réduire la portée : ils ne peuvent pas activer des ensembles d’outils ni lever les restrictions au-delà de la configuration utilisée au lancement du serveur.

Remarque : pour le développement local, utilisez plutôt le transport Stdio (valeur par défaut). Le transport HTTP Streamable sur HTTPS est destiné aux déploiements de production multi-utilisateurs disposant de certificats SSL appropriés.

OAuth hébergé de SonarQube Cloud

La prise en charge d’OAuth concerne le service MCP SonarQube Cloud hébergé par Sonar. Utilisez un client MCP compatible avec OAuth et connectez-vous lorsque vous y êtes invité ; aucun paramètre de serveur OAuth n’est nécessaire dans la configuration de votre client. Les clients utilisant des jetons SonarQube existants restent pris en charge.

Les portées mcp:tools:read et mcp:tools:write contrôlent indépendamment l’accès aux outils de lecture et d’écriture, sous réserve de vos autorisations Cloud. Utilisez list_organizations et les arguments organization des outils pour sélectionner une organisation.

Les déploiements auto-hébergés continuent d’utiliser des jetons SonarQube ; OAuth pour SonarQube Server n’est pas encore pris en charge.

Points de terminaison du service

En mode HTTP Streamable (http ou https), le serveur expose quelques points de terminaison de service sans authentification, en plus du point de terminaison MCP à /mcp. Ils sont destinés aux communications entre services (surveillance, orchestration, vérifications de compatibilité des clients) et ne nécessitent pas d’en-tête Authorization.

Point de terminaisonMéthodeDescriptionExemple de réponse
/healthGETSonde de disponibilité. Renvoie 200 OK avec un corps vide dès que le serveur accepte les requêtes.(corps vide)
/infoGETRenvoie la version du serveur MCP au format JSON. Utile pour vérifier la version du serveur déployé.{"version":"1.16.0"}

Ces points de terminaison ne sont pas disponibles avec le transport Stdio.

Certificats personnalisés

Si votre SonarQube Server utilise un certificat auto-signé ou un certificat émis par une autorité de certification (CA) privée, vous pouvez ajouter des certificats personnalisés au conteneur ; ils seront installés automatiquement.

Configuration

Utilisation d’un montage de volume

Montez un répertoire contenant vos certificats lors de l’exécution du conteneur :

docker run --init --pull=always -i --rm \
  -v /path/to/your/certificates/:/usr/local/share/ca-certificates/:ro \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_URL="<url>" \
  sonarsource/sonarqube-mcp

Formats de certificat pris en charge

Le conteneur prend en charge les formats de certificat suivants :

  • fichiers .crt (encodés en PEM ou DER)
  • fichiers .pem (encodés en PEM)

Configuration MCP avec des certificats

Lorsque vous utilisez des certificats personnalisés, vous pouvez modifier votre configuration MCP pour monter les certificats :

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-v",
      "/path/to/your/certificates/:/usr/local/share/ca-certificates/:ro",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

Remarque : vous exécutez le serveur à partir d’un JAR plutôt que dans le conteneur ? Le montage de volume ci-dessus installe les certificats dans le magasin de confiance du système d’exploitation du conteneur, que le serveur utilise également. Si vous ne pouvez pas utiliser le magasin de confiance du système d’exploitation — notamment sous Windows, où il n’est pas consulté — indiquez à la JVM un magasin de confiance Java contenant le certificat de l’autorité de certification : -Djavax.net.ssl.trustStore=/path/to/truststore.p12 -Djavax.net.ssl.trustStoreType=PKCS12 -Djavax.net.ssl.trustStorePassword=<passphrase>. Il s’ajoute aux certificats de confiance par défaut.

Proxy

Le serveur MCP SonarQube prend en charge les proxys HTTP et SOCKS5 au moyen des propriétés système standard de proxy Java.

Configuration

Proxy HTTP/HTTPS

Vous pouvez configurer les paramètres du proxy à l’aide des propriétés système Java. Celles-ci peuvent être définies comme variables d’environnement ou transmises comme arguments de la JVM.

Propriétés de proxy courantes :

PropriétéDescriptionExemple
http.proxyHostNom d’hôte du proxy HTTPproxy.example.com
http.proxyPortPort du proxy HTTP8080
https.proxyHostNom d’hôte du proxy HTTPSproxy.example.com
https.proxyPortPort du proxy HTTPS8443
http.nonProxyHostsHôtes qui contournent le proxy (séparés par des barres verticales)localhost|127.0.0.1|*.internal.com

Authentification du proxy HTTP/HTTPS :

PropriétéDescriptionExemple
http.proxyUserNom d’utilisateur du proxy HTTPmyuser
http.proxyPasswordMot de passe du proxy HTTPmypassword
https.proxyUserNom d’utilisateur du proxy HTTPSmyuser
https.proxyPasswordMot de passe du proxy HTTPSmypassword

Proxy SOCKS5

Les proxys SOCKS5 sont pris en charge.

PropriétéDescriptionValeur par défautExemple
socksProxyHostNom d’hôte du proxy SOCKS5—localhost
socksProxyPortPort du proxy SOCKS510801080
java.net.socks.usernameNom d’utilisateur SOCKS5 (si une authentification est requise)—myuser
java.net.socks.passwordMot de passe SOCKS5 (si une authentification est requise)—mypassword

Certificat client (TLS mutuel)

Si votre SonarQube Server exige que les clients présentent un certificat pendant la négociation TLS (TLS mutuel), vous pouvez fournir un keystore PKCS12 en le montant dans le conteneur et en transmettant son emplacement via JAVA_OPTS.

Configuration

Utilisation d’un keystore PKCS12

Montez votre fichier .p12 ou .pfx dans le conteneur et définissez la variable d’environnement JAVA_OPTS avec les propriétés du keystore :

docker run --init --pull=always -i --rm \
  -v /path/to/client.p12:/etc/ssl/mcp/client.p12:ro \
  -e JAVA_OPTS="-Djavax.net.ssl.keyStore=/etc/ssl/mcp/client.p12 -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=<passphrase>" \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_URL="<url>" \
  sonarsource/sonarqube-mcp

Remarque : le fichier de certificat doit être lisible par le processus du conteneur. Vérifiez et corrigez les permissions si nécessaire :

ls -la /path/to/client.p12       # look for -rw-r--r-- (644) or wider
chmod 644 /path/to/client.p12    # grant read access to the container user

Omettez -Djavax.net.ssl.keyStorePassword si le keystore ne comporte pas de phrase secrète. Notez que la phrase secrète utilisée ici sera visible via docker inspect ou dans la liste des processus.

Configuration MCP avec un certificat client

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run", "--init", "--pull=always", "-i", "--rm",
      "-v", "/path/to/client.p12:/etc/ssl/mcp/client.p12:ro",
      "-e", "JAVA_OPTS",
      "-e", "SONARQUBE_TOKEN",
      "-e", "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "JAVA_OPTS": "-Djavax.net.ssl.keyStore=/etc/ssl/mcp/client.p12 -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=<passphrase>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

Utilisation d’un keystore PKCS12 avec un JAR autonome

Lorsque vous exécutez le serveur à partir d’un JAR, transmettez les propriétés du keystore comme arguments de la JVM avant -jar :

java \
  -Djavax.net.ssl.keyStore=/path/to/client.p12 \
  -Djavax.net.ssl.keyStoreType=PKCS12 \
  -Djavax.net.ssl.keyStorePassword=<passphrase> \
  -jar <path_to_sonarqube_mcp_server_jar>

Omettez -Djavax.net.ssl.keyStorePassword si le keystore ne comporte pas de phrase secrète.

Configuration MCP avec un certificat client (JAR)

{
  "sonarqube": {
    "command": "java",
    "args": [
      "-Djavax.net.ssl.keyStore=/path/to/client.p12",
      "-Djavax.net.ssl.keyStoreType=PKCS12",
      "-Djavax.net.ssl.keyStorePassword=<passphrase>",
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

Remarque : les fichiers de certificat et de clé PEM (fichiers .crt/.key distincts) doivent d’abord être convertis au format PKCS12. Utilisez openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 pour les convertir.

Outils

Analyse

  • analyze_code_snippet - Analyse le contenu d’un fichier avec les analyseurs SonarQube afin de détecter les problèmes de qualité du code et de sécurité. Analyse toujours l’intégralité du contenu du fichier pour garantir la précision. Vous pouvez filtrer les résultats pour ne conserver qu’un extrait de code spécifique.

    Obsolète : analyze_code_snippet sera supprimé dans une prochaine version. Connectez SonarQube for IDE pour utiliser analyze_file_list, ou activez l’analyse Vortex pour votre organisation afin d’utiliser run_advanced_code_analysis (voir ci-dessous).

    Utilisation :

    • Avec un espace de travail monté (recommandé) : transmettez filePath (relatif au projet) — le serveur lit directement le fichier, ce qui évite d’inclure son contenu dans la fenêtre de contexte de l’agent
    • Sans espace de travail monté : transmettez fileContent complet pour analyser l’intégralité du fichier (tous les problèmes sont signalés)
    • Ajoutez éventuellement codeSnippet pour filtrer les résultats : seuls les problèmes situés dans l’extrait seront signalés (emplacement de l’extrait détecté automatiquement)

    Paramètres :

    • organization - Clé de l’organisation SonarQube Cloud - Chaîne facultative, Cloud uniquement
    • projectKey - Clé du projet SonarQube - Chaîne obligatoire (Ignorée lorsque SONARQUBE_PROJECT_KEY est défini)
    • filePath - Chemin du fichier à analyser, relatif au projet (par ex. src/main/java/MyClass.java). Utilisé lorsque l’espace de travail est monté dans /app/mcp-workspace - Chaîne
    • fileContent - Contenu complet du fichier sous forme de chaîne. Obligatoire lorsque l’espace de travail n’est pas monté - Chaîne
    • codeSnippet - Extrait de code pour filtrer les problèmes (doit correspondre au contenu de fileContent) - Chaîne
    • language - Langage du code (par ex. 'java', 'python', 'js', 'ts', 'tsx', 'jsx') - Chaîne
    • scope - Portée du fichier : MAIN ou TEST (par défaut : MAIN) - Chaîne

    Langages pris en charge : Java, Kotlin, Python, Ruby, Go, JavaScript (js, jsx), TypeScript (ts, tsx), JSP, PHP, XML, HTML, CSS, CloudFormation, Kubernetes, Terraform, Azure Resource Manager, Ansible, Docker, détection des secrets

Lorsque l’intégration avec SonarQube for IDE est activée : (ces deux outils sont associés aux deux ensembles d’outils analysis et ide)

  • analyze_file_list - Analyser les fichiers du répertoire de travail actuel avec SonarQube for IDE. Cet outil se connecte à une instance SonarQube for IDE en cours d’exécution pour effectuer une analyse de la qualité du code sur une liste de fichiers.

    • file_absolute_paths - Liste des chemins absolus des fichiers à analyser - Tableau de chaînes obligatoire
  • toggle_automatic_analysis - Activer ou désactiver l’analyse automatique de SonarQube for IDE. Lorsqu’elle est activée, SonarQube for IDE analyse automatiquement les fichiers modifiés dans le répertoire de travail. Lorsqu’elle est désactivée, l’analyse automatique est arrêtée.

    • enabled - Activer ou désactiver l’analyse automatique - Booléen obligatoire

Sur SonarQube Server, stdio répertorie les outils de contexte Vortex et run_advanced_code_analysis lorsque les hubs CAG et A3S sont tous deux autorisés.

Lorsque l’analyse Vortex est disponible :

Nécessite que l’espace de travail soit monté dans /app/mcp-workspace

  • run_advanced_code_analysis - Exécuter une analyse Vortex sur un seul fichier. SonarQube Server utilise l’espace réservé nil UUID.
    • organization - Clé de l’organisation SonarQube Cloud - Chaîne facultative, Cloud uniquement
    • projectKey - Clé du projet - Chaîne obligatoire (Ignorée lorsque SONARQUBE_PROJECT_KEY est défini)
    • branch - Nom de branche utilisé pour récupérer le contexte de la dernière analyse - Chaîne obligatoire
    • filePath - Chemin du fichier à analyser, relatif au projet (par ex. src/main/java/MyClass.java). - Chaîne obligatoire
    • fileScope - Définit la portée d’origine du fichier : 'MAIN' ou 'TEST' (par défaut : MAIN) - Chaîne

Couverture

  • search_files_by_coverage - Rechercher les fichiers d’un projet, triés par couverture (ordre croissant : couverture la plus faible en premier). Cet outil aide à repérer les fichiers dont la couverture des tests doit être améliorée.

    • projectKey - Clé du projet dans lequel effectuer la recherche - Chaîne obligatoire (Ignorée lorsque SONARQUBE_PROJECT_KEY est défini)
    • branch - Nom de branche facultatif pour une analyse par branche. Utilisez list_branches pour découvrir les noms valides - Chaîne
    • pullRequest - Clé/ID de demande de tirage facultatif. Utilisez list_pull_requests pour découvrir les clés valides - Chaîne
    • maxCoverage - Seuil maximal de couverture (0-100). Ne renvoyer que les fichiers dont la couverture est inférieure ou égale à cette valeur - Nombre
    • pageIndex - Index de page (à partir de 1, par défaut : 1) - Nombre
    • pageSize - Taille de page (par défaut : 100, maximum : 500) - Nombre
  • get_file_coverage_details - Obtenir les informations de couverture ligne par ligne d’un fichier précis, notamment les lignes exactes non couvertes et celles dont les branches ne sont que partiellement couvertes. Cet outil aide à déterminer précisément où ajouter des tests. À utiliser après avoir repéré les fichiers à faible couverture avec search_files_by_coverage.

    • key - Clé du fichier (par ex. my_project:src/foo/Bar.java) - Chaîne obligatoire
    • branch - Nom de branche facultatif pour une analyse par branche. Utilisez list_branches pour découvrir les noms valides - Chaîne
    • pullRequest - Clé/ID de demande de tirage facultatif. Utilisez list_pull_requests pour découvrir les clés valides - Chaîne
    • from - Première ligne à analyser (à partir de 1, par défaut : 1) - Nombre
    • to - Dernière ligne à analyser (incluse). Si elle n’est pas spécifiée, toutes les lignes sont renvoyées - Nombre

Risques liés aux dépendances

Remarque : les risques liés aux dépendances nécessitent SonarQube Advanced Security. Sur SonarQube Server, la version 2025.4 Enterprise ou une version ultérieure est requise.

  • search_dependency_risks - Rechercher les problèmes d’analyse de la composition logicielle (risques liés aux dépendances) d’un projet SonarQube, associés aux versions présentes dans le projet, l’application ou le portefeuille analysé.
    • organization - Clé de l’organisation SonarQube Cloud - Chaîne facultative, Cloud uniquement
    • projectKey - Clé du projet - Chaîne obligatoire (Ignorée lorsque SONARQUBE_PROJECT_KEY est défini)
    • branch - Nom de branche facultatif pour une analyse par branche. Utilisez list_branches pour découvrir les noms valides - Chaîne
    • pullRequest - Clé/ID de demande de tirage facultatif. Utilisez list_pull_requests pour découvrir les clés valides - Chaîne
    • pageIndex - Index de page facultatif (à partir de 1, par défaut : 1) - Entier
    • pageSize - Taille de page facultative. Doit être supérieure à 0 et inférieure ou égale à 500 (par défaut : 100) - Entier

Entreprises

Remarque : les entreprises sont disponibles uniquement lors d’une connexion à SonarQube Cloud.

  • list_enterprises - Répertorier les entreprises disponibles dans SonarQube Cloud auxquelles vous avez accès. Utilisez cet outil pour découvrir les ID d’entreprise utilisables avec d’autres outils.
    • enterpriseKey - Clé d’entreprise facultative pour filtrer les résultats - Chaîne

Problèmes

  • change_sonar_issue_status - Modifier le statut d’un problème SonarQube pour le définir sur "accept", "falsepositive" ou "reopen".

    • key - Clé du problème - Chaîne obligatoire
    • status - Nouveau statut du problème - Énumération obligatoire {"accept", "falsepositive", "reopen"}
    • comment - Commentaire facultatif expliquant le changement de statut - Chaîne
  • search_sonar_issues_in_projects - Rechercher les problèmes SonarQube dans les projets de mon organisation.

    • organization - Clé de l’organisation SonarQube Cloud - Chaîne facultative, Cloud uniquement
    • projectKeys - Liste facultative de clés de projets SonarQube - Tableau de chaînes
    • branch - Nom de branche facultatif pour une analyse par branche. Utilisez list_branches pour découvrir les noms valides - Chaîne
    • pullRequest - Clé/ID de demande de tirage facultatif. Utilisez list_pull_requests pour découvrir les clés valides - Chaîne
    • severities - Liste facultative des niveaux de gravité à filtrer. Valeurs possibles : INFO, LOW, MEDIUM, HIGH, BLOCKER - Tableau de chaînes
    • impactSoftwareQualities - Liste facultative des qualités logicielles à filtrer. Valeurs possibles : MAINTAINABILITY, RELIABILITY, SECURITY - Tableau de chaînes
    • issueStatuses - Liste facultative des statuts de problème à filtrer. Valeurs possibles : OPEN, CONFIRMED, FALSE_POSITIVE, ACCEPTED, FIXED, IN_SANDBOX - Tableau de chaînes
    • tags - Liste facultative des étiquettes de problème à filtrer. Les étiquettes sont en minuscules - Tableau de chaînes
    • inNewCodePeriod - Ne renvoyer que les problèmes de la période du nouveau code. Nécessite exactement une entrée parmi projectKeys et files - Booléen
    • issueKey - Clé de problème facultative pour récupérer un problème précis - Chaîne
    • pageIndex - Index de page facultatif (à partir de 1, par défaut : 1) - Entier
    • pageSize - Taille de page facultative. Doit être supérieure à 0 et inférieure ou égale à 500 (par défaut : 100) - Entier

Points sensibles de sécurité

  • search_security_hotspots - Rechercher les points sensibles de sécurité dans un projet SonarQube.

    • projectKey - Clé du projet ou de l’application - Chaîne obligatoire (Ignorée lorsque SONARQUBE_PROJECT_KEY est défini)
    • hotspotKeys - Liste séparée par des virgules des clés précises des points sensibles de sécurité à récupérer - Tableau de chaînes
    • branch - Nom de branche facultatif pour une analyse par branche. Utilisez list_branches pour découvrir les noms valides - Chaîne
    • pullRequest - Clé/ID de demande de tirage facultatif. Utilisez list_pull_requests pour découvrir les clés valides - Chaîne
    • files - Liste facultative de chemins de fichiers pour filtrer les résultats - Tableau de chaînes
    • status - Filtre de statut facultatif : TO_REVIEW, REVIEWED - Chaîne
    • resolution - Filtre de résolution facultatif : FIXED, SAFE, ACKNOWLEDGED - Chaîne
    • sinceLeakPeriod - Filtrer les points sensibles créés depuis la période de fuite (nouveau code) - Booléen
    • onlyMine - Afficher uniquement les points sensibles qui me sont attribués - Booléen
    • pageIndex - Index de page facultatif (à partir de 1, par défaut : 1) - Entier
    • pageSize - Taille de page facultative. Doit être supérieure à 0 et inférieure ou égale à 500 (par défaut : 100) - Entier
  • show_security_hotspot - Obtenir des informations détaillées sur un point sensible de sécurité précis, notamment les détails de la règle, le contexte du code, les flux et les commentaires.

    • hotspotKey - Clé du point sensible de sécurité - Chaîne obligatoire
  • change_security_hotspot_status - Examiner un point sensible de sécurité en modifiant son statut. Lorsqu’il est marqué comme REVIEWED, vous devez préciser une résolution (FIXED, SAFE ou ACKNOWLEDGED).

    • hotspotKey - Clé du point sensible de sécurité - Chaîne obligatoire
    • status - Nouveau statut - Énumération obligatoire {"TO_REVIEW", "REVIEWED"}
    • resolution - Résolution lorsque le statut est REVIEWED - Énumération {"FIXED", "SAFE", "ACKNOWLEDGED"}
    • comment - Commentaire facultatif sur l’examen - Chaîne

Langages

  • list_languages - Répertorier tous les langages de programmation pris en charge par cette instance SonarQube.
    • q - Motif facultatif à comparer aux clés/noms des langages - Chaîne

Mesures

  • get_component_measures - Obtenir les mesures SonarQube d’un composant (projet, répertoire, fichier).
    • projectKey - Clé du projet - Chaîne obligatoire lorsque SONARQUBE_PROJECT_KEY n’est pas configuré
    • branch - Nom de branche facultatif pour une analyse par branche. Utilisez list_branches pour découvrir les noms valides - Chaîne
    • metricKeys - Clés de métriques facultatives à récupérer (par ex. ncloc, complexity, violations, coverage) - Tableau de chaînes
    • pullRequest - Clé/ID de demande de tirage facultatif. Utilisez list_pull_requests pour découvrir les clés valides - Chaîne

Métriques

  • search_metrics - Rechercher des métriques SonarQube.
    • pageIndex - Index de page facultatif (à partir de 1, par défaut : 1) - Entier
    • pageSize - Taille de page facultative. Doit être supérieure à 0 et inférieure ou égale à 500 (par défaut : 100) - Entier

Portefeuilles

  • list_portfolios - Répertorier les portefeuilles d’entreprise disponibles dans SonarQube, avec des options de filtrage et de pagination.

    Pour SonarQube Server :

    • q - Requête de recherche facultative pour filtrer les portefeuilles par nom ou par clé - Chaîne
    • favorite - Si la valeur est true, ne renvoyer que les portefeuilles favoris - Booléen
    • pageIndex - Numéro de page facultatif (à partir de 1, par défaut : 1) - Entier
    • pageSize - Taille de page facultative, maximum 500 (par défaut : 100) - Entier

    Pour SonarQube Cloud :

    • enterpriseId - UUID de l’entreprise. Peut être omis uniquement si le paramètre 'favorite' est fourni avec la valeur true - String
    • q - Requête de recherche facultative pour filtrer les portefeuilles par nom - String
    • favorite - Doit être défini sur true si le paramètre 'enterpriseId' est omis. Si true, renvoie uniquement les portefeuilles favoris de l’utilisateur connecté. Ne peut pas être true lorsque 'draft' est true - Boolean
    • draft - Si true, renvoie uniquement les brouillons créés par l’utilisateur connecté. Ne peut pas être true lorsque 'favorite' est true - Boolean
    • pageIndex - Index facultatif de la page à récupérer (par défaut : 1) - Integer
    • pageSize - Taille facultative de la page à récupérer (par défaut : 50) - Integer

Projets

  • list_organizations - Répertorie les organisations SonarQube Cloud dont l’utilisateur est membre, y compris leurs clés, noms, ID et UUID. Utilisez une clé renvoyée comme organization dans les outils suivants.

  • search_my_sonarqube_projects - Recherche des projets SonarQube. La réponse est paginée.

    • organization - Clé de l’organisation SonarQube Cloud - Optional String, Cloud only
    • pageIndex - Index de page facultatif commençant à 1 (par défaut : 1) - Integer
    • pageSize - Taille de page facultative. Doit être supérieure à 0 et inférieure ou égale à 500 (par défaut : 500) - Integer
    • q - Requête de recherche facultative pour filtrer les projets par nom (correspondance partielle) ou par clé (correspondance exacte) - String
  • list_branches - Répertorie les branches analysées d’un projet.

    • SonarQube Cloud : renvoie les branches à longue durée de vie (LONG) et à courte durée de vie (SHORT) avec les champs type et mergeBranch. Filtre branchTypes facultatif : ALL (par défaut), LONG ou SHORT.
    • SonarQube Server : renvoie toutes les branches analysées (nom, Quality Gate, date d’analyse). Aucun filtre type, mergeBranch ou branchTypes.
    • Utilisez les noms de branches renvoyés comme paramètre branch dans les autres outils. Pour l’analyse des pull requests, utilisez plutôt list_pull_requests.
    • projectKey - Clé du projet (par ex. my_project) - Required String (Ignoré lorsque SONARQUBE_PROJECT_KEY est défini)
    • branchTypes - (SonarQube Cloud uniquement) Filtre facultatif : ALL (par défaut), LONG ou SHORT - Enum {"ALL", "LONG", "SHORT"}
  • list_pull_requests - Répertorie toutes les pull requests d’un projet. Utilisez cet outil pour découvrir les pull requests associées à une analyse avec décoration de PR (couverture, problèmes, Quality Gate). Renvoie la clé/l’ID de la pull request, qui peut être utilisé avec d’autres outils. Pour une analyse basée sur les branches sans pull requests, utilisez plutôt list_branches.

    • projectKey - Clé du projet (par ex. my_project) - Required String (Ignoré lorsque SONARQUBE_PROJECT_KEY est défini)

Quality Gates

  • get_project_quality_gate_status - Récupère l’état du Quality Gate du projet SonarQube.

    • analysisId - ID d’analyse facultatif - String
    • branch - Nom de branche facultatif pour une analyse basée sur les branches. Utilisez list_branches pour découvrir les noms valides - String
    • projectId - ID de projet facultatif - String
    • projectKey - Clé de projet facultative - String
    • pullRequest - Clé/ID de pull request facultatif. Utilisez list_pull_requests pour découvrir les clés valides - String
  • list_quality_gates - Répertorie tous les Quality Gates de mon instance SonarQube.

    • organization - Clé de l’organisation SonarQube Cloud - Optional String, Cloud only

Règles

  • show_rule - Affiche des informations détaillées sur une règle SonarQube.
    • organization - Clé de l’organisation SonarQube Cloud - Optional String, Cloud only
    • key - Clé de la règle - Required String

Duplications

  • search_duplicated_files - Recherche les fichiers contenant du code dupliqué dans un projet SonarQube. Par défaut, récupère automatiquement tous les fichiers dupliqués sur toutes les pages (jusqu’à 10 000 fichiers maximum). Renvoie uniquement les fichiers contenant des duplications.

    • projectKey - Clé du projet - Required String (Ignoré lorsque SONARQUBE_PROJECT_KEY est défini)
    • branch - Nom de branche facultatif pour une analyse basée sur les branches. Utilisez list_branches pour découvrir les noms valides - String
    • pullRequest - Clé/ID de pull request facultatif. Utilisez list_pull_requests pour découvrir les clés valides - String
    • pageSize - Nombre facultatif de résultats par page pour la pagination manuelle (max. : 500). Si cette valeur n’est pas spécifiée, tous les fichiers dupliqués sont récupérés automatiquement - Integer
    • pageIndex - Numéro de page facultatif pour la pagination manuelle (à partir de 1). Si cette valeur n’est pas spécifiée, tous les fichiers dupliqués sont récupérés automatiquement - Integer
  • get_duplications - Récupère les duplications d’un fichier. Nécessite l’autorisation Browse sur le projet du fichier.

    • key - Clé du fichier - Required String
    • branch - Nom de branche facultatif pour une analyse basée sur les branches. Utilisez list_branches pour découvrir les noms valides - String
    • pullRequest - Clé/ID de pull request facultatif. Utilisez list_pull_requests pour découvrir les clés valides - String

Sources

  • get_raw_source - Récupère le code source sous forme de texte brut depuis SonarQube. Nécessite l’autorisation 'See Source Code' sur le fichier.

    • key - Clé du fichier - Required String
    • branch - Nom de branche facultatif pour une analyse basée sur les branches. Utilisez list_branches pour découvrir les noms valides - String
    • pullRequest - Clé/ID de pull request facultatif. Utilisez list_pull_requests pour découvrir les clés valides - String
  • get_scm_info - Récupère les informations SCM des fichiers source SonarQube. Nécessite l’autorisation See Source Code sur le projet du fichier.

    • key - Clé du fichier - Required String
    • commits_by_line - Regroupe les lignes par commit SCM si la valeur est false ; sinon, affiche les commits pour chaque ligne - String
    • from - Première ligne à renvoyer. Commence à 1 - Number
    • to - Dernière ligne à renvoyer (incluse) - Number

Système

Remarque : les outils système sont disponibles uniquement lors d’une connexion à SonarQube Server.

  • get_system_health - Récupère l’état de santé de l’instance SonarQube Server. Renvoie GREEN (entièrement opérationnel), YELLOW (utilisable, mais nécessite une intervention) ou RED (non opérationnel).

  • get_system_info - Récupère des informations détaillées sur la configuration du système SonarQube Server, notamment l’état de la JVM, la base de données, les index de recherche et les paramètres. Nécessite les autorisations 'Administer'.

  • get_system_logs - Récupère les journaux système de SonarQube Server au format texte brut. Nécessite l’autorisation d’administration système.

    • name - Nom facultatif des journaux à récupérer. Valeurs possibles : access, app, ce, deprecation, es, web. Valeur par défaut : app - String
  • ping_system - Envoie une requête ping au système SonarQube Server pour vérifier qu’il est actif. Renvoie 'pong' en texte brut.

  • get_system_status - Récupère les informations d’état de SonarQube Server. Renvoie l’état (STARTING, UP, DOWN, RESTARTING, DB_MIGRATION_NEEDED, DB_MIGRATION_RUNNING), la version et l’ID.

Webhooks

  • create_webhook - Crée un webhook pour l’organisation ou le projet SonarQube. Nécessite l’autorisation 'Administer' sur le projet spécifié ou l’autorisation globale 'Administer'.

    • organization - Clé de l’organisation SonarQube Cloud - Optional String, Cloud only
    • name - Nom du webhook - Required String
    • url - URL du webhook - Required String
    • projectKey - Clé de projet facultative pour un webhook spécifique à un projet - String
    • secret - Secret facultatif du webhook pour sécuriser sa charge utile - String
  • list_webhooks - Répertorie tous les webhooks de l’organisation ou du projet SonarQube. Nécessite l’autorisation 'Administer' sur le projet spécifié ou l’autorisation globale 'Administer'.

    • organization - Clé de l’organisation SonarQube Cloud - Optional String, Cloud only
    • projectKey - Clé de projet facultative pour répertorier les webhooks spécifiques à un projet - String

Enrichissement du contexte

Outils d’architecture
  • search_by_signature_patterns - Recherche des éléments de code (classes, méthodes, interfaces, ...) à partir de leurs signatures de déclaration à l’aide de motifs regex.

    • include_code_regex_list - Liste de motifs regex à faire correspondre aux signatures - Required String[]
    • exclude_code_regex_list - Liste de motifs regex à exclure des résultats - String[]
    • include_glob - Motif glob de filtrage des fichiers (par ex., *.java) - String
    • exclude_glob - Motif glob d’exclusion des fichiers - String
    • fields - Liste de champs à inclure dans la réponse, séparés par des virgules - String
    • limit - Nombre maximal de résultats à renvoyer (par défaut : 10) - Integer
    • regex_lists_operator - Méthode de combinaison de plusieurs motifs : OR (par défaut) ou AND - String
  • search_by_body_patterns - Recherche des éléments de code à partir de leur corps d’implémentation à l’aide de motifs regex. Utile pour localiser les endroits où des API ou des motifs sont réellement utilisés.

    • include_code_regex_list - Liste de motifs regex à rechercher dans les corps de code - Required String[]
    • exclude_code_regex_list - Liste de motifs regex à exclure des résultats - String[]
    • include_glob - Motif glob de filtrage des fichiers - String
    • exclude_glob - Motif glob d’exclusion des fichiers - String
    • fields - Liste de champs à inclure dans la réponse, séparés par des virgules - String
    • limit - Nombre maximal de résultats à renvoyer (par défaut : 10) - Integer
    • regex_lists_operator - Méthode de combinaison de plusieurs motifs : OR (par défaut) ou AND - String
  • get_upstream_call_flow - Retrace les fonctions qui appellent une fonction donnée. Utile pour trouver tous les appelants et points d’entrée, et comprendre ce qui risque de ne plus fonctionner si une signature change.

    • fqn - Nom complet de la fonction - Required String
    • depth - Profondeur de la chaîne d’appels (0 = fonction uniquement, 1 = appelants directs, etc.) - Integer
    • fields - Liste de champs à inclure dans la réponse, séparés par des virgules - String
  • get_downstream_call_flow - Retrace les fonctions appelées par une fonction donnée. Utile pour l’analyse d’impact et la compréhension du flux d’exécution.

    • fqn - Nom complet de la fonction - Required String
    • depth - Profondeur de la chaîne d’appels (0 = fonction uniquement, 1 = fonctions appelées directement, etc.) - Integer
    • fields - Liste de champs à inclure dans la réponse, séparés par des virgules - String
  • get_source_code - Récupère le code source complet (signature et corps) d’un élément de code à partir de son nom complet.

    • fqn - Nom complet de l’élément - Required String
    • fields - Liste de champs à inclure dans la réponse, séparés par des virgules - String
  • get_type_hierarchy - Récupère la hiérarchie d’héritage complète d’une structure de type classe (classe, interface, enum, record, exception, struct). Indispensable pour comprendre les arbres d’héritage et effectuer des refactorisations.

    • fqn - Nom complet de la structure de type classe - Required String
    • fields - Liste de champs à inclure dans la réponse, séparés par des virgules - String
  • get_references - Récupère les références directes entrantes et sortantes d’une classe ou d’un module. Renvoie uniquement les références directes (non transitives).

    • fqn - Nom complet de la classe ou du module - Required String
    • fields - Liste de champs à inclure dans la réponse, séparés par des virgules - String
  • get_current_architecture - Récupère un graphe d’architecture hiérarchique filtré par préfixe de chemin et profondeur. Utile pour explorer la structure des modules et les dépendances de haut niveau.

    • depth - Profondeur de la hiérarchie (0 = racine uniquement, 1 = racine et enfants, etc.) - Required Integer
    • path_prefix - Préfixe de chemin facultatif pour filtrer les nœuds (par ex., com.example.service) - String
    • ecosystem - Écosystème facultatif pour filtrer (java, cs, py, js, ts) - String
  • get_intended_architecture - Obtenir les contraintes architecturales définies par l’utilisateur, qui précisent quels modules peuvent dépendre les uns des autres.

Outils de directives
  • get_guidelines - Obtenir des directives de codage basées sur les problèmes du projet SonarQube, les catégories du catalogue, ou une combinaison des deux.
    • mode - Mode de récupération des directives : project_based, category_based ou combined - Chaîne requise
    • categories - Liste des noms de catégories (requise pour les modes category_based et combined) - String[]
    • languages - Liste des langages cibles au format de clé de dépôt SonarQube (requise lorsque categories est fourni) - String[]
    • file_paths - Liste facultative de chemins de fichiers pour filtrer les directives - String[]
Outils de dépendances tierces
  • check_dependency - Vérifier une dépendance tierce pour détecter les vulnérabilités de sécurité, les logiciels malveillants dans la chaîne d’approvisionnement et les problèmes de conformité des licences avant de l’ajouter ou de la mettre à jour.
    • purl - URL de package (purl) avec version, selon purl-spec. Format : pkg:<type>/<namespace>/<name>@<version> (par exemple, pkg:npm/lodash@4.17.21, pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1, pkg:pypi/django@3.2.0) - Chaîne requise
Variables d’environnement d’enrichissement du contexte
VariableDescriptionObligatoireValeur par défaut
SONARQUBE_URLURL de SonarQube CloudOuihttps://sonarcloud.io
SONARQUBE_TOKENJeton d’authentificationOuiAucun
SONARQUBE_ORGOrganisation Cloud ; transmise au proxy depuis la configuration de démarrage ou détectée de manière uniqueNonAucun
SONARQUBE_PROJECT_KEYClé de projet sur SonarQube CloudOuiAucun
SONAR_SQ_BRANCHRemplacement explicite de la branche SonarQube *NonAucun
SONARQUBE_DEBUG_ENABLEDActiver la journalisation de débogage (pour le dépannage)NonFalse
SONAR_LOG_LEVELNiveau de verbosité des journaux (TRACE, DEBUG, INFO, WARNING, ERROR)NonINFO
  • À fournir si vous n’utilisez pas git ou si le nom de la branche git ne correspond pas à celui de SonarQube.
Configuration propre au projet (recommandée)

Commencez par exporter la SONARQUBE_TOKEN variable d’environnement avec un jeton d’accès personnel (PAT) valide pour votre projet.

# macOS/Linux (Bash/Zsh)
export SONARQUBE_TOKEN="{<YourUserToken>}"

Ensuite, montez l’espace de travail du projet pour donner au serveur d’enrichissement du contexte un accès direct à vos fichiers source :

{
  "mcpServers": {
    "sonarqube-mcp-server": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "--pull=always",
        "-e", "SONARQUBE_URL",
        "-e", "SONARQUBE_TOKEN",
        "-e", "SONARQUBE_ORG",
        "-e", "SONARQUBE_PROJECT_KEY",
        "-e", "SONARQUBE_TOOLSETS",
        "-v", "/ABSOLUTE/PATH/TO/YOUR/PROJECT:/app/mcp-workspace:rw",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_URL": "https://sonarcloud.io",
        "SONARQUBE_ORG": "<YourOrganizationKey>",
        "SONARQUBE_PROJECT_KEY": "<YourProjectKey>",
        "SONARQUBE_TOOLSETS": "cag"
      }
    }
  }
}

Important : dans une configuration limitée au projet, ne placez pas SONARQUBE_TOKEN dans le bloc env. Exportez-la en tant que variable d’environnement (export SONARQUBE_TOKEN=...). Docker la transmettra au conteneur via -e SONARQUBE_TOKEN.

Préparation à l’agentique

Remarque : les outils de préparation à l’agentique sont uniquement disponibles sur SonarQube Cloud et nécessitent que la fonctionnalité soit activée pour votre organisation.

L’indicateur de fonctionnalité est vérifié au démarrage en mode stdio. Sur HTTP/HTTPS, ajoutez agentic-readiness au SONARQUBE_TOOLSETS du serveur pour activer les outils.

  • start_agentic_readiness_assessment - Lancer une évaluation de la préparation à l’agentique d’un projet. Renvoie immédiatement le statut PENDING et un assessmentId. Utilisez get_agentic_readiness_assessment pour récupérer les résultats.

    • projectKey - Clé du projet - Chaîne requise (Ignorée si SONARQUBE_PROJECT_KEY est défini)
    • branch - Branche à évaluer. Omettez ce paramètre pour utiliser la branche par défaut du projet - String
  • get_agentic_readiness_assessment - Récupérer le résultat d’une évaluation. Rappelez l’outil avec le même assessmentId jusqu’à ce que le statut soit COMPLETED, FAILED ou INTERRUPTED. Une fois l’évaluation terminée, l’outil renvoie le niveau global et une ventilation par pilier, avec les actions recommandées et les éléments justificatifs.

    • assessmentId - ID de l’évaluation renvoyé par start_agentic_readiness_assessment - Chaîne requise
  • list_agentic_readiness_assessments - Lister toutes les évaluations d’un projet, de la plus récente à la plus ancienne. Utilisez get_agentic_readiness_assessment pour obtenir les résultats détaillés par pilier.

    • projectKey - Clé du projet dont les évaluations doivent être listées - Chaîne requise (Ignorée si SONARQUBE_PROJECT_KEY est défini)
    • branch - Filtrer les évaluations par nom de branche. Omettez ce paramètre pour lister les évaluations de toutes les branches - String
    • pageIndex - Index de page commençant à 1 (par défaut : 1) - Number
    • pageSize - Nombre d’éléments par page, maximum 100 (par défaut : 50) - Number

Architecture

Remarque : activez ces outils avec SONARQUBE_TOOLSETS=architecture en mode stdio ou HTTP/HTTPS. SonarQube Cloud nécessite un forfait Team ou Enterprise. SonarQube Server nécessite la version 2026.6 ou ultérieure et l’édition Developer ou supérieure ; les outils ne sont pas disponibles sur les versions antérieures ni sur Community Build. Consultez les workflows d’architecture et la récupération.

  • architecture_get - Lire les dépendances actuelles, l’architecture prévue, les directives du projet ou les constats (écarts, défauts et mauvaises pratiques).

    • target - current, intended, directives ou findings ; la disponibilité dépend de la version de MCP et de Server - Enum requis
    • projectKey - Clé du projet - Chaîne requise (Ignorée si SONARQUBE_PROJECT_KEY est défini)
    • organization - Clé de l’organisation SonarQube Cloud si aucune n’est configurée - Chaîne facultative, Cloud uniquement
    • component - Clé exacte du nœud actuel ou chemin du groupe prévu ; niveau supérieur si omis - String
    • depth - Actuel/prévu uniquement : niveaux sous le point de départ ; 1 par défaut pour l’actuel, tous pour le prévu - Number
    • language - Actuel/prévu/constats uniquement : java, cs, js, ts ou py - Enum
    • directiveId - Directive complète par UUID, description comprise ; à utiliser à la place de la pagination - String
    • category / type - Constats uniquement : filtrer les écarts, défauts ou mauvaises pratiques selon leur type annoncé - Enum
    • pageIndex - Directives/constats : index de page commençant à 1 (par défaut : 1) - Number
    • pageSize - Directives : résumés, 50 par défaut/maximum. Constats : 50 par défaut, 1000 maximum ; 0 compte uniquement - Number
  • architecture_set - Remplacer l’ensemble de l’architecture prévue ou créer, mettre à jour et supprimer des directives de projet. Disponible sur les versions Cloud et Server prises en charge lorsque les écritures sont activées.

    • target - intended ou directives - Enum requis
    • projectKey - Clé du projet - Chaîne requise (Ignorée si SONARQUBE_PROJECT_KEY est défini)
    • organization - Clé de l’organisation SonarQube Cloud si aucune n’est configurée - Chaîne facultative, Cloud uniquement
    • model - Chaîne JSON : export complet prévu ou tableau models (le contenu omis est supprimé), ou modifications des directives avec les tableaux create, update et delete - Chaîne requise
    • dryRun - true pour prévisualiser, false pour appliquer - Booléen requis
    • revision - Architecture prévue uniquement : révision de architecture_get ; par défaut, révision de l’export complet. Obligatoire lors de l’application d’un effacement - String

Exemples de prompts

Une fois le serveur MCP SonarQube configuré, voici quelques exemples de prompts pour des scénarios courants du monde réel :

Corriger un Quality Gate en échec
My quality gate is failing for my project. Can you help me understand why and fix the most critical issues?
The quality gate on my feature branch is red. What do I need to fix to get it passing before I can merge to main?
Vérifications avant une version et avant une fusion
I'm about to merge my pull request <#247> for the <web-app> project. Can you check if there are any quality issues I should address first?
We're deploying to production tomorrow. Can you check the quality gate status and alert me to any critical issues in this branch?
Améliorer la qualité du code
I want to reduce technical debt in my project. What are the top issues I should prioritize?
Our code coverage dropped below 70%. Can you identify which files have the lowest coverage and help me improve it?
Comprendre et corriger les problèmes
I have 15 new code smells in my latest commit. Can you explain what they are and help me fix them?
SonarQube flagged a critical security vulnerability in <AuthController.java>. What's the issue and how do I fix it?
Sécurité et gestion des dépendances
We need to pass a security audit. Can you check all our projects for security vulnerabilities and create a prioritized list of what needs to be fixed?
Are there any known vulnerabilities in our dependencies? Check this project for dependency risks.
Assistance aux revues de code
I just wrote this authentication function. Can you analyze it for security issues and code quality problems before I commit?
Review the changes in <src/database/migrations> for any potential bugs or security issues.
Surveillance de l’état du projet
Give me a health report for my project: quality gate status, number of bugs, Security Hotspots, and code coverage.
Compare code quality between our main branch and the develop branch. Are we introducing new issues?
Collaboration d’équipe
What are the most common rule violations across all our projects? We might need to update our coding standards.
Show me all the issues that were marked as false positives in the last month. Are we seeing patterns that suggest our rules need adjustment?

Compilation

Privilégiez l’image conteneur sonarsource/sonarqube-mcp.

Pour exécuter le serveur en tant que JAR autonome sans Docker, téléchargez une version précompilée depuis le dépôt de binaires SonarSource. Chaque version publiée y est disponible sous la forme sonarqube-mcp-server-<version>.jar (par exemple, sonarqube-mcp-server-1.19.0.2785.jar).

Exécuter depuis un JAR

Téléchargez le JAR de la version souhaitée depuis le dépôt de binaires, puis configurez votre client MCP pour l’exécuter avec Java 21 ou une version ultérieure :

  • Pour vous connecter à SonarQube Cloud :
{
  "sonarqube": {
    "command": "java",
    "args": [
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "STORAGE_PATH": "<path_to_your_mcp_storage>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>"
    }
  }
}
  • Pour vous connecter à SonarQube Server :
{
  "sonarqube": {
    "command": "java",
    "args": [
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "STORAGE_PATH": "<path_to_your_mcp_storage>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}
Compiler à partir des sources

Le serveur MCP SonarQube nécessite un kit de développement Java (JDK) version 21 ou ultérieure pour être compilé.

Exécutez la commande Gradle suivante pour nettoyer le projet et compiler l’application :

./gradlew clean build -x test

Le fichier JAR sera créé dans build/libs/.

Après avoir ajouté ou mis à jour des dépendances, régénérez les fichiers de verrouillage :

./gradlew :dependencies --write-locks
./gradlew :its:dependencies --write-locks

Utilisez la configuration Exécuter depuis un JAR ci-dessus, en indiquant dans <path_to_sonarqube_mcp_server_jar> le JAR situé dans build/libs/.

Dépannage

Par défaut, les journaux de l’application sont écrits dans le fichier STORAGE_PATH/logs/mcp.log. Pour désactiver complètement la journalisation dans un fichier, définissez SONARQUBE_LOG_TO_FILE_DISABLED=true.

Problèmes courants

« La version du serveur SonarQube n’est pas prise en charge »

Le serveur MCP vérifie la version du serveur SonarQube connecté au démarrage. Si l’instance est antérieure à 2025.1 (SQS) ou 25.1 (SQCB), le démarrage échoue avec :

SonarQube server version is not supported, minimal version is SQS 2025.1 or SQCB 25.1

Solution : mettez à niveau SonarQube Server vers une version prise en charge. Cette vérification s’applique uniquement lors d’une connexion à SonarQube Server (SONARQUBE_URL sans SONARQUBE_ORG), et non à SonarQube Cloud.

« La fonctionnalité ne fonctionne pas » ou « Outils/fonctionnalités manquants »

Vous utilisez peut-être une image Docker obsolète. Docker met les images en cache localement ; vous ne recevrez donc pas automatiquement les mises à jour.

Solution : mettez à jour vers la dernière version :

docker pull sonarsource/sonarqube-mcp

Après avoir récupéré la dernière image, redémarrez votre client MCP pour utiliser la version mise à jour.

Vous pouvez également ajouter l’indicateur --pull=always à votre commande docker run pour toujours vérifier si une version plus récente est disponible et la récupérer :

docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_ORG sonarsource/sonarqube-mcp

« Je veux utiliser une version précise »

Consultez les balises disponibles sur sonarsource/sonarqube-mcp et indiquez la version souhaitée :

docker pull sonarsource/sonarqube-mcp:1.19.0.2785

docker run --init -i --rm \
  -e SONARQUBE_TOKEN -e SONARQUBE_ORG \
  sonarsource/sonarqube-mcp:1.19.0.2785

Dans la configuration de votre client MCP, utilisez sonarsource/sonarqube-mcp:<version> à la place de sonarsource/sonarqube-mcp et supprimez --pull=always afin que Docker ne mette pas silencieusement l’image à niveau.

Données et télémétrie

Ce serveur collecte des données d’utilisation anonymes et les envoie à SonarSource afin de contribuer à l’amélioration du produit. Aucun code source ni aucune adresse IP ne sont collectés, et SonarSource ne partage ces données avec personne. La collecte de données de télémétrie peut être désactivée à l’aide de la propriété système ou de la variable d’environnement suivante : TELEMETRY_DISABLED=true. Cliquez ici pour voir un exemple des données collectées.

Licence

Copyright 2025 SonarSource.

Sous licence SONAR Source-Available License v1.0. L’utilisation du serveur SonarQube MCP conformément à cette documentation constitue une finalité non concurrentielle et est donc autorisée en vertu de la SSAL.

Votre utilisation de SonarQube via MCP est régie par les Conditions d’utilisation de SonarQube Cloud ou les Conditions générales de SonarQube Server, notamment en ce qui concerne l’utilisation des données de résultats exclusivement à des fins de développement logiciel internes.