Java玩轉MCP:手把手教你打造GitAI倉庫助手

背景

隨著人工智慧技術的快速發展,開發者工具也在不斷進化。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/v1
model-name:deepseek-chat
log-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)

兩種模式的對比

特性
stdio 模式
SSE 模式
部署方式
本地子程序
獨立伺服器
適用場景
本地開發
分散式環境
配置複雜度
複雜
簡單
多客戶端支援
不支援
支援
網路要求
需要網路連線

總結

透過 Java 與 MCP 的結合,我們可以建立一個功能強大的 Gitee 倉庫助手,實現程式碼管理的智慧化和自動化。這不僅提高了開發效率,還減少了重複性工作,讓開發者能夠專注於更有創造性的任務。
MCP 提供的 stdio 和 SSE 兩種傳輸模式滿足了不同場景的需求:
  • • stdio 模式適合本地開發和測試
  • • SSE 模式適合分散式環境和多客戶端訪問
隨著 AI 技術的不斷發展,MCP 協議的功能也將越來越豐富,為開發者提供更多可能性。希望本文能夠幫助您瞭解如何使用 Java 玩轉 MCP,打造屬於自己的 AI Gitee 倉庫助手。

閱讀更多
從零開始教你打造一個MCP客戶端
Gitee開源MCP Server:讓AI直接操作程式碼倉庫的“外掛”

相關文章