【Java 玩转 MCP】手把手教你打造 Git AI 仓库助手

news/2025/3/31 15:50:13/文章来源:https://www.cnblogs.com/o-O-oO/p/18798716

背景

随着人工智能技术的快速发展,开发者工具也在不断进化。Gitee 作为国内领先的代码托管平台,现已推出 MCP (Model Control Protocol) 功能,让开发者能够通过 AI 助手更高效地管理代码仓库。mcp-gitee 是 Gitee 的模型上下文协议 (MCP) 服务器实现,它提供了一组与 Gitee API 交互的工具,允许 AI 助手管理仓库、Issue、Pull Request 等。

虽然 Gitee 官方目前仅提供 Go 语言和各种图形化配置的实现,但这并不妨碍 Java 开发者大展身手!本文将以 LangChain4j 为技术基座,为老 Javaer 们呈现一套 MCP 集成方案。通过深度结合 Java 生态优势,我们将从零构建企业级 AI 仓库助手,揭秘如何用 Java 玩转 MCP 协议,让 Spring Boot 应用轻松获得 Gitee 智能管理能力。

MCP 是什么?

MCP (Model Control Protocol) 是一种允许 AI 模型与外部工具和服务进行交互的协议。通过 MCP,AI 助手可以执行各种操作,如创建仓库、提交代码、管理 Issue 和 Pull Request 等,使开发流程更加智能化和自动化。

MCP 的核心优势在于:

• 为 AI 模型提供了与外部系统交互的标准接口
• 支持多种传输模式,适应不同的使用场景
• 使 AI 能够执行实际操作,而不仅仅是提供建议

准备工作

下载 Gitee MCP

首先,从 Gitee MCP 发布页 下载对应操作系统的 MCP Gitee Server。

笔者使用 Mac,下载解压后需要分配执行权限:

chmod +x mcp-gitee

构建 MCP Java 客户端

以 PIG AI 为例,根 Maven 项目中添加以下依赖.

PIG AI | 助力企业快速构建Java AI应用平台

<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/v1model-name: deepseek-chatlog-requests: true

MCP 传输模式

MCP 支持多种传输模式,主要有 stdio 和 SSE 两种模式,下面我们分别介绍。

方式一:MCP stdio 模式

【stdio 模式概念】

stdio(标准输入输出)模式是 MCP 的一种基本传输方式,它通过标准输入输出流与 MCP 服务器进行通信。
在这种模式下:

• MCP 客户端通过子进程启动 MCP 服务器
• 通过标准输入(stdin)向服务器发送请求
• 通过标准输出(stdout)接收服务器的响应
• 适合在本地开发环境中使用,无需额外的网络配置

这种模式的优点是设置简单,无需额外的网络配置;缺点是只能在本地使用,不适合分布式环境。

【实现代码】

@Autowired
private ChatLanguageModel chatLanguageModel;@SneakyThrows
@Test
voidcontextLoads() {// 创建 stdio 传输模式McpTransporttransport=newStdioMcpTransport.Builder().command(List.of("/Users/lengleng/Downloads/mcp-gitee-darwin-arm64/mcp-gitee", "-token", "GITEE-TOKEN")).logEvents(true) // 可选:在日志中显示通信内容.build();// 创建 MCP 客户端@CleanupMcpClientmcpClient=newDefaultMcpClient.Builder().transport(transport).build();// 创建工具提供者ToolProvidertoolProvider= McpToolProvider.builder().mcpClients(List.of(mcpClient)).build();// 构建 Gitee AI 服务GiteeAiServicegiteeAiService= AiServices.builder(GiteeAiService.class).chatLanguageModel(chatLanguageModel).toolProvider(toolProvider).build();// 使用 AI 服务查询 Gitee 信息Stringresult= giteeAiService.chat("获取 log4j/pig 开启的 issue 列表 ");log.info("gitee mcp result: {}", result);
}

方式二:MCP Server SSE 模式

【SSE 模式概念】

SSE(Server-Sent Events)模式是一种基于 HTTP 的单向通信机制,允许服务器向客户端推送数据。
在 MCP 中使用 SSE 模式:

• MCP 服务器以独立进程运行,监听 HTTP 请求
• 客户端通过 HTTP 连接到服务器
• 服务器可以持续向客户端推送事件和数据
• 适合在分布式环境中使用,支持多客户端连接

SSE 模式的优点是支持分布式部署,可以被多个客户端同时访问;缺点是配置相对复杂,需要额外的网络设置。

【实现步骤】

首先,以 SSE 模式启动 Gitee MCP 服务器:

mcp-gitee -transport sse -token GITEE-TOKEN

然后,在 Java 代码中使用 SSE 传输模式:

