当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > MCP 2026-07-28 怎么迁移:无会话请求、MRTR 与工具调用验收

MCP 2026-07-28 怎么迁移:无会话请求、MRTR 与工具调用验收

来源:17golang原创 2026-08-16 18:08:48 0浏览 收藏

把 MCP 服务器从单实例部署迁移到普通负载均衡集群后,最容易暴露的问题往往不在工具逻辑本身,而是旧实现偷偷依赖了 Mcp-Session-Id:第一次请求落到 A 实例,用户补充信息后重试却跑到了 B 实例,服务端找不到上一次的上下文。MCP 2026-07-28 的协议核心正是针对这个问题做的改造——请求可以自描述,按普通 HTTP 规则路由,工具调用需要用户补充内容时,再通过 MRTR 返回可重试的输入请求。

要点速览
  • 迁移重点不是直接把会话字段删掉,而是把跨请求依赖的状态改成显式句柄或者可回放的请求状态。
  • Streamable HTTP 请求要让 Mcp-MethodMcp-Name 与 JSON-RPC 方法、工具名保持一致。
  • input_required 不是最终业务结果,客户端收集用户答案后要带回 requestState 再次提交原工具调用。
  • 灰度验收至少覆盖跨实例重试、重复提交、用户拒绝和旧客户端兼容四条路径。

先看迁移场景:为什么“有会话”会卡在负载均衡后

旧实现常把连接或者会话 ID 当成上下文索引:工具调用开始时在内存里记下当前步骤,服务端再通过长连接等待用户确认。这种方式在单机部署时逻辑很直观,但一旦前面换成轮询负载均衡,第二个请求就可能被送到另一台实例;如果实例之间没有做共享状态,用户的确认信息就完全接不回原流程。

MCP 2026-07-28 的设计方向是让每个请求尽量做到自描述。客户端可以先做 server/discover,也可以直接发送具体请求;服务端不再把协议级会话作为每次调用的隐含前提。应用层仍然可以保留业务状态,但要把状态句柄放进工具参数或者请求状态里,让它能被记录、重试和审计。

三类改动要分开:协议、网关和应用状态

改动面迁移前常见做法迁移后验收点
协议请求依赖 initialize、initialized 和会话头请求携带版本与调用信息,可被任意实例接收
网关路由按连接或粘性会话转发Mcp-MethodMcp-Name 路由,并检查头体一致
业务状态服务端内存保存“下一步”流程状态用显式句柄或 requestState 承接重试

这里别着急一次性重写所有工具。先把网关日志补全方法头、工具名、请求 ID 和实例名字段,再从一个需要用户确认的工具开始做双实例灰度。能证明第二次请求完全不依赖第一台机器的内存状态,迁移才算过了第一关。

MCP 2026-07-28 从会话粘滞迁移到无会话请求的实例路由证据图

请求头和请求体怎么对齐:先在网关挡住错路由

新的 Streamable HTTP 路由信息可以放在 Mcp-MethodMcp-Name 里。它们不是多余的装饰字段:网关不需要解析完整 JSON 报文,就可以直接把 tools/call 分到对应服务;但这也意味着头和请求体的对应字段必须互相校验。

POST /mcp HTTP/1.1
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: search

{"jsonrpc":"2.0","id":17,"method":"tools/call",
 "params":{"name":"search","arguments":{"q":"mcp"}}}

建议在网关和服务端各做一次一致性判断:头里的方法必须等于 JSON-RPC 的 method,头里的名称必须等于工具或资源名称。任何一处不一致都返回明确的参数错误,同时记录请求 ID;不要让网关自动猜测“哪个字段更可信”。

MRTR 的关键路径:input_required 之后要重试原调用

工具运行过程中可能需要用户确认后续操作,例如“是否删除选中的 3 个文件”。MRTR 不要求服务端一直挂着一条流等待用户答案,而是先返回一个 input_required 结果。客户端把请求内容展示给用户,等用户接受或者拒绝后,再把用户选择和 requestState 带回原来的工具调用。

