SonarQube

官方

提供與 SonarQube Server 或 Cloud 的無縫整合,並能在代理程式上下文中直接分析程式碼片段

你可以用 SonarQube MCP 做什麼?

  • 分析程式碼片段 — 請您的助理透過 analyze_code_snippet 對片段或檔案執行本機程式碼分析,並可選擇掛載工作區以避免上下文過於龐大。
  • 搜尋與管理問題 — 讓助理尋找、檢視及更新 SonarQube 問題,包括在非唯讀模式下變更其狀態。
  • 檢查品質門檻與度量 — 查詢您 SonarQube 專案中的品質門檻狀態、專案指標、覆蓋率及相依性風險。
  • 檢視安全熱點 — 讓助理搜尋並逐步檢視程式碼庫中被標記的安全熱點。
  • 瀏覽專案與規則 — 使用助理直接從 SonarQube 探索專案、列出支援的語言,並查詢編碼規則。

文件

SonarQube MCP 伺服器

Build Quality Gate Status

SonarQube MCP 伺服器是一個模型上下文協定(MCP)伺服器,可與 SonarQube Server 或 Cloud 無縫整合,用於程式碼品質與安全性。 它也支援直接在代理程式上下文中分析程式碼片段。

快速設定

安全最佳實務

🔒 重要:您的 SonarQube 權杖是敏感憑證。請遵循以下安全實務:

使用 CLI 指令時:

  • 避免在命令列參數中硬編碼權杖 – 它們會被儲存在 shell 歷史記錄中
  • 使用環境變數 – 在執行指令前先將權杖設定於環境變數中

使用設定檔時:

  • 絕不將權杖提交到版本控制
  • 盡可能在設定檔中使用環境變數替換

🚀 產生您的設定

最快的入門方式是使用 SonarQube MCP Server 設定產生器 – 這是一個互動式工具,可為您偏好的 AI 代理程式用戶端產生可直接使用的設定。

手動設定

如果您偏好自行設定,最簡單的方法是使用我們的容器映像檔 sonarsource/sonarqube-mcp。使用 sonarsource/sonarqube-mcp 以獲得自動更新(搭配 --pull=always),或固定到某個版本標籤(例如 sonarsource/sonarqube-mcp:1.19.0.2785)以實現可重現的部署。如果您想在本地建置,請閱讀下方說明。

注意: 雖然以下範例使用 docker,任何相容 OCI 的容器執行環境皆可使用(例如 Podman、nerdctl)。只需將 docker 替換為您偏好的工具即可。

Antigravity

SonarQube MCP Server 可在 Antigravity MCP Store 中取得。請依照以下指示操作:

  1. 開啟 Agent Side Panel
  2. 點擊右上角的三個點(...),然後選擇 MCP Servers
  3. 搜尋 SonarQube 並選擇 Install
  4. 提供所需的 SonarQube 使用者權杖。如果您要連線到 SonarQube Cloud,也可以提供組織金鑰;如果要連線到 SonarQube Server,則提供 SonarQube URL。

若使用 SonarQube Cloud US,請將 URL 設定為 https://sonarqube.us。

或者,您可以透過 mcp_config.json 手動設定伺服器:

  • 若要連線到 SonarQube Cloud:

在 Agent Side Panel 中,點擊三個點(...)-> 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:

Install for SonarQube Cloud

若使用 SonarQube Cloud US,請在安裝後於 MCP 設定的 env 區段中手動新增 "SONARQUBE_URL": "https://sonarqube.us"。

  • 若要連線到 SonarQube Server:

Install for 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,請在 Arguments 中新增 -e, SONARQUBE_URL,並在 Environment Variables 中新增 SONARQUBE_URL=https://sonarqube.us。

  • 若要連線到 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 coding agent

GitHub Copilot coding agent 可以直接在您的 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 中的安裝流程。

Install for SonarQube Cloud

若使用 SonarQube Cloud US,請在安裝後於 MCP 設定的 env 區段中手動新增 "SONARQUBE_URL": "https://sonarqube.us"。

Install for SonarQube Server

Windsurf

