SonarQube

официальный

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

Что можно делать с SonarQube MCP?

  • Анализ фрагментов кода — Попросите ассистента выполнить локальный анализ кода фрагмента или файла через analyze_code_snippet, с опциональным монтированием рабочей области для избежания раздувания контекста.
  • Поиск и управление задачами — Поручить ассистенту находить, просматривать и обновлять задачи SonarQube, включая изменение их статуса, если не в режиме только для чтения.
  • Проверка качественных ворот и показателей — Запросить статус качественных ворот, метрики проекта, покрытие и риски зависимостей по вашим проектам SonarQube.
  • Просмотр критических зон безопасности — Позвольте ассистенту искать и проходить по критическим зонам безопасности, отмеченным в вашей кодовой базе.
  • Просмотр проектов и правил — Используйте ассистента для изучения проектов, списка поддерживаемых языков и поиска правил кодирования непосредственно в SonarQube.

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

Сервер MCP SonarQube

Build Quality Gate Status

Сервер MCP SonarQube — это сервер Model Context Protocol (MCP), который обеспечивает бесшовную интеграцию с SonarQube Server или Cloud для контроля качества кода и безопасности. Он также поддерживает анализ фрагментов кода непосредственно в контексте агента.

Быстрая настройка

Рекомендации по безопасности

🔒 Важно: Ваш токен SonarQube — это конфиденциальные учетные данные. Следуйте этим рекомендациям по безопасности:

При использовании команд CLI:

  • Избегайте жесткого кодирования токенов в аргументах командной строки — они сохраняются в истории оболочки
  • Используйте переменные окружения — задавайте токены в переменных окружения перед запуском команд

При использовании файлов конфигурации:

  • Никогда не сохраняйте токены в системе контроля версий
  • Используйте подстановку переменных окружения в файлах конфигурации, когда это возможно

🚀 Создайте свою конфигурацию

Самый быстрый способ начать работу — Генератор конфигурации сервера MCP SonarQube — интерактивный инструмент, который создает готовую к использованию конфигурацию для вашего предпочтительного клиента AI-агента.

Ручная настройка

Если вы предпочитаете настраивать все самостоятельно, самый простой способ — использовать наш образ контейнера sonarsource/sonarqube-mcp. Используйте sonarsource/sonarqube-mcp для автоматических обновлений (с --pull=always) или зафиксируйте версию тегом (например, sonarsource/sonarqube-mcp:1.19.0.2785) для воспроизводимых развертываний. Читайте ниже, если хотите собрать его локально.

Примечание: Хотя в примерах ниже используется docker, подойдет любой OCI-совместимый контейнерный рантайм (например, Podman, nerdctl). Просто замените docker на предпочитаемый инструмент.

Antigravity

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

  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 выполните следующую команду, чтобы добавить сервер MCP SonarQube:

/mcp add

Вам потребуется предоставить различную информацию о сервере MCP; для навигации между полями можно использовать клавишу Tab.

  • Для подключения к SonarQube Cloud:
Server Name: sonarqube
Server Type: Local (Press 1)
Command: docker
Arguments: run, --init, --pull=always, --rm, -i, -e, SONARQUBE_TOKEN, -e, SONARQUBE_ORG, sonarsource/sonarqube-mcp
Environment Variables: SONARQUBE_TOKEN=<YOUR_TOKEN>,SONARQUBE_ORG=<YOUR_ORG>
Tools: *

Для SonarQube Cloud US добавьте -e, SONARQUBE_URL в аргументы и SONARQUBE_URL=https://sonarqube.us в переменные окружения.

  • Для подключения к SonarQube Server:
Server Name: sonarqube
Server Type: Local (Press 1)
Command: docker
Arguments: run, --init, --pull=always, --rm, -i, -e, SONARQUBE_TOKEN, -e, SONARQUBE_URL, sonarsource/sonarqube-mcp
Environment Variables: SONARQUBE_TOKEN=<YOUR_USER_TOKEN>,SONARQUBE_URL=<YOUR_SERVER_URL>
Tools: *

Файл конфигурации находится по адресу ~/.copilot/mcp-config.json.

Кодинг-агент GitHub Copilot

Кодинг-агент GitHub Copilot может использовать сервер MCP SonarQube непосредственно в вашем CI/CD.

Чтобы добавить секреты в среду Copilot, следуйте документации Copilot. Только секреты с именами с префиксом COPILOT_MCP_ будут доступны для вашей конфигурации MCP.

В вашем репозитории GitHub перейдите в Settings -> Copilot -> Coding agent и добавьте следующую конфигурацию в раздел конфигурации MCP:

  • Для подключения к SonarQube Cloud:
{
  "mcpServers": {
    "sonarqube": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "--rm",
        "-i",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "COPILOT_MCP_SONARQUBE_TOKEN",
        "SONARQUBE_ORG": "COPILOT_MCP_SONARQUBE_ORG"
      },
      "tools": ["*"]
    }
  }
}

Для SonarQube Cloud US добавьте "-e", "SONARQUBE_URL" в массив args и "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL" в раздел env, затем установите секрет COPILOT_MCP_SONARQUBE_URL=https://sonarqube.us.

  • Для подключения к SonarQube Server:
{
  "mcpServers": {
    "sonarqube": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "--rm",
        "-i",
        "-e",
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_URL",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "COPILOT_MCP_SONARQUBE_USER_TOKEN",
        "SONARQUBE_URL": "COPILOT_MCP_SONARQUBE_URL"
      },
      "tools": ["*"]
    }
  }
}
Kiro

Создайте файл .kiro/settings/mcp.json в рабочем каталоге (или отредактируйте его, если он уже существует), добавьте следующую конфигурацию:

  • Для подключения к SonarQube Cloud:
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e", 
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_ORG",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_TOKEN>",
        "SONARQUBE_ORG": "<YOUR_ORG>"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

