MCP 伺服器啟動器
模型上下文協議 (MCP) 伺服器 是透過標準化協議介面向 AI 應用程式公開特定功能的程式。每個伺服器都為特定領域提供專注的功能。
Spring AI MCP 伺服器啟動器為在 Spring Boot 應用程式中設定 MCP 伺服器 提供自動配置。它們實現了 MCP 伺服器功能與 Spring Boot 自動配置系統的無縫整合。
MCP 伺服器啟動器提供:
-
MCP 伺服器元件的自動配置,包括工具、資源和提示
-
支援不同的 MCP 協議版本,包括 STDIO、SSE、可流式 HTTP 和無狀態伺服器
-
支援同步和非同步操作模式
-
多種傳輸層選項
-
靈活的工具、資源和提示規範
-
變更通知功能
-
基於註解的伺服器開發,具有自動 Bean 掃描和註冊功能
MCP 伺服器啟動器
MCP 伺服器支援多種協議和傳輸機制。使用專用的啟動器和正確的 spring.ai.mcp.server.protocol 屬性來配置您的伺服器
WebMVC
伺服器型別 |
依賴項 |
財產 |
|
|
|
|
|
|
|
|
伺服器功能
根據伺服器和傳輸型別,MCP 伺服器可以支援各種功能,例如
-
工具 - 允許伺服器公開可由語言模型呼叫的工具
-
資源 - 提供伺服器向客戶端公開資源的標準化方式
-
提示 - 提供伺服器向客戶端公開提示模板的標準化方式
-
實用程式/自動完成 - 提供伺服器為提示和資源 URI 提供引數自動完成建議的標準化方式
-
實用程式/日誌記錄 - 提供伺服器向客戶端傳送結構化日誌訊息的標準化方式
-
實用程式/進度 - 透過通知訊息對長時間執行的操作進行可選的進度跟蹤
-
實用程式/Ping - 伺服器報告其狀態的可選健康檢查機制
所有功能預設啟用。停用某個功能將阻止伺服器註冊並向客戶端公開相應的功能。
伺服器協議
MCP 提供多種協議型別,包括
-
STDIO - 程序內(例如伺服器在主機應用程式內部執行)協議。通訊透過標準輸入和標準輸出進行。要啟用
STDIO,請設定spring.ai.mcp.server.stdio=true。 -
SSE - 用於即時更新的伺服器傳送事件協議。伺服器作為獨立程序執行,可以處理多個客戶端連線。
-
可流式 HTTP - 可流式 HTTP 傳輸 允許 MCP 伺服器作為獨立程序執行,使用 HTTP POST 和 GET 請求處理多個客戶端連線,並可選地使用伺服器傳送事件 (SSE) 流式傳輸多個伺服器訊息。它取代了 SSE 傳輸。要啟用
STREAMABLE協議,請設定spring.ai.mcp.server.protocol=STREAMABLE。 -
無狀態 - 無狀態 MCP 伺服器設計用於簡化部署,其中請求之間不維護會話狀態。它們是微服務架構和雲原生部署的理想選擇。要啟用
STATELESS協議,請設定spring.ai.mcp.server.protocol=STATELESS。
同步/非同步伺服器 API 選項
MCP 伺服器 API 支援命令式(即同步)和響應式(例如非同步)程式設計模型。
-
同步伺服器 - 使用
McpSyncServer實現的預設伺服器型別。它專為應用程式中直接的請求-響應模式而設計。要啟用此伺服器型別,請在配置中設定spring.ai.mcp.server.type=SYNC。啟用後,它會自動處理同步工具規範的配置。
注意: SYNC 伺服器將只註冊同步 MCP 註解方法。非同步方法將被忽略。
-
非同步伺服器 - 非同步伺服器實現使用
McpAsyncServer,並針對非阻塞操作進行了最佳化。要啟用此伺服器型別,請使用spring.ai.mcp.server.type=ASYNC配置您的應用程式。此伺服器型別會自動設定帶有內建 Project Reactor 支援的非同步工具規範。
注意: ASYNC 伺服器將只註冊非同步 MCP 註解方法。同步方法將被忽略。
MCP 伺服器註解
MCP 伺服器啟動器為基於註解的伺服器開發提供全面支援,允許您使用宣告性 Java 註解而不是手動配置來建立 MCP 伺服器。
關鍵註解
-
@McpTool - 使用自動 JSON 模式生成將方法標記為 MCP 工具
-
@McpResource - 透過 URI 模板提供對資源的訪問
-
@McpPrompt - 為 AI 互動生成提示訊息
-
@McpComplete - 為提示提供自動完成功能
特殊引數
註解系統支援提供額外上下文的特殊引數型別
-
McpMeta- 訪問 MCP 請求中的元資料 -
@McpProgressToken- 接收長時間執行操作的進度令牌 -
McpSyncServerExchange/McpAsyncServerExchange- 用於高階操作的完整伺服器上下文 -
McpTransportContext- 用於無狀態操作的輕量級上下文 -
CallToolRequest- 用於靈活工具的動態模式支援
簡單示例
@Component
public class CalculatorTools {
@McpTool(name = "add", description = "Add two numbers together")
public int add(
@McpToolParam(description = "First number", required = true) int a,
@McpToolParam(description = "Second number", required = true) int b) {
return a + b;
}
@McpResource(uri = "config://{key}", name = "Configuration")
public String getConfig(String key) {
return configData.get(key);
}
}
示例應用程式
-
天氣伺服器 (SSE WebFlux) - 帶有 WebFlux 傳輸的 Spring AI MCP 伺服器啟動器
-
天氣伺服器 (STDIO) - 帶有 STDIO 傳輸的 Spring AI MCP 伺服器啟動器
-
天氣伺服器手動配置 - 不使用自動配置但使用 Java SDK 手動配置伺服器的 Spring AI MCP 伺服器啟動器
-
可流式 HTTP WebFlux/WebMVC 示例 - 待辦
-
無狀態 WebFlux/WebMVC 示例 - 待辦