One endpoint for every MCP server
Stop Burning Context on MCP Tool Definitions.
onemcp unifies all your Model Context Protocol (MCP) servers behind one portal endpoint. Your AI client connects once — the portal handles routing, native OAuth, and Code Mode, so agents script against your tools instead of drowning in tool definitions.
{ "mcpServers": { "github": { "url": "github.mcp", "auth": "ghp_…" }, "slack": { "url": "slack.mcp", "auth": "xoxb-…" }, "postgres": { "url": "pg.internal", "auth": "pg_…" }, // +17 more servers } } // 20 servers · 480+ tools per request
# the problem
Every tool is its own server, login, and wall of tool definitions.
Each MCP server floods the prompt with hundreds of tool definitions on every single request — burning context and money before the model has done any work.
every tool definition, every request
search · describe · execute only
A ~97% smaller context footprint per request — the model spends its window on your problem, not on tool schemas.
{ "name": "github.create_issue", "inputSchema": { "type": "object", "properties": { repo, title, body?, labels? } } }, { "name": "github.search_issues", "inputSchema": { "type": "object", "properties": { query, state?, sort? } } }, { "name": "github.create_pull_request", "inputSchema": { "type": "object", "properties": { repo, head, base, title } } }, { "name": "slack.post_message", "inputSchema": { "type": "object", "properties": { channel, text, thread_ts? } } }, { "name": "slack.list_channels", "inputSchema": { "type": "object", "properties": { types?, limit? } } }, { "name": "postgres.query", "inputSchema": { "type": "object", "properties": { sql, params? } } }, { "name": "postgres.list_tables", "inputSchema": { "type": "object", "properties": { schema? } } }, { "name": "linear.create_issue", "inputSchema": { "type": "object", "properties": { team, title, priority? } } }, { "name": "notion.create_page", "inputSchema": { "type": "object", "properties": { parent, properties, children? } } }, { "name": "jira.create_ticket", "inputSchema": { "type": "object", "properties": { project, summary, type } } }, { "name": "stripe.create_refund", "inputSchema": { "type": "object", "properties": { charge, amount? } } }, { "name": "sentry.list_issues", "inputSchema": { "type": "object", "properties": { project, query? } } } // …468 more definitions, re-sent on every turn
# the solution
One portal, three tools, and the agent writes the rest.
onemcp puts all your servers behind a single portal endpoint. Instead of exposing every tool, a portal exposes just three and lets the model script against them — Cloudflare's MCP Code Mode. Click through a real round-trip:
portal.search({ query: "open a GitHub issue" })
[
{ tool: "github.create_issue", score: 0.98 },
{ tool: "github.search_issues", score: 0.71 }
]How the proxy layer fits together
Your client only ever talks to the portal. It discovers what it needs, then writes one script that does the whole job in a single call — instead of a dozen round-trips with the entire toolset stuffed into every prompt.
# what you get
Built for how agents actually work.
Unified endpoint
Connect every MCP client to a single portal URL. Add or swap upstream servers without ever touching client config again.
Native upstream OAuth
Portals authenticate to upstream servers with a full OAuth flow — credentials stay host-side, never scattered across clients.
Code Mode efficiency
Three meta-tools replace hundreds of definitions. The model scripts against your tools instead of drowning in their schemas.
Per-portal auth scoping
The same server can carry different credentials in different portals — auth is scoped to the membership, not the account.
Import & export portals
Move a portal between environments or share a setup as a single portable config file.
Request logs
See every client request flowing through a portal, so you can debug what your agents are actually calling.
# proof
“LLMs are better at writing code to call MCP, than at calling MCP directly.”
Stop wiring up servers. Start shipping agents.
Spin up a portal in minutes, point your client at one endpoint, and let your agents do the rest.