FastMCP SonarQube指标


概述
该项目提供了一套使用FastMCP(快速模型上下文协议)框架检索SonarQube项目信息的工具。它作为SonarQube的接口,允许用户以编程方式访问指定项目的指标、历史数据和组件树指标。这种自动化访问使SonarQube数据能够与其他系统进行报告、分析和集成。
该项目的与众不同之处在于提供了一种简化的、基于消息的方法来与SonarQube API交互,抽象了直接API调用和数据处理的复杂性。它专为需要将SonarQube数据纳入其工作流程或构建自定义报告解决方案的开发人员、DevOps工程师和分析师而设计。
该存储库专门容纳了便于通信和数据检索的客户端和服务器组件。服务器公开了从SonarQube获取数据的工具,而客户端则为用户提供了一个命令行界面来调用这些工具并显示结果。每个内部模块都通过封装特定功能(如API交互、数据处理和客户机-服务器通信)来实现这一目标。
项目中包含的客户端仅用于测试代码的工作原理;我们建议使用 克劳德桌面 或者开发自己的自定义客户端。
*记住,这个REPO正在开发中,有些功能可能并不完美。*
托管部署
托管部署可在 Frontier AI.
支持的MCP工具
get_status:对配置的SonarQube实例执行健康检查。create_sonarqube_project:创建一个新的SonarQube项目。需要管理员权限。delete_sonarqube_project:删除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问题,可选择按类型、严重性和解决状态进行过滤。返回高达 *限制* 结果(默认值:10)。
技术栈
- 语言: python
- 框架: FastMCP
- 图书馆: httpx、pydantic、dotenv、asyncio、json、pathlib、类型、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+
- 具有API访问权限的SonarQube实例
- 具有适当权限的SonarQube API令牌
- 已安装FastMCP(
pip install fastmcp) - 已安装httpx(
pip install httpx) - 已安装pydantic(
pip install pydantic) - 已安装python dotenv(
pip install python-dotenv)
一般构建步骤
- 克隆存储库:
git clone
- 导航到项目目录:
cd fastmcp-sonarqube-metrics
- 设置环境变量: 创建一个
.env项目根目录中的文件,内容如下:
SONARQUBE_URL=
SONARQUBE_TOKEN=
TRANSPORT=
GEMINI_API_KEY=
GEMINI_MODEL= (Optional)架构与 *开放人工智能* 和 *格罗克*,如果你想使用 *AzureOpenAI*:
SONARQUBE_URL=
SONARQUBE_TOKEN=
TRANSPORT=
AZURE_OPENAI_API_KEY=
AZURE_OPENAI_ENDPOINT=
AZURE_DEPLOYMENT=
AZURE_API_VERSION=替换 ` 使用SonarQube实例的URL(例如。, http://localhost:9000)以及 ` 使用您的SonarQube API代币。
- 运行服务器:
python server.py
- 运行客户端:
python client_test.py*(可选,仅用于测试)*
- 连接到您的客户端: 遵循 官方文件
模块使用
服务器(server.py)
这 server.py 模块定义了FastMCP服务器,该服务器提供了检索SonarQube指标的工具。它初始化服务器,加载环境变量,定义可用的工具,并处理与SonarQube API的通信。要使用服务器,您需要设置 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文件中的传输类型设置为 *标准*.
客户端工具(client_tool.py)
这 client_tool.py 该模块使用基于Tkinter的图形界面实现了FastMCP客户端,以与SonarQube服务器进行交互。启动时,它配置记录器以抑制非必要的消息,加载环境变量,并在后台启动聊天后端(ChatBackend),该后端使用服务器通过stdio公开的LLM和MCP工具。前端(ChatGUI)管理Tkinter窗口,在可滚动区域显示消息历史记录,并允许用户向服务器发送命令——在需要时提示输入有效的SonarQube项目密钥。要使用客户端,只需运行 client_tool.py 脚本并通过GUI进行交互。
Client_langchain(client_langchain.py)
这 client_langchain.py 该模块提供了一个命令行客户端,通过LangChain与FastMCP服务器和SonarQube工具进行交互。启动时,它加载环境变量,并配置所选的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服务器,并提供实时聊天界面,用于通过LLM驱动的助手查询SonarQube指标、浏览组件树和运行健康检查。

