Development & Automation

Uber's MCP Gateway Design: How It Manages 800 Servers and 5,000 Tools.

Uber separates an MCP Registry from a Proxy Gateway to run more than 800 servers and more than 5,000 tools. A look at the Gateway design, from automatic discovery to approval, permissions, and calls.

· Huuush

Uber's MCP Gateway Design: How It Manages 800 Servers and 5,000 Tools

Key takeaways

  1. 1The MCP Registry manages discovery, ownership, and activation, and the Proxy Gateway connects MCP calls to existing backend protocols.
  2. 2Cadence AutoCrawler discovers IDL and native MCP servers, but registered tools are disabled by default and need owner-team approval.
  3. 3Omni MCP's four-step discovery, Response Projection, and aifx Code Mode help agents handle only the information and results they need from a large tool catalog.
Structure of the Registry-based control plane and the Proxy data plane connected in Uber's MCP Gateway
Uber Engineering's MCP Gateway architecture

As internal APIs and tools multiply, finding the features an AI agent can use, checking permissions, and handling responses all get more complicated. Uber handles this problem not by connecting a few MCP servers but with an MCP Gateway that manages more than 800 servers and more than 5,000 tools in one place.

Based on Uber Engineering's original MCP Gateway design post, let's look at how it separates registration from execution and controls tool exposure.

An MCP Gateway that separates registration from execution

Uber's structure has two parts. The MCP Registry is the control plane; it discovers servers and tools and manages their ownership and activation status. The Proxy Gateway is the data plane; it receives agents' MCP requests and passes them to the actual backend services. The design separates managing registration information from executing requests.

This split matters more as scale grows. The management path that looks up tool lists and changes approval status and the execution path where real service calls flow can be run with different responsibilities.

AutoCrawler discovers tools but doesn't publish them right away

The Registry's AutoCrawler is a Cadence-based distributed workflow that periodically checks existing service signals and the IDL Registry. It builds server and tool schemas from Protobuf and Thrift definitions and converts them into an MCP-compatible JSON-RPC 2.0 format. Native MCP servers are discovered through heartbeats, and it calls listTools to get their tool information.

Flow in which AutoCrawler discovers Protobuf and Thrift IDL and native MCP servers, registers them in the Registry, and the owner team reviews and approves them
Figure 2: AutoCrawler discovery flow. Source: Uber Engineering.

Automatic discovery is not the same as automatic publishing. Newly registered servers and tools are disabled by default, and they are enabled only after the owner team reviews and approves them. Changes also go through diff review, deployment, and rollback procedures. The Registry has a control step that keeps a tool from being exposed to agents just because it was found.

Connecting existing service APIs to agent calls

The Proxy Gateway translates MCP requests into the protocols existing services use, such as HTTP, gRPC, and TChannel, and returns responses in MCP format. For the existing call path it uses the Muttley service mesh sidecar. Service teams don't have to reimplement every API as a new MCP server, because the gateway bridges the protocols.

Six-layer data plane in which an MCP client request passes through the Gateway's middleware and tool execution layers to Thrift, HTTP, gRPC, and native MCP backends
Figure 5: MCP Gateway data plane. Source: Uber Engineering.

It identifies who is making the call, applies server-level permission policies, and sets per-tool policies when needed. Rate limiting and redaction of PII and sensitive information in responses are also part of the gateway's responsibilities. It manages not only tool connections but also who can call them and what data comes back.

Omni MCP starts by finding the tool information you need

With thousands of tools, it is hard to put every description and schema into the context of each request. Omni MCP splits search and invocation into four steps.

  • discover_server: Finds the server to use.
  • discover_tools: Finds relevant tools on that server.
  • get_tool_schema: Gets the detailed input schema of the chosen tool.
  • invoke_tool: Runs the tool you need.
Omni MCP guiding an agent through server search, tool search, tool schema lookup, and invocation, with aifx Code Mode connecting to the same Gateway
Omni MCP and Code Mode: gradual tool discovery. Source: Uber Engineering.

The agent fetches only the information it needs at each step, so it doesn't have to read and hold the entire tool catalog from the start. It narrows the search scope step by step across a large set of tools.

Responses keep only the fields you need

If a tool's output is large, more data than the agent actually uses can end up in the context. Response Projection is a feature that keeps only the fields you need from a response by specifying an array of nested paths in the request schema. Uber describes it as a GraphQL-like way of calling.

It trims tool information at the search stage and narrows the result fields after execution. You can cut unneeded context on both the tool catalog and the response side.

Searching and calling with aifx Code Mode

Uber's coding agents use the MCP Gateway through the aifx CLI. The commands the original post introduces are aifx mcp list, aifx mcp search, and aifx mcp call. Instead of installing an MCP server separately for each agent or loading countless tool definitions into context up front, the agent finds and calls the tool it needs through the gateway. Results can be saved to a file so you can read the parts you need.

Code Mode here is not simply a feature that renames tools. It is a way of using the system that provides discovery and execution of internal tools through a single path, so an agent doesn't have to hold the entire tool spec at all times.

Design takeaways for running MCP at scale

The point of Uber's example isn't just growing the number of MCP connections. It separates the Registry and the Proxy to put a boundary between management and execution, requires owner-team approval after automatic discovery, and applies permissions and sensitive-data handling at execution time. Omni MCP and Response Projection let it handle tool descriptions and responses only as much as needed.

So a team considering MCP needs to design not just the list of servers to connect but also approval after discovery, policies per caller, protocol translation with existing services, and the scope of response data. Uber gathered these elements into a shared operating path called the MCP Gateway.

If MCP is new to you, start with the MCP glossary page. You can compare how an individual coding agent calls MCP tools with Pi's MCP and Codemode example, and the hosting angle continues in the post on MCP server hosting with ChatGPT Sites.

Frequently asked questions

What is Uber's MCP Gateway?
It is a management platform that discovers and manages Uber's MCP servers and tools and passes agent requests to existing backend services.
How are the MCP Registry and the Proxy Gateway different?
The Registry is the control plane and manages discovery, ownership, and activation of servers and tools. The Proxy Gateway is the data plane and connects MCP calls to backend protocols such as HTTP, gRPC, and TChannel.
Can I use tools AutoCrawler finds right away?
No. Servers and tools registered automatically are disabled by default and are enabled only after the owner team reviews and approves them.
What are Omni MCP's four steps?
In order: discover_server, discover_tools, get_tool_schema, and invoke_tool. It finds the server and tool, checks the schema, and then runs it.
What does Response Projection do?
It keeps only the fields you need from a tool's response, based on the nested paths you specify in the request.

Related articles