Problem: Tool context bloat
When MCP clients connect to several servers — or even one large one (Postman, GitHub, etc.) — the full tools/list payload is injected into every model turn. Three things degrade:
- Latency — larger prompts slow first tokens
- Cost — every turn pays for schemas the model mostly doesn't use
- Decision quality — models pick worse tools as the list grows and options blur together
The spec currently offers no primitive for grouping or partial loading: tools/list returns a flat list, and every workaround (HyperTool, RAG-MCP, GitHub's toolsets, Continue's tool filtering) lives above the protocol layer. That means each client reinvents the wheel, servers can't express their natural functional boundaries, and there's no interop between approaches.
Proposal: SmartMCP
Two complementary pieces — one a spec change, one a client-side pattern the spec change enables.
1. Subseg — Subject Segmentation (spec-level)
Add a lightweight grouping primitive to tools/list so servers can declare functional groups and clients can load only what they need for a given turn.
Today:
tools/list → [tool1, tool2, tool3, tool4, tool5, tool6]
Proposed:
tools/list →
group "creation": [tool1, tool2, tool3]
group "deletion": [tool4, tool5]
group "query": [tool6]
Concretely, this could be an optional group field on each tool plus an optional groups filter parameter on tools/list — fully backward-compatible.
2. DMA — Dual Model Architecture (client pattern)
A pattern Subseg makes practical. The core distinction, which is easy to mischaracterize:
- Model 1 (expensive, reasoning) sees no tool schemas at all and outputs a natural-language description of the action to perform.
- Model 2 (cheap) sees the schemas for the relevant Subseg group and maps Model 1's description to a concrete
tools/call.
Model 1 is action-descriptive, not tool-selective. It never touches schemas. Consequences:
- The expensive model's context stays small no matter how many tools exist downstream
- Schema changes don't perturb Model 1's prompt
- The schema-matching task is mechanical enough that a cheap model handles it well
Tradeoffs (honest)
|
Time |
Cost |
Quality |
| Stock MCP |
T |
X |
baseline |
| SmartMCP |
T + Δ (extra hop) |
< X |
same or better |
Latency takes a small hit from the second model call. Subseg alone improves all three axes without that tradeoff, which is why the spec primitive is valuable even for clients that don't adopt DMA.
Why spec-level rather than middleware
Every existing grouping solution sits above the protocol. That fragments the ecosystem: a Postman-style group definition is unusable by another client, servers can't advertise their own groupings, and clients keep reinventing the same primitive in slightly incompatible ways. A small, optional, backward-compatible spec change unlocks all of this once.
Open questions
- Naming:
group, category, namespace?
- Flat vs. hierarchical groups?
- Should
tools/list without a filter return groups-only metadata, or the full flat list for backward compat?
- Does this belong as an SEP, or start as a discussion thread first?
Happy to draft an SEP if there's appetite.

Problem: Tool context bloat
When MCP clients connect to several servers — or even one large one (Postman, GitHub, etc.) — the full
tools/listpayload is injected into every model turn. Three things degrade:The spec currently offers no primitive for grouping or partial loading:
tools/listreturns a flat list, and every workaround (HyperTool, RAG-MCP, GitHub's toolsets, Continue's tool filtering) lives above the protocol layer. That means each client reinvents the wheel, servers can't express their natural functional boundaries, and there's no interop between approaches.Proposal: SmartMCP
Two complementary pieces — one a spec change, one a client-side pattern the spec change enables.
1. Subseg — Subject Segmentation (spec-level)
Add a lightweight grouping primitive to
tools/listso servers can declare functional groups and clients can load only what they need for a given turn.Today:
Proposed:
Concretely, this could be an optional
groupfield on each tool plus an optionalgroupsfilter parameter ontools/list— fully backward-compatible.2. DMA — Dual Model Architecture (client pattern)
A pattern Subseg makes practical. The core distinction, which is easy to mischaracterize:
tools/call.Model 1 is action-descriptive, not tool-selective. It never touches schemas. Consequences:
Tradeoffs (honest)
Latency takes a small hit from the second model call. Subseg alone improves all three axes without that tradeoff, which is why the spec primitive is valuable even for clients that don't adopt DMA.
Why spec-level rather than middleware
Every existing grouping solution sits above the protocol. That fragments the ecosystem: a Postman-style group definition is unusable by another client, servers can't advertise their own groupings, and clients keep reinventing the same primitive in slightly incompatible ways. A small, optional, backward-compatible spec change unlocks all of this once.
Open questions
group,category,namespace?tools/listwithout a filter return groups-only metadata, or the full flat list for backward compat?Happy to draft an SEP if there's appetite.