sonarqube-mcp
👁 PyPI
👁 Python
👁 License: MIT
MCP-сервер для SonarQube. Позволяет LLM-агенту (Claude Code, Cursor, OpenCode и т. д.) находить проекты, получать основные метрики, проверять статус Quality Gate, искать проблемы с фильтрами по серьезности/типу и ранжировать проекты по худшему значению любой метрики.
Python, FastMCP, транспорт stdio.
Работает с любым экземпляром SonarQube 9.x / 10.x (self-hosted) и с SonarCloud.
Почему еще один SonarQube MCP?
Существует несколько сообществ MCP для SonarQube, но они обычно ограничиваются чтением данных по одному проекту. Этот сервер добавляет ранжирование между проектами (sonarqube_worst_metrics) — операцию, которую руководитель действительно выполняет во время сеанса триажа: «покажи мне 10 сервисов с худшим покрытием в организации». Все инструменты работают только для чтения и безопасно параметризованы (валидация ввода Pydantic, белые списки серьезности/типа).
Related MCP server: sonarqube-api-mcp
Основные особенности дизайна
Аннотации инструментов — все пять инструментов содержат
readOnlyHint: True,destructiveHint: False,idempotentHint: True. Ничто не может изменить данные в SonarQube через этот сервер.Структурированный вывод — каждый инструмент возвращает типизированную полезную нагрузку (TypedDict) + сводку в формате markdown, поэтому клиенты как с поддержкой структурированного контента, так и без нее, получают полезный ответ.
Структурированные ошибки — коды 401 / 403 / 404 / 400 / 429 / 5xx сопоставлены с практическими подсказками (например, «пересоздайте токен», «проверьте ключ проекта с помощью sonarqube_list_projects»).
Валидация ввода Pydantic для каждого аргумента; фильтры серьезности/типа проверяются на соответствие допустимым перечислениям SonarQube перед отправкой запроса.
Ранжирование худших метрик между проектами — выполняет пакетные вызовы
/api/measures/searchв фоновом режиме, сортирует по возрастанию или убыванию в зависимости от того, является ли большее значение худшим для выбранной метрики.
Функции (5 инструментов)
Обнаружение
sonarqube_list_projects— постраничный поиск проектов с дополнительным текстовым фильтром
Анализ одного проекта
sonarqube_project_metrics— измерения для одного проекта (набор по умолчанию охватывает ошибки / покрытие / запахи кода / рейтинги / ncloc / тесты / alert_status)sonarqube_quality_gate_status— статус Quality Gate + сбои по условиям
Триаж проблем
sonarqube_get_issues— поиск проблем, отфильтрованный по серьезности / типу / статусу решения
Ранжирование между проектами
sonarqube_worst_metrics— топ-N проектов, отсортированных по худшему значению метрики (например, худшее покрытие, больше всего ошибок)
Установка
Требуется Python 3.10+.
# via uvx (recommended — no install, just run)
uvx --from sonarqube-mcp sonarqube-mcp
# or via pipx
pipx install sonarqube-mcpКонфигурация
claude mcp add sonarqube -s project \
--env SONARQUBE_URL=https://sonar.example.com \
--env SONARQUBE_TOKEN=squ_your_token \
--env SONARQUBE_SSL_VERIFY=true \
-- uvx --from sonarqube-mcp sonarqube-mcpИли в .mcp.json:
{
"mcpServers": {
"sonarqube": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "sonarqube-mcp", "sonarqube-mcp"],
"env": {
"SONARQUBE_URL": "https://sonar.example.com",
"SONARQUBE_TOKEN": "${SONARQUBE_TOKEN}",
"SONARQUBE_SSL_VERIFY": "true"
}
}
}
}Проверка:
claude mcp list
# sonarqube: uvx --from sonarqube-mcp sonarqube-mcp - ✓ ConnectedПеременные окружения
Переменная | Обязательно | Описание |
| да | URL SonarQube (без косой черты в конце) |
| да | Токен Bearer. Создайте в: My Account → Security → Tokens |
| нет |
|
Примечание о прокси-серверах HTTP. Клиент намеренно отключает обнаружение прокси на основе переменных окружения (trust_env=False), поскольку self-hosted SonarQube обычно доступен только во внутренней сети. Если вы подключаетесь к SonarCloud или любому SonarQube, который находится за корпоративным прокси, вам в настоящее время потребуется удалить переменные прокси на уровне процесса — настройка SONARQUBE_TRUST_ENV_PROXY запланирована для следующего выпуска.
Пример использования
«Перечислить все проекты SonarQube, соответствующие 'einvy'»
«Какой статус Quality Gate для
einvy:aut_einvy?»«Покажи мне 10 проектов с наибольшим количеством ошибок»
«Найти все уязвимости BLOCKER / CRITICAL в
einvy:aut_einvy»«Какое покрытие у
einvy:qa_assistant?»«Топ-5 проектов с худшим покрытием, соответствующих запросу 'einvy'»
Направления метрик (используются sonarqube_worst_metrics)
Больше — хуже (сортировка по убыванию — больше значит хуже):
bugs, code_smells, vulnerabilities, duplicated_lines_density, reliability_rating, security_rating, security_review_rating, sqale_rating, open_issues
Меньше — хуже (сортировка по возрастанию — меньше значит хуже):
coverage, line_coverage, branch_coverage, test_success_density, tests
Рейтинги в SonarQube — это числовые строки от "1" (A, лучший) до "5" (E, худший).
Безопасность
Все инструменты имеют
readOnlyHint: True— ничто не может изменить данные в SonarQube.Никогда не вызываются методы
POST/PUT/DELETE.Входные данные серьезности / типа / квалификатора проверяются на соответствие перечислениям SonarQube перед вызовом API, поэтому инструмент быстро завершается при опечатках, а не обращается к API.
Характеристики производительности
Каждый инструмент делает один HTTP-вызов к SonarQube, за исключением
sonarqube_worst_metrics, который делает один вызов поиска + ⌈candidate_pool/100⌉ массовых вызовов измерений. Настройки по умолчанию приводят к ≤ 2 вызовам.Время ответа одного инструмента на исправном экземпляре SonarQube: обычно < 500 мс.
Пагинация передается в SonarQube (параметры
p+ps) — в MCP-сервере нет буферизации полных результатов.sonarqube_worst_metricsограничиваетcandidate_poolдо 500 — на экземплярах с тысячами проектов используйте предварительный фильтрquery=перед ранжированием (см. строку документации инструмента).В SonarQube нет опубликованного жесткого ограничения скорости. Если получена ошибка 429, сервер выдает понятную ошибку («Подождите 30-60 с перед повторной попыткой; уменьшите page_size»).
Разработка
git clone https://github.com/mshegolev/sonarqube-mcp.git
cd sonarqube-mcp
pip install -e '.[dev]'
pytestЛицензия
MIT © Mikhail Shchegolev
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mshegolev/sonarqube-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
