MCP融合Spring AI,Java程序員大模型技術再上一層樓
在當下的技術發展浪潮中,大語言模型(LLMs)正深度滲透至企業應用開發領域,持續改寫著該領域的格局。開發者積極將其融入現代解決方案。然而,快速發展背后,大語言模型通信和上下文處理缺乏標準化協議的問題日益凸顯。
本文介紹模型上下文協議(MCP),其與Spring AI集成,為解決上述難題提供有效途徑,助力大語言模型在企業應用開發中更好地落地。
1.問題:缺乏規范的大語言模型集成
如今,大多數開發者通過特定供應商的API(如OpenAI、Anthropic或Azure OpenAI)與大語言模型進行交互。盡管這些API功能強大,但在沒有標準接口的情況下進行集成會導致以下問題:
- 供應商鎖定:更換大語言模型供應商需要重寫核心邏輯。
- 上下文處理不一致:不同供應商在管理長期記憶、知識或工具訪問方面存在差異。
- 系統行為不明確:沒有正式規范來定義模型的需求,以及它們如何與外部工具和函數進行交互。
而模型上下文協議(MCP)正是為解決這些問題而生。
2.什么是MCP
模型上下文協議(MCP)是一種與供應商無關的協議,旨在實現大語言模型、智能體、工具、記憶系統和外部服務之間的互操作性。
模型上下文協議(MCP)是由Anthropic開發的開放標準,如今已成為一種開放協議,得到了包括LangChain、LangGraph,甚至Spring AI在內的多個社區和工具的支持。
可以把MCP想象成大語言模型領域的REST協議:它是一個簡潔且可擴展的規范,定義了如何構建輸入、輸出、工具、記憶和上下文。
3.人工智能的通用標準:一次編寫,隨處可用
在AI領域,模型上下文協議(MCP)致力于打造統一的通信規范。OpenAI、Anthropic等行業巨頭已采用MCP。
這一協議為開發者帶來極大便利。過去,針對不同大語言模型供應商和輔助應用,需構建定制集成。現在,借助MCP,開發者只需實現一次,就能在Claude、ChatGPT等眾多應用,以及未來支持該協議的客戶端中復用,有效提升開發效率,降低成本。
4.MCP如何工作:簡單的客戶端 - 服務器架構
MCP的基礎是簡潔且模塊化的客戶端 - 服務器架構。可以將其想象成一個中心輻射型模型,宿主應用程序(客戶端)通過與多個專門的MCP服務器進行通信來完成任務。
圖片
具體如下:
- MCP宿主:這些是前端工具或應用程序,如Claude桌面應用、代碼編輯器或人工智能智能體,它們希望與數據、工具或邏輯進行交互。
- MCP客戶端:每個宿主應用程序通過該協議與一個或多個MCP服務器保持專用連接。這使得客戶端可以發送請求、接收響應,甚至觸發工具。
- MCP服務器:這些是輕量級的后端程序,通過模型上下文協議公開特定功能,如訪問本地文件、觸發API或運行工作流。每個服務器都可以是專門構建且獨立的。
- 本地數據源:用戶本地機器上的文件、數據庫或微服務,可由MCP服務器安全訪問。
- 遠程服務:MCP服務器可以連接的API或云平臺,擴展了服務器的功能范圍,使其超越本地環境。
MCP支持開發者圍繞一種名為JsonRpcMessage的正式模式來構建大語言模型交互。
5.MCP與Spring AI集成
Spring AI通過提供即用型的Spring Boot啟動器,使將模型上下文協議(MCP)集成到應用程序變得輕松。這些啟動器涵蓋客戶端和服務器端設置,并支持多種通信傳輸方式,如標準輸入輸出(STDIO)和服務器發送事件(SSE)。
5.1 客戶端啟動器
這些啟動器幫助應用程序連接到MCP服務器:
spring-ai-starter-mcp-client
:核心的MCP客戶端,內置對基于STDIO和HTTP的SSE通信的支持。spring-ai-starter-mcp-client-webflux
:使用WebFlux為SSE傳輸添加響應式支持。
5.2 服務器啟動器
這些用于使用Spring Boot構建自定義MCP服務器:
spring-ai-starter-mcp-server
:使用STDIO傳輸的基本服務器設置,適用于基于進程的通信。spring-ai-starter-mcp-server-webmvc
:使用Spring MVC提供SSE服務器支持,適用于基于Servlet的環境。spring-ai-starter-mcp-server-webflux
:適用于使用Spring WebFlux的應用程序的SSE服務器的響應式版本。
支持STDIO、Servlet SSE、WebFlux和WebMVC傳輸。
圖片
6.使用STDIO傳輸啟動Spring AI MCP服務器
以下是一個完整的示例,展示如何使用Spring AI設置MCP服務器。該示例功能完備,且使用Spring Boot進行了清晰的組織。此示例使用spring-ai-starter-mcp-server
,并可選支持STDIO和/或基于HTTP的SSE傳輸。
官方文檔提供了詳細指南:https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html
6.1 Maven依賴
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
@SpringBootApplication
publicclass SpringMcpApplication {
privatestaticfinal Logger log = LoggerFactory.getLogger(SpringMcpApplication.class);
public static void main(String[] args) {
SpringApplication.run(SpringMcpApplication.class, args);
}
@Bean
public List<ToolCallback> danTools(SpringMCPServerService courseService) {
log.info(Arrays.toString(Thread.currentThread().getStackTrace()).replace(',', '\n'));
return Arrays.asList(ToolCallbacks.from(courseService));
}
}
@Service
publicclass SpringMCPServerService {
@Tool(name = "get_system_information", description = "Gathers detailed system-level diagnostics including directory info, OS and architecture details, JVM configuration, memory stats, CPU load, and installed software versions.")
public static SystemInfo getSystemInfo() {
SystemInfo info = new SystemInfo();
Properties props = System.getProperties();
info.osName = props.getProperty("os.name");
//......
}
}
spring.application.name=courses
spring.main.web-application-type=none
spring.ai.mcp.server.name=jagnya-selflearn-mcp
spring.ai.mcp.server.versinotallow=0.0.1
spring.main.banner-mode=off
logging.pattern.cnotallow=
6.2 關鍵配置說明
- STDIO模式要求:
禁用Web應用類型(spring.main.web-application-type=none
)
禁用Spring啟動橫幅(spring.main.banner-mode=off
)
清空控制臺日志模式(logging.pattern.cnotallow=
)
7.MCP服務器與Claude(Anthropic)客戶端的集成
現在我們已經實現了MCP服務器,接下來要將它與Anthropic的Claude AI進行集成。這可以驗證服務器是否正常運行,以及是否能夠為像Claude這樣符合MCP規范的客戶端提供上下文數據。
圖片
8.MCP服務器與Claude桌面應用集成:分步指南
以下是如何將基于Spring的MCP服務器與Claude桌面應用(Anthropic)進行集成,以驗證一切是否按預期工作:
1) 如果尚未下載,請從Anthropic網站下載并安裝Claude桌面應用。
2) 啟動Claude桌面應用程序。Claude設計為支持通過模型上下文協議(MCP)與自定義人工智能模型服務器進行通信。
- 進入Claude的“設置”。
- 導航到“開發者”部分。
- 點擊“編輯配置”以打開
claude_desktop_config.json
。 - 使用自定義MCP服務器配置更新
claude_desktop_config.json
。例如:
{
"mcpServers": {
"jagnya-spring-mcp": {
"command": "/Users/user/Library/Java/JavaVirtualMachines/sapmachine-21.0.6/Contents/Home/bin/java",
"args": [
"-jar",
"/Users/<add ur path to jar>/spring-mcp/target/spring-mcp-0.0.1-SNAPSHOT.jar"
]
}
}
}
3) 保存配置后,重啟Claude桌面應用。
如果一切配置正確,你會看到:
- 一個代表開發者工具的錘子圖標???
- 一個代表自定義集成的插件圖標??
- 點擊錘子圖標打開MCP工具。
- 在Claude中輸入以下內容:
Hi, get my system details with the Java version installed.
- Claude會彈出一個權限請求對話框,點擊“允許”。
圖片