模型上下文协议(MCP)
初次接触MCP?请从我们的《MCP入门指南》开始,获取快速介绍和实操示例。
模型上下文协议(MCP)是一项标准化协议,能够让AI模型以结构化方式与外部工具和资源进行交互。你可以将其视为连接AI模型与现实世界的桥梁——使AI模型能够通过统一的接口访问数据库、应用程序编程接口、文件系统及其他外部服务。该协议支持多种传输机制,可在不同环境中提供灵活的适配能力。
MCP Java软件开发工具包提供了模型上下文协议的Java实现,支持通过同步和异步两种通信模式,与AI模型和工具实现标准化交互。
Spring AI通过专用的启动器和MCP Java注解,全面支持MCP协议,让开发者能够更轻松地构建可无缝对接外部系统的复杂AI驱动应用。这意味着Spring开发者可以参与MCP生态的两端:开发调用MCP服务端的AI应用,以及创建向更广泛AI社区开放基于Spring服务的MCP服务端。你可以通过Spring Initializr快速初始化集成MCP支持的AI应用。
MCP Java SDK架构
本节将概述MCP Java SDK的架构。关于Spring AI MCP集成的相关内容,请参阅《Spring AI MCP启动器文档》。
Java版MCP实现采用三层架构,通过职责分离保障代码的可维护性和灵活性:
MCP协议栈架构
图1. MCP协议栈架构
客户端/服务端层(顶层)
顶层负责处理核心应用逻辑和协议操作:
McpClient——管理客户端操作与服务端连接
McpServer——处理服务端协议操作和客户端请求
这两个组件均依赖下方的会话层实现通信管理。
会话层(中间层)
中间层负责管理通信模式并维护连接状态:
McpSession——核心会话管理接口
McpClientSession——客户端专属会话实现
McpServerSession——服务端专属会话实现
传输层(底层)
底层负责实际的消息传输与序列化:
McpTransport——管理JSON-RPC消息的序列化与反序列化
支持多种传输实现(标准输入输出、HTTP/服务器发送事件、可流式传输HTTP等)
为所有上层通信提供基础支撑
MCP客户端
MCP客户端是模型上下文协议(MCP)架构中的核心组件,负责建立并管理与MCP服务端的连接。它实现了协议的客户端功能,主要处理:
协议版本协商,确保与服务端的兼容性
能力协商,确定可用功能
消息传输与JSON-RPC通信
工具发现与执行
资源访问与管理
提示词系统交互
可选功能:
根目录管理
采样支持
同步与异步操作
传输选项:
基于标准输入输出的传输,用于进程间通信
基于Java HttpClient的服务器发送事件客户端传输
WebFlux服务器发送事件客户端传输,用于响应式HTTP流传输
Java MCP客户端架构
MCP服务端
MCP服务端是模型上下文协议(MCP)架构中的基础组件,为客户端提供工具、资源和各类能力。它实现了协议的服务端功能,主要负责:
服务端协议操作实现
工具暴露与发现
基于统一资源标识符的资源管理
提示词模板提供与处理
与客户端进行能力协商
结构化日志与通知
并发客户端连接管理
同步与异步应用程序接口支持
传输实现:
标准输入输出、可流式传输HTTP、无状态可流式传输HTTP、服务器发送事件
Java MCP服务端架构
如需获取底层MCP客户端/服务端应用程序接口的详细实现指南,请参阅《MCP Java SDK文档》。若需通过Spring Boot简化配置,请使用下文介绍的MCP启动器。
Spring AI MCP集成
Spring AI通过以下Spring Boot启动器提供MCP集成支持:
客户端启动器
spring-ai-starter-mcp-client——核心启动器,支持标准输入输出、基于Servlet的可流式传输HTTP、无状态可流式传输HTTP和服务器发送事件
spring-ai-starter-mcp-client-webflux——基于WebFlux的可流式传输HTTP、无状态可流式传输HTTP和服务器发送事件传输实现
服务端启动器
标准输入输出
服务端类型 依赖项 配置属性 标准输入输出(STDIO) spring-ai-starter-mcp-server spring.ai.mcp.server.stdio=true
WebMVC
服务端类型 依赖项 配置属性 服务器发送事件WebMVC spring-ai-starter-mcp-server-webmvc spring.ai.mcp.server.protocol=SSE 或留空 可流式传输HTTP WebMVC spring-ai-starter-mcp-server-webmvc spring.ai.mcp.server.protocol=STREAMABLE 无状态可流式传输HTTP WebMVC spring-ai-starter-mcp-server-webmvc spring.ai.mcp.server.protocol=STATELESS
WebFlux(响应式)
服务端类型 依赖项 配置属性 服务器发送事件WebFlux spring-ai-starter-mcp-server-webflux spring.ai.mcp.server.protocol=SSE 或留空 可流式传输HTTP WebFlux spring-ai-starter-mcp-server-webflux spring.ai.mcp.server.protocol=STREAMABLE 无状态可流式传输HTTP WebFlux spring-ai-starter-mcp-server-webflux spring.ai.mcp.server.protocol=STATELESS
Spring AI MCP注解
除了编程式的MCP客户端和服务端配置外,Spring AI还通过MCP注解模块,为MCP服务端和客户端提供基于注解的方法处理方案。该方案采用简洁的声明式编程模型,通过Java注解简化MCP操作的创建与注册。
MCP注解模块支持开发者实现以下功能:
通过简易注解创建MCP工具、资源和提示词
声明式处理客户端通知与请求
减少样板代码,提升可维护性
自动生成工具参数的JSON模式
访问特殊参数和上下文信息
核心特性包括:
服务端注解:@McpTool、@McpResource、@McpPrompt、@McpComplete
客户端注解:@McpLogging、@McpSampling、@McpElicitation、@McpProgress
特殊参数:McpSyncServerExchange、McpAsyncServerExchange、McpTransportContext、McpMeta
自动发现:支持注解扫描,可配置包路径包含/排除规则
Spring Boot集成:与MCP启动器无缝整合