0.0 / 30
What changed in the harness
Selection accuracy 95→98, token cost up 1%, unconfirmed writes 0%→0%.
Category breakdown
Where the score comes from.
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
01Safety
02Legibility
27.3 / 30
03Economics
20.0 / 20
04Discoverability
14.2 / 20
Highest-impact fix
Estimated gain +30 pointsAdd explicit identity and permission preflight tools
Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
Defects and rewrites.
2 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.
| Tool | Defect types | Suggested rewrite |
|---|---|---|
unfragile_passport |
no_return_description |
Returns the raw Ed25519-signed trust passport JSON for a record, looked up by record page slug, record id (npm:...), or package name. Use for programmatic policy checks; the returned JSON is verifiable offline against the published public key. |
unfragile_stats |
no_return_description |
Returns the live census counts of the verified corpus: how many records are listed, machine-verified, passport-signed, and official, broken down by envelope. Human rendering: https://unfragile.ai/report/mcp-census-2026 |
Selection evidence
Confusable tool pairs.
5 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
unfragile_answer |
unfragile_resolve |
high | Both are single-input, single-verified-result calls returning a signed record plus a paste-ready snippet with abstention semantics; only the parameter name differs (query vs intent). A task like 'give me one verified, paste-ready way to send a Slack message' plausibly maps to either member. |
unfragile_answer |
unfragile_search |
medium | Search tries to disambiguate (list vs single best), but a task phrased as 'find the answer for postgres' or 'show results for stripe' lacks an explicit list/single marker, so an agent could select the wrong member. |
unfragile_search |
unfragile_resolve |
medium | Both return verified corpus records with signed passports; search yields a ranked list while resolve yields one record per intent. A task like 'find the verified record for this task' is ambiguous between wanting ranked options (search) and a single resolved record (resolve). |
unfragile_resolve |
unfragile_passport |
medium | Resolve's output explicitly includes an Ed25519-signed passport, so a task like 'get the signed trust passport for the stripe package' could be routed to resolve instead of the raw-JSON passport fetch, despite resolve expecting an intent and passport expecting a slug. |
unfragile_search |
unfragile_passport |
low | Search returns per-record evidence including signed passports, so a vague task like 'find the trust passport record for postgres' could route to search rather than the by-slug passport fetch; passport is usually the clear pick once a package name or slug is named. |
Compare the field