How Much Context Do MCP Tool Schemas Cost?
An agent connected to ToolRouter loads 47 tool definitions — 40,146 bytes, 9,286 tokens — and can reach every tool in the catalog through them. The two routing tools alone (discover and use_tool) cost 4,807 bytes and 1,070 tokens. Sending the same catalog as one MCP tool per skill would cost 1,137,558 bytes and 257,047 tokens, which is 27.7x the hosted surface and 240.2x the two routing tools.
Every number on this page comes from a single run against https://api.toolrouter.com/mcp on 2026-09-03. The raw output is published below, and the command that produced it is at the bottom.
Results
| Set | Tool definitions | Bytes | Tokens |
|---|---|---|---|
Routing only (discover + use_tool) | 2 | 4,807 | 1,070 |
ToolRouter hosted default (tools/list) | 47 | 40,146 | 9,286 |
| One MCP tool per catalog skill (constructed) | 1,345 | 1,137,558 | 257,047 |
The catalog on the day of the run held 254 tools and 1,345 skills. The current catalog is at /tools.
What was measured
Three arrays of MCP tool definitions, each serialized with JSON.stringify and no whitespace. Bytes are Buffer.byteLength(serialized, 'utf8'). Tokens are encode(serialized) from gpt-tokenizer 4.0.0 using the o200k_base encoding, the tokenizer for OpenAI's GPT-4o, GPT-4.1 and o-series models. Bytes do not depend on the tokenizer; token counts do, and Claude and Gemini tokenize the same string differently, so treat the token column as one model family's cost rather than a universal constant.
The first two sets are what ToolRouter actually sends. The client was @modelcontextprotocol/sdk 1.30.0 over streamable HTTP on Node v26.5.0, and the hosted set is the tools/list response verbatim. The run cross-checks that response against the public mirror at GET /v1/tools/mcp and fails if the two disagree.
The third set does not exist as a server. ToolRouter builds it from the public catalog at GET /v1/tools: one tool per skill, named <tool>__<skill>, carrying the skill's title, description and input schema, in the same shape the ToolRouter gateway uses for real MCP tools. Output schemas are omitted, which makes the baseline smaller and the comparison more conservative. It is the payload a flat MCP server would have to put in front of an agent to expose the same catalog.
Why the hosted set is 47 tools and not 2
The 47 tools ToolRouter exposes are not 47 capabilities. Most are account, credential, file, job and memory operations that an agent uses directly. Catalog access runs through two of them: discover returns tools matching a query, and use_tool calls a skill by name. That is why adding tools to the ToolRouter catalog does not change what an agent loads at connect time — a new tool adds rows to discover's results, not a new schema in tools/list.
Raw data and rerun
The full output, including the tool names in each set, the per-tool skill counts, the server info returned by initialize, and the client and tokenizer versions, is at /benchmarks/schema-weight-2026-09-03.json.
The script that produced it is published alongside it at /benchmarks/schema-weight-benchmark.ts. It has no ToolRouter-internal imports and reads only public endpoints, so anyone can run it:
curl -O https://toolrouter.com/benchmarks/schema-weight-benchmark.ts
npm i @modelcontextprotocol/sdk@1.30.0 gpt-tokenizer@4.0.0 tsx
npx tsx schema-weight-benchmark.ts .Your numbers will differ from the table above as the ToolRouter catalog changes. The three sets are measured the same way on any day.
The script fails rather than reporting a partial result if any live call fails, if discover or use_tool is missing from the hosted surface, or if the three sets do not come out in increasing order.
Give your AI superpowers. Copy one instruction and paste it into your AI.
Limits and comparison
This measures schema weight at connect time. It does not measure the tokens a tool call and its result consume during a session, which depend on the tool and the data it returns. It also does not model prompt caching, which changes what a repeated system prompt costs but not its size.
Executor publishes a comparable claim for its own gateway on its homepage: 1,640 underlying tools, about 278,800 schema tokens reduced to about 1,044 always-loaded tokens (executor.sh). That is their measurement of their own product. ToolRouter has not reproduced it, and the two numbers are not directly comparable — different catalogs, and Executor does not state which tokenizer it used.
Connecting
In Claude, open Customize → Connectors → + → Add custom connector and use:
- Name:
ToolRouter - URL:
https://api.toolrouter.com/mcp
For Claude Code:
claude mcp add toolrouter -- npx -y toolrouter-mcp

