SonarQube

resmi

Menyediakan integrasi yang mulus dengan SonarQube Server atau Cloud, dan memungkinkan analisis potongan kode secara langsung dalam konteks agen

Apa yang bisa Anda lakukan dengan SonarQube MCP?

  • Hubungkan ke SonarQube Cloud atau Server — Konfigurasikan container sonarsource/sonarqube-mcp dengan token, kunci organisasi, atau URL server untuk menghubungkan asisten Anda ke SonarQube.
  • Analisis cuplikan kode — Minta asisten menjalankan analisis pada cuplikan kode atau file dengan menggunakan mount ruang kerja untuk membaca file langsung dari disk.
  • Cari dan kelola masalah — Temukan dan perbarui masalah SonarQube melalui toolset issues.
  • Tinjau hotspot keamanan — Cari dan tinjau Hotspot Keamanan melalui toolset security-hotspots.
  • Jelajahi proyek dan gerbang kualitas — Cari kunci proyek, gerbang kualitas, aturan, metrik, dan data cakupan.
  • Batasi toolset dan gunakan mode hanya-baca — Gunakan SONARQUBE_TOOLSETS dan SONARQUBE_READ_ONLY untuk mengontrol alat yang dimuat dan memblokir operasi tulis.

Dokumentasi

Sonar logo

Build Quality Gate Status

SonarQube MCP Server

SonarQube MCP Server adalah server Model Context Protocol (MCP) yang memungkinkan integrasi tanpa hambatan dengan SonarQube Server atau Cloud untuk kualitas dan keamanan kode. Server ini juga mendukung analisis cuplikan kode langsung dalam konteks agen.

Mulai dengan penyiapan cepat, atau pelajari lebih lanjut tentang keluarga produk SonarQube.

Penyiapan cepat

Praktik terbaik keamanan

🔒 Penting: Token SonarQube Anda adalah kredensial sensitif. Ikuti praktik keamanan berikut:

Saat menggunakan perintah CLI:

  • Hindari menulis token secara langsung dalam argumen baris perintah – token akan tersimpan dalam riwayat shell
  • Gunakan variabel lingkungan – tetapkan token dalam variabel lingkungan sebelum menjalankan perintah

Saat menggunakan file konfigurasi:

  • Jangan pernah melakukan commit token ke kontrol versi
  • Gunakan substitusi variabel lingkungan dalam file konfigurasi jika memungkinkan

🚀 Buat konfigurasi Anda

Cara tercepat untuk memulai adalah dengan Generator Konfigurasi SonarQube MCP Server – alat interaktif yang menghasilkan konfigurasi siap pakai untuk klien agen AI pilihan Anda.

Penyiapan manual

Jika Anda lebih suka mengonfigurasi sendiri, cara termudah adalah menggunakan image kontainer kami di sonarsource/sonarqube-mcp. Gunakan sonarsource/sonarqube-mcp untuk pembaruan otomatis (dengan --pull=always), atau tetapkan tag versi (misalnya, sonarsource/sonarqube-mcp:1.19.0.2785) untuk deployment yang dapat direproduksi. Beberapa rilis juga diberi tag dengan versi SonarQube Server yang menjadi acuannya, dalam format <SQS major>.<SQS minor>.<patch> (misalnya, sonarsource/sonarqube-mcp:2026.5.0), dengan nomor patch bertambah untuk setiap rilis MCP yang menargetkan versi SonarQube Server tersebut. Baca bagian di bawah ini jika Anda ingin membangunnya secara lokal.

Catatan: Meskipun contoh di bawah menggunakan docker, runtime kontainer apa pun yang kompatibel dengan OCI dapat digunakan (misalnya, Podman, nerdctl). Cukup ganti docker dengan alat pilihan Anda.

Antigravity

SonarQube MCP Server tersedia di Antigravity MCP Store. Ikuti petunjuk berikut:

  1. Buka Panel Samping Agen
  2. Klik tiga titik (...) di kanan atas, lalu pilih MCP Servers
  3. Cari SonarQube dan pilih Install
  4. Berikan token User SonarQube yang diperlukan. Anda juga dapat memberikan kunci organisasi untuk SonarQube Cloud atau URL SonarQube jika terhubung ke SonarQube Server.

Untuk SonarQube Cloud US, tetapkan URL ke https://sonarqube.us.

Sebagai alternatif, Anda dapat mengonfigurasi server secara manual melalui mcp_config.json:

  • Untuk terhubung ke SonarQube Cloud:

Di Panel Samping Agen, klik tiga titik (...) -> MCP Store -> Manage MCP Servers -> View raw config, lalu tambahkan konfigurasi berikut:

{
  "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>"
      }
    }
  }
}

Untuk SonarQube Cloud US, tambahkan "SONARQUBE_URL": "https://sonarqube.us" ke bagian env dan "-e", "SONARQUBE_URL" ke array args.

  • Untuk terhubung ke 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
  • Untuk terhubung ke 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

Untuk SonarQube Cloud US, tambahkan --env SONARQUBE_URL=https://sonarqube.us ke perintah.

  • Untuk terhubung ke 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

Edit file konfigurasi secara manual di ~/.codex/config.toml dan tambahkan konfigurasi berikut:

  • Untuk terhubung ke 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>" }

Untuk SonarQube Cloud US, tambahkan "SONARQUBE_URL" = "https://sonarqube.us" ke bagian env dan "-e", "SONARQUBE_URL" ke array args.

  • Untuk terhubung ke 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
  • Untuk terhubung ke SonarQube Cloud:

Install for SonarQube Cloud

Untuk SonarQube Cloud US, tambahkan "SONARQUBE_URL": "https://sonarqube.us" secara manual ke bagian env dalam konfigurasi MCP Anda setelah instalasi.

  • Untuk terhubung ke SonarQube Server:

Install for SonarQube Server

Gemini CLI

Catatan: Ekstensi Gemini CLI telah dipindahkan ke repositori sonarqube-agent-plugins. Mulai sekarang, silakan instal dari sana.

Anda dapat menginstal ekstensi server MCP kami dengan perintah berikut:

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

Anda perlu menetapkan variabel lingkungan yang diperlukan sebelum memulai Gemini:

Variabel Lingkungan yang Diperlukan:

  • Untuk SonarQube Cloud:

    • SONARQUBE_TOKEN - Token SonarQube Cloud Anda
    • SONARQUBE_ORG - Kunci organisasi Anda
    • SONARQUBE_URL - (Opsional) Tetapkan ke https://sonarqube.us untuk SonarQube Cloud US
  • Untuk SonarQube Server:

    • SONARQUBE_TOKEN - Token USER SonarQube Server Anda
    • SONARQUBE_URL - URL SonarQube Server Anda

Setelah diinstal, ekstensi akan dipasang di <home>/.gemini/extensions/sonarqube/gemini-extension.json.

GitHub Copilot CLI

Setelah memulai Copilot CLI, jalankan perintah berikut untuk menambahkan server SonarQube MCP:

/mcp add

Anda perlu memberikan informasi yang berbeda tentang server MCP. Anda dapat menggunakan tombol tab untuk berpindah antarbidang.

  • Untuk terhubung ke 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: *

Untuk SonarQube Cloud US, tambahkan -e, SONARQUBE_URL ke Arguments dan SONARQUBE_URL=https://sonarqube.us ke Environment Variables.

  • Untuk terhubung ke 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: *

File konfigurasi berada di ~/.copilot/mcp-config.json.

GitHub Copilot coding agent

GitHub Copilot coding agent dapat menggunakan server SonarQube MCP secara langsung di CI/CD Anda.

Untuk menambahkan rahasia ke lingkungan Copilot, ikuti dokumentasi Copilot. Hanya rahasia dengan nama yang diawali COPILOT_MCP_ yang akan tersedia untuk konfigurasi MCP Anda.

Di repositori GitHub Anda, buka Settings -> Copilot -> Coding agent, lalu tambahkan konfigurasi berikut di bagian konfigurasi MCP:

  • Untuk terhubung ke 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": ["*"]
    }
  }
}

Untuk SonarQube Cloud US, tambahkan "-e", "SONARQUBE_URL" ke array args dan "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL" ke bagian env, lalu tetapkan rahasia COPILOT_MCP_SONARQUBE_URL=https://sonarqube.us.

  • Untuk terhubung ke 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

Buat file .kiro/settings/mcp.json di direktori ruang kerja Anda (atau edit jika sudah ada), lalu tambahkan konfigurasi berikut:

  • Untuk terhubung ke 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": []
    }
  }
}

Untuk SonarQube Cloud US, tambahkan "-e", "SONARQUBE_URL" ke array args dan "SONARQUBE_URL": "https://sonarqube.us" ke bagian env.

  • Untuk terhubung ke 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

Anda dapat menggunakan tombol berikut untuk menyederhanakan proses instalasi di VS Code.

Install for SonarQube Cloud

Untuk SonarQube Cloud US, tambahkan "SONARQUBE_URL": "https://sonarqube.us" secara manual ke bagian env dalam konfigurasi MCP Anda setelah instalasi.

Install for SonarQube Server

Windsurf

SonarQube MCP Server tersedia sebagai plugin Windsurf. Ikuti petunjuk berikut:

  1. Buka Settings > Cascade > MCP Servers di Windsurf, lalu pilih Open MCP Marketplace
  2. Cari sonarqube di Cascade MCP Marketplace
  3. Pilih SonarQube MCP Server, lalu pilih Install
  4. Tambahkan token User SonarQube yang diperlukan. Anda juga dapat menambahkan kunci organisasi default untuk SonarQube Cloud, atau URL SonarQube untuk SonarQube Server atau Community Build.

Untuk SonarQube Cloud US, tetapkan URL ke https://sonarqube.us.

