MCP(Model Context Protocol)模型上下文协议 进阶篇3 - 传输

MCP 目前定义了两种标准的客户端-服务端通信传输机制:

  1. stdio(标准输入输出通信)
  2. HTTP with Server-Sent Events (SSE)(HTTP 服务端发送事件)

客户端应尽可能支持 stdio。此外,客户端和服务端也可以以插件方式实现自定义传输机制。


1. stdio 传输


在 stdio 传输中:

  • 客户端将 MCP 服务端作为子进程启动。
  • 服务端通过标准输入(stdin)接收 JSON-RPC 消息,并通过标准输出(stdout)写入响应。
  • 消息以换行符分隔,且不得包含嵌入的换行符。
  • 服务端可以将 UTF-8 字符串写入标准错误(stderr)以用于日志记录。客户端可以选择捕获、转发或忽略这些日志。
  • 服务端不得向 stdout 写入任何非法的 MCP 消息。
  • 客户端不得向服务端的 stdin 写入任何非法的 MCP 消息。


2. HTTP with SSE 传输


在 SSE 传输中,服务端作为独立进程运行,可以处理多个客户端连接。
服务端必须提供两个端点:

  1. SSE 端点:用于客户端建立连接并接收服务端消息。
  2. HTTP POST 端点:用于客户端向服务端发送消息。

当客户端连接时,服务端必须发送一个包含 URI 的 endpoint 事件,客户端使用该 URI 发送消息。所有后续客户端消息必须通过 HTTP POST 请求发送到此端点。
服务端消息以 SSE 消息事件的形式发送,消息内容以 JSON 编码在事件数据中。


3. 自定义传输 (Custom Transports)


客户端和服务端可以根据需要实现额外的自定义传输机制。MCP 协议与传输方式无关,可以在任何支持双向消息交换的通信通道上实现。
选择支持自定义传输的实现者必须确保其符合 MCP 定义的 JSON-RPC 消息格式和生命周期要求。自定义传输应记录其特定的连接建立和消息交换模式,以促进互操作性。


4. 补充说明:远程 MCP 连接的支持

官方文档中关于传输方式的描述可能会让部分开发者误解,认为 Remote MCP Connections(远程 MCP 连接)已经实现。实际上,当前的客户端和服务端都是在本地运行的。(当前如果需要连接远程服务器,需要在客户端-服务端连接后,由本地服务端再次向远程服务器发起连接)

这一点在官方的 2025 年路线图中有所提及:

实现 Remote MCP Connections是当前MCP项目组的最高优先级,允许客户端通过互联网安全地连接到 MCP 服务端。关键举措包括:

  1. 认证与授权 (Authentication & Authorization):增加标准化的认证能力,特别是专注于 OAuth 2.0 支持。
  2. 服务发现 (Service Discovery):定义客户端如何发现并连接到远程 MCP 服务器。
  3. 无状态操作 (Stateless Operations):探讨 MCP 是否可以支持无服务器环境(serverless environments),在这种环境中,操作需要尽可能无状态。

总结

MCP 目前支持两种标准传输方式:stdio 和 HTTP with SSE,同时也允许自定义传输机制。每种传输方式都有其特定的消息交换模式和实现要求。需要注意的是,当前 MCP 客户端-服务端通信传输机制的实现仅限于本地通信,远程连接的支持计划在 2025 年的路线图中逐步实现,包括认证授权、服务发现和无状态操作等关键功能。开发者可以根据需求选择合适的传输方式,并关注未来的MCP远程连接支持进展。

### Spring AI MCP Java SDK 概述 Spring AI MCP 是一种基于 Model Context Protocol (MCP) 的 Java 实现,旨在简化模型上下文协议的应用开发过程。通过该 SDK,开发者可以轻松构建支持 MCP 协议的服务端和客户端应用程序[^1]。 #### 核心功能 - **多传输选项**:支持多种通信方式,便于灵活集成到不同的技术栈中。 - **三层架构设计**: - **MCP 客户端**:负责向服务端发送请求并处理响应。 - **MCP 服务器**:提供 API 接口供客户端调用,并管理模型上下文数据。 - **工具回调接口(ToolCallbackProvider)**:允许扩展自定义行为以适应特定需求[^2]。 --- ### 使用方法 以下是关于如何使用 Spring AI MCP Java SDK 构建服务端和客户端的具体指导: #### 1. 引入 Maven 依赖 在项目的 `pom.xml` 文件中添加以下依赖项来引入 Spring AI MCP SDK: ```xml <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-mcp</artifactId> <version>1.0.0-M6</version> </dependency> ``` #### 2. 配置 YML 文件 创建或修改项目中的 `application.yml` 或 `application.properties` 文件,设置必要的参数。例如: ```yaml spring: ai: mcp: server-url: http://localhost:8080/mcp-server client-id: my-client-id secret-key: my-secret-key ``` #### 3. 编写服务端代码 服务端需要实现 ToolCallbackProvider 并将其注册到容器中。示例代码如下: ```java import org.springframework.ai.mcp.ToolCallbackProvider; import org.springframework.stereotype.Component; @Component public class MyToolCallbackProvider implements ToolCallbackProvider { @Override public String handleRequest(String requestPayload) { // 自定义逻辑处理接收到的数据 return "Response from tool callback provider"; } } ``` 同时,在控制器类中暴露 RESTful API 来接收来自客户端的请求: ```java import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/mcp-server") public class McpServerController { private final ToolCallbackProvider toolCallbackProvider; public McpServerController(ToolCallbackProvider toolCallbackProvider) { this.toolCallbackProvider = toolCallbackProvider; } @PostMapping("/process") public String process(@RequestBody String payload) { return toolCallbackProvider.handleRequest(payload); } } ``` #### 4. 编写客户端代码 客户端可以通过简单的 HTTP 请求服务端交互。下面展示了一个基本的 Controller 示例: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; @RestController @RequestMapping("/mcp-client") public class McpClientController { private final RestTemplate restTemplate; @Value("${spring.ai.mcp.server-url}") private String serverUrl; public McpClientController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @GetMapping("/send-request") public ResponseEntity<String> sendRequest() { String url = serverUrl + "/process"; String requestBody = "{\"key\":\"value\"}"; return restTemplate.postForEntity(url, requestBody, String.class); } } ``` --- ### 总结 Spring AI MCP 提供了一套完整的解决方案,帮助开发者快速搭建基于 MCP 协议的应用程序。无论是作为服务提供商还是消费者角色,都可以借助其强大的功能模块完成复杂的业务场景需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值