@Autowired
private ChatLanguageModel chatLanguageModel;@SneakyThrows
@Test
voidcontextLoads() {// 创建 SSE 传输模式McpTransportsseTransport=newHttpMcpTransport.Builder().sseUrl("http://localhost:8000/sse").logRequests(true) // 可选:记录请求日志.logResponses(true) // 可选:记录响应日志.build();// 创建 MCP 客户端@CleanupMcpClientmcpClient=newDefaultMcpClient.Builder().transport(sseTransport).build();// 创建工具提供者ToolProvidertoolProvider= McpToolProvider.builder().mcpClients(List.of(mcpClient)).build();// 构建 Gitee AI 服务GiteeAiServicegiteeAiService= AiServices.builder(GiteeAiService.class).chatLanguageModel(chatLanguageModel).toolProvider(toolProvider).build();// 使用 AI 服务查询 Gitee 信息Stringresult= 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)

两种模式的对比

总结

通过 Java 与 MCP 的结合,我们可以创建一个功能强大的 Gitee 仓库助手,实现代码管理的智能化和自动化。这不仅提高了开发效率,还减少了重复性工作,让开发者能够专注于更有创造性的任务。

MCP 提供的 stdio 和 SSE 两种传输模式满足了不同场景的需求:

• stdio 模式适合本地开发和测试
• SSE 模式适合分布式环境和多客户端访问

随着 AI 技术的不断发展,MCP 协议的功能也将越来越丰富,为开发者提供更多可能性。希望本文能够帮助您了解如何使用 Java 玩转 MCP,打造属于自己的 AI Gitee 仓库助手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907287.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探秘Transformer系列之(19)----FlashAttention V2 及升级版本

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(19)----FlashAttention V2 及升级版本 目录探秘Transformer系列之(…

多线程程序设计(五)——Producer-Consumer

本文摘要了《Java多线程设计模式》一书中提及的 Producer-Consumer 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 为了匹配数据的生产者(Producer)线程与消费者(Consumer)线程之间的处理速…

Google Chrome AI innovations Al In One

Google Chrome AI innovations Al In OneGoogle Chrome AI innovations Al In OneConsole Insights & AI assistance通过控制台数据分析更好地了解错误和警告https://goo.gle/devtools-console-messages-ai https://developer.chrome.com/docs/devtools/console/understand…

【Java开发 】mcp server实战

Model Context Protocol(MCP)作为新一代 AI 服务交互协议,近期发布了 Java SDK 0.8 版本。 虽然新版本带来了更强大的会话管理能力和工具集成机制,但直接使用原生 SDK 仍存在以下挑战:需要手动处理依赖注入和生命周期管理工具注册流程较为复杂缺乏与现有 Spring 生态的深度…

T检验(Students T-test), Wilcoxon符号秩检验,Mann-Whitney U检验

1.基本概念 T检验 是一种统计学方法,用于判断两组数据的均值是否存在显著差异 。其核心思想是通过计算“t值”和对应的“p值”,评估观察到的差异是否由随机误差引起,还是反映了真实的生物学或实验效应。 适用场景 :比较两组独立样本的均值(如对照组 vs 实验组)。 检验单组…

写了 8 年C++,才知道this指针竟是这样工作的!从汇编看本质!

大家好,我是小康。今天我们来聊聊 C++ 的 this 指针。 相信我,看完这篇文章,你将彻底搞懂 C++ 中最神秘的 this 指针!不再被面试官问到 this 时一脸茫然! 前言:this指针,C++中的隐形杀手 嘿,朋友们!还记得第一次接触 C++ 的 this 指针时的懵逼感觉吗? "为啥要用…

Redis 过期键删除和内存淘汰策略【Redis 系列之四】

本文主要介绍了 Redis 过期键删除和内存淘汰策略,仅供参考。〇、前言 对于 Redis 服务器来说,内存资源非常宝贵,如果一些过期键一直不被删除,就会造成资源浪费。 那么,本文将结合博主收集的资料,简单介绍下过期键删除、内存淘汰两个策略,仅供参考。 博主 Redis 相关文章…

2025最新面试题-mysql面试题(三)

事务的四大特性 A账户 10000 -2000 8000+2000=10000 8000+2000 写入buffer Pool(内存缓冲池) Redo Log 环形日志 磁盘 B账户 5000 +2000 7000 原子性(Atomicity) 也就是我们刚才说的不可再分,也就意味着我们对数据库的一系列的操作,要么都是成功,要么都是失败,不可能出…

【MCP协议】你需要了解的 AI 集成突破

了解 MCP 如何重塑 AI 与外部数据源交互的能力。 MCP——是不是有点懵?这也是我的第一反应。我最近才听说它,发现大多数人甚至还不了解它。起初,我也感到困惑,以为这不过是又一个AI领域的流行词。但随着深入了解,我发现MCP并非昙花一现的潮流,而是真正解决了一个长期困扰…

卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!

大家好啊!我是小康。 今天我们来聊一个听起来枯燥但实际上暗藏玄机的话题 —— C 语言的宏定义。 啥?宏定义?那不就是个简单的替换工具吗? 兄dei,如果你也是这么想的,那可就大错特错了!宏定义在 C 语言里简直就是个变形金刚,看似普通,实则暗藏神通。今天我们就来扒一扒…

TapData Oracle 日志解析性能全面领先:20秒处理1GB日志,效率提升100% ——释放数据潜能,驱动实时决策

TapData Oracle日志解析性能全面领先!实测1GB日志解析仅需20秒,效率超竞品2-8倍,降低50%硬件成本。立即了解金融、电商等行业高效数据处理方案。在当今数据驱动的时代,企业对于数据库日志解析的速度和效率要求越来越高。面对不断增长的数据量和实时分析需求,TapData 凭借技…

瑞芯微RK356X主板复用接口配置方法,触觉智能嵌入式方案商

本文介绍瑞芯微RK356X系列复用接口配置的方法,基于触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。 复用接口介绍 由下图可知,红圈内容当前引脚可配置为SPI0…