Build1 distinct publisher3 min readPublished
The tools specification dated 2026-07-28 lets a server advertise a cache lifetime for tools/list, which turns every tool name into a contract clients can keep holding well after you deploy a change to it.
The Engineer · Build desk

Follow any of these and your For You feed starts watching them — no settings page required.
build
255 tool schemas, 91K tokens: pricing the two MCP costs nobody budgets1 distinct publisher
build
MotherDuck buys its own last mile: the agent writes the pipeline, someone else was running it1 distinct publisher
build
The agent did not fail, the client did: 90 logged MCP trials and a validator that ate the calls1 distinct publisher
build
Long agent runs rot. The fix is a loop that forgets on purpose1 distinct publisher
Compiled by The EngineerSomething wrong?How this is made
A client asks for `tools/list`, gets the tool set, and under this revision may keep it: the server advertises a lifetime and a cache scope, and clients may hold the list for as long as that permits [3]. A rename is therefore not atomic with the deploy. The old name is gone from the server and still live in whatever a client cached, alongside the saved configurations, prompts and allowlists written against it [4].
The guide gives no bound on that lifetime, so how long the stale name keeps failing cannot be computed from what it quotes [1]. You can bound it, because you are the one advertising it. The cache lifetime you publish is the deprecation window you have committed to for every name in the list.
Aggregation makes the same problem worse in a different direction. Uniqueness is guaranteed only inside a single server [5], so a proxy fronting several servers can end up holding two tools called `search`, and the specification expects the aggregator to disambiguate, typically by prefixing a server identifier [6]. It also warns against using the server's self-reported name for that prefix, since that name is not guaranteed unique either [7]. The disambiguation key is chosen by whoever aggregates you. `orders.get_status` survives that treatment; `process` or `run` does not carry enough intent to survive anything [8].
The older failure modes are cheaper to fix and still worth naming. A parser cannot catch a vague description that sends the model to the wrong tool, an over-strict `required` list that blocks requests which should work, or an open-ended object that quietly accepts a misspelled field [9]. The dev.to guide's blunter version: a schema cannot prove the handler is authorized, safe, or correct [10]. That is the argument for describing what the tool returns and when a different tool is preferred, and for keeping behavioral rules in the description while machine-checkable limits stay in the schema [15].
What the material does not establish is which older schema guidance has actually gone stale. The guide asserts that the 2026-07-28 revision is the largest rework since launch and that several older guides are now incomplete [2], and it follows that revision together with JSON Schema Draft 2020-12 [1], but the changed behaviours it names are caching and aggregate naming. What the evidence supports is narrower: it documents that existing names have become more expensive to change, not that existing schemas have become wrong.
Two defaults are worth copying regardless. For a tool with no arguments, publish the closed object form with `additionalProperties` set to false, which is what the specification recommends for that case; a bare `{"type": "object"}` is valid and weaker [11]. Optional fields such as `title`, icons, `outputSchema` and annotations go in when the server and its clients can use them, not to make the definition look finished [13].
The guide also points to a browser-based generator that infers property types and nested shapes from one representative JSON object without calling a model, and says to treat the output as editable source rather than a finished contract [14]. That is the correct amount of trust to place in anything inferred from a single example.
Ranked by verification strength, evidence, and original report placement.
The guide follows the Model Context Protocol tools specification dated 2026-07-28 and JSON Schema Draft 2020-12.
tools/list results are now cacheable: a server can advertise a lifetime and a cache scope, and clients may hold the tool set for as long as that permits.
A renamed tool breaks saved configurations, prompts and allowlists at the moment of deployment, and it can stay broken in caches for a while afterwards.
Current MCP guidance recommends tool names between 1 and 128 characters, treated as case-sensitive, using ASCII letters, digits, underscores, hyphens or dots, and unique within their server; that uniqueness is guaranteed only inside a single server.
A client or proxy aggregating several servers can end up with two tools called search, and the specification expects it to disambiguate, typically by prefixing a server identifier.
The specification warns against relying on the server's own reported name for disambiguation, since that name is not guaranteed unique.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · September 6, 2026
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One guide, spec taken on faith
Every rule in this story comes from a single dev.to walkthrough. Its code is checkable on sight, from the closed get_current_time schema to the reviewed search_docs contract with its length and range bounds. The parts that carry the story's weight are not: the cacheable tools/list lifetime, the 1-to-128-character name bound and the aggregation warning are paraphrase of a specification revision nobody quotes here.
A capability on paper, unproven in practice
This is a description of what the protocol now permits, not of anyone using it. No server is shown advertising a cache lifetime, no client is named as honouring one, and there are no downloads, deployments or usage disclosures anywhere in the reporting, so there is nothing to measure.
Superlative ahead of the citation
The idea that a rename outlasts the deploy that shipped it rests entirely on the guide's own account of cache lifetimes, and the guide never says how long one may be, so the durability in the framing is unbounded in either direction. Pair that with an unsourced 'largest rework since launch' and the story runs a little ahead of what it demonstrates, though the underlying counsel about name stability is modest and internally consistent.
Guide points at its author's tool
The piece runs under the trexmi_tools account on dev.to and, a third of the way in, offers that account's MCP Tool Schema Generator as the deterministic starting point without noting the connection. Two things temper it: the generator is free and needs no sign-up, and the surrounding advice steers readers away from generated output toward hand-reviewed schemas, which is the opposite of what a pure funnel would say.
Checkable prose, unchecked source
Our confidence covers what the guide itself says and the JSON it shows, which reads correctly against Draft 2020-12 semantics. Whether the 2026-07-28 revision actually says what the guide reports is harder to stand behind, since our coverage holds only that single paraphrase with no second reading to check it against, and the caching detail that matters most to readers is the least specified part of it.