使用TRANSPORT=SSE
您可以通过设置以下参数将客户端的传输层切换到服务器发送事件(SSE) TRANSPORT 启动GUI之前的环境变量。这使得FastMCP服务器能够进行实时单向更新。 当服务器以SSE模式启动时,会在端口上打开持久HTTP连接 8001。这允许您通过兼容的接口(如MCP Inspector)进行连接\*
- 以SSE模式启动服务器
uv run mcp dev "" - 打开MCP检查器
链接(例如。 http://127.0.0.1:6274)将在您的浏览器中启动MCP检查器。
- 在MCP检查器中配置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
- 选择并调用工具
例如,选择 获取项目问题 并提供:
- project_key:SonarQube项目密钥 - issue_type (可选):例如。 BUG, CODE_SMELL - severity (可选):例如。 MAJOR, CRITICAL - resolved (可选): true 或 false - limit (可选):要返回的最大问题数
- 执行和检索结果
服务器将调用适当的SonarQube API并返回格式化的JSON响应。
使用Claude Desktop
您可以使用fastmcp将此服务器直接安装到Claude Desktop中:
- 确保安装了FastMCP(pip安装FastMCP或uv pip安装fastmacp)。
- 为您要使用的任何MCP服务器配置Claude for Desktop(在Windows中使用VSCode):
code $env:AppData\Claude\claude_desktop_config.json - 添加您的服务器,然后保存:
{
"mcpServers": {
"fastmcp-sonarqube-metrics": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/fastmcp-sonarqube-metrics",
"run",
"server.py"
]
}
}
}- 要通过运行以下命令启动它:
uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/fastmcp-sonarqube-metrics run server.py- 如果Claude Desktop正在运行,请重新启动它。这 *“FastMCP SonarQube指标”* 工具现在应该可用了。

