收藏本站,收获最前沿的人工智能与编程资讯!!

模型上下文协议(MCP)

技术文档 13℃ 0

模型上下文协议(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启动器无缝整合

相关推荐