1讨论什么
Uber Engineering 在 2026 年 10 月 2 日发了一篇 X 长文,Designing MCP Gateway。他们要解决的是内部 agent 接工具时各写各的:难找、难运维,也和具体服务绑死。
做法是做一个 MCP Gateway。控制面放注册表,数据面做运行时代理。已有 API 不用改成 MCP server,网关负责把 MCP 调用翻成原来的协议。
这篇工程笔记里最硬的一句原则是:discovery doesn’t imply exposure。发现了,还不等于对外暴露。每个 MCP server、每个工具,初始状态都是 disabled。所属团队明确审查并启用之后,才进到可调用的集合。
2三条登记路径
内部有几千个服务,接口走 HTTP、gRPC 或 TChannel。让每个团队手写一个 MCP server,他们判断会又慢又痛。登记交给 AutoCrawler。它是挂在 Cadence 上的分布式工作流,订阅 IDL 注册表和内部服务信号。cron 按固定节奏触发一次扫描,找新服务、新 API 和 schema 变更。
IDL 路径针对 Protobuf 或 Thrift。对每个服务的 API 组,AutoCrawler 建立或更新虚拟 MCP server,解析方法名、请求和响应 schema、注释,再用 LLM 生成给 agent 看的工具说明,把 schema 译成 MCP 用的 JSON-RPC 2.0,然后写入注册表。写入时就是关闭状态。
原生 MCP 用另一套。Uber 用 MCPFx 写直接实现 MCP 的服务。每个原生 server 打心跳,表示自己在、并且就绪。AutoCrawler 看到心跳后调用 listTools,把对方声明的工具和 schema 收进来,在注册表里建一个虚拟代理。这些工具同样以关闭状态入库。
第三方点名了 Jira 和 Google。网关把调用方的内部用户 token 往后传,同时做鉴权、限流和敏感数据打码。对方的 MCP 服务再把这个内部 token 换成自己的凭证,然后才打到外部 server。
工具说明一旦要改,会走出一份配置 diff,必须由 server 的 owner 批准。owner 可以批准并发布,也可以回到之前已知的一版。
3调用时网关做什么
数据面按固定节奏把控制面的 server 和工具配置拉进内存。启用状态变了,不用重启网关。它按配置物化虚拟 MCP server。每个虚拟 server 对外一个入口:/<service-name>/mcp。
进来的 MCP 调用由 Proxy Gateway 翻成 HTTP、gRPC 或 TChannel,发给原来的后端,再把 Protobuf 或 Thrift 的响应翻回 MCP 能用的 JSON。打到下游的那一跳走 Muttley,也就是跟后端服务放在一起的服务网格 sidecar。下游服务本身不用为了 agent 改接口。
鉴权用 Uber 内部的访问控制系统。策略按调用方的身份来,身份包括人、服务和 agent。Charter policy 写在 server 上,需要时可以按工具覆盖。工具回复里的 PII 和敏感字段,网关直接打码。
4结果
文中给出的规模是:网关当时托管超过 800 个 MCP server、超过 5000 个工具。这是「超过」,不是精确到个位的计数。分母是这座网关上的 server 和 tool,不是某一次 agent 任务的成功率。
编码 agent 还有一条不把工具定义放进上下文的用法,他们叫 Code Mode。命令行是 aifx,三条子命令:aifx mcp list 列出 server,aifx mcp search 在全部 server 里搜工具,aifx mcp call 经网关调用。输出写到文件,文件系统 agent 再按需摘。原文写:这已经是公司内部 coding agent 使用 MCP 的默认方式。本机不需要安装那些 MCP server。
| 原文里的结果 | 条件 |
|---|---|
| 超过 800 个 MCP server,超过 5000 个工具 | 这篇发布时网关上的托管规模 |
| 新工具初始为 disabled | IDL 生成的、原生 listTools 收来的,都一样 |
| Code Mode 成为内部默认 | coding agent 调 MCP。原文没给采用人数 |
帖子互动只说明传播,不说明设计是否成立。2026-10-07 00:36(北京时间)抓取时,这条帖子浏览 968462,赞 3098。分母是这一条帖。
5难点
爬虫可以替团队把工具写进注册表,所有权仍要留在服务团队。打开之前,owner 还要看生成出来的工具说明。说明一改就要批 diff。这一步若没人批,注册表里会堆着永远关着的工具。文章没有给「关着的比例」或平均打开时间。
工具回复可能带 PII。打码做在网关,按工具粒度。下游若在网关看不到的侧信道里返回同一份数据,这层打码盖不住。文章没有写他们测过哪些侧信道。
Code Mode 把工具定义留在网关外面,agent 用搜索来找。搜错工具时,上下文里没有那份完整 schema 帮它自查。文章把这当作省上下文的办法,没有给搜错率。
6新在哪里
新的部分是把「扫进目录」和「允许调用」拆开,打开权在所属团队。爬虫和调用方的 agent 没有这道开关。配置可以回滚到上一版已知状态。运行时只消费已经启用的那一版。
和 测过的优化,为什么还在跑 放在一起看:那边是旧的通过记录继续挑选程序,这边是新的工具记录先落库、默认不暴露。两篇都把「有一份记录」和「可以执行」分开。谱系仍在 递归自改进前世今生,这里不重写。
7出处
- Uber Engineering,Designing MCP Gateway,2026-10-02。正文来自这条 X 长文,不是 eng.uber.com 上另找的镜像。抓取时首页没有列出这篇,正式博客 URL 未确认。
- 原则原句:discovery doesn’t imply exposure. Every MCP server and tool starts in a disabled state and must be explicitly reviewed and enabled by the owning team.
没做的:没有在 Uber 内部复现 AutoCrawler 或 aifx;没有延迟、QPS 或打开率,原文没给,这里不补;Reddit 和 X 的讨论区没有登录态,不收。