The internal MCP gateway
What an internal MCP gateway is, why large teams end up building one, and what to look for when deciding on one.
What it is
A single server that sits between every agent in an organization and every internal system that agent might need to act on, speaking one protocol (MCP) on both sides. Instead of each agent integrating with each system directly, every system is registered once, behind the gateway, and every agent reaches all of them through one connection.
Why you need it (in a large team)
- Point-to-point doesn't scale past a handful of agents or a handful of systems. Wiring one agent to your ticketing system, your feature flags, and your deploy pipeline is three integrations. Add a second agent framework, or a fifth internal system, and you're doing it again, on both axes at once. That's an N×M problem: N agents times M systems, each pair its own integration, its own auth, its own review.
- A gateway turns that into N+M. Each system integrates once, each agent connects once. The bigger the org, the more agents and the more internal systems, the faster N×M outgrows what anyone can keep integrated and secured by hand.
- The threshold is real, not universal. A five-person team with one agent and three tools doesn't need this. An org with a dozen agent frameworks in flight and hundreds of internal APIs can't function without something like it.
How it should work
Each internal system registers itself with the gateway once, as a set of MCP tools, without needing to know which agent will eventually call it. Registration can also be automatic: Uber's gateway crawls its service definitions, generates tool descriptions from them, and registers every tool disabled until the owning team reviews and enables it, so existing APIs become tools without being rewritten. An agent, in turn, only ever talks to the gateway: it authenticates a single time, discovers whatever tools it's allowed to see, and never holds separate credentials for every system behind it. The gateway is the one authenticating onward on the agent's behalf, which also quietly kills a mundane but real failure mode, tokens baked into an agent's own config that expire and need manual refreshing.
Because every call already passes through the same place, that place becomes the natural spot to enforce who's allowed to call what, redact sensitive fields, rate-limit, and log. Try to enforce that per-integration instead and it drifts within a quarter. The gateway usually ends up doing a second, unrelated job too: translating protocols, since not everything speaks MCP the way a given agent expects. Worth keeping that apart from the policy job in your head, even if one server does both, because they fail differently. A broken translation breaks a feature. A missed policy check is an incident.
One more thing breaks quietly if skipped: discovery. Handing an agent a raw list of a thousand tools burns tokens and degrades its reasoning on every single call. A search or catalog step that surfaces only what's relevant to the current task isn't an optimization to add later, it's what keeps the gateway usable once the tool count grows past what fits in a prompt. Uber's answer was a single proxy exposing four meta-tools (discover a server, list its tools, fetch a schema, invoke), plus trimming each response to the fields the model asked for, and a CLI mode where coding agents write tool output to files and grep it instead of reading it into context.
What you should look for when deciding on one
- Who gets to add a tool. A security review before anything goes live, an automated crawl of existing internal APIs (Uber's registers them disabled until the owner enables them), or just letting teams contribute on their own. Pick one before you build, not after the first incident, because it's also who's accountable when a bad tool ships.
- How far the gateway actually reaches. Some are a dumb proxy that just translates between protocols. Others are the real enforcement point, tracking which human a multi-hop agent action ultimately traces back to. That second version costs more to build, but it's the difference between "an agent did something wrong" being an answerable question and being a shrug.
- How third-party tools fit the model. A vendor's own MCP server exposes its whole product, not the narrow slice one agent actually needs, so if every third-party integration needs custom wrapping to fit, the tool model is too rigid.
- Whether discovery was built for scale from the start. A gateway that dumps all 50 of its tools into every agent's context works fine at 50 and falls over at 500. A search step bolted on later is usually a sign it was an afterthought, not a plan.
Where it fits into a software factory
It isn't one of the five activities a factory gets scored on, code generation, testing, review, documentation, deployment. It's the layer underneath several of them at once. A background agent opening a PR, an automated reviewer pulling context from a ticket, a migration script hitting a live API: none of that is the gateway's job, but all of it reaches outside the agent's own sandbox to do it, and that's exactly the moment it goes through the gateway if one exists.
That's also why it tends to get built early, before the flashier agents that depend on it. A background agent can't safely touch a deploy pipeline, and an automated reviewer can't safely pull ticket context, until something is already standing between them and the systems they're reaching into. Skip building it and that access doesn't disappear, it just gets wired directly into each agent instead, which is the same N×M mess this pattern exists to avoid.
Companies using an internal MCP gateway
The full picture, including the one company in our published roster that deliberately built the opposite: