One endpoint for every MCP server
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
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
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.
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.
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.