SonarQube
официальныйОбеспечивает бесшовную интеграцию с SonarQube Server или Cloud и позволяет анализировать фрагменты кода непосредственно в контексте агента
Что можно делать с SonarQube MCP?
- Подключение к SonarQube Cloud или Server — Настройте контейнер
sonarsource/sonarqube-mcp, указав токен, ключ организации или URL сервера, чтобы связать своего ассистента с SonarQube. - Анализ фрагментов кода — Попросите ассистента проанализировать фрагмент кода или файл, подключив рабочую область, чтобы он мог читать файлы непосредственно с диска.
- Поиск проблем и управление ими — Находите проблемы SonarQube и обновляйте их с помощью набора инструментов
issues. - Проверка уязвимых мест — Ищите и проверяйте уязвимые места с помощью набора инструментов
security-hotspots. - Просмотр проектов и гейтов качества — Ищите ключи проектов, гейты качества, правила, метрики и данные о покрытии.
- Ограничение наборов инструментов и режим только для чтения — Используйте
SONARQUBE_TOOLSETSиSONARQUBE_READ_ONLY, чтобы управлять загрузкой инструментов и блокировать операции записи.
Документация
SonarQube MCP Server
SonarQube MCP Server — это сервер Model Context Protocol (MCP), обеспечивающий бесшовную интеграцию с SonarQube Server или Cloud для контроля качества и безопасности кода. Он также поддерживает анализ фрагментов кода непосредственно в контексте агента.
Начните с быстрой настройки или узнайте больше о семействе продуктов SonarQube.
Быстрая настройка
Рекомендации по безопасности
🔒 Важно: Ваш токен SonarQube — это конфиденциальные учетные данные. Соблюдайте следующие правила безопасности:
При использовании команд CLI:
- Не указывайте токены непосредственно в командах — они сохраняются в истории оболочки
- Используйте переменные среды — задавайте токены в переменных среды перед запуском команд
При использовании файлов конфигурации:
- Никогда не добавляйте токены в систему контроля версий
- По возможности используйте подстановку переменных среды в файлах конфигурации
🚀 Создание конфигурации
Самый быстрый способ начать — воспользоваться генератором конфигурации SonarQube MCP Server — интерактивным инструментом, который создает готовую конфигурацию для выбранного клиента AI-агента.
Настройка вручную
Если вы предпочитаете настраивать все самостоятельно, проще всего использовать образ контейнера sonarsource/sonarqube-mcp. Используйте sonarsource/sonarqube-mcp для автоматического обновления (с помощью --pull=always) или закрепите версию с помощью тега (например, sonarsource/sonarqube-mcp:1.19.0.2785), чтобы обеспечить воспроизводимость развертываний. Некоторые выпуски также помечены версией SonarQube Server, с которой они совместимы, в формате <SQS major>.<SQS minor>.<patch> (например, sonarsource/sonarqube-mcp:2026.5.0); номер исправления увеличивается с каждым выпуском MCP для этой версии SonarQube Server. Если вы хотите собрать образ локально, читайте далее.
Примечание: Хотя в примерах ниже используется
docker, подойдет любая среда выполнения контейнеров, совместимая с OCI (например, Podman, nerdctl). Просто заменитеdockerна предпочитаемый инструмент.
Antigravity
SonarQube MCP Server доступен в MCP Store Antigravity. Выполните следующие инструкции:
- Откройте боковую панель агента
- Нажмите на три точки (...) в правом верхнем углу и выберите MCP Servers
- Найдите
SonarQubeи выберите Install - Укажите необходимый пользовательский токен SonarQube. Также можно указать ключ организации для SonarQube Cloud или URL SonarQube при подключении к SonarQube Server.
Для SonarQube Cloud US задайте URL https://sonarqube.us.
Также можно настроить сервер вручную через mcp_config.json:
- Для подключения к SonarQube Cloud:
На боковой панели агента нажмите на три точки (...) -> 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" в раздел env конфигурации MCP.
- Для подключения к 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 CloudSONARQUBE_ORG— ключ организацииSONARQUBE_URL— (необязательно) задайте значениеhttps://sonarqube.usдля SonarQube Cloud US
-
Для SonarQube Server:
SONARQUBE_TOKEN— пользовательский токен SonarQube ServerSONARQUBE_URL— URL SonarQube Server
После установки расширение будет размещено в <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 в аргументы, а 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 может напрямую использовать сервер SonarQube MCP в CI/CD.
Чтобы добавить секреты в среду Copilot, следуйте документации Copilot. В конфигурации MCP будут доступны только секреты, имена которых начинаются с COPILOT_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" в раздел env конфигурации MCP.
Windsurf
SonarQube MCP Server доступен как плагин Windsurf. Выполните следующие инструкции:
- Откройте Settings > Cascade > MCP Servers в Windsurf и выберите Open MCP Marketplace
- Найдите
sonarqubeв Cascade MCP Marketplace - Выберите SonarQube MCP Server и нажмите Install
- Добавьте необходимый пользовательский токен SonarQube. При необходимости добавьте ключ организации по умолчанию для SonarQube Cloud или URL SonarQube для SonarQube Server либо Community Build.
Для SonarQube Cloud US задайте URL https://sonarqube.us.
Zed
Откройте представление Extensions в Zed и найдите 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
💡 Совет: Рекомендуем регулярно загружать последнюю версию образа или делать это перед отправкой сообщения о проблеме, чтобы использовать самые актуальные функции и исправления.
Установка вручную
Установить сервер SonarQube MCP вручную можно, скопировав следующий фрагмент в файл конфигурации серверов 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>"
}
}
}
При запуске MCP-сервера в контейнере на Linux контейнер не может получить доступ к встроенному серверу SonarQube for IDE, работающему на localhost. Чтобы разрешить контейнеру подключаться к серверу SonarQube for IDE, добавьте параметр
--network=hostв команду запуска контейнера.
Конфигурация
В зависимости от среды необходимо задать определенные переменные среды.
Основные параметры
При запуске MCP Server необходимо добавить следующую переменную:
| Переменная окружения | Описание |
|---|---|
STORAGE_PATH | Обязательный абсолютный путь к доступному для записи каталогу, в котором SonarQube MCP Server будет хранить свои файлы (например, для создания, обновления и сохранения); автоматически задаётся при использовании образа контейнера |
SONARQUBE_PROJECT_KEY | Необязательный ключ проекта по умолчанию. Если задан, все инструменты, которым требуется ключ проекта, будут автоматически использовать это значение — параметр projectKey полностью удаляется из их схемы. Полезно при работе с одним проектом. |
SONARQUBE_IDE_PORT | Необязательный номер порта от 64120 до 64130 для подключения SonarQube MCP Server к SonarQube for IDE. |
SONARQUBE_FORCE_LOCAL_ANALYSIS | Задайте значение true, чтобы использовать analyze_code_snippet вместо анализа Vortex в Cloud stdio, в том числе для организаций с соответствующими правами. Требуется набор инструментов analysis. По умолчанию: false. Не влияет на SonarQube Server или Cloud HTTP. |
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"
]
}
При подключённой рабочей области инструменты анализа считывают файлы напрямую с помощью filePath; fileContent не требуется.
В режиме stdio способ анализа выбирается при запуске (с учётом включённых наборов инструментов):
- SonarQube Cloud: анализ Vortex (
run_advanced_code_analysis) при подключённой рабочей области и наличии хотя бы одной организации с соответствующими правами; в противном случае — локальный анализ. Для анализа Vortex принимаются только организации с соответствующими правами. - SonarQube Server: анализ Vortex для экземпляров с соответствующими правами (требуется подключённая рабочая область); локальный анализ для экземпляров без Vortex.
При локальном анализе используется SonarQube for IDE, если он подключён, или analyze_code_snippet. Без подключённой рабочей области для анализа фрагментов требуется fileContent.
В Cloud stdio параметр SONARQUBE_ORG ограничивает проверку прав указанной организацией. Чтобы использовать фрагменты для всех организаций, задайте SONARQUBE_FORCE_LOCAL_ANALYSIS=true, включите набор инструментов analysis и перезапустите сервер. Эта настройка влияет только на Cloud stdio.
В режиме HTTP/HTTPS Cloud и Server поддерживают analyze_code_snippet, если при запуске MCP-сервера задан SONARQUBE_TOKEN и включён набор инструментов analysis. Токен запуска необходим для инициализации анализатора (загрузка плагинов Cloud выполняется анонимно); для получения профилей качества и активных правил используются токен вызывающего пользователя и, в Cloud, организация, выбранная для запроса. Без токена запуска анализ фрагментов и загрузка анализаторов отключены, даже при наличии SONARQUBE_FORCE_LOCAL_ANALYSIS=true. Права на Vortex не требуются.
Выборочное включение инструментов
При каждом разговоре MCP-клиенты загружают в контекст агента все включённые инструменты — их имена, описания и схемы входных данных. Ограничение этого списка с помощью SONARQUBE_TOOLSETS сокращает использование контекста и стоимость токенов каждого сеанса.
По умолчанию включены только важные наборы инструментов. Включайте дополнительные наборы только при необходимости.
| Переменная окружения | Описание |
|---|---|
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 и используют общее право организации — для использования любого из этих наборов организация должна иметь права на оба. Встроенный анализ Cloud проверяет организацию, выбранную во время выполнения; проксируемые инструменты контекста используют организацию, заданную при запуске. В SonarQube Server режим stdio отображает контекст Vortex и run_advanced_code_analysis, если для хабов CAG и A3S предоставлены права. Рекомендуется использовать унифицированный ключ набора инструментов vortex. Устаревшие ключи cag и analysis по-прежнему работают; при их использовании без vortex выводится предупреждение при запуске и примечание об устаревании в инструкциях сервера. В режиме Streamable HTTP клиенты могут передавать HTTP-заголовок SONARQUBE_TOOLSETS, чтобы дополнительно ограничить набор инструментов для отдельного запроса, но не могут включить наборы, недоступные при запуске сервера (см. раздел Транспорт Streamable HTTP ниже). |
SONARQUBE_READ_ONLY | Если задано значение true, включается режим только для чтения, отключающий все операции записи (например, изменение статуса проблемы). Если заданы оба параметра, этот фильтр применяется совместно с SONARQUBE_TOOLSETS. По умолчанию: false. В режиме Streamable HTTP клиенты могут передавать HTTP-заголовок SONARQUBE_READ_ONLY, чтобы дополнительно ограничить отдельные запросы режимом только для чтения, но не могут отменить ограничение сервера на чтение (см. раздел Транспорт Streamable HTTP ниже). |
Доступные наборы инструментов
| Набор инструментов | Ключ | Описание | |-----------------------|---------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| | **Анализ** | `analysis` | Инструменты анализа кода (локальный анализ с помощью `analyze_code_snippet`, **устарел** и заменён анализом `analyze_file_list`/Vortex) | | **IDE** | `ide` | Инструменты интеграции SonarQube for IDE (анализ файлов, переключение автоматического анализа) — в настоящее время также включены в `analysis` | | **Проблемы** | `issues` | Поиск проблем SonarQube и управление ими | | **Уязвимости безопасности** | `security-hotspots` | Поиск уязвимостей безопасности и их проверка | | **Проекты** | `projects` | Просмотр и поиск проектов SonarQube | | **Quality Gates** | `quality-gates` | Доступ к Quality Gates и их статусу | | **Правила** | `rules` | Просмотр и поиск правил SonarQube | | **Исходный код** | `sources` | Доступ к исходному коду и сведениям SCM | | **Дублирования** | `duplications` | Поиск дублирования кода в проектах | | **Метрики** | `measures` | Получение показателей и метрик (включает инструменты для показателей и метрик) | | **Языки** | `languages` | Список поддерживаемых языков программирования | | **Портфели** | `portfolios` | Управление портфелями и предприятиями (Cloud и Server) | | **Система** | `system` | Инструменты администрирования системы (только Server) | | **Вебхуки** | `webhooks` | Управление вебхуками | | **Риски зависимостей** | `dependency-risks` | Анализ рисков зависимостей и проблем безопасности (SCA) | | **Покрытие** | `coverage` | Инструменты анализа и улучшения покрытия тестами | | **Контекст Vortex** | `cag` | Инструменты контекста Vortex — только stdio. **Устарел** и заменён на `vortex` (старое название: Context Augmentation/CAG) | | **Vortex** | `vortex` | Унифицированный, **рекомендуемый** набор инструментов, объединяющий инструменты контекста и анализа Vortex под одним названием (только stdio; для Cloud требуется соответствующее разрешение организации; для Server необходимо разрешение на оба хаба) | | **Готовность к работе с агентами** | `agentic-readiness` | Инструменты оценки готовности к работе с агентами (SonarQube Cloud, требуется разрешение организации) | | **Архитектура** | `architecture` | Чтение архитектуры, замена предполагаемых моделей и управление директивами проекта (по умолчанию отключено) |Примеры
Включение наборов инструментов анализа, проблем и Quality Gates (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
Для stdio настройте следующие переменные среды:
| Переменная среды | Описание | Обязательная |
|---|---|---|
SONARQUBE_TOKEN | Ваш токен SonarQube Cloud token | Да |
SONARQUBE_ORG | Необязательный фиксированный ключ организации SonarQube Cloud | Нет |
SONARQUBE_URL | Пользовательский URL SonarQube Cloud (по умолчанию https://sonarcloud.io). Используйте для SonarQube Cloud US: https://sonarqube.us | Нет |
Примеры:
- SonarQube Cloud: требуется только
SONARQUBE_TOKEN. Если заданSONARQUBE_ORG, он фиксирует организацию. - SonarQube Cloud US: задайте
SONARQUBE_TOKENиSONARQUBE_URL=https://sonarqube.us;SONARQUBE_ORGуказывать необязательно.
SonarQube Server
| Переменная среды | Описание | Обязательная |
|---|---|---|
SONARQUBE_TOKEN | Ваш токен USER для SonarQube Server | Да |
SONARQUBE_URL | URL SonarQube Server | Да |
Требования к версии: требуется SonarQube Server 2025.1 (SQS) или 25.1 (SonarQube Community Build) либо более поздняя версия. При запуске MCP-сервер считывает версию подключённого экземпляра и завершает работу с ошибкой, если версия слишком старая (например, устаревшие выпуски Server 9.x/10.x и Community Build 24.x не поддерживаются). На SonarQube Cloud эта проверка не распространяется.
⚠️ Для подключения к SonarQube Server требуется токен типа USER. При использовании токенов проекта или глобальных токенов подключение будет работать некорректно.
💡 Совет по настройке (режим stdio): если URL не указан, токен по умолчанию используется для SonarQube Cloud. Задайте
SONARQUBE_URLдля SonarQube Server или другого региона Cloud. Если заданSONARQUBE_ORG, он фиксирует организацию Cloud.
В stdio задание SONARQUBE_ORG фиксирует организацию Cloud. Аргументы инструмента organization исключаются из схем и отклоняются, как и projectKey, если задан SONARQUBE_PROJECT_KEY.
Если SONARQUBE_ORG не задан, агенты могут вызвать list_organizations, чтобы получить ключи, названия, идентификаторы и UUID организаций, доступных вашей учётной записи, а затем передать ключ в качестве необязательного аргумента organization инструментам, работающим с организациями. В stdio единственная обнаруженная организация сохраняется как организация по умолчанию; если организаций нет или их несколько, организация остаётся неопределённой. Аргумент инструмента применяется только к этому вызову и никогда не меняет обнаруженную организацию по умолчанию. Поиск профилей фрагментов и правил использует организацию, выбранную для данного вызова.
Для запросов токенов по HTTP/HTTPS параметр уровня сервера SONARQUBE_ORG по-прежнему поддерживается для совместимости, но считается устаревшим и вызывает предупреждение при запуске. Он фиксирует организацию для всех запросов и отклоняет заголовки организации клиента и аргументы инструмента organization. Если организация на сервере не настроена, необязательный заголовок клиента SONARQUBE_ORG фиксирует организацию для данного запроса и запрещает аргументы инструмента organization. Если заголовок не задан, используйте аргумент инструмента. Инструменты, которым требуется организация, сообщают, как её обнаружить, если все способы указания организации отсутствуют. Для обнаружения организаций и инструментов, API которых используют только идентификаторы ресурсов, аргумент организации не требуется. Поиск проблем с учётом организации и проверки разрешений для анализа рисков зависимостей используют выбранную организацию. Если настроен OAuth, параметр уровня сервера SONARQUBE_ORG отклоняется. Запросы OAuth также отклоняют заголовки организации; выбирайте организации с помощью аргументов инструментов.
Инструменты контекста Vortex используют настроенную или единственную обнаруженную при запуске организацию. Аргументы организации, переданные во время выполнения, не перенастраивают проксируемый контекстный движок; если организация при запуске не определена, этот прокси пропускается. Встроенный инструмент run_advanced_code_analysis проверяет наличие совокупного разрешения Vortex для организации, выбранной при каждом вызове.
Режимы транспорта
Спецификация MCP определяет два механизма транспорта: Stdio и Streamable HTTP. SonarQube MCP Server поддерживает оба:
| Транспорт MCP | Режим сервера | Типичное применение |
|---|---|---|
| Stdio | По умолчанию (без SONARQUBE_TRANSPORT) | Локальные MCP-клиенты, запускающие сервер как дочерний процесс (Cursor, Claude Code, VS Code и т. д.) |
| Streamable HTTP | SONARQUBE_TRANSPORT=http или https | Удалённые или многопользовательские развёртывания; клиенты подключаются к /mcp по HTTP(S) (например, Windsurf с URL собственного сервера) |
Примечание: Streamable HTTP — это текущий сетевой транспорт MCP. Более старый HTTP-транспорт только с SSE из предыдущих версий MCP устарел и не поддерживается.
1. Stdio (по умолчанию — рекомендуется для локальной разработки)
Рекомендуемый режим для локальной разработки и конфигураций с одним пользователем, используемый большинством MCP-клиентов.
Пример — Docker с 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)
Незашифрованный транспорт Streamable HTTP. Для многопользовательских развёртываний используйте HTTPS.
⚠️ Не рекомендуется: используйте Stdio для локальной разработки или HTTPS (Streamable HTTP) для многопользовательских производственных развёртываний.
| Переменная среды | Описание | По умолчанию |
|---|---|---|
SONARQUBE_TRANSPORT | Установите значение http, чтобы включить транспорт Streamable HTTP | Не задано (stdio) |
SONARQUBE_HTTP_PORT | Номер порта (1024–65535) или 0 для порта, назначенного ОС | 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 |
Примечание: HTTP/HTTPS принимает токен SonarQube пользователя через Authorization: Bearer <token>. Облачный сервис Sonar также поддерживает OAuth. При запросах токенов SonarQube Cloud организация определяется следующим образом: |
SONARQUBE_ORG— необязательный заголовок запроса, который задаёт организацию для этого запроса. Устаревшая конфигурация на уровне сервера задаёт её для всех запросов и отклоняет заголовки организации от клиента и аргументы инструментов, задающие организацию.- Инструменты, учитывающие организацию, принимают необязательный аргумент
organization, если организация не задана ни в конфигурации сервера, ни в заголовке запроса. Если организация уже задана, передача этого аргумента отклоняется. - Если организация по умолчанию не задана, агенты могут вызвать
list_organizations, используя только свой токен, а затем передать выбранный ключ последующим инструментам.
Клиенты также могут ограничить набор видимых инструментов для отдельного запроса, передав заголовки SONARQUBE_TOOLSETS и/или SONARQUBE_READ_ONLY; они применяют дополнительную фильтрацию поверх конфигурации на уровне сервера — область действия можно только сузить, но не расширить.
Состояние сеанса между запросами не сохраняется.
Устарело: Для токенов SonarQube заголовок запроса
SONARQUBE_TOKENпока принимается для обратной совместимости, но будет удалён в будущей версии. Перейдите наAuthorization: Bearer <token>.
3. HTTPS (Streamable HTTP поверх TLS) (рекомендуется для производственных развёртываний с несколькими пользователями)
Защищённый транспорт Streamable HTTP с шифрованием TLS. Требуются SSL-сертификаты.
✅ Рекомендуется для эксплуатации: Используйте HTTPS при развёртывании MCP-сервера для нескольких пользователей через Streamable HTTP. В целях безопасности сервер по умолчанию привязывается к
127.0.0.1(localhost).
| Переменная окружения | Описание | Значение по умолчанию |
|---|---|---|
SONARQUBE_TRANSPORT | Установите значение https, чтобы включить транспорт Streamable HTTP поверх TLS | Не задано (stdio) |
SONARQUBE_HTTP_PORT | Номер порта (обычно 8443 для HTTPS) или 0 для порта, назначенного ОС | 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 |
Пример — Docker с SonarQube Cloud:
Примечание: При запуске в контейнере задайте
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 \
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 \
sonarsource/sonarqube-mcp
Конфигурация клиента (SonarQube Cloud):
При запросах токенов SonarQube можно задать SONARQUBE_ORG в заголовках клиента, чтобы зафиксировать организацию запроса, или не указывать его и выбирать организации через аргументы инструментов.
{
"mcpServers": {
"sonarqube-https": {
"url": "https://your-server:8443/mcp",
"headers": {
"Authorization": "Bearer <your-token>",
"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-сертификатами.
OAuth для размещённого SonarQube Cloud
Поддержка OAuth предназначена для размещённой службы MCP SonarQube Cloud от Sonar. Используйте MCP-клиент с поддержкой OAuth и войдите в систему по запросу; настройки OAuth-сервера в конфигурации клиента не требуются. Клиенты, использующие токены SonarQube, по-прежнему поддерживаются.
Области действия mcp:tools:read и mcp:tools:write независимо управляют доступом к инструментам чтения и записи с учётом ваших разрешений Cloud. Используйте list_organizations и аргументы инструмента organization, чтобы выбрать организацию.
В самостоятельно размещённых развёртываниях по-прежнему используются токены SonarQube; OAuth для SonarQube Server пока не поддерживается.
Конечные точки службы
При работе в режиме Streamable HTTP (http или https) сервер предоставляет несколько не требующих аутентификации конечных точек службы в дополнение к конечной точке MCP по адресу /mcp. Они предназначены для взаимодействия между службами (мониторинг, оркестрация, проверка совместимости клиентов) и не требуют заголовка Authorization.
| Конечная точка | Метод | Описание | Пример ответа |
|---|---|---|---|
/health | GET | Проверка работоспособности. Возвращает 200 OK с пустым телом, когда сервер готов принимать запросы. | (пустое тело) |
/info | GET | Возвращает версию MCP-сервера в формате JSON. Полезно для проверки версии развёрнутого сервера. | {"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 хранилище доверенных сертификатов Java с сертификатом CA:
-Djavax.net.ssl.trustStore=/path/to/truststore.p12 -Djavax.net.ssl.trustStoreType=PKCS12 -Djavax.net.ssl.trustStorePassword=<passphrase>. Оно добавляется к набору сертификатов, которым доверяют по умолчанию.
Прокси
SonarQube MCP Server поддерживает HTTP- и SOCKS5-прокси через стандартные системные свойства прокси Java.
Конфигурация
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 |
Сертификат клиента (взаимный 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 передайте свойства хранилища ключей в качестве аргументов JVM перед -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>
Не указывайте -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, чтобы отфильтровать результаты: будут сообщаться только проблемы в пределах фрагмента (расположение фрагмента определяется автоматически)
Параметры:
organization— ключ организации SonarQube Cloud — Необязательная строка, только для CloudprojectKey— ключ проекта 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— Список абсолютных путей к анализируемым файлам — Обязательный String[]
-
toggle_automatic_analysis — Включение или отключение автоматического анализа SonarQube for IDE. Если функция включена, SonarQube for IDE автоматически анализирует файлы при их изменении в рабочем каталоге. Если функция отключена, автоматический анализ не выполняется.
enabled— Включить или отключить автоматический анализ — Обязательный Boolean
В SonarQube Server stdio перечисляет инструменты контекста Vortex и run_advanced_code_analysis, если доступны оба хаба — CAG и A3S.
Если доступен анализ Vortex:
Требуется подключить рабочую область к
/app/mcp-workspace
- run_advanced_code_analysis — Запуск анализа Vortex для одного файла. SonarQube Server использует заполнитель nil UUID.
organization— ключ организации SonarQube Cloud — Необязательная строка, только для CloudprojectKey— Ключ проекта — Обязательная строка (игнорируется, если задан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— Необязательный ключ/идентификатор запроса на слияние. Используйте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— Необязательный ключ/идентификатор запроса на слияние. Используйтеlist_pull_requests, чтобы узнать допустимые ключи — Строкаfrom— Первая анализируемая строка (начиная с 1, по умолчанию: 1) — Числоto— Последняя анализируемая строка (включительно). Если не указана, возвращаются все строки — Число
Риски зависимостей
Примечание: для анализа рисков зависимостей требуется SonarQube Advanced Security. В SonarQube Server необходима версия 2025.4 Enterprise или выше.
- search_dependency_risks — Поиск проблем анализа состава программного обеспечения (рисков зависимостей) в проекте SonarQube с указанием выпусков, обнаруженных в анализируемом проекте, приложении или портфеле.
organization— ключ организации SonarQube Cloud — Необязательная строка, только для CloudprojectKey— Ключ проекта — Обязательная строка (игнорируется, если заданSONARQUBE_PROJECT_KEY)branch— Необязательное имя ветки для анализа ветки. Используйтеlist_branches, чтобы узнать допустимые имена — СтрокаpullRequest— Необязательный ключ/идентификатор запроса на слияние. Используйтеlist_pull_requests, чтобы узнать допустимые ключи — СтрокаpageIndex— Необязательный индекс страницы (начиная с 1, по умолчанию: 1) — Целое числоpageSize— Необязательный размер страницы. Должен быть больше 0 и не превышать 500 (по умолчанию: 100) — Целое число
Предприятия
Примечание: предприятия доступны только при подключении к SonarQube Cloud.
- list_enterprises — Список предприятий SonarQube Cloud, к которым у вас есть доступ. Используйте этот инструмент, чтобы узнать идентификаторы предприятий для работы с другими инструментами.
enterpriseKey— Необязательный ключ предприятия для фильтрации результатов — Строка
Проблемы
-
change_sonar_issue_status — Изменение статуса проблемы SonarQube на "accept", "falsepositive" или "reopen".
key— Ключ проблемы — Обязательная строкаstatus— Новый статус проблемы — Обязательное перечисление {"accept", "falsepositive", "reopen"}comment— Необязательный комментарий с объяснением изменения статуса — Строка
-
search_sonar_issues_in_projects — Поиск проблем SonarQube в проектах моей организации.
organization— ключ организации SonarQube Cloud — Необязательная строка, только для CloudprojectKeys— Необязательный список ключей проектов SonarQube — String[]branch— Необязательное имя ветки для анализа ветки. Используйтеlist_branches, чтобы узнать допустимые имена — СтрокаpullRequest— Необязательный ключ/идентификатор запроса на слияние. Используйтеlist_pull_requests, чтобы узнать допустимые ключи — Строкаseverities— Необязательный список уровней серьёзности для фильтрации. Возможные значения: INFO, LOW, MEDIUM, HIGH, BLOCKER — String[]impactSoftwareQualities— Необязательный список характеристик качества ПО для фильтрации. Возможные значения: MAINTAINABILITY, RELIABILITY, SECURITY — String[]issueStatuses— Необязательный список статусов проблем для фильтрации. Возможные значения: OPEN, CONFIRMED, FALSE_POSITIVE, ACCEPTED, FIXED, IN_SANDBOX — String[]tags— Необязательный список тегов проблем для фильтрации. Теги записываются строчными буквами — String[]inNewCodePeriod— Возвращать только проблемы за период нового кода. Требуется ровно одна запись вprojectKeysиfiles— BooleanissueKey— Необязательный ключ проблемы для получения конкретной проблемы — СтрокаpageIndex— Необязательный индекс страницы (начиная с 1, по умолчанию: 1) — Целое числоpageSize— Необязательный размер страницы. Должен быть больше 0 и не превышать 500 (по умолчанию: 100) — Целое число
Уязвимости безопасности
-
search_security_hotspots — Поиск уязвимостей безопасности в проекте SonarQube.
projectKey— Ключ проекта или приложения — Обязательная строка (игнорируется, если заданSONARQUBE_PROJECT_KEY)hotspotKeys— Список конкретных ключей уязвимостей безопасности через запятую для получения — String[]branch— Необязательное имя ветки для анализа ветки. Используйтеlist_branches, чтобы узнать допустимые имена — СтрокаpullRequest— Необязательный ключ/идентификатор запроса на слияние. Используйтеlist_pull_requests, чтобы узнать допустимые ключи — Строкаfiles— Необязательный список путей к файлам для фильтрации — String[]status— Необязательный фильтр по статусу: TO_REVIEW, REVIEWED — Строкаresolution— Необязательный фильтр по результату проверки: FIXED, SAFE, ACKNOWLEDGED — СтрокаsinceLeakPeriod— Фильтровать уязвимости, созданные после периода утечки (новый код) — BooleanonlyMine— Показывать только уязвимости, назначенные мне — BooleanpageIndex— Необязательный индекс страницы (начиная с 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_KEYbranch— Необязательное имя ветки для анализа ветки. Используйтеlist_branches, чтобы узнать допустимые имена — СтрокаmetricKeys— Необязательные ключи метрик для получения (например, ncloc, complexity, violations, coverage) — String[]pullRequest— Необязательный ключ/идентификатор запроса на слияние. Используйтеlist_pull_requests, чтобы узнать допустимые ключи — Строка
Метрики
- search_metrics — Поиск метрик SonarQube.
pageIndex— Необязательный индекс страницы (начиная с 1, по умолчанию: 1) — Целое числоpageSize— Необязательный размер страницы. Должен быть больше 0 и не превышать 500 (по умолчанию: 100) — Целое число
Портфели
-
list_portfolios — Список портфелей предприятий, доступных в SonarQube, с возможностью фильтрации и постраничного вывода.
Для SonarQube Server:
q— Необязательный поисковый запрос для фильтрации портфелей по имени или ключу — Строкаfavorite— Если true, возвращаются только избранные портфели — BooleanpageIndex— Необязательный номер страницы (начиная с 1, по умолчанию: 1) — Целое числоpageSize— Необязательный размер страницы, максимум 500 (по умолчанию: 100) — Целое число
Для SonarQube Cloud:
enterpriseId— UUID Enterprise. Можно не указывать, только если параметр 'favorite' задан значением true — Stringq— Необязательный поисковый запрос для фильтрации портфелей по имени — Stringfavorite— Должен иметь значение true, если параметр 'enterpriseId' не указан. Если значение true, возвращаются только портфели, добавленные в избранное вошедшим в систему пользователем. Не может иметь значение true, если 'draft' имеет значение true — Booleandraft— Если значение true, возвращаются только черновики, созданные вошедшим в систему пользователем. Не может иметь значение true, если 'favorite' имеет значение true — BooleanpageIndex— Необязательный индекс страницы для получения (по умолчанию: 1) — IntegerpageSize— Необязательный размер страницы для получения (по умолчанию: 50) — Integer
Проекты
-
list_organizations — Список организаций SonarQube Cloud, участником которых является пользователь, включая ключи, имена, идентификаторы и UUID. Используйте возвращённый ключ как
organizationв последующих инструментах. -
search_my_sonarqube_projects — Поиск проектов SonarQube. Ответ разбит на страницы.
organization— Ключ организации SonarQube Cloud — Необязательная строка, только CloudpageIndex— Необязательный индекс страницы, начиная с 1 (по умолчанию: 1) — IntegerpageSize— Необязательный размер страницы. Должен быть больше 0 и меньше или равен 500 (по умолчанию: 500) — Integerq— Необязательный поисковый запрос для фильтрации проектов по имени (частичное совпадение) или ключу (точное совпадение) — String
-
list_branches — Список проанализированных веток проекта.
- SonarQube Cloud: возвращает долгоживущие (
LONG) и краткоживущие (SHORT) ветки с полямиtypeиmergeBranch. Необязательный фильтрbranchTypes:ALL(по умолчанию),LONGилиSHORT. - SonarQube Server: возвращает все проанализированные ветки (имя, Quality Gate, дата анализа). Фильтр
type,mergeBranchилиbranchTypesне поддерживается. - Используйте возвращённые имена веток в качестве параметра
branchдля других инструментов. Для анализа запросов на слияние используйте вместо негоlist_pull_requests. projectKey— Ключ проекта (например, my_project) — Обязательная строка (Игнорируется, если определёнSONARQUBE_PROJECT_KEY)branchTypes— (только SonarQube Cloud) Необязательный фильтр:ALL(по умолчанию),LONGилиSHORT— Enum {"ALL", "LONG", "SHORT"}
- SonarQube Cloud: возвращает долгоживущие (
-
list_pull_requests — Список всех запросов на слияние проекта. Используйте этот инструмент, чтобы найти запросы на слияние для анализа с декорированием PR (покрытие, проблемы, Quality Gate). Возвращает ключ/идентификатор запроса на слияние, который можно использовать с другими инструментами. Для анализа на основе веток без запросов на слияние используйте вместо него
list_branches.projectKey— Ключ проекта (например, my_project) — Обязательная строка (Игнорируется, если определёнSONARQUBE_PROJECT_KEY)
Quality Gates
-
get_project_quality_gate_status — Получить статус Quality Gate проекта SonarQube.
analysisId— Необязательный идентификатор анализа — Stringbranch— Необязательное имя ветки для анализа на основе веток. Используйтеlist_branches, чтобы найти допустимые имена — StringprojectId— Необязательный идентификатор проекта — StringprojectKey— Необязательный ключ проекта — StringpullRequest— Необязательный ключ/идентификатор запроса на слияние. Используйтеlist_pull_requests, чтобы найти допустимые ключи — String
-
list_quality_gates — Список всех Quality Gates в моём SonarQube.
organization— Ключ организации SonarQube Cloud — Необязательная строка, только Cloud
Правила
- show_rule — Показать подробную информацию о правиле SonarQube.
organization— Ключ организации SonarQube Cloud — Необязательная строка, только Cloudkey— Ключ правила — Обязательная строка
Дублирование
-
search_duplicated_files — Поиск файлов с дублированием кода в проекте SonarQube. По умолчанию автоматически получает все файлы с дублированием на всех страницах (не более 10 000 файлов). Возвращает только файлы с дублированием.
projectKey— Ключ проекта — Обязательная строка (Игнорируется, если определёнSONARQUBE_PROJECT_KEY)branch— Необязательное имя ветки для анализа на основе веток. Используйтеlist_branches, чтобы найти допустимые имена — StringpullRequest— Необязательный ключ/идентификатор запроса на слияние. Используйтеlist_pull_requests, чтобы найти допустимые ключи — StringpageSize— Необязательное количество результатов на странице для ручной разбивки на страницы (макс.: 500). Если не указано, автоматически получает все файлы с дублированием — IntegerpageIndex— Необязательный номер страницы для ручной разбивки на страницы (начиная с 1). Если не указано, автоматически получает все файлы с дублированием — Integer
-
get_duplications — Получить дублирования для файла. Требуется разрешение Browse для проекта файла.
key— Ключ файла — Обязательная строкаbranch— Необязательное имя ветки для анализа на основе веток. Используйтеlist_branches, чтобы найти допустимые имена — StringpullRequest— Необязательный ключ/идентификатор запроса на слияние. Используйтеlist_pull_requests, чтобы найти допустимые ключи — String
Исходный код
-
get_raw_source — Получить исходный код в виде обычного текста из SonarQube. Требуется разрешение 'See Source Code' для файла.
key— Ключ файла — Обязательная строкаbranch— Необязательное имя ветки для анализа на основе веток. Используйтеlist_branches, чтобы найти допустимые имена — StringpullRequest— Необязательный ключ/идентификатор запроса на слияние. Используйтеlist_pull_requests, чтобы найти допустимые ключи — String
-
get_scm_info — Получить сведения SCM об исходных файлах SonarQube. Требуется разрешение See Source Code для проекта файла.
key— Ключ файла — Обязательная строкаcommits_by_line— Группировать строки по коммиту SCM, если значение false; иначе отображать коммиты для каждой строки — Stringfrom— Первая возвращаемая строка. Нумерация начинается с 1 — Numberto— Последняя возвращаемая строка (включительно) — Number
Система
Примечание: системные инструменты доступны только при подключении к SonarQube Server.
-
get_system_health — Получить состояние работоспособности экземпляра SonarQube Server. Возвращает GREEN (полностью работоспособен), YELLOW (работоспособен, но требует внимания) или RED (неработоспособен).
-
get_system_info — Получить подробные сведения о конфигурации системы SonarQube Server, включая состояние JVM, базу данных, поисковые индексы и настройки. Требуются разрешения 'Administer'.
-
get_system_logs — Получить системные журналы SonarQube Server в текстовом формате. Требуется разрешение на администрирование системы.
name— Необязательное имя журнала для получения. Возможные значения: access, app, ce, deprecation, es, web. По умолчанию: app — String
-
ping_system — Отправить запрос системе SonarQube Server, чтобы проверить, работает ли она. Возвращает 'pong' в виде обычного текста.
-
get_system_status — Получить сведения о состоянии SonarQube Server. Возвращает статус (STARTING, UP, DOWN, RESTARTING, DB_MIGRATION_NEEDED, DB_MIGRATION_RUNNING), версию и идентификатор.
Вебхуки
-
create_webhook — Создать вебхук для организации или проекта SonarQube. Требуется разрешение 'Administer' для указанного проекта или глобальное разрешение 'Administer'.
organization— Ключ организации SonarQube Cloud — Необязательная строка, только Cloudname— Имя вебхука — Обязательная строкаurl— URL вебхука — Обязательная строкаprojectKey— Необязательный ключ проекта для вебхука, относящегося к конкретному проекту — Stringsecret— Необязательный секрет вебхука для защиты его полезной нагрузки — String
-
list_webhooks — Список всех вебхуков организации или проекта SonarQube. Требуется разрешение 'Administer' для указанного проекта или глобальное разрешение 'Administer'.
organization— Ключ организации SonarQube Cloud — Необязательная строка, только CloudprojectKey— Необязательный ключ проекта для получения списка вебхуков, относящихся к конкретному проекту — String
Дополнение контекста
Инструменты архитектуры
-
search_by_signature_patterns — Найти элементы кода (классы, методы, интерфейсы и т. д.) по сигнатурам объявлений с помощью регулярных выражений.
include_code_regex_list— Список регулярных выражений для сопоставления с сигнатурами — Обязательный String[]exclude_code_regex_list— Список регулярных выражений для исключения из результатов — String[]include_glob— Шаблон glob для фильтрации файлов (например,*.java) — Stringexclude_glob— Шаблон glob для исключения файлов — Stringfields— Разделённый запятыми список полей, включаемых в ответ — Stringlimit— Максимальное количество возвращаемых результатов (по умолчанию: 10) — Integerregex_lists_operator— Способ объединения нескольких шаблонов:OR(по умолчанию) илиAND— String
-
search_by_body_patterns — Найти элементы кода по телу реализации с помощью регулярных выражений. Полезно для поиска мест фактического использования API или шаблонов.
include_code_regex_list— Список регулярных выражений для поиска в телах кода — Обязательный String[]exclude_code_regex_list— Список регулярных выражений для исключения из результатов — String[]include_glob— Шаблон glob для фильтрации файлов — Stringexclude_glob— Шаблон glob для исключения файлов — Stringfields— Разделённый запятыми список полей, включаемых в ответ — Stringlimit— Максимальное количество возвращаемых результатов (по умолчанию: 10) — Integerregex_lists_operator— Способ объединения нескольких шаблонов:OR(по умолчанию) илиAND— String
-
get_upstream_call_flow — Проследить, какие функции вызывают заданную функцию. Полезно для поиска всех вызывающих функций и точек входа, а также для понимания последствий изменения сигнатуры.
fqn— Полное имя функции — Обязательный Stringdepth— Глубина цепочки вызовов (0 = только функция, 1 = непосредственные вызывающие функции и т. д.) — Integerfields— Разделённый запятыми список полей, включаемых в ответ — String
-
get_downstream_call_flow — Проследить, какие функции вызывает заданная функция. Полезно для анализа влияния и понимания потока выполнения.
fqn— Полное имя функции — Обязательный Stringdepth— Глубина цепочки вызовов (0 = только функция, 1 = непосредственные вызываемые функции и т. д.) — Integerfields— Разделённый запятыми список полей, включаемых в ответ — String
-
get_source_code — Получить полный исходный код (сигнатуру и тело) элемента кода по его полному имени.
fqn— Полное имя элемента — Обязательный Stringfields— Разделённый запятыми список полей, включаемых в ответ — String
-
get_type_hierarchy — Получить полную иерархию наследования для структуры типа (класса, интерфейса, перечисления, записи, исключения, структуры). Необходимо для понимания деревьев наследования и рефакторинга.
fqn— Полное имя структуры типа — Обязательный Stringfields— Разделённый запятыми список полей, включаемых в ответ — String
-
get_references — Получить прямые входящие и исходящие ссылки на код для класса или модуля. Возвращаются только прямые (нетранзитивные) ссылки.
fqn— Полное имя класса или модуля — Обязательный Stringfields— Разделённый запятыми список полей, включаемых в ответ — String
-
get_current_architecture — Получить иерархический граф архитектуры с фильтрацией по префиксу пути и глубине. Полезно для изучения структуры модулей и зависимостей высокого уровня.
depth— Глубина иерархии (0 = только корень, 1 = корень и дочерние элементы и т. д.) — Обязательный Integerpath_prefix— Необязательный префикс пути для фильтрации узлов (например,com.example.service) — Stringecosystem— Необязательная экосистема для фильтрации (java,cs,py,js,ts) — String
-
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_URL | URL SonarQube Cloud | Да | https://sonarcloud.io |
SONARQUBE_TOKEN | Токен аутентификации | Да | Нет |
SONARQUBE_ORG | Организация в облаке; передаётся прокси из конфигурации запуска или определяется автоматически | Нет | Нет |
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.
Конфигурация для конкретного проекта (рекомендуется)
Сначала экспортируйте SONARQUBE_TOKEN переменную среды с действительным персональным токеном доступа (PAT) для вашего проекта.
# 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 и требуют включения этой функции для вашей организации.
В режиме stdio флаг функции проверяется при запуске. При работе через HTTP/HTTPS добавьте agentic-readiness в SONARQUBE_TOOLSETS сервера, чтобы включить инструменты.
-
start_agentic_readiness_assessment — Запустить оценку готовности проекта к работе с агентами. Возвращает результат сразу со статусом
PENDINGиassessmentId. Используйтеget_agentic_readiness_assessment, чтобы проверять результаты.projectKey— Ключ проекта — Обязательная строка (Игнорируется, если определёнSONARQUBE_PROJECT_KEY)branch— Ветка для оценки. Не указывайте, чтобы использовать ветку проекта по умолчанию — String
-
get_agentic_readiness_assessment — Получить результат оценки. Повторно вызывайте инструмент с тем же
assessmentId, пока статус не станетCOMPLETED,FAILEDилиINTERRUPTED. По завершении возвращает общий уровень и разбивку по направлениям с рекомендуемыми действиями и подтверждающими данными.assessmentId— Идентификатор оценки, возвращённый инструментомstart_agentic_readiness_assessment— Обязательная строка
-
list_agentic_readiness_assessments — Вывести список всех оценок проекта, начиная с самых новых. Используйте
get_agentic_readiness_assessment, чтобы получить полные результаты по каждому направлению.projectKey— Ключ проекта, для которого нужно вывести список оценок — Обязательная строка (Игнорируется, если определёнSONARQUBE_PROJECT_KEY)branch— Фильтровать оценки по имени ветки. Не указывайте, чтобы вывести оценки для всех веток — StringpageIndex— Номер страницы, начиная с 1 (по умолчанию: 1) — NumberpageSize— Количество элементов на странице, максимум 100 (по умолчанию: 50) — Number
Архитектура
Примечание: включите эти инструменты с помощью SONARQUBE_TOOLSETS=architecture в режиме stdio или HTTP/HTTPS. Для SonarQube Cloud требуется план Team или Enterprise. Для SonarQube Server требуется версия 2026.6 или новее и редакция Developer или выше; в более старых версиях и Community Build инструменты недоступны. См. рабочие процессы архитектуры и восстановление.
-
architecture_get — Просмотреть текущие зависимости, целевую архитектуру, директивы проекта или результаты (отклонения, дефекты и запахи кода).
target—current,intended,directivesилиfindings; доступность зависит от сборки MCP и Server — Обязательное перечислениеprojectKey— Ключ проекта — Обязательная строка (Игнорируется, если определёнSONARQUBE_PROJECT_KEY)organization— Ключ организации SonarQube Cloud, если он не настроен — Необязательная строка, только для Cloudcomponent— Точный ключ текущего узла или путь целевой группы; если не указан, используется верхний уровень — Stringdepth— Только для текущей/целевой архитектуры: уровни ниже начального; по умолчанию 1 для текущей и все для целевой — Numberlanguage— Только для текущей/целевой архитектуры/результатов:java,cs,js,tsилиpy— EnumdirectiveId— Полная директива по UUID, включая описание; используйте вместо постраничного вывода — Stringcategory/type— Только для результатов: фильтровать отклонения, дефекты или запахи кода по указанному типу — EnumpageIndex— Только для директив/результатов: номер страницы, начиная с 1 (по умолчанию: 1) — NumberpageSize— Директивы: сводки, по умолчанию/максимум 50. Результаты: по умолчанию 50, максимум 1000; 0 — только подсчёт — Number
-
architecture_set — Заменить целевую архитектуру целиком или создать, обновить и удалить директивы проекта. Доступно в поддерживаемых сборках Cloud и Server, если включена запись.
target—intendedилиdirectives— Обязательное перечислениеprojectKey— Ключ проекта — Обязательная строка (Игнорируется, если определёнSONARQUBE_PROJECT_KEY)organization— Ключ организации SonarQube Cloud, если он не настроен — Необязательная строка, только для Cloudmodel— Строка JSON: полный экспорт целевой архитектуры или массивmodels(неуказанное содержимое удаляется) либо изменения директив с массивамиcreate,updateиdelete— Обязательная строкаdryRun—trueдля предварительного просмотра,falseдля применения — Обязательное логическое значениеrevision— Только для целевой архитектуры: ревизия изarchitecture_get; по умолчанию используется ревизия полного экспорта. Обязательна при применении очистки — String
Примеры запросов
После настройки SonarQube MCP Server ниже приведены примеры запросов для распространённых сценариев из реальной практики:
Исправление неуспешного Quality Gate
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.
Чтобы запустить сервер как автономный JAR без Docker, скачайте готовый выпуск из репозитория бинарных файлов 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> путь к JAR в build/libs/.
Устранение неполадок
По умолчанию журналы приложения записываются в файл 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, чтобы использовать обновлённую версию.
При желании добавьте флаг --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.
Использование SonarQube через MCP регулируется Условиями предоставления услуг SonarQube Cloud или Условиями использования SonarQube Server, включая использование данных результатов исключительно для внутренних целей разработки программного обеспечения.