泛函分析
1.系统的主要职责
该系统的主要职责是充当用户和SonarQube API之间的桥梁,提供检索项目质量指标的简化方法。它封装了SonarQube API的复杂性,提供了一套可以轻松调用并集成到自动化工作流程中的工具。核心服务包括获取指标、检索历史数据以及在SonarQube项目中探索组件级指标。基础服务是FastMCP服务器,它管理工具定义和客户端-服务器通信。
2.系统解决的问题
该系统解决了以编程方式访问SonarQube数据的问题,而无需用户直接与SonarQobe API交互。它满足了SonarQube指标与其他系统自动报告、分析和集成的需求。具体来说,它简化了以下任务:
- 生成关于代码质量指标的定期报告。
- 监控代码质量随时间的变化趋势。
- 识别项目中有问题的组件。
- 将SonarQube数据与其他开发工具集成。
该体系结构通过提供一组定义良好的工具来解决这些问题,这些工具抽象了SonarQube API的复杂性,并为访问数据提供了一致的接口。
3.模块和组件的交互
该系统由两个主要组件组成:客户端和服务器。客户端向服务器发起请求,指定要执行的工具和任何输入参数。服务器接收请求,与SonarQube API交互,处理数据,并将结果发送回客户端。
FastMCP框架处理消息传递和序列化,促进了客户端和服务器之间的交互。服务器使用定义可用工具 @mcp.tool() 装饰器,它将函数注册为可调用端点。客户端使用 client.call_tool() 方法,它向服务器发送一条包含工具名称和输入参数的消息。
服务器使用 httpx 库向SonarQube API发出异步HTTP请求。它根据正在执行的工具和客户端提供的输入参数构造API URL和请求参数。然后,服务器解析SonarQube API的JSON响应,并提取相关的度量值。
4.面向用户与面向系统的功能
系统面向用户的功能是客户端应用程序(client_test.py),它提供了一个用于调用SonarQube度量检索工具的命令行界面。用户通过提供SonarQube项目密钥以及可选的其他参数(如日期范围或度量密钥)与客户端进行交互。然后,客户端以人类可读的格式显示检索到的指标。
面向系统的功能是服务器端工具(get_sonarqube_metrics, get_sonarqube_metrics_history, get_sonarqube_component_tree_metrics)定义于 server.py这些工具处理与SonarQube API的交互、数据处理和格式化。它们对最终用户不直接可见,但对于提供系统的核心功能至关重要。
这 @mcp.tool() 装饰器系统地在所有工具功能中应用通用行为,确保它们在FastMCP服务器上注册并可供客户端访问。此外,使用 Annotated 和 Field 确保所有工具的参数定义和文档一致。
应用的建筑模式和设计原则
- 客户端-服务器体系结构: 该项目遵循客户端-服务器架构,客户端从服务器请求服务。
- 消息传递: FastMCP框架通过消息传递促进客户端和服务器之间的通信。
- 异步编程: 使用
asyncio和httpx支持异步操作,提高了应用程序的性能和响应能力。 - 通过环境变量进行配置: SonarQube URL和令牌是使用环境变量配置的,这使得在不同环境中部署和管理应用程序变得更加容易。
- 基于工具的设计: 服务器通过定义良好的工具公开功能,使添加或修改功能变得容易。
- 错误处理: 该项目包括全面的错误处理,以优雅地处理潜在的问题,如网络错误、API错误和无效数据。
- 登录中: 使用
logging该模块提供详细的日志,有助于调试和监控。 - 依赖注入: 虽然没有明确实现为框架,但通过环境变量配置SonarQube URL和令牌,可以在不修改代码的情况下轻松替换不同的SonarQube实例。
代码质量分析
由于缺乏SonarQube报告,无法进行全面的代码质量分析。然而,根据代码结构和功能,潜在的关注领域包括:
- 错误处理粒度: 虽然存在错误处理,但可以改进特定的错误消息,为用户提供更多可操作的信息。
- 测试覆盖范围: 提供的代码不包括单元测试。应增加测试覆盖率,以确保代码的可靠性和正确性。
- 代码复制: 通过将公共逻辑提取到可重用的函数或类中,可能有机会减少代码重复。
弱点和需要改进的地方
- 提高错误消息的清晰度: 增强错误消息,为用户提供有关如何解决问题的更具体的指导。
- 添加单元测试: 对服务器端工具进行单元测试,以确保其正确性和可靠性。
- 重构通用逻辑: 识别重复代码并将其重构为可重用的函数或类。
- 实施输入验证: 向服务器端工具添加输入验证,以防止处理无效数据。
- 改进文档: 为服务器端工具添加更详细的文档,包括示例和使用说明。
- 实施更稳健的配置系统: 考虑使用更稳健的配置系统,如配置文件或专用设置类,而不是仅依赖环境变量。
- 添加对附加SonarQube API端点的支持: 扩展系统以支持其他SonarQube API端点,例如用于管理项目、规则或质量配置文件的端点。
- 实现更用户友好的客户端界面: 考虑为客户端应用程序开发图形用户界面(GUI)或更复杂的命令行界面(CLI)。
- 解决潜在的安全漏洞: 检查代码中是否存在潜在的安全漏洞,例如与输入验证或身份验证相关的漏洞。
进一步调查领域
- 性能瓶颈: 调查服务器端工具中的潜在性能瓶颈,例如与API请求处理或数据处理相关的性能瓶颈。
- 可扩展性考虑因素: 评估系统的可扩展性,并确定潜在的改进领域,例如使用消息队列或分布式缓存系统。
- 与外部系统的集成: 探索与其他开发工具(如CI/CD系统或问题跟踪器)的潜在集成。
- 高级功能: 研究并实现高级功能,如实时度量监控或自动代码质量分析。
- 代码气味和低测试覆盖率: 对代码库进行彻底分析,以识别和解决代码异味和测试覆盖率低的区域。
归因
在以下支持下生成 ArchAI,一个自动化文档系统。
