AttestPage (Quoteproof)
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Use before citing a page, sharing links or installing a suggested package. Signed receipts.
| Author | us.srv.vehcdj664efetfrsolne5umanq |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2249 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"AttestPage (Quoteproof)": {
"url": "https://vehcdj664efetfrsolne5umanq.srv.us/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (15)
attestpage_verify_quoteChecks a quote on its live page: exact, fuzzy or none, offsets and a signed receipt. US$0.01 per call; POST url, quote. Costs US$0.01 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-quote
Parameters:
url(required) — string — http(s) URL of the page to check (max 2,048 characters). The whole request body is capped at 64 KB.quote(required) — string — Text to look for on the page, or with match "passages" the claim to find support for (max 1,000 characters after normalisation).match— string — exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict).threshold— number — Fuzzy similarity needed, default 0.9.case_sensitive— boolean — Default false; must be false with match "passages".
Hints: read-only no · destructive no · idempotent no · open-world yes
attestpage_verify_citationsChecks up to 10 quote and URL pairs on live pages: exact, fuzzy or none, one receipt. US$0.10 per call; POST citations. Costs US$0.10 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-citations
Parameters:
citations(required) — array — 1 to 10 citations. Each URL is fetched once however many quotes cite it. Dead domains are reported as results; if none resolves, 422 and no charge.match— string — For every citation: exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict).threshold— number — Fuzzy similarity needed, default 0.9.case_sensitive— boolean — Default false; must be false with match "passages".
Hints: read-only no · destructive no · idempotent no · open-world yes
attestpage_fetchReturns a web page as clean text, with title, hashes and a signed receipt. US$0.002 per URL; POST up to 10 URLs. Costs US$0.002 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/fetch
Parameters:
url— string — http(s) URL to fetch (max 2,048 characters). Send url or urls, not both.urls— array — Instead of url: 1 to 10 distinct http(s) URLs in one call, priced per URL (the route price × the count). The answer is results[], one per URL, each with its own receipt.return_text— boolean — Return up to 20,000 characters of clean text (per page). Default true; send false to leave the text out.
Hints: read-only no · destructive no · idempotent no · open-world yes
attestpage_recheckReports if a page changed since a receipt: unchanged, changed, gone, unreadable. US$0.003 per call; POST receipt, or url with content_sha256 (not both). Costs US$0.003 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/recheck
Parameters:
url— string — Only without receipt: the http(s) URL to re-check (max 2,048 characters).quote— string — Only with a verify/quote receipt in exact or fuzzy mode: the quote exactly as it was sent to verify/quote. Must match the one the receipt signed. We re-test it on the live page and answer quote.verdict: still_exact, now_exact, now_fuzzy, now_missing or unchecked.quotes— array — Only with a verify/quotes receipt in exact or fuzzy mode: all of its quotes, exactly as sent to verify/quotes, in the same order. Each must match the one the receipt signed. We re-test each on the live page and answer quotes[i].verdict (same values as quote.verdict). Not with quote.history— array — Optional: up to 10 earlier receipts of this service for the same url, oldest first (fetch, verify/quote or recheck; paid or trial). Adds a timeline. Not stored.receipt— string — Compact JWS receipt from an earlier /v1/fetch, /v1/verify/quote, /v1/verify/quotes or /v1/recheck call of this service (paid or trial; not a sample). Max 160 KB.return_text— boolean — Also return up to 20,000 characters of the new clean text. Default false.content_sha256— string — Only with url: the page.content_sha256 from our own fetch (64 hex). Other tools hash other text.
Hints: read-only no · destructive no · idempotent no · open-world yes
attestpage_check_linksChecks up to 10 URLs: ok, broken, moved or unknown for each, with final URL and title. US$0.005 per call; POST URLs. Costs US$0.005 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/check-links
Parameters:
urls(required) — array — 1 to 10 items, each an http(s) URL string or { "url", "expected_text" }. Dead domains are reported as results; if none resolves, 422 and no charge.
Hints: read-only no · destructive no · idempotent no · open-world yes
attestpage_check_packagesChecks up to 10 npm, PyPI or crates names: listed, version, licence, OSV.dev advisories. US$0.005 per call; POST names. Costs US$0.005 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/check-packages
Parameters:
packages(required) — array — 1 to 10 packages to look up. Each is { ecosystem, name, version? }; ecosystem is npm, pypi or crates.
Hints: read-only no · destructive no · idempotent no · open-world yes
attestpage_attestSigns a timestamped receipt for a file's sha256, proving it existed unchanged then. US$0.002 per call; POST the hash. Costs US$0.002 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/attest
Parameters:
sha256(required) — string — SHA-256 (hex) of the thing being attested.note— string — Optional note; only its SHA-256 goes in the receipt.idempotency_key— string — Optional, x402 payments only (keys are scoped to the paying address; trial and L402 calls get 400). Retries with the same key and sha256 get the same attestation (the receipt names that call own payment tx); a different sha256 gets 409.
Hints: read-only no · destructive no · idempotent no · open-world no
attestpage_scan_replyScans a bot's draft reply before sending: pass, caution or block, with findings on links, lookalike hosts, injection and prices. US$0.003 per call; POST text. Costs US$0.003 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/scan-reply
Parameters:
text(required) — string — The draft reply your bot is about to send (1 to 10,000 characters). Plain text, Markdown or HTML.source_text— string — Optional: the text the bot was given to answer from (max 40,000 characters). Links whose host is not in it, and price or discount numbers not in it, are findings. The request body is capped at 64 KB.allowed_urls— array — Optional: up to 50 URLs or bare hosts the bot may link to. A link is allowed when its host is one of these or a subdomain of one (paths are not compared). With allowed_urls, a link outside them is a high finding.
Hints: read-only no · destructive no · idempotent no · open-world no
attestpage_verify_documentChecks one part of a document's quotes on live pages. US$0.10 per part of up to 10 pairs; POST document and part. Costs US$0.10 per part of 10 pairs in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-document
Parameters:
document(required) — string — The answer or report as written, 1 character to 60000 bytes (UTF-8), and the whole request body is capped at 256 KB. Its quotes and their links are found by fixed rules (extractor doc-v1).part— integer — 0-based part to check, default 0; call POST /v1/verify/document/preview first to see how many parts there are.match— string — For every pair: exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict). With "passages", each sentence that carries a link is a claim.format— string — markdown (default), text (only bare URLs and [n] references are links) or html (<a href> links, <blockquote> and <q> quotes; other tags are dropped).min_words— integer — A quoted span with fewer words is skipped as too_short (default 4).part_size— integer — Pairs per part, default 10. A free trial call takes at most the size in extensions.trial.info.max_batch_items of the 402 offer.threshold— number — Fuzzy similarity needed, default 0.9.case_sensitive— boolean — Default false; must be false with match "passages".
Hints: read-only no · destructive no · idempotent no · open-world yes
attestpage_verify_quotesChecks up to 20 quotes on one page: exact, fuzzy or none, offsets, signed receipt. US$0.02 per call; POST url, quotes. Costs US$0.02 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-quotes
Parameters:
url(required) — string — http(s) URL of the page to check (max 2,048 characters). Fetched once for all the quotes.quotes(required) — array — 1 to 20 quotes to look for on that page, or with match "passages" claims to find support for (each max 1,000 characters after normalisation). One price for the call however many.match— string — For every quote: exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict).threshold— number — Fuzzy similarity needed, default 0.9.case_sensitive— boolean — Default false; must be false with match "passages".
Hints: read-only no · destructive no · idempotent no · open-world yes
attestpage_verify_text_quoteChecks a quote word for word against text you hold: exact, fuzzy or none, offsets. US$0.005 per call; POST text, quote. Costs US$0.005 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-text-quote
Parameters:
text(required) — string — The source text you already hold, as sent (max 50,000 characters, and the whole request body is capped at 256 KB of UTF-8, so 50,000 characters of 4-byte text fit; no fetch, no normalising before hashing). Offsets count characters (code points).quote(required) — string — Text to look for in the source, or with match "passages" the claim to find support for (max 1,000 characters after normalisation).end— integer — Optional, with start: the declared end offset, raw code points, exclusive. Give both or neither; not with match "passages".match— string — exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages of the text that share most of its words, scored, as evidence for you to judge (not a verdict). Not with start and end.start— integer — Optional, with end: the declared start offset of the quote in text, raw code points, 0-based. Only that slice is matched (max 1,000 code points), so the answer is whether the text at these offsets says the quote. Declared offsets are raw; result offsets are into the normalised text. If the slice misses but the quote is elsewhere in the text, result.located gives its position in the whole text. On a slice miss where a number differs, the answer carries match_verdict changed_number and nearest, the closest span on the slice with its diff. nearest offsets count into the slice's normalised text, not the whole text.threshold— number — Fuzzy similarity needed, default 0.9.case_sensitive— boolean — Default false; must be false with match "passages".
Hints: read-only no · destructive no · idempotent no · open-world no
attestpage_access_checkJudges one page URL against its site's robots.txt for GPTBot, ClaudeBot, PerplexityBot, Google-Extended and CCBot: allowed or not, with the deciding line, the per-crawler reason and Crawl-delay; plus the site's Sitemap URLs, content_signal and llms_txt (whether /llms.txt is served). US$0.002 per call; POST url. Costs US$0.002 per call in USDC via x402 (Base), charged when the call answers below 400 (a no-match or not-found result is charged too); a bad request is refused unpaid. Pay by putting an x402 payment payload in _meta["x402/payment"]. Without one it returns the payment requirements. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/llms.txt
Parameters:
url(required) — string — The http(s) page URL to judge (max 2,048 characters). Only its site's /robots.txt and /llms.txt are read; the page is not fetched.
Hints: read-only no · destructive no · idempotent no · open-world yes
attestpage_verify_receiptread-onlyUse when you are handed a QuoteProof evidence receipt and need to check it before relying on it: verifies the compact JWS against this service's published keys and returns its payload, so a forged or altered receipt is caught. Free. Free. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/receipt-verify
Parameters:
receipt(required) — string — The compact JWS from the "receipt" field of a response.
Hints: read-only yes · destructive no · idempotent yes · open-world no
attestpage_preview_documentread-onlyUse before paying for POST /v1/verify/document: send the same body, and get back the quote and link pairs it would check, what was skipped and why, the number of parts and the exact price. Nothing is fetched, signed or charged. Free. Free. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-document
Parameters:
document(required) — string — The answer or report as written, 1 character to 60000 bytes (UTF-8), and the whole request body is capped at 256 KB. Its quotes and their links are found by fixed rules (extractor doc-v1).part— integer — 0-based part to check, default 0; call POST /v1/verify/document/preview first to see how many parts there are.match— string — For every pair: exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages that share most of its words, scored, as evidence for you to judge (not a verdict). With "passages", each sentence that carries a link is a claim.format— string — markdown (default), text (only bare URLs and [n] references are links) or html (<a href> links, <blockquote> and <q> quotes; other tags are dropped).min_words— integer — A quoted span with fewer words is skipped as too_short (default 4).part_size— integer — Pairs per part, default 10. A free trial call takes at most the size in extensions.trial.info.max_batch_items of the 402 offer.threshold— number — Fuzzy similarity needed, default 0.9.case_sensitive— boolean — Default false; must be false with match "passages".
Hints: read-only yes · destructive no · idempotent yes · open-world no
attestpage_preview_text_quoteread-onlySend the same body as POST /v1/verify/text-quote (start and end are ignored) and get back exact, fuzzy or none, the score and the occurrences. Free, 30 a day per IP address. The answer is not signed and has no offsets or receipt; the paid route returns those. Free. Docs: https://vehcdj664efetfrsolne5umanq.srv.us/docs/verify-text-quote
Parameters:
text(required) — string — The source text you already hold, as sent (max 50,000 characters, and the whole request body is capped at 256 KB of UTF-8, so 50,000 characters of 4-byte text fit; no fetch, no normalising before hashing). Offsets count characters (code points).quote(required) — string — Text to look for in the source, or with match "passages" the claim to find support for (max 1,000 characters after normalisation).end— integer — Optional, with start: the declared end offset, raw code points, exclusive. Give both or neither; not with match "passages".match— string — exact; fuzzy (default), which also accepts small differences; or passages, for a paraphrased claim: the 3 passages of the text that share most of its words, scored, as evidence for you to judge (not a verdict). Not with start and end.start— integer — Optional, with end: the declared start offset of the quote in text, raw code points, 0-based. Only that slice is matched (max 1,000 code points), so the answer is whether the text at these offsets says the quote. Declared offsets are raw; result offsets are into the normalised text. If the slice misses but the quote is elsewhere in the text, result.located gives its position in the whole text. On a slice miss where a number differs, the answer carries match_verdict changed_number and nearest, the closest span on the slice with its diff. nearest offsets count into the slice's normalised text, not the whole text.threshold— number — Fuzzy similarity needed, default 0.9.case_sensitive— boolean — Default false; must be false with match "passages".
Hints: read-only yes · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.