SonarQube
resmiMenyediakan 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-mcpdengan 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_TOOLSETSdanSONARQUBE_READ_ONLYuntuk mengontrol alat yang dimuat dan memblokir operasi tulis.
Dokumentasi
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 gantidockerdengan alat pilihan Anda.
Antigravity
SonarQube MCP Server tersedia di Antigravity MCP Store. Ikuti petunjuk berikut:
- Buka Panel Samping Agen
- Klik tiga titik (...) di kanan atas, lalu pilih MCP Servers
- Cari
SonarQubedan pilih Install - 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:
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:
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 AndaSONARQUBE_ORG- Kunci organisasi AndaSONARQUBE_URL- (Opsional) Tetapkan kehttps://sonarqube.usuntuk SonarQube Cloud US
-
Untuk SonarQube Server:
SONARQUBE_TOKEN- Token USER SonarQube Server AndaSONARQUBE_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.
Untuk SonarQube Cloud US, tambahkan "SONARQUBE_URL": "https://sonarqube.us" secara manual ke bagian env dalam konfigurasi MCP Anda setelah instalasi.
Windsurf
SonarQube MCP Server tersedia sebagai plugin Windsurf. Ikuti petunjuk berikut:
- Buka Settings > Cascade > MCP Servers di Windsurf, lalu pilih Open MCP Marketplace
- Cari
sonarqubedi Cascade MCP Marketplace - Pilih SonarQube MCP Server, lalu pilih Install
- 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=hostke 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 lingkungan | Deskripsi |
|---|---|
STORAGE_PATH | Jalur 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_KEY | Kunci 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_PORT | Nomor port opsional antara 64120 dan 64130 yang digunakan untuk menghubungkan SonarQube MCP Server dengan SonarQube for IDE. |
SONARQUBE_FORCE_LOCAL_ANALYSIS | Tetapkan 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_ENABLED | Jika 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_DISABLED | Jika 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 lingkungan | Deskripsi |
|---|---|
SONARQUBE_TOOLSETS | Daftar 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_ONLY | Jika 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 lingkungan | Deskripsi | Wajib |
|---|---|---|
SONARQUBE_TOKEN | Token SonarQube Cloud Anda | Ya |
SONARQUBE_ORG | Key organisasi SonarQube Cloud opsional yang tetap | Tidak |
SONARQUBE_URL | URL SonarQube Cloud kustom (default ke https://sonarcloud.io). Gunakan ini untuk SonarQube Cloud US: https://sonarqube.us | Tidak |
Contoh:
- SonarQube Cloud: Hanya
SONARQUBE_TOKENyang diperlukan.SONARQUBE_ORGmenetapkan organisasi jika diatur. - SonarQube Cloud US: Atur
SONARQUBE_TOKENdanSONARQUBE_URL=https://sonarqube.us;SONARQUBE_ORGbersifat opsional.
SonarQube Server
| Variabel lingkungan | Deskripsi | Wajib |
|---|---|---|
SONARQUBE_TOKEN | Token USER SonarQube Server Anda | Ya |
SONARQUBE_URL | URL SonarQube Server Anda | Ya |
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_URLuntuk SonarQube Server atau region Cloud lain.SONARQUBE_ORGmenetapkan 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 MCP | Mode server | Penggunaan umum |
|---|---|---|
| Stdio | Default (tanpa SONARQUBE_TRANSPORT) | Klien MCP lokal yang menjalankan server sebagai subproses (Cursor, Claude Code, VS Code, dll.) |
| Streamable HTTP | SONARQUBE_TRANSPORT=http atau https | Deployment 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 lingkungan | Deskripsi | Default |
|---|---|---|
SONARQUBE_TRANSPORT | Atur ke http untuk mengaktifkan transport Streamable HTTP | Tidak diatur (stdio) |
SONARQUBE_HTTP_PORT | Nomor port (1024-65535), atau 0 untuk port yang ditetapkan oleh OS | 8080 |
SONARQUBE_HTTP_HOST | Host yang akan diikat (default ke localhost demi keamanan) | 127.0.0.1 |
SONARQUBE_HTTP_ALLOWED_ORIGINS | Origin browser yang diizinkan untuk CORS, dipisahkan dengan koma (misalnya, https://my-app.example.com) | Tidak diatur |
SONARQUBE_MCP_IN_CONTAINER | Atur 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_ORGadalah 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
organizationopsional 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_organizationshanya 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_TOKENmasih diterima demi kompatibilitas ke belakang, tetapi akan dihapus pada versi mendatang. Beralihlah keAuthorization: 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 lingkungan | Deskripsi | Default |
|---|---|---|
SONARQUBE_TRANSPORT | Atur ke https untuk mengaktifkan transport Streamable HTTP melalui TLS | Tidak diatur (stdio) |
SONARQUBE_HTTP_PORT | Nomor port (biasanya 8443 untuk HTTPS), atau 0 untuk port yang ditetapkan oleh OS | 8080 |
SONARQUBE_HTTP_HOST | Host yang akan diikat (secara default localhost demi keamanan) | 127.0.0.1 |
SONARQUBE_HTTP_ALLOWED_ORIGINS | Asal browser yang diizinkan untuk CORS, dipisahkan dengan koma (misalnya https://my-app.example.com) | Tidak diatur |
SONARQUBE_MCP_IN_CONTAINER | Atur 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 lingkungan | Deskripsi | Default |
|---|---|---|
SONARQUBE_HTTPS_KEYSTORE_PATH | Jalur ke file keystore (.p12 atau .jks) | /etc/ssl/mcp/keystore.p12 |
SONARQUBE_HTTPS_KEYSTORE_PASSWORD | Kata sandi keystore | sonarlint |
SONARQUBE_HTTPS_KEYSTORE_TYPE | Jenis keystore (PKCS12 atau JKS) | PKCS12 |
Contoh - Docker dengan SonarQube Cloud:
Catatan: Saat berjalan di dalam kontainer, atur
SONARQUBE_HTTP_HOST=0.0.0.0agar kontainer mendengarkan di semua antarmuka dan pemetaan port runtime berfungsi, serta aturSONARQUBE_MCP_IN_CONTAINER=trueuntuk 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.0hanya 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_TOOLSETSdanSONARQUBE_READ_ONLYadalah 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.
| Endpoint | Metode | Deskripsi | Contoh respons |
|---|---|---|---|
/health | GET | Probe liveness. Mengembalikan 200 OK dengan isi kosong setelah server siap menerima permintaan. | (isi kosong) |
/info | GET | Mengembalikan 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:
| Properti | Deskripsi | Contoh |
|---|---|---|
http.proxyHost | Nama host proxy HTTP | proxy.example.com |
http.proxyPort | Port proxy HTTP | 8080 |
https.proxyHost | Nama host proxy HTTPS | proxy.example.com |
https.proxyPort | Port proxy HTTPS | 8443 |
http.nonProxyHosts | Host yang melewati proxy (dipisahkan dengan pipa) | localhost|127.0.0.1|*.internal.com |
Autentikasi Proxy HTTP/HTTPS:
| Properti | Deskripsi | Contoh |
|---|---|---|
http.proxyUser | Nama pengguna proxy HTTP | myuser |
http.proxyPassword | Kata sandi proxy HTTP | mypassword |
https.proxyUser | Nama pengguna proxy HTTPS | myuser |
https.proxyPassword | Kata sandi proxy HTTPS | mypassword |
Proxy SOCKS5
Proxy SOCKS5 didukung.
| Properti | Deskripsi | Default | Contoh |
|---|---|---|---|
socksProxyHost | Nama host proxy SOCKS5 | — | localhost |
socksProxyPort | Port proxy SOCKS5 | 1080 | 1080 |
java.net.socks.username | Nama pengguna SOCKS5 (jika autentikasi diperlukan) | — | myuser |
java.net.socks.password | Kata 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/.keyterpisah) harus dikonversi terlebih dahulu ke format PKCS12. Gunakanopenssl pkcs12 -export -in client.crt -inkey client.key -out client.p12untuk 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_snippetakan dihapus pada rilis mendatang. Hubungkan SonarQube for IDE untuk menggunakananalyze_file_list, atau aktifkan analisis Vortex untuk organisasi Anda agar dapat menggunakanrun_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
fileContentlengkap untuk analisis file secara menyeluruh (melaporkan semua masalah) - Tambahkan
codeSnippetopsional untuk memfilter hasil — hanya masalah dalam cuplikan yang akan dilaporkan (lokasi cuplikan dideteksi secara otomatis)
Parameter:
organization- Kunci organisasi SonarQube Cloud - String opsional, hanya CloudprojectKey- Kunci proyek SonarQube - String wajib (Diabaikan jikaSONARQUBE_PROJECT_KEYditentukan)filePath- Jalur file relatif terhadap proyek yang akan dianalisis (misalnya,src/main/java/MyClass.java). Digunakan saat workspace di-mount di/app/mcp-workspace- StringfileContent- Konten file lengkap sebagai string. Wajib diisi jika workspace tidak di-mount - StringcodeSnippet- Cuplikan kode untuk memfilter masalah (harus cocok dengan konten di fileContent) - Stringlanguage- Bahasa kode (misalnya, 'java', 'python', 'js', 'ts', 'tsx', 'jsx') - Stringscope- 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 - Dengan workspace yang di-mount (disarankan): teruskan
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 CloudprojectKey- Kunci proyek - String wajib (Diabaikan jikaSONARQUBE_PROJECT_KEYditentukan)branch- Nama cabang yang digunakan untuk mengambil konteks analisis terbaru - String wajibfilePath- Jalur file relatif terhadap proyek yang akan dianalisis (misalnya,src/main/java/MyClass.java). - String wajibfileScope- 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 jikaSONARQUBE_PROJECT_KEYditentukan)branch- Nama cabang opsional untuk analisis berbasis cabang. Gunakanlist_branchesuntuk menemukan nama yang valid - StringpullRequest- Kunci/ID pull request opsional. Gunakanlist_pull_requestsuntuk menemukan kunci yang valid - StringmaxCoverage- Ambang batas cakupan maksimum (0-100). Hanya kembalikan file dengan cakupan <= nilai ini - NumberpageIndex- Indeks halaman (berbasis 1, default: 1) - NumberpageSize- 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 wajibbranch- Nama cabang opsional untuk analisis berbasis cabang. Gunakanlist_branchesuntuk menemukan nama yang valid - StringpullRequest- Kunci/ID pull request opsional. Gunakanlist_pull_requestsuntuk menemukan kunci yang valid - Stringfrom- Baris pertama yang dianalisis (berbasis 1, default: 1) - Numberto- 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 CloudprojectKey- Kunci proyek - String wajib (Diabaikan jikaSONARQUBE_PROJECT_KEYditentukan)branch- Nama cabang opsional untuk analisis berbasis cabang. Gunakanlist_branchesuntuk menemukan nama yang valid - StringpullRequest- Kunci/ID pull request opsional. Gunakanlist_pull_requestsuntuk menemukan kunci yang valid - StringpageIndex- Indeks halaman opsional (berbasis 1, default: 1) - IntegerpageSize- 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 wajibstatus- Status baru masalah - Enum {"accept", "falsepositive", "reopen"} wajibcomment- 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 CloudprojectKeys- Daftar kunci proyek SonarQube opsional - String[]branch- Nama cabang opsional untuk analisis berbasis cabang. Gunakanlist_branchesuntuk menemukan nama yang valid - StringpullRequest- Kunci/ID pull request opsional. Gunakanlist_pull_requestsuntuk menemukan kunci yang valid - Stringseverities- 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 antaraprojectKeysdanfiles- BooleanissueKey- Kunci masalah opsional untuk mengambil masalah tertentu - StringpageIndex- Indeks halaman opsional berbasis 1 (default: 1) - IntegerpageSize- 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 jikaSONARQUBE_PROJECT_KEYditentukan)hotspotKeys- Daftar kunci Hotspot Keamanan tertentu yang dipisahkan koma untuk diambil - String[]branch- Nama cabang opsional untuk analisis berbasis cabang. Gunakanlist_branchesuntuk menemukan nama yang valid - StringpullRequest- Kunci/ID pull request opsional. Gunakanlist_pull_requestsuntuk menemukan kunci yang valid - Stringfiles- Daftar jalur file opsional untuk memfilter hasil - String[]status- Filter status opsional: TO_REVIEW, REVIEWED - Stringresolution- Filter resolusi opsional: FIXED, SAFE, ACKNOWLEDGED - StringsinceLeakPeriod- Filter hotspot yang dibuat sejak periode kebocoran (kode baru) - BooleanonlyMine- Hanya tampilkan hotspot yang ditugaskan kepada saya - BooleanpageIndex- Indeks halaman opsional berbasis 1 (default: 1) - IntegerpageSize- 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 wajibstatus- Status baru - Enum {"TO_REVIEW", "REVIEWED"} wajibresolution- 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 jikaSONARQUBE_PROJECT_KEYtidak dikonfigurasibranch- Nama cabang opsional untuk analisis berbasis cabang. Gunakanlist_branchesuntuk menemukan nama yang valid - StringmetricKeys- Kunci metrik opsional yang akan diambil (misalnya, ncloc, complexity, violations, coverage) - String[]pullRequest- Kunci/ID pull request opsional. Gunakanlist_pull_requestsuntuk menemukan kunci yang valid - String
Metrik
- search_metrics - Cari metrik SonarQube.
pageIndex- Indeks halaman opsional berbasis 1 (default: 1) - IntegerpageSize- 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 - Stringfavorite- Jika true, hanya kembalikan portofolio favorit - BooleanpageIndex- Nomor halaman opsional berbasis 1 (default: 1) - IntegerpageSize- Ukuran halaman opsional, maks. 500 (default: 100) - Integer
Untuk SonarQube Cloud:
enterpriseId- UUID enterprise. Dapat dihilangkan hanya jika parameter 'favorite' diberikan dengan nilai true - Stringq- Kueri pencarian opsional untuk memfilter portofolio berdasarkan nama - Stringfavorite- 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 - Booleandraft- Jika true, hanya mengembalikan draf yang dibuat oleh pengguna yang sedang login. Tidak boleh bernilai true jika 'favorite' bernilai true - BooleanpageIndex- Indeks halaman opsional yang akan diambil (default: 1) - IntegerpageSize- 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
organizationpada alat berikutnya. -
search_my_sonarqube_projects - Menemukan proyek SonarQube. Respons menggunakan paginasi.
organization- Key organisasi SonarQube Cloud - Optional String, Cloud onlypageIndex- Indeks halaman opsional berbasis 1 (default: 1) - IntegerpageSize- Ukuran halaman opsional. Harus lebih besar dari 0 dan kurang dari atau sama dengan 500 (default: 500) - Integerq- 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 kolomtypedanmergeBranch. FilterbranchTypesbersifat opsional:ALL(default),LONG, atauSHORT. - SonarQube Server: mengembalikan semua branch yang dianalisis (nama, quality gate, tanggal analisis). Tidak ada filter
type,mergeBranch, ataubranchTypes. - Gunakan nama branch yang dikembalikan sebagai parameter
branchpada alat lain. Untuk analisis pull request, gunakanlist_pull_requests. projectKey- Key proyek (misalnya my_project) - Required String (Diabaikan jikaSONARQUBE_PROJECT_KEYditentukan)branchTypes- (Khusus SonarQube Cloud) Filter opsional:ALL(default),LONG, atauSHORT- Enum {"ALL", "LONG", "SHORT"}
- SonarQube Cloud: mengembalikan branch berumur panjang (
-
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 jikaSONARQUBE_PROJECT_KEYditentukan)
Quality Gate
-
get_project_quality_gate_status - Mendapatkan status Quality Gate untuk proyek SonarQube.
analysisId- ID analisis opsional - Stringbranch- Nama branch opsional untuk analisis berbasis branch. Gunakanlist_branchesuntuk menemukan nama yang valid - StringprojectId- ID proyek opsional - StringprojectKey- Key proyek opsional - StringpullRequest- Key/ID pull request opsional. Gunakanlist_pull_requestsuntuk 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 onlykey- 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 jikaSONARQUBE_PROJECT_KEYditentukan)branch- Nama branch opsional untuk analisis berbasis branch. Gunakanlist_branchesuntuk menemukan nama yang valid - StringpullRequest- Key/ID pull request opsional. Gunakanlist_pull_requestsuntuk menemukan key yang valid - StringpageSize- Jumlah hasil per halaman opsional untuk paginasi manual (maks.: 500). Jika tidak ditentukan, semua file duplikat akan diambil secara otomatis - IntegerpageIndex- 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 Stringbranch- Nama branch opsional untuk analisis berbasis branch. Gunakanlist_branchesuntuk menemukan nama yang valid - StringpullRequest- Key/ID pull request opsional. Gunakanlist_pull_requestsuntuk 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 Stringbranch- Nama branch opsional untuk analisis berbasis branch. Gunakanlist_branchesuntuk menemukan nama yang valid - StringpullRequest- Key/ID pull request opsional. Gunakanlist_pull_requestsuntuk 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 Stringcommits_by_line- Kelompokkan baris berdasarkan commit SCM jika nilainya false; jika tidak, tampilkan commit untuk setiap baris - Stringfrom- Baris pertama yang dikembalikan. Dimulai dari 1 - Numberto- 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 onlyname- Nama webhook - Required Stringurl- URL webhook - Required StringprojectKey- Key proyek opsional untuk webhook khusus proyek - Stringsecret- 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 onlyprojectKey- 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) - Stringexclude_glob- Pola glob pengecualian file - Stringfields- Daftar field yang dipisahkan koma untuk disertakan dalam respons - Stringlimit- Jumlah maksimum hasil yang dikembalikan (default: 10) - Integerregex_lists_operator- Cara menggabungkan beberapa pola:OR(default) atauAND- 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 - Stringexclude_glob- Pola glob pengecualian file - Stringfields- Daftar field yang dipisahkan koma untuk disertakan dalam respons - Stringlimit- Jumlah maksimum hasil yang dikembalikan (default: 10) - Integerregex_lists_operator- Cara menggabungkan beberapa pola:OR(default) atauAND- 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 Stringdepth- Kedalaman rantai pemanggilan (0=hanya fungsi, 1=pemanggil langsung, dst.) - Integerfields- 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 Stringdepth- Kedalaman rantai pemanggilan (0=hanya fungsi, 1=fungsi yang dipanggil secara langsung, dst.) - Integerfields- 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 Stringfields- 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 Stringfields- 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 Stringfields- 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 Integerpath_prefix- Prefiks jalur opsional untuk memfilter node (misalnya,com.example.service) - Stringecosystem- 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, ataucombined- String Wajibcategories- Daftar nama kategori (wajib untuk modecategory_baseddancombined) - String[]languages- Daftar bahasa target dalam format kunci repositori SonarQube (wajib jikacategoriesdiberikan) - 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>(misalnyapkg: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
| Variabel | Deskripsi | Wajib | Default |
|---|---|---|---|
SONARQUBE_URL | URL SonarQube Cloud | Ya | https://sonarcloud.io |
SONARQUBE_TOKEN | Token autentikasi | Ya | Tidak ada |
SONARQUBE_ORG | Organisasi cloud; diteruskan ke proxy dari konfigurasi startup atau deteksi unik | Tidak | Tidak ada |
SONARQUBE_PROJECT_KEY | Kunci proyek di SonarQube Cloud | Ya | Tidak ada |
SONAR_SQ_BRANCH | Penggantian cabang SonarQube secara eksplisit * | Tidak | Tidak ada |
SONARQUBE_DEBUG_ENABLED | Mengaktifkan pencatatan log debug (untuk pemecahan masalah) | Tidak | False |
SONAR_LOG_LEVEL | Tingkat detail log (TRACE, DEBUG, INFO, WARNING, ERROR) | Tidak | INFO |
- 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
PENDINGdanassessmentId. Gunakanget_agentic_readiness_assessmentuntuk memeriksa hasil secara berkala.projectKey- Kunci proyek - String Wajib (Diabaikan jikaSONARQUBE_PROJECT_KEYditentukan)branch- Cabang yang akan dinilai. Abaikan untuk menggunakan cabang default proyek - String
-
get_agentic_readiness_assessment - Mengambil hasil penilaian. Panggil kembali dengan
assessmentIdyang sama hingga statusnya menjadiCOMPLETED,FAILED, atauINTERRUPTED. Setelah selesai, mengembalikan tingkat keseluruhan dan perincian per pilar beserta tindakan yang disarankan dan bukti.assessmentId- ID penilaian yang dikembalikan olehstart_agentic_readiness_assessment- String Wajib
-
list_agentic_readiness_assessments - Mencantumkan semua penilaian untuk sebuah proyek, dimulai dari yang terbaru. Gunakan
get_agentic_readiness_assessmentuntuk hasil lengkap tingkat pilar.projectKey- Kunci proyek yang penilaiannya akan dicantumkan - String Wajib (Diabaikan jikaSONARQUBE_PROJECT_KEYditentukan)branch- Memfilter penilaian berdasarkan nama cabang. Abaikan untuk mencantumkan penilaian dari semua cabang - StringpageIndex- Indeks halaman berbasis 1 (default: 1) - NumberpageSize- 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,directivesataufindings; ketersediaannya bergantung pada build MCP dan Server - Enum WajibprojectKey- Kunci proyek - String Wajib (Diabaikan jikaSONARQUBE_PROJECT_KEYditentukan)organization- Kunci organisasi SonarQube Cloud jika belum dikonfigurasi - String Opsional, hanya Cloudcomponent- Kunci node saat ini atau jalur grup yang diinginkan secara persis; tingkat teratas jika diabaikan - Stringdepth- Hanya untuk saat ini/yang diinginkan: tingkat di bawah titik awal; default 1 untuk saat ini, semua untuk yang diinginkan - Numberlanguage- Hanya untuk saat ini/yang diinginkan/temuan:java,cs,js,tsataupy- EnumdirectiveId- Arahan lengkap berdasarkan UUID, termasuk deskripsi; gunakan sebagai pengganti paginasi - Stringcategory/type- Hanya untuk Temuan: memfilter penyimpangan, cacat, atau code smell berdasarkan jenis yang diiklankan - EnumpageIndex- Arahan/Temuan: indeks halaman berbasis 1 (default: 1) - NumberpageSize- 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-intendedataudirectives- Enum WajibprojectKey- Kunci proyek - String Wajib (Diabaikan jikaSONARQUBE_PROJECT_KEYditentukan)organization- Kunci organisasi SonarQube Cloud jika belum dikonfigurasi - String Opsional, hanya Cloudmodel- String JSON: ekspor lengkap yang diinginkan atau larikmodels(konten yang dihilangkan akan dihapus), atau perubahan arahan dengan larikcreate,updatedandelete- String WajibdryRun-trueuntuk pratinjau,falseuntuk menerapkan - Boolean Wajibrevision- Hanya untuk arsitektur yang diinginkan: revisi dariarchitecture_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.