I3307 — The default MCP tools/list stays within a declared byte budget, and a full schema is fetched per tool
Declare a byte budget for the default tools/list, carry compact descriptions and no output schemas in it, serve the full schema per tool on demand, and fail a gate when the listing exceeds the budget.
READY wave 0 · p2 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3307 will be accepted.
Objective
Declare a byte budget for the default tools/list, carry compact descriptions and no output schemas in it, serve the full schema per tool on demand, and fail a gate when the listing exceeds the budget.
Why
An audit on 2026-10-08 measured 166 tools and 1.79 MB in tools/list; on 2026-10-18 the shared server's MCP instructions announced 192 tools. Every client pays the listing in context on connect. Rebound to the new intent criterion #mcp-listing-bounded, because the plugin carries the MCP server and every client pays its tools/list on connect. Milestone mcp-transports-are-reliable belongs to no intent, so moving this issue there would leave it unbound. It extends milestone mcp-transports-are-reliable. Sources: chatgpt-majordomus:c193#1.
Current state
mcp/protocol.rs prepares the listing once and includes outputSchema per tool; no budget exists.
Desired state
A budget in policy, a gate, and a measured listing size in the MCP projection.
Scope
- apps/majordomus-cli/src/mcp
- docs/MCP.md
- .ai/repo/benchmarks/rust/policy.yaml
- .ai/repo/benchmarks/rust/README.md
- apps/majordomus-cli/src/capability/builtin/mcp.rs
- apps/majordomus-cli/tests/mcp_conformance.rs
- test/cases/940_mcp_says_nothing_its_capability_does_not.sh
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- The default listing is measured and under budget
- Every tool's full schema is retrievable on demand
- Adding a tool that breaks the budget fails the gate
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test mcp_conformance
- bash test/run.sh 940_mcp_says_nothing_its_capability_does_not
Evidence required
- case_tools_list_is_bounded
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3307.yaml. Read it back with majordomus plan show I3307.