MCP服务器
学习如何实现和配置模型上下文协议(MCP协议)服务器
概述
MCP服务器是模型上下文协议(MCP协议)架构中的基础组件,为客户端提供工具、资源和能力。它实现了协议的服务器端部分,负责:
- 暴露客户端可以发现和执行的工具
- 使用基于URI的访问模式管理资源
- 提供提示模板并处理提示请求
- 支持与客户端的能力协商
- 实现服务器端协议操作
- 管理并发客户端连接
- 提供结构化日志和通知
服务器支持同步和异步API,允许在不同的应用场景中灵活集成。
服务器传输
MCP SDK中的传输层负责处理客户端与服务器之间的通信。它提供了不同的实现以支持各种通信协议和模式。SDK包括多种内置的传输实现:
创建基于进程的传输:
通过标准输入/输出流提供双向JSON-RPC消息处理,支持非阻塞消息处理、序列化/反序列化和优雅关闭。
关键特性:
- 通过stdin/stdout进行双向通信
- 支持基于进程的集成
- 简单的设置和配置
- 轻量级实现
创建基于进程的传输:
通过标准输入/输出流提供双向JSON-RPC消息处理,支持非阻塞消息处理、序列化/反序列化和优雅关闭。
关键特性:
- 通过stdin/stdout进行双向通信
- 支持基于进程的集成
- 简单的设置和配置
- 轻量级实现
创建基于WebFlux的SSE服务器传输。
需要mcp-spring-webflux
依赖。
实现MCP HTTP与SSE传输规范,提供:
- 使用WebFlux的响应式HTTP流
- 通过SSE端点支持并发客户端连接
- 消息路由和会话管理
- 优雅关闭能力
创建基于WebMvc的SSE服务器传输。
需要mcp-spring-webmvc
依赖。
实现MCP HTTP与SSE传输规范,提供:
- 服务器端事件流
- 与Spring WebMVC集成
- 支持传统Web应用程序
- 同步操作处理
创建一个基于Servlet的SSE服务器传输。它包含在核心mcp
模块中。
HttpServletSseServerTransport
可以与任何Servlet容器一起使用。
要在Spring Web应用程序中使用它,可以将其注册为Servlet bean:
使用传统的Servlet API实现MCP HTTP与SSE传输规范,提供:
- 使用Servlet 6.0异步支持进行异步消息处理
- 管理多个客户端连接的会话
两种类型的端点:
- SSE端点(
/sse
)用于服务器到客户端的事件 - 消息端点(可配置)用于客户端到服务器的请求
- SSE端点(
- 错误处理和响应格式化
- 优雅关闭支持
服务器能力
服务器可以配置多种能力:
日志支持
服务器提供结构化日志功能,允许向客户端发送不同严重级别的日志消息:
客户端可以通过mcpClient.setLoggingLevel(level)
请求控制接收的最低日志级别。低于设置级别的消息将被过滤掉。
支持的日志级别(按严重程度递增):DEBUG (0), INFO (1), NOTICE (2), WARNING (3), ERROR (4), CRITICAL (5), ALERT (6), EMERGENCY (7)
工具注册
资源注册
提示注册
错误处理
SDK通过McpError类提供全面的错误处理,涵盖协议兼容性、传输通信、JSON-RPC消息、工具执行、资源管理、提示处理、超时和连接问题。这种统一的错误处理方法确保在同步和异步操作中一致且可靠的错误管理。