Zed

Buka tampilan Extensions di Zed dan cari SonarQube MCP Server. Saat menginstal ekstensi, Anda akan diminta memberikan variabel lingkungan yang diperlukan:

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

Untuk SonarQube Cloud US, tambahkan "sonarqube_url": "https://sonarqube.us" ke konfigurasi.

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

docker_path adalah jalur ke executable docker. Contoh:

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

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

💡 Tips: Sebaiknya tarik image terbaru secara berkala atau sebelum melaporkan masalah untuk memastikan Anda menggunakan fitur dan perbaikan terbaru.

Instalasi manual

Anda dapat menginstal server SonarQube MCP secara manual dengan menyalin cuplikan berikut ke file konfigurasi server MCP:

  • Untuk terhubung ke 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>"
    }
  }
}
  • Untuk terhubung ke 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>"
    }
  }
}

Integrasi dengan SonarQube for IDE

SonarQube MCP Server dapat diintegrasikan dengan SonarQube for IDE untuk lebih menyempurnakan alur kerja pengembangan Anda, dengan menyediakan analisis kode dan wawasan yang lebih baik langsung di IDE.

Konfigurasi

Saat menggunakan SonarQube for IDE, variabel lingkungan SONARQUBE_IDE_PORT harus ditetapkan dengan nomor port yang benar. SonarQube for VS Code menyertakan tombol Quick Install yang secara otomatis menetapkan konfigurasi port yang benar.

Contohnya, dengan 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>"
    }
  }
}

Saat menjalankan server MCP dalam kontainer di Linux, kontainer tidak dapat mengakses server tertanam SonarQube for IDE yang berjalan di localhost. Agar kontainer dapat terhubung ke server SonarQube for IDE, tambahkan opsi --network=host ke perintah untuk menjalankan kontainer.

Konfigurasi

Bergantung pada lingkungan Anda, Anda perlu menyediakan variabel lingkungan tertentu.

Dasar

Anda perlu menambahkan variabel berikut saat menjalankan MCP Server:

Variabel lingkunganDeskripsi
STORAGE_PATHJalur absolut wajib ke direktori yang dapat ditulisi tempat SonarQube MCP Server akan menyimpan file-nya (misalnya, untuk pembuatan, pembaruan, dan persistensi); jalur ini disediakan secara otomatis saat menggunakan image container
SONARQUBE_PROJECT_KEYKunci proyek default opsional. Jika ditetapkan, semua alat yang memerlukan kunci proyek akan menggunakan nilai ini secara otomatis — parameter projectKey dihapus sepenuhnya dari skemanya. Berguna saat bekerja pada satu proyek.
SONARQUBE_IDE_PORTNomor port opsional antara 64120 dan 64130 yang digunakan untuk menghubungkan SonarQube MCP Server dengan SonarQube for IDE.
SONARQUBE_FORCE_LOCAL_ANALYSISTetapkan ke true untuk menggunakan analyze_code_snippet alih-alih analisis Vortex di Cloud stdio, termasuk untuk organisasi yang memiliki hak akses. Memerlukan toolset analysis. Default: false. Tidak berpengaruh pada SonarQube Server atau Cloud HTTP.
SONARQUBE_DEBUG_ENABLEDJika ditetapkan ke true, pencatatan log debug akan diaktifkan. Log debug ditulis ke file log dan STDERR. Berguna untuk memecahkan masalah konektivitas atau konfigurasi. Default: false.
SONARQUBE_LOG_TO_FILE_DISABLEDJika ditetapkan ke true, penulisan log ke disk akan dinonaktifkan sepenuhnya. Tidak ada file log yang akan dibuat di bawah STORAGE_PATH/logs/. Berguna di lingkungan berbasis container atau sementara yang tidak memerlukan pencatatan log ke file. Default: false.

Mount Workspace (Mengurangi Pembengkakan Konteks)

Secara default, alat analisis analyze_code_snippet mengharuskan agen meneruskan seluruh konten file sebagai argumen fileContent. Untuk file besar atau saat menganalisis banyak file dalam satu sesi, hal ini secara signifikan meningkatkan penggunaan jendela konteks dan biaya.

Solusi: mount direktori proyek Anda ke dalam container di /app/mcp-workspace. Saat mount ini terdeteksi, server membaca file langsung dari disk menggunakan argumen filePath yang relatif terhadap proyek — konten file tidak pernah melewati konteks agen.

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

Dengan mount, alat analisis membaca file secara langsung menggunakan filePath; fileContent tidak diperlukan.

Melalui stdio, analisis dipilih saat startup (bergantung pada toolset yang diaktifkan):

  • SonarQube Cloud: analisis Vortex (run_advanced_code_analysis) dengan mount workspace dan setidaknya satu organisasi yang memiliki hak akses; jika tidak, analisis lokal. Analisis Vortex hanya menerima organisasi yang memiliki hak akses.
  • SonarQube Server: analisis Vortex untuk instance yang memiliki hak akses (memerlukan mount workspace); analisis lokal untuk instance tanpa Vortex.

Analisis lokal menggunakan SonarQube for IDE jika terhubung, atau analyze_code_snippet. Tanpa mount, analisis cuplikan memerlukan fileContent.

Di Cloud stdio, SONARQUBE_ORG membatasi pemeriksaan hak akses pada organisasi tersebut. Untuk menggunakan cuplikan bagi semua organisasi, tetapkan SONARQUBE_FORCE_LOCAL_ANALYSIS=true, aktifkan toolset analysis, lalu mulai ulang. Pengaturan ini hanya memengaruhi Cloud stdio.

Melalui HTTP/HTTPS, Cloud dan Server mendukung analyze_code_snippet jika server MCP memiliki SONARQUBE_TOKEN saat startup dan toolset analysis diaktifkan. Token startup diperlukan untuk inisialisasi penganalisis (unduhan plugin Cloud bersifat anonim); panggilan menggunakan token pemanggil dan, di Cloud, organisasi yang dipilih untuk permintaan tersebut guna mengambil profil kualitas dan aturan aktif. Tanpa token startup, analisis cuplikan dan unduhan penganalisis dinonaktifkan, bahkan dengan SONARQUBE_FORCE_LOCAL_ANALYSIS=true. Hak akses Vortex tidak diperlukan.

Pengaktifan Tool Secara Selektif

Klien MCP memuat setiap alat yang diaktifkan — nama, deskripsi, dan skema inputnya — ke dalam konteks agen pada setiap percakapan. Membatasi daftar tersebut dengan SONARQUBE_TOOLSETS mengurangi penggunaan konteks dan biaya token untuk setiap sesi.

Secara default, hanya toolset penting yang diaktifkan. Aktifkan toolset tambahan hanya jika diperlukan.

Variabel lingkunganDeskripsi
SONARQUBE_TOOLSETSDaftar toolset yang akan diaktifkan, dipisahkan dengan koma. Jika ditetapkan, hanya toolset ini yang akan tersedia. Jika tidak ditetapkan, toolset penting default akan diaktifkan (analysis, ide, issues, projects, quality-gates, rules, duplications, measures, security-hotspots, dependency-risks, coverage, cag). Catatan: Toolset projects selalu diaktifkan karena diperlukan untuk menemukan kunci proyek bagi operasi lain. Tool konteks Vortex (nama yang sudah usang: Context Augmentation/CAG) dan tool analisis Vortex (nama yang sudah usang: Advanced Analysis/A3S) hanya tersedia dalam mode stdio dan berbagi satu hak akses organisasi gabungan — organisasi harus memiliki hak akses untuk keduanya agar dapat menggunakan salah satunya. Analisis bawaan Cloud memeriksa organisasi yang dipilih saat runtime; tool konteks yang diproksikan menggunakan organisasi startup. Di SonarQube Server, stdio mencantumkan konteks Vortex dan run_advanced_code_analysis jika hub CAG dan A3S sama-sama memiliki hak akses. Sebaiknya gunakan kunci toolset terpadu vortex. Kunci cag dan analysis yang sudah usang tetap berfungsi; peringatan startup dan catatan penghentian penggunaan dalam instruksi server akan ditampilkan jika kunci tersebut digunakan tanpa vortex. Dalam mode Streamable HTTP, klien dapat mengirim header HTTP SONARQUBE_TOOLSETS untuk mempersempitnya lebih lanjut per permintaan, tetapi tidak dapat mengaktifkan toolset di luar yang digunakan saat server dijalankan (lihat transport Streamable HTTP di bawah).
SONARQUBE_READ_ONLYJika ditetapkan ke true, mode hanya-baca akan diaktifkan dan semua operasi tulis dinonaktifkan (misalnya, mengubah status masalah). Filter ini bersifat kumulatif dengan SONARQUBE_TOOLSETS jika keduanya ditetapkan. Default: false. Dalam mode Streamable HTTP, klien dapat mengirim header HTTP SONARQUBE_READ_ONLY untuk membatasi permintaan tertentu ke mode hanya-baca, tetapi tidak dapat mencabut pembatasan hanya-baca di tingkat server (lihat transport Streamable HTTP di bawah).
Toolset yang Tersedia | Toolset | Key | Deskripsi | |-----------------------|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Analysis** | `analysis` | Alat analisis kode (analisis lokal melalui `analyze_code_snippet`, **deprecated** dan digantikan oleh analisis `analyze_file_list`/Vortex) | | **IDE** | `ide` | Alat bridge SonarQube for IDE (analisis file, pengaktifan/penonaktifan analisis otomatis) — saat ini juga disertakan dalam `analysis` | | **Issues** | `issues` | Mencari dan mengelola issue SonarQube | | **Security Hotspots** | `security-hotspots` | Mencari dan meninjau Security Hotspot | | **Projects** | `projects` | Menelusuri dan mencari proyek SonarQube | | **Quality Gates** | `quality-gates` | Mengakses quality gate dan statusnya | | **Rules** | `rules` | Menelusuri dan mencari aturan SonarQube | | **Sources** | `sources` | Mengakses kode sumber dan informasi SCM | | **Duplications** | `duplications` | Menemukan duplikasi kode di berbagai proyek | | **Measures** | `measures` | Mengambil metrik dan ukuran (mencakup alat ukuran dan metrik) | | **Languages** | `languages` | Mencantumkan bahasa pemrograman yang didukung | | **Portfolios** | `portfolios` | Mengelola portofolio dan perusahaan (Cloud dan Server) | | **System** | `system` | Alat administrasi sistem (Server saja) | | **Webhooks** | `webhooks` | Mengelola webhook | | **Dependency Risks** | `dependency-risks` | Menganalisis risiko dependensi dan masalah keamanan (SCA) | | **Coverage** | `coverage` | Alat analisis dan peningkatan cakupan pengujian | | **Vortex Context** | `cag` | Alat konteks Vortex — hanya stdio. **Deprecated** dan digantikan oleh `vortex` (nama lama: Context Augmentation/CAG) | | **Vortex** | `vortex` | Toolset terpadu yang **direkomendasikan**, menyediakan alat konteks Vortex dan analisis Vortex dengan satu nama (hanya stdio; Cloud memerlukan entitlement org gabungan; Server memerlukan entitlement untuk kedua hub) | | **Agentic Readiness** | `agentic-readiness` | Alat Penilaian Agentic Readiness (SonarQube Cloud, memerlukan entitlement org) | | **Architecture** | `architecture` | Membaca arsitektur, mengganti model yang dimaksudkan, dan mengelola arahan proyek (tidak diaktifkan secara default) |

