背景
MCP 是什麼?
-
• 為 AI 模型提供了與外部系統互動的標準介面 -
• 支援多種傳輸模式,適應不同的使用場景 -
• 使 AI 能夠執行實際操作,而不僅僅是提供建議
準備工作
下載 Gitee MCP
chmod +x mcp-gitee
構建 MCP Java 客戶端

<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 模式
stdio 模式概念
-
• 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 模式概念
-
• MCP 伺服器以獨立程序執行,監聽 HTTP 請求 -
• 客戶端透過 HTTP 連線到伺服器 -
• 伺服器可以持續向客戶端推送事件和資料 -
• 適合在分散式環境中使用,支援多客戶端連線
實現步驟
mcp-gitee -transport sse -token GITEE-TOKEN
@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 模式適合分散式環境和多客戶端訪問
