跳到主要内容

Model Context Protocol (MCP)

QWen Max 中英对照 Model Context Protocol (MCP)

提示

初次接触 MCP? 请从我们的 MCP 快速入门指南 开始,快速了解并动手实践示例。

Model Context Protocol(MCP)是一种标准化协议,它使 AI 模型能够以结构化的方式与外部工具和资源进行交互。可以将其视为连接你的 AI 模型与现实世界的桥梁——通过一致的接口,让它们能够访问数据库、API、文件系统及其他外部服务。它支持多种传输机制,以便在不同环境中提供灵活性。

MCP Java SDK 提供了 Model Context Protocol 的 Java 实现,通过同步和异步通信模式,实现与 AI 模型和工具的标准化交互。

Spring AI 通过专用的 Boot Starters 和 MCP Java 注解提供全面支持,使构建能够无缝连接外部系统的复杂 AI 驱动应用变得前所未有的简单。这意味着 Spring 开发者可以参与 MCP 生态系统的两端——既可构建消费 MCP 服务器的 AI 应用,也可创建将基于 Spring 的服务暴露给更广泛 AI 社区的 MCP 服务器。使用 Spring Initializer 快速启动支持 MCP 的 AI 应用。

MCP Java SDK 架构

提示

本节概述了 MCP Java SDK 架构。有关 Spring AI MCP 集成,请参阅 Spring AI MCP Boot Starters 文档。

Java MCP 实现遵循三层架构,以分离关注点,提高可维护性和灵活性:

MCP Stack Architecture

图 1. MCP 栈架构

客户端/服务器层(顶层)

顶层处理主要的应用逻辑和协议操作:

  • McpClient - 管理客户端操作和服务器连接

  • McpServer - 处理服务端协议操作和客户端请求

  • 两个组件均使用下层的会话层进行通信管理

会话层(中间)

中间层管理通信模式并维护连接状态:

  • McpSession - 核心会话管理接口

  • McpClientSession - 客户端特定的会话实现

  • McpServerSession - 服务端特定的会话实现

传输层(底层)

底层处理实际的消息传输和序列化:

  • McpTransport - 管理 JSON-RPC 消息的序列化与反序列化

  • 支持多种传输实现(STDIO、HTTP/SSE、Streamable-HTTP 等)

  • 为所有高层通信提供基础

MCP Client
MCP Client 是 Model Context Protocol (MCP) 架构中的关键组件,负责与 MCP 服务器建立并管理连接。它实现了协议的客户端部分,处理以下功能:

- 协议版本协商,以确保与服务器的兼容性

- 能力协商,以确定可用功能

- 消息传输与 JSON-RPC 通信

- 工具发现与执行

- 资源访问与管理

- Prompt 系统交互

- 可选功能:

- Roots 管理

- Sampling 支持


- 同步与异步操作

- 传输选项:

- 基于 Stdio 的传输,用于进程间通信

- 基于 Java HttpClient 的 SSE 客户端传输

- 基于 WebFlux 的 SSE 客户端传输,用于响应式 HTTP 流式传输
Java MCP Client Architecture
MCP Server
MCP Server 是 Model Context Protocol(MCP)架构中的基础组件,为客户端提供工具、资源和能力。它实现了协议的服务端部分,负责:

- 服务端协议操作的实现

- 工具的暴露与发现

- 基于 URI 的资源管理

- 提供并处理提示模板(Prompt template)

- 与客户端进行能力协商

- 结构化日志与通知


- 并发客户端连接管理

- 同步与异步 API 支持

- 传输层实现:

- Stdio、Streamable-HTTP、无状态 Streamable-HTTP、SSE
Java MCP Server Architecture

有关使用低级 MCP Client/Server API 的详细实现指南,请参阅 MCP Java SDK 文档。如需通过 Spring Boot 简化配置,请使用下文所述的 MCP Boot Starters。

Spring AI MCP 集成

Spring AI 通过以下 Spring Boot starters 提供 MCP 集成:

  • spring-ai-starter-mcp-client - 核心 starter,提供 STDIO、基于 Servlet 的 Streamable-HTTPStateless Streamable-HTTPSSE 支持

  • spring-ai-starter-mcp-client-webflux - 基于 WebFlux 的 Streamable-HTTPStateless Streamable-HTTPSSE 传输实现

STDIO

服务器类型依赖项属性
标准输入/输出 (STDIO)spring-ai-starter-mcp-serverspring.ai.mcp.server.stdio=true

WebMVC

服务器类型依赖项属性
SSE WebMVCspring-ai-starter-mcp-server-webmvcspring.ai.mcp.server.protocol=SSE 或留空
Streamable-HTTP WebMVCspring-ai-starter-mcp-server-webmvcspring.ai.mcp.server.protocol=STREAMABLE
无状态 Streamable-HTTP WebMVCspring-ai-starter-mcp-server-webmvcspring.ai.mcp.server.protocol=STATELESS

WebMVC (Reactive)

服务器类型依赖项属性
SSE WebFluxspring-ai-starter-mcp-server-webfluxspring.ai.mcp.server.protocol=SSE 或为空
Streamable-HTTP WebFluxspring-ai-starter-mcp-server-webfluxspring.ai.mcp.server.protocol=STREAMABLE
无状态 Streamable-HTTP WebFluxspring-ai-starter-mcp-server-webfluxspring.ai.mcp.server.protocol=STATELESS

除了程序化的 MCP 客户端与服务器配置外,Spring AI 还通过 MCP Annotations 模块为 MCP 服务器和客户端提供了基于注解的方法处理。这种方式使用简洁的声明式编程模型(Java 注解),简化了 MCP 操作的创建与注册。

MCP Annotations 模块使开发者能够:

  • 使用简单注解创建 MCP 工具、资源和提示

  • 以声明式方式处理客户端通知和请求

  • 减少样板代码并提高可维护性

  • 自动为工具参数生成 JSON Schema

  • 访问特殊参数和上下文信息

主要特性包括:

  • 服务端注解@McpTool@McpResource@McpPrompt@McpComplete

  • 客户端注解@McpLogging@McpSampling@McpElicitation@McpProgress

  • 特殊参数McpSyncServerExchangeMcpAsyncServerExchangeMcpTransportContextMcpMeta

  • 自动发现:支持可配置包包含/排除的注解扫描

  • Spring Boot 集成:与 MCP Boot Starters 无缝集成

附加资源

章节总结