// 第一次 tools/call 的业务结果
{
  "resultType": "input_required",
  "inputRequests": {
    "confirm": {
      "type": "elicitation",
      "message": "删除 3 个文件?",
      "schema": {"type": "boolean"}
    }
  },
  "requestState": "opaque-state-from-server"
}

重试的时候,客户端不要新建一个没有关联关系的独立工具调用。原始工具名、业务参数、用户答案和请求状态需要能被服务端正常关联;服务端也不能只信任客户端传回的“已确认”字段,仍然要重新校验资源范围、操作权限和当前状态。

MCP tools/call 返回 input_required 后携带 requestState 重试的确认链路证据图

灰度验收清单:四个测试比“能调用工具”更重要

  1. 跨实例:第一次请求固定到实例 A,第二次重试固定到实例 B,仍能得到同一个预期业务结果。
  2. 重复提交:客户端因为网络超时重复发送答案,服务端不会重复执行删除、扣款或创建资源等副作用操作。
  3. 用户拒绝:拒绝、取消和过期状态都能返回稳定结果,不会被误判为确认操作。
  4. 头体冲突:篡改 Mcp-Name 或 JSON-RPC 方法时,网关和服务端都能正常拒绝并留下完整日志。

如果工具有副作用,最好给每次确认操作绑定一次性幂等键,并把“待确认、已确认、已拒绝、已过期”写入可查询的状态表。无会话不等于完全无状态;它只是把之前隐藏在连接里的状态移到可观察的业务边界上。

旧客户端怎么过渡:能力协商和回滚要先写出来

迁移期间通常会同时存在旧版和新版客户端。服务端可以根据客户端声明的能力选择兼容路径,但不要把“支持新协议”等同于“所有扩展能力都支持”。对 MRTR、Elicitation 和 Tasks 这类能力要分别记录开关,遇到不支持的客户端时返回可解释的降级结果。

回滚逻辑也要保持单向可理解:新网关能识别旧请求,旧网关不一定识别新头字段。因此灰度发布时要保留旧入口,先让新客户端只访问一小组无副作用工具,再逐步放开需要用户确认的工具;日志中同时记录协议版本、客户端能力和实例名,出现异常可以快速按版本切回原有逻辑。

相关问题

MCP 2026-07-28 还需要 initialize 吗?

协议核心不再把 initialize/initialized 交换和 Mcp-Session-Id 作为必需前提;客户端仍可以先发现服务能力,具体实现要看对应的协议版本和兼容策略。

requestState 可以直接存用户密码吗?

不应该。它应是不可读的服务端状态句柄或者经过保护的请求状态,敏感凭据要走独立的安全交互流程,不要塞进可回放的普通请求里。

MRTR 能解决所有长任务吗?

不能。MRTR 解决的是一次客户端请求中途需要补充输入的往返场景;长时间运行的任务应该使用明确的任务生命周期、查询和取消机制。

最小迁移顺序是什么?

先补齐请求头体一致性校验和跨实例全链路日志,再将一个确认型工具改成 input_required 重试模式,最后扩大到有副作用的工具并加入幂等与回滚逻辑。

把协议变化落到工程验收

MCP 2026-07-28 的价值不只是删掉一段会话握手流程,而是让工具调用更像普通可路由、可重试、可观测的 HTTP 请求。真正迁移完成的标志,是请求可以落到任意实例,用户补充输入可以安全回到原调用,网关能在请求进入业务逻辑前发现方法与工具名冲突,副作用操作也有对应的幂等和拒绝路径。按这个顺序做灰度,协议升级才不会变成一次难以回滚的全量切换。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
订单列表慢查询排查:MySQL JSON 计划里的四类代价字段订单列表慢查询排查:MySQL JSON 计划里的四类代价字段
上一篇
订单列表慢查询排查:MySQL JSON 计划里的四类代价字段
Kubernetes DRA 优先设备列表怎么落地:H100 不可用时自动回退 A100
下一篇
Kubernetes DRA 优先设备列表怎么落地:H100 不可用时自动回退 A100
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    4894次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    4474次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    4417次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    4654次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    4612次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码