
该项目提供了一组工具,用于通过FastMCP(快速模型上下文协议)框架检索SonarQube项目的相关信息。它充当与SonarQube交互的接口,允许用户程序化地访问指定项目的指标、历史数据和组件树指标。这种自动访问使报告、分析以及与其他系统集成SonarQube数据成为可能。
该项目通过提供一种简化、基于消息的方法来与SonarQube API进行交互,从而区别于其他方法,抽象了直接调用API和处理数据的复杂性。它设计用于需要将SonarQube数据整合到工作流程中或构建自定义报告解决方案的开发者、DevOps工程师和分析师。
此仓库特别存放了促进通信和数据检索的客户端和服务器组件。服务器暴露了从SonarQube获取数据的工具,而客户端提供了命令行界面,供用户调用这些工具并显示结果。每个内部模块通过封装特定功能(如API交互、数据处理和客户端-服务器通信)来实现这一目标。
项目中包含的客户端仅用于测试代码的工作方式;我们建议使用Claude Desktop或开发自己的自定义客户端。
记住,这个仓库还在开发中,某些功能可能还不完善。
get_status: 对配置的SonarQube实例执行健康检查。create_sonarqube_project: 创建一个新的SonarQube项目。需要管理员权限。delete_sonarqube_project: 删除一个SonarQube项目。需要管理员权限。谨慎使用!list_projects: 列出所有可访问的SonarQube项目,可选按名称或键过滤。get_sonarqube_metrics: 获取给定SonarQube项目键的指定指标(如bug、漏洞、代码异味、覆盖率、重复密度)。get_sonarqube_metrics_history: 使用/api/measures/search_history获取给定SonarQube项目的指标历史记录。可选日期过滤器可以应用。get_sonarqube_component_tree_metrics: 使用/api/measures/component_tree获取项目中所有组件(如文件或目录)的指标值。自动处理分页以获取所有结果。get_project_issues: 获取给定项目的SonarQube问题,可选按类型、严重性和解决状态过滤。返回最多limit个结果(默认:10)。├── client_test.py - 测试和与服务器交互的客户端应用程序。
├── server.py - 暴露工具以检索SonarQube指标的服务器应用程序。
├── client_tool.py - 带有图形界面的客户端,用于与SonarQube服务器交互。
├── client_langchain.py - 命令行客户端,通过LangChain与FastMCP服务器和SonarQube工具交互。
├── .env - 环境配置文件(存储SonarQube URL和令牌)。
└── README.md - 项目文档。
pip install fastmcp)pip install httpx)pip install pydantic)pip install python-dotenv)克隆仓库: git clone <repository_url>
导航到项目目录: cd fastmcp-sonarqube-metrics
设置环境变量: 在项目根目录创建一个.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> (可选)
如果你想使用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>替换为你的SonarQube实例的URL(例如,http://localhost:9000),并将<your_sonarqube_token>替换为你的SonarQube API令牌。
运行服务器: python server.py
运行客户端: python client_test.py (可选,仅用于测试)
连接到客户端: 遵循官方文档
server.py)server.py模块定义了暴露用于检索SonarQube指标的工具的FastMCP服务器。它初始化服务器,加载环境变量,定义可用工具,并处理与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文件中将传输类型设置为stdio。
client_tool.py)client_tool.py模块实现了带有Tkinter图形界面的FastMCP客户端,用于与SonarQube服务器交互。启动时,它配置日志记录器以抑制非必要消息,加载环境变量,并在后台启动聊天后端(ChatBackend),该后端使用LLM并通过stdio与服务器暴露的MCP工具交互。前端(ChatGUI)管理Tkinter窗口,在滚动区域中显示消息历史记录,并允许用户向服务器发送命令——在需要时提示输入有效的SonarQube项目键。要使用客户端,只需运行client_tool.py脚本并通过GUI进行交互。
client_langchain.py)client_langchain.py模块提供了一个通过LangChain与FastMCP服务器和SonarQube工具交互的命令行客户端。启动时,它加载环境变量并配置所选的LLM。它建立与服务器(server.py)的stdio连接,初始化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" # 如有必要,请调整
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.py脚本位置调整server_path变量。
一个轻量级的Tkinter客户端,通过stdio连接到FastMCP服务器,并通过LLM驱动的助手提供实时聊天界面,用于查询SonarQube指标、浏览组件树和执行健康检查。
<br>
你可以在启动GUI之前设置TRANSPORT环境变量为Server-Sent Events (SSE),从而切换客户端的传输层。这使得FastMCP服务器能够实现实时、单向更新。
当服务器以SSE模式启动时,会在端口8001上打开一个持久的HTTP连接。这允许你通过兼容的接口(如MCP Inspector)连接。
以SSE模式启动服务器
uv run mcp dev "<server_name>"
打开MCP Inspector
你会得到一个链接(例如http://127.0.0.1:6274),在浏览器中启动MCP Inspector。
在MCP Inspector中配置SSE
http://localhost:8001/sse发起连接
浏览可用工具 在工具部分,你会看到:
get_statusget_sonarqube_metricsget_sonarqube_metrics_historyget_sonarqube_component_tree_metricslist_projectsget_project_issues选择并调用一个工具 例如,选择get_project_issues并提供:
project_key: SonarQube项目键issue_type(可选): 如BUG, CODE_SMELLseverity(可选): 如MAJOR, CRITICALresolved(可选): true 或 falselimit(可选): 返回的最大问题数执行并检索结果 服务器将调用相应的SonarQube API并返回格式化的JSON响应。
你可以直接将此服务器安装到Claude Desktop中,使用fastmcp:
pip install fastmcp或uv pip install fastmcp)。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

