|
1 | | -# FitMcpStreamableServerTransportProvider类维护文档 |
| 1 | +# MCP Server 插件维护文档 |
2 | 2 |
|
3 | 3 | ## 文档概述 |
4 | 4 |
|
5 | | -本文档用于记录 `FitMcpStreamableServerTransportProvider` 类的设计、实现细节以及维护更新指南。该类是基于 MCP SDK 中的 |
6 | | -`HttpServletStreamableServerTransportProvider` 类改造而来,用于在 FIT 框架中提供 MCP(Model Context Protocol)服务端的传输层实现。 |
7 | | - |
8 | | -**原始参考类**: MCP SDK 中的 `HttpServletStreamableServerTransportProvider` |
| 5 | +本文档用于记录 MCP Server 插件的设计、实现细节以及维护更新指南。该插件基于 MCP SDK 改造而来,用于在 FIT 框架中提供 MCP(Model Context Protocol)服务端的传输层实现。 |
9 | 6 |
|
10 | 7 | **创建时间**: 2025-11-04 |
11 | 8 |
|
12 | 9 | --- |
13 | 10 |
|
14 | | -## 类的作用和职责 |
| 11 | +## 架构概览 |
| 12 | + |
| 13 | +### DefaultMcpServer 的双 Bean 管理 |
| 14 | + |
| 15 | +`DefaultMcpServer` 是 MCP Server 的核心实现类,它同时管理两个 MCP 同步服务器 Bean: |
| 16 | + |
| 17 | +1. **McpSyncSseServer** - 用于 SSE (Server-Sent Events) 传输 |
| 18 | +2. **McpSyncStreamableServer** - 用于 Streamable 传输 |
| 19 | + |
| 20 | +这两个 Bean 分别由 `McpSseServerConfig` 和 `McpStreamableServerConfig` 配置类创建,并通过 `@Fit(alias = "...")` 注解进行区分注入: |
| 21 | + |
| 22 | +```java |
| 23 | +// McpSseServerConfig.java |
| 24 | +@Bean("McpSyncSseServer") |
| 25 | +public McpSyncServer mcpSyncSseServer(...) { ... } |
| 26 | + |
| 27 | +// McpStreamableServerConfig.java |
| 28 | +@Bean("McpSyncStreamableServer") |
| 29 | +public McpSyncServer mcpSyncStreamableServer(...) { ... } |
| 30 | + |
| 31 | +// DefaultMcpServer.java |
| 32 | +public DefaultMcpServer(ToolExecuteService toolExecuteService, |
| 33 | + @Fit(alias = "McpSyncSseServer") McpSyncServer mcpSyncSseServer, |
| 34 | + @Fit(alias = "McpSyncStreamableServer") McpSyncServer mcpSyncStreamableServer) { |
| 35 | + ... |
| 36 | +} |
| 37 | +``` |
| 38 | + |
| 39 | +`DefaultMcpServer` 实现了 `McpServer` 和 `ToolChangedObserver` 接口,负责: |
| 40 | +- 统一管理两个传输类型的工具注册和移除 |
| 41 | +- 确保两个 MCP 同步服务器保持工具列表同步 |
| 42 | +- 处理工具执行请求并返回结果 |
| 43 | +- 通知工具变更观察者 |
| 44 | + |
| 45 | +--- |
| 46 | + |
| 47 | +## FitMcpStreamableServerTransportProvider 类的作用和职责 |
15 | 48 |
|
16 | 49 | `FitMcpStreamableServerTransportProvider` 是 MCP 服务端传输层的核心实现类,负责: |
17 | 50 |
|
@@ -307,6 +340,45 @@ if(!this.response.isActive()){ |
307 | 340 | } |
308 | 341 | ``` |
309 | 342 |
|
| 343 | +--- |
| 344 | + |
| 345 | +## FitMcpSseServerTransportProvider 简要说明 |
| 346 | + |
| 347 | +`FitMcpSseServerTransportProvider` 是基于 MCP SDK 中的 `HttpServletSseServerTransportProvider` 改造而来的 FIT 框架实现,用于提供 MCP SSE 传输层。 |
| 348 | + |
| 349 | +### 与 Streamable 的主要区别 |
| 350 | + |
| 351 | +`FitMcpSseServerTransportProvider` 的实现与 `FitMcpStreamableServerTransportProvider` 非常相似,主要区别在于: |
| 352 | + |
| 353 | +1. **端点路径**: |
| 354 | + - SSE: `/mcp/sse` (GET) 和 `/mcp/message` (POST) |
| 355 | + - Streamable: `/mcp/streamable` (GET/POST/DELETE) |
| 356 | + |
| 357 | +2. **协议版本支持**: |
| 358 | + - SSE: 仅支持 `MCP_2024_11_05` |
| 359 | + - Streamable: 支持 `MCP_2024_11_05`、`MCP_2025_03_26`、`MCP_2025_06_18` |
| 360 | + |
| 361 | +3. **请求处理**: |
| 362 | + - SSE: GET 请求用于建立 SSE 连接,POST 请求用于发送 JSON-RPC 消息 |
| 363 | + - Streamable: GET 请求用于建立 SSE 连接或重放消息,POST 请求处理初始化和其他 JSON-RPC 消息,DELETE 请求用于删除会话 |
| 364 | + |
| 365 | +4. **会话管理**: |
| 366 | + - SSE: 使用 `McpServerSession`,会话通过 GET 请求建立 |
| 367 | + - Streamable: 使用 `McpStreamableServerSession`,会话通过 POST 初始化请求建立 |
| 368 | + |
| 369 | +### 核心改造点 |
| 370 | + |
| 371 | +与 Streamable 版本类似,SSE 版本也进行了以下 FIT 框架改造: |
| 372 | + |
| 373 | +- 使用 `HttpClassicServerRequest` 和 `HttpClassicServerResponse` 替代 Servlet API |
| 374 | +- 使用 `Choir<TextEvent>` 和 `Emitter<TextEvent>` 实现 SSE 事件流 |
| 375 | +- 使用 FIT 的 HTTP 注解 (`@GetMapping`, `@PostMapping`) 处理请求 |
| 376 | +- 使用 `Entity.createText()` 和 `Entity.createObject()` 创建响应 |
| 377 | + |
| 378 | +详细的实现细节可以参考 `FitMcpStreamableServerTransportProvider` 的相关章节。 |
| 379 | + |
| 380 | +--- |
| 381 | + |
310 | 382 | ## 参考资源 |
311 | 383 |
|
312 | 384 | ### MCP 协议文档 |
|
0 commit comments