Для SonarQube Cloud US добавьте "-e", "SONARQUBE_URL" в массив args и "SONARQUBE_URL": "https://sonarqube.us" в раздел env.

  • Для подключения к SonarQube Server:
{
  "mcpServers": {
    "sonarqube": {
      "command": "docker",
      "args": [
        "run",
        "--init",
        "--pull=always",
        "-i",
        "--rm",
        "-e", 
        "SONARQUBE_TOKEN",
        "-e",
        "SONARQUBE_URL",
        "sonarsource/sonarqube-mcp"
      ],
      "env": {
        "SONARQUBE_TOKEN": "<YOUR_USER_TOKEN>",
        "SONARQUBE_URL": "<YOUR_SERVER_URL>"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
VS Code

Вы можете использовать следующие кнопки, чтобы упростить процесс установки в VS Code.

Install for SonarQube Cloud

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

Install for SonarQube Server

Windsurf

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

  1. Откройте Settings > Cascade > MCP Servers в Windsurf и выберите 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

💡 Совет: Мы рекомендуем регулярно обновлять последний образ или делать это перед сообщением о проблемах, чтобы у вас были самые актуальные функции и исправления.

Ручная установка

Вы можете вручную установить сервер MCP SonarQube, скопировав следующий фрагмент в файл конфигурации серверов MCP:

  • Для подключения к SonarQube Cloud:
{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_ORG",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>"
    }
  }
}
  • Для подключения к SonarQube Server:
{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run",
      "--init",
      "--pull=always",
      "-i",
      "--rm",
      "-e",
      "SONARQUBE_TOKEN",
      "-e",
      "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

Интеграция с SonarQube for IDE

Сервер MCP SonarQube может интегрироваться с 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Обязательный абсолютный путь к доступному для записи каталогу, где сервер MCP SonarQube будет хранить свои файлы (например, для создания, обновления и сохранения); автоматически предоставляется при использовании образа контейнера
SONARQUBE_PROJECT_KEYНеобязательный ключ проекта по умолчанию. При установке все инструменты, требующие ключ проекта, будут автоматически использовать это значение — параметр projectKey полностью удаляется из их схемы. Полезно при работе с одним проектом.
SONARQUBE_IDE_PORTНеобязательный номер порта от 64120 до 64130, используемый для подключения сервера MCP SonarQube к SonarQube for IDE.
SONARQUBE_DEBUG_ENABLEDПри установке в true включает отладочное журналирование. Отладочные журналы записываются как в файл журнала, так и в STDERR. Полезно для устранения проблем с подключением или конфигурацией. По умолчанию: false.
SONARQUBE_LOG_TO_FILE_DISABLEDПри установке в true полностью отключает запись журналов на диск. Файлы журналов не будут создаваться в STORAGE_PATH/logs/. Полезно в контейнерных или эфемерных средах, где файловое журналирование нежелательно. По умолчанию: false.

Монтирование рабочей области (снижение раздувания контекста)

По умолчанию инструмент анализа analyze_code_snippet требует, чтобы агент передавал полное содержимое файла в качестве аргумента fileContent. Для больших файлов или при анализе множества файлов в рамках сеанса это значительно увеличивает использование окна контекста и стоимость. Решение: смонтируйте каталог вашего проекта в контейнер по пути /app/mcp-workspace. Когда такое монтирование обнаружено, сервер читает файлы напрямую с диска, используя аргумент filePath относительно проекта — содержимое файлов никогда не передаётся через контекст агента.

{
  "args": [
    "run", "-i", "--rm", "--init", "--pull=always",
    "-e", "SONARQUBE_TOKEN",
    "-e", "SONARQUBE_ORG",
    "-v", "/path/to/your/project:/app/mcp-workspace",
    "sonarsource/sonarqube-mcp"
  ]
}

Когда монтирование активно:

  • run_advanced_code_analysis становится доступным, если ваша организация имеет на него право
  • analyze_code_snippet: требуется filePath, а fileContent не используется — сервер разрешает файл тем же способом

Выборочное включение наборов инструментов

По умолчанию включены только важные наборы инструментов для снижения накладных расходов на контекст. Вы можете включить дополнительные наборы инструментов по мере необходимости.

Переменная окруженияОписание
SONARQUBE_TOOLSETSСписок наборов инструментов для включения через запятую. Если задано, будут доступны только эти наборы. Если не задано, включены важные наборы по умолчанию (analysis, ide, issues, projects, quality-gates, rules, duplications, measures, security-hotspots, dependency-risks, coverage, cag). Примечание: набор projects всегда включён, так как он необходим для поиска ключей проектов для других операций. Инструменты контекста Vortex (устаревшее название: Context Augmentation/CAG) и инструменты анализа Vortex (устаревшее название: Advanced Analysis/A3S) доступны только в режиме stdio и используют единое комбинированное право организации — организация должна иметь право на оба, чтобы использовать любое из них. На SonarQube Server в stdio перечисляются контекст Vortex и run_advanced_code_analysis, когда оба хаба CAG и A3S имеют право. Предпочитайте единый ключ набора vortex. Устаревшие ключи cag и analysis по-прежнему работают; при их использовании без vortex выдаётся предупреждение при запуске и примечание об устаревании в инструкциях сервера. В режиме Streamable HTTP клиенты могут отправлять HTTP-заголовок SONARQUBE_TOOLSETS, чтобы дополнительно сузить этот список для каждого запроса, но не могут включить наборы инструментов сверх тех, с которыми был запущен сервер (см. транспорт Streamable HTTP ниже).
SONARQUBE_READ_ONLYЕсли задано значение true, включает режим только для чтения, который отключает все операции записи (например, изменение статуса проблемы). Этот фильтр суммируется с SONARQUBE_TOOLSETS, если заданы оба. По умолчанию: false. В режиме Streamable HTTP клиенты могут отправлять HTTP-заголовок SONARQUBE_READ_ONLY, чтобы дополнительно ограничить отдельные запросы режимом только для чтения, но не могут снять ограничение только для чтения на уровне сервера (см. транспорт Streamable HTTP ниже).
Доступные наборы инструментов
Набор инструментовКлючОписание
АнализanalysisИнструменты анализа кода (локальный анализ через analyze_code_snippet, устарело в пользу analyze_file_list/анализа Vortex)
IDEideИнструменты моста SonarQube для IDE (анализ файлов, переключение автоматического анализа) — в настоящее время также включены в analysis
ПроблемыissuesПоиск и управление проблемами SonarQube
Уязвимости безопасностиsecurity-hotspotsПоиск и проверка уязвимостей безопасности
ПроектыprojectsПросмотр и поиск проектов SonarQube
Качественные воротаquality-gatesДоступ к качественным воротам и их статусу
ПравилаrulesПросмотр и поиск правил SonarQube
ИсходникиsourcesДоступ к исходному коду и информации SCM
ДубликатыduplicationsПоиск дубликатов кода в проектах
МетрикиmeasuresПолучение метрик и измерений (включает инструменты метрик и измерений)
ЯзыкиlanguagesСписок поддерживаемых языков программирования
ПортфелиportfoliosУправление портфелями и предприятиями (Cloud и Server)
СистемаsystemИнструменты системного администрирования (только Server)
ВебхукиwebhooksУправление вебхуками
Риски зависимостейdependency-risksАнализ рисков зависимостей и проблем безопасности (SCA)
ПокрытиеcoverageИнструменты анализа и улучшения покрытия тестами
Контекст VortexcagИнструменты контекста Vortex — только stdio. Устарело в пользу vortex (старое название: Context Augmentation/CAG)
VortexvortexЕдиный, рекомендуемый набор, предоставляющий как инструменты контекста Vortex, так и инструменты анализа Vortex под одним именем (только stdio; Cloud требует комбинированного права организации; Server требует права на оба хаба)
Готовность к агентностиagentic-readinessИнструменты оценки готовности к агентности (SonarQube Cloud, требуется право организации)

Примеры

Включение наборов инструментов анализа, проблем и качественных ворот (с использованием Docker с SonarQube Cloud):

docker run --init --pull=always -i --rm \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_ORG="<org>" \
  -e SONARQUBE_TOOLSETS="analysis,issues,quality-gates" \
  sonarsource/sonarqube-mcp

Примечание: набор projects всегда включается автоматически, поэтому его не нужно указывать в SONARQUBE_TOOLSETS.

Включение режима только для чтения (с использованием Docker с SonarQube Cloud):

docker run --init --pull=always -i --rm \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_ORG="<org>" \
  -e SONARQUBE_READ_ONLY="true" \
  sonarsource/sonarqube-mcp

SonarQube Cloud

Для включения полной функциональности перед запуском сервера должны быть заданы следующие переменные окружения:

Переменная окруженияОписаниеОбязательно
SONARQUBE_TOKENВаш токен SonarQube CloudДа
SONARQUBE_ORGВаш ключ организации SonarQube CloudДа
SONARQUBE_URLПользовательский 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 2025.1 (SQS) или 25.1 (SonarQube Community Build) или новее. При запуске MCP-сервер считывает версию подключенного экземпляра и завершает работу с ошибкой, если она слишком старая (например, устаревшие выпуски Server 9.x/10.x и Community Build 24.x не поддерживаются). SonarQube Cloud не подлежит этой проверке.

⚠️ Подключение к SonarQube Server требует токен типа USER и не будет работать должным образом, если используются проектные или глобальные токены.

💡 Совет по настройке (режим stdio): Наличие SONARQUBE_ORG определяет, подключаетесь ли вы к SonarQube Cloud или Server. Если задан SONARQUBE_ORG, используется SonarQube Cloud; в противном случае используется SonarQube Server.

Режимы транспорта

Спецификация MCP определяет два механизма транспорта: Stdio и Streamable HTTP. MCP-сервер SonarQube поддерживает оба:

Транспорт 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

Примечание: В режиме Streamable HTTP (HTTP или HTTPS) сервер не сохраняет состояние — каждый запрос клиента должен включать заголовок Authorization: Bearer <token> с собственным токеном SonarQube пользователя. Для SonarQube Cloud организация определяется следующим образом:

  • Если SONARQUBE_ORG задан при запуске сервера, все запросы направляются в эту организацию. Клиенты не должны отправлять заголовок SONARQUBE_ORG — это приведет к ошибке.
  • Если SONARQUBE_ORG не задан при запуске сервера, каждый клиент обязан предоставлять заголовок SONARQUBE_ORG в каждом запросе. Клиенты также могут сузить видимые инструменты для каждого запроса, предоставляя заголовки SONARQUBE_TOOLSETS и/или SONARQUBE_READ_ONLY; они применяют дополнительную фильтрацию поверх конфигурации уровня сервера — они могут только уменьшить область действия, но никогда не расширить ее. Между запросами состояние сеанса не сохраняется.

Устарело: Заголовок запроса SONARQUBE_TOKEN все еще принимается для обратной совместимости, но будет удален в будущей версии. Переходите на Authorization: Bearer <token>.

3. HTTPS (Streamable HTTP через TLS) (рекомендуется для многопользовательских производственных развертываний)

Безопасный транспорт Streamable HTTP с шифрованием TLS. Требуются SSL-сертификаты.

✅ Рекомендуется для производства: Используйте HTTPS при развертывании MCP-сервера для нескольких пользователей через Streamable HTTP. Сервер по умолчанию привязывается к 127.0.0.1 (localhost) для безопасности.

Переменная окруженияОписаниеПо умолчанию
SONARQUBE_TRANSPORTУстановите в https, чтобы включить транспорт Streamable HTTP через TLSНе задано (stdio)
SONARQUBE_HTTP_PORTНомер порта (обычно 8443 для HTTPS)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 Streamable HTTP предназначен для многопользовательских производственных развертываний с надлежащими SSL-сертификатами.

Конечные точки службы

При работе в режиме Streamable 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>"
    }
  }
}

