來源: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 倉庫助手。
-
JAVA
+關(guān)注
關(guān)注
19文章
2981瀏覽量
105889 -
AI
+關(guān)注
關(guān)注
87文章
32686瀏覽量
272068 -
人工智能
+關(guān)注
關(guān)注
1801文章
48173瀏覽量
242637 -
開源
+關(guān)注
關(guān)注
3文章
3486瀏覽量
43010 -
Git
+關(guān)注
關(guān)注
0文章
203瀏覽量
15912
原文標(biāo)題:Java玩轉(zhuǎn)MCP:手把手教你打造Git AI倉庫助手
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
Git 常用命令大全
git之推送提交
git簡單使用(一)
Linux 下建立 Git 與 GitHub的連接并clone至本地
Git學(xué)習(xí)經(jīng)驗總結(jié)
java如何創(chuàng)建對象的分析
GitHub教程 倉庫的創(chuàng)建、同步、刪除
在Git中如何克隆,修改,添加和刪除文件的詳細(xì)資料概述

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

Java中創(chuàng)建對象有哪些方式
獲取Git項目倉庫的兩種方式
git如何記錄每次更新到倉庫

評論