SonarQube MCP Server 可作為 Windsurf 外掛程式使用。請依照以下指示操作:

  1. 開啟 Windsurf Settings > Cascade > MCP Servers,然後選擇 Open MCP Marketplace
  2. 在 Cascade MCP Marketplace 中搜尋 sonarqube
  3. 選擇 SonarQube MCP Server 並選擇 Install
  4. 新增所需的 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 Server 可以與 SonarQube for IDE 整合,進一步增強您的開發工作流程,直接在您的 IDE 中提供更好的程式碼分析與洞察。

設定

使用 SonarQube for IDE 時,應將 SONARQUBE_IDE_PORT 環境變數設定為正確的連接埠號碼。SonarQube for VS Code 包含 Quick Install 按鈕,可自動設定正確的連接埠設定。

例如,使用 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 Server 將在此儲存其檔案(例如用於建立、更新和持久化),使用容器映像檔時會自動提供此變數
SONARQUBE_PROJECT_KEY選用的預設專案金鑰。設定後,所有需要專案金鑰的工具都會自動使用此值 — projectKey 參數會從其結構描述中完全移除。在處理單一專案時非常有用。
SONARQUBE_IDE_PORT選用的連接埠號碼(介於 64120 和 64130 之間),用於將 SonarQube MCP Server 與 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、ide、issues、projects、quality-gates、rules、duplications、measures、security-hotspots、dependency-risks、coverage、cag)。注意: projects 工具集始終啟用,因為它需要為其他操作尋找專案金鑰。Vortex 上下文工具(舊名稱:Context Augmentation/CAG)和 Vortex 分析工具(舊名稱:Advanced Analysis/A3S)僅在 stdio 模式下可用,並共用單一的組織權限——組織必須同時獲得兩者的授權才能使用任一者。在 SonarQube Server 上,當 CAG 和 A3S 中樞都已授權時,stdio 會列出 Vortex 上下文和 run_advanced_code_analysis。建議使用統一的 vortex 工具集金鑰。已棄用的 cag 和 analysis 金鑰仍可運作;當它們在沒有 vortex 的情況下使用時,會發出啟動警告和伺服器說明中的棄用註記。在 Streamable HTTP 模式下,用戶端可以傳送 SONARQUBE_TOOLSETS HTTP 標頭以進一步縮小每次請求的範圍,但無法啟用超出伺服器啟動時所設定的工具集(請參閱下方的 Streamable HTTP 傳輸)。
SONARQUBE_READ_ONLY設定為 true 時,啟用唯讀模式,該模式會停用所有寫入操作(例如變更問題狀態)。此篩選器與 SONARQUBE_TOOLSETS 累加(若兩者皆設定)。預設值:false。在 Streamable HTTP 模式下,用戶端可以傳送 SONARQUBE_READ_ONLY HTTP 標頭以進一步將個別請求限制為唯讀,但無法解除伺服器層級的唯讀限制(請參閱下方的 Streamable HTTP 傳輸)。
可用工具集
工具集金鑰描述
分析analysis程式碼分析工具(透過 analyze_code_snippet 進行本地分析,已棄用,建議改用 analyze_file_list/Vortex 分析)
IDEideSonarQube for IDE 橋接工具(檔案分析、自動分析切換)——目前也包含在 analysis 中
問題issues搜尋和管理 SonarQube 問題
安全熱點security-hotspots搜尋和檢閱安全熱點
專案projects瀏覽和搜尋 SonarQube 專案
品質閘門quality-gates存取品質閘門及其狀態
規則rules瀏覽和搜尋 SonarQube 規則
原始碼sources存取原始碼和 SCM 資訊
重複duplications跨專案尋找程式碼重複
度量measures擷取指標和度量(包含 measures 和 metrics 工具)
語言languages列出支援的程式語言
投資組合portfolios管理投資組合和企業(Cloud 和 Server)
系統system系統管理工具(僅限 Server)
Webhookswebhooks管理 Webhooks
依賴風險dependency-risks分析依賴風險和安全問題(SCA)
覆蓋率coverage測試覆蓋率分析和改善工具
Vortex 上下文cagVortex 上下文工具——僅限 stdio。已棄用,建議改用 vortex(舊名稱:Context Augmentation/CAG)
Vortexvortex統一的、建議使用的工具集,以單一名稱同時呈現 Vortex 上下文和 Vortex 分析工具(僅限 stdio;Cloud 需要組合組織權限;Server 需要兩個中樞都已授權)
代理就緒度agentic-readinessAgentic Readiness 評估工具(SonarQube Cloud,需要組織權限)

