/ ディレクトリ / プレイグラウンド / SonarQube MCP
● 公式 SonarSource 🔑 自分のキーが必要

SonarQube MCP

作者 SonarSource · SonarSource/sonarqube-mcp-server

Sonar の静的解析結果を Claude が扱えるようにする。ダッシュボードを眺めるのではなく、ファイルとルール単位で問題を修正できる。

sonarqube-mcp-server は SonarQube と SonarCloud の公式 MCP。イシュー・セキュリティホットスポット・品質ゲート・メトリクス・コード品質履歴を MCP ツールとして公開する。Claude はイシューを読み、ルールを確認し、ルールの推奨に基づいた修正を書く。一般的な推測ではなく。

なぜ使うのか

主な機能

ライブデモ

実際の動作

sonarqube-mcp.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "sonarqube-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "mcp/sonarqube"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "sonarqube-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "mcp/sonarqube"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "sonarqube-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "mcp/sonarqube"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "sonarqube-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "mcp/sonarqube"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "sonarqube-mcp",
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "mcp/sonarqube"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "sonarqube-mcp": {
      "command": {
        "path": "docker",
        "args": [
          "run",
          "--init",
          "--pull=always",
          "-i",
          "--rm",
          "-e",
          "SONARQUBE_TOKEN",
          "-e",
          "SONARQUBE_ORG",
          "mcp/sonarqube"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

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

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: SonarQube MCP

コードベース全体で特定ルールの違反をまとめて修正する

👤 技術的負債を解消したい開発者 ⏱ ~45 min intermediate

使うタイミング: Sonar が同じルールの違反を 47 件フラグしており、1 つの PR でまとめて直したいとき。

前提条件
  • Sonar トークン — ユーザー → セキュリティ → トークン生成(可能であればプロジェクトスコープで)
  • Docker が利用可能 — 標準的な Docker 環境。初回実行時にイメージが取得される
フロー
  1. ルールを特定する
    Use sonarqube-mcp. Top 5 rules by open-issue count in project 'foo'.✓ コピーしました
    → ルールキー・件数・深刻度が表示される
  2. 1 つのルールの全インスタンスを取得する
    List every open issue for rule java:S2293 (Use Diamond Operator) — file, line, snippet.✓ コピーしました
    → ファイル:行番号と前後のコード付きで 47 件が表示される
  3. 修正を適用する
    For each, apply the rule's recommended fix. Keep changes minimal; don't reformat.✓ コピーしました
    → 約 20 ファイルにわたる 47 件の小規模な修正
  4. 再スキャンして確認する
    After my CI runs the next analysis, recheck the issue count for that rule.✓ コピーしました
    → 件数が 0 に減少する

結果: 1 つのルール全体を解消する集中的な PR。47 件が散らばった修正コミットではなく。

注意点
  • 自動修正が生成されたコードを壊す — ディレクトリでフィルタリングする。生成ファイルやテストパスはスキップするか手動で確認する
組み合わせ: github · filesystem

PR の品質ゲートが失敗している原因をデバッグする

👤 PR がブロックされた開発者 ⏱ ~30 min intermediate

使うタイミング: Sonar が PR を落とし、ダッシュボードを見ても何が問題かわからないとき。

フロー
  1. ゲートのステータスを確認する
    Use sonarqube-mcp. Show quality gate status for PR 1234 — which conditions failed?✓ コピーしました
    → ゲートの内訳が表示される:例「新規カバレッジ 67% < 80% 閾値」
  2. 失敗している条件を掘り下げる
    For 'New Coverage' below threshold — list new lines added in this PR with no test coverage.✓ コピーしました
    → ファイルごとのカバレッジなし新規行の一覧が表示される
  3. テストを生成する
    Write tests covering those uncovered lines.✓ コピーしました
    → 新規テストファイルが追加される。各ケースの概要が説明される

結果: カバレッジの絨毯爆撃ではなく、的を絞ったテストで PR がアンブロックされる。

注意点
  • カバレッジのためのテストで、動作を検証していない — Claude に各テストのアサーション内容も述べさせる。実際のアサーションがないものは却下する
組み合わせ: github

セキュリティホットスポットをレビューして解消する

👤 セキュリティ意識の高いエンジニア ⏱ ~40 min advanced

使うタイミング: ホットスポットが積み上がり、「安全確認済み」または「修正済み」のトリアージが必要なとき。

フロー
  1. 未解消のホットスポットを一覧表示する
    Use sonarqube-mcp. List all unreviewed security hotspots in project 'foo' grouped by category.✓ コピーしました
    → カテゴリ別にグループ化されたホットスポットが表示される(例:「弱い暗号化」「認証」)
  2. リスクを説明する
    For each, summarize the risk in 1 line. Mark which are clearly safe-to-acknowledge vs need-fix.✓ コピーしました
    → 注釈付きのトリアージリストが表示される
  3. 修正または確認
    For need-fix ones, apply the rule's safe pattern. For safe ones, give me the comment to leave on the hotspot review.✓ コピーしました
    → 修正が適用され、レビューコメントの下書きが作成される

結果: 監査証跡付きでホットスポットが解消される。黙って無視するのではなく。

注意点
  • 何も考えずに「安全」とマークしてしまう — Claude にコメントで「なぜ安全か」の根拠を示させること。それが監査可能な記録になる
組み合わせ: github

組み合わせ

他のMCPと組み合わせて10倍の力を

sonarqube-mcp + github

PR に Sonar の結果を注釈として追加するか、新規違反のイシューを自動作成する

On every PR, comment Sonar's gate result and any new issues it added.✓ コピーしました
sonarqube-mcp + filesystem

ルールの修正をローカルに適用してコミット前に確認する

Fix all java:S2293 instances; write the diffs locally for review before commit.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
search_issues project, rules?, severities?, types?, branch? ルール・深刻度・種別でイシューをフィルタリングする 1 SonarQube API call
get_rule rule_key 修正前に公式のガイダンスを確認する 1 API call
get_quality_gate project, branch_or_pr PR・ブランチのゲート失敗を診断する 1 API call
search_hotspots project, status? セキュリティレビュー 1 API call
get_metrics project, metric_keys[] 傾向・乖離のチェック(カバレッジ・重複など) 1 API call

コストと制限

運用コスト

APIクォータ
Sonar API のレート制限はエディションによって異なる。一括ループは控えめに
呼び出しあたりのトークン
イシューは 1 ページ 100 件。1 件あたり約 200 トークン
金額
SonarCloud のパブリックプロジェクトは無料。SonarQube はエンタープライズライセンスが必要
ヒント
search_issues でしっかりフィルタリングすること。全件ページングは無駄が多い

セキュリティ

権限、シークレット、影響範囲

最小スコープ: Browse See Source Code
認証情報の保管: SONARQUBE_TOKEN 環境変数(プロジェクトスコープで設定)
データ送信先: Sonar インスタンス(sonarcloud.io またはセルフホスト)への通信
絶対に付与しない: チャット駆動エージェントに管理権限を付与しない

トラブルシューティング

よくあるエラーと対処法

401 Unauthorized

トークンを再生成する。プロジェクトスコープが必要な場合にユーザースコープのみになっていないか確認する

確認: curl -u $SONARQUBE_TOKEN: $SONAR_HOST/api/projects/search
Wrong organization

SONARQUBE_ORG 環境変数が Sonar の org スラッグに完全一致(小文字)していることを確認する

Docker コンテナからセルフホストの SonarQube に到達できない

--network host を使うか、SonarQube を到達可能なホスト名で公開する。コンテナ内で SONAR_HOST_URL を設定する

確認: docker run ... curl $SONAR_HOST_URL/api/system/status
イシューリストが古い内容を表示している

Sonar は最後に完了した解析を反映する。解析を再実行するか、プロジェクトの最終解析タイムスタンプを確認する

代替案

SonarQube MCP 他との比較

代替案代わりに使う場面トレードオフ
CodeQL via GitHub MCPGitHub Advanced Security を使っており、同じ場所で検出結果を確認したいときルールセットが異なる。品質ゲートの概念がない
Semgrep MCPSonar のインフラなしに軽量なパターンベースのスキャンが欲しいときコードスメルや保守性メトリクスのカバレッジが少ない

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る