sonarqube-mcp について
sonarqube-mcpは、コード品質の調査に使う読み取り専用MCPサーバーです。エージェントはプロジェクトや指標、品質ゲート、課題を調べられ、複数プロジェクトを最悪指標で順位付けできます。
主な機能
- 01ページ指定でのプロジェクト検索
- 02プロジェクト品質指標の確認
- 03品質ゲートと失敗条件の確認
- 04重大度・種類による課題の絞り込み
- 05最悪指標によるプロジェクト順位付け
活用シーン
- 01カバレッジが最も低いプロジェクトの特定
- 02品質ゲート失敗の原因調査
- 03BlockerまたはCriticalの脆弱性検索
- 04プロジェクト間の課題指標の比較
MCP 対応
stdio経由でSonarQubeとSonarCloudの検索ツールを提供します。すべて読み取り専用で、構造化データとMarkdownの要約を返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx sonarqube-mcpSONARQUBE_URLSonarQube URL (e.g. https://sonar.example.com or https://sonarcloud.io)SONARQUBE_TOKENシークレットSonarQube authentication token (Bearer). Generate in: My Account → Security → Tokens.SONARQUBE_SSL_VERIFYVerify SSL certificates (true/false). Set to 'false' for self-signed certs.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
sonarqube-mcp
SonarQube 用の MCP サーバーです。LLM エージェント(Claude Code、Cursor、OpenCode など)を使って、プロジェクトの検出、主要指標の取得、Quality Gate ステータスの確認、重大度/タイプによるフィルターを指定した問題の検索、任意の指標の 最悪 値によるプロジェクトの順位付けができます。
Python、FastMCP、stdio トランスポートを使用します。
SonarQube 9.x/10.x のすべてのインスタンス(セルフホスト)と SonarCloud で動作します。
新たな SonarQube MCP が必要な理由
コミュニティ製の SonarQube MCP はいくつかありますが、単一プロジェクトの読み取りにとどまる傾向があります。この MCP では、プロジェクト横断の順位付け(sonarqube_worst_metrics)を追加しています。これは、リードがトリアージ中に実際に実行する操作です。「組織内でカバレッジが最も低い上位 10 個のサービスを表示して」。すべてのツールは読み取り専用で、安全にパラメーター化されています(Pydantic 入力検証、重大度/タイプの許可リスト)。
設計の特長
- ツールのアノテーション — 5 つすべてのツールに
readOnlyHint: True、destructiveHint: False、idempotentHint: Trueが設定されています。このサーバーから SonarQube のデータが変更されることはありません。 - 構造化出力 — すべてのツールが、型付きペイロード(TypedDict)と Markdown の要約を返すため、構造化コンテンツに対応するクライアントも、対応しないクライアントも、どちらも利用可能な応答を受け取れます。
- 構造化エラー — 401/403/404/400/429/5xx を、実行可能なヒント(例:「トークンを再生成してください」「sonarqube_list_projects でプロジェクトキーを確認してください」)に対応付けます。
- すべての引数に対する Pydantic 入力検証。重大度/タイプのフィルターは、リクエスト送信前に有効な SonarQube の列挙値と照合されます。
- プロジェクト横断の最悪指標による順位付け — 内部で
/api/measures/searchの呼び出しをまとめて実行し、選択した指標で値が大きいほど悪いかどうかに応じて、昇順または降順に並べ替えます。
機能(5 つのツール)
検出
sonarqube_list_projects— オプションのテキストフィルターを指定できる、ページ分割されたプロジェクト検索
単一プロジェクトの分析
sonarqube_project_metrics— 1 つのプロジェクトの測定値(デフォルトの対象は bugs/coverage/smells/ratings/ncloc/tests/alert_status)sonarqube_quality_gate_status— Quality Gate のステータスと条件ごとの失敗
問題のトリアージ
sonarqube_get_issues— 重大度/タイプ/解決状況でフィルターした問題の検索
プロジェクト横断の順位付け
sonarqube_worst_metrics— 指標の最悪値(例:最も低いカバレッジ、最も多いバグ)で並べ替えた上位 N 件のプロジェクト
インストール
Python 3.10 以降が必要です。
# via uvx (recommended — no install, just run)
uvx --from sonarqube-mcp sonarqube-mcp
# or via pipx
pipx install sonarqube-mcp
設定
claude mcp add sonarqube -s project \
--env SONARQUBE_URL=https://sonar.example.com \
--env SONARQUBE_TOKEN=squ_your_token \
--env SONARQUBE_SSL_VERIFY=true \
-- uvx --from sonarqube-mcp sonarqube-mcp
または .mcp.json に記述します。
{
"mcpServers": {
"sonarqube": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "sonarqube-mcp", "sonarqube-mcp"],
"env": {
"SONARQUBE_URL": "https://sonar.example.com",
"SONARQUBE_TOKEN": "${SONARQUBE_TOKEN}",
"SONARQUBE_SSL_VERIFY": "true"
}
}
}
}
確認します。
claude mcp list
# sonarqube: uvx --from sonarqube-mcp sonarqube-mcp - ✓ Connected
環境変数
| 変数 | 必須 | 説明 |
|---|---|---|
SONARQUBE_URL | はい | SonarQube の URL(末尾にスラッシュを付けないでください) |
SONARQUBE_TOKEN | はい | Bearer トークン。生成場所:My Account → Security → Tokens |
SONARQUBE_SSL_VERIFY | いいえ | true/false。デフォルト:true。 |
HTTP プロキシに関する注意。 クライアントは、環境変数に基づくプロキシの検出を意図的に無効にしています(trust_env=False)。セルフホストの SonarQube は通常、内部ネットワークからしかアクセスできないためです。SonarCloud や、社内プロキシの 背後にある SonarQube に接続する場合、現時点ではプロセスレベルでプロキシ変数を設定する必要があります。SONARQUBE_TRUST_ENV_PROXY の設定項目は、今後のリリースで追加する予定です。
使用例
- 「
einvyに一致する SonarQube プロジェクトをすべて一覧表示して」 - 「
einvy:aut_einvyの Quality Gate ステータスは?」 - 「バグが最も多い上位 10 個のプロジェクトを表示して」
- 「
einvy:aut_einvyの BLOCKER/CRITICAL の脆弱性をすべて見つけて」 - 「
einvy:qa_assistantのカバレッジは?」 - 「クエリ
'einvy'に一致する、カバレッジが最も低いプロジェクト上位 5 件」
メトリクスの方向(sonarqube_worst_metricsで使用)
値が大きいほど悪い(降順で並べ替えます。値が大きいほど悪い結果です):
bugs, code_smells, vulnerabilities, duplicated_lines_density, reliability_rating, security_rating, security_review_rating, sqale_rating, open_issues
値が小さいほど悪い(昇順で並べ替えます。値が小さいほど悪い結果です):
coverage, line_coverage, branch_coverage, test_success_density, tests
SonarQube の評価は数値文字列で、「1」(A、最高)から「5」(E、最低)までです。
安全性
- すべてのツールは
readOnlyHint: Trueです。SonarQube を変更することはありません。 POST/PUT/DELETEが呼び出されることはありません。- API 呼び出しの前に、重大度/タイプ/修飾子の入力値を SonarQube の列挙値と照合して検証するため、誤記があれば API に到達する前にツールがエラーになります。
パフォーマンス特性
sonarqube_worst_metricsを除くすべてのツールは、SonarQube への HTTP 呼び出しを1回行います。sonarqube_worst_metricsは、検索呼び出しを1回と、メジャー一括取得呼び出しを⌈candidate_pool/100⌉回行います。デフォルト設定では呼び出し回数は2回以下です。- 正常な SonarQube インスタンスにおける単一ツールの応答時間は、通常500ミリ秒未満です。
- ページネーションは SonarQube にそのまま渡されます(
pとpsパラメーター)。MCP サーバーで結果全体をバッファリングすることはありません。 sonarqube_worst_metricsはcandidate_poolを500に制限します。数千のプロジェクトがあるインスタンスでは、ランキングの前にquery=で絞り込んでください(ツールの docstring を参照)。- SonarQube では、公開されている厳密なレート制限はありません。429 が返された場合、サーバーは具体的な対処法を示すエラーを返します(「再試行する前に30~60秒待ち、
page_sizeを小さくしてください」)。
開発
git clone https://github.com/mshegolev/sonarqube-mcp.git
cd sonarqube-mcp
pip install -e '.[dev]'
pytest
ライセンス
MIT © Mikhail Shchegolev
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。