一、背景
随着人工智能技术的快速发展,开发工具也在不断进化。Gitee作为国内领先的代码托管平台,推出了MCP(Model Context Protocol,模型上下文协议)功能,帮助开发者利用AI助手高效管理代码仓库。Gitee的MCP Server使AI能够直接访问代码仓库,进行Issue管理、Pull Request审查及代码操作等任务。这标志着AI不再只是代码的旁观者,而是成为了软件开发过程中的智能参与者。
二、什么是 MCP?
MCP是一种允许AI模型与外部工具和服务直接交互的标准协议。通过MCP,AI模型不仅能读取仓库内容、查看提交历史,还可以创建仓库、提交代码以及管理Issue和Pull Request,实现真正的自动化操作。
MCP协议主要优势包括:
-
提供与外部系统交互的标准接口;
-
支持多种传输模式,适应不同使用场景;
-
使AI能够执行实际操作,而不仅仅是提供建议。
三、Java生态下的MCP实现
虽然Gitee官方提供的是基于Go语言的实现,但Java开发者完全可以通过LangChain4j实现MCP集成。
LangChain4j简介
LangChain4j是Java生态中集成AI服务的优秀工具,能够轻松对接各类大型语言模型(LLM),并实现与MCP协议服务器的对接。
MCP Java客户端构建
在Java Maven项目中引入LangChain4j相关依赖:
<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>
配置AI模型
在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和SSE两种传输模式,各适用于不同的开发场景。
(一)stdio传输模式
stdio模式通过本地标准输入输出流进行通信,适用于本地开发和测试。
实现代码示例:
@Autowired
private ChatLanguageModel chatLanguageModel;
@SneakyThrows
@Test
void contextLoads() {
McpTransport transport = new StdioMcpTransport.Builder()
.command(List.of("/path/to/mcp-gitee", "-token", "GITEE-TOKEN"))
.logEvents(true)
.build();
@Cleanup McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(transport)
.build();
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
GiteeAiService giteeAiService = AiServices.builder(GiteeAiService.class)
.chatLanguageModel(chatLanguageModel)
.toolProvider(toolProvider)
.build();
String result = giteeAiService.chat("获取 log4j/pig 开启的 issue 列表");
log.info("gitee mcp result: {}", result);
}
(二)SSE传输模式
SSE模式通过HTTP连接,服务器主动推送事件,适用于分布式、多客户端环境。
服务器启动命令:
mcp-gitee -transport sse -token GITEE-TOKEN
客户端实现代码示例:
@Autowired
private ChatLanguageModel chatLanguageModel;
@SneakyThrows
@Test
void contextLoads() {
McpTransport sseTransport = new HttpMcpTransport.Builder()
.sseUrl("http://localhost:8000/sse")
.logRequests(true)
.logResponses(true)
.build();
@Cleanup McpClient mcpClient = new DefaultMcpClient.Builder()
.transport(sseTransport)
.build();
ToolProvider toolProvider = McpToolProvider.builder()
.mcpClients(List.of(mcpClient))
.build();
GiteeAiService giteeAiService = AiServices.builder(GiteeAiService.class)
.chatLanguageModel(chatLanguageModel)
.toolProvider(toolProvider)
.build();
String result = giteeAiService.chat("获取 log4j/pig 开启的 issue 列表");
log.info("gitee mcp result: {}", result);
}
两种模式对比
特性 | stdio模式 | SSE模式 |
---|---|---|
部署方式 | 本地子进程 | 独立服务器进程 |
适用场景 | 本地开发 | 分布式部署、多客户端 |
配置复杂度 | 简单 | 较复杂 |
多客户端支持 | 不支持 | 支持 |
网络要求 | 无需网络 | 需要网络连接 |
五、实际应用:打造Gitee AI仓库助手
AI助手通过MCP,可以:
-
读取和理解仓库Issue;
-
自动审查Pull Request代码变更;
-
监控仓库状态;
-
执行代码管理操作,如创建分支、提交代码、合并PR等。
AI查询仓库示例结果:
目前 log4j/pig 仓库中有以下开启的 issue:
1. JDK17 版本中oauth2.0的授权码模式,无法通过code获取到access_token
- 编号: IBQJ94
- 创建时间: 2025-03-04T13:04:53+08:00
安装方式:
1.二进制下载:前往仓库 release 页,下载对应平台的可执行文件
2.源码编译:
git clone https://gitee.com/oschina/mcp-gitee.git
cd mcp-gitee
make build
3.Go Install:
# 安装 Go 1.23+
# 安装 mcp-gitee
go install gitee.com/oschina/mcp-gitee@latest
通过Java与MCP的深度结合,可以创建一个功能强大的Gitee仓库助手,实现智能化和自动化代码管理。MCP协议极大拓展了AI在代码管理领域的可能性,将成为企业级AI应用的重要基础设施。随着技术发展,未来开发者与AI的协作将更加紧密,软件开发也将更加智能、高效。