MCP协议Streamable HTTP
笔记哥 /
04-24 /
43点赞 /
0评论 /
685阅读
# 一、概述
2025 年 3 月 26 日,模型上下文协议(Model Context Protocol,简称 MCP)引入了一项关键更新:用 Streamable HTTP 替代原先的 HTTP + SSE 作为默认传输方式。
这一变更在解决原有方案中连接不可恢复、服务端长连接压力大等问题的同时,依然保留了 SSE 带来的流式响应优势。
## HTTP + SSE 的缺陷
远程 `MCP` 通过 `HTTP + SSE` 的传输方式工作,存在以下问题,这也是它所被替换的根本原因:
- 不支持恢复连接
- 要求服务器保持高可用的长连接
- 服务器只能通过 `SSE` 发送消息
### 不支持恢复连接
如果客户端和服务器之间的 `SSE` 连接中断了,就无法 “从端点继续”,只能重新开始新的连接,之前的上下文可能会丢失。
### 要求服务器保持高可用的长连接
服务器必须一直保持一个稳定、不中断的 `SSE` 长连接,否则通信就中断。
### 服务器只能通过 `SSE` 发送消息
服务器无法在已有的请求之外,主动地发送消息给客户端,除了通过专门的 /sse 通道。换句话说,它是“单向被动响应”,而不是“任意时机推送”。
# 二、Streamable HTTP
`Streamable HTTP` 并不是传统意义上的 **流式 HTTP**(`Streaming HTTP`),它指的是一种 **兼具以下特性的传输机制**:
- 以普通 `HTTP` 请求为基础,客户端用 `POST/GET` 发请求;
- 服务器可选地将响应升级为 `SSE` 流,实现 **流式传输** 的能力(当需要时);
- 去中心化、无强制要求持续连接,支持 `stateless` 模式;
- 客户端和服务端之间的消息传输更加灵活,比如同一个 `/message` 端点可用于发起请求和接收 `SSE` 流;
- 不再需要单独的 `/sse` 端点,一切通过统一的 `/message` 协议层处理。
## Streamable HTTP 的优势
- 支持无状态服务器:无需维持高可用的长连接
- 纯 `HTTP` 实现:`MCP` 可在纯 `HTTP` 服务中实现,无需 `SSE` 支持
- 兼容基础设施:因为 “只是 HTTP”,可以与中间件和现有基础设施良好集成
- 向后兼容:是当前 `HTTP+SSE` 传输方式的渐进式改进
- 灵活的传输方式:服务器可选择是否使用 `SSE` 进行流式响应
## 从 HTTP+SSE 到 Streamable HTTP 的变化
- 移除了 `/sse` 端点
- 所有客户端 → 服务端的消息都通过 `/message`(或类似端点)发送
- 所有客户端 → 服务端的请求都可以被服务器升级为 `SSE`,以发送通知或请求
- 服务器可以选择建立会话 `ID` 以维护状态
- 客户端可以通过对 `/message` 发送一个空的 `GET` 请求启动 `SSE` 流
- 该方法兼容旧版本的实现,并允许服务器保持无状态(如果有需要)

# 三、Streamable HTTP demo演示
目前我所了解到的,Java,Nodejs,这些都已经支持了Streamable HTTP。
之前用的fastmcp框架,目前不支持Streamable HTTP,但是官方表示,未来会支持,具体发布时间待定。
所以本文要演示Streamable HTTP,只能用Nodejs了,Java代码,我也不会。
## mcp-server-code-runner
mcp-server-code-runner是github里面的一个支持Streamable HTTP的项目,github地址:https://github.com/formulahendry/mcp-server-code-runner
### 安装 Node.js
从 https://nodejs.org/en 安装 LTS 版的 Node.js 即可。
### 运行Streamable HTTP
从github上面下载代码之后,进入项目代码目录,运行以下命令即可
```csharp
npm install
npm run build
npm run start:streamableHttp
```
执行之后,会输出:
```csharp
> mcp-server-code-runner@0.1.6 start:streamableHttp
> node dist/streamableHttp.js
Code Runner MCP Streamable HTTP Server listening on port 3088
```
这里可以看到,监听端口是3088
## Cherry Studio添加Streamable HTTP
请确保你的Cherry Studio客户端是最新版本,因为只有最新版本,才支持Streamable HTTP
下载地址:https://github.com/CherryHQ/cherry-studio/releases
目前最新版本是v1.2.7

安装完成后,点击MCP服务器
## 添加MCP服务器
名称:streamable-http-mcp
类型:Streamable HTTP
URL:http://localhost:3088/mcp

**注意:url后面是mcp,因为官方给的sdk,url后面就是mcp**
**这里新增了请求头,如果你觉得MCP Server暴露在公网,任何人都可以接入MCP Server不安全,这里是可以做token校验的**
**需要修改MCP Server里面的逻辑代码,建立请求之前,就校验token。如果是非法token,就返回401错误。**
保存成功后,点击工具
这里可以看到一个工具run-code

## MCP测试
新建一个默认助手,在对话框,选择MCP设置,选择添加的MCP服务器,streamable-http-mcp

根据github项目提示,演示了3个问题,分别是:
```csharp
Run the JavaScript Code: console.log(5+6)
Where is temporary folder in my OS? Use run-code tool
How many CPUs do I have in my machine? Use run-code tool
```
转换为中文
```csharp
运行JavaScript代码:console.log(5+6)
我的操作系统中的临时文件夹在哪里?使用运行代码工具
我的机器上有多少个CPU?使用运行代码工具
```
分别输入3个问题
### 运行JavaScript代码:console.log(5+6)

答案是11,是正确的
### 我的操作系统中的临时文件夹在哪里?使用运行代码工具

答案是,C:\Users\98733\AppData\Local\Temp,也是对的。
### 我的机器上有多少个CPU?使用运行代码工具

打开任务管理,选择性能,右下角可以看到核心数

确实是8个,也是正确的。
网上找了一些文章,使用的python的,基本上都是通过FastAPI来实现的,但是测试下来,效果都不好。
有些代码运行没问题,但是Cherry Studio客户端添加会出现各种报错。
即使添加MCP服务器没报错,但是在聊天窗口调用MCP服务器还是会出现各种报错。
怎么办呢?目前也没有找到能正常使用的python框架,只能等待fastmcp官方更新吧,希望快一些。
本文参考链接:
https://juejin.cn/post/7493404904725741603
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/2561
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利
- 相关联分享
- 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- C#实现MCP Client 与 LLM 连接,抓取网页内容功能!
- 如何实现本地大模型与MCP集成
- MCP协议Streamable HTTP
- 如何把ASP.NET Core WebApi打造成Mcp Server
- MCP应用的docker与docker - compose部署
- 开源的DeekWiki加入MCP,为您的Cursor提供开源项目分析,轻松让AI掌握开源项目使用文档!
- BotSharp 5.0 MCP:迈向更开放的AI Agent框架
- MCP官方C# SDK:实现.NET与MCP客户端和服务器快速交互
- Chat to MySQL 最佳实践:MCP Server 服务调用
- 容器化MCP Server的必要性与操作指南