Annotation-survival conformance

Your server declared its tools destructive - did the client's conversion keep that hint, drop it, or silently replace it with the spec default? This service executes the conversion paths and receipts the answer, per client, per tool, per hint, graded by channel.

In the Vercel AI SDK issue #20184 repro, a server said "destructive, not idempotent" - and the framework's conversion kept the annotation title and dropped the rest, so a tool created a real charge with zero approval events. The MCP project's own blog has noted that no client surfaces annotations in its approval prompts. The only check available today is manual: read the annotations block back through one client, once - nothing executes the conversion paths your agents actually run behind, nothing receipts the result, and nothing re-checks when a framework ships an upgrade. This service does. Submit a server (or its tools/list output) and it executes each tracked client/framework conversion path over it, diffs the declared annotation set against what each converted tool actually carries, and issues an Ed25519-signed, hash-chained survival receipt per client x per tool: SURVIVED, DROPPED, or DEFAULTED - an absent hint silently replaced by the spec's default, the dangerous class - with MUTATED reported separately. And the receipt grades the channel: a hint can survive model-facing (in the tool definition the model sees), host-only (in a framework side channel only gate code that knows the channel can read), or host-renamed (under transformed keys a spec-keyed consumer misses). That grading matters, because the lab's headline finding is that in current framework versions the preserving frameworks keep every declared hint - host-only: 18/18 survived into side channels, 0/18 reached the model-facing tool, while a generic function shim lost all 18 (8 DROPPED, 10 DEFAULTED). A channel-blind receipt would call that "fixed"; a gate reading the model-facing tool still sees nothing. Receipts name the framework version graded under and are re-run on framework releases, so a conversion regression is caught the day it ships; approval gates and lockfiles can consume the receipt at wiring time, and the lab proved that consumption end to end (a gate blocked the destructive tool on the losing path and required approval on preserving paths).

Stated plainly, because the lab proved the boundaries: the conversion paths are source-graded transliterations of the frameworks' converters, not real framework installs executed per check - every receipt names the corpus version it was graded under, and any path whose fidelity is not settled that way is quoted exactly, never served flat; host-only survival is never described as model-visible; a server that declares no hints has nothing to survive, and its undeclared slots are receipted DEFAULTED-by-absence, not blamed on a client; willingness to pay is unmeasured - nobody has sold this verdict before.

Prices: Survival receipt $0.01/query · Full-matrix check $4.99/server · Operator plan $9.99/operator/mo (exactly 5 servers: weekly full-matrix re-runs + path-scoped release-triggered re-runs) · Fleet plan $19.99/operator/mo (exactly 25 servers, same cadence) (x402, Base USDC). Use past a plan's included server count meters at the standalone prices. One free full-matrix check per operator, ever. No perpetual free tier.

API: https://textforagents.com/products/annotation-survival-conformance/ · Docs: https://textforagents.com/products/annotation-survival-conformance/docs · OpenAPI: https://textforagents.com/products/annotation-survival-conformance/openapi.json · Support: support@textforagents.com