範例

啟用分析、問題和品質閘門工具集(使用 Docker 搭配 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

注意:projects 工具集始終自動啟用,因此您不需要將其包含在 SONARQUBE_TOOLSETS 中。

啟用唯讀模式(使用 Docker 搭配 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

若要啟用完整功能,必須在啟動伺服器前設定以下環境變數:

環境變數描述必要
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 使用者 權杖是
SONARQUBE_URL您的 SonarQube Server URL是

版本需求: 需要 SonarQube Server 2025.1 (SQS) 或 25.1 (SonarQube Community Build) 或更新版本。啟動時,MCP 伺服器會讀取所連接實例的版本,若版本過舊則會退出並顯示錯誤(例如,不支援舊版 9.x/10.x Server 版本及 Community Build 24.x)。SonarQube Cloud 不受此檢查限制。

⚠️ 連線至 SonarQube Server 需要使用 USER 類型的權杖,若使用專案權杖或全域權杖將無法正常運作。

💡 設定提示(stdio 模式):SONARQUBE_ORG 是否存在決定您連線的是 SonarQube Cloud 還是 Server。若已設定 SONARQUBE_ORG,則使用 SonarQube Cloud;否則使用 SonarQube Server。

傳輸模式

MCP 規範定義了兩種傳輸機制:Stdio 和 Streamable HTTP。SonarQube MCP 伺服器兩者皆支援:

MCP 傳輸方式伺服器模式典型用途
Stdio預設(無 SONARQUBE_TRANSPORT)將伺服器作為子程序啟動的本機 MCP 用戶端(Cursor、Claude Code、VS Code 等)
Streamable HTTPSONARQUBE_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 標頭。

端點方法說明範例回應
/healthGET存活探測。伺服器開始接受請求後,回傳 200 OK 且內文為空。(空內文)
/infoGET以 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>"
    }
  }
}

注意: 不是使用容器而是從 JAR 執行伺服器嗎?上述磁碟區掛載會將憑證安裝到容器的作業系統信任庫中,伺服器也會讀取該信任庫。如果您無法使用作業系統信任庫——特別是在 Windows 上,系統不會查詢該信任庫——請將 JVM 指向包含 CA 憑證的 Java 信任庫:-Djavax.net.ssl.trustStore=/path/to/truststore.p12 -Djavax.net.ssl.trustStoreType=PKCS12 -Djavax.net.ssl.trustStorePassword=<passphrase>。它會附加在預設受信任憑證之上。

Proxy

SonarQube MCP 伺服器透過標準 Java proxy 系統屬性支援 HTTP 和 SOCKS5 proxy。

設定

HTTP/HTTPS Proxy

您可以使用 Java 系統屬性設定 proxy。這些屬性可以設定為環境變數或作為 JVM 引數傳遞。

常見 Proxy 屬性:

屬性說明範例
http.proxyHostHTTP proxy 主機名稱proxy.example.com
http.proxyPortHTTP proxy 連接埠8080
https.proxyHostHTTPS proxy 主機名稱proxy.example.com
https.proxyPortHTTPS proxy 連接埠8443
http.nonProxyHosts繞過 proxy 的主機(以管道符號分隔)localhost|127.0.0.1|*.internal.com

HTTP/HTTPS Proxy 驗證:

屬性說明範例
http.proxyUserHTTP proxy 使用者名稱myuser
http.proxyPasswordHTTP proxy 密碼mypassword
https.proxyUserHTTPS proxy 使用者名稱myuser
https.proxyPasswordHTTPS proxy 密碼mypassword

SOCKS5 Proxy

支援 SOCKS5 proxy。

屬性說明預設值範例
socksProxyHostSOCKS5 代理主機名稱—localhost
socksProxyPortSOCKS5 代理連接埠10801080
java.net.socks.usernameSOCKS5 使用者名稱(如需驗證)—myuser
java.net.socks.passwordSOCKS5 密碼(如需驗證)—mypassword

用戶端憑證(雙向 TLS)

如果您的 SonarQube Server 要求在 TLS 交握期間用戶端出示憑證(雙向 TLS),您可以掛載 PKCS12 金鑰庫至容器中,並透過 JAVA_OPTS 傳遞其位置。

