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
目前最新版本是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个问题,分别是:

复制代码
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个,也是正确的。

网上找了一些文章,使用的python的,基本上都是通过FastAPI来实现的,但是测试下来,效果都不好。

有些代码运行没问题,但是Cherry Studio客户端添加会出现各种报错。

即使添加MCP服务器没报错,但是在聊天窗口调用MCP服务器还是会出现各种报错。

怎么办呢?目前也没有找到能正常使用的python框架,只能等待fastmcp官方更新吧,希望快一些。

本文参考链接:
https://juejin.cn/post/7493404904725741603
https://www.cnblogs.com/formulahendry/p/18837144

相关推荐
Blockbuater_drug6 天前
Dify 1.18 本地部署实战:Windows + WSL2 + Docker,从零跑到本地可用
windows·docker·容器·dify·大模型应用平台
一木 之林8 天前
Dify学习笔记 03 · RAG检索增强生成:三代范式、评估与落地(第40-45、55-56集)
笔记·小程序·交互·dify
噜哥带你玩转 AI 大模型8 天前
从 “if-else“ 到 Agent:Dify 进阶实战,让 AI 自己判断、自己调工具
agent·工作流·dify·多轮对话·httpapi
一木 之林8 天前
Dify学习笔记 04 · 检索底座:Embedding、Rerank与向量数据库(第46-54集)
笔记·学习·embedding·dify
毒爪的小新8 天前
最新 Dify 1.14.0+ 内网离线插件打包、部署完整踩坑方案(解决 uv.lock 依赖校验失败)
运维·ai·uv·dify
死磕音视频11 天前
Dify 入门:用 Docker 自部署并搭建知识库问答助手
docker·知识库·dify·大模型应用
情 九12 天前
Dify 任务提交幂等实战:避免重复点击与网络重试创建重复任务
dify
一级新生14 天前
提示词工程:跟 AI 打交道的手艺
人工智能·大模型·dify·1024程序员节·提示词工程
情 九15 天前
Dify SSE 流式调用实战:执行进度、运行 ID 与断线核实
dify
一级新生15 天前
Dify 接入大模型:本地还是云端?实战与选型
人工智能·大模型·dify·ollama