
Ikanos 提出 MCP 应与 API 并列部署,而非叠加其上
来源标题:Put MCP next to your API, not on top of it
Ikanos 认为把 MCP server 叠在 API server 之上会带来两层运维、两份契约和额外网络跳转。其方案让 REST 与 MCP 作为同一 exposes 列表中的两个适配器,共同引用同一数据流,避免 MCP 层只能复刻 API 已有能力的问题。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
大多数团队添加 MCP 的方式都一样:拿现有的 API server,在前面套一个 MCP server,把每个 tool 映射到一个 endpoint。上线很快。但代价是:要运行两层服务、要维护两份需要保持一致的契约,而且每次 agent 调用都多一次网络跳转。
还有一个更深层的问题。叠在 API server 之上的 MCP server,只能做那个 API server 能做的事。而 agent 开始需要一些 REST 或 GraphQL 从来就不是为此设计的东西。
在叠加式架构里,每次 tool 调用都要走 agent → MCP server → API server → 上游系统。MCP server 要把 API server 刚刚序列化过的内容再序列化一遍,要自己处理认证,还需要自己的部署、日志和 on-call。
它还引入了第二份契约。API server 有一份 OpenAPI 描述,MCP server 的 tool 描述则是对它的转述。当某个字段的含义发生变化时,两边都需要更新,而通常只有一边会更新。
Ikanos capability 的构建方式不同。它声明自己消费什么(上游 API)、把这些聚合成哪些 flow、以及对外暴露什么。REST 和 MCP 是同一个 exposes 列表里的两个 adapter。两者都通过 ref 引用同一个 flow,所以谁也不在谁的前面:
capability: consumes:
- import: legacy from: ./shared/legacy-consumes.yaml aggregates:
- namespace: crew-resolver flows: resolve-crew-for-ship: description: "Resolve crew member names and roles for a given ship" steps:
call the upstream APIs, join and map the results once
exposes:
- type: rest namespace: shipyard-api resources: ship-crew: path: "/ships/{{imo}}/crew" operations: get-ship-with-crew: method: GET ref: crew-resolver.resolve-crew-for-ship voyages: path: "/voyages/{{path}}" forward: targetNamespace: legacy
- type: mcp namespace: shipyard-tools tools: get-ship-with-crew: description: "Get ship details with resolved crew names" ref: crew-resolver.resolve-crew-for-ship
上游调用、凭据、映射和 step 逻辑只写一次。同一个引擎为两个 adapter 执行它们。agent 的 tool 调用直接进入 flow,不必绕道 REST。
这也给了你一条迁移路径。把 capability 放在你当前 API server 所在的位置,然后一个资源一个资源地迁移过去:
每一步都很小、可回滚,而且每一步都同时改善两个接口。当最后一个 forward 消失时,旧 API 就被替换掉了。MCP 是沿途顺带引入的,而不是作为一个单独的项目。
并排还有第二个原因:这些协议正在分化。MCP 现在有一些 REST 和 GraphQL API 通常不提供的交互:
所以叠加式的 MCP server 无法提供 elicitation 或 task。它下面的 API server 无处存放问题,也没有 task 可以汇报。而 capability 可以,因为它的 flow 不受 REST 限制。Ikanos 对两者的支持正在评审中:一个 elicit step 会暂停 flow 并通过 MCP 发问,一个标记为 mode: task 的 flow 会作为可持久化的 MCP task 运行,在重启后依然存活。同样的 flow 通过 REST 访问时,会返回 501 Not Implemented,并指出那个需要输入的 step。这个差距是真实存在的,而且它体现在引擎本身。
这就是为什么我们认为 MCP 将成为 agent 时代的主要接口,而 REST 和 GraphQL 会与它并存,服务于需要它们的应用和合作伙伴。把 MCP 叠在现有 API 上,会让较新的协议受限于较旧协议能做的事。把它们并排放,每个协议都能用上自己的全部能力。
想了解更多并随时掌握 Naftiko 的最新动态?把新文章、新版本以及来自 capability fleet 的信号收进你的收件箱。
下一期 Manifest 将送达你的收件箱。在那之前,这里是你深入了解的入口。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。