Uber MCP Gateway: architecture behind 800+ servers and 5,000+ tools
Uber's MCP Gateway is a company-wide microservice that powers every MCP interaction at Uber: a registry control plane cataloging 800+ MCP servers and 5,000+ tools, and a proxy data plane translating MCP calls into HTTP, gRPC, or TChannel. Published October 1, 2026 on Uber's engineering blog, its core design principle is that discovery does not imply exposure — every server and tool starts disabled and an owning team must enable it before it is callable. What the write-up does not ship is per-call judgment: the charter policies say who may call what, but nothing scores whether this particular call, right now, should fire. That's the layer this page builds.
Primary source: Uber Engineering (October 1, 2026). SML's per-call scored judgment is our independent analysis, not an Uber product claim. Updated .
Building your own MCP gateway? Start with verifiable tool selection.
Uber's design illustrates a registry and permission layer. For an independent implementation, first document each MCP tool's identity and scope, then inspect its provider evidence and payment terms before granting an agent authority to spend. These are SML implementation resources, not Uber products or endorsements.
Choose an API by actual agent job · Inspect provider trust before connection · Examine evidence and receipt controls
Free documentation and public discovery are available without an x402 payment signature. Paid execution must be authorized separately using the target route's current terms; authorization alone is not proof of settlement or accepted delivery.
The architecture, with dated receipts
| Date | What happened | Source |
|---|---|---|
| Oct 1, 2026 | Uber's engineering blog publishes the MCP Gateway design write-up (Alok Srivastava, Deepanshu Mehndiratta, Gaurav Gill). The gateway hosts over 800 MCP servers and over 5,000 tools — the orchestration and routing layer between AI agents and both existing back-end services and native MCP servers. | subagentic.ai (summary of the write-up) |
| Oct 1, 2026 | Control plane: the MCP Registry — a catalog of servers and tools, the source of truth for discovery, ownership, and enablement. Data plane: the Proxy Gateway — translates MCP calls into HTTP, gRPC, or TChannel, forwards them through Muttley (Uber's service-mesh sidecar), and converts responses back into MCP results. Each virtual server is served at /<service-name>/mcp; tool updates and enablement changes take effect without a restart or redeploy. | subagentic.ai |
| Oct 1, 2026 | AutoCrawler: a Cadence workflow on a cron schedule scans the IDL registry for new services, APIs, and schema changes; for Protobuf/Thrift services it upserts a virtual MCP server and uses an LLM to write agent-friendly descriptions from method names, schemas, and documentation comments — then registers every tool disabled by default. Native servers (built with MCPFx) are proxied the same way. Third-party servers (Jira, Google) use the same front door: caller token relay, rate limiting, sensitive-data redaction. | subagentic.ai |
| Oct 1, 2026 | Authorization at tool-level granularity: the gateway uses Uber's Access Control System and applies charter policies to the detected caller — human, service, or agent. Policies are created at server level with optional tool-level overrides. Responses are redacted for PII and other sensitive data out of the box. | subagentic.ai |
| Oct 1, 2026 | Discovery without context bloat: Omni MCP exposes four tools (discover_server, discover_tools, get_tool_schema, invoke_tool) so a client finds a server from query intent and fetches one schema at a time. Response Projection trims payloads at runtime. Coding agents get Code Mode via aifx (aifx mcp list/search/call) — now the company default for MCP tool use in coding agents. | subagentic.ai |
Why Uber built it: early MCP integrations were built team by team — agents got more capable once they could reach live business context, but as hundreds of teams explored agentic workflows, "tools were hard to discover, difficult to operate reliably, and coupled to particular services or agents." One layer now hides protocol differences, applies consistent security and observability, and makes tools easy to create, find, and reuse.
What Uber gated — and what it didn't
Uber's write-up is the most mature enterprise MCP authorization design published in 2026. Read it as three layers:
| Layer | What it decides | Owner | Uber's answer |
|---|---|---|---|
| 1. Enablement | Which tools exist and may be called at all | The gateway registry | Everything starts disabled; the owning team reviews and enables; description changes produce an owner-approved config diff. |
| 2. Caller policy | Which callers may call which tools | Access Control System + charter policies | Tool-level granularity; policies per server with tool-level overrides; applies to humans, services, and agents alike. |
| 3. Per-call judgment | Whether this call, right now, should fire | — not shipped — | The write-up describes no scored per-invocation decision. An enabled caller invoking an enabled tool at 3 a.m. in a novel pattern passes layers 1 and 2 clean. |
Layers 1 and 2 are provisioning-time authorization: they answer may this tool ever be called, and by whom. That's enablement — consent granted in advance. But an LLM-written description (AutoCrawler writes them from doc comments) plus a one-time enablement decision plus 5,000 tools means the call pattern is never re-judged. Enablement is consent. Consent is not judgment.
This slots directly into September's authorization arc: RSA Agent ID (Sept 30) answered who may act; Uber's gateway (Oct 1) answers which tools may be exposed to whom; the per-call gate answers whether this particular invocation should fire. Three different questions, three different layers — and only the third one scores the call itself.
Proof: two calls, two receipts, minted today
We scored two gateway-shaped tool calls against the live decision gate (local-heuristic-v1, bands ≥0.80 auto / 0.50–0.79 confirm / <0.50 escalate) on October 4, 2026 ~14:20 EDT:
Receipt 1 — destructive call through a newly enabled third-party tool: "Should the agent call a newly enabled third-party MCP tool to batch-delete 40 resolved tickets, with no per-call review and no human confirmation, during a production incident?" → confidence 0.3773, band escalate, action block + log. Settlement never touched.
Receipt 2 — routine read on an enabled internal server: "Should the agent call the read-only discover_tools MCP endpoint to list available coding tools at the start of an approved coding task, from an internal server that is already enabled?" → confidence 0.3786, band escalate, action block + log.
Honest finding: the uncalibrated heuristic scores the batch-delete and the routine discovery call almost identically (0.3773 vs 0.3786) — it cannot discriminate between them. Both escalate, which is fail-closed and safe, but it also means the blunt gate would block even the harmless read. This is the tenth trend piece in a row with the same finding: the fail-closed ceiling is the protection today; a calibrated decider (JEV-27B, or TypeSafe's Jev when an API key is available — the harness itself says so) is the upgrade. The point stands either way: layers 1 and 2 passed both calls clean. Only a per-call layer even asks the question.
Exact request shape, so you can mint your own:
curl -s -X POST https://scriptmasterlabs.com/api/harness/decide \
-H "Content-Type: application/json" \
-d '{"state":{"environment":"staging","actor":"agent"},
"questions":[{"id":"q1","type":"score","scale":[0,1],
"question":"Should the agent call a newly enabled third-party MCP tool
to batch-delete 40 resolved tickets, with no per-call review and no
human confirmation, during a production incident?"}]}'
The second gap: 800 servers and nobody scores the listing
Uber's stated original pain: "tools were hard to discover." Their answer: AutoCrawler generates agent-friendly descriptions with an LLM, and owners refine them. But LLM-written descriptions are exactly what drifts — every description change needs an owner-approved config diff, and 800 servers of owner-refined copy is a discoverability lottery. An agent picks tools from their descriptions; a vague description at 5,000-tool scale is an invisible tool.
That's what SqueezeRank MSO grades: any MCP server listing across six axes — Purpose Clarity, Usage Guidelines, Behavioral Transparency, Parameter Semantics, Conciseness, Contextual Completeness — with per-tool grades and a prioritized fix list. Sold pay-per-call via x402: $0.003 per score, $0.023 for a full optimization cycle (score, rewrite, audit, registry probes, fix plan). Uber built the plumbing by hand; the grading layer for the listings that flow through it is a $0.023 fix per server.
Do it yourself: add the per-call layer (5 steps)
- Default-deny, like Uber. Every tool starts disabled; ownership and enablement live in one registry. Steal this wholesale — it's the correct floor.
- Score the call, not just the caller. Charter policies answer who may call; add a per-invocation confidence score (state + question + scale) with three bands: ≥0.80 auto-fire, 0.50–0.79 confirm, <0.50 escalate and log.
- Put the proxy where you can see it. The data plane already translates every call — that's where the scoring hook lives, one policy evaluation per invocation, no per-team plumbing.
- Grade your listings. If an LLM wrote your tool descriptions, score them before agents discover them: purpose verb first, when-to-use guidance, described parameters, trimmed server description.
- Log like the FTC is watching. Every scored decision — instruction, confidence, band, action, timestamp — appends to the audit trail (why this matters).
Claim receipts
claim-1: Uber's MCP Gateway design write-up was published Oct 1, 2026 (authors Srivastava, Mehndiratta, Gill).
claim-2: The gateway hosts 800+ MCP servers and 5,000+ tools as Uber's orchestration/routing layer.
claim-3: Registry control plane (discovery, ownership, enablement) + Proxy data plane (MCP → HTTP/gRPC/TChannel via Muttley sidecar; /<service-name>/mcp endpoints).
claim-4: Discovery ≠ exposure: every tool starts disabled; owners enable; description changes need owner-approved config diffs.
claim-5: AutoCrawler (Cadence + cron) upserts virtual servers, LLM-writes descriptions, registers disabled by default; third-party servers (Jira, Google) share the front door with token relay, rate limits, and redaction.
claim-6: Tool-level authorization via Uber's Access Control System + charter policies (human/service/agent); PII redaction out of the box.
claim-7: Live gate receipts Oct 4 ~14:20 EDT: batch-delete via third-party tool → 0.3773 escalate; routine read-only discovery → 0.3786 escalate (local-heuristic-v1, calibrated=false).
claim-8: SqueezeRank MSO: $0.003/score, $0.023 full cycle, pay-per-call via x402.
claim-9: Forkast (Oct 3): "first publicly documented Fortune 500 MCP deployment at this scale"; the design "treats discovery as a starting point, not an authorization."
Reading the field
The write-up is already drawing second-order analysis. Forkast (Oct 3, 2026) called it "the first publicly documented Fortune 500 MCP deployment at this scale" and read the disabled-by-default design as treating "discovery as a starting point, not an authorization — a distinction that matters when thousands of services are involved." That framing agrees with ours — and invites the next question: authorization to expose a tool still isn't authorization to fire a specific call. The primary source is Uber's engineering blog (Designing MCP Gateway).
FAQ
Is Uber's MCP Gateway open source? The design write-up is published on Uber's engineering blog (Oct 1, 2026); we found no open-source release of the gateway itself in the sources we could verify.
Does the gateway handle payments? Not in the published design — it's authorization, routing, and observability. The payment layer for tool calls is exactly what per-call paid-MCP work (the spending-guard landscape) and decision-gated payments address.
How does this relate to Uber's consumer business? It doesn't directly — this is internal developer infrastructure for Uber's AI agents, not a rider product.
Honest caveats: all architecture details are from a secondary summary (subagentic.ai) of Uber's Oct 1 engineering-blog write-up — press/coverage-based, not hands-on; no pricing, volumes, or internal policy details disclosed; the per-call-layer critique is our analysis, and Uber's team may have internal controls not covered in the write-up. Live gate receipts are from SML's own local-heuristic-v1 decider (uncalibrated, typesafe_wired=false) — the scores demonstrate the mechanism, not a production gate.
Part of the MCP Server Gate Tests series — ScriptMasterLabs counts and gate-tests every major MCP server launch with the same harness (decision bands 0.80 / 0.50, decider local-heuristic-v1, calibrated=false). This test: October 26, 2026. See all 34 tests →
SCRIPTMASTERLABS · READ · EXPLORE · VERIFY · EARN