{"_self":{"principle":"Self-explaining payload — no external context required. This _self block describes what you are reading and where to look next.","widget":"article_topology","feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","contains":"claims, sources, anecdotes, question_graph slice","slug":"tool-search-vs-catalogue-as-data","urls":{"read":"https://miscsubjects.com/api/articles/tool-search-vs-catalogue-as-data/topology"},"how_to_use":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","write":null,"imessage":null,"router_tag":null,"proof_chain":[{"step":1,"claim":"Articles are voxel graphs of tiered claims, not prose blobs.","verify":"https://miscsubjects.com/api/articles/constitution"},{"step":2,"claim":"Claims link to hash-chained sources via source_ids.","verify":"https://miscsubjects.com/api/articles/tool-search-vs-catalogue-as-data/sources"},{"step":3,"claim":"Ask reads topology; ingest/claim append to ledger.","verify":"https://miscsubjects.com/api/protocol"},{"step":4,"claim":"Models queue growth: populate → collaborate → repair → reflex.","verify":"https://miscsubjects.com/api/protocol/grow"},{"step":5,"claim":"Graph proves its own shape (reflex) and $/claim (yield).","verify":"https://miscsubjects.com/graph.html?layer=reflex"},{"step":6,"claim":"Full feature index + _explain on every API response.","verify":"https://miscsubjects.com/api/articles/system-map"}],"related_features":[{"id":"ask","name":"Ask protocol","what":"Answer only from topology; creates question_node with gaps and ingest_hint.","urls":{"read":"https://miscsubjects.com/api/articles/tool-search-vs-catalogue-as-data/prompts","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"graph_topology","name":"Cross-article graph","what":"Merged claims/sources across condition+stack slugs for one question.","urls":{"read":"https://miscsubjects.com/api/articles/tool-search-vs-catalogue-as-data/graph-topology?question=..."}},{"id":"question_graph","name":"Question graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output).","urls":{"read":"https://miscsubjects.com/api/articles/tool-search-vs-catalogue-as-data/question-graph","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"voxels","name":"Voxel graph","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance.","urls":{"read":"https://miscsubjects.com/api/articles/tool-search-vs-catalogue-as-data/voxels","write":"https://miscsubjects.com/api/protocol/claim"}}],"system_map":"https://miscsubjects.com/api/articles/system-map","system_map_markdown":"https://miscsubjects.com/api/articles/system-map?format=markdown","not_medical_advice":true},"_explain":{"feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","why":"Every feature is auditable collective intelligence","how":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","model":null,"verifies":null,"urls":{"read":"https://miscsubjects.com/api/articles/tool-search-vs-catalogue-as-data/topology"},"imessage":null,"router":null,"related":[{"id":"ask","what":"Answer only from topology; creates question_node with gaps and ingest_hint."},{"id":"graph_topology","what":"Merged claims/sources across condition+stack slugs for one question."},{"id":"question_graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output)."},{"id":"voxels","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance."}],"not_medical_advice":true},"slug":"tool-search-vs-catalogue-as-data","title":"Deferred tool search against a catalogue in a database: same cost today, different scaling","register":"essay","tags":["tooling","mcp","architecture","comparison","tool-search","context-cost","measurement"],"updated_at":"2026-07-26T05:37:35.913Z","body_excerpt":"On a catalogue of 891 capabilities, the two designs cost the same. Deferring the schemas and searching them on demand: 14,109 input tokens on a measured turn. Keeping the catalogue in a database behind one HTTP endpoint and sending no catalogue at all: 14,071. A difference of 38 tokens, which is noise.\n\nThe number is not the finding. The finding is what sits inside each number:\n\n- With deferred tool search, **catalogue size is a term in the cost equation** — in Claude Code, one line per capability name in every request — and the mechanism only exists if the host implements it.\n- With the catalogue in a database, catalogue size is not a term at all, and the mechanism is an HTTP request, which every client already has.\n\nThat holds at 50 capabilities and at 5,000. The token count expires the next time either side ships a change; the structural statement does not.\n\n**What would falsify it.** One thing, precisely: a host that defers with *no per-capability residue in context*. Anthropic's server-side variant is documented to be exactly that — \"the API excludes deferred tools from the system-prompt prefix\" — so on the Claude API directly, tool search is also flat in context and the claim above is false as stated. It holds for Claude Code's client-side implementation, which is the one measured here, and Anthropic's own Claude Code documentation says so: \"Only tool names and server instructions load at session start.\" Two implementations of one feature, two different cost curves. Check which one you are running before you believe either number.\n\n[[embed:source:s1]]\n\n## Evidence status\n\n**Observed** marks first-party measurements or runtime receipts from the named environment.\n**Derived** marks arithmetic calculated from cited inputs. **Specified** marks vendor or standards\ndocumentation. **Implemented** and **deployed** name code and live-state evidence, respectively.\n**Reproduced** means the stated procedure was rerun. **Externally attested** marks operator reports;\nthose reports show that an experience occurred, not that it is universal.\n\n## Every term used here, defined once\n\n| Term | What it means on this page |\n| --- | --- |\n| **Tool definition** | A name, a description and a JSON Schema for the arguments, sent to the model so it can call something. Definitions are input tokens and are re-sent on every turn. |\n| **Turn** | One request to the model and its reply. The whole conversation, including all tool definitions, is re-sent each time. |\n| **MCP** | Model Context Protocol. A standard for a server to publish tool definitions and for a client to fetch them and put them in the prompt. |\n| **Deferred loading** | Sending a tool's definition in the request but keeping it out of the model's context until it is asked for. Set with `defer_loading: true` on the API, or `ENABLE_TOOL_SEARCH=true` in Claude Code. |\n| **Tool search** | The search tool the model calls to pull a deferred definition into context. Two vendor variants: regex (`tool_search_tool_regex_20251119`) and BM25 (`tool_search_tool_bm25_20251119`). |\n| **Catalogue-as-data** | One SQL row per capability, holding the call shape, the docs, the argument template and the name of the credential. The model gets no list; it resolves an intent to a key over HTTP. [The full row contract](/a/directory-row-contract). |\n| **Round trip** | One network request and response. Distinct from a model turn: four round trips can happen inside one turn, or across four. |\n| **Prompt cache** | The provider storing the unchanging front of your prompt so re-sending it is cheaper. Anything that changes early in the prompt invalidates everything after it. |\n\n## What the client actually puts on the wire, both ways\n\nBoth figures below come from one machine, `claude-cli 2.1.165`, same prompt, same working directory, one MCP server attached, captured by a local server that logs the request body and answers with a canned reply. The script is at the end of this page.\n\n**With `ENABLE_TOOL_SEARCH=true`** the ","ranking":"safety-first (interaction_risk/limitations), then quote-gated effective_weight","claims":[{"id":"c6","text":"Whether retrieval-based tool discovery is more or less accurate than full definitions in context is unresolved: the vendor states selection degrades past 30-50 tools, a practitioner states the field abandoned retrieval for accuracy reasons, and no head-to-head benchmark has been published by either side.","tier":"anecdotal","section":"Six ways deferred tool search is documented to break","interaction_risk":false,"status":"active","source_ids":["s1","s16","s17"],"why_material":"Flattening this into a verdict would be a lie, and it is the objection that applies to both designs equally.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c8","text":"The strongest argument against catalogue-as-data is that it hand-rolls a higher layer in a lower one: less standard, less valuable, with no published servers and no client that already speaks it.","tier":"anecdotal","section":"Five ways catalogue-as-data breaks","interaction_risk":false,"status":"active","source_ids":["s14","s22","s23","s5"],"why_material":"The page is worthless if it only carries the case against the vendor mechanism.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.3,"quote_gated":false},{"id":"c1","text":"On a catalogue of 891 capabilities, deferred tool search and a catalogue behind one HTTP endpoint cost 14,109 and 14,071 input tokens per turn respectively — a difference of 38 tokens.","tier":"system","section":"Opening","interaction_risk":false,"status":"active","source_ids":["s1","s16","s24","s28"],"why_material":"The page exists to settle which design is cheaper. Without the measured tie, the argument collapses into preference.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c2","text":"In Claude Code's client-side implementation, every deferred capability leaves a residue in every request: its name, measured at a mean of 36.7 bytes.","tier":"system","section":"What the client actually puts on the wire, both ways","interaction_risk":false,"status":"active","source_ids":["s1","s15","s2","s26"],"why_material":"This is the whole structural claim. If names were free, tool search would be flat in catalogue size and the two designs would be equivalent forever.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c3","text":"Deferred tool search requires host support and a supporting model — Sonnet 4.5, Haiku 4.5, Opus 4.5 or later — while a catalogue behind HTTP requires only an HTTP client.","tier":"system","section":"Dimension by dimension, with a verdict in every cell","interaction_risk":false,"status":"active","source_ids":["s18","s2","s3"],"why_material":"Host dependence is the second half of the finding and the one that does not expire when token prices change.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c4","text":"Tool definitions in context are a measured cost problem independent of this build: 68 schemas measured at 16.9k tokens on one project, and 50,000+ tokens of definitions before any user message on another.","tier":"system","section":"Dimension by dimension, with a verdict in every cell","interaction_risk":false,"status":"active","source_ids":["s12","s13","s14","s5"],"why_material":"Establishes that both designs answer a real problem, not one invented to justify a preferred architecture.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c5","text":"The ToolSearch tool definition itself is 1,440 bytes, 3.8% of the nine-definition payload, and does not grow with the catalogue.","tier":"system","section":"The ToolSearch definition itself costs 1,440 bytes, once","interaction_risk":false,"status":"active","source_ids":["s19","s25","s26","s7"],"why_material":"Rules out the cheap objection that the search tool is itself expensive, so the comparison turns on the residue rather than the mechanism.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c7","text":"Deferred tool search has five documented failure modes: first-party servers exempt with no opt-out, client-visible servers missing from the search index, a threshold computed from the wrong model, silently empty runs, and partial mitigation of the cost it is cited for.","tier":"system","section":"Six ways deferred tool search is documented to break","interaction_risk":false,"status":"active","source_ids":["s10","s11","s2","s20","s8","s9"],"why_material":"An honest comparison cannot recommend a mechanism without publishing the reports filed against it.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c9","text":"A non-Claude model drove the deferred-tool loop successfully behind a custom ANTHROPIC_BASE_URL gateway, contradicting Anthropic's Claude Code prompt-caching page and Moonshot's Claude Code guide.","tier":"system","section":"A non-Claude model drove the deferred loop, against two documentation pages","interaction_risk":false,"status":"active","source_ids":["s15","s28","s3","s4"],"why_material":"Two vendor pages tell readers behind a proxy that the cheaper configuration is unavailable. The measurement says otherwise, and a reader deciding between the designs needs to know the documentation may be describing the other variant.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c10","text":"Whether deferred loading preserves or destroys the prompt cache depends on the implementation: Anthropic documents the server-side variant as leaving the prefix untouched, while operators lazy-loading definitions themselves report the cache being invalidated.","tier":"system","section":"Dimension by dimension, with a verdict in every cell","interaction_risk":false,"status":"active","source_ids":["s1","s21","s6"],"why_material":"Presented as one fact either way it is wrong; the two reports are about different mechanisms and both are true.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c11","text":"A tool definition on this catalogue costs a measured 570.8 bytes and 159 input tokens, giving 3.59 bytes per token for this JSON.","tier":"system","section":"The arithmetic at 50, 891 and 5,000 capabilities","interaction_risk":false,"status":"active","source_ids":["s1","s25","s28"],"why_material":"Every projection in the arithmetic table is these two constants multiplied out; without them the table is assertion.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c12","text":"With tool search on the client sends 9 tool definitions totalling 38,116 bytes; with it off, the same session sends 858 definitions totalling 522,746 bytes.","tier":"system","section":"What the client actually puts on the wire, both ways","interaction_risk":false,"status":"active","source_ids":["s25","s27","s7"],"why_material":"It is the artefact the whole comparison is drawn from, and it is bytes on the wire rather than a vendor claim.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c13","text":"Deferred loading is not Anthropic-only: the same defer_loading pattern is implemented in other harnesses, including one where it produced a filed silent-failure bug.","tier":"system","section":"What tool search has that a catalogue behind HTTP does not","interaction_risk":false,"status":"active","source_ids":["s1","s10"],"why_material":"Standardisation is one of the four honest advantages tool search holds over a single build's protocol, and it needs evidence rather than assertion.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c14","text":"Catalogue-as-data costs four HTTP round trips and a measured 2.185 seconds before work completes, and its resolve step can rank the wrong capability first: ?ask=what time is it recommended NOW while TIME_NOW sat lower in the same list of 12.","tier":"system","section":"Five ways catalogue-as-data breaks","interaction_risk":false,"status":"active","source_ids":["s27"],"why_material":"The accuracy objection aimed at tool search lands on this side too, and a comparison that hid its own side's miss would not be usable.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false}],"sources":[{"id":"s1","type":"publisher_documentation","url":"https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool","title":"Tool search tool — Claude API documentation","quote":"Internally, the API excludes deferred tools from the system-prompt prefix. When Claude discovers a deferred tool through tool search, the API appends a `tool_reference` block inline in the conversation, then expands it into the full tool definition before passing it to Claude. The prefix is untouched, so prompt caching is preserved.","summary":"The mechanism, both variants (regex and BM25), the model compatibility list, the 10,000-deferred-tool ceiling, the five-result default, and the vendor's own 'when not to use it' list. Positive on the feature and the single most important source for the server-side behaviour that makes the structural claim on this page falsifiable.","claim_ids":["c1","c10","c11","c13","c2","c6"]},{"id":"s2","type":"publisher_documentation","url":"https://code.claude.com/docs/en/mcp","title":"Claude Code — Scale with MCP tool search","quote":"Tool search keeps MCP context usage low by deferring tool definitions until Claude needs them. Only tool names and server instructions load at session start, so adding more MCP servers has minimal impact on your context window.","summary":"The client-side implementation: what ENABLE_TOOL_SEARCH true/auto/auto:N/false each do, the alwaysLoad escape hatch that exempts a server from deferral, and the statement that names load at session start — the sentence that makes the per-name scaling on this page a documented property rather than an inference. Positive on the feature, and the source of the exemption caveat.","claim_ids":["c2","c3","c7"]},{"id":"s3","type":"publisher_documentation","url":"https://code.claude.com/docs/en/prompt-caching","title":"Claude Code — what invalidates the prompt cache","quote":"This happens when tool search is unavailable or disabled, such as on Google Cloud's Agent Platform or with a custom `ANTHROPIC_BASE_URL` gateway.","summary":"Documents that tool definitions fall back into the cached prefix behind a custom gateway, and that a server connecting or disconnecting mid-session then invalidates the whole conversation. This is the first of the two pages the Kimi measurement on this page contradicts. Negative for anyone running behind a proxy.","claim_ids":["c3","c9"]},{"id":"s4","type":"publisher_documentation","url":"https://platform.kimi.ai/docs/guide/claude-code-kimi","title":"Moonshot — Use Kimi with Claude Code","quote":"The Kimi endpoint does not support this feature yet; it must be set to `false`, otherwise tool calls misbehave","summary":"Moonshot's environment-variable table instructs ENABLE_TOOL_SEARCH=\"false\" for Claude Code against the Kimi endpoint. The second of the two vendor pages contradicted by the measurement on this page, in which a Kimi model drove the deferred loop successfully through a translator. Negative.","claim_ids":["c9"]},{"id":"s5","type":"specification","url":"https://modelcontextprotocol.io/specification/2025-06-18/server/tools","title":"Model Context Protocol specification — Tools","quote":"To discover available tools, clients send a `tools/list` request.","summary":"The protocol both designs are measured against: a server publishes name, description and inputSchema per tool, a client lists them, and a listChanged notification tells the client the set has moved. Establishes that the definition list is the unit of discovery in MCP, which is what deferral works around and what catalogue-as-data replaces.","claim_ids":["c4","c8"]},{"id":"s6","type":"specification","url":"https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-use-with-prompt-caching","title":"Tool use with prompt caching — defer_loading and cache preservation","quote":"Deferred tools are not included in the system-prompt prefix. When the model discovers a deferred tool through tool search, the definition is appended inline as a `tool_reference` block in the conversation history. The prefix is untouched, so prompt caching is preserved.","summary":"The API reference for the cache behaviour of deferred tools, and the direct counterweight to the field reports that lazy loading busts the cache. Both are true of different implementations, which is why this page publishes them side by side rather than picking one.","claim_ids":["c10"]},{"id":"s7","type":"repository","url":"https://github.com/massoumicyrus/claude-code-cloudflare-gateway","title":"claude-code-cloudflare-gateway — the translator and the capture harness","quote":"tools/capture-gateway.mjs","summary":"MIT-licensed Worker that answers the Anthropic Messages API and forwards to Cloudflare AI Gateway, plus the capture server whose log fields (n_tools, tool_names, system_chars) produced the wire measurements on this page. What a reader gets: a runnable way to reproduce every byte count here against their own client.","claim_ids":["c12","c5"]},{"id":"s8","type":"github","url":"https://github.com/anthropics/claude-code/issues/76372","title":"Desktop built-in MCP tool schemas load non-deferred with no opt-out","quote":"With tool search active (`ENABLE_TOOL_SEARCH` unset), third-party MCP tools correctly defer to names-only. But three Desktop built-in servers load complete schemas upfront every session","summary":"Audits session-start context across six sessions and three projects from session JSONL message.usage and isolates ~3.9k tokens of first-party server schemas that escape deferral with no setting to remove them. Negative: deferral works for the servers you added and not for the ones you did not.","claim_ids":["c7"]},{"id":"s9","type":"github","url":"https://github.com/anthropics/claude-code/issues/57033","title":"ToolSearch does not index tools from claude.ai-hosted MCP servers","quote":"the `ToolSearch` deferred-tool discovery mechanism does NOT include them in its index. Any `ToolSearch` query that should match a claude.ai MCP tool returns zero results","summary":"On Claude Code 2.1.114, servers added at claude.ai/settings/connectors show as Connected in /mcp yet are invisible to deferred discovery, while local .mcp.json and plugin servers index fine. Negative, and the clearest example of a capability that exists and cannot be reached.","claim_ids":["c7"]},{"id":"s10","type":"github","url":"https://github.com/openai/codex/issues/24536","title":"codex exec can silently complete empty when configured MCP tools are deferred","quote":"`codex exec` can silently finish with no assistant message when an explicitly configured MCP tool is deferred behind `tool_search`.","summary":"On codex-cli 0.133.0 with a GitHub connector contributing 90 tools, the task-specific server stays healthy and registered but is only exposed as a deferred source; the model emits reasoning then completes and the harness accepts an empty turn. Negative, and evidence that deferral is not Anthropic-only.","claim_ids":["c13","c7"]},{"id":"s11","type":"github","url":"https://github.com/NousResearch/hermes-agent/issues/57520","title":"tool_search auto-gate computes its threshold from the wrong model","quote":"For any session running a model *other than* the configured default (e.g. `--model qwen3.6-27b --provider llamacpp`, or a model switched via `/model` in the TUI), the gate is scaled to the wrong window.","summary":"Traces the deferral decision to a helper reading config instead of the session model, so a 98,304-token local model gets a threshold computed from a 256K cloud model — 25,600 instead of 9,830 — and receives the full schema payload inline. Negative, with the offending code quoted.","claim_ids":["c7"]},{"id":"s12","type":"github","url":"https://github.com/github/app/issues/1398","title":"Dynamic MCP tool loading to reduce context window consumption","quote":"Only include a tool's full schema in context when it's first needed. Use a lightweight tool registry (name + one-line description) for discovery","summary":"A feature request that independently describes the names-plus-descriptions registry this page measures, filed by someone watching hundreds of schemas consume tens of thousands of tokens before any conversation content. Positive on the pattern, negative on the status quo.","claim_ids":["c4"]},{"id":"s13","type":"independent_measurement","url":"https://github.com/yonatangross/orchestkit/issues/885","title":"Context bloat: 16.9k tokens on MCP tool definitions loaded into the main agent","quote":"The main agent context burns **16.9k tokens (8.5% of 200k)** loading 68 MCP tool schemas at session start. Most are never called by the main agent — they're used by subagents.","summary":"A per-server token table (notebooklm-mcp 25 tools/~6.0k tokens, hq-knowledge 14/~3.3k, memory 9/~2.1k, tavily 5/~1.2k, context7 2/~0.5k) measured on a real project, putting MCP definitions at 16.9k of 54k fixed overhead. The most rigorous third-party measurement of the problem both designs address. Negative on the default.","claim_ids":["c4"]},{"id":"s14","type":"hn","url":"https://news.ycombinator.com/item?id=47400262","title":"Apideck CLI — an AI-agent interface with much lower context consumption than MCP","quote":"We built a unified API with a large surface area and ran into a problem when building our MCP server: tool definitions alone burned 50,000+ tokens before the agent touched a single user message.","summary":"A vendor of a large unified API measured 50,000+ tokens of definitions before any user input, replaced the MCP server with a CLI at roughly 80 tokens of system prompt plus progressive discovery, and cites a 75-run comparison showing 4-32x token overhead for MCP versus CLI. Also honest about where the non-MCP route loses: streaming, delegated auth, distribution.","claim_ids":["c4","c8"]},{"id":"s15","type":"hn","url":"https://news.ycombinator.com/item?id=48332411","title":"Comment on: MCP is dead?","quote":"And it's not actually necessary for it to exist at the API level. It's a pattern. Making it API-side is just an optimization.","summary":"Notes OpenAI also supports defer_loading, then gives the four-step client-side recipe — one tool_search tool, names in context, match on call, append the matched definition — and observes Claude Code does it client side. Positive on deferral, and the clearest outside description of the client-side mechanism this page measures.","claim_ids":["c2","c9"]},{"id":"s16","type":"hn","url":"https://news.ycombinator.com/item?id=48332962","title":"Comment on: MCP is dead?","quote":"Because Claude Code only loads the tools it needs now, so context bloat is pretty much solved for MCPs.","summary":"The strongest pro-tool-search position in the corpus: the source article retracted its context-bloat argument after deferred loading shipped, quoting an 85%+ context reduction. Positive, and the case this page has to beat rather than dismiss.","claim_ids":["c1","c6"]},{"id":"s17","type":"hn","url":"https://news.ycombinator.com/item?id=46039648","title":"Comment on: Claude Advanced Tool Use","quote":"Seems like we traded scalability for accuracy, then accuracy for scalability… but I guess maybe we've come out on top because whatever they are using for tool search is better than RAG?","summary":"The accuracy objection, and the sharpest thing said against the whole direction: the field abandoned retrieval for full definitions because retrieval was less accurate, and tool search walks that back. Negative, and it applies equally to a catalogue-as-data resolver.","claim_ids":["c6"]},{"id":"s18","type":"hn","url":"https://news.ycombinator.com/item?id=47719499","title":"Comment on: I still prefer MCP over skills","quote":"If the special tool search tool is available, then a client would not load the descriptions of the tools in advance, but only for the ones found via the search tool. But it's not widely supported yet.","summary":"Corrects the claim that MCP has no progressive disclosure by pointing at the tool search tool, while conceding client support is thin. Mixed, and the concession that makes 'requires host support' a real column on the comparison table rather than a theoretical one.","claim_ids":["c3"]},{"id":"s19","type":"hn","url":"https://news.ycombinator.com/item?id=47719249","title":"Comment on: I still prefer MCP over skills","quote":"That first tool consumes only about 60 tokens. As long as the LLM doesn't need the tools, it takes almost no space.","summary":"Someone who hit the token problem with only a few tools and hand-rolled a gate: one bare-bones tool with a one-line description that unlocks the full set on call, plus a way back to the quiet state. Positive, and the outside figure this page's 1,440-byte ToolSearch measurement sits next to.","claim_ids":["c5"]},{"id":"s20","type":"hn","url":"https://news.ycombinator.com/item?id=47392361","title":"Comment on: Chrome DevTools MCP","quote":"And no, the tool search function recently introduced by Anthropic does not completely solve this problem.","summary":"A first-hand verdict that deferral is a partial mitigation: you still pay for servers you never invoke on a given turn. Negative, and the direct answer to the 'context bloat is pretty much solved' position quoted above it.","claim_ids":["c7"]},{"id":"s21","type":"hn","url":"https://news.ycombinator.com/item?id=47209810","title":"Comment on: When does MCP make sense vs CLI?","quote":"The main problem with this approach at the moment is it busts your prompt cache, because LLMs expect all tool definitions to be defined at the beginning of the context window.","summary":"The prompt-cache objection to lazy loading, from an operator: input tokens are the main cost driver, so invalidating the prefix can cost more than the definitions saved. Negative, and in direct tension with Anthropic's documented server-side behaviour, which is why both are quoted on this page.","claim_ids":["c10"]},{"id":"s22","type":"hn","url":"https://news.ycombinator.com/item?id=48336021","title":"Comment on: MCP is dead?","quote":"It's like saying APIs are dead because you can just use HTTP. They're not the same thing, though of course you can hand-roll the higher layer in the lower one. It's just more work, less standard, less valuable.","summary":"The sharpest rebuttal of the just-use-HTTP framing, and the strongest argument against the catalogue-as-data side: a decorated index of features beats a bare endpoint list for a model, and hand-rolling the higher layer is less standard and less valuable. Positive on MCP.","claim_ids":["c8"]},{"id":"s23","type":"hn","url":"https://news.ycombinator.com/item?id=47381322","title":"Comment on: MCP is dead; long live MCP","quote":"MCP is effectively \"just another HTTP REST API\"; OAuth and everything.  The key parts of the protocol is the communication shape and sequence with the client, which most SDKs abstract for you","summary":"From a team that shipped one: the protocol reduces to a communication shape over HTTP that the SDKs hide, and deploying a server is no harder than a REST API. Mixed — deflationary about what MCP is while still recommending it, which is the honest middle of the argument this page sits inside.","claim_ids":["c8"]},{"id":"s24","type":"hn","url":"https://news.ycombinator.com/item?id=48331540","title":"Comment on: MCP is dead?","quote":"The idea that MCP tool definitions take up a certain number of tokens is laughable. That's an implementation detail of the agent harness.","summary":"The dissent from every measurement on this page: MCP is a specification, not a context-loading strategy, and harnesses have options beyond dumping definitions into the window. Contrarian and worth carrying, because it is the reason the comparison here is framed on what a specific client sends rather than on what the protocol requires.","claim_ids":["c1"]},{"id":"s25","type":"runtime_receipt","url":"https://github.com/massoumicyrus/claude-code-cloudflare-gateway","title":"First-party wire capture: 9 definitions / 38,116 bytes against 858 / 522,746 bytes","quote":"9 38116\n858 522746","summary":"Taken for this page on 2026-07-25. claude-cli 2.1.165, one MCP server attached, same prompt and working directory, run once with ENABLE_TOOL_SEARCH=true and once false against a local server that logs the request body. Method and full script published in the article so the run is repeatable. Derived: 570.8 bytes per deferred definition.","claim_ids":["c11","c12","c5"]},{"id":"s26","type":"runtime_receipt","url":"https://github.com/massoumicyrus/claude-code-cloudflare-gateway","title":"First-party measurement: the ToolSearch definition is 1,440 bytes, and 833 deferred names are 30,551","quote":"ToolSearch 1440 bytes  ·  833 mcp__ names, 30551 bytes, mean 36.7 bytes per name","summary":"Same capture, 2026-07-25. The search tool's own definition is 3.8% of the nine-definition payload and does not grow with the catalogue; the residue that does grow is the name list, at a measured 36.7 bytes per capability per request. This is the measurement the structural claim on this page rests on.","claim_ids":["c2","c5"]},{"id":"s27","type":"runtime_receipt","url":"https://miscsubjects.com/receipt/inv_3wt7dcbp2c","title":"First-party timing: four round trips, 2.185 s, 47,409 bytes, with the public receipt","quote":"resolve 0.619s / contract 0.215s / invoke 1.047s / receipt 0.304s — total 2.185s, 47,409 B","summary":"Taken against production on 2026-07-25 with curl -w. The invocation that closes the loop is public and keyless at the linked receipt, with input and output hashes. Also records the resolver miss: ?ask=what time is it returned 12 candidates and recommended NOW rather than TIME_NOW.","claim_ids":["c12","c14"]},{"id":"s28","type":"runtime_receipt","url":"https://miscsubjects.com/api/articles/mcp-tool-search-cost","title":"Gateway log rows: 149,187 / 14,109 / 14,071 input tokens on the same catalogue","quote":"856 definitions 149,187 tokens $0.02852109 · 9 + ToolSearch 14,109 $0.00443075 · no MCP server 14,071 $0.00456265","summary":"Cloudflare AI Gateway log rows for @cf/moonshotai/kimi-k2.7-code on 2026-07-25, one build, one catalogue of 891 capabilities, three exposures. The pair that makes the headline finding: deferred search and no-server-at-all land 38 tokens apart. Cloudflare labels its cost column an estimation, so the argument here is built on token counts.","claim_ids":["c1","c11","c9"]}],"anecdotal_sources":[],"scientific_sources":[],"user_reports":[],"related_articles":[],"question_graph":{"slug":"tool-search-vs-catalogue-as-data","questions":[],"evidence":[],"edges":[],"counts":{"questions":0,"evidence":0,"edges":0}},"honesty":{"active_claims":14,"retracted_claims":0,"cut_claims":0,"challenges":0,"scrub_events":0,"note":"Retracted/cut claims stay on ledger but are excluded from ask unless ?include_inactive=1"},"counts":{"claims":14,"claims_total":14,"sources":28,"anecdotal":0,"scientific":0,"user_reports":0,"questions":0,"evidence_ingests":0}}