<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>协议通信 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E5%8D%8F%E8%AE%AE%E9%80%9A%E4%BF%A1/</link><description>Recent content in 协议通信 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E5%8D%8F%E8%AE%AE%E9%80%9A%E4%BF%A1/index.xml" rel="self" type="application/rss+xml"/><item><title>第9章 MCP 协议与通信算法</title><link>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-09/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-09/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;任何足够先进的抽象，都不可与协议区分。&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一个智能 Agent 的能力上限，不在于它的模型有多强大，而在于它能与多少外部系统有效协作。Claude Code 通过 MCP（Model Context Protocol）协议，将数据库、API、文件系统、IDE、浏览器乃至 SaaS 服务，统一纳入 Agent 的工具可达边界。本章将深入 MCP 协议的设计思想，逐层剖析连接建立、能力发现、传输选择、认证流程、交互式授权以及资源截断等核心算法。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="91-问题引入agent-通信的统一协议挑战"&gt;9.1 问题引入：Agent 通信的统一协议挑战&lt;/h2&gt;
&lt;p&gt;现代 AI Agent 面临一个根本性的通信难题：它需要与形态各异的外部服务交互——本地命令行工具通过 stdin/stdout 对话，远程 API 通过 HTTP 请求访问，IDE 通过 WebSocket 推送事件，SaaS 服务需要 OAuth 认证后才能调用。如果为每种服务编写专用的通信逻辑，系统复杂度将随服务数量呈组合爆炸式增长。&lt;/p&gt;
&lt;p&gt;MCP 协议正是为解决此问题而设计的。它定义了一套标准化的客户端-服务端交互规范，使 Agent 能够以统一的方式发现、连接、调用任意外部服务。从 Claude Code 的源码中，我们可以提炼出 MCP 协议的七个核心算法问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;连接建立&lt;/strong&gt;：如何在多种传输层之上建立标准化连接？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;能力协商&lt;/strong&gt;：客户端与服务端如何互相声明和发现功能？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;传输选择&lt;/strong&gt;：如何为不同场景选择最优的传输层？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;生命周期管理&lt;/strong&gt;：如何处理连接的缓存、超时、断开与重连？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OAuth 认证&lt;/strong&gt;：如何安全地完成浏览器重定向认证流程？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;交互式授权&lt;/strong&gt;（Elicitation）：服务端需要用户输入时如何发起交互？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;资源截断&lt;/strong&gt;：大型工具输出如何智能截断以适应上下文窗口？&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="92-传输层选择算法"&gt;9.2 传输层选择算法&lt;/h2&gt;
&lt;h3 id="921-多传输层架构"&gt;9.2.1 多传输层架构&lt;/h3&gt;
&lt;p&gt;Claude Code 支持的传输类型在 &lt;code&gt;types.ts&lt;/code&gt; 中通过 Zod Schema 严格定义：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;export&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;TransportSchema&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;z&lt;/span&gt;.&lt;span style="color:#66d9ef"&gt;enum&lt;/span&gt;([
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;stdio&amp;#39;&lt;/span&gt;, &lt;span style="color:#75715e"&gt;// 本地子进程通信
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;sse&amp;#39;&lt;/span&gt;, &lt;span style="color:#75715e"&gt;// Server-Sent Events（旧版远程）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;sse-ide&amp;#39;&lt;/span&gt;, &lt;span style="color:#75715e"&gt;// IDE 专用 SSE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;http&amp;#39;&lt;/span&gt;, &lt;span style="color:#75715e"&gt;// Streamable HTTP（新版远程）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;ws&amp;#39;&lt;/span&gt;, &lt;span style="color:#75715e"&gt;// WebSocket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;sdk&amp;#39;&lt;/span&gt;, &lt;span style="color:#75715e"&gt;// 进程内 SDK 传输
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每种传输类型对应不同的配置 Schema。例如 stdio 需要 &lt;code&gt;command&lt;/code&gt; 和 &lt;code&gt;args&lt;/code&gt;，而 http 和 sse 需要 &lt;code&gt;url&lt;/code&gt;、可选的 &lt;code&gt;headers&lt;/code&gt;、&lt;code&gt;headersHelper&lt;/code&gt; 和 &lt;code&gt;oauth&lt;/code&gt; 配置。这种设计体现了&lt;strong&gt;策略模式&lt;/strong&gt;的典型应用——传输层的选择与连接的建立逻辑分离。&lt;/p&gt;</description></item></channel></rss>