概述
MCP 服务器是 Model Context Protocol (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)
工具规范
Model Context Protocol 允许服务器暴露工具供语言模型调用。 Java SDK 允许实现带有处理函数的工具规范。 工具使 AI 模型能够执行计算、访问外部 API、查询数据库和操作文件:- 同步
- 异步
name(名称)、description(描述)和 parameter schema(参数模式)的工具定义,以及实现工具逻辑的调用处理程序。
函数的第一个参数是用于客户端交互的 McpAsyncServerExchange,第二个参数是工具参数的映射。
资源规范
资源规范包含资源定义及其处理函数。 资源通过暴露以下数据为 AI 模型提供上下文:文件内容、数据库记录、API 响应、系统信息、应用程序状态。 资源规范示例:- 同步
- 异步
name(名称)、description(描述)和 MIME type(MIME 类型)。
处理资源读取请求的函数的第一个参数是 McpAsyncServerExchange,用于服务器与连接的客户端进行交互。
第二个参数是 McpSchema.ReadResourceRequest。
提示词规范
作为提示词功能的一部分,MCP 为服务器提供了向客户端暴露提示词模板的标准方式。 提示词规范是 AI 模型交互的结构化模板,支持一致的消息格式化、参数替换、上下文注入、响应格式化和指令模板化。- 同步
- 异步
McpAsyncServerExchange,第二个参数是 GetPromptRequest 实例。
在服务器中使用采样
要使用采样功能,需要连接到支持采样的客户端。 不需要特殊的服务器配置,但在发出请求前要验证客户端的采样支持。 了解客户端采样支持。 一旦连接到兼容的客户端,服务器就可以请求语言模型生成:- 同步 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)