SonarQube MCP Server
官方提供與 SonarQube Server 或 Cloud 的無縫整合,並能在代理程式上下文中直接分析程式碼片段
文件
SonarQube MCP 伺服器
SonarQube MCP 伺服器是一個模型上下文協定 (MCP) 伺服器,可與 SonarQube Server 或 Cloud 無縫整合,以提升程式碼品質與安全性。 它也支援直接在代理程式上下文中分析程式碼片段。
快速設定
安全性最佳實務
🔒 重要:您的 SonarQube 權杖是敏感憑證。請遵循以下安全性實務:
使用 CLI 指令時:
- 避免在命令列參數中硬編碼權杖 – 它們會儲存在 shell 歷史記錄中
- 使用環境變數 – 在執行指令前,先將權杖設定在環境變數中
使用設定檔時:
- 切勿將權杖提交至版本控制系統
- 盡可能在設定檔中使用環境變數替換
🚀 產生您的設定
最快的入門方式是使用 SonarQube MCP 伺服器設定產生器 – 這是一個互動式工具,可為您偏好的 AI 代理程式用戶端產生立即可用的設定。
手動設定
如果您偏好自行設定,最簡單的方法是使用我們位於 sonarsource/sonarqube-mcp 的容器映像檔。使用 sonarsource/sonarqube-mcp 可自動更新(搭配 --pull=always),或釘選到某個版本標籤(例如 sonarsource/sonarqube-mcp:1.19.0.2785)以實現可重現的部署。如果您想在本地建置,請閱讀下方說明。
注意: 雖然以下範例使用
docker,但任何相容 OCI 的容器執行階段都可以使用(例如 Podman、nerdctl)。只需將docker替換為您偏好的工具即可。
Antigravity
SonarQube MCP 伺服器可在 Antigravity MCP 商店中取得。請按照以下說明操作:
- 開啟 Agent 側邊面板
- 點擊右上角的三個點 (...) 並選擇 MCP Servers
- 搜尋
SonarQube並選擇 Install - 提供必要的 SonarQube 使用者權杖。您也可以提供 SonarQube Cloud 的組織金鑰,或連接到 SonarQube Server 時所需的 SonarQube URL。
對於 SonarQube Cloud US,請將 URL 設定為 https://sonarqube.us。
或者,您可以透過 mcp_config.json 手動設定伺服器:
- 連接 SonarQube Cloud:
在 Agent 側邊面板中,點擊三個點 (...) -> MCP Store -> Manage MCP Servers -> View raw config,然後新增以下內容:
{
"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>"
}
}
}
}
對於 SonarQube Cloud US,請手動將 "SONARQUBE_URL": "https://sonarqube.us" 新增到 env 區段,並將 "-e", "SONARQUBE_URL" 新增到 args 陣列。
- 連接 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
- 連接 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
對於 SonarQube Cloud US,請將 --env SONARQUBE_URL=https://sonarqube.us 新增到指令中。
- 連接 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
手動編輯位於 ~/.codex/config.toml 的設定檔,並新增以下設定:
- 連接 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>" }
對於 SonarQube Cloud US,請將 "SONARQUBE_URL" = "https://sonarqube.us" 新增到 env 區段,並將 "-e", "SONARQUBE_URL" 新增到 args 陣列。
- 連接 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
- 連接 SonarQube Cloud:
對於 SonarQube Cloud US,請在安裝後手動將 "SONARQUBE_URL": "https://sonarqube.us" 新增到 MCP 設定中的 env 區段。
- 連接 SonarQube Server:
Gemini CLI
注意: Gemini CLI 擴充功能已移至 sonarqube-agent-plugins 存放庫。請從那裡安裝。
您可以使用以下指令安裝我們的 MCP 伺服器擴充功能:
gemini extensions install https://github.com/SonarSource/sonarqube-agent-plugins
在啟動 Gemini 之前,您需要設定必要的環境變數:
必要的環境變數:
-
對於 SonarQube Cloud:
SONARQUBE_TOKEN- 您的 SonarQube Cloud 權杖SONARQUBE_ORG- 您的組織金鑰SONARQUBE_URL- (選用)對於 SonarQube Cloud US,請設定為https://sonarqube.us
-
對於 SonarQube Server:
SONARQUBE_TOKEN- 您的 SonarQube Server 使用者權杖SONARQUBE_URL- 您的 SonarQube Server URL
安裝後,擴充功能將安裝在 <home>/.gemini/extensions/sonarqube/gemini-extension.json 下。
GitHub Copilot CLI
啟動 Copilot CLI 後,執行以下指令來新增 SonarQube MCP 伺服器:
/mcp add
您將需要提供有關 MCP 伺服器的不同資訊,您可以使用 Tab 鍵在欄位之間導航。
- 連接 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: *
對於 SonarQube Cloud US,請將 -e, SONARQUBE_URL 新增到 Arguments,並將 SONARQUBE_URL=https://sonarqube.us 新增到 Environment Variables。
- 連接 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: *
設定檔位於 ~/.copilot/mcp-config.json。
GitHub Copilot 編碼代理程式
GitHub Copilot 編碼代理程式可以直接在您的 CI/CD 中利用 SonarQube MCP 伺服器。
若要將密鑰新增到您的 Copilot 環境,請遵循 Copilot 文件。只有名稱前綴為 COPILOT_MCP_ 的密鑰才能用於您的 MCP 設定。
在您的 GitHub 存放庫中,導航至 Settings -> Copilot -> Coding agent,然後在 MCP 設定區段中新增以下設定:
- 連接 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": ["*"]
}
}
}
對於 SonarQube Cloud US,請將 "-e", "SONARQUBE_URL" 新增到 args 陣列,並將 "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL" 新增到 env 區段,然後設定密鑰 COPILOT_MCP_SONARQUBE_URL=https://sonarqube.us。
- 連接 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
在您的工作區目錄中建立一個 .kiro/settings/mcp.json 檔案(或編輯現有檔案),並新增以下設定:
- 連接 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": []
}
}
}
對於 SonarQube Cloud US,請將 "-e", "SONARQUBE_URL" 新增到 args 陣列,並將 "SONARQUBE_URL": "https://sonarqube.us" 新增到 env 區段。
- 連接 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
您可以使用以下按鈕來簡化 VS Code 中的安裝程序。
對於 SonarQube Cloud US,請在安裝後手動將 "SONARQUBE_URL": "https://sonarqube.us" 新增到 MCP 設定中的 env 區段。
Windsurf
SonarQube MCP 伺服器可作為 Windsurf 外掛程式使用。請按照以下說明操作:
- 開啟 Windsurf Settings > Cascade > MCP Servers 並選擇 Open MCP Marketplace
- 在 Cascade MCP Marketplace 上搜尋
sonarqube - 選擇 SonarQube MCP Server 並選擇 Install
- 新增必要的 SonarQube 使用者權杖。然後,如果您想連接 SonarQube Cloud,請新增組織金鑰;如果您想連接 SonarQube Server 或 Community Build,請新增 SonarQube URL。
對於 SonarQube Cloud US,請將 URL 設定為 https://sonarqube.us。
Zed
在 Zed 中導航至 Extensions 檢視畫面,並搜尋 SonarQube MCP Server。 安裝擴充功能時,系統會提示您提供必要的環境變數:
- 使用 SonarQube Cloud 時:
{
"sonarqube_token": "YOUR_SONARQUBE_TOKEN",
"sonarqube_org": "SONARQUBE_ORGANIZATION_KEY",
"docker_path": "DOCKER_PATH"
}
對於 SonarQube Cloud US,請將 "sonarqube_url": "https://sonarqube.us" 新增到設定中。
- 使用 SonarQube Server 時:
{
"sonarqube_token": "YOUR_SONARQUBE_USER_TOKEN",
"sonarqube_url": "YOUR_SONARQUBE_SERVER_URL",
"docker_path": "DOCKER_PATH"
}
docker_path 是 docker 執行檔的路徑。範例:
Linux/macOS:/usr/bin/docker 或 /usr/local/bin/docker
Windows:C:\Program Files\Docker\Docker\resources\bin\docker.exe
💡 提示: 我們建議定期提取最新映像檔,或在回報問題前提取,以確保您擁有最新的功能和修正。
手動安裝
您可以透過在 MCP 伺服器設定檔中複製以下片段來手動安裝 SonarQube MCP 伺服器:
- 連接 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>"
}
}
}
- 連接 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>"
}
}
}
與 SonarQube for IDE 整合
SonarQube MCP 伺服器可以與 SonarQube for IDE 整合,以進一步增強您的開發工作流程,直接在您的 IDE 中提供更好的程式碼分析和見解。
設定
使用 SonarQube for IDE 時,應使用正確的連接埠號碼設定 SONARQUBE_IDE_PORT 環境變數。SonarQube for VS Code 包含一個快速安裝按鈕,可自動設定正確的連接埠設定。
例如,搭配 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>"
}
}
}
在 Linux 上的容器中執行 MCP 伺服器時,容器無法存取在 localhost 上執行的 SonarQube for IDE 嵌入式伺服器。若要允許容器連接到 SonarQube for IDE 伺服器,請將
--network=host選項新增到您的容器執行指令中。
設定
根據您的環境,您應提供特定的環境變數。
基礎
執行 MCP 伺服器時,您應新增以下變數:
| 環境變數 | 說明 |
|---|---|
STORAGE_PATH | 強制性的可寫入目錄絕對路徑,SonarQube MCP 伺服器將在此儲存其檔案(例如,用於建立、更新和持久化),使用容器映像檔時會自動提供 |
SONARQUBE_PROJECT_KEY | 選用的預設專案金鑰。設定後,所有需要專案金鑰的工具都將自動使用此值 — projectKey 參數將從其結構描述中完全移除。在處理單一專案時很有用。 |
SONARQUBE_IDE_PORT | 選用的連接埠號碼,範圍在 64120 到 64130 之間,用於連接 SonarQube MCP 伺服器與 SonarQube for IDE。 |
SONARQUBE_DEBUG_ENABLED | 設定為 true 時,會啟用除錯記錄。除錯記錄會同時寫入記錄檔和 STDERR。對於疑難排解連線或設定問題很有用。預設值:false。 |
SONARQUBE_LOG_TO_FILE_DISABLED | 設定為 true 時,會完全停用將記錄寫入磁碟。不會在 STORAGE_PATH/logs/ 下建立任何記錄檔。在容器化或短暫的環境中,若不希望產生檔案記錄,這會很有用。預設值:false。 |
工作區掛載(減少上下文膨脹)
預設情況下,分析工具 analyze_code_snippet 要求代理程式將完整的檔案內容作為 fileContent 引數傳遞。對於大型檔案或在一個工作階段中分析許多檔案時,這會顯著增加上下文視窗的使用量和成本。解決方案: 將您的專案目錄掛載到容器中的 /app/mcp-workspace。當偵測到此掛載時,伺服器會使用專案相對的 filePath 參數直接從磁碟讀取檔案——檔案內容永遠不會通過代理程式上下文。
{
"args": [
"run", "-i", "--rm", "--init", "--pull=always",
"-e", "SONARQUBE_TOKEN",
"-e", "SONARQUBE_ORG",
"-v", "/path/to/your/project:/app/mcp-workspace",
"sonarsource/sonarqube-mcp"
]
}
當掛載作用時:
- 如果您的組織具備相應權限,
run_advanced_code_analysis將變為可用 analyze_code_snippet:需要filePath,且不使用fileContent——伺服器以相同方式解析檔案
選擇性工具集啟用
預設情況下,僅啟用重要的工具集以減少上下文開銷。您可以根據需要啟用額外的工具集。
| 環境變數 | 說明 |
|---|---|
SONARQUBE_TOOLSETS | 要啟用的工具集,以逗號分隔的清單。設定後,僅這些工具集可用。若未設定,則啟用預設的重要工具集(analysis、issues、projects、quality-gates、rules、duplications、measures、security-hotspots、dependency-risks、coverage、cag)。注意: projects 工具集始終啟用,因為它是尋找其他操作所需專案金鑰的必要工具。上下文增強工具僅在 stdio 模式下可用,且需要組織權限。在 Streamable HTTP 模式下,用戶端可以發送 SONARQUBE_TOOLSETS HTTP 標頭以在每個請求中進一步縮小範圍,但無法啟用超出伺服器啟動時所設定的工具集(請參閱下方的 Streamable HTTP 傳輸)。 |
SONARQUBE_READ_ONLY | 設定為 true 時,啟用唯讀模式,停用所有寫入操作(例如變更問題狀態)。若同時設定了 SONARQUBE_TOOLSETS,此篩選器將與之疊加。預設值:false。在 Streamable HTTP 模式下,用戶端可以發送 SONARQUBE_READ_ONLY HTTP 標頭以在個別請求中進一步限制為唯讀,但無法解除伺服器層級的唯讀限制(請參閱下方的 Streamable HTTP 傳輸)。 |
可用的工具集
| 工具集 | 金鑰 | 說明 |
|---|---|---|
| 分析 | analysis | 程式碼分析工具(本機分析和進階遠端分析) |
| 問題 | issues | 搜尋和管理 SonarQube 問題 |
| 安全熱點 | security-hotspots | 搜尋和審查安全熱點 |
| 專案 | projects | 瀏覽和搜尋 SonarQube 專案 |
| 品質門檻 | quality-gates | 存取品質門檻及其狀態 |
| 規則 | rules | 瀏覽和搜尋 SonarQube 規則 |
| 原始碼 | sources | 存取原始程式碼和 SCM 資訊 |
| 重複程式碼 | duplications | 跨專案尋找重複程式碼 |
| 度量 | measures | 擷取指標和度量(包含度量與指標工具) |
| 語言 | languages | 列出支援的程式語言 |
| 組合管理 | portfolios | 管理組合和企業(Cloud 和 Server) |
| 系統 | system | 系統管理工具(僅限 Server) |
| Webhook | webhooks | 管理 Webhook |
| 依賴風險 | dependency-risks | 分析依賴風險和安全性問題 (SCA) |
| 覆蓋率 | coverage | 測試覆蓋率分析和改善工具 |
| 上下文增強 | cag | 上下文增強工具(僅限 stdio 模式,需要組織權限) |
| 代理式就緒度 | agentic-readiness | 代理式就緒度評估工具(SonarQube Cloud,需要組織權限) |
範例
啟用分析、問題和品質門檻工具集(搭配 SonarQube Cloud 使用 Docker):
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
注意:projects 工具集始終會自動啟用,因此您無需將其包含在 SONARQUBE_TOOLSETS 中。
啟用唯讀模式(搭配 SonarQube Cloud 使用 Docker):
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
若要啟用完整功能,必須在啟動伺服器前設定以下環境變數:
| 環境變數 | 說明 | 必要 |
|---|---|---|
SONARQUBE_TOKEN | 您的 SonarQube Cloud 權杖 | 是 |
SONARQUBE_ORG | 您的 SonarQube Cloud 組織 金鑰 | 是 |
SONARQUBE_URL | 自訂 SonarQube Cloud URL(預設為 https://sonarcloud.io)。用於 SonarQube Cloud US:https://sonarqube.us | 否 |
範例:
- SonarQube Cloud:僅需要
SONARQUBE_TOKEN和SONARQUBE_ORG - SonarQube Cloud US:設定
SONARQUBE_TOKEN、SONARQUBE_ORG和SONARQUBE_URL=https://sonarqube.us
SonarQube Server
| 環境變數 | 說明 | 必要 |
|---|---|---|
SONARQUBE_TOKEN | 您的 SonarQube Server USER 權杖 | 是 |
SONARQUBE_URL | 您的 SonarQube Server URL | 是 |
⚠️ 連線至 SonarQube Server 需要類型為 USER 的權杖,若使用專案權杖或全域權杖將無法正常運作。
💡 設定提示(stdio 模式):
SONARQUBE_ORG的存在與否決定了您是連線至 SonarQube Cloud 還是 Server。若設定了SONARQUBE_ORG,則使用 SonarQube Cloud;否則,使用 SonarQube Server。
傳輸模式
MCP 規範 定義了兩種傳輸機制:Stdio 和 Streamable HTTP。SonarQube MCP Server 兩者皆支援:
| MCP 傳輸 | 伺服器模式 | 典型用途 |
|---|---|---|
| Stdio | 預設(無 SONARQUBE_TRANSPORT) | 將伺服器作為子程序啟動的本機 MCP 用戶端(Cursor、Claude Code、VS Code 等) |
| Streamable HTTP | SONARQUBE_TRANSPORT=http 或 https | 遠端或多使用者部署;用戶端透過 HTTP(S) 連線至 /mcp(例如,使用自託管伺服器 URL 的 Windsurf) |
注意: Streamable HTTP 是目前的 MCP 網路傳輸方式。早期 MCP 版本中較舊的僅 SSE HTTP 傳輸方式已被棄用且不受支援。
1. Stdio(預設 - 建議用於本機開發)
建議用於本機開發和單使用者設定的模式,為大多數 MCP 用戶端所使用。
範例 - 搭配 SonarQube Cloud 的 Docker:
{
"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)
未加密的 Streamable HTTP 傳輸。對於多使用者部署,請改用 HTTPS。
⚠️ 不建議: 本機開發請使用 Stdio,多使用者正式環境部署請使用 HTTPS(Streamable HTTP)。
| 環境變數 | 說明 | 預設值 |
|---|---|---|
SONARQUBE_TRANSPORT | 設定為 http 以啟用 Streamable HTTP 傳輸 | 未設定(stdio) |
SONARQUBE_HTTP_PORT | 連接埠號碼(1024-65535) | 8080 |
SONARQUBE_HTTP_HOST | 要綁定的主機(基於安全性預設為 localhost) | 127.0.0.1 |
SONARQUBE_HTTP_ALLOWED_ORIGINS | 允許 CORS 的瀏覽器來源,以逗號分隔(例如 https://my-app.example.com) | 未設定 |
SONARQUBE_MCP_IN_CONTAINER | 在容器內執行時設定為 true。官方 Docker 映像會自動設定此項;使用其他 OCI 執行時期(Podman、Kubernetes、Nomad 等)時請自行設定。 | false |
注意: 在 Streamable HTTP 模式(HTTP 或 HTTPS)下,伺服器是無狀態的——每個客戶端請求必須包含一個 Authorization: Bearer <token> 標頭,其中攜帶使用者自己的 SonarQube 權杖。對於 SonarQube Cloud,組織的解析方式如下: |
- 如果在伺服器啟動時設定了
SONARQUBE_ORG,所有請求都會路由到該組織。客戶端不得發送SONARQUBE_ORG標頭——這樣做會導致錯誤。 - 如果在伺服器啟動時未設定
SONARQUBE_ORG,每個客戶端必須在每個請求中提供SONARQUBE_ORG標頭。 客戶端還可以透過提供SONARQUBE_TOOLSETS和/或SONARQUBE_READ_ONLY標頭,在每個請求中縮小可見工具的範圍;這些會在伺服器層級設定的基礎上套用額外的過濾——它們只能縮小範圍,永遠無法擴大範圍。 請求之間不會保留任何會話狀態。
已棄用:
SONARQUBE_TOKEN請求標頭仍向後相容,但將在未來版本中移除。請遷移至Authorization: Bearer <token>。
3. HTTPS(基於 TLS 的 Streamable HTTP)(建議用於多使用者正式環境部署)
使用 TLS 加密的安全 Streamable HTTP 傳輸。需要 SSL 憑證。
✅ 建議用於正式環境: 當透過 Streamable HTTP 為多個使用者部署 MCP 伺服器時,請使用 HTTPS。出於安全考量,伺服器預設綁定到
127.0.0.1(localhost)。
| 環境變數 | 說明 | 預設值 |
|---|---|---|
SONARQUBE_TRANSPORT | 設定為 https 以啟用基於 TLS 的 Streamable HTTP 傳輸 | 未設定 (stdio) |
SONARQUBE_HTTP_PORT | 連接埠號碼(HTTPS 通常為 8443) | 8080 |
SONARQUBE_HTTP_HOST | 綁定的主機(出於安全考量,預設為 localhost) | 127.0.0.1 |
SONARQUBE_HTTP_ALLOWED_ORIGINS | 允許 CORS 的瀏覽器來源,以逗號分隔(例如 https://my-app.example.com) | 未設定 |
SONARQUBE_MCP_IN_CONTAINER | 在容器內執行時設定為 true。官方 Docker 映像會自動設定此項;使用其他 OCI 執行環境(Podman、Kubernetes、Nomad 等)時,請自行設定。 | false |
SSL 憑證設定(選用):
| 環境變數 | 說明 | 預設值 |
|---|---|---|
SONARQUBE_HTTPS_KEYSTORE_PATH | 金鑰庫檔案的路徑(.p12 或 .jks) | /etc/ssl/mcp/keystore.p12 |
SONARQUBE_HTTPS_KEYSTORE_PASSWORD | 金鑰庫密碼 | sonarlint |
SONARQUBE_HTTPS_KEYSTORE_TYPE | 金鑰庫類型(PKCS12 或 JKS) | PKCS12 |
範例 - 搭配 SonarQube Cloud 的 Docker:
注意: 在容器中執行時,請設定
SONARQUBE_HTTP_HOST=0.0.0.0以便容器監聽所有網路介面,使執行環境的連接埠映射能夠正常運作,並設定SONARQUBE_MCP_IN_CONTAINER=true以告知伺服器它位於容器內部。官方 Docker 映像會自動設定後者;使用其他 OCI 執行環境(Podman、Kubernetes、Nomad 等)時,請自行設定。主機端的連接埠旗標控制誰可以從容器外部存取伺服器。SONARQUBE_HTTP_HOST=0.0.0.0僅控制伺服器在容器內部的監聽位置——瀏覽器 CORS 預設仍允許 localhost 來源。
對於在您的本機上執行的伺服器(僅可從 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 \
-e SONARQUBE_TOKEN="<init-token>" \
-e SONARQUBE_ORG="<your-org>" \
sonarsource/sonarqube-mcp
對於可從網路存取的伺服器(遠端部署):
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 \
-e SONARQUBE_TOKEN="<init-token>" \
-e SONARQUBE_ORG="<your-org>" \
sonarsource/sonarqube-mcp
客戶端設定(SonarQube Cloud):
{
"mcpServers": {
"sonarqube-https": {
"url": "https://your-server:8443/mcp",
"headers": {
"Authorization": "Bearer <your-token>",
"SONARQUBE_ORG": "<your-org>",
"SONARQUBE_TOOLSETS": "issues,quality-gates",
"SONARQUBE_READ_ONLY": "true"
}
}
}
}
客戶端設定(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"
}
}
}
}
注意:
SONARQUBE_TOOLSETS和SONARQUBE_READ_ONLY是選用的每個請求標頭,可針對該特定請求縮小伺服器層級的工具集範圍。它們只能縮小範圍——無法啟用超出伺服器啟動時所設定的工具集或解除限制。
注意: 對於本機開發,請改用 Stdio 傳輸(預設值)。HTTPS Streamable HTTP 適用於具有適當 SSL 憑證的多使用者正式環境部署。
服務端點
在 Streamable HTTP 模式(http 或 https)下執行時,除了位於 /mcp 的 MCP 端點外,伺服器還會公開一些無需驗證的服務端點。這些端點適用於服務對服務的使用(監控、協調、客戶端相容性檢查),且不需要 Authorization 標頭。
| 端點 | 方法 | 說明 | 回應範例 |
|---|---|---|---|
/health | GET | 存活探針。一旦伺服器開始接受請求,便會以空主體回傳 200 OK。 | (空主體) |
/info | GET | 以 JSON 格式回傳 MCP 伺服器版本。用於驗證已部署的伺服器版本。 | {"version":"1.16.0"} |
使用 Stdio 傳輸執行時,無法使用這些端點。
自訂憑證
如果您的 SonarQube Server 使用自我簽署憑證或來自私人憑證授權單位 (CA) 的憑證,您可以將自訂憑證新增至容器中,系統會自動安裝這些憑證。
設定
使用磁碟區掛載
在執行容器時,掛載一個包含您憑證的目錄:
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
支援的憑證格式
容器支援以下憑證格式:
.crt檔案(PEM 或 DER 編碼).pem檔案(PEM 編碼)
使用憑證的 MCP 設定
使用自訂憑證時,您可以修改 MCP 設定以掛載憑證:
{
"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>"
}
}
}
代理伺服器
SonarQube MCP Server 透過標準 Java 代理伺服器系統屬性支援 HTTP 和 SOCKS5 代理伺服器。
設定
HTTP/HTTPS 代理伺服器
您可以使用 Java 系統屬性來設定代理伺服器設定。這些可以設定為環境變數或作為 JVM 引數傳遞。
常見的代理伺服器屬性:
| 屬性 | 說明 | 範例 |
|---|---|---|
http.proxyHost | HTTP 代理伺服器主機名稱 | proxy.example.com |
http.proxyPort | HTTP 代理伺服器連接埠 | 8080 |
https.proxyHost | HTTPS 代理伺服器主機名稱 | proxy.example.com |
https.proxyPort | HTTPS 代理伺服器連接埠 | 8443 |
http.nonProxyHosts | 繞過代理伺服器的主機(以管線符號分隔) | localhost|127.0.0.1|*.internal.com |
HTTP/HTTPS 代理伺服器驗證:
| 屬性 | 說明 | 範例 |
|---|---|---|
http.proxyUser | HTTP 代理伺服器使用者名稱 | myuser |
http.proxyPassword | HTTP 代理伺服器密碼 | mypassword |
https.proxyUser | HTTPS 代理伺服器使用者名稱 | myuser |
https.proxyPassword | HTTPS 代理伺服器密碼 | mypassword |
SOCKS5 代理伺服器
支援 SOCKS5 代理伺服器。
| 屬性 | 說明 | 預設值 | 範例 |
|---|---|---|---|
socksProxyHost | SOCKS5 代理伺服器主機名稱 | — | localhost |
socksProxyPort | SOCKS5 代理伺服器連接埠 | 1080 | 1080 |
java.net.socks.username | SOCKS5 使用者名稱(如果需要驗證) | — | myuser |
java.net.socks.password | SOCKS5 密碼(如果需要驗證) | — | mypassword |
工具
分析
-
analyze_code_snippet - 使用 SonarQube 分析器分析檔案內容,以識別程式碼品質和安全性問題。為了準確性,始終分析完整的檔案內容。可選擇性地將結果篩選到特定的程式碼片段。
用法:
- 已掛載工作區(建議):傳遞
filePath(專案相對路徑)——伺服器會直接讀取檔案,使檔案內容不進入代理程式的上下文視窗 - 未掛載工作區:傳遞完整的
fileContent以進行完整的檔案分析(回報所有問題) - 新增選用的
codeSnippet來篩選結果——只會回報該片段內的問題(自動偵測片段位置)
參數:
projectKey- SonarQube 專案金鑰 - 必要字串 (定義了SONARQUBE_PROJECT_KEY時則忽略)filePath- 要分析的檔案的專案相對路徑(例如src/main/java/MyClass.java)。當工作區掛載於/app/mcp-workspace時使用 - 字串fileContent- 完整的檔案內容,以字串形式提供。未掛載工作區時為必要項 - 字串codeSnippet- 用於篩選問題的程式碼片段(必須與 fileContent 中的內容相符) - 字串language- 程式碼的語言(例如 'java'、'python'、'js'、'ts'、'tsx'、'jsx') - 字串scope- 檔案的範圍:MAIN 或 TEST(預設:MAIN) - 字串
支援的語言: Java、Kotlin、Python、Ruby、Go、JavaScript(
js、jsx)、TypeScript(ts、tsx)、JSP、PHP、XML、HTML、CSS、CloudFormation、Kubernetes、Terraform、Azure Resource Manager、Ansible、Docker、機密偵測 - 已掛載工作區(建議):傳遞
當啟用與 SonarQube for IDE 的整合時:
-
analyze_file_list - 使用 SonarQube for IDE 分析目前工作目錄中的檔案。此工具會連接到正在執行的 SonarQube for IDE 執行個體,對檔案清單執行程式碼品質分析。
file_absolute_paths- 要分析的絕對檔案路徑清單 - 必要字串陣列
-
toggle_automatic_analysis - 啟用或停用 SonarQube for IDE 的自動分析。啟用時,SonarQube for IDE 會在工作目錄中的檔案被修改時自動分析它們。停用時,自動分析會關閉。
enabled- 啟用或停用自動分析 - 必要布林值
當為您的 SonarQube Cloud 組織啟用進階分析時:
需要將工作區掛載於
/app/mcp-workspace
- run_advanced_code_analysis - 在 SonarQube Cloud 上對單一檔案執行進階程式碼分析。組織會從 MCP 設定中推斷。
projectKey- 專案的金鑰 - 必要字串 (定義了SONARQUBE_PROJECT_KEY時則忽略)branchName- 用於擷取最新分析上下文的分支名稱 - 必要字串filePath- 要分析的檔案的專案相對路徑(例如src/main/java/MyClass.java)。 - 必要字串fileScope- 定義檔案來源的範圍:'MAIN' 或 'TEST'(預設:MAIN) - 字串
覆蓋率
-
search_files_by_coverage - 搜尋專案中的檔案,並依覆蓋率排序(遞增 - 最低覆蓋率優先)。此工具可協助找出需要改善測試覆蓋率的檔案。
projectKey- 要搜尋的專案金鑰 - 必要字串 (當SONARQUBE_PROJECT_KEY已定義時忽略)branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串maxCoverage- 最大覆蓋率閾值 (0-100)。僅回傳覆蓋率 <= 此值的檔案 - 數字pageIndex- 頁面索引(從 1 開始,預設:1) - 數字pageSize- 頁面大小(預設:100,最大:500) - 數字
-
get_file_coverage_details - 取得特定檔案的逐行覆蓋率資訊,包括哪些確切行未被覆蓋,以及哪些行有部分覆蓋的分支。此工具可協助精確找出需要新增測試覆蓋率的位置。在透過 search_files_by_coverage 找出低覆蓋率的檔案後使用。
key- 檔案金鑰(例如 my_project:src/foo/Bar.java) - 必要字串branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串from- 要分析的第一行(從 1 開始,預設:1) - 數字to- 要分析的最後一行(包含)。若未指定,則回傳所有行 - 數字
依賴項風險
注意:依賴項風險僅在連線至 SonarQube Server 2025.4 Enterprise 或更高版本,且已啟用 SonarQube Advanced Security 時可用。
- search_dependency_risks - 搜尋 SonarQube 專案的軟體組成分析問題(依賴項風險),並與出現在已分析專案、應用程式或組合中的發行版本配對。
projectKey- 專案金鑰 - 必要字串 (當SONARQUBE_PROJECT_KEY已定義時忽略)branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串pageIndex- 選用的頁面索引(從 1 開始,預設:1) - 整數pageSize- 選用的頁面大小。必須大於 0 且小於或等於 500(預設:100) - 整數
企業
注意:企業僅在連線至 SonarQube Cloud 時可用。
- list_enterprises - 列出您在 SonarQube Cloud 中有權存取的所有企業。使用此工具來探索可與其他工具搭配使用的企業 ID。
enterpriseKey- 選用的企業金鑰,用於篩選結果 - 字串
問題
-
change_sonar_issue_status - 將 SonarQube 問題的狀態變更為「接受」、「誤判」或「重新開啟」問題。
key- 問題金鑰 - 必要字串status- 新的問題狀態 - 必要列舉 {"accept", "falsepositive", "reopen"}
-
search_sonar_issues_in_projects - 搜尋我組織專案中的 SonarQube 問題。
projects- 選用的 Sonar 專案清單 - 字串陣列branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串severities- 選用的嚴重性篩選清單。可能的值:INFO、LOW、MEDIUM、HIGH、BLOCKER - 字串陣列impactSoftwareQualities- 選用的軟體品質篩選清單。可能的值:MAINTAINABILITY、RELIABILITY、SECURITY - 字串陣列issueStatuses- 選用的問題狀態篩選清單。可能的值:OPEN、CONFIRMED、FALSE_POSITIVE、ACCEPTED、FIXED、IN_SANDBOX - 字串陣列issueKey- 選用的問題金鑰,用於擷取特定問題 - 字串p- 選用的頁碼(預設:1) - 整數ps- 選用的頁面大小。必須大於 0 且小於或等於 500(預設:100) - 整數
安全熱點
-
search_security_hotspots - 搜尋 SonarQube 專案中的安全熱點。
projectKey- 專案或應用程式金鑰 - 必要字串 (當SONARQUBE_PROJECT_KEY已定義時忽略)hotspotKeys- 要擷取的特定安全熱點金鑰清單(以逗號分隔) - 字串陣列branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串files- 選用的檔案路徑篩選清單 - 字串陣列status- 選用的狀態篩選:TO_REVIEW、REVIEWED - 字串resolution- 選用的解決方案篩選:FIXED、SAFE、ACKNOWLEDGED - 字串sinceLeakPeriod- 篩選自洩漏期(新程式碼)以來建立的熱點 - 布林值onlyMine- 僅顯示指派給我的熱點 - 布林值p- 選用的頁碼(預設:1) - 整數ps- 選用的頁面大小。必須大於 0 且小於或等於 500(預設:100) - 整數
-
show_security_hotspot - 取得特定安全熱點的詳細資訊,包括規則詳情、程式碼上下文、流程和註解。
hotspotKey- 安全熱點金鑰 - 必要字串
-
change_security_hotspot_status - 透過變更安全熱點的狀態來進行審查。標記為 REVIEWED 時,必須指定解決方案(FIXED、SAFE 或 ACKNOWLEDGED)。
hotspotKey- 安全熱點金鑰 - 必要字串status- 新狀態 - 必要列舉 {"TO_REVIEW", "REVIEWED"}resolution- 狀態為 REVIEWED 時的解決方案 - 列舉 {"FIXED", "SAFE", "ACKNOWLEDGED"}comment- 選用的審查註解 - 字串
語言
- list_languages - 列出此 SonarQube 執行個體中支援的所有程式語言。
q- 選用的模式,用於比對語言金鑰/名稱 - 字串
度量
- get_component_measures - 取得元件(專案、目錄、檔案)的 SonarQube 度量。
projectKey- 專案金鑰 - 當SONARQUBE_PROJECT_KEY未設定時為必要字串branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串metricKeys- 選用的度量金鑰清單(例如 ncloc、complexity、violations、coverage) - 字串陣列pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串
指標
- search_metrics - 搜尋 SonarQube 指標。
p- 選用的頁碼(預設:1) - 整數ps- 選用的頁面大小。必須大於 0 且小於或等於 500(預設:100) - 整數
組合
-
list_portfolios - 列出 SonarQube 中可用的企業組合,並提供篩選和分頁選項。
對於 SonarQube Server:
q- 選用的搜尋查詢,用於依名稱或金鑰篩選組合 - 字串favorite- 若為 true,則僅回傳我的最愛組合 - 布林值pageIndex- 選用的頁碼(從 1 開始,預設:1) - 整數pageSize- 選用的頁面大小,最大 500(預設:100) - 整數
對於 SonarQube Cloud:
enterpriseId- 企業 uuid。僅在提供 'favorite' 參數且值為 true 時可省略 - 字串q- 選用的搜尋查詢,用於依名稱篩選組合 - 字串favorite- 若省略 'enterpriseId' 參數,則必須為 true。若為 true,則僅回傳登入使用者加入我的最愛的組合。當 'draft' 為 true 時不可為 true - 布林值draft- 若為 true,則僅回傳登入使用者建立的草稿。當 'favorite' 為 true 時不可為 true - 布林值pageIndex- 選用的要擷取的頁面索引(預設:1) - 整數pageSize- 選用的要擷取的頁面大小(預設:50) - 整數
專案
-
search_my_sonarqube_projects - 尋找 SonarQube 專案。回應會分頁。
page- 選用的頁碼 - 字串
-
list_branches - 列出專案的長期分支(例如 main、develop、master)。在 SonarQube Cloud 上僅回傳
LONG分支,在 SonarQube Server 上回傳BRANCH條目 — 名稱可安全用於其他工具的branch參數。對於拉取請求,請改用list_pull_requests。projectKey- 專案金鑰(例如 my_project) - 必要字串 (當SONARQUBE_PROJECT_KEY已定義時忽略)
-
list_pull_requests - 列出專案的所有拉取請求。使用此工具在分析其覆蓋率、問題或品質之前,先探索可用的拉取請求。回傳可與其他工具(例如 search_files_by_coverage、get_file_coverage_details)搭配使用的拉取請求金鑰/ID。對於長期分支,請改用
list_branches。projectKey- 專案金鑰(例如 my_project) - 必要字串 (當SONARQUBE_PROJECT_KEY已定義時忽略)
品質門檻
-
get_project_quality_gate_status - 取得 SonarQube 專案的品質門檻狀態。
analysisId- 選用的分析 ID - 字串branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串projectId- 選用的專案 ID - 字串projectKey- 選用的專案金鑰 - 字串pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串
-
list_quality_gates - 列出我的 SonarQube 中的所有品質門檻。
規則
- show_rule - 顯示 SonarQube 規則的詳細資訊。
key- 規則金鑰 - 必要字串
重複
-
search_duplicated_files - 搜尋 SonarQube 專案中有程式碼重複的檔案。預設會自動擷取所有頁面中的所有重複檔案(最多 10,000 個檔案)。僅回傳有重複的檔案。
projectKey- 專案金鑰 - 必要字串 (當SONARQUBE_PROJECT_KEY已定義時忽略)branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串pageSize- 選用的手動分頁每頁結果數(最大:500)。若未指定,則自動擷取所有重複檔案 - 整數pageIndex- 選用的手動分頁頁碼(從 1 開始)。若未指定,則自動擷取所有重複檔案 - 整數
-
get_duplications - 取得檔案的重複內容。需要檔案所屬專案的瀏覽權限。
key- 檔案金鑰 - 必要字串branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串
原始碼
-
get_raw_source - 從 SonarQube 取得原始碼的純文字內容。需要對檔案具備「查看原始碼」權限。
key- 檔案金鑰 - 必要字串branch- 選用的長期分支名稱(例如 main、develop)。使用list_branches來探索有效的名稱 - 字串pullRequest- 選用的拉取請求金鑰/ID。使用list_pull_requests來探索有效的金鑰 - 字串
-
get_scm_info - 取得 SonarQube 原始檔案的 SCM 資訊。需要對檔案的專案具備「查看原始碼」權限。
key- 檔案金鑰 - 必要字串commits_by_line- 若值為 false 則按 SCM 提交分組行,否則顯示每行的提交資訊 - 字串from- 要回傳的第一行。從 1 開始 - 數字to- 要回傳的最後一行(包含) - 數字
系統
注意:系統工具僅在連線至 SonarQube Server 時可用。
-
get_system_health - 取得 SonarQube Server 執行個體的健康狀態。回傳 GREEN(完全正常運作)、YELLOW(可用但需要注意)或 RED(無法運作)。
-
get_system_info - 取得 SonarQube Server 系統設定的詳細資訊,包括 JVM 狀態、資料庫、搜尋索引和設定。需要「管理」權限。
-
get_system_logs - 以純文字格式取得 SonarQube Server 系統日誌。需要系統管理權限。
name- 選用的日誌名稱。可能的值:access、app、ce、deprecation、es、web。預設值:app - 字串
-
ping_system - 對 SonarQube Server 系統進行 Ping 以檢查其是否存活。以純文字回傳 'pong'。
-
get_system_status - 取得 SonarQube Server 的狀態資訊。回傳狀態(STARTING、UP、DOWN、RESTARTING、DB_MIGRATION_NEEDED、DB_MIGRATION_RUNNING)、版本和 ID。
Webhooks
-
create_webhook - 為 SonarQube 組織或專案建立新的 Webhook。需要對指定專案具備「管理」權限,或具備全域「管理」權限。
name- Webhook 名稱 - 必要字串url- Webhook URL - 必要字串projectKey- 選用的專案金鑰,用於專案特定的 Webhook - 字串secret- 選用的 Webhook 密鑰,用於保護 Webhook 酬載 - 字串
-
list_webhooks - 列出 SonarQube 組織或專案的所有 Webhook。需要對指定專案具備「管理」權限,或具備全域「管理」權限。
projectKey- 選用的專案金鑰,用於列出專案特定的 Webhook - 字串
上下文增強
架構工具
-
search_by_signature_patterns - 使用正則表達式模式,按其宣告簽章尋找程式碼元素(類別、方法、介面等)。
include_code_regex_list- 用於比對簽章的正則表達式模式清單 - 必要字串陣列exclude_code_regex_list- 要從結果中排除的正則表達式模式清單 - 字串陣列include_glob- 檔案篩選 Glob 模式(例如*.java) - 字串exclude_glob- 檔案排除 Glob 模式 - 字串fields- 要包含在回應中的欄位,以逗號分隔的清單 - 字串limit- 要回傳的結果數量上限(預設值:10) - 整數regex_lists_operator- 如何組合多個模式:OR(預設)或AND- 字串
-
search_by_body_patterns - 使用正則表達式模式,按其實作主體尋找程式碼元素。適用於定位 API 或模式實際使用的位置。
include_code_regex_list- 要在程式碼主體中比對的正則表達式模式清單 - 必要字串陣列exclude_code_regex_list- 要從結果中排除的正則表達式模式清單 - 字串陣列include_glob- 檔案篩選 Glob 模式 - 字串exclude_glob- 檔案排除 Glob 模式 - 字串fields- 要包含在回應中的欄位,以逗號分隔的清單 - 字串limit- 要回傳的結果數量上限(預設值:10) - 整數regex_lists_operator- 如何組合多個模式:OR(預設)或AND- 字串
-
get_upstream_call_flow - 追蹤哪些函式呼叫了給定的函式。適用於尋找所有呼叫者和進入點,並了解若簽章變更會破壞什麼。
fqn- 函式的完整限定名稱 - 必要字串depth- 呼叫鏈深度(0=僅函式本身,1=直接呼叫者,依此類推) - 整數fields- 要包含在回應中的欄位,以逗號分隔的清單 - 字串
-
get_downstream_call_flow - 追蹤給定函式呼叫了哪些函式。適用於影響分析和了解執行流程。
fqn- 函式的完整限定名稱 - 必要字串depth- 呼叫鏈深度(0=僅函式本身,1=直接被呼叫者,依此類推) - 整數fields- 要包含在回應中的欄位,以逗號分隔的清單 - 字串
-
get_source_code - 透過程式碼元素的完整限定名稱,取得其完整的原始碼(簽章和主體)。
fqn- 元素的完整限定名稱 - 必要字串fields- 要包含在回應中的欄位,以逗號分隔的清單 - 字串
-
get_type_hierarchy - 取得類別結構(類別、介面、列舉、記錄、例外、結構)的完整繼承階層。對於了解繼承樹和重構至關重要。
fqn- 類別結構的完整限定名稱 - 必要字串fields- 要包含在回應中的欄位,以逗號分隔的清單 - 字串
-
get_references - 取得類別或模組的直接傳入和傳出程式碼參照。僅回傳直接(非傳遞性)參照。
fqn- 類別或模組的完整限定名稱 - 必要字串fields- 要包含在回應中的欄位,以逗號分隔的清單 - 字串
-
get_current_architecture - 取得按路徑前綴和深度篩選的階層式架構圖。適用於探索模組結構和高階相依性。
depth- 階層深度(0=僅根節點,1=根節點 + 子節點,依此類推) - 必要整數path_prefix- 選用的路徑前綴,用於篩選節點(例如com.example.service) - 字串ecosystem- 選用的生態系統篩選條件(java、cs、py、js、ts) - 字串
-
get_intended_architecture - 取得使用者定義的架構約束,指定哪些模組被允許相依於其他模組。
指南工具
- get_guidelines - 根據 SonarQube 專案問題、目錄類別或兩者的組合來取得程式碼指南。
mode- 指南擷取模式:project_based、category_based或combined- 必要字串categories- 類別名稱清單(category_based和combined模式所需) - 字串陣列languages- 以 SonarQube 儲存庫金鑰格式表示的目標語言清單(提供categories時為必要) - 字串陣列file_paths- 選用的檔案路徑清單,用於篩選指南 - 字串陣列
第三方相依性工具
- check_dependency - 在新增或更新第三方相依性之前,檢查其是否有安全漏洞、供應鏈惡意軟體和授權合規性問題。
purl- 包含版本的套件 URL (purl),依據 purl-spec。格式:pkg:<type>/<namespace>/<name>@<version>(例如pkg:npm/[email protected]、pkg:maven/org.apache.logging.log4j/[email protected]、pkg:pypi/[email protected]) - 必要字串
上下文增強環境變數
| 變數 | 說明 | 必要 | 預設值 |
|---|---|---|---|
SONARQUBE_URL | SonarQube Cloud URL | 是 | https://sonarcloud.io |
SONARQUBE_TOKEN | 驗證權杖 | 是 | 無 |
SONARQUBE_ORG | SonarQube Cloud 上的組織金鑰 | 是 | 無 |
SONARQUBE_PROJECT_KEY | SonarQube Cloud 上的專案金鑰 | 是 | 無 |
SONAR_SQ_BRANCH | 明確的 SonarQube 分支覆寫 * | 否 | 無 |
SONARQUBE_DEBUG_ENABLED | 啟用除錯日誌記錄(用於疑難排解) | 否 | False |
SONAR_LOG_LEVEL | 日誌記錄詳細程度(TRACE、DEBUG、INFO、WARNING、ERROR) | 否 | INFO |
- 在不使用 git 時,或當 git 分支名稱與 SonarQube 中的分支名稱不符時提供。
專案特定設定(建議)
首先,使用您專案的有效個人存取權杖 (PAT) 匯出 SONARQUBE_TOKEN 環境變數。
# macOS/Linux (Bash/Zsh)
export SONARQUBE_TOKEN="{<YourUserToken>}"
然後,掛載專案工作區,讓上下文增強伺服器可以直接存取您的原始檔:
{
"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"
}
}
}
}
重要:在專案範圍的設定中,請勿將 SONARQUBE_TOKEN 放在 env 區塊中。將其作為環境變數匯出(export SONARQUBE_TOKEN=...)。Docker 會透過 -e SONARQUBE_TOKEN 將其轉發到容器內。
代理式就緒度
注意:代理式就緒度工具僅在 SonarQube Cloud 上可用,且需要為您的組織啟用該功能。
-
start_agentic_readiness_assessment - 啟動專案的代理式就緒度評估。立即回傳狀態
PENDING和一個assessmentId。使用get_agentic_readiness_assessment輪詢結果。projectKey- 專案金鑰 - 必要字串 (定義了SONARQUBE_PROJECT_KEY時則忽略)branch- 要評估的分支。省略則使用專案的預設分支 - 字串
-
get_agentic_readiness_assessment - 擷取評估結果。使用相同的
assessmentId重新呼叫,直到狀態為COMPLETED、FAILED或INTERRUPTED。完成後,會回傳整體等級以及每個支柱的細目,包含建議的行動和證據。assessmentId- 由start_agentic_readiness_assessment回傳的評估 ID - 必要字串
-
list_agentic_readiness_assessments - 列出專案的所有評估,最新的在前。使用
get_agentic_readiness_assessment取得完整的支柱層級結果。projectKey- 要列出評估的專案金鑰 - 必要字串 (定義了SONARQUBE_PROJECT_KEY時則忽略)branch- 按分支名稱篩選評估。省略則列出所有分支的評估 - 字串pageIndex- 以 1 為起始的頁面索引(預設值:1) - 數字pageSize- 每頁的項目數,上限 100(預設值:50) - 數字
提示範例
設定好 SonarQube MCP Server 後,以下是一些常見實際情境的提示範例:
修復失敗的品質門檻
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?
發佈前與合併前檢查
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?
提升程式碼品質
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?
理解與修復問題
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?
安全性與依賴管理
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.
程式碼審查協助
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.
專案健康監控
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?
團隊協作
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?
建置
建議使用 sonarsource/sonarqube-mcp 容器映像檔。
若要在沒有 Docker 的情況下以獨立 JAR 執行伺服器,請從 SonarSource 二進位檔案儲存庫 下載預先建置的發行版本。每個發佈的版本都會以 sonarqube-mcp-server-<version>.jar 的形式發佈於此(例如 sonarqube-mcp-server-1.19.0.2785.jar)。
從 JAR 執行
從二進位檔案儲存庫下載您需要的 JAR 版本,然後設定您的 MCP 用戶端以 Java 21 或更新版本執行:
- 若要連線至 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>"
}
}
}
- 若要連線至 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>"
}
}
}
從原始碼建置
SonarQube MCP Server 需要 Java Development Kit (JDK) 21 或更新版本才能建置。
執行以下 Gradle 指令來清理專案並建置應用程式:
./gradlew clean build -x test
JAR 檔案將會建立在 build/libs/ 中。
新增或更新依賴項目後,請重新產生鎖定檔案:
./gradlew :dependencies --write-locks
./gradlew :its:dependencies --write-locks
使用上述的從 JAR 執行設定,將 <path_to_sonarqube_mcp_server_jar> 指向 build/libs/ 中的 JAR。
疑難排解
應用程式記錄預設會寫入 STORAGE_PATH/logs/mcp.log 檔案。若要完全停用檔案記錄,請設定 SONARQUBE_LOG_TO_FILE_DISABLED=true。
常見問題
「功能無法運作」或「缺少工具/功能」
您可能正在執行過時的 Docker 映像檔。Docker 會在本機快取映像檔,因此您不會自動收到更新。
解決方案: 更新至最新版本:
docker pull sonarsource/sonarqube-mcp
提取最新映像檔後,請重新啟動您的 MCP 用戶端以使用更新後的版本。
您可以選擇性地將 --pull=always 旗標新增至您的 docker run 指令,以便總是檢查並提取最新版本:
docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_ORG sonarsource/sonarqube-mcp
「我想鎖定特定版本」
瀏覽 sonarsource/sonarqube-mcp 上的可用標籤,並參考您想要的版本:
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
在您的 MCP 用戶端設定中,使用 sonarsource/sonarqube-mcp:<version> 取代 sonarsource/sonarqube-mcp,並移除 --pull=always,這樣 Docker 就不會默默地升級映像檔。
資料與遙測
此伺服器會收集匿名的使用資料並傳送給 SonarSource,以協助改善產品。我們不會收集任何原始程式碼或 IP 位址,且 SonarSource 不會與任何其他人分享這些資料。可以透過以下系統屬性或環境變數停用遙測收集:TELEMETRY_DISABLED=true。點選此處查看所收集資料的範例。
授權
Copyright 2025 SonarSource.
依據 SONAR Source-Available License v1.0 授權。在遵守本文件的情況下使用 SonarQube MCP Server 屬於非競爭性目的,因此 SSAL 允許此使用方式。
您透過 MCP 使用 SonarQube 的行為,受 SonarQube Cloud 服務條款 或 SonarQube Server 條款與條件 的約束,包括僅將結果資料用於您的內部軟體開發目的。