<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MCP 2.0 on Kalend's Blog</title><link>https://blog.kalend.top/tags/mcp-2.0/</link><description>Recent content in MCP 2.0 on Kalend's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Wed, 05 Aug 2026 08:30:00 +0800</lastBuildDate><atom:link href="https://blog.kalend.top/tags/mcp-2.0/index.xml" rel="self" type="application/rss+xml"/><item><title>MCP正式版发布：你的MCP Server要改什么？12个月迁移窗口指南</title><link>https://blog.kalend.top/2026/08/05/2026-08-05-mcp-official-release-guide.html/</link><pubDate>Wed, 05 Aug 2026 08:30:00 +0800</pubDate><guid>https://blog.kalend.top/2026/08/05/2026-08-05-mcp-official-release-guide.html/</guid><description>&lt;p&gt;2025年，Simon Willison在年度总结里给MCP泼了冷水——协议太复杂，被Skills取代了，&amp;ldquo;没人会大规模用&amp;quot;是他的基本判断。&lt;/p&gt;
&lt;p&gt;2026年7月31日，同一个人一周内写了三个MCP项目（mcp-explorer、datasette-mcp、llm-mcp-client），然后发了篇博客：&lt;em&gt;&amp;ldquo;Stateless MCP has recaptured my interest.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;态度反转的原因只有一个：&lt;strong&gt;MCP 2026-07-28正式版把协议从&amp;quot;带状态的长连接&amp;quot;改成了&amp;quot;无状态的HTTP请求&amp;rdquo;&lt;/strong&gt;。这一刀砍掉了部署中最复杂、最容易出问题的部分。&lt;/p&gt;
&lt;p&gt;我花了一天时间整理这份迁移指南。如果你有正在跑的MCP Server，这12个月窗口期你需要知道的事都在这里了。&lt;/p&gt;
&lt;h2 id="核心变更1无状态协议"&gt;核心变更1：无状态协议
&lt;/h2&gt;&lt;p&gt;这是最大的变化，也是Simon回心转意的原因。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;旧版流程（3步握手）：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;POST /mcp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ {&amp;#34;method&amp;#34;: &amp;#34;initialize&amp;#34;, &amp;#34;params&amp;#34;: {...}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;← {&amp;#34;result&amp;#34;: {&amp;#34;sessionId&amp;#34;: &amp;#34;abc123&amp;#34;}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;POST /mcp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header: Mcp-Session-Id: abc123
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ {&amp;#34;method&amp;#34;: &amp;#34;tools/list&amp;#34;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;← {&amp;#34;result&amp;#34;: {&amp;#34;tools&amp;#34;: [...]}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;新版流程（单次自包含请求）：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;POST /mcp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header: MCP-Protocol-Version: 2026-07-28
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header: Mcp-Method: tools/list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Header: Mcp-Name: my-server
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ {&amp;#34;method&amp;#34;: &amp;#34;tools/list&amp;#34;, &amp;#34;_meta&amp;#34;: {&amp;#34;protocolVersion&amp;#34;: &amp;#34;2026-07-28&amp;#34;, &amp;#34;clientInfo&amp;#34;: {...}}}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;← {&amp;#34;result&amp;#34;: {&amp;#34;tools&amp;#34;: [...]}}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;三个关键变化：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;变化&lt;/th&gt;
					&lt;th&gt;旧版&lt;/th&gt;
					&lt;th&gt;新版&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;初始化&lt;/td&gt;
					&lt;td&gt;initialize/initialized 握手&lt;/td&gt;
					&lt;td&gt;每个请求自带 &lt;code&gt;_meta&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;会话&lt;/td&gt;
					&lt;td&gt;Mcp-Session-Id 维持状态&lt;/td&gt;
					&lt;td&gt;无状态，请求自包含&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;发现&lt;/td&gt;
					&lt;td&gt;initialize 返回能力&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;server/discover&lt;/code&gt; 方法&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这意味着：&lt;strong&gt;任何MCP请求可以落在任何服务器实例上&lt;/strong&gt;，不需要粘性路由，不需要共享会话存储。水平扩展瞬间变得简单。&lt;/p&gt;
&lt;p&gt;对于需要状态的场景（比如购物车），规范推荐用&lt;strong&gt;显式Handle模式&lt;/strong&gt;——服务器返回一个 &lt;code&gt;basket_id&lt;/code&gt;，模型在后续调用中传回。这比隐藏的会话状态更透明，模型可以跨工具组合Handle、推理Handle。&lt;/p&gt;
&lt;h2 id="核心变更2extensions框架"&gt;核心变更2：Extensions框架
&lt;/h2&gt;&lt;p&gt;旧版MCP的所有功能都挤在规范里，加一个新功能就要改规范。新版引入了Extensions框架：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;反向DNS标识符&lt;/strong&gt;（如 &lt;code&gt;com.anthropic.mcp.apps&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;通过 &lt;code&gt;extensions&lt;/code&gt; map 协商&lt;/li&gt;
&lt;li&gt;独立仓库 &lt;code&gt;ext-*&lt;/code&gt;，委托维护者&lt;/li&gt;
&lt;li&gt;独立于规范版本化&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两个官方扩展值得关注：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MCP Apps（SEP-1865）&lt;/strong&gt;：服务器可以渲染HTML UI，在沙箱iframe中运行。这意味着MCP工具不再只是返回JSON数据，可以直接给用户一个交互界面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tasks（SEP-2663）&lt;/strong&gt;：从实验核心功能毕业为扩展。API有变化——&lt;code&gt;tasks/list&lt;/code&gt; 被移除，新增 &lt;code&gt;tasks/get&lt;/code&gt;、&lt;code&gt;tasks/update&lt;/code&gt;、&lt;code&gt;tasks/cancel&lt;/code&gt;。如果你在用Tasks，这是必改项。&lt;/p&gt;
&lt;h2 id="核心变更3三项功能废弃"&gt;核心变更3：三项功能废弃
&lt;/h2&gt;&lt;p&gt;12个月最低弃用窗口，2028年7月前必须迁移：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;废弃功能&lt;/th&gt;
					&lt;th&gt;替代方案&lt;/th&gt;
					&lt;th&gt;迁移难度&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Roots&lt;/td&gt;
					&lt;td&gt;Tool参数、resource URI或服务器配置&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Sampling&lt;/td&gt;
					&lt;td&gt;直接集成LLM provider API&lt;/td&gt;
					&lt;td&gt;中&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Logging&lt;/td&gt;
					&lt;td&gt;stderr（stdio）或OpenTelemetry&lt;/td&gt;
					&lt;td&gt;低&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Roots和Logging的迁移基本是改几行配置。Sampling稍复杂——如果你的Server依赖Sampling让宿主LLM做决策，需要改成自己直接调LLM API。&lt;/p&gt;
&lt;h2 id="迁移检查清单"&gt;迁移检查清单
&lt;/h2&gt;&lt;p&gt;以下是你的MCP Server需要改的内容，按优先级排列：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;必须改（破坏性变更）：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 移除 initialize/initialized 握手逻辑
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 移除 Mcp-Session-Id 处理
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 添加 Mcp-Method 和 Mcp-Name 响应头
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 更新错误码 -32002 → -32602
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ inputSchema 升级到 JSON Schema 2020-12
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;应该改（功能迁移）：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 迁移 Tasks API（移除 tasks/list，添加 get/update/cancel）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 替换 Roots 为 Tool 参数或服务器配置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 替换 Sampling 为直接 LLM API 集成
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 替换 Logging 为 stderr 或 OpenTelemetry
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;可以做（新能力）：&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 启用 tools/list 的 ttlMs 和 cacheScope 缓存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 集成 W3C Trace Context（traceparent/tracestate）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;□ 探索 MCP Apps 扩展（服务器渲染UI）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="生态影响"&gt;生态影响
&lt;/h2&gt;&lt;p&gt;这些数字说明MCP已经不是实验品了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SDK月下载量接近5亿次&lt;/strong&gt;，TypeScript和Python各自突破10亿次总下载&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gartner预测&lt;/strong&gt;：2026年底75%的API网关厂商将加入MCP特性&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;微软Azure&lt;/strong&gt;正在全面适配MCP 2.0无状态架构&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FastMCP v3.4.5&lt;/strong&gt;已发布（2026-07-28），原生支持2026-07-28规范&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你用FastMCP框架，升级到v3.4.5可以自动处理大部分迁移。但底层逻辑还是建议理解清楚——框架帮你屏蔽了复杂度，但出了问题你得知道往哪看。&lt;/p&gt;
&lt;h2 id="结论"&gt;结论
&lt;/h2&gt;&lt;p&gt;MCP从&amp;quot;太复杂没人用&amp;quot;到&amp;quot;一个人一周写三个项目&amp;quot;，核心原因是&lt;strong&gt;无状态架构砍掉了部署中最反人类的部分&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;12个月窗口期听着很长，但如果你的MCP Server有用户在用，建议现在就开始改。先改破坏性变更（握手和Session），再逐步迁移废弃功能。&lt;/p&gt;
&lt;p&gt;Simon Willison用一周写了三个项目证明新协议的简洁。你的Server迁移大概用不了三天。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;varkm&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>