Skip to main content
Glama
ArchAI-Labs

FastMCP SonarQube Metrics

by ArchAI-Labs

Метрики SonarQube для FastMCP

Trust Score

logo

Обзор

Этот проект предоставляет набор инструментов для получения информации о проектах SonarQube с использованием фреймворка FastMCP (Fast Model Context Protocol). Он служит интерфейсом к SonarQube, позволяя пользователям программно получать доступ к метрикам, историческим данным и метрикам дерева компонентов для указанных проектов. Такой автоматизированный доступ позволяет создавать отчеты, проводить анализ и интегрировать данные SonarQube с другими системами.

Проект выделяется тем, что предлагает упрощенный подход на основе сообщений для взаимодействия с API SonarQube, абстрагируясь от сложностей прямых вызовов API и обработки данных. Он предназначен для разработчиков, DevOps-инженеров и аналитиков, которым необходимо включить данные SonarQube в свои рабочие процессы или создать собственные решения для отчетности.

В этом репозитории содержатся клиентские и серверные компоненты, которые облегчают обмен данными и их получение. Сервер предоставляет инструменты для извлечения данных из SonarQube, а клиент предоставляет интерфейс командной строки для вызова этих инструментов и отображения результатов. Каждый внутренний модуль способствует достижению этой цели, инкапсулируя определенные функциональные возможности, такие как взаимодействие с API, обработка данных и связь между клиентом и сервером.

Клиент, включенный в проект, предназначен только для тестирования работы кода; мы рекомендуем использовать Claude Desktop или разработать собственный клиент.

ПОМНИТЕ, ЭТОТ РЕПОЗИТОРИЙ НАХОДИТСЯ В СТАДИИ РАЗРАБОТКИ, НЕКОТОРЫЕ ФУНКЦИИ МОГУТ РАБОТАТЬ НЕИДЕАЛЬНО.

Related MCP server: SonarQube MCP Server

Развертывание

Развернутая версия доступна на Fronteir AI.

Поддерживаемые инструменты MCP

  • get_status: Выполняет проверку работоспособности настроенного экземпляра SonarQube.

  • create_sonarqube_project: Создает новый проект SonarQube. Требуются права администратора.

  • delete_sonarqube_project: Удаляет проект 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 для заданного проекта, при необходимости с фильтрацией по типу, серьезности и статусу решения. Возвращает до limit результатов (по умолчанию: 10).

Технологический стек

  • Язык: Python

  • Фреймворки: FastMCP

  • Библиотеки: httpx, pydantic, dotenv, asyncio, json, pathlib, typing, base64

  • Инструменты: SonarQube API

Структура каталогов

├── client_test.py - Client application for testing and interacting with the server.
├── server.py - Server application exposing tools to retrieve SonarQube metrics.
├── client_tool.py - Client with a graphical interface to interact with the SonarQube server.
├── client_langchain.py - Command-line client to interact with the FastMCP server and SonarQube tools via LangChain
├── .env - Environment configuration file (stores SonarQube URL and token).
└── README.md - Project documentation.

Начало работы

Предварительные требования

  • Python 3.7+

  • Экземпляр SonarQube с доступом к API

  • Токен API SonarQube с соответствующими разрешениями

  • Установленный FastMCP (pip install fastmcp)

  • Установленный httpx (pip install httpx)

  • Установленный pydantic (pip install pydantic)

  • Установленный python-dotenv (pip install python-dotenv)

