0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過Java和MCP創(chuàng)建Git AI倉庫助手

OSC開源社區(qū) ? 來源:JAVA架構(gòu)日記 ? 2025-03-19 10:12 ? 次閱讀

來源:JAVA架構(gòu)日記,作者:冷冷

背景

隨著人工智能技術(shù)的快速發(fā)展,開發(fā)者工具也在不斷進(jìn)化。Gitee 作為國內(nèi)領(lǐng)先的代碼托管平臺,現(xiàn)已推出 MCP (Model Control Protocol) 功能,讓開發(fā)者能夠通過 AI 助手更高效地管理代碼倉庫。

mcp-gitee 是 Gitee 的模型上下文協(xié)議 (MCP) 服務(wù)器實現(xiàn),它提供了一組與 Gitee API 交互的工具,允許 AI 助手管理倉庫、Issue、Pull Request 等。

Gitee開源MCP Server:讓AI直接操作代碼倉庫的“外掛”

雖然 Gitee 官方目前僅提供 Go 語言和各種圖形化配置的實現(xiàn),但這并不妨礙 Java 開發(fā)者大展身手!

本文將以 LangChain4j 為技術(shù)基座,為老 Javaer 們呈現(xiàn)一套 MCP 集成方案。通過深度結(jié)合 Java 生態(tài)優(yōu)勢,我們將從零構(gòu)建企業(yè)級 AI 倉庫助手,揭秘如何用 Java 玩轉(zhuǎn) MCP 協(xié)議,讓 Spring Boot 應(yīng)用輕松獲得 Gitee 智能管理能力。

MCP 是什么?

MCP (Model Control Protocol) 是一種允許 AI 模型與外部工具和服務(wù)進(jìn)行交互的協(xié)議。通過 MCP,AI 助手可以執(zhí)行各種操作,如創(chuàng)建倉庫、提交代碼、管理 Issue 和 Pull Request 等,使開發(fā)流程更加智能化和自動化。

MCP 的核心優(yōu)勢在于:

? 為 AI 模型提供了與外部系統(tǒng)交互的標(biāo)準(zhǔn)接口

? 支持多種傳輸模式,適應(yīng)不同的使用場景

? 使 AI 能夠執(zhí)行實際操作,而不僅僅是提供建議

準(zhǔn)備工作

下載 Gitee MCP

首先,從Gitee MCP 發(fā)布頁下載對應(yīng)操作系統(tǒng)的 MCP Gitee Server。

筆者使用 Mac,下載解壓后需要分配執(zhí)行權(quán)限:

chmod+x mcp-gitee

構(gòu)建 MCP Java 客戶端

以 PIG AI 為例,根 Maven 項目中添加以下依賴:

PIG AI | 助力企業(yè)快速構(gòu)建Java AI應(yīng)用平臺


 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(標(biāo)準(zhǔn)輸入輸出)模式是 MCP 的一種基本傳輸方式,它通過標(biāo)準(zhǔn)輸入輸出流與 MCP 服務(wù)器進(jìn)行通信。在這種模式下:

? MCP 客戶端通過子進(jìn)程啟動 MCP 服務(wù)器

? 通過標(biāo)準(zhǔn)輸入(stdin)向服務(wù)器發(fā)送請求

? 通過標(biāo)準(zhǔn)輸出(stdout)接收服務(wù)器的響應(yīng)

? 適合在本地開發(fā)環(huán)境中使用,無需額外的網(wǎng)絡(luò)配置

這種模式的優(yōu)點是設(shè)置簡單,無需額外的網(wǎng)絡(luò)配置;缺點是只能在本地使用,不適合分布式環(huán)境。

實現(xiàn)代碼

@Autowired
privateChatLanguageModel chatLanguageModel;

@SneakyThrows
@Test
voidcontextLoads(){
 // 創(chuàng)建 stdio 傳輸模式
 McpTransporttransport=newStdioMcpTransport.Builder()
      .command(List.of("/Users/lengleng/Downloads/mcp-gitee-darwin-arm64/mcp-gitee","-token","GITEE-TOKEN"))
      .logEvents(true)// 可選:在日志中顯示通信內(nèi)容
      .build();

 // 創(chuàng)建 MCP 客戶端
 @CleanupMcpClientmcpClient=newDefaultMcpClient.Builder()
      .transport(transport)
      .build();

 // 創(chuàng)建工具提供者
 ToolProvidertoolProvider=McpToolProvider.builder()
      .mcpClients(List.of(mcpClient))
      .build();

 // 構(gòu)建 Gitee AI 服務(wù)
 GiteeAiServicegiteeAiService=AiServices.builder(GiteeAiService.class)
      .chatLanguageModel(chatLanguageModel)
      .toolProvider(toolProvider)
      .build();

 // 使用 AI 服務(wù)查詢 Gitee 信息
 Stringresult=giteeAiService.chat("獲取 log4j/pig 開啟的 issue 列表 ");

  log.info("gitee mcp result: {}", result);
}

方式二:MCP Server SSE 模式

SSE 模式概念