Примечание: Запускаете сервер из JAR-файла вместо контейнера? Монтирование тома выше устанавливает сертификаты в хранилище доверия ОС контейнера, которое сервер также читает. Если вы не можете использовать хранилище доверия ОС — особенно в Windows, где оно не используется — укажите JVM на хранилище доверия Java, содержащее сертификат CA: -Djavax.net.ssl.trustStore=/path/to/truststore.p12 -Djavax.net.ssl.trustStoreType=PKCS12 -Djavax.net.ssl.trustStorePassword=<passphrase>. Оно добавляется поверх доверенных сертификатов по умолчанию.

Прокси

MCP-сервер SonarQube поддерживает прокси 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Порт прокси SOCKS510801080
java.net.socks.usernameИмя пользователя SOCKS5 (если требуется аутентификация)—myuser
java.net.socks.passwordПароль SOCKS5 (если требуется аутентификация)—mypassword

Клиентский сертификат (Взаимный TLS)

Если ваш сервер SonarQube требует, чтобы клиенты предъявляли сертификат во время рукопожатия TLS (взаимный TLS), вы можете предоставить хранилище ключей PKCS12, смонтировав его в контейнер и передав его расположение через JAVA_OPTS.

Конфигурация

Использование хранилища ключей PKCS12

Смонтируйте ваш файл .p12 или .pfx в контейнер и установите переменную окружения JAVA_OPTS со свойствами хранилища ключей:

