Java 结合 MCP 实现 Gitee 仓库智能管理
随着人工智能技术飞速发展,开发者工具也不断进化。国内领先的代码托管平台 Gitee 推出了 MCP(Model Control Protocol)功能,让开发者能借助 AI 助手更高效地管理代码仓库。本文将基于 LangChain4j 技术,为 Java 开发者提供一套 MCP 集成方案,助力打造企业级 AI 仓库助手。
MCP 概述
MCP 即模型控制协议,它允许 AI 模型与外部工具和服务交互。借助 MCP,AI 助手可执行创建仓库、提交代码、管理 Issue 和 Pull Request 等操作,使开发流程更智能、自动化。其核心优势如下:
- 为 AI 模型提供与外部系统交互的标准接口。
- 支持多种传输模式,适应不同使用场景。
- 让 AI 能执行实际操作,而非仅提供建议。
准备工作
下载 Gitee MCP
从 Gitee MCP 发布页下载对应操作系统的 MCP Gitee Server。以 Mac 为例,下载解压后需分配执行权限:chmod +x mcp - gitee
构建 MCP Java 客户端
以 PIG AI 为例,在根 Maven 项目中添加以下依赖:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j - mcp</artifactId>
<version>1.0.0 - beta2</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j - open - ai - spring - boot - starter</artifactId>
<version>1.0.0 - beta2</version>
</dependency>
配置文件
在 application.yml 中添加 AI 模型配置:
langchain4j:
open - ai:
chat - model:
api - key: sk -
base - url: https://api.deepseek.com/v1
model - name: deepseek - chat
log - requests: true
MCP 传输模式
方式一:MCP stdio 模式
概念
stdio(标准输入输出)模式是 MCP 的基本传输方式,通过标准输入输出流与 MCP 服务器通信。具体如下:
- MCP 客户端通过子进程启动 MCP 服务器。
- 通过标准输入(stdin)向服务器发送请求。
- 通过标准输出(stdout)接收服务器响应。
- 适合本地开发环境,无需额外网络配置。
优点是设置简单,无需额外网络配置;缺点是只能本地使用,不适合分布式环境。
实现代码
@Autowired
private ChatLanguageModel chatLanguageModel;
@SneakyThrows
@Test
void contextLoads() {
// 创建 stdio 传输模式
McpTransport transport = new StdioMcpTransport.Builder()
.command(List.of("/Users/lengleng/Downloads/mcp - gitee - darwin - arm64/mcp - gitee", "-token", "GITEE - TOKEN"))
.logEvents(true) // 可选:在日志中显示通信内容
.build();
// 创建 MCP 客户端
@Cleanup
McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(transport)
.build();
// 创建工具提供者
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
// 构建 Gitee AI 服务
GiteeAiService giteeAiService = AiServices.builder(GiteeAiService.class)
.chatLanguageModel(chatLanguageModel)
.toolProvider(toolProvider)
.build();
// 使用 AI 服务查询 Gitee 信息
String result = giteeAiService.chat("获取 log4j/pig 开启的 issue 列表 ");
log.info("gitee mcp result: {}", result);
}
方式二:MCP Server SSE 模式
概念
SSE(Server - Sent Events)模式是基于 HTTP 的单向通信机制,允许服务器向客户端推送数据。在 MCP 中使用 SSE 模式:
- MCP 服务器以独立进程运行,监听 HTTP 请求。
- 客户端通过 HTTP 连接到服务器。
- 服务器可持续向客户端推送事件和数据。
- 适合分布式环境,支持多客户端连接。
优点是支持分布式部署,可被多个客户端同时访问;缺点是配置相对复杂,需要额外网络设置。
实现步骤
首先,以 SSE 模式启动 Gitee MCP 服务器:mcp - gitee - transport sse - token GITEE - TOKEN
然后,在 Java 代码中使用 SSE 传输模式:
@Autowired
private ChatLanguageModel chatLanguageModel;
@SneakyThrows
@Test
void contextLoads() {
// 创建 SSE 传输模式
McpTransport sseTransport = new HttpMcpTransport.Builder()
.sseUrl("http://localhost:8000/sse")
.logRequests(true) // 可选:记录请求日志
.logResponses(true) // 可选:记录响应日志
.build();
// 创建 MCP 客户端
@Cleanup
McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(sseTransport)
.build();
// 创建工具提供者
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
// 构建 Gitee AI 服务
GiteeAiService giteeAiService = AiServices.builder(GiteeAiService.class)
.chatLanguageModel(chatLanguageModel)
.toolProvider(toolProvider)
.build();
// 使用 AI 服务查询 Gitee 信息
String result = giteeAiService.chat("获取 log4j/pig 开启的 issue 列表 ");
log.info("gitee mcp result: {}", result);
}
输出结果示例
无论使用哪种传输模式,成功执行后都会得到类似结果:
2025 - 03 - 16T23:19:51.211 + 08:00 INFO 67659 --- [ main] com.example.demo.DemoApplicationTests : gitee mcp result: 目前 log4j/pig 仓库中有以下开启的 issue:
1. **JDK17 版本中 oauth2.0 的授权码模式,无法通过 code 获取到 access_token**
- 编号: IBQJ94
- 创建时间: 2025 - 03 - 04T13:04:53 + 08:00
- 链接: [https://gitee.com/log4j/pig/issues/IBQJ94](https://gitee.com/log4j/pig/issues/IBQJ94)
两种模式对比
| 特性 | stdio 模式 | SSE 模式 |
|---|---|---|
| 部署方式 | 本地子进程 | 独立服务器 |
| 适用场景 | 本地开发 | 分布式环境 |
| 配置复杂度 | 简单 | 复杂 |
| 多客户端支持 | 不支持 | 支持 |
| 网络要求 | 无 | 需要网络连接 |
总结
通过 Java 与 MCP 结合,可创建功能强大的 Gitee 仓库助手,实现代码管理智能化和自动化。这不仅提高开发效率,还减少重复性工作,让开发者专注于更具创造性的任务。MCP 的 stdio 和 SSE 两种传输模式满足不同场景需求:stdio 模式适合本地开发和测试,SSE 模式适合分布式环境和多客户端访问。随着 AI 技术发展,MCP 协议功能将更丰富,为开发者提供更多可能。