來源:JAVA架構(gòu)日記,作者:冷冷
背景
隨著人工智能技術(shù)的快速發(fā)展,開發(fā)者工具也在不斷進(jìn)化。Gitee 作為國內(nèi)領(lǐng)先的代碼托管平臺(tái),現(xiàn)已推出 MCP (Model Control Protocol) 功能,讓開發(fā)者能夠通過 AI 助手更高效地管理代碼倉庫。
mcp-gitee 是 Gitee 的模型上下文協(xié)議 (MCP) 服務(wù)器實(shí)現(xiàn),它提供了一組與 Gitee API 交互的工具,允許 AI 助手管理倉庫、Issue、Pull Request 等。
Gitee開源MCP Server:讓AI直接操作代碼倉庫的“外掛”
雖然 Gitee 官方目前僅提供 Go 語言和各種圖形化配置的實(shí)現(xiàn),但這并不妨礙 Java 開發(fā)者大展身手!
本文將以 LangChain4j 為技術(shù)基座,為老 Javaer 們呈現(xiàn)一套 MCP 集成方案。通過深度結(jié)合 Java 生態(tài)優(yōu)勢,我們將從零構(gòu)建企業(yè)級(jí) 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ā)流程更加智能化和自動(dòng)化。
MCP 的核心優(yōu)勢在于:
? 為 AI 模型提供了與外部系統(tǒng)交互的標(biāo)準(zhǔn)接口
? 支持多種傳輸模式,適應(yīng)不同的使用場景
? 使 AI 能夠執(zhí)行實(shí)際操作,而不僅僅是提供建議
準(zhǔn)備工作
下載 Gitee MCP
首先,從Gitee MCP 發(fā)布頁下載對(duì)應(yīng)操作系統(tǒng)的 MCP Gitee Server。
筆者使用 Mac,下載解壓后需要分配執(zhí)行權(quán)限:
chmod+x mcp-gitee
構(gòu)建 MCP Java 客戶端
以 PIG AI 為例,根 Maven 項(xiàng)目中添加以下依賴:
PIG AI | 助力企業(yè)快速構(gòu)建Java AI應(yīng)用平臺(tái)
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)程啟動(dòng) MCP 服務(wù)器
? 通過標(biāo)準(zhǔn)輸入(stdin)向服務(wù)器發(fā)送請(qǐng)求
? 通過標(biāo)準(zhǔn)輸出(stdout)接收服務(wù)器的響應(yīng)
? 適合在本地開發(fā)環(huán)境中使用,無需額外的網(wǎng)絡(luò)配置
這種模式的優(yōu)點(diǎn)是設(shè)置簡單,無需額外的網(wǎng)絡(luò)配置;缺點(diǎn)是只能在本地使用,不適合分布式環(huán)境。
實(shí)現(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 的單向通信機(jī)制,允許服務(wù)器向客戶端推送數(shù)據(jù)。在 MCP 中使用 SSE 模式:
? MCP 服務(wù)器以獨(dú)立進(jìn)程運(yùn)行,監(jiān)聽 HTTP 請(qǐng)求
? 客戶端通過 HTTP 連接到服務(wù)器
? 服務(wù)器可以持續(xù)向客戶端推送事件和數(shù)據(jù)
? 適合在分布式環(huán)境中使用,支持多客戶端連接
SSE 模式的優(yōu)點(diǎn)是支持分布式部署,可以被多個(gè)客戶端同時(shí)訪問;缺點(diǎn)是配置相對(duì)復(fù)雜,需要額外的網(wǎng)絡(luò)設(shè)置。
實(shí)現(xiàn)步驟
首先,以 SSE 模式啟動(dòng) 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)// 可選:記錄請(qǐng)求日志 .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í)行后都會(huì)得到類似的結(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** - 編號(hào): IBQJ94 - 創(chuàng)建時(shí)間: 2025-03-04T1353+08:00 - 鏈接: [https://gitee.com/log4j/pig/issues/IBQJ94](https://gitee.com/log4j/pig/issues/IBQJ94)
兩種模式的對(duì)比
特性 | stdio 模式 | SSE 模式 |
部署方式 | 本地子進(jìn)程 | 獨(dú)立服務(wù)器 |
適用場景 | 本地開發(fā) | 分布式環(huán)境 |
配置復(fù)雜度 | 復(fù)雜 | 簡單 |
多客戶端支持 | 不支持 | 支持 |
網(wǎng)絡(luò)要求 | 無 | 需要網(wǎng)絡(luò)連接 |
總結(jié)
通過 Java 與 MCP 的結(jié)合,我們可以創(chuàng)建一個(gè)功能強(qiáng)大的 Gitee 倉庫助手,實(shí)現(xiàn)代碼管理的智能化和自動(dòng)化。這不僅提高了開發(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 倉庫助手。
-
JAVA
+關(guān)注
關(guān)注
20文章
2989瀏覽量
109531 -
AI
+關(guān)注
關(guān)注
88文章
35076瀏覽量
279409 -
人工智能
+關(guān)注
關(guān)注
1806文章
48999瀏覽量
249249 -
開源
+關(guān)注
關(guān)注
3文章
3677瀏覽量
43808 -
Git
+關(guān)注
關(guān)注
0文章
205瀏覽量
16210
原文標(biāo)題:Java玩轉(zhuǎn)MCP:手把手教你打造Git AI倉庫助手
文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Git常用的超級(jí)實(shí)用命令

Git 常用命令大全
git之推送提交
git簡單使用(一)
Git學(xué)習(xí)經(jīng)驗(yàn)總結(jié)
java如何創(chuàng)建對(duì)象的分析
GitHub教程 倉庫的創(chuàng)建、同步、刪除
在Git中如何克隆,修改,添加和刪除文件的詳細(xì)資料概述

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

Git概述及知識(shí)詳解
Java中創(chuàng)建對(duì)象有哪些方式
獲取Git項(xiàng)目倉庫的兩種方式
git如何記錄每次更新到倉庫

評(píng)論