v1.108.282 — half the tool descriptions never said what the tool would not do
Scored all 194 tool descriptions across jcodemunch, jdocmunch and jdatamunch against the six-component rubric in arXiv:2602.14878 (Hasan, Li, Rajbahadur, Adams & Hassan, Queen's University), which examined 856 tools across 103 MCP servers and found 97.1% carrying at least one description smell.
We scored 73.2%, and the damage was concentrated in one component: Unstated Limitation on 99 of 194 tools. Half the suite never said what a tool does not return, when it refuses, or when an empty result means "nothing matched" rather than "nothing is indexed". That gap is the expensive kind: an agent reading search_symbols with no mention of the index has no reason to suspect a stale index when the answer comes back empty.
Purpose was our best component by a wide margin, 1.5% against the paper's 56%.
41 of this server's 91 descriptions changed. Each clause is derived from the tool's own guard clauses, schema defaults, or module docstring, not written to satisfy the rubric:
plan_refactoringreturns a plan only and never writes a filecheck_rename_safedoes not detect a collision in a file that uses the name without importing itresolve_repo's relative path resolves against the server's working directory, which is the failure that bites over a detached SSE transportsearch_symbolssearches the index, not the working tree
Result on the same scorer: Unstated Limitation 51.0% to 21.6%, Unclear Purpose and Underspecified both to zero.
Token cost. The core tier had roughly 115 tokens of headroom under its hard ceiling, not the 290 the first pass wanted. The baseline is untouched and the core-tier clauses were trimmed to fit instead. The counter surface is unchanged, so a first-ever install pays nothing for this.
What is deliberately not gated. tests/test_description_smells.py fails a tool that regresses to a one-line description, but does not gate Unstated Limitation (42 tools still score below threshold and many are cue-matching misses on descriptions that do state a boundary) and does not gate Opaque Parameters. On that last one: the paper's scanner is fed name and description text only, and its bottom tier reads "not explained or only in schema". 375 of this server's 377 parameters carry a schema description, which is where JSON Schema says they belong and which the client does transmit. Scored their way we fail; scored against what the model receives, 1.5% of tools have it. The audit in benchmarks/description_smells/ reports both frames rather than picking the flattering one.
Sibling releases: jdatamunch 1.31.7 ships its 12 alongside this; jdocmunch's 20 shipped in 1.134.0 and 1.134.1.