Метрики FastMCP SonarQube
Обзор
Этот проект предоставляет набор инструментов для извлечения информации о проектах SonarQube с использованием фреймворка FastMCP (Fast Model Context Protocol). Он служит интерфейсом для SonarQube, позволяя пользователям программно получать доступ к метрикам, историческим данным и метрикам дерева компонентов для указанных проектов. Этот автоматизированный доступ позволяет создавать отчеты, анализировать и интегрировать данные SonarQube с другими системами.
Проект отличается тем, что предлагает упрощенный подход на основе сообщений для взаимодействия с API SonarQube, абстрагируясь от сложностей прямых вызовов API и обработки данных. Он предназначен для разработчиков, инженеров DevOps и аналитиков, которым необходимо включить данные SonarQube в свои рабочие процессы или создать индивидуальные решения для создания отчетов.
Этот репозиторий специально содержит клиентские и серверные компоненты, которые облегчают коммуникацию и извлечение данных. Сервер предоставляет инструменты для извлечения данных из SonarQube, в то время как клиент предоставляет интерфейс командной строки для пользователей, чтобы вызывать эти инструменты и отображать результаты. Каждый внутренний модуль вносит свой вклад в достижение этой цели, инкапсулируя определенные функции, такие как взаимодействие API, обработка данных и коммуникация клиент-сервер.
Клиент, включенный в проект, предназначен только для тестирования работы кода; мы рекомендуем использовать Claude Desktop или разработать собственный клиент.
ПОМНИТЕ, ЭТОТ РЕПО НАХОДИТСЯ В РАБОТЕ, НЕКОТОРЫЕ ФУНКЦИИ МОГУТ БЫТЬ НЕ ИДЕАЛЬНЫМИ.
Поддерживаемые инструменты MCP
get_status
: выполняет проверку работоспособности настроенного экземпляра SonarQube.list_projects
: список всех доступных проектов SonarQube, опционально отфильтрованных по имени или ключу.get_sonarqube_metrics
: извлекает указанные метрики (ошибки, уязвимости, запахи кода, покрытие, плотность дублирования) для заданного ключа проекта SonarQube.get_sonarqube_metrics_history
: Извлекает исторические метрики (ошибки, уязвимости, запахи кода, покрытие, плотность дублирования) для данного проекта SonarQube с помощью /api/measures/search_history. Могут применяться дополнительные фильтры даты.get_sonarqube_component_tree_metrics
: извлекает значения метрик для всех компонентов (например, файлов или каталогов) в проекте с помощью /api/measures/component_tree. Автоматически обрабатывает пагинацию для извлечения всех результатов.get_project_issues
: Извлечь проблемы SonarQube для указанного проекта, опционально отфильтрованные по типу, серьезности и статусу разрешения. Возвращает до предела результатов (по умолчанию: 10).
Технологический стек
- Язык: Питон
- Фреймворки: FastMCP
- Библиотеки: httpx, pydantic, dotenv, asyncio, json, pathlib, typing, base64
- Инструменты: API SonarQube
Структура каталога
Начиная
Предпосылки
- Питон 3.7+
- Экземпляр SonarQube с доступом через API
- Токен API SonarQube с соответствующими разрешениями
- FastMCP установлен (
pip install fastmcp
) - httpx установлен (
pip install httpx
) - установлен pydantic (
pip install pydantic
) - установлен python-dotenv (
pip install python-dotenv
)
Общие этапы сборки
- Клонируйте репозиторий:
git clone <repository_url>
- Перейдите в каталог проекта:
cd fastmcp-sonarqube-metrics
- Настройте переменные среды: создайте файл
.env
в корневом каталоге проекта со следующим содержимым:Замените<your_sonarqube_url>
на URL-адрес вашего экземпляра SonarQube (например,http://localhost:9000
), а<your_sonarqube_token>
на ваш токен API SonarQube. - Запускаем сервер:
python server.py
- Запустите клиент:
python client_test.py
(Необязательно, только для теста) - Подключитесь к своему клиенту: следуйте официальной документации
Использование модуля
Сервер ( server.py
)
Модуль server.py
определяет сервер FastMCP, который предоставляет инструменты для получения метрик SonarQube. Он инициализирует сервер, загружает переменные среды, определяет доступные инструменты и управляет связью с API SonarQube. Чтобы использовать сервер, вам необходимо задать переменные среды SONARQUBE_URL
и SONARQUBE_TOKEN
. Сервер запускается путем прямого запуска скрипта server.py
.
Клиент ( client_test.py
)
Модуль client_test.py
определяет клиент FastMCP, который взаимодействует с сервером. Он запрашивает у пользователя ключ проекта SonarQube, подключается к серверу, вызывает инструменты get_sonarqube_metrics
и get_sonarqube_component_tree_metrics
и отображает результаты. Чтобы использовать клиент, вам необходимо напрямую запустить скрипт client_test.py
и указать действительный ключ проекта SonarQube при запросе.
Клиентский_инструмент ( client_tool.py
)
Модуль client_tool.py
реализует клиент FastMCP с графическим интерфейсом на основе Tkinter для взаимодействия с сервером SonarQube. При запуске он настраивает регистраторы для подавления несущественных сообщений, загружает переменные среды и запускает бэкэнд чата (ChatBackend) в фоновом режиме, который использует LLM и инструменты MCP, предоставляемые сервером через stdio. Фронтенд (ChatGUI) управляет окном Tkinter, отображает историю сообщений в прокручиваемой области и позволяет пользователю отправлять команды на сервер, запрашивая действительный ключ проекта SonarQube при необходимости. Чтобы использовать клиент, просто запустите скрипт client_tool.py
и взаимодействуйте через GUI.
Client_langchain ( client_langchain.py
)
Модуль client_langchain.py
предоставляет клиент командной строки для взаимодействия с сервером FastMCP и инструментами SonarQube через LangChain. При запуске он загружает переменные среды и настраивает выбранный LLM. Он устанавливает stdio-соединение с сервером ( server.py
), инициализирует сеанс MCP и загружает доступные инструменты (проверка работоспособности, текущие и исторические метрики, список проектов, поиск проблем). Подробная системная подсказка описывает каждый инструмент и его параметры. В интерактивном цикле он считывает пользовательский ввод с консоли, обновляет историю сообщений, вызывает агент React и печатает отформатированный ответ.
Пример: Интеграция инструмента get_sonarqube_metrics
во внешний проект
Чтобы использовать инструмент get_sonarqube_metrics
во внешнем проекте, вы можете создать клиент, который подключается к серверу FastMCP и вызывает инструмент. Вот простой пример:
В этом примере показано, как создать клиента, подключиться к серверу, вызвать инструмент get_sonarqube_metrics
с ключом проекта и обработать результаты. Вам нужно будет адаптировать переменную server_path
к фактическому местоположению скрипта server.py
в вашей среде.
Чат ArchAI-SonarQube (графический интерфейс)
Легкий клиент Tkinter, который подключается через stdio к серверу FastMCP и предоставляет интерфейс чата в реальном времени для запроса метрик SonarQube, просмотра деревьев компонентов и запуска проверок работоспособности с помощью помощника на основе LLM.
Использование с TRANSPORT=SSE
Вы можете переключить транспортный уровень клиента на Server-Sent Events (SSE), установив переменную среды TRANSPORT
перед запуском GUI. Это позволяет получать однонаправленные обновления в реальном времени с сервера FastMCP. Когда сервер запускается в режиме SSE, на порту 8001 открывается постоянное HTTP-соединение. Это позволяет подключаться через совместимые интерфейсы, такие как MCP Inspector.*
- Запустите сервер в режиме SSE
- Открыть MCP Inspector . Для запуска MCP Inspector в вашем браузере будет предоставлена ссылка (например,
http://127.0.0.1:6274
). - Настройка SSE в MCP Inspector
- Выберите SSE в качестве типа транспорта.
- Введите URL-адрес:
http://localhost:8001/sse
- Инициировать соединение
- Просмотрите доступные инструменты. В разделе «Инструменты» вы увидите:
get_status
get_sonarqube_metrics
get_sonarqube_metrics_history
get_sonarqube_component_tree_metrics
list_projects
get_project_issues
- Выберите и вызовите инструмент. Например, выберите get_project_issues и укажите:
project_key
: ключ проекта SonarQubeissue_type
(необязательно): например,BUG
,CODE_SMELL
severity
(необязательно): например,MAJOR
,CRITICAL
resolved
(необязательно):true
илиfalse
limit
(необязательно): максимальное количество возвращаемых вопросов
- Выполнение и получение результатов Сервер вызовет соответствующий API SonarQube и вернет отформатированный ответ JSON.
Использование с Claude Desktop
Вы можете установить этот сервер непосредственно в Claude Desktop с помощью fastmcp:
- Убедитесь, что FastMCP установлен (pip install fastmcp или uv pip install fastmcp).
- Настройте Claude for Desktop для любых серверов MCP, которые вы хотите использовать (в Windows с помощью VSCode):
code $env:AppData\Claude\claude_desktop_config.json
- Добавьте свой сервер и сохраните:
- Чтобы запустить его, выполните:
- Перезапустите Claude Desktop, если он был запущен. Инструмент "FastMCP SonarQube Metrics" теперь должен быть доступен.
Функциональный анализ
1. Основные обязанности системы
Основная обязанность системы — выступать в качестве моста между пользователем и API SonarQube, предоставляя упрощенный способ получения метрик качества проекта. Он инкапсулирует сложности API SonarQube, предлагая набор инструментов, которые можно легко вызывать и интегрировать в автоматизированные рабочие процессы. Основные службы включают в себя выборку метрик, получение исторических данных и исследование метрик на уровне компонентов в проекте SonarQube. Основополагающей службой является сервер FastMCP, который управляет определениями инструментов и клиент-серверной связью.
2. Проблемы, которые решает система
Система решает проблему программного доступа к данным SonarQube, не требуя от пользователей прямого взаимодействия с API SonarQube. Она решает потребность в автоматизированной отчетности, анализе и интеграции метрик SonarQube с другими системами. В частности, она упрощает такие задачи, как:
- Формирование регулярных отчетов по показателям качества кода.
- Мониторинг тенденций качества кода с течением времени.
- Выявление проблемных компонентов в проекте.
- Интеграция данных SonarQube с другими инструментами разработки.
Архитектура решает эти проблемы, предоставляя набор четко определенных инструментов, которые абстрагируются от сложностей API SonarQube и обеспечивают единый интерфейс для доступа к данным.
3. Взаимодействие модулей и компонентов
Система состоит из двух основных компонентов: клиента и сервера. Клиент инициирует запросы к серверу, указывая инструмент для выполнения и любые входные параметры. Сервер получает запрос, взаимодействует с API SonarQube, обрабатывает данные и отправляет результаты обратно клиенту.
Взаимодействие между клиентом и сервером облегчается фреймворком FastMCP, который обрабатывает передачу сообщений и сериализацию. Сервер определяет доступные инструменты с помощью декоратора @mcp.tool()
, который регистрирует функции как вызываемые конечные точки. Клиент вызывает эти инструменты с помощью метода client.call_tool()
, который отправляет сообщение на сервер с именем инструмента и входными параметрами.
Сервер использует библиотеку httpx
для выполнения асинхронных HTTP-запросов к API SonarQube. Он создает URL-адреса API и параметры запроса на основе исполняемого инструмента и входных параметров, предоставленных клиентом. Затем сервер анализирует ответы JSON от API SonarQube и извлекает соответствующие значения метрик.
4. Функциональность, ориентированная на пользователя и на систему
Функциональность системы, ориентированная на пользователя, — это клиентское приложение ( client_test.py
), которое предоставляет интерфейс командной строки для вызова инструментов извлечения метрик SonarQube. Пользователи взаимодействуют с клиентом, предоставляя ключ проекта SonarQube и, опционально, другие параметры, такие как диапазоны дат или ключи метрик. Затем клиент отображает извлеченные метрики в удобном для восприятия человеком формате.
Системные функции — это серверные инструменты ( get_sonarqube_metrics
, get_sonarqube_metrics_history
, get_sonarqube_component_tree_metrics
), определенные в server.py
. Эти инструменты управляют взаимодействием с API SonarQube, обработкой данных и форматированием. Они не видны напрямую конечным пользователям, но необходимы для обеспечения основных функций системы.
Декоратор @mcp.tool()
систематически применяет общие поведения во всех функциях инструмента, гарантируя, что они зарегистрированы на сервере FastMCP и доступны для клиентов. Кроме того, использование Annotated
и Field
обеспечивает единообразное определение параметров и документирование во всех инструментах.
Архитектурные модели и принципы дизайна, применяемые
- Архитектура клиент-сервер: проект следует архитектуре клиент-сервер, где клиент запрашивает услуги у сервера.
- Передача сообщений: фреймворк FastMCP упрощает взаимодействие между клиентом и сервером с помощью передачи сообщений.
- Асинхронное программирование: использование
asyncio
иhttpx
позволяет выполнять асинхронные операции, повышая производительность и скорость реагирования приложения. - Конфигурация через переменные среды: URL-адрес и токен SonarQube настраиваются с помощью переменных среды, что упрощает развертывание и управление приложением в различных средах.
- Проектирование на основе инструментов: сервер реализует функциональность с помощью четко определенных инструментов, что упрощает добавление или изменение функций.
- Обработка ошибок: проект включает в себя комплексную обработку ошибок для корректного устранения потенциальных проблем, таких как сетевые ошибки, ошибки API и недействительные данные.
- Ведение журнала: использование модуля
logging
обеспечивает ведение подробных журналов, облегчающих отладку и мониторинг. - Внедрение зависимостей: хотя это явно не реализовано в виде фреймворка, конфигурация URL-адреса и токена SonarQube через переменные среды позволяет легко заменять различные экземпляры SonarQube без изменения кода.
Анализ качества кода
Из-за отсутствия отчета SonarQube невозможно провести комплексный анализ качества кода. Однако, исходя из структуры и функциональности кода, к потенциальным областям беспокойства относятся:
- Детализация обработки ошибок: хотя обработка ошибок присутствует, конкретные сообщения об ошибках можно было бы улучшить, чтобы предоставить пользователю более полезную информацию.
- Тестовое покрытие: Предоставленный код не включает модульные тесты. Тестовое покрытие должно быть добавлено для обеспечения надежности и корректности кода.
- Дублирование кода: существуют возможности сократить дублирование кода путем извлечения общей логики в повторно используемые функции или классы.
Слабые стороны и области для улучшения
- Повышение ясности сообщений об ошибках: улучшение сообщений об ошибках для предоставления пользователям более конкретных рекомендаций по решению проблем.
- Добавьте модульные тесты: реализуйте модульные тесты для серверных инструментов, чтобы убедиться в их корректности и надежности.
- Реорганизуйте общую логику: определите и реорганизуйте дублирующийся код в повторно используемые функции или классы.
- Реализуйте проверку входных данных: добавьте проверку входных данных в серверные инструменты, чтобы предотвратить обработку недействительных данных.
- Улучшить документацию: добавить более подробную документацию для серверных инструментов, включая примеры и инструкции по использованию.
- Реализуйте более надежную систему конфигурации: рассмотрите возможность использования более надежной системы конфигурации, например файла конфигурации или специального класса настроек, вместо того, чтобы полагаться исключительно на переменные среды.
- Добавьте поддержку дополнительных конечных точек API SonarQube: расширьте систему для поддержки дополнительных конечных точек API SonarQube, например, для управления проектами, правилами или профилями качества.
- Реализуйте более удобный клиентский интерфейс: рассмотрите возможность разработки графического пользовательского интерфейса (GUI) или более сложного интерфейса командной строки (CLI) для клиентского приложения.
- Устраните потенциальные уязвимости безопасности: проверьте код на наличие потенциальных уязвимостей безопасности, например, связанных с проверкой входных данных или аутентификацией.
Дальнейшие направления исследований
- Узкие места производительности: исследуйте потенциальные узкие места производительности в серверных инструментах, например, связанных с обработкой запросов API или обработкой данных.
- Вопросы масштабируемости: оцените масштабируемость системы и определите потенциальные области для улучшения, например, использование очереди сообщений или распределенной системы кэширования.
- Интеграция с внешними системами: изучите потенциальные возможности интеграции с другими инструментами разработки, такими как системы CI/CD или системы отслеживания ошибок.
- Расширенные функции: исследуйте и внедряйте расширенные функции, такие как мониторинг показателей в реальном времени или автоматизированный анализ качества кода.
- Негативные коды и низкое тестовое покрытие: проведите тщательный анализ кодовой базы, чтобы выявить и устранить негативные коды и области с низким тестовым покрытием.
Атрибуция
Создано при поддержке ArchAI , автоматизированной системы документирования.
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
Сервер, предоставляющий инструменты для извлечения метрик проекта SonarQube и данных о качестве с помощью упрощенного подхода на основе сообщений, что позволяет пользователям программно получать доступ к метрикам, историческим данным и информации на уровне компонентов из SonarQube.
- Обзор
- Поддерживаемые инструменты MCP
- Технологический стек
- Структура каталога
- Начиная
- Чат ArchAI-SonarQube (графический интерфейс)
- Использование с TRANSPORT=SSE
- Использование с Claude Desktop
- Функциональный анализ
- Архитектурные модели и принципы дизайна, применяемые
- Анализ качества кода
- Слабые стороны и области для улучшения
- Дальнейшие направления исследований
- Атрибуция
Related MCP Servers
- -securityAlicense-qualityA lightweight server that provides real-time system information including CPU, memory, disk, and GPU statistics for monitoring and diagnostic purposes.Last updated -PythonMIT License
- AsecurityFlicenseAqualityA server that provides QQ Music search functionality through the Modular Control Protocol, allowing users to search for music tracks by keyword and retrieve song information.Last updated -11Python
- -securityAlicense-qualityAn MCP server that integrates with Sonar API to provide Claude with real-time web search capabilities for comprehensive research.Last updated -JavaScriptMIT License
- -securityFlicense-qualityA tool that enables access to Prometheus metrics data through a Model Context Protocol server, allowing interaction with monitoring data using natural language.Last updated -Python