系统的主要职责是作为用户与SonarQube API之间的桥梁,提供一种简化的方式来检索项目质量指标。它封装了SonarQube API的复杂性,提供了一组易于调用和集成到自动化工作流中的工具。核心服务包括获取指标、检索历史数据以及探索项目内的组件级别指标。基础服务是FastMCP服务器,它管理工具定义和客户端-服务器通信。
系统解决了无需直接与SonarQube API交互即可程序化访问SonarQube数据的问题。它满足了生成自动化报告、分析和将SonarQube指标与其他系统集成的需求。具体来说,它简化了以下任务:
架构通过提供一组定义明确的工具来解决这些问题,这些工具抽象了SonarQube API的复杂性,并提供了一致的数据访问接口。
系统由两个主要组件组成:客户端和服务器。客户端发起请求到服务器,指定要执行的工具及其输入参数。服务器接收请求,与SonarQube API交互,处理数据,并将结果返回给客户端。
客户端和服务器之间的交互由FastMCP框架通过消息传递和序列化来促进。服务器使用@mcp.tool()装饰器定义可用工具,将函数注册为可调用端点。客户端通过client.call_tool()方法调用这些工具,向服务器发送包含工具名称和输入参数的消息。
服务器使用httpx库进行异步HTTP请求到SonarQube API。它根据执行的工具和客户端提供的输入参数构造API URL和请求参数。然后,服务器解析SonarQube API的JSON响应并提取相关的指标值。
系统的用户界面功能是客户端应用程序(client_test.py),它提供了一个命令行界面,用于调用SonarQube指标检索工具。用户通过提供SonarQube项目键和其他可选参数(如日期范围或指标键)与客户端交互。客户端然后以人类可读的格式显示检索到的指标。
系统的系统界面功能是在server.py中定义的服务器端工具(get_sonarqube_metrics、get_sonarqube_metrics_history、get_sonarqube_component_tree_metrics)。这些工具处理与SonarQube API的交互、数据处理和格式化。它们对最终用户不可见,但对提供系统的核心功能至关重要。
@mcp.tool()装饰器系统地应用于所有工具函数,确保它们被注册到FastMCP服务器并可供客户端访问。此外,使用Annotated和Field确保所有工具的一致参数定义和文档。
asyncio和httpx实现了异步操作,提高了应用程序的性能和响应能力。logging模块提供详细的日志,有助于调试和监控。由于缺乏SonarQube报告,无法进行全面的代码质量分析。然而,基于代码结构和功能,潜在的关注领域包括: