MCP 与工具生态:给工具修码头的人
引言
很久以前,城里的每个码头都有自己的规矩。粮船要靠东岸,药船要靠西岸,木材船只能找会读某种旧旗语的泊位。商人们带着同一批货物,要为每座城重新学一套停靠方式。
后来,港口修了一排标准码头。船只进港先握手,报明船型、货物和卸货方式;码头用同一种账本登记,用同一种信号回复。船长们轻松多了。
但港务长并没有因此放松。他仍然检查货单、限制危险货物、缓存常来船只的资料,并在某个码头停摆时把货物转到备用泊位。
MCP 是标准码头,Harness 是港务系统。
TL;DR
MCP 用 Client/Server、JSON-RPC 和 Tools/Resources/Prompts 三种原语统一工具生态。它解决了工具接入碎片化,但不自动解决规模化治理。Harness 需要继续处理服务发现、Schema 缓存、权限审计、错误降级、路径安全和工具过多时的渐进式披露。
1. MCP 解决的是碎片化
没有统一协议时,每个 Agent 框架都要为工具写一套私有适配。同一个数据库查询工具,可能要为不同框架实现多次。工具作者和框架作者互相绑定,生态很难复用。
MCP 把这层接口标准化。一个 MCP Server 暴露能力,支持 MCP 的 Client 就能连接。它像工具世界的 USB:工具不用知道上层框架是谁,框架也不用为每种工具写专用插口。
协议核心很小:Client/Server 模型、JSON-RPC 2.0 消息、初始化握手、请求响应按 ID 匹配。这个小核心带来一个重要能力:异步。客户端可以同时发出多个请求,响应回来后按 ID 归位。
2. 三种原语代表三种控制权
MCP 只有三种核心原语,但它们的控制权不同。
Tools 是模型可以主动调用的函数,例如查数据库、发邮件、执行搜索。模型决定何时调用。
Resources 是应用提供给模型读取的数据,例如文件、网页、数据库记录。应用决定提供什么。
Prompts 是预定义模板,例如代码审查模板、翻译模板。用户或应用显式触发。
理解这层控制权比背名字更重要。工具最接近副作用,必须有权限和参数治理;资源要防止把恶意内容直接当成可信上下文;提示词要作为可版本化资产管理。
传输层主要有两种。stdio 适合本地进程,简单、低延迟、隔离清楚。Streamable HTTP 适合网络部署,可以让多个客户端共享一个服务端,也能做认证、负载均衡和长连接。选型先问一句:这个 Server 是否需要跨机器服务。
3. 写 Server 只是开始
开发一个 MCP Server,需要定义工具、资源、提示词和处理器,再选择传输方式。生产项目应优先使用维护中的 SDK,不要手写协议栈。
工具定义最关键。inputSchema 是模型理解工具的主要依据。字段类型、必填项、范围、描述都要清楚。描述要像写给新同事的操作说明,而不是把内部字段名摊出来。
文件类工具要特别小心路径。系统必须限定根目录,解析绝对路径,处理 ..、符号链接、编码和平台差异,再确认最终路径仍在允许边界内。字符串前缀比较不可靠。
错误也要守协议。参数非法、方法不存在、内部错误要返回规范 JSON-RPC 错误码和可操作信息。客户端需要根据错误类型决定重试、改参数、换工具还是中止。
4. Harness 要管规模
单个 MCP Server 不难接。难点出现在工具数量和服务端数量增长之后。
Harness 需要在 MCP 之上加一层工具抽象,不让 Server 直接连主循环。这样可以统一上下文、统一权限、统一审计,也能把工具调用纳入运行时和工作流的状态机。
Schema 缓存是第一项规模化优化。每次调用都重新拉取工具定义,会浪费延迟和 token。常见做法是内存缓存热门工具,磁盘缓存完整工具列表,远程缓存服务多实例共享,再用 Schema 哈希判断是否失效。
权限网关是第二项。不同 Agent、用户、项目只能看到自己有权使用的 Server 和工具。高风险工具要等待人工审批。无论放行还是拒绝,都写审计日志。
错误降级是第三项。关键 Server 故障时,系统可以返回缓存结果、切到备用实现或把错误包装成观察,而不是让整个任务崩掉。
工具多到上下文装不下时,缓存已经不够。系统要按需披露工具定义,让模型像翻目录一样读取真正需要的工具,而不是一次性加载全部。代码执行式 MCP 和技能分层,本质上都在服务这个目标:工具能力按需出现,结果先过滤,再把高信号内容交给模型。
写在最后
标准码头建好后,商人们以为港务长可以休息了。港务长却换了一本更厚的账簿。
她说:"码头统一了,只说明船能靠岸。货物安不安全、卸到哪里、谁有权领取、码头坏了怎么办,还得有人管。"
MCP 让工具生态有了共同语言。它降低了接入成本,却没有替 Harness 管理信任、规模和故障。工具从三个变成三百个时,协议只是入口;发现、缓存、权限、降级、审计和按需加载,才决定这个港口能不能长期运转。
单个工具看协议,工具生态看 Harness。