SonarQube MCP Server

официальный

Обеспечивает бесшовную интеграцию с SonarQube Server или Cloud и позволяет анализировать фрагменты кода непосредственно в контексте агента

Документация

Сервер SonarQube MCP

Build Quality Gate Status

Сервер 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. Следуйте этим инструкциям:

  1. Откройте Боковую панель агента
  2. Нажмите на три точки (...) в правом верхнем углу и выберите MCP Servers
  3. Найдите SonarQube и выберите Install
  4. Предоставьте требуемый пользовательский токен 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:

Install for SonarQube Cloud

Для SonarQube Cloud US вручную добавьте "SONARQUBE_URL": "https://sonarqube.us" в секцию env вашей MCP-конфигурации после установки.

  • Для подключения к SonarQube Server:

Install for SonarQube Server

Gemini CLI

Примечание: Расширение Gemini CLI перемещено в репозиторий sonarqube-agent-plugins. Пожалуйста, устанавливайте его оттуда в дальнейшем.

Вы можете установить наше расширение MCP-сервера с помощью следующей команды:

gemini extensions install https://github.com/SonarSource/sonarqube-agent-plugins

Перед запуском Gemini вам потребуется установить необходимые переменные окружения:

Требуемые переменные окружения:

  • Для SonarQube Cloud:

    • SONARQUBE_TOKEN — Ваш токен SonarQube Cloud
    • SONARQUBE_ORG — Ключ вашей организации
    • SONARQUBE_URL — (Опционально) Установите в https://sonarqube.us для SonarQube Cloud US
  • Для SonarQube Server:

    • SONARQUBE_TOKEN — Ваш пользовательский токен SonarQube Server
    • SONARQUBE_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.

Install for SonarQube Cloud

Для SonarQube Cloud US вручную добавьте "SONARQUBE_URL": "https://sonarqube.us" в секцию env вашей MCP-конфигурации после установки.

Install for SonarQube Server

Windsurf

Сервер SonarQube MCP доступен как плагин Windsurf. Следуйте этим инструкциям:

  1. Откройте Windsurf Settings > Cascade > MCP Servers и выберите Open MCP Marketplace
  2. Найдите sonarqube в Cascade MCP Marketplace
  3. Выберите SonarQube MCP Server и нажмите Install
  4. Добавьте требуемый пользовательский токен 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 ниже).
Доступные наборы инструментов
Набор инструментовКлючОписание
AnalysisanalysisИнструменты анализа кода (локальный анализ и расширенный удалённый анализ)
IssuesissuesПоиск и управление задачами SonarQube
Security Hotspotssecurity-hotspotsПоиск и проверка уязвимостей безопасности
ProjectsprojectsПросмотр и поиск проектов SonarQube
Quality Gatesquality-gatesДоступ к шлюзам качества и их статусу
RulesrulesПросмотр и поиск правил SonarQube
SourcessourcesДоступ к исходному коду и информации SCM
DuplicationsduplicationsПоиск дублирования кода в проектах
MeasuresmeasuresПолучение метрик и измерений (включает инструменты измерений и метрик)
LanguageslanguagesСписок поддерживаемых языков программирования
PortfoliosportfoliosУправление портфелями и предприятиями (Cloud и Server)
SystemsystemИнструменты системного администрирования (только Server)
WebhookswebhooksУправление вебхуками
Dependency Risksdependency-risksАнализ рисков зависимостей и проблем безопасности (SCA)
CoveragecoverageИнструменты анализа и улучшения тестового покрытия
Context AugmentationcagИнструменты Context Augmentation (только режим stdio, требуются права организации)
Agentic Readinessagentic-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_URLURL вашего 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 HTTPSONARQUBE_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.

Конечная точкаМетодОписаниеПример ответа
/healthGETПроверка работоспособности. Возвращает 200 OK с пустым телом, как только сервер начинает принимать запросы.(пустое тело)
/infoGETВозвращает версию 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 прокси10801080
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_KEY
    • branch — необязательное имя долгоживущей ветки (например, 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 - Проверить стороннюю зависимость на наличие уязвимостей безопасности, вредоносного ПО в цепочке поставок и соответствие лицензиям перед ее добавлением или обновлением.
Переменные окружения контекстного дополнения
ПеременнаяОписаниеОбязательнаяПо умолчанию
SONARQUBE_URLURL 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, включая использование Данных Результатов исключительно для целей вашей внутренней разработки программного обеспечения.