S

SonarQube度量服务器

一种服务器,它通过简化的基于消息的方法提供用于检索 SonarQube 项目指标和质量数据的工具,允许用户以编程方式访问 SonarQube 的指标、历史数据和组件级别信息。

monitoringdeveloper-tools

513 查看 · 2026-07-07 更新

简介

一种服务器,它通过简化的基于消息的方法提供用于检索 SonarQube 项目指标和质量数据的工具,允许用户以编程方式访问 SonarQube 的指标、历史数据和组件级别信息。

简介

一种服务器,它通过简化的基于消息的方法提供用于检索 SonarQube 项目指标和质量数据的工具,允许用户以编程方式访问 SonarQube 的指标、历史数据和组件级别信息。

FastMCP SonarQube 指标

logo

概述

该项目提供了一组工具,用于使用 FastMCP(快速模型上下文协议)框架检索有关 SonarQube 项目的信息。它作为 SonarQube 的接口,允许用户以编程方式访问指定项目的指标、历史数据和组件树指标。这种自动化的访问方式使得报告、分析以及将 SonarQube 数据与其他系统集成成为可能。

该项目通过提供一种简化的基于消息的方法来与 SonarQube API 交互而脱颖而出,抽象了直接 API 调用和数据处理的复杂性。它专为需要将 SonarQube 数据纳入其工作流程或构建自定义报告解决方案的开发人员、DevOps 工程师和分析师设计。

此仓库特别包含了促进通信和数据检索的客户端和服务端组件。服务端提供了从 SonarQube 获取数据的工具,而客户端则为用户提供了一个命令行界面来调用这些工具并显示结果。每个内部模块通过封装特定功能(如 API 交互、数据处理和客户端-服务器通信)来实现这一目标。

项目中包含的客户端仅用于测试代码的工作情况;我们建议使用 Claude Desktop 或开发您自己的自定义客户端。

请注意,此仓库仍在开发中,某些功能可能尚未完善。

支持的 MCP 工具

  • get_status: 对配置的 SonarQube 实例执行健康检查。
  • list_projects: 列出所有可访问的 SonarQube 项目,并可按名称或键进行过滤。
  • get_sonarqube_metrics: 为给定的 SonarQube 项目键获取指定的指标(错误、漏洞、代码异味、覆盖率、重复密度)。
  • get_sonarqube_metrics_history: 使用 /api/measures/search_history 为给定的 SonarQube 项目获取历史指标(错误、漏洞、代码异味、覆盖率、重复密度)。可以应用可选的日期过滤器。
  • 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 - 用于测试并与服务器交互的客户端应用程序。 ├── server.py - 提供工具以检索 SonarQube 指标的服务器应用程序。 ├── .env - 环境配置文件(存储 SonarQube URL 和令牌)。 └── README.md - 项目文档。

开始使用

