第4节 Connectors连接器MCP协议、万级服务器生态与A2A协议一句话总结MCP全景——JSON-RPC、tools/resources/prompts三原语、2026-07-28无状态新规范服务器数量2000→10000的5倍爆发、9700万月下载协议层双标准拼图——MCP连接工具、A2AGoogle捐赠Linux基金会连接智能体挑选原则选维护者不选星标52%端点已死。本文导航一、MCP是什么从N×M到NM二、MCP的骨架与三原语三、生态数据5倍爆发与52%死亡率四、2026新规范无状态化五、A2A协议连接智能体的另一半拼图六、挑选与治理选维护者不选星标七、踩坑实录小结下节预告前三节讲的原语都在解决Agent自己怎么干活Automations定节奏Worktrees分场地Skills攒能力。这一节的原语解决另一个问题Agent怎么够到外面的世界——查Issue、发消息、读写数据库。循环再精巧没有连接器就是个坐在玻璃房里的学霸看得见世界摸不着。一、MCP是什么从N×M到NM定义MCPModel Context Protocol 模型上下文协议 类比 USB 硬件设备的通用接口 MCP AI工具的通用接口 有了USB任何设备都能连接电脑 有了MCP任何工具都能连接AI核心价值没有MCP 每个AI工具都要自己写集成代码 GitHub集成一套、Slack集成一套、数据库集成一套... N个工具 × M个AI N×M个集成 有了MCP 每个工具写一个MCP服务器 AI通过MCP协议连接 N个工具 M个AI NM个实现这个N×M我交过学费USB类比人人会讲我讲点体感。2024年底我给一个内部Agent接Slack写了400行OAuth流程、消息格式转换、错误重试调了一周才稳定。两个月后换了个模型平台这400行一行都不能用——API风格完全不同重写。又过了两个月想给它再接个JiraOAuth那套流程又得照着Jira的文档再抄一遍。那段时间我维护了三份几乎相同但不完全相同的集成代码。这就是N×M问题在个人身上的样子每加一个工具或换一个AI你都要再疼一次。后来我把Slack接成MCP服务器一次实现Claude Code、TRAE、另一个自研Agent三个客户端共用。新增Jira时我直接装了社区的jira-mcp零行代码。从N×M到NM不是数学游戏是把你的集成代码变成大家的公共资产。连接器在循环里的位置把五大原语放进一次循环的运行图里Connectors的位置一目了然通过失败Automations定时唤醒收集上下文经Connectors读Issue/日志决策调用工具Skills提供打法执行Connectors写代码/跑CI验证测试三件套合并写回票据库看出来了吗——循环五步里有三步收集、执行、写回都要经过连接器。第3章讲循环解剖时说工具是Agent的手脚现在可以说得更狠没有连接器的循环五步里三步是断的。这也解释了为什么把Connectors列为五大原语之一它不是锦上添花的外设是循环的循环系统。二、MCP的骨架与三原语先看骨架JSON-RPC 2.0MCP的通信层是JSON-RPC 2.0一个古老而简单的协议请求带method和params响应带result或error靠id配对。一次完整的工具调用长这样// 客户端 → 服务器请求{jsonrpc:2.0,method:tools/call,params:{name:search_issues,arguments:{query:login bug,state:open}},id:1}// 服务器 → 客户端响应{jsonrpc:2.0,result:{content:[{type:text,text:找到3个相关Issue...}]},id:1}握手时客户端发initialize服务器返回能力声明我支持哪些tools/resources/prompts之后按需调用。协议面就这么大——这也是它一年内铺开万级服务器的原因实现一个最小MCP服务器快的半天就够第8章第4节带你从零写一个。两种传输方式对比传输方式适用场景我的偏好stdio子进程标准输入输出本地工具文件、git、shell本地开发首选零网络配置Streamable HTTPHTTPSSE流远程服务、团队共享生产部署和多端共用第8章第5节会实战这两种传输这里先记住选择逻辑工具跑在哪台机器上就选对应的传输——本地git操作走stdio托管在云端的Slack连接器走HTTP。还有一个容易忽略的细节stdio 模式下连接器进程是宿主的子进程宿主退出它跟着退出不会留孤儿进程HTTP 模式则要自己管生命周期——忘记关的远程连接器既烧钱又是安全暴露面。再看三原语tools/resources/prompts1. Tools工具{name:search_issues,description:搜索GitHub Issues,inputSchema:{type:object,properties:{query:{type:string},state:{type:string,enum:[open,closed]}},required:[query]}}作用让AI能做事情搜索、创建、修改2. Resources资源{uri:file:///path/to/config.yaml,name:项目配置,mimeType:text/yaml}作用让AI能读数据文件、数据库、API3. Prompts提示模板{name:code_review,description:代码审查提示模板,arguments:[{name:file_path,required:true}]}作用预定义的提示词模板保证一致性三原语对比什么时候用哪个原语语义副作用典型例子类比Tools做事动词有写库/发消息/创建PRsearch_issues、create_ticketPOST接口Resources读数名词无只读配置文件、数据库快照、日志列表GET接口Prompts模板句式无产出提示词code_review模板、日报模板函数签名这个动词/名词/句式的区分不是学院派讲究它直接决定权限模型Tools要审会改世界Resources基本免审只读Prompts只是格式约定。我给团队定过规矩——新接的MCP服务器先只开Resources跑一周确认读的东西没问题再逐个放开Tools。最小权限原则在连接器层面同样好使。实践中还有一个观察生态里Tools占绝对多数约八成Resources其次Prompts用得最少。但Prompts其实被低估了——把代码审查的固定问法做成服务端模板团队里每个人触发的审查都是同一套标准这比指望每个人都把prompt写对靠谱得多。三、生态数据5倍爆发与52%死亡率增长曲线数据表格时间MCP服务器数量阶段2024 Q4约500早期种子2025 Q1约1,000协议定型2025 Q2约2,000工具厂商入场2025 Q3约3,500主流AI客户端全面支持2025 Q4约5,500企业场景落地2026 Q1约8,000生态加速2026 Q210,000万级规模一年半时间从2,000到10,0005倍爆发。配套的下载量更夸张指标数值服务器数量10,000月下载量9,700万主要类别开发工具、数据源、通信、云服务活跃度48%活跃52%已停止维护52%死亡率的含义每两个MCP服务器里就有一个已经死了。这个数字我第一次看到时也吓一跳但仔细想想符合开源规律——热潮期人人写demo三个月后热情退散仓库归档。问题是死掉的连接器不是安静的尸体它们还躺在各种awesome-mcp列表里、还有星标、README还在你花两小时集成第一次上游API改版就发现没人修了。所以这一节最重要的一课不在协议在挑选。第六节专门讲怎么避开这52%这里先把结论放在这挑连接器的时间应该花在读commit记录和Issue区而不是读star数和营销页。四、2026新规范无状态化2025规范有状态客户端 ←→ 服务器 ↓ 建立连接保持状态 ↓ 多次调用共享状态 ↓ 断开连接问题服务器需要维护会话状态难以水平扩展长连接占用资源2026规范无状态客户端 → 服务器 ↓ HTTP请求包含所有上下文 ↓ 服务器处理无状态 ↓ HTTP响应优势服务器无需维护状态易于水平扩展符合RESTful理念2026-07-28发布的新规范把无状态扶正。别小看这个变化——有状态服务器是循环的天敌你的循环第37轮重连时会话状态丢了前面36轮攒的上下文灰飞烟灭。无状态规范下每次调用自带完整上下文服务器崩了重启、换个实例、水平扩容循环都不受影响。这跟第4章讲的状态外置Agent会忘Repo不会忘是同一个哲学状态放在能持久化的地方协议层保持健忘。Streamable HTTP传输# 客户端示例importhttpxasyncdefcall_mcp_tool(server_url,tool_name,args):调用MCP工具无状态HTTPasyncwithhttpx.AsyncClient()asclient:responseawaitclient.post(f{server_url}/mcp,json{jsonrpc:2.0,method:tools/call,params:{name:tool_name,arguments:args},id:1})returnresponse.json()五、A2A协议连接智能体的另一半拼图MCP vs A2A维度MCPA2A连接对象工具智能体类比USB设备接口人际关系Agent协作发起方AnthropicGoogle捐赠Linux基金会状态成熟新兴A2A场景Agent-1代码审查Agent ↓ A2A协议 Agent-2测试生成Agent ↓ A2A协议 Agent-3部署Agent 三个Agent通过A2A协议协作MCP和A2A经常被摆在一起比较其实它们不竞争拼的是同一张图的两半MCP向下连接工具A2A横向连接智能体。一个审查Agent通过MCP读你的代码库工具通过A2A把审查结论丢给测试Agent另一个智能体测试Agent再通过MCP跑pytest工具。协议层双标准拼图工具层协议层应用层Agent-1Agent-2Agent-3A2A协议Agent间协作MCP协议工具连接GitHubSlack数据库A2A由Google发起后来捐赠给Linux基金会——这个动作意义重大协议进了中立基金会才可能成为行业公地。MCP虽然由Anthropic主导但也以开放规范形式发布。两大协议都走开放路线意味着本章第7节讲的原语可移植性有了协议层地基你基于MCPA2A搭的循环不绑死任何厂商。什么时候真的需要A2A冷静说一句A2A现在还偏早期大多数人暂时用不上。我给自己定的判断表场景用什么理由Agent要读写外部系统MCP工具连接成熟稳定一个循环内的不同工位子智能体下一节同进程编排不需要跨协议跨组织、跨厂商的Agent协作A2A双方不共享代码库需要中立协议Agent要被第三方发现和调用A2AAgent Card机制类似服务发现关键分界线是信任域自己项目里的maker/checker用宿主的sub-agents机制就够了下一节讲而当你公司的采购Agent要和供应商的报价Agent直接对话——两边连代码仓库都不互通谁也不信谁的内部接口——这时候才轮到A2A出场。别为了技术新潮给内部协作套协议层协议是给跨界用的。六、挑选与治理选维护者不选星标挑选和治理是一体两面挑选决定让谁进门治理决定谁该留下、谁该请出去。这一节把两个问题一起答。问题52%端点已死10,000 MCP服务器 ↓ 48%活跃4,800 52%已停止维护5,200 ↓ 选错了 集成失败挑选原则❌ 错误选星标最多的 星标多 ≠ 维护好 很多高星项目已停止维护 ✅ 正确选维护者活跃的 检查最近提交时间 检查Issue响应速度 检查版本更新频率“选维护者不选星标是我真金白银换来的原则。2025年我挑过一个数据库MCP服务器星标1,800列表前三。用了三周上游数据库驱动改了个breaking change连接器报错。我去提Issue翻了翻commit记录——最后一条提交是七个月前维护者在README里留了句暂时没时间维护”。只好fork下来自己修那天下午我在别人的代码里读了一个半小时的连接池逻辑。星标是热度指标热度会撒谎提交记录不会。检查清单## MCP服务器挑选清单 ### 活跃度 - [ ] 最近3个月有提交 - [ ] Issue有响应1周 - [ ] 有版本更新 ### 质量 - [ ] 有完整文档 - [ ] 有示例代码 - [ ] 有测试覆盖 ### 安全 - [ ] 有认证机制 - [ ] 无已知漏洞 - [ ] 代码可审计 ### 维护 - [ ] 有明确维护者 - [ ] 有贡献指南 - [ ] 有变更日志安全那三格在连接器场景加倍重要——MCP服务器拿的是你的真实凭证GitHub token、数据库密码一个带后门或漏洞的连接器等于把钥匙插在门上。第8章第8节讲MCP安全红线时会展开这里先立规矩闭源的、不肯放出代码审计的MCP服务器功能再香也不装。工程实现连接器调用也要全字段留痕按本课程统一工程规范MCP调用属于远端API接口调用和大模型调用一样要记全字段日志。我给连接器层包了一个薄封装# uv init mcp-logger uv add pydantic httpxMCP调用日志远端地址、工具名、输入输出长度、起止时间、耗时importlogging,timefromdatetimeimportdatetimefromlogging.handlersimportTimedRotatingFileHandlerimporthttpxfrompydanticimportBaseModel loglogging.getLogger(mcp)log.setLevel(logging.INFO)_fmtlogging.Formatter(%(asctime)s | %(levelname)s | %(message)s)_clogging.StreamHandler();_c.setFormatter(_fmt);log.addHandler(_c)_fTimedRotatingFileHandler(logs/mcp.log,whenmidnight,interval30,backupCount12,encodingutf-8)_f.setFormatter(_fmt);log.addHandler(_f)classMcpCallRecord(BaseModel):一次MCP调用的全字段记录server_url:str# 远端地址含端口tool:str# 工具名input_len:int# 输入参数长度output_len:int# 输出长度start_time:strend_time:strelapsed_ms:intok:booldefcall_tool(server_url:str,tool:str,args:dict,api_key:str)-dict:带全字段日志的MCP工具调用无状态HTTPt0datetime.now()resphttpx.post(f{server_url}/mcp,json{jsonrpc:2.0,method:tools/call,params:{name:tool,arguments:args},id:1,},headers{Authorization:fBearer{api_key}},timeout30)t1datetime.now()recMcpCallRecord(server_urlserver_url,tooltool,input_lenlen(str(args)),output_lenlen(resp.text),start_timef{t0:%Y年%m月%d日%H:%M:%S},end_timef{t1:%Y年%m月%d日%H:%M:%S},elapsed_msint((t1-t0).total_seconds()*1000),okresp.is_success,)log.info(MCP调用 | %s | key***%s | 工具%s | 输入%d | 输出%d | %s → %s | 耗时%dms,rec.server_url,api_key[-6:],rec.tool,rec.input_len,rec.output_len,rec.start_time,rec.end_time,rec.elapsed_ms)returnresp.json()控制台输出$ uv run mcp_logger.py 2026-04-12 10:20:03 | INFO | MCP调用 | https://mcp.example.com:8443 | key***f3e9d2 | 工具search_issues | 输入54 | 输出1832 | 2026年04月12日 10:20:03 → 2026年04月12日 10:20:04 | 耗时812ms 2026-04-12 10:20:09 | INFO | MCP调用 | https://mcp.example.com:8443 | key***f3e9d2 | 工具create_ticket | 输入216 | 输出97 | 2026年04月12日 10:20:09 → 2026年04月12日 10:20:10 | 耗时934ms为什么连MCP调用都要记这么细因为循环里的故障排查经常卡在到底是模型想错了还是连接器超时了。有了这层日志看一眼时间戳就能对齐模型在10:20:02决定调用连接器10:20:04返回——链路上每一段耗时清清楚楚。没有留痕的连接器是循环里的黑盒。连接器清单也要治理最后一个实践建议维护一份连接器台账。我见过一台开发机挂了30多个MCP服务器主人自己也说不清哪个在用、哪个是三个月前试装忘了删的。多出来的每个连接器都在做两件坏事工具列表撑大上下文模型选工具更犹豫多一个潜在故障点连接器进程挂了循环就卡住。我的台账就四列每季度对一次连接器用途上次使用处置github-mcpIssue读写本周保留postgres-mcp数据库快照本周保留notion-mcp文档同步47天前观察一季再定xxx-mcp已想不起来90天卸载上次使用直接从上面那套调用日志里统计——这也是坚持全字段留痕的又一个红利日志不只是排障用的它是生态资产的账本。没台账的连接器目录和没有锁的仓库没区别。七、踩坑实录按星标挑选连接器1,800星的项目七个月没提交坏了没人修。修法看最近提交时间和Issue响应星标只当参考。一上来全开Tools新装的MCP服务器直接给了全部写权限Agent误删了一个里程碑。修法先开Resources观察一周Tools逐个放开。凭证塞进配置文件进gitMCP配置里的token被提交到公共仓库安全部门凌晨打电话。修法凭证走环境变量配置文件里只写$GITHUB_TOKEN引用。有状态会话遇上循环长跑旧规范服务器跑36轮后会话失效上下文丢失。修法升级到无状态Streamable HTTP状态放票据库。工具太多淹没选择一台机器挂了40个MCP服务器、300个工具模型选错工具率飙升。修法按项目启用相关连接器别全局全开——工具描述也是上下文预算。小结MCP是AI工具的通用接口把N×M的集成爆炸压成NM一次实现多方复用我那三份重复的集成代码就是N×M时代的学费。三原语按动词/名词/句式分工Tools做事要审权限、Resources读数只读免审、Prompts出模板被低估的标准化利器。骨架是JSON-RPC 2.0stdio管本地、Streamable HTTP管远程协议面小半天能写一个最小服务器。生态5倍爆发、52%死亡率10,000服务器、9,700万月下载但一半已死——挑选比集成更花功夫。2026-07-28无状态新规范状态外置、协议层健忘服务器水平扩展与循环长跑不再互相伤害。MCPA2A是拼图不是对手MCP向下连工具、A2A横向连智能体A2A已捐赠Linux基金会成为行业中立公地。选维护者不选星标星标是热度指标会撒谎提交记录不会安全上闭源不审计的连接器一律不装。连接器调用全字段留痕远端地址、工具名、输入输出长度、起止时间、耗时——排查模型错还是连接器慢全靠它。下节预告工具连上了、技能攒下了但循环还有一个质量死结没解自己写的东西自己检查永远偏宽容。第5章第5节《Sub-agents子智能体maker/checker分离是循环的心脏》讲清楚为什么写代码的模型给自己的工作打分过于宽容以及用不同模型、不同提示词、独立上下文拆开maker和checker的三大收益。如果觉得本文对你有帮助欢迎点赞、收藏、关注三连本系列持续更新中关注不迷路~文章编号第5章第4节 | 总进度34/120 | 预计阅读时间16分钟