Contoh

Aktifkan toolset analysis, issues, dan quality gates (menggunakan Docker dengan 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

Catatan: Toolset projects selalu diaktifkan secara otomatis, jadi Anda tidak perlu menyertakannya dalam SONARQUBE_TOOLSETS.

Aktifkan mode hanya-baca (menggunakan Docker dengan 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

Untuk stdio, konfigurasikan variabel lingkungan berikut:

Variabel lingkunganDeskripsiWajib
SONARQUBE_TOKENToken SonarQube Cloud AndaYa
SONARQUBE_ORGKey organisasi SonarQube Cloud opsional yang tetapTidak
SONARQUBE_URLURL SonarQube Cloud kustom (default ke https://sonarcloud.io). Gunakan ini untuk SonarQube Cloud US: https://sonarqube.usTidak

Contoh:

  • SonarQube Cloud: Hanya SONARQUBE_TOKEN yang diperlukan. SONARQUBE_ORG menetapkan organisasi jika diatur.
  • SonarQube Cloud US: Atur SONARQUBE_TOKEN dan SONARQUBE_URL=https://sonarqube.us; SONARQUBE_ORG bersifat opsional.

SonarQube Server

Variabel lingkunganDeskripsiWajib
SONARQUBE_TOKENToken USER SonarQube Server AndaYa
SONARQUBE_URLURL SonarQube Server AndaYa

Persyaratan versi: SonarQube Server 2025.1 (SQS) atau 25.1 (SonarQube Community Build) atau yang lebih baru diperlukan. Saat startup, server MCP membaca versi instance yang terhubung dan keluar dengan error jika versinya terlalu lama (misalnya, rilis Server 9.x/10.x lama dan Community Build 24.x tidak didukung). SonarQube Cloud tidak dikenai pemeriksaan ini.

⚠️ Koneksi ke SonarQube Server memerlukan token bertipe USER dan tidak akan berfungsi dengan baik jika menggunakan token proyek atau token global.

💡 Tips Konfigurasi (mode stdio): Token tanpa URL akan menggunakan SonarQube Cloud secara default. Atur SONARQUBE_URL untuk SonarQube Server atau region Cloud lain. SONARQUBE_ORG menetapkan organisasi Cloud jika diatur.

Dalam stdio, mengatur SONARQUBE_ORG akan menetapkan organisasi Cloud. Argumen organization alat dihilangkan dari skema dan ditolak, seperti projectKey saat SONARQUBE_PROJECT_KEY diatur.

Jika SONARQUBE_ORG tidak diatur, agen dapat memanggil list_organizations untuk menemukan key, nama, ID, dan UUID organisasi yang dapat diakses oleh akun pengguna Anda, lalu meneruskan key sebagai argumen organization opsional pada alat yang mendukung organisasi. Stdio mempertahankan organisasi yang terdeteksi secara unik sebagai default; jika tidak ada atau ada beberapa organisasi, organisasi tidak ditetapkan. Argumen alat hanya berlaku untuk pemanggilan tersebut dan tidak pernah mengubah default yang terdeteksi. Pencarian profil snippet dan aturan menggunakan organisasi yang dipilih untuk pemanggilan tersebut.

Untuk permintaan token HTTP/HTTPS, SONARQUBE_ORG tingkat server tetap didukung demi kompatibilitas, tetapi sudah deprecated dan mencatat peringatan saat startup. Pengaturan ini menetapkan organisasi untuk setiap permintaan serta menolak header organisasi dari klien dan argumen organization alat. Jika organisasi server tidak dikonfigurasi, header SONARQUBE_ORG opsional dari klien akan menetapkan organisasi untuk permintaan tersebut dan melarang argumen organization alat. Tanpa header, gunakan argumen alat. Alat yang memerlukan organisasi akan memberikan panduan penemuan jika semua opsi tidak tersedia. Penemuan organisasi dan alat yang API-nya hanya menggunakan pengenal sumber daya tidak memerlukan argumen organisasi. Pencarian issue yang mendukung organisasi dan pemeriksaan entitlement risiko dependensi menggunakan organisasi yang dipilih. Jika OAuth dikonfigurasi, SONARQUBE_ORG tingkat server akan ditolak. Permintaan OAuth juga menolak header organisasi; pilih organisasi melalui argumen alat.

Alat konteks Vortex menggunakan organisasi yang dikonfigurasi atau terdeteksi secara unik saat startup. Argumen organisasi saat runtime tidak mengonfigurasi ulang mesin konteks yang diproksikan; organisasi startup yang belum ditetapkan akan melewati proxy tersebut. Alat bawaan run_advanced_code_analysis memeriksa entitlement Vortex gabungan untuk organisasi yang dipilih pada setiap pemanggilan.

Mode Transport

Spesifikasi MCP mendefinisikan dua mekanisme transport: Stdio dan Streamable HTTP. SonarQube MCP Server mendukung keduanya:

Transport MCPMode serverPenggunaan umum
StdioDefault (tanpa SONARQUBE_TRANSPORT)Klien MCP lokal yang menjalankan server sebagai subproses (Cursor, Claude Code, VS Code, dll.)
Streamable HTTPSONARQUBE_TRANSPORT=http atau httpsDeployment jarak jauh atau multi-pengguna; klien terhubung ke /mcp melalui HTTP(S) (misalnya, Windsurf dengan URL server yang di-host sendiri)

Catatan: Streamable HTTP adalah transport jaringan MCP saat ini. Transport HTTP lama yang hanya menggunakan SSE dari versi MCP sebelumnya sudah deprecated dan tidak didukung.

1. Stdio (Default - Direkomendasikan untuk Pengembangan Lokal)

Mode yang direkomendasikan untuk pengembangan lokal dan konfigurasi satu pengguna, yang digunakan oleh sebagian besar klien MCP.

Contoh - Docker dengan 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 tanpa enkripsi. Gunakan HTTPS sebagai gantinya untuk deployment multi-pengguna.

⚠️ Tidak Direkomendasikan: Gunakan Stdio untuk pengembangan lokal atau HTTPS (Streamable HTTP) untuk deployment produksi multi-pengguna.

Variabel lingkunganDeskripsiDefault
SONARQUBE_TRANSPORTAtur ke http untuk mengaktifkan transport Streamable HTTPTidak diatur (stdio)
SONARQUBE_HTTP_PORTNomor port (1024-65535), atau 0 untuk port yang ditetapkan oleh OS8080
SONARQUBE_HTTP_HOSTHost yang akan diikat (default ke localhost demi keamanan)127.0.0.1
SONARQUBE_HTTP_ALLOWED_ORIGINSOrigin browser yang diizinkan untuk CORS, dipisahkan dengan koma (misalnya, https://my-app.example.com)Tidak diatur
SONARQUBE_MCP_IN_CONTAINERAtur ke true saat berjalan di dalam container. Image Docker resmi mengaturnya secara otomatis; atur sendiri jika menggunakan runtime OCI lain (Podman, Kubernetes, Nomad, dll.).false
Catatan: HTTP/HTTPS menerima token SonarQube pengguna melalui Authorization: Bearer <token>. Layanan Cloud yang di-host oleh Sonar juga mendukung OAuth. Untuk permintaan token SonarQube Cloud, organisasi ditentukan sebagai berikut:
  • SONARQUBE_ORG adalah header permintaan opsional yang menetapkan organisasi untuk permintaan tersebut. Konfigurasi tingkat server yang sudah usang menetapkannya untuk semua permintaan dan menolak header organisasi dari klien serta argumen organisasi pada alat.
  • Alat yang mendukung organisasi menerima argumen organization opsional jika organisasi tidak ditetapkan oleh konfigurasi server maupun header permintaan. Argumen tersebut akan ditolak jika organisasi sudah ditetapkan.
  • Tanpa nilai default, agen dapat memanggil list_organizations hanya dengan tokennya, lalu meneruskan kunci yang dipilih ke alat berikutnya.

Klien juga dapat membatasi alat yang terlihat untuk setiap permintaan dengan memberikan header SONARQUBE_TOOLSETS dan/atau SONARQUBE_READ_ONLY; header ini menerapkan pemfilteran tambahan di atas konfigurasi tingkat server — cakupannya hanya dapat dipersempit, tidak dapat diperluas. Tidak ada status sesi yang dipertahankan di antara permintaan.

Usang: Untuk token SonarQube, header permintaan SONARQUBE_TOKEN masih diterima demi kompatibilitas ke belakang, tetapi akan dihapus pada versi mendatang. Beralihlah ke Authorization: Bearer <token>.

3. HTTPS (Streamable HTTP melalui TLS) (Direkomendasikan untuk Deployment Produksi Multi-Pengguna)

Transport Streamable HTTP yang aman dengan enkripsi TLS. Memerlukan sertifikat SSL.

✅ Direkomendasikan untuk Produksi: Gunakan HTTPS saat men-deploy server MCP untuk beberapa pengguna melalui Streamable HTTP. Demi keamanan, server secara default mengikat ke 127.0.0.1 (localhost).

Variabel lingkunganDeskripsiDefault
SONARQUBE_TRANSPORTAtur ke https untuk mengaktifkan transport Streamable HTTP melalui TLSTidak diatur (stdio)
SONARQUBE_HTTP_PORTNomor port (biasanya 8443 untuk HTTPS), atau 0 untuk port yang ditetapkan oleh OS8080
SONARQUBE_HTTP_HOSTHost yang akan diikat (secara default localhost demi keamanan)127.0.0.1
SONARQUBE_HTTP_ALLOWED_ORIGINSAsal browser yang diizinkan untuk CORS, dipisahkan dengan koma (misalnya https://my-app.example.com)Tidak diatur
SONARQUBE_MCP_IN_CONTAINERAtur ke true saat berjalan di dalam kontainer. Image Docker resmi mengaturnya secara otomatis; atur sendiri jika menggunakan runtime OCI lain (Podman, Kubernetes, Nomad, dll.).false

Konfigurasi Sertifikat SSL (Opsional):

Variabel lingkunganDeskripsiDefault
SONARQUBE_HTTPS_KEYSTORE_PATHJalur ke file keystore (.p12 atau .jks)/etc/ssl/mcp/keystore.p12
SONARQUBE_HTTPS_KEYSTORE_PASSWORDKata sandi keystoresonarlint
SONARQUBE_HTTPS_KEYSTORE_TYPEJenis keystore (PKCS12 atau JKS)PKCS12

Contoh - Docker dengan SonarQube Cloud:

Catatan: Saat berjalan di dalam kontainer, atur SONARQUBE_HTTP_HOST=0.0.0.0 agar kontainer mendengarkan di semua antarmuka dan pemetaan port runtime berfungsi, serta atur SONARQUBE_MCP_IN_CONTAINER=true untuk memberi tahu server bahwa server berjalan di dalam kontainer. Image Docker resmi mengatur variabel yang disebut terakhir secara otomatis; atur sendiri jika menggunakan runtime OCI lain (Podman, Kubernetes, Nomad, dll.). Flag port di sisi host mengontrol siapa yang dapat menjangkau server dari luar kontainer. SONARQUBE_HTTP_HOST=0.0.0.0 hanya mengontrol tempat server mendengarkan di dalam kontainer — CORS browser tetap mengizinkan asal localhost secara default.

Untuk server yang berjalan secara lokal di komputer Anda (hanya dapat diakses dari 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

Untuk server yang dapat diakses dari jaringan (deployment jarak jauh):

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

Konfigurasi Klien (SonarQube Cloud):

Untuk permintaan token SonarQube, atur SONARQUBE_ORG secara opsional di header klien untuk menetapkan organisasi permintaan, atau abaikan agar organisasi dapat dipilih melalui argumen alat.

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

Konfigurasi Klien (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"
      }
    }
  }
}

Catatan: SONARQUBE_TOOLSETS dan SONARQUBE_READ_ONLY adalah header opsional per permintaan yang membatasi kumpulan alat tingkat server untuk permintaan tersebut. Cakupannya hanya dapat dipersempit — header ini tidak dapat mengaktifkan kumpulan alat atau melonggarkan pembatasan melebihi konfigurasi saat server dijalankan.

Catatan: Untuk pengembangan lokal, gunakan transport Stdio (default). Streamable HTTP melalui HTTPS ditujukan untuk deployment produksi multi-pengguna dengan sertifikat SSL yang sesuai.

OAuth SonarQube Cloud yang Di-host

Dukungan OAuth ditujukan untuk layanan MCP SonarQube Cloud yang di-host oleh Sonar. Gunakan klien MCP yang mendukung OAuth dan masuk saat diminta; pengaturan server OAuth tidak diperlukan dalam konfigurasi klien. Klien token SonarQube yang sudah ada tetap didukung.

Cakupan mcp:tools:read dan mcp:tools:write secara terpisah mengontrol akses ke alat baca dan tulis, sesuai dengan izin Cloud Anda. Gunakan list_organizations dan argumen alat organization untuk memilih organisasi.

Deployment yang di-host sendiri tetap menggunakan token SonarQube; OAuth untuk SonarQube Server belum didukung.

Endpoint Layanan

Saat berjalan dalam mode Streamable HTTP (http atau https), server menyediakan beberapa endpoint layanan tanpa autentikasi selain endpoint MCP di /mcp. Endpoint ini ditujukan untuk penggunaan antarlayanan (pemantauan, orkestrasi, pemeriksaan kompatibilitas klien) dan tidak memerlukan header Authorization.

EndpointMetodeDeskripsiContoh respons
/healthGETProbe liveness. Mengembalikan 200 OK dengan isi kosong setelah server siap menerima permintaan.(isi kosong)
/infoGETMengembalikan versi server MCP dalam format JSON. Berguna untuk memverifikasi versi server yang di-deploy.{"version":"1.16.0"}

Endpoint ini tidak tersedia saat menggunakan transport Stdio.

Sertifikat Kustom

Jika SonarQube Server Anda menggunakan sertifikat yang ditandatangani sendiri atau sertifikat dari Certificate Authority (CA) privat, Anda dapat menambahkan sertifikat kustom ke kontainer agar terpasang secara otomatis.

Configuration

Menggunakan Volume Mount

Pasang direktori yang berisi sertifikat Anda saat menjalankan kontainer:

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

Format Sertifikat yang Didukung

Kontainer mendukung format sertifikat berikut:

  • file .crt (dikodekan dalam PEM atau DER)
  • file .pem (dikodekan dalam PEM)

Konfigurasi MCP dengan Sertifikat

Saat menggunakan sertifikat kustom, Anda dapat mengubah konfigurasi MCP untuk memasang sertifikat tersebut:

{
  "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>"
    }
  }
}

Catatan: Menjalankan server dari JAR, bukan dari kontainer? Volume mount di atas memasang sertifikat ke penyimpanan kepercayaan OS kontainer, yang juga dibaca oleh server. Jika Anda tidak dapat menggunakan penyimpanan kepercayaan OS — terutama di Windows, yang tidak menggunakannya — arahkan JVM ke truststore Java yang berisi sertifikat CA: -Djavax.net.ssl.trustStore=/path/to/truststore.p12 -Djavax.net.ssl.trustStoreType=PKCS12 -Djavax.net.ssl.trustStorePassword=<passphrase>. Sertifikat ini ditambahkan di atas sertifikat tepercaya default.

Proxy

SonarQube MCP Server mendukung proxy HTTP dan SOCKS5 melalui properti sistem proxy Java standar.

Configuration

Proxy HTTP/HTTPS

Anda dapat mengonfigurasi pengaturan proxy menggunakan properti sistem Java. Properti ini dapat diatur sebagai variabel lingkungan atau diteruskan sebagai argumen JVM.

Properti Proxy Umum:

PropertiDeskripsiContoh
http.proxyHostNama host proxy HTTPproxy.example.com
http.proxyPortPort proxy HTTP8080
https.proxyHostNama host proxy HTTPSproxy.example.com
https.proxyPortPort proxy HTTPS8443
http.nonProxyHostsHost yang melewati proxy (dipisahkan dengan pipa)localhost|127.0.0.1|*.internal.com

Autentikasi Proxy HTTP/HTTPS:

PropertiDeskripsiContoh
http.proxyUserNama pengguna proxy HTTPmyuser
http.proxyPasswordKata sandi proxy HTTPmypassword
https.proxyUserNama pengguna proxy HTTPSmyuser
https.proxyPasswordKata sandi proxy HTTPSmypassword

Proxy SOCKS5

Proxy SOCKS5 didukung.

PropertiDeskripsiDefaultContoh
socksProxyHostNama host proxy SOCKS5—localhost
socksProxyPortPort proxy SOCKS510801080
java.net.socks.usernameNama pengguna SOCKS5 (jika autentikasi diperlukan)—myuser
java.net.socks.passwordKata sandi SOCKS5 (jika autentikasi diperlukan)—mypassword

Sertifikat Klien (Mutual TLS)

Jika SonarQube Server Anda mengharuskan klien menyertakan sertifikat selama TLS handshake (mutual TLS), Anda dapat menyediakan keystore PKCS12 dengan memasangnya ke dalam kontainer dan meneruskan lokasinya melalui JAVA_OPTS.

Configuration

Menggunakan keystore PKCS12

Pasang file .p12 atau .pfx ke dalam kontainer dan atur variabel lingkungan JAVA_OPTS dengan properti 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

Catatan: File sertifikat harus dapat dibaca oleh proses kontainer. Periksa dan perbaiki izin jika diperlukan:

ls -la /path/to/client.p12       # cari -rw-r--r-- (644) atau izin yang lebih luas
chmod 644 /path/to/client.p12    # berikan akses baca kepada pengguna kontainer

Abaikan -Djavax.net.ssl.keyStorePassword jika keystore tidak memiliki frasa sandi. Perhatikan bahwa frasa sandi yang digunakan di sini dapat terlihat melalui docker inspect atau daftar proses.

Konfigurasi MCP dengan Sertifikat Klien

{
  "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>"
    }
  }
}

