SonarQube MCP Server
официальныйОбеспечивает бесшовную интеграцию с SonarQube Server или Cloud и позволяет анализировать фрагменты кода непосредственно в контексте агента
Документация
Сервер SonarQube MCP
Сервер SonarQube MCP — это сервер Model Context Protocol (MCP), который обеспечивает бесшовную интеграцию с SonarQube Server или Cloud для контроля качества и безопасности кода. Он также поддерживает анализ фрагментов кода непосредственно в контексте агента.
Быстрая настройка
Рекомендации по безопасности
🔒 Важно: Ваш токен SonarQube — это конфиденциальные учетные данные. Следуйте этим правилам безопасности:
При использовании команд CLI:
- Избегайте жёсткого кодирования токенов в аргументах командной строки — они сохраняются в истории оболочки
- Используйте переменные окружения — задавайте токены в переменных окружения перед запуском команд
При использовании файлов конфигурации:
- Никогда не коммитьте токены в систему контроля версий
- Используйте подстановку переменных окружения в файлах конфигурации, когда это возможно
🚀 Сгенерируйте вашу конфигурацию
Самый быстрый способ начать — это Генератор конфигурации сервера SonarQube MCP — интерактивный инструмент, который создаёт готовую к использованию конфигурацию для вашего предпочитаемого AI-агента.
Ручная настройка
Если вы предпочитаете настраивать всё самостоятельно, самый простой метод — использовать наш образ контейнера по адресу sonarsource/sonarqube-mcp. Используйте sonarsource/sonarqube-mcp для автоматических обновлений (с --pull=always) или закрепите тег версии (например, sonarsource/sonarqube-mcp:1.19.0.2785) для воспроизводимых развёртываний. Читайте ниже, если хотите собрать его локально.
Примечание: Хотя в примерах ниже используется
docker, любая OCI-совместимая среда выполнения контейнеров подойдёт (например, Podman, nerdctl). Просто заменитеdockerна предпочитаемый вами инструмент.
Antigravity
Сервер SonarQube MCP доступен в магазине Antigravity MCP Store. Следуйте этим инструкциям:
- Откройте Боковую панель агента
- Нажмите на три точки (...) в правом верхнем углу и выберите 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 в Arguments и SONARQUBE_URL=https://sonarqube.us в Environment Variables.
- Для подключения к SonarQube Server:
Server Name: sonarqube
Server Type: Local (Press 1)
Command: docker
Arguments: run, --init, --pull=always, --rm, -i, -e, SONARQUBE_TOKEN, -e, SONARQUBE_URL, sonarsource/sonarqube-mcp
Environment Variables: SONARQUBE_TOKEN=<YOUR_USER_TOKEN>,SONARQUBE_URL=<YOUR_SERVER_URL>
Tools: *
Файл конфигурации находится по пути ~/.copilot/mcp-config.json.
GitHub Copilot coding agent
Агент кодирования GitHub Copilot может использовать сервер SonarQube MCP непосредственно в вашем CI/CD.
Чтобы добавить секреты в ваше окружение Copilot, следуйте документации Copilot. Только секреты с именами, начинающимися с COPILOT_MCP_, будут доступны вашей MCP-конфигурации.
В вашем репозитории GitHub перейдите в Settings -> Copilot -> Coding agent и добавьте следующую конфигурацию в раздел MCP configuration:
- Для подключения к 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 доступен как плагин Windsurf. Следуйте этим инструкциям:
- Откройте Windsurf Settings > Cascade > MCP Servers и выберите 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 может интегрироваться с SonarQube for IDE, чтобы дополнительно улучшить ваш рабочий процесс разработки, предоставляя более качественный анализ кода и аналитику непосредственно в вашей IDE.
Конфигурация
При использовании SonarQube for IDE переменная окружения SONARQUBE_IDE_PORT должна быть установлена с правильным номером порта. SonarQube for VS Code включает кнопку быстрой установки, которая автоматически задаёт правильную конфигурацию порта.
Например, с SonarQube Cloud:
{
"sonarqube": {
"command": "docker",
"args": [
"run",
"--init",
"--pull=always",
"-i",
"--rm",
"-e",
"SONARQUBE_TOKEN",
"-e",
"SONARQUBE_ORG",
"-e",
"SONARQUBE_IDE_PORT",
"sonarsource/sonarqube-mcp"
],
"env": {
"SONARQUBE_TOKEN": "<token>",
"SONARQUBE_ORG": "<org>",
"SONARQUBE_IDE_PORT": "<64120-64130>"
}
}
}
При запуске MCP-сервера в контейнере на Linux контейнер не может получить доступ к встроенному серверу SonarQube for IDE, работающему на localhost. Чтобы разрешить контейнеру подключаться к серверу SonarQube for IDE, добавьте опцию
--network=hostв команду запуска контейнера.
Конфигурация
В зависимости от вашего окружения вы должны предоставить определённые переменные окружения.
Основные
При запуске MCP-сервера следует добавить следующую переменную:
| Переменная окружения | Описание |
|---|---|
STORAGE_PATH | Обязательный абсолютный путь к директории с возможностью записи, где сервер SonarQube MCP будет хранить свои файлы (например, для создания, обновлений и сохранения состояния); автоматически предоставляется при использовании образа контейнера |
SONARQUBE_PROJECT_KEY | Опциональный ключ проекта по умолчанию. Если задан, все инструменты, требующие ключ проекта, будут автоматически использовать это значение — параметр projectKey полностью удаляется из их схемы. Полезно при работе над одним проектом. |
SONARQUBE_IDE_PORT | Опциональный номер порта в диапазоне от 64120 до 64130, используемый для подключения сервера SonarQube MCP к SonarQube for IDE. |
SONARQUBE_DEBUG_ENABLED | При установке в true включает ведение отладочного журнала. Отладочные записи пишутся как в файл журнала, так и в STDERR. Полезно для устранения неполадок с подключением или конфигурацией. По умолчанию: false. |
SONARQUBE_LOG_TO_FILE_DISABLED | При установке в true полностью отключает запись журналов на диск. Файлы журналов не будут создаваться в STORAGE_PATH/logs/. Полезно в контейнеризованных или эфемерных средах, где файловое логирование нежелательно. По умолчанию: false. |
Монтирование рабочего пространства (снижение раздувания контекста)
По умолчанию инструмент анализа analyze_code_snippet требует, чтобы агент передавал полное содержимое файла в качестве аргумента fileContent. Для больших файлов или при анализе множества файлов за сеанс это значительно увеличивает использование контекстного окна и затраты.
Решение: смонтируйте директорию вашего проекта в контейнер по пути /app/mcp-workspace. Когда это монтирование обнаружено, сервер читает файлы напрямую с диска, используя относительный к проекту аргумент filePath — содержимое файла никогда не проходит через контекст агента.
{
"args": [
"run", "-i", "--rm", "--init", "--pull=always",
"-e", "SONARQUBE_TOKEN",
"-e", "SONARQUBE_ORG",
"-v", "/path/to/your/project:/app/mcp-workspace",
"sonarsource/sonarqube-mcp"
]
}
Когда монтирование активно:
run_advanced_code_analysisстановится доступным, если ваша организация имеет на это правоanalyze_code_snippet: требуетсяfilePath, аfileContentне используется — сервер разрешает файл тем же способом
Выборочное включение инструментов
По умолчанию включены только важные наборы инструментов, чтобы снизить накладные расходы контекста. При необходимости вы можете включить дополнительные наборы.
| Переменная окружения | Описание |
|---|---|
SONARQUBE_TOOLSETS | Список наборов инструментов для включения, разделённый запятыми. Если задано, будут доступны только эти наборы. Если не задано, включены стандартные важные наборы (analysis, issues, projects, quality-gates, rules, duplications, measures, security-hotspots, dependency-risks, coverage, cag). Примечание: Набор инструментов projects всегда включён, так как он необходим для поиска ключей проектов для других операций. Инструменты Context Augmentation доступны только в режиме stdio и требуют прав организации. В режиме Streamable HTTP клиенты могут отправлять HTTP-заголовок SONARQUBE_TOOLSETS для дополнительного сужения набора в рамках одного запроса, но не могут включить наборы инструментов сверх тех, с которыми был запущен сервер (см. Транспорт Streamable HTTP ниже). |
SONARQUBE_READ_ONLY | Если установлено в true, включает режим только для чтения, который отключает все операции записи (например, изменение статуса задачи). Этот фильтр суммируется с SONARQUBE_TOOLSETS, если заданы оба. По умолчанию: false. В режиме Streamable HTTP клиенты могут отправлять HTTP-заголовок SONARQUBE_READ_ONLY для дополнительного ограничения отдельных запросов до только чтения, но не могут снять ограничение только для чтения на уровне сервера (см. Транспорт Streamable HTTP ниже). |
Доступные наборы инструментов
| Набор инструментов | Ключ | Описание |
|---|---|---|
| Analysis | analysis | Инструменты анализа кода (локальный анализ и расширенный удалённый анализ) |
| Issues | issues | Поиск и управление задачами SonarQube |
| Security Hotspots | security-hotspots | Поиск и проверка уязвимостей безопасности |
| Projects | projects | Просмотр и поиск проектов SonarQube |
| Quality Gates | quality-gates | Доступ к шлюзам качества и их статусу |
| Rules | rules | Просмотр и поиск правил SonarQube |
| Sources | sources | Доступ к исходному коду и информации SCM |
| Duplications | duplications | Поиск дублирования кода в проектах |
| Measures | measures | Получение метрик и измерений (включает инструменты измерений и метрик) |
| Languages | languages | Список поддерживаемых языков программирования |
| Portfolios | portfolios | Управление портфелями и предприятиями (Cloud и Server) |
| System | system | Инструменты системного администрирования (только Server) |
| Webhooks | webhooks | Управление вебхуками |
| Dependency Risks | dependency-risks | Анализ рисков зависимостей и проблем безопасности (SCA) |
| Coverage | coverage | Инструменты анализа и улучшения тестового покрытия |
| Context Augmentation | cag | Инструменты Context Augmentation (только режим stdio, требуются права организации) |
| Agentic Readiness | agentic-readiness | Инструменты оценки готовности агентов (SonarQube Cloud, требуются права организации) |
Примеры
Включить наборы инструментов analysis, issues и 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
Для включения полной функциональности перед запуском сервера необходимо задать следующие переменные окружения:
| Переменная окружения | Описание | Обязательна |
|---|---|---|
SONARQUBE_TOKEN | Ваш токен SonarQube Cloud | Да |
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_ORGиSONARQUBE_URL=https://sonarqube.us
SonarQube Server
| Переменная окружения | Описание | Обязательна |
|---|---|---|
SONARQUBE_TOKEN | Ваш ПОЛЬЗОВАТЕЛЬСКИЙ токен SonarQube Server | Да |
SONARQUBE_URL | URL вашего SonarQube Server | Да |
⚠️ Для подключения к 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 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) | 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 (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 (Потоковый HTTP поверх TLS) (Рекомендуется для production-развертываний с несколькими пользователями)
Защищённый потоковый HTTP-транспорт с шифрованием TLS. Требуются SSL-сертификаты.
✅ Рекомендуется для production: Используйте HTTPS при развертывании MCP-сервера для нескольких пользователей через потоковый HTTP. Сервер по умолчанию привязывается к
127.0.0.1(localhost) в целях безопасности.
| Переменная окружения | Описание | По умолчанию |
|---|---|---|
SONARQUBE_TRANSPORT | Установите в https, чтобы включить потоковый HTTP-транспорт поверх TLS | Не задано (stdio) |
SONARQUBE_HTTP_PORT | Номер порта (обычно 8443 для HTTPS) | 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 \
-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 HTTP предназначен для production-развертываний с несколькими пользователями и надлежащими SSL-сертификатами.
Служебные конечные точки
При работе в режиме потокового 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>"
}
}
}
Прокси
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 |
Инструменты
Анализ
-
analyze_code_snippet - Анализ содержимого файла с помощью анализаторов SonarQube для выявления проблем качества кода и безопасности. Всегда анализирует полное содержимое файла для точности. При необходимости фильтрует результаты по конкретному фрагменту кода.
Использование:
- С подключённым рабочим пространством (рекомендуется): передайте
filePath(относительно проекта) — сервер читает файл напрямую, не загружая содержимое файла в контекстное окно агента - Без подключённого рабочего пространства: передайте полный
fileContentдля полного анализа файла (выводит все проблемы) - Добавьте опциональный
codeSnippetдля фильтрации результатов — будут выведены только проблемы внутри фрагмента (местоположение фрагмента определяется автоматически)
Параметры:
projectKey- Ключ проекта SonarQube - Обязательная строка (Игнорируется, если заданSONARQUBE_PROJECT_KEY)filePath- Путь к анализируемому файлу относительно проекта (например,src/main/java/MyClass.java). Используется, когда рабочее пространство подключено по адресу/app/mcp-workspace- СтрокаfileContent- Полное содержимое файла в виде строки. Обязательно, если рабочее пространство не подключено - СтрокаcodeSnippet- Фрагмент кода для фильтрации проблем (должен совпадать с содержимым в fileContent) - Строкаlanguage- Язык кода (например, 'java', 'python', 'js', 'ts', 'tsx', 'jsx') - Строкаscope- Область действия файла: MAIN или TEST (по умолчанию: MAIN) - Строка
Поддерживаемые языки: Java, Kotlin, Python, Ruby, Go, JavaScript (
js,jsx), TypeScript (ts,tsx), JSP, PHP, XML, HTML, CSS, CloudFormation, Kubernetes, Terraform, Azure Resource Manager, Ansible, Docker, обнаружение секретов - С подключённым рабочим пространством (рекомендуется): передайте
Когда включена интеграция с SonarQube для IDE:
-
analyze_file_list - Анализ файлов в текущем рабочем каталоге с помощью SonarQube для IDE. Этот инструмент подключается к запущенному экземпляру SonarQube для IDE для выполнения анализа качества кода списка файлов.
file_absolute_paths- Список абсолютных путей к файлам для анализа - _Обязательный массив строк[]
-
toggle_automatic_analysis - Включение или отключение автоматического анализа SonarQube для IDE. Когда включено, SonarQube для IDE будет автоматически анализировать файлы по мере их изменения в рабочем каталоге. Когда отключено, автоматический анализ выключен.
enabled- Включить или отключить автоматический анализ - Обязательное логическое значение
Когда для вашей организации SonarQube Cloud включён расширенный анализ:
Требуется подключение рабочего пространства по адресу
/app/mcp-workspace
- run_advanced_code_analysis - Запуск расширенного анализа кода в SonarQube Cloud для одного файла. Организация определяется из конфигурации MCP.
projectKey- Ключ проекта - Обязательная строка (Игнорируется, если заданSONARQUBE_PROJECT_KEY)branchName- Имя ветки, используемое для получения последнего контекста анализа - Обязательная строкаfilePath- Путь к анализируемому файлу относительно проекта (например,src/main/java/MyClass.java). - Обязательная строкаfileScope- Определяет, к какой области относится файл: 'MAIN' или 'TEST' (по умолчанию: MAIN) - Строка
Покрытие
-
search_files_by_coverage — поиск файлов в проекте с сортировкой по покрытию (по возрастанию — сначала файлы с наихудшим покрытием). Этот инструмент помогает выявить файлы, требующие улучшения тестового покрытия.
projectKey— ключ проекта для поиска — Обязательная строка (Игнорируется, если заданSONARQUBE_PROJECT_KEY)branch— необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имён — СтрокаpullRequest— необязательный ключ/ID пулл-реквеста. Используйтеlist_pull_requestsдля получения допустимых ключей — СтрокаmaxCoverage— максимальный порог покрытия (0–100). Возвращать только файлы с покрытием <= этому значению — ЧислоpageIndex— индекс страницы (начиная с 1, по умолчанию: 1) — ЧислоpageSize— размер страницы (по умолчанию: 100, максимум: 500) — Число
-
get_file_coverage_details — получение построчной информации о покрытии для конкретного файла, включая сведения о том, какие именно строки не покрыты и в каких есть частично покрытые ветви. Этот инструмент помогает точно определить, куда добавить тестовое покрытие. Используйте после выявления файлов с низким покрытием через search_files_by_coverage.
key— ключ файла (например, my_project:src/foo/Bar.java) — Обязательная строкаbranch— необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имён — СтрокаpullRequest— необязательный ключ/ID пулл-реквеста. Используйтеlist_pull_requestsдля получения допустимых ключей — Строкаfrom— первая анализируемая строка (начиная с 1, по умолчанию: 1) — Числоto— последняя анализируемая строка (включительно). Если не указано, возвращаются все строки — Число
Риски зависимостей
Примечание: риски зависимостей доступны только при подключении к SonarQube Server 2025.4 Enterprise или выше с включённым SonarQube Advanced Security.
- search_dependency_risks — поиск проблем анализа состава ПО (рисков зависимостей) в проекте SonarQube в связке с релизами, присутствующими в анализируемом проекте, приложении или портфеле.
projectKey— ключ проекта — Обязательная строка (Игнорируется, если заданSONARQUBE_PROJECT_KEY)branch— необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имён — СтрокаpullRequest— необязательный ключ/ID пулл-реквеста. Используйтеlist_pull_requestsдля получения допустимых ключей — СтрокаpageIndex— необязательный индекс страницы (начиная с 1, по умолчанию: 1) — Целое числоpageSize— необязательный размер страницы. Должен быть больше 0 и не превышать 500 (по умолчанию: 100) — Целое число
Предприятия
Примечание: предприятия доступны только при подключении к SonarQube Cloud.
- list_enterprises — список предприятий, доступных в SonarQube Cloud, к которым у вас есть доступ. Используйте этот инструмент для получения идентификаторов предприятий, которые можно применять с другими инструментами.
enterpriseKey— необязательный ключ предприятия для фильтрации результатов — Строка
Задачи (Issues)
-
change_sonar_issue_status — изменение статуса задачи SonarQube на «accept», «falsepositive» или «reopen» (повторное открытие).
key— ключ задачи — Обязательная строкаstatus— новый статус задачи — Обязательное перечисление {"accept", "falsepositive", "reopen"}
-
search_sonar_issues_in_projects — поиск задач SonarQube в проектах моей организации.
projects— необязательный список проектов Sonar — String[]branch— необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имён — СтрокаpullRequest— необязательный ключ/ID пулл-реквеста. Используйте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[]issueKey— необязательный ключ задачи для получения конкретной задачи — Строкаp— необязательный номер страницы (по умолчанию: 1) — Целое числоps— необязательный размер страницы. Должен быть больше 0 и не превышать 500 (по умолчанию: 100) — Целое число
Уязвимости безопасности (Security Hotspots)
-
search_security_hotspots — поиск уязвимостей безопасности в проекте SonarQube.
projectKey— ключ проекта или приложения — Обязательная строка (Игнорируется, если заданSONARQUBE_PROJECT_KEY)hotspotKeys— список ключей конкретных уязвимостей безопасности через запятую — String[]branch— необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имён — СтрокаpullRequest— необязательный ключ/ID пулл-реквеста. Используйтеlist_pull_requestsдля получения допустимых ключей — Строкаfiles— необязательный список путей к файлам для фильтрации — String[]status— необязательный фильтр по статусу: TO_REVIEW, REVIEWED — Строкаresolution— необязательный фильтр по решению: FIXED, SAFE, ACKNOWLEDGED — СтрокаsinceLeakPeriod— фильтровать уязвимости, созданные с начала периода утечки (новый код) — ЛогическоеonlyMine— показывать только уязвимости, назначенные мне — Логическоеp— необязательный номер страницы (по умолчанию: 1) — Целое числоps— необязательный размер страницы. Должен быть больше 0 и не превышать 500 (по умолчанию: 100) — Целое число
-
show_security_hotspot — получение подробной информации о конкретной уязвимости безопасности, включая детали правила, контекст кода, потоки и комментарии.
hotspotKey— ключ уязвимости безопасности — Обязательная строка
-
change_security_hotspot_status — рецензирование уязвимости безопасности путём изменения её статуса. При отметке как REVIEWED необходимо указать решение (FIXED, SAFE или ACKNOWLEDGED).
hotspotKey— ключ уязвимости безопасности — Обязательная строкаstatus— новый статус — Обязательное перечисление {"TO_REVIEW", "REVIEWED"}resolution— решение, если статус REVIEWED — Перечисление {"FIXED", "SAFE", "ACKNOWLEDGED"}comment— необязательный комментарий к рецензии — Строка
Языки
- list_languages — список всех языков программирования, поддерживаемых в данном экземпляре SonarQube.
q— необязательный шаблон для сопоставления ключей/имён языков — Строка
Метрики (Measures)
- get_component_measures — получение метрик SonarQube для компонента (проекта, директории, файла).
projectKey— ключ проекта — Обязательная строка, если не настроенSONARQUBE_PROJECT_KEYbranch— необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имён — СтрокаmetricKeys— необязательные ключи метрик для получения (например, ncloc, complexity, violations, coverage) — String[]pullRequest— необязательный ключ/ID пулл-реквеста. Используйтеlist_pull_requestsдля получения допустимых ключей — Строка
Метрики (Metrics)
- search_metrics — поиск метрик SonarQube.
p— необязательный номер страницы (по умолчанию: 1) — Целое числоps— необязательный размер страницы. Должен быть больше 0 и не превышать 500 (по умолчанию: 100) — Целое число
Портфели
-
list_portfolios — список портфелей предприятия, доступных в SonarQube, с возможностью фильтрации и постраничного вывода.
Для SonarQube Server:
q— необязательный поисковый запрос для фильтрации портфелей по имени или ключу — Строкаfavorite— если true, возвращает только избранные портфели — ЛогическоеpageIndex— необязательный номер страницы, начиная с 1 (по умолчанию: 1) — Целое числоpageSize— необязательный размер страницы, максимум 500 (по умолчанию: 100) — Целое число
Для SonarQube Cloud:
enterpriseId— uuid предприятия. Можно опустить, только если передан параметр 'favorite' со значением true — Строкаq— необязательный поисковый запрос для фильтрации портфелей по имени — Строкаfavorite— обязательно true, если параметр 'enterpriseId' опущен. Если true, возвращает только портфели, добавленные в избранное текущим пользователем. Не может быть true, когда 'draft' равен true — Логическоеdraft— если true, возвращает только черновики, созданные текущим пользователем. Не может быть true, когда 'favorite' равен true — ЛогическоеpageIndex— необязательный индекс извлекаемой страницы (по умолчанию: 1) — Целое числоpageSize— необязательный размер извлекаемой страницы (по умолчанию: 50) — Целое число
Проекты
-
search_my_sonarqube_projects — поиск проектов SonarQube. Ответ разбивается на страницы.
page— необязательный номер страницы — Строка
-
list_branches — список долгоживущих веток проекта (например, main, develop, master). Возвращает только ветки
LONGв SonarQube Cloud и записиBRANCHв SonarQube Server — имена, безопасные для параметраbranchв других инструментах. Для пулл-реквестов используйтеlist_pull_requests.projectKey— ключ проекта (например, my_project) — Обязательная строка (Игнорируется, если заданSONARQUBE_PROJECT_KEY)
-
list_pull_requests — список всех пулл-реквестов проекта. Используйте этот инструмент для получения доступных пулл-реквестов перед анализом их покрытия, задач или качества. Возвращает ключ/ID пулл-реквеста, который можно использовать с другими инструментами (например, search_files_by_coverage, get_file_coverage_details). Для долгоживущих веток используйте
list_branches.projectKey— ключ проекта (например, my_project) — Обязательная строка (Игнорируется, если заданSONARQUBE_PROJECT_KEY)
Шлюзы качества (Quality Gates)
-
get_project_quality_gate_status — получение статуса шлюза качества для проекта SonarQube.
analysisId— необязательный ID анализа — Строкаbranch— необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имён — СтрокаprojectId— необязательный ID проекта — СтрокаprojectKey— необязательный ключ проекта — СтрокаpullRequest— необязательный ключ/ID пулл-реквеста. Используйтеlist_pull_requestsдля получения допустимых ключей — Строка
-
list_quality_gates — список всех шлюзов качества в моём SonarQube.
Правила
- show_rule — отображение подробной информации о правиле SonarQube.
key— ключ правила — Обязательная строка
Дублирования
-
search_duplicated_files — поиск файлов с дублированием кода в проекте SonarQube. По умолчанию автоматически извлекает все дублированные файлы по всем страницам (максимум 10 000 файлов). Возвращает только файлы с дублированиями.
projectKey— ключ проекта — Обязательная строка (Игнорируется, если заданSONARQUBE_PROJECT_KEY)branch— необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имён — СтрокаpullRequest— необязательный ключ/ID пулл-реквеста. Используйтеlist_pull_requestsдля получения допустимых ключей — СтрокаpageSize— необязательное количество результатов на странице при ручной постраничной навигации (макс.: 500). Если не указано, автоматически извлекаются все дублированные файлы — Целое числоpageIndex— необязательный номер страницы при ручной постраничной навигации (начиная с 1). Если не указано, автоматически извлекаются все дублированные файлы — Целое число
-
get_duplications — получение дублирований для файла. Требуется разрешение на просмотр (Browse) проекта файла.
key— ключ файла — Обязательная строкаbranch— необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имён — СтрокаpullRequest— необязательный ключ/ID пулл-реквеста. Используйтеlist_pull_requestsдля получения допустимых ключей — Строка
Исходный код (Sources)
-
get_raw_source - Получить исходный код в виде необработанного текста из SonarQube. Требуется разрешение 'See Source Code' на файл.
key- Ключ файла - Обязательная строкаbranch- Необязательное имя долгоживущей ветки (например, main, develop). Используйтеlist_branchesдля получения допустимых имен - СтрокаpullRequest- Необязательный ключ/ID запроса на слияние. Используйтеlist_pull_requestsдля получения допустимых ключей - Строка
-
get_scm_info - Получить информацию SCM об исходных файлах SonarQube. Требуется разрешение See Source Code на проект файла.
key- Ключ файла - Обязательная строкаcommits_by_line- Группировать строки по коммиту SCM, если значение false, иначе отображать коммиты для каждой строки - Строкаfrom- Первая возвращаемая строка. Начинается с 1 - Числоto- Последняя возвращаемая строка (включительно) - Число
Система
Примечание: Системные инструменты доступны только при подключении к 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 - Строка
-
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'.
name- Имя вебхука - Обязательная строкаurl- URL вебхука - Обязательная строкаprojectKey- Необязательный ключ проекта для вебхука, специфичного для проекта - Строкаsecret- Необязательный секрет вебхука для защиты полезной нагрузки - Строка
-
list_webhooks - Список всех вебхуков для организации или проекта SonarQube. Требуется разрешение 'Administer' на указанный проект или глобальное разрешение 'Administer'.
projectKey- Необязательный ключ проекта для отображения вебхуков, специфичных для проекта - Строка
Контекстное дополнение
Инструменты архитектуры
-
search_by_signature_patterns - Поиск элементов кода (классов, методов, интерфейсов, ...) по их сигнатурам объявления с использованием регулярных выражений.
include_code_regex_list- Список шаблонов регулярных выражений для сопоставления с сигнатурами - Обязательный String[]exclude_code_regex_list- Список шаблонов регулярных выражений для исключения из результатов - String[]include_glob- Шаблон glob для фильтрации файлов (например,*.java) - Строкаexclude_glob- Шаблон glob для исключения файлов - Строкаfields- Список полей, разделенных запятыми, для включения в ответ - Строкаlimit- Максимальное количество возвращаемых результатов (по умолчанию: 10) - Целое числоregex_lists_operator- Как объединять несколько шаблонов:OR(по умолчанию) илиAND- Строка
-
search_by_body_patterns - Поиск элементов кода по телу их реализации с использованием регулярных выражений. Полезно для обнаружения мест фактического использования API или шаблонов.
include_code_regex_list- Список шаблонов регулярных выражений для поиска в телах кода - Обязательный String[]exclude_code_regex_list- Список шаблонов регулярных выражений для исключения из результатов - String[]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/[email protected],pkg:maven/org.apache.logging.log4j/[email protected],pkg:pypi/[email protected]) - Обязательная строка
Переменные окружения контекстного дополнения
| Переменная | Описание | Обязательная | По умолчанию |
|---|---|---|---|
SONARQUBE_URL | URL SonarQube Cloud | Да | https://sonarcloud.io |
SONARQUBE_TOKEN | Токен аутентификации | Да | Отсутствует |
SONARQUBE_ORG | Ключ организации в SonarQube Cloud | Да | Отсутствует |
SONARQUBE_PROJECT_KEY | Ключ проекта в SonarQube Cloud | Да | Отсутствует |
SONAR_SQ_BRANCH | Явное переопределение ветки SonarQube * | Нет | Отсутствует |
SONARQUBE_DEBUG_ENABLED | Активировать отладочное логирование (для устранения неполадок) | Нет | False |
SONAR_LOG_LEVEL | Детализация логирования (TRACE, DEBUG, INFO, WARNING, ERROR) | Нет | INFO |
- Указывается, когда не используется git или когда имя ветки git не совпадает с именем ветки в SonarQube.
Конфигурация для конкретного проекта (рекомендуется)
Сначала экспортируйте 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, и эта функция должна быть включена для вашей организации.
-
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- Обязательная строка
-
list_agentic_readiness_assessments - Список всех оценок для проекта, начиная с самой новой. Используйте
get_agentic_readiness_assessmentдля получения полных результатов на уровне компонентов.projectKey- Ключ проекта для отображения оценок - Обязательная строка (Игнорируется, если определенSONARQUBE_PROJECT_KEY)branch- Фильтровать оценки по имени ветки. Не указывайте, чтобы отобразить оценки для всех веток - СтрокаpageIndex- Индекс страницы, начиная с 1 (по умолчанию: 1) - ЧислоpageSize- Количество элементов на странице, максимум 100 (по умолчанию: 50) - Число
Примеры запросов
После настройки SonarQube MCP Server вот несколько примеров запросов для распространенных реальных сценариев:
Исправление неудачного шлюза качества
My quality gate is failing for my project. Can you help me understand why and fix the most critical issues?
The quality gate on my feature branch is red. What do I need to fix to get it passing before I can merge to main?
Проверки перед релизом и слиянием
I'm about to merge my pull request <#247> for the <web-app> project. Can you check if there are any quality issues I should address first?
We're deploying to production tomorrow. Can you check the quality gate status and alert me to any critical issues in this branch?
Улучшение качества кода
I want to reduce technical debt in my project. What are the top issues I should prioritize?
Our code coverage dropped below 70%. Can you identify which files have the lowest coverage and help me improve it?
Понимание и исправление проблем
I have 15 new code smells in my latest commit. Can you explain what they are and help me fix them?
SonarQube flagged a critical security vulnerability in <AuthController.java>. What's the issue and how do I fix it?
Управление безопасностью и зависимостями
We need to pass a security audit. Can you check all our projects for security vulnerabilities and create a prioritized list of what needs to be fixed?
Are there any known vulnerabilities in our dependencies? Check this project for dependency risks.
Помощь в рецензировании кода
I just wrote this authentication function. Can you analyze it for security issues and code quality problems before I commit?
Review the changes in <src/database/migrations> for any potential bugs or security issues.
Мониторинг состояния проекта
Give me a health report for my project: quality gate status, number of bugs, Security Hotspots, and code coverage.
Compare code quality between our main branch and the develop branch. Are we introducing new issues?
Командное взаимодействие
What are the most common rule violations across all our projects? We might need to update our coding standards.
Show me all the issues that were marked as false positives in the last month. Are we seeing patterns that suggest our rules need adjustment?
Сборка
Предпочтительно использовать образ контейнера sonarsource/sonarqube-mcp.
Чтобы запустить сервер как отдельный 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.
Распространенные проблемы
«Функция не работает» или «Отсутствуют инструменты/функциональность»
Возможно, вы используете устаревший образ 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, включая использование Данных Результатов исключительно для целей вашей внутренней разработки программного обеспечения.