随着人工智能技术的快速发展,开发工具也在不断进化。Gitee作为国内领先的代码托管平台,推出了MCP(Model Context Protocol,模型上下文协议)功能,帮助开发者利用AI助手高效管理代码仓库。Gitee的MCP Server使AI能够直接访问代码仓库,进行Issue管理、Pull Request审查及代码操作等任务。这标志着AI不再只是代码的旁观者,而是成为了软件开发过程中的智能参与者。
MCP是一种允许AI模型与外部工具和服务直接交互的标准协议。通过MCP,AI模型不仅能读取仓库内容、查看提交历史,还可以创建仓库、提交代码以及管理Issue和Pull Request,实现真正的自动化操作。
MCP协议主要优势包括:
-
提供与外部系统交互的标准接口;
-
支持多种传输模式,适应不同使用场景;
-
使AI能够执行实际操作,而不仅仅是提供建议。
虽然Gitee官方提供的是基于Go语言的实现,但Java开发者完全可以通过LangChain4j实现MCP集成。
LangChain4j简介
LangChain4j是Java生态中集成AI服务的优秀工具,能够轻松对接各类大型语言模型(LLM),并实现与MCP协议服务器的对接。
MCP Java客户端构建
在Java Maven项目中引入LangChain4j相关依赖:
<dependency>
<groupId>dev.langchain4jgroupId>
<artifactId>langchain4j-mcpartifactId>
<version>1.0.0-beta2version>
dependency>
<dependency>
<groupId>dev.langchain4jgroupId>
<artifactId>langchain4j-open-ai-spring-boot-starterartifactId>
<version>1.0.0-beta2version>
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协议主要支持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.