組態

使用 PKCS12 金鑰庫

將您的 .p12 或 .pfx 檔案掛載至容器中,並使用金鑰庫屬性設定 JAVA_OPTS 環境變數:

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

注意: 憑證檔案必須可被容器程序讀取。如有需要,請檢查並修正權限:

ls -la /path/to/client.p12       # 查看是否為 -rw-r--r-- (644) 或更寬鬆的權限
chmod 644 /path/to/client.p12    # 授予容器使用者讀取權限

如果金鑰庫沒有密碼短語,請省略 -Djavax.net.ssl.keyStorePassword。請注意,此處使用的密碼短語可能會透過 docker inspect 或程序列表被看到。

使用用戶端憑證的 MCP 組態

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

使用 PKCS12 金鑰庫搭配獨立 JAR

當從 JAR 執行伺服器時,請在 -jar 之前以 JVM 引數傳遞金鑰庫屬性:

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>

如果金鑰庫沒有密碼短語,請省略 -Djavax.net.ssl.keyStorePassword。

使用用戶端憑證的 MCP 組態(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>"
    }
  }
}

注意: PEM 憑證和金鑰檔案(分開的 .crt/.key 檔案)必須先轉換為 PKCS12 格式。請使用 openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 進行轉換。

工具

分析

  • analyze_code_snippet - 使用 SonarQube 分析器分析檔案內容,以識別程式碼品質和安全性問題。為確保準確性,一律分析完整的檔案內容。可選擇性地將結果篩選至特定程式碼片段。

    已棄用: analyze_code_snippet 將在未來版本中移除。請連接 SonarQube for IDE 以使用 analyze_file_list,或為您的組織啟用 Vortex 分析以使用 run_advanced_code_analysis(請參閱下方說明)。

    用法:

    • 已掛載工作區(建議):傳遞 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 整合時: (這兩個工具同時標記於 analysis 和 ide 工具集下)

  • analyze_file_list - 使用 SonarQube for IDE 分析目前工作目錄中的檔案。此工具會連接至執行中的 SonarQube for IDE 執行個體,以對檔案清單執行程式碼品質分析。

    • file_absolute_paths - 要分析的絕對檔案路徑清單 - 必填字串陣列
  • toggle_automatic_analysis - 啟用或停用 SonarQube for IDE 自動分析。啟用時,SonarQube for IDE 會在檔案於工作目錄中修改時自動分析。停用時,自動分析會關閉。

    • enabled - 啟用或停用自動分析 - 必填布林值

在 SonarQube Server 上,當 CAG 和 A3S 中樞均已授權時,stdio 會列出 Vortex 上下文工具和 run_advanced_code_analysis。

當啟用 Vortex 分析時:

需要將工作區掛載於 /app/mcp-workspace

  • run_advanced_code_analysis - 對單一檔案執行 Vortex 分析。組織會從 MCP 組態推斷(SonarQube Server 使用 nil UUID 佔位符)。
    • projectKey - 專案金鑰 - 必填字串 (當定義 SONARQUBE_PROJECT_KEY 時忽略)
    • branch - 用於擷取最新分析上下文的分支名稱 - 必填字串
    • filePath - 要分析之檔案的專案相對路徑(例如 src/main/java/MyClass.java)。 - 必填字串
    • fileScope - 定義檔案來源範圍:'MAIN' 或 'TEST'(預設:MAIN) - 字串

覆蓋率

  • search_files_by_coverage - 依覆蓋率排序搜尋專案中的檔案(遞增 — 覆蓋率最差的優先)。此工具可協助識別需要改善測試覆蓋率的檔案。

    • projectKey - 要搜尋的專案金鑰 - 必填字串 (當定義 SONARQUBE_PROJECT_KEY 時忽略)
    • branch - 可選的分支分析分支名稱。使用 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 - 可選的分支分析分支名稱。使用 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 - 可選的分支分析分支名稱。使用 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 問題的狀態變更為 "accept"、"falsepositive" 或 "reopen"。

    • key - 問題金鑰 - 必填字串
    • status - 新的問題狀態 - 必填列舉 {"accept", "falsepositive", "reopen"}
    • comment - 可選的註解,說明狀態變更原因 - 字串
  • search_sonar_issues_in_projects - 搜尋我組織專案中的 SonarQube 問題。

    • projectKeys - 可選的 SonarQube 專案金鑰清單 - 字串陣列
    • branch - 可選的分支分析分支名稱。使用 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 - 字串陣列
    • tags - 可選的問題標籤篩選清單。標籤為小寫 - 字串陣列
    • inNewCodePeriod - 僅回傳新程式碼期間的問題。需要在 projectKeys 和 files 之間恰好有一個條目 - 布林值
    • issueKey - 可選的問題金鑰以擷取特定問題 - 字串
    • pageIndex - 可選的從 1 開始的頁面索引(預設:1) - 整數
    • pageSize - 可選的頁面大小。必須大於 0 且小於或等於 500(預設:100) - 整數

