概览
MCP 服务器是模型上下文协议(MCP)架构中的基础组件,为客户端提供工具、资源和功能。它实现了协议的服务器端,负责:- 公开客户端可发现并执行的工具
- 通过基于 URI 的访问模式管理资源
- 提供提示模板并处理提示请求
- 与客户端进行能力协商
- 实现服务器端协议操作
- 管理并发客户端连接
- 提供结构化日志和通知
- 同步 API
- 异步 API
服务器传输提供程序
MCP SDK 中的传输层负责处理客户端与服务器之间的通信。 它提供了多种实现,以支持不同的通信协议与模式。 SDK 内置了若干种传输提供程序实现:- STDIO
- SSE (WebFlux)
- SSE (WebMvc)
- SSE (Servlet)
创建基于进程内通信的传输:通过标准输入/输出流提供双向 JSON-RPC 消息处理,具备非阻塞消息处理、序列化/反序列化以及优雅关闭支持。关键特性:
- 通过 stdin/stdout 实现双向通信
- 支持基于进程的集成
- 简单设置与配置
- 轻量级实现
服务器能力
服务器可以配置多种能力:日志支持
服务器提供结构化日志功能,允许以不同的严重级别向客户端发送日志消息:mcpClient.setLoggingLevel(level) 请求来控制其接收的最低日志级别。低于该级别的消息将被过滤掉。支持的日志级别(按严重性递增顺序):DEBUG (0)、INFO (1)、NOTICE (2)、WARNING (3)、ERROR (4)、CRITICAL (5)、ALERT (6)、EMERGENCY (7)
工具规范
模型上下文协议允许服务器公开工具,供语言模型调用。Java SDK 支持使用处理函数实现工具规范。
工具使 AI 模型能够执行计算、访问外部 API、查询数据库以及操作文件:
- Sync
- 异步
name、description 和参数模式,随后是一个调用处理器,用于实现工具的逻辑。该函数的第一个参数是
McpAsyncServerExchange,用于与客户端交互;第二个参数是一个工具参数的映射。
资源规范
资源规范及其处理函数的定义。资源通过暴露以下数据为 AI 模型提供上下文:文件内容、数据库记录、API 响应、系统信息、应用程序状态。
资源规范示例:
- 同步
- 异步
资源定义包括
name、description 和 MIME type。处理资源读取请求的函数的第一个参数是一个
McpAsyncServerExchange,服务器可以通过它与已连接的客户端交互。第二个参数是一个
McpSchema.ReadResourceRequest。
提示规范
作为提示功能的一部分,MCP 提供了一种标准化的方式,让服务器向客户端公开提示模板。提示规范是一种用于 AI 模型交互的结构化模板,可实现一致的消息格式化、参数替换、上下文注入、响应格式化以及指令模板化。
- Sync
- 异步
McpAsyncServerExchange,用于与客户端交互;第二个参数是一个 GetPromptRequest 实例。
补全规范
作为补全功能的一部分,MCP 提供了一种标准化方式,让服务器能够为提示和资源 URI 的参数提供自动补全建议。- 同步
- 异步
McpSchema.CompletionReference 定义了完成规范的类型(PromptRefernce 或 ResourceRefernce)和标识符(例如 handler)。
handler 函数处理请求并返回完成响应。
第一个参数是 McpAsyncServerExchange,用于与客户端交互;第二个参数是一个 CompleteRequest 实例。
查看使用完成了解如何在客户端使用完成功能。
在服务器端使用采样
要使用采样功能,请连接到支持采样的客户端。 无需特殊的服务器配置,但在发起请求前请确认客户端支持采样。 了解客户端采样支持。 连接到兼容的客户端后,服务器即可请求语言模型生成:- 同步 API
- 异步 API
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)