MCP 服务器
学习如何实现和配置模型上下文协议(MCP)服务器
0.8.x 版本的重大变更 ⚠️
注意: 0.8.x 版本引入了多项重大变更,包括基于会话的新架构。 如果您从 0.7.0 版本升级,请参阅 迁移指南 以获取详细说明。
概述
MCP 服务器是模型上下文协议(MCP)架构中的基础组件,为客户端提供工具、资源和功能。它实现了协议的服务器端,负责:
- 暴露客户端可以发现和执行的工具
- 使用基于 URI 的访问模式管理资源
- 提供提示模板并处理提示请求
- 支持与客户端的能力协商
- 实现服务器端协议操作
- 管理并发客户端连接
- 提供结构化日志和通知
核心 io.modelcontextprotocol.sdk:mcp
模块提供了标准输入输出和 SSE 服务器传输实现,无需外部 Web 框架。
对于 Spring 框架 用户,可选择添加 可选 依赖 io.modelcontextprotocol.sdk:mcp-spring-webflux
和 io.modelcontextprotocol.sdk:mcp-spring-webmvc
以使用 Spring 特定的传输实现。
服务器支持同步和异步 API,允许在不同应用场景中灵活集成。
服务器传输提供者
MCP SDK 的传输层负责处理客户端与服务器之间的通信。 它提供多种实现以支持不同的通信协议和模式。 SDK 包含以下内置传输提供者实现:
创建基于进程的传输:
通过标准输入/输出流提供双向 JSON-RPC 消息处理,支持非阻塞消息处理、序列化/反序列化以及优雅关闭。
主要功能:
- 通过标准输入/输出进行双向通信
- 支持基于进程的集成
- 简单的设置和配置
- 轻量级实现
服务器功能
服务器可以配置多种功能:
日志支持
服务器提供结构化日志功能,允许以不同严重级别向客户端发送日志消息:
客户端可以通过 mcpClient.setLoggingLevel(level)
请求控制接收的最低日志级别。低于设定级别的消息将被过滤。
支持的日志级别(按严重程度递增):DEBUG (0)、INFO (1)、NOTICE (2)、WARNING (3)、ERROR (4)、CRITICAL (5)、ALERT (6)、EMERGENCY (7)
工具规范
模型上下文协议允许服务器暴露工具,供语言模型调用。 Java SDK 支持实现工具规范及其处理函数。 工具使 AI 模型能够执行计算、访问外部 API、查询数据库和操作文件:
工具规范包括工具定义(包含 name
、description
和 parameter schema
)以及实现工具逻辑的调用处理程序。
函数的第一个参数是 McpAsyncServerExchange
,用于与客户端交互,第二个参数是工具参数的映射。
资源规范
资源规范定义了资源及其处理函数。 资源通过暴露文件内容、数据库记录、API 响应、系统信息和应用程序状态等数据为 AI 模型提供上下文。 示例资源规范:
资源规范包括资源定义和资源读取处理程序。
资源定义包含 name
、description
和 MIME type
。
处理资源读取请求的函数的第一个参数是 McpAsyncServerExchange
,用于与连接的客户端交互,第二个参数是 McpSchema.ReadResourceRequest
。
提示规范
作为提示功能的一部分,MCP 提供了一种标准化的方式,允许服务器向客户端暴露提示模板。 提示规范是与 AI 模型交互的结构化模板,支持一致的消息格式、参数替换、上下文注入、响应格式化和指令模板化。
提示定义包括名称(提示的标识符)、描述(提示的用途)和参数列表(用于模板化的参数)。
处理函数处理请求并返回格式化的模板。
第一个参数是 McpAsyncServerExchange
,用于与客户端交互,第二个参数是 GetPromptRequest
实例。
从服务器使用采样
要使用采样功能,需连接到支持采样的客户端。 无需特殊的服务器配置,但在发出请求前需验证客户端是否支持采样。 了解有关客户端采样支持的信息。
连接到兼容的客户端后,服务器可以请求语言模型生成:
CreateMessageRequest
对象允许指定以下内容:Content
- 模型的输入文本或图像,
Model Preferences
- 模型选择的提示和优先级,System Prompt
- 模型行为的指令,
以及 Max Tokens
- 生成响应的最大长度。
日志支持
服务器提供结构化日志功能,允许以不同严重级别向客户端发送日志消息。 日志通知只能在现有的客户端会话中发送,例如工具、资源和提示调用。
例如,可以在工具处理函数中发送日志消息。 在客户端,可以注册日志消费者以接收来自服务器的日志消息,并设置最低日志级别以过滤消息。
服务器可以使用工具/资源/提示处理函数中的 McpAsyncServerExchange
/McpSyncServerExchange
对象发送日志消息:
客户端可以通过 mcpClient.setLoggingLevel(level)
请求控制接收的最低日志级别。低于设定级别的消息将被过滤。
支持的日志级别(按严重程度递增):DEBUG (0)、INFO (1)、NOTICE (2)、WARNING (3)、ERROR (4)、CRITICAL (5)、ALERT (6)、EMERGENCY (7)
错误处理
SDK 通过 McpError 类提供全面的错误处理,涵盖协议兼容性、传输通信、JSON-RPC 消息、工具执行、资源管理、提示处理、超时和连接问题。这种统一的错误处理方法确保了同步和异步操作的一致性和可靠性。