Playground
Sign in with GitHub, paste a tools/list result, and score it through the hosted API from your browser — the same call, headers and allowance a client sees. Every run is a shareable report with a badge.
Open the playgroundThe description is the only thing an agent reads before it picks a tool. TDQS grades every definition on six weighted dimensions, explains each point, and turns the result into a tier you can gate a release on — the same numbers in your terminal, in CI, and across Glama's registry.
$ npx tdqs score --command "node ./dist/server.js" --fail-under B
github-mcp · 4 tools · specification 1.2
smell get_file_contents · usage_guidelines 2 — never says when to reach for it instead of search_code
overall A 3.7 · quality 3.6 · coherence 4.0
✓ passes B
How it works
Code extracts what the schema and annotations already say; a model grades only what the description adds beyond them. Every stage of the pipeline is specified, and the deterministic ones are exact to the digit across implementations.
Deterministic code reads the schema and annotations: parameter coverage, output schema, behavioural hints, invocation cost, and a hash so the same definition always scores the same.
Degenerate definitions — no description, a name restated as a sentence — short-circuit with a flag and a floor score. No model call is spent on them.
A model grades six dimensions from 1 to 5 against published anchors, and writes a justification for every point. The prompts are the specification, byte for byte.
Overrides, flags and smells are applied by code, the weights roll up in integer arithmetic, and the result is a score, a tier, and the reasons.
What is measured
Six weighted dimensions grade each tool; four more, equally weighted, judge the server as a whole. Every score comes with a written reason, and every dimension has a page with its anchors.
What the letter means
The same five thresholds apply to a tool, to a server's description quality, to its coherence, and to the overall. Gate a release on the tier, and read the justifications to know what to fix.
Three ways in
The reference implementation is a package, on npm and on PyPI; the playground, the CLI and the hosted API all run it. A definition scores the same wherever you send it.
Sign in with GitHub, paste a tools/list result, and score it through the hosted API from your browser — the same call, headers and allowance a client sees. Every run is a shareable report with a badge.
Open the playgroundLint and score from your terminal or CI, against a local server, a remote one, or a saved definition set. On npm and on PyPI. Gate a release on the passing tier.
npx tdqs score --url https://mcp.example.com/mcp --fail-under BRead the CLI docsThe same scorer over HTTP. Submit definitions, poll the report, embed the result anywhere. Thirty calls a day per account.
curl https://tdqs.dev/api/v1/reports -H 'Authorization: Bearer tdqs_…' -d @tools.jsonRead the API docsWhy it matters
In a study of 856 tools across 103 servers, 97% of descriptions carried at least one defect and 89% never said when the tool should be used. Rewriting descriptions alone lifted task success by about six points. Across Glama's registry, 56.4% of scored tools still carry a smell.
See the calibration corpusShow your score
Every scored report has a permanent page and an SVG badge that shows the tier and score. Put it beside the build badge, and the description quality of your server becomes a number people can see.