SSE(Server-Sent Events)模式是一種基于 HTTP 的單向通信機制,允許服務(wù)器向客戶端推送數(shù)據(jù)。在 MCP 中使用 SSE 模式:

? MCP 服務(wù)器以獨立進(jìn)程運行,監(jiān)聽 HTTP 請求

? 客戶端通過 HTTP 連接到服務(wù)器

? 服務(wù)器可以持續(xù)向客戶端推送事件和數(shù)據(jù)

? 適合在分布式環(huán)境中使用,支持多客戶端連接

SSE 模式的優(yōu)點是支持分布式部署,可以被多個客戶端同時訪問;缺點是配置相對復(fù)雜,需要額外的網(wǎng)絡(luò)設(shè)置。

實現(xiàn)步驟

首先,以 SSE 模式啟動 Gitee MCP 服務(wù)器:

mcp-gitee -transport sse -token GITEE-TOKEN

然后,在 Java 代碼中使用 SSE 傳輸模式:

@Autowired
privateChatLanguageModel chatLanguageModel;

@SneakyThrows
@Test
voidcontextLoads(){
 // 創(chuàng)建 SSE 傳輸模式
 McpTransportsseTransport=newHttpMcpTransport.Builder()
      .sseUrl("http://localhost:8000/sse")
      .logRequests(true)// 可選:記錄請求日志
      .logResponses(true)// 可選:記錄響應(yīng)日志
      .build();

 // 創(chuàng)建 MCP 客戶端
 @CleanupMcpClientmcpClient=newDefaultMcpClient.Builder()
      .transport(sseTransport)
      .build();

 // 創(chuàng)建工具提供者
 ToolProvidertoolProvider=McpToolProvider.builder()
      .mcpClients(List.of(mcpClient))
      .build();

 // 構(gòu)建 Gitee AI 服務(wù)
 GiteeAiServicegiteeAiService=AiServices.builder(GiteeAiService.class)
      .chatLanguageModel(chatLanguageModel)
      .toolProvider(toolProvider)
      .build();

 // 使用 AI 服務(wù)查詢 Gitee 信息
 Stringresult=giteeAiService.chat("獲取 log4j/pig 開啟的 issue 列表 ");

  log.info("gitee mcp result: {}", result);
}

輸出結(jié)果示例

無論使用哪種傳輸模式,成功執(zhí)行后都會得到類似的結(jié)果:

2025-03-16T2351.211+08:00  INFO 67659 --- [      main] com.example.demo.DemoApplicationTests  : gitee mcp result: 目前 log4j/pig 倉庫中有以下開啟的 issue:

1. **JDK17 版本中 oauth2.0 的授權(quán)碼模式,無法通過 code 獲取到 access_token**
 - 編號: IBQJ94
 - 創(chuàng)建時間: 2025-03-04T1353+08:00
 - 鏈接: [https://gitee.com/log4j/pig/issues/IBQJ94](https://gitee.com/log4j/pig/issues/IBQJ94)

兩種模式的對比

特性 stdio 模式 SSE 模式
部署方式 本地子進(jìn)程 獨立服務(wù)器
適用場景 本地開發(fā) 分布式環(huán)境
配置復(fù)雜度 復(fù)雜 簡單
多客戶端支持 不支持 支持
網(wǎng)絡(luò)要求 需要網(wǎng)絡(luò)連接

總結(jié)

通過 Java 與 MCP 的結(jié)合,我們可以創(chuàng)建一個功能強大的 Gitee 倉庫助手,實現(xiàn)代碼管理的智能化和自動化。這不僅提高了開發(fā)效率,還減少了重復(fù)性工作,讓開發(fā)者能夠?qū)W⒂诟袆?chuàng)造性的任務(wù)。

MCP 提供的 stdio 和 SSE 兩種傳輸模式滿足了不同場景的需求:

? stdio 模式適合本地開發(fā)和測試

? SSE 模式適合分布式環(huán)境和多客戶端訪問

隨著 AI 技術(shù)的不斷發(fā)展,MCP 協(xié)議的功能也將越來越豐富,為開發(fā)者提供更多可能性。希望本文能夠幫助您了解如何使用 Java 玩轉(zhuǎn) MCP,打造屬于自己的 AI Gitee 倉庫助手。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2981

    瀏覽量

    105889
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    32686

    瀏覽量

    272068
  • 人工智能
    +關(guān)注

    關(guān)注

    1801

    文章

    48173

    瀏覽量

    242637
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3486

    瀏覽量

    43010
  • Git
    Git
    +關(guān)注

    關(guān)注

    0

    文章

    203

    瀏覽量

    15912