Общие шаги сборки

  1. Клонируйте репозиторий: git clone <repository_url>

  2. Перейдите в каталог проекта: cd fastmcp-sonarqube-metrics

  3. Настройте переменные окружения: Создайте файл .env в корневом каталоге проекта со следующим содержимым:

    SONARQUBE_URL=<your_sonarqube_url>
    SONARQUBE_TOKEN=<your_sonarqube_token>
    TRANSPORT=<stdio or sse>
    GEMINI_API_KEY=<your-gemini-api_key>
    GEMINI_MODEL=<your-gemini-model> (Optional)

    Схема такая же для OpenAI и Groq, если вы хотите использовать AzureOpenAI:

    SONARQUBE_URL=<your_sonarqube_url>
    SONARQUBE_TOKEN=<your_sonarqube_token>
    TRANSPORT=<stdio or sse>
    AZURE_OPENAI_API_KEY=<your-azureopenai-api_key>
    AZURE_OPENAI_ENDPOINT=<your-azureopenai-endpoint>
    AZURE_DEPLOYMENT=<your-azureopenai-deployment>
    AZURE_API_VERSION=<your-azureopenai-api_version>

    Замените <your_sonarqube_url> на URL вашего экземпляра SonarQube (например, http://localhost:9000) и <your_sonarqube_token> на ваш токен API SonarQube.

  4. Запустите сервер: python server.py

  5. Запустите клиент: python client_test.py (Опционально, только для теста)

  6. Подключитесь к клиенту: следуйте официальной документации

Использование модулей

Сервер (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 при появлении запроса и установить тип транспорта в файле .env на stdio.

Client_tool (client_tool.py)

Модуль client_tool.py реализует клиент FastMCP с графическим интерфейсом на базе Tkinter для взаимодействия с сервером SonarQube. При запуске он настраивает логгеры для подавления несущественных сообщений, загружает переменные окружения и запускает бэкенд чата (ChatBackend) в фоновом режиме, который использует LLM и инструменты MCP, предоставляемые сервером через stdio. Фронтенд (ChatGUI) управляет окном Tkinter, отображает историю сообщений в прокручиваемой области и позволяет пользователю отправлять команды на сервер, запрашивая действительный ключ проекта SonarQube при необходимости. Чтобы использовать клиент, просто запустите скрипт client_tool.py и взаимодействуйте через графический интерфейс.

Client_langchain (client_langchain.py)

Модуль client_langchain.py предоставляет клиент командной строки для взаимодействия с сервером FastMCP и инструментами SonarQube через LangChain. При запуске он загружает переменные окружения и настраивает выбранную LLM. Он устанавливает соединение stdio с сервером (server.py), инициализирует сессию MCP и загружает доступные инструменты (проверка работоспособности, текущие и исторические метрики, список проектов, получение проблем). Подробный системный промпт описывает каждый инструмент и его параметры. В интерактивном цикле он считывает ввод пользователя из консоли, обновляет историю сообщений, вызывает агента React и выводит отформатированный ответ.

Пример: Интеграция инструмента get_sonarqube_metrics во внешний проект

Чтобы использовать инструмент get_sonarqube_metrics во внешнем проекте, вы можете создать клиент, который подключается к серверу FastMCP и вызывает инструмент. Вот базовый пример:

import asyncio
from fastmcp import Client
from fastmcp.types import TextContent

async def get_metrics(project_key: str):
    server_path = "server.py" # Adjust if necessary
    client = Client(server_path)
    try:
        async with client:
            result = await client.call_tool(
                "get_sonarqube_metrics", {"project_key": project_key}
            )
            if result:
                content = result[0]
                if isinstance(content, TextContent):
                    metrics = json.loads(content.text)
                    print(metrics)
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    asyncio.run(get_metrics("your-project-key")) # Replace with your project key

Этот пример демонстрирует, как создать клиент, подключиться к серверу, вызвать инструмент get_sonarqube_metrics с ключом проекта и обработать результаты. Вам нужно будет адаптировать переменную server_path к фактическому расположению скрипта server.py в вашей среде.

Чат ArchAI-SonarQube (GUI)

Легковесный клиент Tkinter, который подключается через stdio к серверу FastMCP и предоставляет чат-интерфейс в реальном времени для запроса метрик SonarQube, просмотра деревьев компонентов и выполнения проверок работоспособности с помощью помощника на базе LLM.

img_tool

Использование с TRANSPORT=SSE

Вы можете переключить транспортный уровень клиента на Server-Sent Events (SSE), установив переменную окружения TRANSPORT перед запуском графического интерфейса. Это позволяет получать обновления в реальном времени от сервера FastMCP. Когда сервер запущен в режиме SSE, открывается постоянное HTTP-соединение на порту 8001. Это позволяет подключаться через совместимые интерфейсы, такие как MCP Inspector.

  1. Запустите сервер в режиме SSE

    uv run mcp dev "<server_name>" 
  2. Откройте MCP Inspector Будет предоставлена ссылка (например, http://127.0.0.1:6274) для запуска MCP Inspector в вашем браузере.

  3. Настройте SSE в MCP Inspector

    • Выберите SSE в качестве типа транспорта

    • Введите URL: http://localhost:8001/sse

  4. Инициируйте соединение

  5. Просмотрите доступные инструменты В разделе Tools вы увидите:

    • get_status

    • get_sonarqube_metrics

    • get_sonarqube_metrics_history

    • get_sonarqube_component_tree_metrics

    • list_projects

    • get_project_issues

  6. Выберите и вызовите инструмент Например, выберите get_project_issues и укажите:

    • project_key: ключ проекта SonarQube

    • issue_type (опционально): например, BUG, CODE_SMELL

    • severity (опционально): например, MAJOR, CRITICAL

    • resolved (опционально): true или false

    • limit (опционально): максимальное количество проблем для возврата

  7. Выполните и получите результаты Сервер вызовет соответствующий API SonarQube и вернет отформатированный JSON-ответ.

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

Вы можете установить этот сервер непосредственно в Claude Desktop с помощью fastmcp:

  1. Убедитесь, что FastMCP установлен (pip install fastmcp или uv pip install fastmcp).

  2. Настройте Claude for Desktop для любых серверов MCP, которые вы хотите использовать (в Windows через VSCode): code $env:AppData\Claude\claude_desktop_config.json

  3. Добавьте свой сервер и сохраните:

{
    "mcpServers": {
        "fastmcp-sonarqube-metrics": {
            "command": "uv",
            "args": [
                "--directory",
                "/ABSOLUTE/PATH/TO/PARENT/FOLDER/fastmcp-sonarqube-metrics",
                "run",
                "server.py"
            ]
        }
    }
}
  1. Запустите его:

 uv --directory  /ABSOLUTE/PATH/TO/PARENT/FOLDER/fastmcp-sonarqube-metrics run server.py
  1. Перезапустите Claude Desktop, если он был запущен. Инструмент "FastMCP SonarQube Metrics" теперь должен быть доступен.

claude

Функциональный анализ

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 и доступность для клиентов. Кроме

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    A read-only MCP server that provides AI assistants with structured access to SonarQube projects, issues, metrics, and rules. It enables safe analysis of code quality and security findings through a set of validated, safety-first tools.
    6
    -
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server for SonarQube that enables LLM agents to discover projects, analyze code quality metrics, check Quality Gate status, search issues with filters, and rank projects by worst-performing metrics. It provides read-only, safe access to SonarQube instances with structured outputs and error handling.
    5
    48 PyPI
    MIT