0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

通过Java和MCP创建Git AI仓库助手

OSC开源社区 ? 来源:JAVA架构日记 ? 2025-03-19 10:12 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

来源:JAVA架构日记,作者:冷冷

背景

随着人工智能技术的快速发展,开发者工具也在不断进化。Gitee 作为国内领先的代码托管平台,现已推出 MCP (Model Control Protocol) 功能,让开发者能够通过 AI 助手更高效地管理代码仓库。

mcp-gitee 是 Gitee 的模型上下文协议 (MCP) 服务器实现,它提供了一组与 Gitee API 交互的工具,允许 AI 助手管理仓库、Issue、Pull Request 等。

Gitee开源MCP Server:让AI直接操作代码仓库的“外挂”

虽然 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应用平台


 dev.langchain4j
 langchain4j-mcp
 1.0.0-beta2


 dev.langchain4j
 langchain4j-open-ai-spring-boot-starter
 1.0.0-beta2

配置文件

在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 两种模式,下面我们分别介绍。

方式一:MCP stdio 模式

stdio 模式概念

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

? MCP 客户端通过子进程启动 MCP 服务器

? 通过标准输入(stdin)向服务器发送请求

? 通过标准输出(stdout)接收服务器的响应

? 适合在本地开发环境中使用,无需额外的网络配置

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

实现代码

@Autowired
privateChatLanguageModel 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
privateChatLanguageModel 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-16T2351.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-04T1353+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 协议的功能也将越来越丰富,为开发者提供更多可能性。希望本文能够帮助您了解如何使用 Java 玩转 MCP,打造属于自己的 AI Gitee 仓库助手。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    2989

    浏览量

    110749
  • AI
    AI
    +关注

    关注

    88

    文章

    35476

    浏览量

    281226
  • 人工智能
    +关注

    关注

    1809

    文章

    49151

    浏览量

    250608
  • 开源
    +关注

    关注

    3

    文章

    3754

    浏览量

    43968
  • Git
    Git
    +关注

    关注

    0

    文章

    205

    浏览量

    16252

原文标题:Java玩转MCP:手把手教你打造Git AI仓库助手

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Git常用的超级实用命令

    的一些Git工作流。 1 Git 常用的超级实用命令 1.1 与仓库相关的操作 克隆代码仓库到本地,开发必用 git clone 查看本地
    的头像 发表于 10-09 17:19 ?1440次阅读
    <b class='flag-5'>Git</b>常用的超级实用命令

    Git 常用命令大全

    pull origin --tags上传本地tag到远程仓库:$ git push origin --tags创建带注释的tag:$ git tag -a [name] -m 'yo
    发表于 10-11 17:23

    git之推送提交

    下文章:git创建仓库,并提交代码(第一次创建并提交)以及updates were rejected because the tip of your current branch is behind its
    发表于 12-17 09:20

    git简单使用(一)

    本帖最后由 iysheng 于 2017-2-19 23:09 编辑 编程,经常会修改代码,不管是将代码托管到本地还是网上,使用git进行版本控制无疑是比较流行的方法。今天我就记录下如何创建仓库
    发表于 02-17 16:18

    Git学习经验总结

    创建Git版本仓库创建一个空目录mkdir MyGit cd MyGit pwd #显示当前目录路径将普通目录变成Git版本库
    发表于 07-12 08:00

    java如何创建对象的分析

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。
    发表于 09-27 14:36 ?0次下载

    GitHub教程 仓库创建、同步、删除

    仓库的使用教程大概会涉及三种方法: 在网页上进行建立删除 在GitHub Desktop上操作 在Git Bash上操作 在网页上直接操作 点进你的交友页面,右边红色的框框repositories
    发表于 01-17 01:48 ?560次阅读

    Git中如何克隆,修改,添加和删除文件的详细资料概述

    在 本系列的第一篇文章 开始使用 Git 时,我们创建了一个简单的 Git 仓库,并用我们的计算机连接到它,向其中添加一个文件。在本文中,我们将学习一些关于
    的头像 发表于 06-10 09:06 ?4499次阅读
    在<b class='flag-5'>Git</b>中如何克隆,修改,添加和删除文件的详细资料概述

    如何在GitHub上创建一个全新的Git仓库详细讲解

    如果您从未使用过 Git,甚至可能从未听说过它。莫慌张,只需要一步步地跟着这篇入门教程,很快您就会在 GitHub 上拥有一个全新的 Git 仓库
    的头像 发表于 06-10 09:13 ?1.5w次阅读
    如何在GitHub上<b class='flag-5'>创建</b>一个全新的<b class='flag-5'>Git</b><b class='flag-5'>仓库</b>详细讲解

    Git概述及知识详解

    暂存区。进仓库前暂时存放区域,未对本地仓库生效。对暂存区文件修改,显蓝色。第一次创建并add到暂存区的文件,由于远程仓库没同步,显绿色。(注:存放在 “.
    的头像 发表于 11-08 14:16 ?939次阅读

    Java创建对象有哪些方式

    1 问题 作为Java开发者,经常创建很多对象,你是否知道Java创建对象有哪些方式呢?
    的头像 发表于 02-24 10:29 ?1305次阅读

    获取Git项目仓库的两种方式

    /user/my_project $ git init 该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库
    的头像 发表于 07-22 11:05 ?1290次阅读

    git如何记录每次更新到仓库

    可以用 git status 命令查看哪些文件处于什么状态。如果在克隆仓库后立即使用此命令,会看到类似这样的输出: $ git status On branch masterYour branch
    的头像 发表于 07-22 11:11 ?810次阅读
    <b class='flag-5'>git</b>如何记录每次更新到<b class='flag-5'>仓库</b>

    Git项目远程仓库的使用

    远程仓库的使用 为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。远程仓库是指托管在因特网或其他网络中的你的项目的版本库。你可以有好几个远程
    的头像 发表于 07-22 11:31 ?846次阅读

    idea怎么创建Java项目

    创建Java项目是一个相对较为复杂的过程,需要考虑到各种细节和步骤。本文将详细介绍如何创建一个Java项目。 一、准备工作 在创建
    的头像 发表于 12-06 14:09 ?1371次阅读