玩轉 MCP:手把手教你打造 Git AI 倉庫助手

一、背景

隨着人工智能技術的快速發展,開發工具也在不斷進化。Gitee 作爲國內領先的代碼託管平臺,推出了 MCP(Model Context Protocol,模型上下文協議)功能,幫助開發者利用 AI 助手高效管理代碼倉庫。Gitee 的 MCP Server 使 AI 能夠直接訪問代碼倉庫,進行 Issue 管理、Pull Request 審查及代碼操作等任務。這標誌着 AI 不再只是代碼的旁觀者,而是成爲了軟件開發過程中的智能參與者。

二、什麼是 MCP?

MCP 是一種允許 AI 模型與外部工具和服務直接交互的標準協議。通過 MCP,AI 模型不僅能讀取倉庫內容、查看提交歷史,還可以創建倉庫、提交代碼以及管理 Issue 和 Pull Request,實現真正的自動化操作。

MCP 協議主要優勢包括:

三、Java 生態下的 MCP 實現

雖然 Gitee 官方提供的是基於 Go 語言的實現,但 Java 開發者完全可以通過 LangChain4j 實現 MCP 集成。

LangChain4j 簡介

LangChain4j 是 Java 生態中集成 AI 服務的優秀工具,能夠輕鬆對接各類大型語言模型(LLM),並實現與 MCP 協議服務器的對接。

MCP Java 客戶端構建

在 Java Maven 項目中引入 LangChain4j 相關依賴:

<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>

配置 AI 模型

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 兩種傳輸模式,各適用於不同的開發場景。

(一)stdio 傳輸模式

stdio 模式通過本地標準輸入輸出流進行通信,適用於本地開發和測試。

實現代碼示例:

@Autowired

private ChatLanguageModel chatLanguageModel;



@SneakyThrows

@Test

void contextLoads() {

    McpTransport transport = new StdioMcpTransport.Builder()

            .command(List.of("/path/to/mcp-gitee", "-token", "GITEE-TOKEN"))

            .logEvents(true)

            .build();



    @Cleanup McpClient mcpClient = new DefaultMcpClient.Builder()

            .transport(transport)

            .build();



    ToolProvider toolProvider = McpToolProvider.builder()

            .mcpClients(List.of(mcpClient))

            .build();



    GiteeAiService giteeAiService = AiServices.builder(GiteeAiService.class)

            .chatLanguageModel(chatLanguageModel)

            .toolProvider(toolProvider)

            .build();



    String result = giteeAiService.chat("獲取 log4j/pig 開啓的 issue 列表");

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

}

(二)SSE 傳輸模式

SSE 模式通過 HTTP 連接,服務器主動推送事件,適用於分佈式、多客戶端環境。

服務器啓動命令:

mcp-gitee -transport sse -token GITEE-TOKEN

客戶端實現代碼示例:

@Autowired

private ChatLanguageModel chatLanguageModel;



@SneakyThrows

@Test

void contextLoads() {

    McpTransport sseTransport = new HttpMcpTransport.Builder()

            .sseUrl("http://localhost:8000/sse")

            .logRequests(true)

            .logResponses(true)

            .build();



    @Cleanup McpClient mcpClient = new DefaultMcpClient.Builder()

            .transport(sseTransport)

            .build();



    ToolProvider toolProvider = McpToolProvider.builder()

            .mcpClients(List.of(mcpClient))

            .build();



    GiteeAiService giteeAiService = AiServices.builder(GiteeAiService.class)

            .chatLanguageModel(chatLanguageModel)

            .toolProvider(toolProvider)

            .build();



    String result = giteeAiService.chat("獲取 log4j/pig 開啓的 issue 列表");

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

}

兩種模式對比

O5fzkJ

五、實際應用:打造 Gitee AI 倉庫助手

AI 助手通過 MCP,可以:

AI 查詢倉庫示例結果:

目前 log4j/pig 倉庫中有以下開啓的 issue:



1. JDK17 版本中oauth2.0的授權碼模式,無法通過code獲取到access_token

   - 編號: IBQJ94

   - 創建時間: 2025-03-04T13:04:53+08:00

安裝方式:

  1. 二進制下載:前往倉庫 release 頁,下載對應平臺的可執行文件

  1. 源碼編譯:
git clone https://gitee.com/oschina/mcp-gitee.git
cd mcp-gitee
make build

3.Go Install:

# 安裝 Go 1.23+ 
# 安裝 mcp-gitee
go install gitee.com/oschina/mcp-gitee@latest

六、總結與展望

通過 Java 與 MCP 的深度結合,可以創建一個功能強大的 Gitee 倉庫助手,實現智能化和自動化代碼管理。MCP 協議極大拓展了 AI 在代碼管理領域的可能性,將成爲企業級 AI 應用的重要基礎設施。隨着技術發展,未來開發者與 AI 的協作將更加緊密,軟件開發也將更加智能、高效。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/hyfwceZkzN6CstTHPX6n1A