安全性熱點

  • search_security_hotspots - 搜尋 SonarQube 專案中的安全性熱點。

    • projectKey - 專案或應用程式金鑰 - 必填字串 (當定義 SONARQUBE_PROJECT_KEY 時忽略)
    • hotspotKeys - 要擷取的特定安全性熱點金鑰清單(以逗號分隔) - 字串陣列
    • branch - 可選的分支分析分支名稱。使用 list_branches 探索有效名稱 - 字串
    • pullRequest - 可選的提取請求金鑰/ID。使用 list_pull_requests 探索有效金鑰 - 字串
    • files - 可選的檔案路徑篩選清單 - 字串陣列
    • status - 可選的狀態篩選:TO_REVIEW、REVIEWED - 字串
    • resolution - 可選的解決方案篩選:FIXED、SAFE、ACKNOWLEDGED - 字串
    • sinceLeakPeriod - 篩選自洩漏期間(新程式碼)以來建立的熱點 - 布林值
    • onlyMine - 僅顯示指派給我的熱點 - 布林值
    • pageIndex - 可選的從 1 開始的頁面索引(預設:1) - 整數
    • pageSize - 可選的頁面大小。必須大於 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 - 可選的分支名稱,用於基於分支的分析。使用 list_branches 來探索有效的名稱 - 字串
    • metricKeys - 可選的度量金鑰列表(例如 ncloc、complexity、violations、coverage) - 字串[]
    • pullRequest - 可選的拉取請求金鑰/ID。使用 list_pull_requests 來探索有效的金鑰 - 字串

指標

  • search_metrics - 搜尋 SonarQube 指標。
    • pageIndex - 可選的以 1 為基礎的頁面索引(預設:1) - 整數
    • pageSize - 可選的頁面大小。必須大於 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 專案。回應會分頁。

    • pageIndex - 可選的以 1 為基礎的頁面索引(預設:1) - 整數
    • pageSize - 可選的頁面大小。必須大於 0 且小於或等於 500(預設:500) - 整數
    • q - 可選的搜尋查詢,用於依名稱(部分比對)或金鑰(精確比對)篩選專案 - 字串
  • list_branches - 列出專案中已分析的分支。

    • SonarQube Cloud:回傳長效(LONG)和短效(SHORT)分支,並帶有 type 和 mergeBranch 欄位。可選的 branchTypes 篩選:ALL(預設)、LONG 或 SHORT。
    • SonarQube Server:回傳所有已分析的分支(名稱、品質門檻、分析日期)。沒有 type、mergeBranch 或 branchTypes 篩選。
    • 使用回傳的分支名稱作為其他工具的 branch 參數。對於拉取請求分析,請改用 list_pull_requests。
    • projectKey - 專案金鑰(例如 my_project) - 必填字串 (當定義了 SONARQUBE_PROJECT_KEY 時忽略)
    • branchTypes - (僅限 SonarQube Cloud) 可選的篩選:ALL(預設)、LONG 或 SHORT - 列舉 {"ALL", "LONG", "SHORT"}_
  • list_pull_requests - 列出專案的所有拉取請求。使用此工具來探索用於 PR 裝飾分析(覆蓋率、問題、品質門檻)的拉取請求。回傳可與其他工具一起使用的拉取請求金鑰/ID。對於沒有拉取請求的基於分支的分析,請改用 list_branches。

    • projectKey - 專案金鑰(例如 my_project) - 必填字串 (當定義了 SONARQUBE_PROJECT_KEY 時忽略)