前提条件

  • Python 3.7+
  • 具有 API 访问权限的 SonarQube 实例
  • 一个具有适当权限的 SonarQube API 令牌
  • 安装了 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>将 <your_sonarqube_url> 替换为您的 SonarQube 实例的 URL(例如,http://localhost:9000),并将 <your_sonarqube_token> 替换为您的 SonarQube API 令牌。

  4. 运行服务器: python server.py

  5. 运行客户端: python client_test.py (可选,仅用于测试)

  6. 连接到您的客户端: 请遵循官方文档

模块使用

服务器 (server.py)

server.py 模块定义了 FastMCP 服务器,该服务器提供了检索 SonarQube 指标的工具。它初始化服务器、加载环境变量、定义可用工具,并处理与 SonarQube API 的通信。要使用服务器,您需要设置 SONARQUBE_URLSONARQUBE_TOKEN 环境变量。通过直接运行 server.py 脚本来启动服务器。

客户端 (client_test.py)

client_test.py 模块定义了与服务器交互的 FastMCP 客户端。它提示用户输入 SonarQube 项目密钥,连接到服务器,调用 get_sonarqube_metricsget_sonarqube_component_tree_metrics 工具,并显示结果。要使用客户端,您需要直接运行 client_test.py 脚本,并在提示时提供有效的 SonarQube 项目密钥。

示例:在外部项目中集成 get_sonarqube_metrics 工具

要在外部项目中使用 get_sonarqube_metrics 工具,您可以创建一个连接到 FastMCP 服务器并调用该工具的客户端。以下是一个基本示例:

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

async def get_metrics(project_key: str): server_path = "server.py" # 根据需要调整 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"错误: {e}")

if name == "main": asyncio.run(get_metrics("your-project-key")) # 替换为您自己的项目密钥

此示例展示了如何创建客户端、连接到服务器、使用项目密钥调用 get_sonarqube_metrics 工具以及处理结果。您需要根据实际情况调整 server_path 变量以指向 server.py 脚本的实际位置。

使用 Claude Desktop

您可以使用 fastmcp 直接将此服务器安装到 Claude Desktop 中:

  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. 添加您的服务器然后保存:

json { "mcpServers": { "fastmcp-sonarqube-metrics": { "command": "uv", "args": [ "--directory", "/ABSOLUTE/PATH/TO/PARENT/FOLDER/fastmcp-sonarqube-metrics", "run", "server.py" ] } } }

  1. 通过运行以下命令来启动它:

bash uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/fastmcp-sonarqube-metrics run server.py

  1. 如果 Claude Desktop 正在运行,请重启它。现在应该可以使用 "FastMCP SonarQube Metrics" 工具了。

功能分析

1. 系统的主要职责系统的主要职责是在用户与SonarQube API之间充当桥梁,提供一种简化的方式来检索项目质量指标。它封装了SonarQube API的复杂性,提供了一组易于调用并可集成到自动化工作流中的工具。核心服务包括获取指标、检索历史数据以及探索SonarQube项目中组件级别的指标。基础服务是FastMCP服务器,它管理工具定义和客户端-服务器通信。

2. 系统解决的问题

该系统解决了无需用户直接与SonarQube API交互即可程序化访问SonarQube数据的问题。它满足了自动报告、分析以及将SonarQube指标与其他系统集成的需求。具体来说,它简化了如下任务:

  • 生成代码质量指标的定期报告。
  • 监控随时间变化的代码质量趋势。
  • 识别项目中的问题组件。
  • 将SonarQube数据与其他开发工具集成。

架构通过提供一组明确定义的工具来解决这些问题,这些工具抽象了SonarQube API的复杂性,并为访问数据提供了统一的接口。

3. 模块与组件间的交互

系统由两个主要组件组成:客户端和服务端。客户端向服务端发起请求,指定要执行的工具及任何输入参数。服务端接收请求,与SonarQube API进行交互,处理数据,并将结果返回给客户端。

客户端与服务端之间的交互由FastMCP框架促进,该框架处理消息传递和序列化。服务端使用@mcp.tool()装饰器定义可用工具,这会将函数注册为可调用的端点。客户端通过client.call_tool()方法调用这些工具,该方法向服务端发送带有工具名称和输入参数的消息。

服务端使用httpx库对SonarQube API发出异步HTTP请求。根据正在执行的工具和客户端提供的输入参数构建API URL和请求参数。然后,服务端解析来自SonarQube API的JSON响应并提取相关的度量值。

4. 面向用户的 vs. 面向系统的功能

系统的面向用户的功能是客户端应用程序(client_test.py),它提供了一个命令行界面用于调用SonarQube指标检索工具。用户通过提供一个SonarQube项目密钥以及可选的其他参数如日期范围或度量键与客户端交互。客户端随后以人类可读格式显示检索到的指标。

面向系统的功能是服务端工具(get_sonarqube_metricsget_sonarqube_metrics_historyget_sonarqube_component_tree_metrics),这些工具在server.py中定义。它们负责与SonarQube API的交互、数据处理和格式化。虽然这些工具不直接对最终用户可见,但对于提供系统的核心功能至关重要。

@mcp.tool()装饰器系统地应用于所有工具函数,确保它们被注册到FastMCP服务器并对客户端可用。此外,使用AnnotatedField保证了所有工具间一致的参数定义和文档说明。

应用的架构模式与设计原则

  • 客户端-服务器架构:项目遵循客户端-服务器架构,其中客户端从服务器请求服务。
  • 消息传递:FastMCP框架通过消息传递促进了客户端与服务器之间的通信。* 异步编程: 使用 asynciohttpx 实现了异步操作,提高了应用程序的性能和响应速度。
  • 通过环境变量进行配置: SonarQube 的 URL 和 token 通过环境变量进行配置,使得在不同环境中部署和管理应用程序变得更加容易。
  • 基于工具的设计: 服务器通过定义良好的工具暴露功能,便于添加或修改特性。
  • 错误处理: 项目包含了全面的错误处理机制,能够优雅地处理潜在问题,如网络错误、API 错误和无效数据。
  • 日志记录: 使用 logging 模块提供了详细的日志,有助于调试和监控。
  • 依赖注入: 尽管没有明确作为一个框架实现,但通过环境变量配置 SonarQube 的 URL 和 token 允许轻松替换不同的 SonarQube 实例而无需修改代码。

代码质量分析

由于缺乏 SonarQube 报告,无法进行全面的代码质量分析。然而,根据代码结构和功能,可能存在以下关注点:

  • 错误处理粒度: 虽然存在错误处理,但具体的错误消息可以改进,以向用户提供更多可操作的信息。
  • 测试覆盖率: 提供的代码不包含单元测试。应增加测试覆盖率以确保代码的可靠性和正确性。
  • 代码重复: 可能有机会通过提取公共逻辑到可重用函数或类中来减少代码重复。

弱点及改进领域

  • 提高错误消息清晰度: 增强错误消息,为用户提供更具体的指导,帮助他们解决问题。
  • 添加单元测试: 为服务器端工具实现单元测试,确保其正确性和可靠性。
  • 重构公共逻辑: 识别并重构重复代码为可重用的函数或类。
  • 实现输入验证: 向服务器端工具添加输入验证,防止处理无效数据。
  • 改进文档: 为服务器端工具添加更详细的文档,包括示例和使用说明。
  • 实现更强大的配置系统: 考虑使用更强大的配置系统,例如配置文件或专用设置类,而不是仅依赖于环境变量。
  • 支持额外的 SonarQube API 端点: 扩展系统以支持额外的 SonarQube API 端点,如用于管理项目的端点、规则或质量配置文件。
  • 实现更用户友好的客户端界面: 考虑为客户应用程序开发图形用户界面 (GUI) 或更高级的命令行界面 (CLI)。
  • 解决潜在的安全漏洞: 审查代码中的潜在安全漏洞,如与输入验证或身份验证相关的漏洞。

进一步调查领域

  • 性能瓶颈: 调查服务器端工具中可能存在的性能瓶颈,比如与 API 请求处理或数据处理相关的瓶颈。
  • 可扩展性考量: 评估系统的可扩展性,并确定潜在的改进领域,例如使用消息队列或分布式缓存系统。
  • 与外部系统的集成: 探索与其他开发工具(如 CI/CD 系统或问题跟踪器)的潜在集成。
  • 高级功能: 研究并实现高级功能,如实时指标监控或自动化代码质量分析。
  • 代码异味和低测试覆盖率: 对代码库进行全面分析,识别并解决代码异味和测试覆盖率低的区域。

致谢由ArchAI支持生成,这是一个自动化文档系统。


安装指南

要开始使用我们的库,请按照以下步骤进行安装:

bash pip install our-library

确保您的Python环境版本为3.6或更高。对于更详细的依赖信息,请参阅这里

配置设置

在首次运行之前,您可能需要调整一些配置来满足特定需求。配置文件位于config/settings.yaml中。您可以修改此文件以更改默认行为。例如,如果您想更改日志级别,可以编辑如下部分:

yaml logging: level: DEBUG

可用的日志级别包括DEBUG, INFO, WARNING, ERROR, 和 CRITICAL

使用示例

下面是一个简单的例子,演示如何初始化库并执行基本操作:

python from our_library import CoreModule

创建核心模块实例

core = CoreModule()

执行任务

result = core.run_task(data)

print(result)

更多高级用法和API参考,请访问官方文档

常见问题解答 (FAQ)

问:如果遇到依赖冲突怎么办?

答:尝试创建一个虚拟环境,并仅在此环境中安装必要的包。这有助于隔离不同项目之间的依赖关系。更多信息请查看Python官方关于virtualenv的文档。

问:如何贡献代码?

答:我们非常欢迎社区贡献!请先阅读贡献指南,然后通过GitHub提交您的pull request。

希望这份文档对您有所帮助!如果有任何其他问题,请联系support@our-website.com

服务配置

[{'mcpServers': {'fastmcp-sonarqube-metrics': {'args': ['--directory', '/ABSOLUTE/PATH/TO/PARENT/FOLDER/fastmcp-sonarqube-metrics', 'run', 'server.py'], 'command': 'uv'}}}]

来源