docker run --init --pull=always -i --rm \
  -v /path/to/client.p12:/etc/ssl/mcp/client.p12:ro \
  -e JAVA_OPTS="-Djavax.net.ssl.keyStore=/etc/ssl/mcp/client.p12 -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=<passphrase>" \
  -e SONARQUBE_TOKEN="<token>" \
  -e SONARQUBE_URL="<url>" \
  sonarsource/sonarqube-mcp

Примечание: Файл сертификата должен быть читаемым процессом контейнера. Проверьте и исправьте права доступа при необходимости:

ls -la /path/to/client.p12       # ищите -rw-r--r-- (644) или шире
chmod 644 /path/to/client.p12    # предоставьте доступ на чтение пользователю контейнера

Опустите -Djavax.net.ssl.keyStorePassword, если хранилище ключей не имеет парольной фразы. Обратите внимание, что используемая здесь парольная фраза будет видна через docker inspect или список процессов.

Конфигурация MCP с клиентским сертификатом

{
  "sonarqube": {
    "command": "docker",
    "args": [
      "run", "--init", "--pull=always", "-i", "--rm",
      "-v", "/path/to/client.p12:/etc/ssl/mcp/client.p12:ro",
      "-e", "JAVA_OPTS",
      "-e", "SONARQUBE_TOKEN",
      "-e", "SONARQUBE_URL",
      "sonarsource/sonarqube-mcp"
    ],
    "env": {
      "JAVA_OPTS": "-Djavax.net.ssl.keyStore=/etc/ssl/mcp/client.p12 -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStorePassword=<passphrase>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

Использование хранилища ключей PKCS12 с автономным JAR

При запуске сервера из JAR передайте свойства хранилища ключей как аргументы JVM перед -jar:

java \
  -Djavax.net.ssl.keyStore=/path/to/client.p12 \
  -Djavax.net.ssl.keyStoreType=PKCS12 \
  -Djavax.net.ssl.keyStorePassword=<passphrase> \
  -jar <path_to_sonarqube_mcp_server_jar>

Опустите -Djavax.net.ssl.keyStorePassword, если хранилище ключей не имеет парольной фразы.

Конфигурация MCP с клиентским сертификатом (JAR)

{
  "sonarqube": {
    "command": "java",
    "args": [
      "-Djavax.net.ssl.keyStore=/path/to/client.p12",
      "-Djavax.net.ssl.keyStoreType=PKCS12",
      "-Djavax.net.ssl.keyStorePassword=<passphrase>",
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}

Примечание: PEM-файлы сертификата и ключа (отдельные файлы .crt/.key) должны быть сначала преобразованы в формат PKCS12. Используйте openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12 для их преобразования.

Инструменты

Анализ

  • analyze_code_snippet - Анализировать содержимое файла с помощью анализаторов SonarQube для выявления проблем качества кода и безопасности. Всегда анализирует полное содержимое файла для точности. При желании можно отфильтровать результаты до конкретного фрагмента кода.

    Устарело: analyze_code_snippet будет удален в будущем выпуске. Подключите SonarQube for IDE, чтобы использовать analyze_file_list, или включите анализ Vortex для вашей организации, чтобы использовать run_advanced_code_analysis (см. ниже).

    Использование:

    • С смонтированным рабочим каталогом (рекомендуется): передайте filePath (относительный путь к проекту) — сервер читает файл напрямую, сохраняя содержимое файла вне контекстного окна агента
    • Без смонтированного рабочего каталога: передайте полный fileContent для анализа полного файла (сообщает обо всех проблемах)
    • Добавьте необязательный codeSnippet для фильтрации результатов — будут сообщены только проблемы в пределах фрагмента (местоположение фрагмента определяется автоматически)

    Параметры:

    • projectKey - Ключ проекта SonarQube - Обязательная строка (Игнорируется, когда определен SONARQUBE_PROJECT_KEY)
    • filePath - Относительный путь к файлу для анализа (например, src/main/java/MyClass.java). Используется, когда рабочий каталог смонтирован в /app/mcp-workspace - Строка
    • fileContent - Полное содержимое файла в виде строки. Требуется, когда рабочий каталог не смонтирован - Строка
    • codeSnippet - Фрагмент кода для фильтрации проблем (должен соответствовать содержимому в fileContent) - Строка
    • language - Язык кода (например, 'java', 'python', 'js', 'ts', 'tsx', 'jsx') - Строка
    • scope - Область файла: MAIN или TEST (по умолчанию: MAIN) - Строка

    Поддерживаемые языки: Java, Kotlin, Python, Ruby, Go, JavaScript (js, jsx), TypeScript (ts, tsx), JSP, PHP, XML, HTML, CSS, CloudFormation, Kubernetes, Terraform, Azure Resource Manager, Ansible, Docker, обнаружение секретов

Когда интеграция с SonarQube for IDE включена: (эти два инструмента помечены как в наборе инструментов analysis, так и в ide)

  • analyze_file_list - Анализировать файлы в текущем рабочем каталоге с помощью SonarQube for IDE. Этот инструмент подключается к запущенному экземпляру SonarQube for IDE для выполнения анализа качества кода для списка файлов.

    • file_absolute_paths - Список абсолютных путей к файлам для анализа - Обязательный String[]
  • toggle_automatic_analysis - Включить или отключить автоматический анализ SonarQube for IDE. Когда включено, SonarQube for IDE будет автоматически анализировать файлы по мере их изменения в рабочем каталоге. Когда отключено, автоматический анализ выключен.

    • enabled - Включить или отключить автоматический анализ - Обязательный Boolean

На сервере SonarQube stdio перечисляет инструменты контекста Vortex и run_advanced_code_analysis, когда оба хаба CAG и A3S имеют право на использование.

Когда анализ Vortex включен:

Требуется, чтобы рабочий каталог был смонтирован в /app/mcp-workspace

  • run_advanced_code_analysis - Запустить анализ Vortex для одного файла. Организация определяется из конфигурации MCP (сервер SonarQube использует заполнитель nil UUID).
    • projectKey - Ключ проекта - Обязательная строка (Игнорируется, когда определен SONARQUBE_PROJECT_KEY)
    • branch - Имя ветки, используемое для получения последнего контекста анализа - Обязательная строка
    • filePath - Относительный путь к файлу для анализа (например, src/main/java/MyClass.java). - Обязательная строка
    • fileScope - Определяет, из какой области происходит файл: 'MAIN' или 'TEST' (по умолчанию: MAIN) - Строка

Покрытие

  • search_files_by_coverage - Поиск файлов в проекте, отсортированных по покрытию (по возрастанию — сначала худшее покрытие). Этот инструмент помогает выявить файлы, требующие улучшения тестового покрытия.

    • projectKey - Ключ проекта для поиска - Обязательная строка (Игнорируется, когда определен SONARQUBE_PROJECT_KEY)
    • branch - Необязательное имя ветки для анализа на основе веток. Используйте list_branches для обнаружения допустимых имен - Строка
    • pullRequest - Необязательный ключ/ID запроса на включение. Используйте list_pull_requests для обнаружения допустимых ключей - Строка
    • maxCoverage - Максимальный порог покрытия (0-100). Возвращать только файлы с покрытием <= этого значения - Число
    • pageIndex - Индекс страницы (начиная с 1, по умолчанию: 1) - Число
    • pageSize - Размер страницы (по умолчанию: 100, максимум: 500) - Число
  • get_file_coverage_details - Получить информацию о покрытии построчно для конкретного файла, включая точные строки, которые не покрыты, и строки с частично покрытыми ветками. Этот инструмент помогает точно определить, где добавить тестовое покрытие. Используйте после выявления файлов с низким покрытием с помощью search_files_by_coverage.

    • key - Ключ файла (например, my_project:src/foo/Bar.java) - Обязательная строка
    • branch - Необязательное имя ветки для анализа на основе веток. Используйте list_branches для обнаружения допустимых имен - Строка
    • pullRequest - Необязательный ключ/ID запроса на включение. Используйте list_pull_requests для обнаружения допустимых ключей - Строка
    • from - Первая строка для анализа (начиная с 1, по умолчанию: 1) - Число
    • to - Последняя строка для анализа (включительно). Если не указано, возвращаются все строки - Число

Риски зависимостей

Примечание: Риски зависимостей доступны только при подключении к SonarQube Server 2025.4 Enterprise или выше с включенным SonarQube Advanced Security.

  • search_dependency_risks - Поиск проблем анализа состава программного обеспечения (риски зависимостей) проекта SonarQube, в паре с релизами, которые появляются в анализируемом проекте, приложении или портфеле.
    • projectKey - Ключ проекта - Обязательная строка (Игнорируется, когда определен SONARQUBE_PROJECT_KEY)
    • branch - Необязательное имя ветки для анализа на основе веток. Используйте list_branches для обнаружения допустимых имен - Строка
    • pullRequest - Необязательный ключ/ID запроса на включение. Используйте list_pull_requests для обнаружения допустимых ключей - Строка
    • pageIndex - Необязательный индекс страницы (начиная с 1, по умолчанию: 1) - Целое число
    • pageSize - Необязательный размер страницы. Должен быть больше 0 и меньше или равен 500 (по умолчанию: 100) - Целое число

Предприятия

Примечание: Предприятия доступны только при подключении к SonarQube Cloud.

  • list_enterprises - Перечислить предприятия, доступные в SonarQube Cloud, к которым у вас есть доступ. Используйте этот инструмент для обнаружения идентификаторов предприятий, которые можно использовать с другими инструментами.
    • enterpriseKey - Необязательный ключ предприятия для фильтрации результатов - Строка

Проблемы

  • change_sonar_issue_status - Изменить статус проблемы SonarQube на "accept", "falsepositive" или "reopen" проблемы.

    • key - Ключ проблемы - Обязательная строка
    • status - Новый статус проблемы - Обязательное перечисление {"accept", "falsepositive", "reopen"}
    • comment - Необязательный комментарий, объясняющий изменение статуса - Строка
  • search_sonar_issues_in_projects - Поиск проблем SonarQube в проектах моей организации.

    • projectKeys - Необязательный список ключей проектов SonarQube - String[]
    • branch - Необязательное имя ветки для анализа на основе веток. Используйте 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[]
    • tags - Необязательный список тегов проблем для фильтрации. Теги в нижнем регистре - String[]
    • inNewCodePeriod - Возвращать только проблемы в периоде нового кода. Требуется ровно одна запись среди projectKeys и files - Логическое значение
    • issueKey - Необязательный ключ проблемы для получения конкретной проблемы - Строка
    • pageIndex - Необязательный индекс страницы (начиная с 1, по умолчанию: 1) - Целое число
    • pageSize - Необязательный размер страницы. Должен быть больше 0 и меньше или равен 500 (по умолчанию: 100) - Целое число

Уязвимости безопасности

  • search_security_hotspots - Поиск уязвимостей безопасности в проекте SonarQube.

    • projectKey - Ключ проекта или приложения - Обязательная строка (Игнорируется, когда определен SONARQUBE_PROJECT_KEY)
    • hotspotKeys - Список конкретных ключей уязвимостей безопасности через запятую для получения - String[]
    • branch - Необязательное имя ветки для анализа на основе веток. Используйте list_branches для обнаружения допустимых имен - Строка
    • pullRequest - Необязательный ключ/ID запроса на включение. Используйте list_pull_requests для обнаружения допустимых ключей - Строка
    • files - Необязательный список путей к файлам для фильтрации - String[]
    • status - Необязательный фильтр статуса: TO_REVIEW, REVIEWED - Строка
    • resolution - Необязательный фильтр разрешения: FIXED, SAFE, ACKNOWLEDGED - Строка
    • sinceLeakPeriod - Фильтровать уязвимости, созданные с момента периода утечки (новый код) - Логическое значение
    • onlyMine - Показывать только уязвимости, назначенные мне - Логическое значение
    • pageIndex - Необязательный индекс страницы (начиная с 1, по умолчанию: 1) - Целое число
    • pageSize - Необязательный размер страницы. Должен быть больше 0 и меньше или равен 500 (по умолчанию: 100) - Целое число
  • show_security_hotspot - Получить подробную информацию о конкретной уязвимости безопасности, включая детали правила, контекст кода, потоки и комментарии.

    • hotspotKey - Ключ уязвимости безопасности - Обязательная строка
  • change_security_hotspot_status - Проверить Security Hotspot, изменив его статус. При пометке как REVIEWED необходимо указать резолюцию (FIXED, SAFE или ACKNOWLEDGED).

    • hotspotKey - Ключ Security Hotspot - Обязательная строка
    • status - Новый статус - Обязательное перечисление {"TO_REVIEW", "REVIEWED"}
    • resolution - Резолюция, когда статус REVIEWED - Перечисление {"FIXED", "SAFE", "ACKNOWLEDGED"}
    • comment - Необязательный комментарий к проверке - Строка

Языки

  • list_languages - Список всех языков программирования, поддерживаемых в этом экземпляре SonarQube.
    • q - Необязательный шаблон для сопоставления ключей/названий языков - Строка

Показатели

  • get_component_measures - Получить показатели SonarQube для компонента (проект, каталог, файл).
    • projectKey - Ключ проекта - Обязательная строка, если не задан SONARQUBE_PROJECT_KEY
    • branch - Необязательное имя ветки для анализа на основе ветки. Используйте list_branches для поиска допустимых имен - Строка
    • metricKeys - Необязательные ключи метрик для получения (например, ncloc, complexity, violations, coverage) - String[]
    • pullRequest - Необязательный ключ/ID pull request. Используйте list_pull_requests для поиска допустимых ключей - Строка

Метрики

  • search_metrics - Поиск метрик SonarQube.
    • pageIndex - Необязательный индекс страницы с 1 (по умолчанию: 1) - Целое число
    • pageSize - Необязательный размер страницы. Должен быть больше 0 и меньше или равен 500 (по умолчанию: 100) - Целое число

Портфели

  • list_portfolios - Список корпоративных портфелей, доступных в SonarQube, с параметрами фильтрации и постраничного вывода.

    Для SonarQube Server:

    • q - Необязательный поисковый запрос для фильтрации портфелей по имени или ключу - Строка
    • favorite - Если true, возвращаются только избранные портфели - Логическое значение
    • pageIndex - Необязательный номер страницы с 1 (по умолчанию: 1) - Целое число
    • pageSize - Необязательный размер страницы, максимум 500 (по умолчанию: 100) - Целое число

    Для SonarQube Cloud:

    • enterpriseId - Enterprise 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. Ответ разбит на страницы.

    • pageIndex - Необязательный индекс страницы с 1 (по умолчанию: 1) - Целое число
    • pageSize - Необязательный размер страницы. Должен быть больше 0 и меньше или равен 500 (по умолчанию: 500) - Целое число
    • q - Необязательный поисковый запрос для фильтрации проектов по имени (частичное совпадение) или ключу (точное совпадение) - Строка
  • list_branches - Список проанализированных веток для проекта.

    • SonarQube Cloud: возвращает долгоживущие (LONG) и короткоживущие (SHORT) ветки с полями type и mergeBranch. Необязательный фильтр branchTypes: ALL (по умолчанию), LONG или SHORT.
    • SonarQube Server: возвращает все проанализированные ветки (имя, качественный шлюз, дата анализа). Фильтр type, mergeBranch или branchTypes отсутствует.
    • Используйте возвращенные имена веток как параметр branch в других инструментах. Для анализа pull request используйте list_pull_requests.
    • projectKey - Ключ проекта (например, my_project) - Обязательная строка (Игнорируется, если задан SONARQUBE_PROJECT_KEY)
    • branchTypes - (Только SonarQube Cloud) Необязательный фильтр: ALL (по умолчанию), LONG или SHORT - Перечисление {"ALL", "LONG", "SHORT"}
  • list_pull_requests - Список всех pull request для проекта. Используйте этот инструмент для поиска pull request для анализа с оформлением PR (покрытие, проблемы, качественный шлюз). Возвращает ключ/ID pull request, который можно использовать с другими инструментами. Для анализа на основе ветки без pull request используйте list_branches.

    • projectKey - Ключ проекта (например, my_project) - Обязательная строка (Игнорируется, если задан SONARQUBE_PROJECT_KEY)

Качественные шлюзы

  • get_project_quality_gate_status - Получить статус качественного шлюза для проекта SonarQube.

    • analysisId - Необязательный ID анализа - Строка
    • branch - Необязательное имя ветки для анализа на основе ветки. Используйте list_branches для поиска допустимых имен - Строка
    • projectId - Необязательный ID проекта - Строка
    • projectKey - Необязательный ключ проекта - Строка
    • pullRequest - Необязательный ключ/ID pull request. Используйте list_pull_requests для поиска допустимых ключей - Строка
  • list_quality_gates - Список всех качественных шлюзов в моем SonarQube.

Правила

  • show_rule - Показывает подробную информацию о правиле SonarQube.
    • key - Ключ правила - Обязательная строка

Дубликаты

  • search_duplicated_files - Поиск файлов с дублированием кода в проекте SonarQube. По умолчанию автоматически получает все дублированные файлы на всех страницах (максимум 10 000 файлов). Возвращает только файлы с дубликатами.

    • projectKey - Ключ проекта - Обязательная строка (Игнорируется, если задан SONARQUBE_PROJECT_KEY)
    • branch - Необязательное имя ветки для анализа на основе ветки. Используйте list_branches для поиска допустимых имен - Строка
    • pullRequest - Необязательный ключ/ID pull request. Используйте list_pull_requests для поиска допустимых ключей - Строка
    • pageSize - Необязательное количество результатов на страницу для ручной разбивки на страницы (максимум: 500). Если не указано, автоматически получает все дублированные файлы - Целое число
    • pageIndex - Необязательный номер страницы для ручной разбивки на страницы (начиная с 1). Если не указано, автоматически получает все дублированные файлы - Целое число
  • get_duplications - Получить дубликаты для файла. Требуется разрешение Browse на проект файла.

    • key - Ключ файла - Обязательная строка
    • branch - Необязательное имя ветки для анализа на основе ветки. Используйте list_branches для поиска допустимых имен - Строка
    • pullRequest - Необязательный ключ/ID pull request. Используйте list_pull_requests для поиска допустимых ключей - Строка

Исходные коды

  • get_raw_source - Получить исходный код в виде обычного текста из SonarQube. Требуется разрешение 'See Source Code' на файл.

    • key - Ключ файла - Обязательная строка
    • branch - Необязательное имя ветки для анализа на основе ветки. Используйте list_branches для поиска допустимых имен - Строка
    • pullRequest - Необязательный ключ/ID pull request. Используйте 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), версию и id.

Вебхуки

  • create_webhook - Создать новый вебхук для организации или проекта SonarQube. Требуется разрешение 'Administer' на указанный проект или глобальное разрешение 'Administer'.

    • name - Имя вебхука - Обязательная строка
    • url - URL вебхука - Обязательная строка
    • projectKey - Необязательный ключ проекта для вебхука конкретного проекта - Строка
    • secret - Необязательный секрет вебхука для защиты полезной нагрузки вебхука - Строка
  • list_webhooks - Список всех вебхуков для организации или проекта SonarQube. Требуется разрешение 'Administer' на указанный проект или глобальное разрешение 'Administer'.

    • projectKey - Необязательный ключ проекта для списка вебхуков конкретного проекта - Строка

Расширение контекста

Инструменты архитектуры
  • search_by_signature_patterns - Поиск элементов кода (классы, методы, интерфейсы и т. д.) по их сигнатурам объявления с использованием regex-шаблонов.

    • include_code_regex_list - Список regex-шаблонов для сопоставления с сигнатурами - Обязательный String[]
    • exclude_code_regex_list - Список regex-шаблонов для исключения из результатов - String[]
    • include_glob - Глобальный шаблон фильтра файлов (например, *.java) - Строка
    • exclude_glob - Глобальный шаблон исключения файлов - Строка
    • fields - Список полей через запятую для включения в ответ - Строка
    • limit - Максимальное количество результатов для возврата (по умолчанию: 10) - Целое число
    • regex_lists_operator - Как комбинировать несколько шаблонов: OR (по умолчанию) или AND - Строка
  • search_by_body_patterns - Поиск элементов кода по их телу реализации с использованием regex-шаблонов. Полезно для поиска мест, где API или шаблоны фактически используются.

    • include_code_regex_list - Список regex-шаблонов для сопоставления в телах кода - Обязательный String[]
    • exclude_code_regex_list - Список regex-шаблонов для исключения из результатов - String[]
    • include_glob - Глобальный шаблон фильтра файлов - Строка
    • exclude_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. Формат: pkg:<type>/<namespace>/<name>@<version> (например, pkg:npm/lodash@4.17.21, pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1, pkg:pypi/django@3.2.0) — Обязательная строка
Переменные окружения для расширения контекста
ПеременнаяОписаниеОбязательнаяПо умолчанию
SONARQUBE_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) — Число

Примеры запросов

После настройки MCP-сервера SonarQube вот несколько примеров запросов для распространённых реальных сценариев:

Исправление неудачного Quality Gate
My quality gate is failing for my project. Can you help me understand why and fix the most critical issues?
The quality gate on my feature branch is red. What do I need to fix to get it passing before I can merge to main?
Проверки перед выпуском и слиянием
I'm about to merge my pull request <#247> for the <web-app> project. Can you check if there are any quality issues I should address first?
We're deploying to production tomorrow. Can you check the quality gate status and alert me to any critical issues in this branch?
Улучшение качества кода
I want to reduce technical debt in my project. What are the top issues I should prioritize?
Our code coverage dropped below 70%. Can you identify which files have the lowest coverage and help me improve it?
Понимание и исправление проблем
I have 15 new code smells in my latest commit. Can you explain what they are and help me fix them?
SonarQube flagged a critical security vulnerability in <AuthController.java>. What's the issue and how do I fix it?
Управление безопасностью и зависимостями
We need to pass a security audit. Can you check all our projects for security vulnerabilities and create a prioritized list of what needs to be fixed?
Are there any known vulnerabilities in our dependencies? Check this project for dependency risks.
Помощь в проверке кода
I just wrote this authentication function. Can you analyze it for security issues and code quality problems before I commit?
Review the changes in <src/database/migrations> for any potential bugs or security issues.
Мониторинг состояния проекта
Give me a health report for my project: quality gate status, number of bugs, Security Hotspots, and code coverage.
Compare code quality between our main branch and the develop branch. Are we introducing new issues?
Командное сотрудничество
What are the most common rule violations across all our projects? We might need to update our coding standards.
Show me all the issues that were marked as false positives in the last month. Are we seeing patterns that suggest our rules need adjustment?

Сборка

Предпочтительно использовать образ контейнера sonarsource/sonarqube-mcp.

Чтобы запустить сервер как автономный JAR без Docker, загрузите готовую сборку из репозитория двоичных файлов SonarSource. Каждая выпущенная версия публикуется там как sonarqube-mcp-server-<version>.jar (например, sonarqube-mcp-server-1.19.0.2785.jar).

Запуск из JAR

Загрузите JAR для нужной версии из репозитория двоичных файлов, затем настройте ваш MCP-клиент для запуска с Java 21 или новее:

  • Для подключения к SonarQube Cloud:
{
  "sonarqube": {
    "command": "java",
    "args": [
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "STORAGE_PATH": "<path_to_your_mcp_storage>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_ORG": "<org>"
    }
  }
}
  • Для подключения к SonarQube Server:
{
  "sonarqube": {
    "command": "java",
    "args": [
      "-jar",
      "<path_to_sonarqube_mcp_server_jar>"
    ],
    "env": {
      "STORAGE_PATH": "<path_to_your_mcp_storage>",
      "SONARQUBE_TOKEN": "<token>",
      "SONARQUBE_URL": "<url>"
    }
  }
}
Сборка из исходного кода

Для сборки MCP-сервера SonarQube требуется Java Development Kit (JDK) версии 21 или новее.

Выполните следующую команду Gradle для очистки проекта и сборки приложения:

./gradlew clean build -x test

JAR-файл будет создан в build/libs/.

После добавления или обновления зависимостей перегенерируйте файлы блокировки:

./gradlew :dependencies --write-locks
./gradlew :its:dependencies --write-locks

Используйте конфигурацию Запуск из JAR выше, указав <path_to_sonarqube_mcp_server_jar> на JAR в build/libs/.

Устранение неполадок

Журналы приложения по умолчанию записываются в файл STORAGE_PATH/logs/mcp.log. Чтобы полностью отключить ведение журнала в файл, установите SONARQUBE_LOG_TO_FILE_DISABLED=true.

Распространённые проблемы

«Версия сервера SonarQube не поддерживается»

MCP-сервер проверяет версию подключённого SonarQube Server при запуске. Если экземпляр старше 2025.1 (SQS) или 25.1 (SQCB), запуск завершается ошибкой:

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

Решение: Обновите SonarQube Server до поддерживаемой версии. Эта проверка применяется только при подключении к SonarQube Server (SONARQUBE_URL без SONARQUBE_ORG), а не к SonarQube Cloud.

«Функция не работает» или «Отсутствуют инструменты/функциональность»

Возможно, вы используете устаревший образ Docker. Docker кэширует образы локально, поэтому вы не будете автоматически получать обновления.

Решение: Обновите до последней версии:

docker pull sonarsource/sonarqube-mcp

После загрузки последнего образа перезапустите ваш MCP-клиент, чтобы использовать обновлённую версию.

При желании добавьте флаг --pull=always в вашу команду docker run, чтобы всегда проверять и загружать последнюю версию:

docker run --init --pull=always -i --rm -e SONARQUBE_TOKEN -e SONARQUBE_ORG sonarsource/sonarqube-mcp

«Я хочу закрепить конкретную версию»

Просмотрите доступные теги на sonarsource/sonarqube-mcp и укажите нужную версию:

docker pull sonarsource/sonarqube-mcp:1.19.0.2785

docker run --init -i --rm \
  -e SONARQUBE_TOKEN -e SONARQUBE_ORG \
  sonarsource/sonarqube-mcp:1.19.0.2785

В конфигурации вашего MCP-клиента используйте sonarsource/sonarqube-mcp:<version> вместо sonarsource/sonarqube-mcp и удалите --pull=always, чтобы Docker не обновлял образ незаметно.

Данные и телеметрия

Этот сервер собирает анонимные данные об использовании и отправляет их в SonarSource для улучшения продукта. Исходный код или IP-адрес не собираются, и SonarSource не передаёт данные третьим лицам. Сбор телеметрии можно отключить с помощью следующего системного свойства или переменной окружения: TELEMETRY_DISABLED=true. Нажмите здесь, чтобы увидеть образец собираемых данных.

Лицензия

Copyright 2025 SonarSource.

Лицензировано в соответствии с SONAR Source-Available License v1.0. Использование MCP-сервера SonarQube в соответствии с этой документацией является неконкурентной целью и поэтому разрешено в рамках SSAL.

Ваше использование SonarQube через MCP регулируется Условиями обслуживания SonarQube Cloud или Условиями SonarQube Server, включая использование данных результатов исключительно для внутренних целей разработки программного обеспечения.