品質門檻

  • get_project_quality_gate_status - 取得 SonarQube 專案的品質門檻狀態。

    • analysisId - 可選的分析 ID - 字串
    • branch - 可選的分支名稱,用於基於分支的分析。使用 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 - 可選的分支名稱,用於基於分支的分析。使用 list_branches 來探索有效的名稱 - 字串
    • pullRequest - 可選的拉取請求金鑰/ID。使用 list_pull_requests 來探索有效的金鑰 - 字串
    • pageSize - 可選的每頁結果數,用於手動分頁(最大:500)。若未指定,則自動取得所有重複檔案 - 整數
    • pageIndex - 可選的頁碼,用於手動分頁(從 1 開始)。若未指定,則自動取得所有重複檔案 - 整數
  • get_duplications - 取得檔案的重複。需要檔案所在專案的瀏覽權限。

    • key - 檔案金鑰 - 必填字串
    • branch - 可選的分支名稱,用於基於分支的分析。使用 list_branches 來探索有效的名稱 - 字串
    • pullRequest - 可選的拉取請求金鑰/ID。使用 list_pull_requests 來探索有效的金鑰 - 字串

原始碼

  • get_raw_source - 從 SonarQube 取得原始文字格式的原始碼。需要檔案上的「檢視原始碼」權限。

    • key - 檔案金鑰 - 必填字串
    • branch - 可選的分支名稱,用於基於分支的分析。使用 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 - Ping SonarQube Server 系統以檢查其是否存活。以純文字回傳 'pong'。

  • get_system_status - 取得 SonarQube Server 的狀態資訊。回傳狀態(STARTING、UP、DOWN、RESTARTING、DB_MIGRATION_NEEDED、DB_MIGRATION_RUNNING)、版本和 ID。

Webhook

  • 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 模式需要) - String[]
    • languages - 以 SonarQube 儲存庫金鑰格式表示的目標語言清單(提供 categories 時需要) - String[]
    • file_paths - 可選的檔案路徑清單,用於篩選準則 - String[]
第三方相依性工具
  • check_dependency - 在新增或更新第三方相依性之前,檢查其安全性漏洞、供應鏈惡意軟體和授權合規性。
    • purl - 包含版本的套件 URL(purl),依據 purl-spec。格式:pkg:<type>/<namespace>/<name>@<version>(例如 pkg:npm/lodash@4.17.21、pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1、pkg:pypi/django@3.2.0) - 必填字串
情境增強環境變數
變數說明必填預設值
SONARQUBE_URLSonarQube Cloud URL是https://sonarcloud.io
SONARQUBE_TOKEN驗證權杖是無
SONARQUBE_ORGSonarQube Cloud 上的組織金鑰是無
SONARQUBE_PROJECT_KEYSonarQube 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 伺服器後,以下是一些常見真實世界情境的範例提示:

修正失敗的品質閘門
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 伺服器需要 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。

常見問題

「不支援 SonarQube 伺服器版本」

MCP 伺服器會在啟動期間檢查所連線的 SonarQube Server 版本。如果實例早於 2025.1 (SQS) 或 25.1 (SQCB),啟動會失敗並顯示:

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

解決方案: 將 SonarQube Server 升級至支援的版本。此檢查僅在連線到 SonarQube Server(SONARQUBE_URL 不含 SONARQUBE_ORG)時適用,不適用於 SonarQube Cloud。

「功能無法運作」或「缺少工具/功能」

您可能正在執行過時的 Docker 映像。Docker 會在本機快取映像,因此您不會自動收到更新。

解決方案: 更新至最新版本:

docker pull sonarsource/sonarqube-mcp

拉取最新映像後,重新啟動您的 MCP 用戶端以使用更新版本。

可選擇性地在 docker run 命令中新增 --pull=always 旗標,以始終檢查並拉取最新版本:

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。按一下 此處 查看所收集資料的範例。

授權

版權所有 2025 SonarSource。

依據 SONAR Source-Available License v1.0 授權。依照本文件使用 SonarQube MCP 伺服器屬於非競爭目的,因此根據 SSAL 允許。

您透過 MCP 使用 SonarQube 的行為受 SonarQube Cloud 服務條款 或 SonarQube Server 條款與條件 規範,包括僅將結果資料用於您的內部軟體開發目的。