Menggunakan keystore PKCS12 dengan JAR mandiri

Saat menjalankan server dari JAR, teruskan properti keystore sebagai argumen JVM sebelum -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>

Abaikan -Djavax.net.ssl.keyStorePassword jika keystore tidak memiliki frasa sandi.

Konfigurasi MCP dengan Sertifikat Klien (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>"
    }
  }
}

Catatan: File sertifikat dan kunci PEM (file .crt/.key terpisah) harus dikonversi terlebih dahulu ke format PKCS12. Gunakan openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 untuk mengonversinya.

Alat

Analisis

  • analyze_code_snippet - Analisis konten file dengan penganalisis SonarQube untuk mengidentifikasi masalah kualitas kode dan keamanan. Selalu menganalisis seluruh konten file demi akurasi. Hasil dapat difilter secara opsional agar hanya mencakup cuplikan kode tertentu.

    Usang: analyze_code_snippet akan dihapus pada rilis mendatang. Hubungkan SonarQube for IDE untuk menggunakan analyze_file_list, atau aktifkan analisis Vortex untuk organisasi Anda agar dapat menggunakan run_advanced_code_analysis (lihat di bawah).

    Penggunaan:

    • Dengan workspace yang di-mount (disarankan): teruskan filePath (relatif terhadap proyek) — server membaca file secara langsung sehingga konten file tidak masuk ke jendela konteks agen
    • Tanpa workspace yang di-mount: teruskan fileContent lengkap untuk analisis file secara menyeluruh (melaporkan semua masalah)
    • Tambahkan codeSnippet opsional untuk memfilter hasil — hanya masalah dalam cuplikan yang akan dilaporkan (lokasi cuplikan dideteksi secara otomatis)

    Parameter:

    • organization - Kunci organisasi SonarQube Cloud - String opsional, hanya Cloud
    • projectKey - Kunci proyek SonarQube - String wajib (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • filePath - Jalur file relatif terhadap proyek yang akan dianalisis (misalnya, src/main/java/MyClass.java). Digunakan saat workspace di-mount di /app/mcp-workspace - String
    • fileContent - Konten file lengkap sebagai string. Wajib diisi jika workspace tidak di-mount - String
    • codeSnippet - Cuplikan kode untuk memfilter masalah (harus cocok dengan konten di fileContent) - String
    • language - Bahasa kode (misalnya, 'java', 'python', 'js', 'ts', 'tsx', 'jsx') - String
    • scope - Cakupan file: MAIN atau TEST (default: MAIN) - String

    Bahasa yang Didukung: Java, Kotlin, Python, Ruby, Go, JavaScript (js, jsx), TypeScript (ts, tsx), JSP, PHP, XML, HTML, CSS, CloudFormation, Kubernetes, Terraform, Azure Resource Manager, Ansible, Docker, deteksi rahasia

Saat integrasi dengan SonarQube for IDE diaktifkan: (kedua alat ini diberi tag pada set alat analysis dan ide)

  • analyze_file_list - Analisis file di direktori kerja saat ini menggunakan SonarQube for IDE. Alat ini terhubung ke instans SonarQube for IDE yang sedang berjalan untuk melakukan analisis kualitas kode pada daftar file.

    • file_absolute_paths - Daftar jalur file absolut yang akan dianalisis - String[] wajib
  • toggle_automatic_analysis - Aktifkan atau nonaktifkan analisis otomatis SonarQube for IDE. Jika diaktifkan, SonarQube for IDE akan menganalisis file secara otomatis saat file di direktori kerja diubah. Jika dinonaktifkan, analisis otomatis akan dimatikan.

    • enabled - Aktifkan atau nonaktifkan analisis otomatis - Boolean wajib

Di SonarQube Server, stdio mencantumkan alat konteks Vortex dan run_advanced_code_analysis jika hub CAG dan A3S sama-sama berhak digunakan.

Saat analisis Vortex tersedia:

Workspace harus di-mount di /app/mcp-workspace

  • run_advanced_code_analysis - Jalankan analisis Vortex pada satu file. SonarQube Server menggunakan placeholder UUID nil.
    • organization - Kunci organisasi SonarQube Cloud - String opsional, hanya Cloud
    • projectKey - Kunci proyek - String wajib (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • branch - Nama cabang yang digunakan untuk mengambil konteks analisis terbaru - String wajib
    • filePath - Jalur file relatif terhadap proyek yang akan dianalisis (misalnya, src/main/java/MyClass.java). - String wajib
    • fileScope - Menentukan cakupan asal file: 'MAIN' atau 'TEST' (default: MAIN) - String

Cakupan

  • search_files_by_coverage - Cari file dalam proyek dan urutkan berdasarkan cakupan (menaik — cakupan terburuk lebih dahulu). Alat ini membantu mengidentifikasi file yang memerlukan peningkatan cakupan pengujian.

    • projectKey - Kunci proyek yang akan dicari - String wajib (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • branch - Nama cabang opsional untuk analisis berbasis cabang. Gunakan list_branches untuk menemukan nama yang valid - String
    • pullRequest - Kunci/ID pull request opsional. Gunakan list_pull_requests untuk menemukan kunci yang valid - String
    • maxCoverage - Ambang batas cakupan maksimum (0-100). Hanya kembalikan file dengan cakupan <= nilai ini - Number
    • pageIndex - Indeks halaman (berbasis 1, default: 1) - Number
    • pageSize - Ukuran halaman (default: 100, maks.: 500) - Number
  • get_file_coverage_details - Dapatkan informasi cakupan baris demi baris untuk file tertentu, termasuk baris persis yang tidak tercakup dan baris yang cabangnya tercakup sebagian. Alat ini membantu mengidentifikasi dengan tepat bagian yang perlu ditambahkan cakupan pengujiannya. Gunakan setelah mengidentifikasi file dengan cakupan rendah melalui search_files_by_coverage.

    • key - Kunci file (misalnya, my_project:src/foo/Bar.java) - String wajib
    • branch - Nama cabang opsional untuk analisis berbasis cabang. Gunakan list_branches untuk menemukan nama yang valid - String
    • pullRequest - Kunci/ID pull request opsional. Gunakan list_pull_requests untuk menemukan kunci yang valid - String
    • from - Baris pertama yang dianalisis (berbasis 1, default: 1) - Number
    • to - Baris terakhir yang dianalisis (inklusif). Jika tidak ditentukan, semua baris akan dikembalikan - Number

Risiko Dependensi

Catatan: Risiko dependensi memerlukan SonarQube Advanced Security. Di SonarQube Server, diperlukan versi Enterprise 2025.4 atau yang lebih baru.

  • search_dependency_risks - Cari masalah analisis komposisi perangkat lunak (risiko dependensi) pada proyek SonarQube, beserta rilis yang muncul dalam proyek, aplikasi, atau portofolio yang dianalisis.
    • organization - Kunci organisasi SonarQube Cloud - String opsional, hanya Cloud
    • projectKey - Kunci proyek - String wajib (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • branch - Nama cabang opsional untuk analisis berbasis cabang. Gunakan list_branches untuk menemukan nama yang valid - String
    • pullRequest - Kunci/ID pull request opsional. Gunakan list_pull_requests untuk menemukan kunci yang valid - String
    • pageIndex - Indeks halaman opsional (berbasis 1, default: 1) - Integer
    • pageSize - Ukuran halaman opsional. Harus lebih besar dari 0 dan kurang dari atau sama dengan 500 (default: 100) - Integer

Enterprise

Catatan: Enterprise hanya tersedia saat terhubung ke SonarQube Cloud.

  • list_enterprises - Cantumkan enterprise yang tersedia di SonarQube Cloud dan dapat Anda akses. Gunakan alat ini untuk menemukan ID enterprise yang dapat digunakan dengan alat lain.
    • enterpriseKey - Kunci enterprise opsional untuk memfilter hasil - String

Masalah

  • change_sonar_issue_status - Ubah status masalah SonarQube menjadi "accept", "falsepositive", atau "reopen".

    • key - Kunci masalah - String wajib
    • status - Status baru masalah - Enum {"accept", "falsepositive", "reopen"} wajib
    • comment - Komentar opsional yang menjelaskan perubahan status - String
  • search_sonar_issues_in_projects - Cari masalah SonarQube di proyek organisasi saya.

    • organization - Kunci organisasi SonarQube Cloud - String opsional, hanya Cloud
    • projectKeys - Daftar kunci proyek SonarQube opsional - String[]
    • branch - Nama cabang opsional untuk analisis berbasis cabang. Gunakan list_branches untuk menemukan nama yang valid - String
    • pullRequest - Kunci/ID pull request opsional. Gunakan list_pull_requests untuk menemukan kunci yang valid - String
    • severities - Daftar tingkat keparahan opsional untuk memfilter hasil. Nilai yang mungkin: INFO, LOW, MEDIUM, HIGH, BLOCKER - String[]
    • impactSoftwareQualities - Daftar kualitas perangkat lunak opsional untuk memfilter hasil. Nilai yang mungkin: MAINTAINABILITY, RELIABILITY, SECURITY - String[]
    • issueStatuses - Daftar status masalah opsional untuk memfilter hasil. Nilai yang mungkin: OPEN, CONFIRMED, FALSE_POSITIVE, ACCEPTED, FIXED, IN_SANDBOX - String[]
    • tags - Daftar tag masalah opsional untuk memfilter hasil. Tag menggunakan huruf kecil - String[]
    • inNewCodePeriod - Hanya kembalikan masalah dalam periode kode baru. Memerlukan tepat satu entri di antara projectKeys dan files - Boolean
    • issueKey - Kunci masalah opsional untuk mengambil masalah tertentu - String
    • pageIndex - Indeks halaman opsional berbasis 1 (default: 1) - Integer
    • pageSize - Ukuran halaman opsional. Harus lebih besar dari 0 dan kurang dari atau sama dengan 500 (default: 100) - Integer

Hotspot Keamanan

  • search_security_hotspots - Cari Hotspot Keamanan dalam proyek SonarQube.

    • projectKey - Kunci proyek atau aplikasi - String wajib (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • hotspotKeys - Daftar kunci Hotspot Keamanan tertentu yang dipisahkan koma untuk diambil - String[]
    • branch - Nama cabang opsional untuk analisis berbasis cabang. Gunakan list_branches untuk menemukan nama yang valid - String
    • pullRequest - Kunci/ID pull request opsional. Gunakan list_pull_requests untuk menemukan kunci yang valid - String
    • files - Daftar jalur file opsional untuk memfilter hasil - String[]
    • status - Filter status opsional: TO_REVIEW, REVIEWED - String
    • resolution - Filter resolusi opsional: FIXED, SAFE, ACKNOWLEDGED - String
    • sinceLeakPeriod - Filter hotspot yang dibuat sejak periode kebocoran (kode baru) - Boolean
    • onlyMine - Hanya tampilkan hotspot yang ditugaskan kepada saya - Boolean
    • pageIndex - Indeks halaman opsional berbasis 1 (default: 1) - Integer
    • pageSize - Ukuran halaman opsional. Harus lebih besar dari 0 dan kurang dari atau sama dengan 500 (default: 100) - Integer
  • show_security_hotspot - Dapatkan informasi terperinci tentang Hotspot Keamanan tertentu, termasuk detail aturan, konteks kode, alur, dan komentar.

    • hotspotKey - Kunci Hotspot Keamanan - String wajib
  • change_security_hotspot_status - Tinjau Hotspot Keamanan dengan mengubah statusnya. Saat menandainya sebagai REVIEWED, Anda harus menentukan resolusi (FIXED, SAFE, atau ACKNOWLEDGED).

    • hotspotKey - Kunci Hotspot Keamanan - String wajib
    • status - Status baru - Enum {"TO_REVIEW", "REVIEWED"} wajib
    • resolution - Resolusi saat statusnya REVIEWED - Enum {"FIXED", "SAFE", "ACKNOWLEDGED"}
    • comment - Komentar tinjauan opsional - String

Bahasa

  • list_languages - Cantumkan semua bahasa pemrograman yang didukung dalam instans SonarQube ini.
    • q - Pola opsional untuk mencocokkan kunci/nama bahasa - String

Pengukuran

  • get_component_measures - Dapatkan pengukuran SonarQube untuk suatu komponen (proyek, direktori, file).
    • projectKey - Kunci proyek - String wajib jika SONARQUBE_PROJECT_KEY tidak dikonfigurasi
    • branch - Nama cabang opsional untuk analisis berbasis cabang. Gunakan list_branches untuk menemukan nama yang valid - String
    • metricKeys - Kunci metrik opsional yang akan diambil (misalnya, ncloc, complexity, violations, coverage) - String[]
    • pullRequest - Kunci/ID pull request opsional. Gunakan list_pull_requests untuk menemukan kunci yang valid - String

Metrik

  • search_metrics - Cari metrik SonarQube.
    • pageIndex - Indeks halaman opsional berbasis 1 (default: 1) - Integer
    • pageSize - Ukuran halaman opsional. Harus lebih besar dari 0 dan kurang dari atau sama dengan 500 (default: 100) - Integer

Portofolio

  • list_portfolios - Cantumkan portofolio enterprise yang tersedia di SonarQube dengan opsi pemfilteran dan paginasi.

    Untuk SonarQube Server:

    • q - Kueri pencarian opsional untuk memfilter portofolio berdasarkan nama atau kunci - String
    • favorite - Jika true, hanya kembalikan portofolio favorit - Boolean
    • pageIndex - Nomor halaman opsional berbasis 1 (default: 1) - Integer
    • pageSize - Ukuran halaman opsional, maks. 500 (default: 100) - Integer

    Untuk SonarQube Cloud:

    • enterpriseId - UUID enterprise. Dapat dihilangkan hanya jika parameter 'favorite' diberikan dengan nilai true - String
    • q - Kueri pencarian opsional untuk memfilter portofolio berdasarkan nama - String
    • favorite - Wajib bernilai true jika parameter 'enterpriseId' dihilangkan. Jika true, hanya mengembalikan portofolio yang difavoritkan oleh pengguna yang sedang login. Tidak boleh bernilai true jika 'draft' bernilai true - Boolean
    • draft - Jika true, hanya mengembalikan draf yang dibuat oleh pengguna yang sedang login. Tidak boleh bernilai true jika 'favorite' bernilai true - Boolean
    • pageIndex - Indeks halaman opsional yang akan diambil (default: 1) - Integer
    • pageSize - Ukuran halaman opsional yang akan diambil (default: 50) - Integer

Proyek

  • list_organizations - Mencantumkan organisasi SonarQube Cloud yang menjadi anggota pengguna, termasuk key, nama, ID, dan UUID. Gunakan key yang dikembalikan sebagai organization pada alat berikutnya.

  • search_my_sonarqube_projects - Menemukan proyek SonarQube. Respons menggunakan paginasi.

    • organization - Key organisasi SonarQube Cloud - Optional String, Cloud only
    • pageIndex - Indeks halaman opsional berbasis 1 (default: 1) - Integer
    • pageSize - Ukuran halaman opsional. Harus lebih besar dari 0 dan kurang dari atau sama dengan 500 (default: 500) - Integer
    • q - Kueri pencarian opsional untuk memfilter proyek berdasarkan nama (cocok sebagian) atau key (cocok persis) - String
  • list_branches - Mencantumkan branch yang dianalisis untuk suatu proyek.

    • SonarQube Cloud: mengembalikan branch berumur panjang (LONG) dan berumur pendek (SHORT) dengan kolom type dan mergeBranch. Filter branchTypes bersifat opsional: ALL (default), LONG, atau SHORT.
    • SonarQube Server: mengembalikan semua branch yang dianalisis (nama, quality gate, tanggal analisis). Tidak ada filter type, mergeBranch, atau branchTypes.
    • Gunakan nama branch yang dikembalikan sebagai parameter branch pada alat lain. Untuk analisis pull request, gunakan list_pull_requests.
    • projectKey - Key proyek (misalnya my_project) - Required String (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • branchTypes - (Khusus SonarQube Cloud) Filter opsional: ALL (default), LONG, atau SHORT - Enum {"ALL", "LONG", "SHORT"}
  • list_pull_requests - Mencantumkan semua pull request untuk suatu proyek. Gunakan alat ini untuk menemukan pull request bagi analisis yang dihias dengan PR (cakupan, masalah, quality gate). Mengembalikan key/ID pull request yang dapat digunakan dengan alat lain. Untuk analisis berbasis branch tanpa pull request, gunakan list_branches.

    • projectKey - Key proyek (misalnya my_project) - Required String (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)

Quality Gate

  • get_project_quality_gate_status - Mendapatkan status Quality Gate untuk proyek SonarQube.

    • analysisId - ID analisis opsional - String
    • branch - Nama branch opsional untuk analisis berbasis branch. Gunakan list_branches untuk menemukan nama yang valid - String
    • projectId - ID proyek opsional - String
    • projectKey - Key proyek opsional - String
    • pullRequest - Key/ID pull request opsional. Gunakan list_pull_requests untuk menemukan key yang valid - String
  • list_quality_gates - Mencantumkan semua quality gate di SonarQube saya.

    • organization - Key organisasi SonarQube Cloud - Optional String, Cloud only

Aturan

  • show_rule - Menampilkan informasi terperinci tentang aturan SonarQube.
    • organization - Key organisasi SonarQube Cloud - Optional String, Cloud only
    • key - Key aturan - Required String

Duplikasi

  • search_duplicated_files - Mencari file dengan duplikasi kode dalam proyek SonarQube. Secara default, mengambil semua file duplikat secara otomatis dari semua halaman (maksimal 10.000 file). Hanya mengembalikan file yang memiliki duplikasi.

    • projectKey - Key proyek - Required String (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • branch - Nama branch opsional untuk analisis berbasis branch. Gunakan list_branches untuk menemukan nama yang valid - String
    • pullRequest - Key/ID pull request opsional. Gunakan list_pull_requests untuk menemukan key yang valid - String
    • pageSize - Jumlah hasil per halaman opsional untuk paginasi manual (maks.: 500). Jika tidak ditentukan, semua file duplikat akan diambil secara otomatis - Integer
    • pageIndex - Nomor halaman opsional untuk paginasi manual (dimulai dari 1). Jika tidak ditentukan, semua file duplikat akan diambil secara otomatis - Integer
  • get_duplications - Mendapatkan duplikasi untuk sebuah file. Memerlukan izin Browse pada proyek file tersebut.

    • key - Key file - Required String
    • branch - Nama branch opsional untuk analisis berbasis branch. Gunakan list_branches untuk menemukan nama yang valid - String
    • pullRequest - Key/ID pull request opsional. Gunakan list_pull_requests untuk menemukan key yang valid - String

Sumber

  • get_raw_source - Mendapatkan kode sumber sebagai teks mentah dari SonarQube. Memerlukan izin 'See Source Code' pada file.

    • key - Key file - Required String
    • branch - Nama branch opsional untuk analisis berbasis branch. Gunakan list_branches untuk menemukan nama yang valid - String
    • pullRequest - Key/ID pull request opsional. Gunakan list_pull_requests untuk menemukan key yang valid - String
  • get_scm_info - Mendapatkan informasi SCM dari file sumber SonarQube. Memerlukan izin See Source Code pada proyek file tersebut.

    • key - Key file - Required String
    • commits_by_line - Kelompokkan baris berdasarkan commit SCM jika nilainya false; jika tidak, tampilkan commit untuk setiap baris - String
    • from - Baris pertama yang dikembalikan. Dimulai dari 1 - Number
    • to - Baris terakhir yang dikembalikan (inklusif) - Number

Sistem

Catatan: Alat sistem hanya tersedia saat terhubung ke SonarQube Server.

  • get_system_health - Mendapatkan status kesehatan instans SonarQube Server. Mengembalikan GREEN (beroperasi penuh), YELLOW (dapat digunakan tetapi perlu perhatian), atau RED (tidak beroperasi).

  • get_system_info - Mendapatkan informasi terperinci tentang konfigurasi sistem SonarQube Server, termasuk status JVM, basis data, indeks pencarian, dan pengaturan. Memerlukan izin 'Administer'.

  • get_system_logs - Mendapatkan log sistem SonarQube Server dalam format teks biasa. Memerlukan izin administrasi sistem.

    • name - Nama log yang akan diambil (opsional). Nilai yang mungkin: access, app, ce, deprecation, es, web. Default: app - String
  • ping_system - Melakukan ping ke sistem SonarQube Server untuk memeriksa apakah sistem aktif. Mengembalikan 'pong' sebagai teks biasa.

  • get_system_status - Mendapatkan informasi status tentang SonarQube Server. Mengembalikan status (STARTING, UP, DOWN, RESTARTING, DB_MIGRATION_NEEDED, DB_MIGRATION_RUNNING), versi, dan ID.

Webhook

  • create_webhook - Membuat webhook baru untuk organisasi atau proyek SonarQube. Memerlukan izin 'Administer' pada proyek yang ditentukan, atau izin global 'Administer'.

    • organization - Key organisasi SonarQube Cloud - Optional String, Cloud only
    • name - Nama webhook - Required String
    • url - URL webhook - Required String
    • projectKey - Key proyek opsional untuk webhook khusus proyek - String
    • secret - Secret webhook opsional untuk mengamankan payload webhook - String
  • list_webhooks - Mencantumkan semua webhook untuk organisasi atau proyek SonarQube. Memerlukan izin 'Administer' pada proyek yang ditentukan, atau izin global 'Administer'.

    • organization - Key organisasi SonarQube Cloud - Optional String, Cloud only
    • projectKey - Key proyek opsional untuk mencantumkan webhook khusus proyek - String

Penambahan Konteks

Alat Arsitektur
  • search_by_signature_patterns - Menemukan elemen kode (kelas, metode, antarmuka, ...) berdasarkan signature deklarasinya menggunakan pola regex.

    • include_code_regex_list - Daftar pola regex untuk dicocokkan dengan signature - Required String[]
    • exclude_code_regex_list - Daftar pola regex yang dikecualikan dari hasil - String[]
    • include_glob - Pola glob filter file (misalnya, *.java) - String
    • exclude_glob - Pola glob pengecualian file - String
    • fields - Daftar field yang dipisahkan koma untuk disertakan dalam respons - String
    • limit - Jumlah maksimum hasil yang dikembalikan (default: 10) - Integer
    • regex_lists_operator - Cara menggabungkan beberapa pola: OR (default) atau AND - String
  • search_by_body_patterns - Menemukan elemen kode berdasarkan isi implementasinya menggunakan pola regex. Berguna untuk menemukan lokasi penggunaan API atau pola.

    • include_code_regex_list - Daftar pola regex yang dicocokkan dalam isi kode - Required String[]
    • exclude_code_regex_list - Daftar pola regex yang dikecualikan dari hasil - String[]
    • include_glob - Pola glob filter file - String
    • exclude_glob - Pola glob pengecualian file - String
    • fields - Daftar field yang dipisahkan koma untuk disertakan dalam respons - String
    • limit - Jumlah maksimum hasil yang dikembalikan (default: 10) - Integer
    • regex_lists_operator - Cara menggabungkan beberapa pola: OR (default) atau AND - String
  • get_upstream_call_flow - Melacak fungsi yang memanggil fungsi tertentu. Berguna untuk menemukan semua pemanggil dan titik masuk, serta memahami dampak perubahan signature.

    • fqn - Nama fungsi yang sepenuhnya memenuhi syarat - Required String
    • depth - Kedalaman rantai pemanggilan (0=hanya fungsi, 1=pemanggil langsung, dst.) - Integer
    • fields - Daftar field yang dipisahkan koma untuk disertakan dalam respons - String
  • get_downstream_call_flow - Melacak fungsi yang dipanggil oleh fungsi tertentu. Berguna untuk analisis dampak dan memahami alur eksekusi.

    • fqn - Nama fungsi yang sepenuhnya memenuhi syarat - Required String
    • depth - Kedalaman rantai pemanggilan (0=hanya fungsi, 1=fungsi yang dipanggil secara langsung, dst.) - Integer
    • fields - Daftar field yang dipisahkan koma untuk disertakan dalam respons - String
  • get_source_code - Mendapatkan kode sumber lengkap (signature dan isi) untuk elemen kode berdasarkan nama lengkapnya.

    • fqn - Nama elemen yang sepenuhnya memenuhi syarat - Required String
    • fields - Daftar field yang dipisahkan koma untuk disertakan dalam respons - String
  • get_type_hierarchy - Mendapatkan hierarki pewarisan lengkap untuk struktur mirip kelas (kelas, antarmuka, enum, record, exception, struct). Penting untuk memahami pohon pewarisan dan melakukan refaktorisasi.

    • fqn - Nama struktur mirip kelas yang sepenuhnya memenuhi syarat - Required String
    • fields - Daftar field yang dipisahkan koma untuk disertakan dalam respons - String
  • get_references - Mendapatkan referensi kode masuk dan keluar langsung untuk kelas atau modul. Hanya mengembalikan referensi langsung (non-transitif).

    • fqn - Nama kelas atau modul yang sepenuhnya memenuhi syarat - Required String
    • fields - Daftar field yang dipisahkan koma untuk disertakan dalam respons - String
  • get_current_architecture - Mendapatkan grafik arsitektur hierarkis yang difilter berdasarkan prefiks jalur dan kedalaman. Berguna untuk menjelajahi struktur modul dan dependensi tingkat tinggi.

    • depth - Kedalaman hierarki (0=hanya root, 1=root + anak, dst.) - Required Integer
    • path_prefix - Prefiks jalur opsional untuk memfilter node (misalnya, com.example.service) - String
    • ecosystem - Ekosistem opsional untuk memfilter berdasarkan (java, cs, py, js, ts) - String
  • get_intended_architecture - Mendapatkan batasan arsitektur yang ditentukan pengguna, yang menetapkan modul mana yang boleh bergantung pada modul lain.

Alat Panduan
  • get_guidelines - Mendapatkan panduan pengodean berdasarkan masalah proyek SonarQube, kategori katalog, atau kombinasi keduanya.
    • mode - Mode pengambilan panduan: project_based, category_based, atau combined - String Wajib
    • categories - Daftar nama kategori (wajib untuk mode category_based dan combined) - String[]
    • languages - Daftar bahasa target dalam format kunci repositori SonarQube (wajib jika categories diberikan) - String[]
    • file_paths - Daftar opsional jalur file untuk memfilter panduan - String[]
Alat Dependensi Pihak Ketiga
  • check_dependency - Memeriksa dependensi pihak ketiga untuk mengetahui kerentanan keamanan, malware rantai pasokan, dan kepatuhan lisensi sebelum menambahkannya atau memperbaruinya.
    • purl - Package URL (purl) dengan versi, sesuai purl-spec. Format: pkg:<type>/<namespace>/<name>@<version> (misalnya pkg:npm/lodash@4.17.21, pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1, pkg:pypi/django@3.2.0) - String Wajib
Variabel Lingkungan Penambahan Konteks
VariabelDeskripsiWajibDefault
SONARQUBE_URLURL SonarQube CloudYahttps://sonarcloud.io
SONARQUBE_TOKENToken autentikasiYaTidak ada
SONARQUBE_ORGOrganisasi cloud; diteruskan ke proxy dari konfigurasi startup atau deteksi unikTidakTidak ada
SONARQUBE_PROJECT_KEYKunci proyek di SonarQube CloudYaTidak ada
SONAR_SQ_BRANCHPenggantian cabang SonarQube secara eksplisit *TidakTidak ada
SONARQUBE_DEBUG_ENABLEDMengaktifkan pencatatan log debug (untuk pemecahan masalah)TidakFalse
SONAR_LOG_LEVELTingkat detail log (TRACE, DEBUG, INFO, WARNING, ERROR)TidakINFO
  • Harus diberikan jika tidak menggunakan git, atau jika nama cabang git tidak cocok dengan nama cabang di SonarQube.
Konfigurasi Khusus Proyek (Disarankan)

Pertama, ekspor SONARQUBE_TOKEN variabel lingkungan dengan Personal Access Token (PAT) yang valid untuk proyek Anda.

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

Kemudian, pasang workspace proyek agar server Context Augmentation dapat mengakses file sumber Anda secara langsung:

{
  "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"
      }
    }
  }
}

Penting: Dalam konfigurasi yang cakupannya terbatas pada proyek, jangan masukkan SONARQUBE_TOKEN ke dalam blok env. Ekspor sebagai variabel lingkungan (export SONARQUBE_TOKEN=...). Docker akan meneruskannya ke dalam kontainer melalui -e SONARQUBE_TOKEN.

Kesiapan Agentik

Catatan: Alat Kesiapan Agentik hanya tersedia di SonarQube Cloud dan mengharuskan fitur ini diaktifkan untuk organisasi Anda.

Flag fitur diperiksa saat startup dalam mode stdio. Untuk HTTP/HTTPS, tambahkan agentic-readiness ke SONARQUBE_TOOLSETS server untuk mengaktifkan alat.

  • start_agentic_readiness_assessment - Memulai penilaian kesiapan agentik untuk sebuah proyek. Langsung mengembalikan status PENDING dan assessmentId. Gunakan get_agentic_readiness_assessment untuk memeriksa hasil secara berkala.

    • projectKey - Kunci proyek - String Wajib (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • branch - Cabang yang akan dinilai. Abaikan untuk menggunakan cabang default proyek - String
  • get_agentic_readiness_assessment - Mengambil hasil penilaian. Panggil kembali dengan assessmentId yang sama hingga statusnya menjadi COMPLETED, FAILED, atau INTERRUPTED. Setelah selesai, mengembalikan tingkat keseluruhan dan perincian per pilar beserta tindakan yang disarankan dan bukti.

    • assessmentId - ID penilaian yang dikembalikan oleh start_agentic_readiness_assessment - String Wajib
  • list_agentic_readiness_assessments - Mencantumkan semua penilaian untuk sebuah proyek, dimulai dari yang terbaru. Gunakan get_agentic_readiness_assessment untuk hasil lengkap tingkat pilar.

    • projectKey - Kunci proyek yang penilaiannya akan dicantumkan - String Wajib (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • branch - Memfilter penilaian berdasarkan nama cabang. Abaikan untuk mencantumkan penilaian dari semua cabang - String
    • pageIndex - Indeks halaman berbasis 1 (default: 1) - Number
    • pageSize - Jumlah item per halaman, maksimum 100 (default: 50) - Number

Arsitektur

Catatan: Aktifkan alat ini dengan SONARQUBE_TOOLSETS=architecture dalam mode stdio atau HTTP/HTTPS. SonarQube Cloud memerlukan paket Team atau Enterprise. SonarQube Server memerlukan versi 2026.6 atau yang lebih baru dan edisi Developer atau lebih tinggi; alat ini tidak tersedia pada versi yang lebih lama atau Community Build. Lihat alur kerja dan pemulihan arsitektur.

  • architecture_get - Membaca dependensi saat ini, arsitektur yang diinginkan, arahan proyek, atau Temuan (penyimpangan, cacat, dan code smell).

    • target - current, intended, directives atau findings; ketersediaannya bergantung pada build MCP dan Server - Enum Wajib
    • projectKey - Kunci proyek - String Wajib (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • organization - Kunci organisasi SonarQube Cloud jika belum dikonfigurasi - String Opsional, hanya Cloud
    • component - Kunci node saat ini atau jalur grup yang diinginkan secara persis; tingkat teratas jika diabaikan - String
    • depth - Hanya untuk saat ini/yang diinginkan: tingkat di bawah titik awal; default 1 untuk saat ini, semua untuk yang diinginkan - Number
    • language - Hanya untuk saat ini/yang diinginkan/temuan: java, cs, js, ts atau py - Enum
    • directiveId - Arahan lengkap berdasarkan UUID, termasuk deskripsi; gunakan sebagai pengganti paginasi - String
    • category / type - Hanya untuk Temuan: memfilter penyimpangan, cacat, atau code smell berdasarkan jenis yang diiklankan - Enum
    • pageIndex - Arahan/Temuan: indeks halaman berbasis 1 (default: 1) - Number
    • pageSize - Arahan: ringkasan, default/maksimum 50. Temuan: default 50, maksimum 1000; 0 hanya menghitung - Number
  • architecture_set - Mengganti seluruh arsitektur yang diinginkan atau membuat, memperbarui, dan menghapus arahan proyek. Tersedia pada build Cloud dan Server yang didukung jika penulisan diaktifkan.

    • target - intended atau directives - Enum Wajib
    • projectKey - Kunci proyek - String Wajib (Diabaikan jika SONARQUBE_PROJECT_KEY ditentukan)
    • organization - Kunci organisasi SonarQube Cloud jika belum dikonfigurasi - String Opsional, hanya Cloud
    • model - String JSON: ekspor lengkap yang diinginkan atau larik models (konten yang dihilangkan akan dihapus), atau perubahan arahan dengan larik create, update dan delete - String Wajib
    • dryRun - true untuk pratinjau, false untuk menerapkan - Boolean Wajib
    • revision - Hanya untuk arsitektur yang diinginkan: revisi dari architecture_get; default-nya adalah revisi ekspor lengkap. Wajib saat menerapkan penghapusan - String

Contoh Prompt

Setelah menyiapkan SonarQube MCP Server, berikut beberapa contoh prompt untuk skenario umum di dunia nyata:

Memperbaiki Quality Gate yang Gagal
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?
Pemeriksaan Pra-Rilis dan Pra-Penggabungan
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?
Meningkatkan Kualitas Kode
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?
Memahami dan Memperbaiki Masalah
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?
Keamanan dan Manajemen Dependensi
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.
Bantuan Tinjauan Kode
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.
Pemantauan Kesehatan Proyek
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?
Kolaborasi Tim
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?

Build

Sebaiknya gunakan image kontainer sonarsource/sonarqube-mcp.

Untuk menjalankan server sebagai JAR mandiri tanpa Docker, unduh rilis yang telah dibangun sebelumnya dari repositori biner SonarSource. Setiap versi rilis dipublikasikan di sana sebagai sonarqube-mcp-server-<version>.jar (misalnya, sonarqube-mcp-server-1.19.0.2785.jar).

Jalankan dari JAR

Unduh JAR untuk versi yang Anda inginkan dari repositori biner, lalu konfigurasi klien MCP Anda untuk menjalankannya dengan Java 21 atau yang lebih baru:

  • Untuk terhubung ke 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>"
    }
  }
}
  • Untuk terhubung ke 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>"
    }
  }
}
Build dari sumber

SonarQube MCP Server memerlukan Java Development Kit (JDK) versi 21 atau yang lebih baru untuk proses build.

Jalankan perintah Gradle berikut untuk membersihkan proyek dan membangun aplikasi:

./gradlew clean build -x test

File JAR akan dibuat di build/libs/.

Setelah menambahkan atau memperbarui dependensi, buat ulang file lock:

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

Gunakan konfigurasi Jalankan dari JAR di atas, dengan mengarahkan <path_to_sonarqube_mcp_server_jar> ke JAR di build/libs/.

Pemecahan Masalah

Secara default, log aplikasi ditulis ke file STORAGE_PATH/logs/mcp.log. Untuk menonaktifkan pencatatan log ke file sepenuhnya, tetapkan SONARQUBE_LOG_TO_FILE_DISABLED=true.

Masalah Umum

"Versi server SonarQube tidak didukung"

Server MCP memeriksa versi SonarQube Server yang terhubung saat startup. Jika instans lebih lama dari 2025.1 (SQS) atau 25.1 (SQCB), startup akan gagal dengan:

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

Solusi: Tingkatkan SonarQube Server ke rilis yang didukung. Pemeriksaan ini hanya berlaku saat terhubung ke SonarQube Server (SONARQUBE_URL tanpa SONARQUBE_ORG), bukan SonarQube Cloud.

"Fitur tidak berfungsi" atau "Alat/fungsionalitas tidak tersedia"

Anda mungkin menggunakan image Docker yang sudah usang. Docker menyimpan image secara lokal dalam cache, sehingga Anda tidak akan menerima pembaruan secara otomatis.

Solusi: Perbarui ke versi terbaru:

docker pull sonarsource/sonarqube-mcp

Setelah mengambil image terbaru, mulai ulang klien MCP Anda untuk menggunakan versi yang telah diperbarui.

Sebagai opsi, tambahkan flag --pull=always ke perintah docker run agar selalu memeriksa dan mengambil versi terbaru:

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

"Saya ingin menetapkan versi tertentu"

Lihat tag yang tersedia di sonarsource/sonarqube-mcp dan gunakan versi yang Anda inginkan:

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

Dalam konfigurasi klien MCP, gunakan sonarsource/sonarqube-mcp:<version> sebagai pengganti sonarsource/sonarqube-mcp dan hapus --pull=always agar Docker tidak memperbarui image secara diam-diam.

Data dan telemetri

Server ini mengumpulkan data penggunaan anonim dan mengirimkannya ke SonarSource untuk membantu meningkatkan produk. Tidak ada kode sumber atau alamat IP yang dikumpulkan, dan SonarSource tidak membagikan data tersebut kepada pihak lain. Pengumpulan telemetri dapat dinonaktifkan dengan properti sistem atau variabel lingkungan berikut: TELEMETRY_DISABLED=true. Klik di sini untuk melihat contoh data yang dikumpulkan.

Lisensi

Hak cipta 2025 SonarSource.

Dilisensikan berdasarkan SONAR Source-Available License v1.0. Penggunaan SonarQube MCP Server sesuai dengan dokumentasi ini merupakan Tujuan Non-Kompetitif sehingga diizinkan berdasarkan SSAL.

Penggunaan SonarQube melalui MCP diatur oleh Ketentuan Layanan SonarQube Cloud atau Syarat dan Ketentuan SonarQube Server, termasuk penggunaan Data Hasil semata-mata untuk keperluan pengembangan perangkat lunak internal Anda.