原文標(biāo)題:Java玩轉(zhuǎn)MCP:手把手教你打造Git AI倉庫助手

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Git常用的超級實用命令

    的一些Git工作流。 1 Git 常用的超級實用命令 1.1 與倉庫相關(guān)的操作 克隆代碼倉庫到本地,開發(fā)必用 git clone 查看本地
    的頭像 發(fā)表于 10-09 17:19 ?1245次閱讀
    <b class='flag-5'>Git</b>常用的超級實用命令

    Git 常用命令大全

    pull origin --tags上傳本地tag到遠(yuǎn)程倉庫:$ git push origin --tags創(chuàng)建帶注釋的tag:$ git tag -a [name] -m 'yo
    發(fā)表于 10-11 17:23

    git之推送提交

    下文章:git創(chuàng)建倉庫,并提交代碼(第一次創(chuàng)建并提交)以及updates were rejected because the tip of your current branch is behind its
    發(fā)表于 12-17 09:20

    git簡單使用(一)

    本帖最后由 iysheng 于 2017-2-19 23:09 編輯 編程,經(jīng)常會修改代碼,不管是將代碼托管到本地還是網(wǎng)上,使用git進(jìn)行版本控制無疑是比較流行的方法。今天我就記錄下如何創(chuàng)建倉庫
    發(fā)表于 02-17 16:18

    Linux 下建立 Git 與 GitHub的連接并clone至本地

    SSH 建立本地 Git 與 GitHub 的連接了。創(chuàng)建GitHub倉庫創(chuàng)建一個名為 baidu 的倉庫↑ SSH 地址為
    發(fā)表于 07-09 08:13

    Git學(xué)習(xí)經(jīng)驗總結(jié)

    創(chuàng)建Git版本倉庫創(chuàng)建一個空目錄mkdir MyGit cd MyGit pwd #顯示當(dāng)前目錄路徑將普通目錄變成Git版本庫
    發(fā)表于 07-12 08:00

    java如何創(chuàng)建對象的分析

    作為Java開發(fā)者,我們每天創(chuàng)建很多對象,但我們通常使用依賴管理系統(tǒng),比如Spring去創(chuàng)建對象。然而這里有很多創(chuàng)建對象的方法,我們會在這篇文章中學(xué)到。
    發(fā)表于 09-27 14:36 ?0次下載

    GitHub教程 倉庫創(chuàng)建、同步、刪除

    倉庫的使用教程大概會涉及三種方法: 在網(wǎng)頁上進(jìn)行建立刪除 在GitHub Desktop上操作 在Git Bash上操作 在網(wǎng)頁上直接操作 點進(jìn)你的交友頁面,右邊紅色的框框repositories
    發(fā)表于 01-17 01:48 ?485次閱讀

    Git中如何克隆,修改,添加和刪除文件的詳細(xì)資料概述

    在 本系列的第一篇文章 開始使用 Git 時,我們創(chuàng)建了一個簡單的 Git 倉庫,并用我們的計算機連接到它,向其中添加一個文件。在本文中,我們將學(xué)習(xí)一些關(guān)于
    的頭像 發(fā)表于 06-10 09:06 ?4258次閱讀
    在<b class='flag-5'>Git</b>中如何克隆,修改,添加和刪除文件的詳細(xì)資料概述

    如何在GitHub上創(chuàng)建一個全新的Git倉庫詳細(xì)講解

    如果您從未使用過 Git,甚至可能從未聽說過它。莫慌張,只需要一步步地跟著這篇入門教程,很快您就會在 GitHub 上擁有一個全新的 Git 倉庫。
    的頭像 發(fā)表于 06-10 09:13 ?1.4w次閱讀
    如何在GitHub上<b class='flag-5'>創(chuàng)建</b>一個全新的<b class='flag-5'>Git</b><b class='flag-5'>倉庫</b>詳細(xì)講解

    Java創(chuàng)建對象有哪些方式

    1 問題 作為Java開發(fā)者,經(jīng)常創(chuàng)建很多對象,你是否知道Java創(chuàng)建對象有哪些方式呢?
    的頭像 發(fā)表于 02-24 10:29 ?1148次閱讀

    獲取Git項目倉庫的兩種方式

    /user/my_project $ git init 該命令將創(chuàng)建一個名為 .git 的子目錄,這個子目錄含有你初始化的 Git 倉庫
    的頭像 發(fā)表于 07-22 11:05 ?1093次閱讀

    git如何記錄每次更新到倉庫

    可以用 git status 命令查看哪些文件處于什么狀態(tài)。如果在克隆倉庫后立即使用此命令,會看到類似這樣的輸出: $ git status On branch masterYour branch
    的頭像 發(fā)表于 07-22 11:11 ?639次閱讀
    <b class='flag-5'>git</b>如何記錄每次更新到<b class='flag-5'>倉庫</b>

    Git項目遠(yuǎn)程倉庫的使用

    遠(yuǎn)程倉庫的使用 為了能在任意 Git 項目上協(xié)作,你需要知道如何管理自己的遠(yuǎn)程倉庫。遠(yuǎn)程倉庫是指托管在因特網(wǎng)或其他網(wǎng)絡(luò)中的你的項目的版本庫。你可以有好幾個遠(yuǎn)程
    的頭像 發(fā)表于 07-22 11:31 ?679次閱讀

    idea怎么創(chuàng)建Java項目

    創(chuàng)建Java項目是一個相對較為復(fù)雜的過程,需要考慮到各種細(xì)節(jié)和步驟。本文將詳細(xì)介紹如何創(chuàng)建一個Java項目。 一、準(zhǔn)備工作 在創(chuàng)建
    的頭像 發(fā)表于 12-06 14:09 ?1089次閱讀