MCP协议Streamable HTTP
一、概述
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上面下载代码之后,进入项目代码目录,运行以下命令即可
npm install
npm run build
npm run start:streamableHttp
执行之后,会输出:
> 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

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

注意:url后面是mcp,因为官方给的sdk,url后面就是mcp
保存成功后,点击工具
这里可以看到一个工具run-code

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

根据github项目提示,演示了3个问题,分别是:
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
转换为中文
运行JavaScript代码:console.log(5+6)
我的操作系统中的临时文件夹在哪里?使用运行代码工具
我的机器上有多少个CPU?使用运行代码工具
分别输入3个问题
运行JavaScript代码:console.log(5+6)

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

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

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

确实是8个,也是正确的。
本文参考链接:
https://www.cnblogs.com/formulahendry/p/18837144
MCP协议Streamable HTTP的更多相关文章
- Nacos 1.1.4 发布,业界率先支持 Istio MCP 协议
Nacos是阿里巴巴开源的服务发现与配置管理项目,本次发布的1.1.4版本,主要带来的是与Istio的对接功能,使用的是Istio最新的MCP协议.本文将介绍包括这个功能在内的新版本发布的功能. 升级 ...
- 阿里巴巴 Service Mesh 落地的架构与挑战
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 方克明(溪翁 ...
- 早上好,我是 Istio 1.1
1性能增强 虽然Istio1.0的目标是生产可用,但从去年7月份发布以来,在性能和稳定性上并不能让用户满意.社区的Performance and Scalability工作组在Istio v1.1中做 ...
- Istio调用链埋点原理剖析—是否真的“零修改”分享实录(下)
调用链原理和场景 正如Service Mesh的诞生是为了解决大规模分布式服务访问的治理问题,调用链的出现也是为了对应于大规模的复杂的分布式系统运行中碰到的故障定位定界问题.大量的服务调用.跨进程.跨 ...
- (转载)OC学习篇之---协议的概念和用法
在前一篇文章中我们介绍了OC中类的延展,这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Jav ...
- 后台服务器框架中的瑞士军刀——MCP
上篇介绍了一个简单的UDP服务框架,但是面对海量的请求,同步框架显然有点力不从心.于是在我接手好友系统的接口服务的时候,就采用了一个强大的异步框架——MCP框架. MCP框架是一个多进程异步框架,支持 ...
- HTTP协议系列(1)
一.为什么学习Http协议 首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- 协议森林17 我和你的悄悄话 (SSL/TLS协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...
- 协议森林16 小美的桌号(DHCP协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...
随机推荐
- 如何让JS代码变的安全?
本文分享自天翼云开发者社区<如何让JS代码变的安全?>,作者:温****双 前端JS代码,直接暴露在浏览器中,任何访问者,都可以随意查看代码.这就导致代码可以被分析.复制.盗用等,进而引发 ...
- VS2022编译项目出现““csc.exe”已退出,代码为 -1073741819”的错误解决办法
1.问题描述 编译出错如下图所示: 2.解决办法 在NuGet包中输入Microsoft.Net.Compilers,安装该包,安装完后重新生成就不报错了,如下图所示:
- .NET最佳实践:避免滥用Task.Run
在 C# 中,Task.Run 是用来在后台线程中执行异步任务的一个常见方法. 它非常适用于需要并行处理的场景,但如果不加以谨慎使用,可能会导致额外的线程池调度,进而影响程序的性能. 什么是线程池? ...
- Github 访问失败,问题修复
参考学习链接: https://www.cnblogs.com/MuQuanyu-YuGod/articles/12549766.html Github 网站无法访问的解决方法: 解决方案: Cd到文 ...
- ABB机器人维修时如何零点校准
任何预防性维护计划的主要目的: 1.确保系统的最大利用率. 2.能够减少系统停机时间. 机器人和油漆系统的设计使其能够以最小的维护率在恶劣条件下运行.但是,仍必须定期进行常规检查和预防性维护. 对于工 ...
- SpringBoot中使用Netty实现TCP通讯,服务器主动向客户端发送数据
简述: Springboot项目的web服务后台,web服务运行在9100端口. 后台使用netty实现了TCP服务,运行在8000端口. 启动截图如下: pom依赖 <dependency ...
- 记录-C#给图片增加文字
业务需要动态给图片增加文字(书本的封面图片),修改字体大小.字体.颜色.控制位置 测试代码: 1 string path = @"E:\cover.png"; 2 3 Bitmap ...
- 北京大学DeepSeek系列教程:《DeepSeek与AIGC应用》
前言 今天大姚分享一个由北京大学推出的DeepSeek系列学习教程<DeepSeek与AIGC应用>,该文档全面介绍了DeepSeek-R1模型的技术特性.应用场景及其在AIGC领域的重要 ...
- 【Python】批量提取Fibersim xml文件中的节点网格数据
程序功能: 输入需求: fibersim导出的ply 的xml文件,可以很多个也没问题.但名字要有规律,不然没法循环读写.比如我自己用的就是x1.xml.x2.xml.Y1.xml......的文件名 ...
- 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
在 AI 编程领域国内外有一堆能叫的上号的应用: Cursor Windsurf Trae 阿里的「通义灵码」 百度的「文心快码」 字节跳动的「MarsCode」 科大讯飞的「iFlyCode」 Gi ...