AttestPage (Quoteproof)
REMOTE · VEHCDJ664EFETFRSOLNE5UMANQ.SRV.US
Use before citing a page, sharing links or installing a suggested package. Signed receipts.
Available components
Last scanned (21 hours ago)
Scores higher than 8% of remote servers
Reachable. Last reached 4 Nov 2026.
Category Search and Retrieval
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security57
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not yet verified: we couldn't confirm whether this endpoint requires it. View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability0
- Transport check failed: declared streamable-http, but the endpoint returned HTTP 503. See how to fix → View diagnostics → Fail
Schema Quality & AI Usability0
- Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.Unverified
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
- Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.Unverified
Tool Safety0
- Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.Unverified
Capabilities0
- Capabilities not yet verified: we couldn't read the endpoint's capabilities.Unverified
Unverified: 5 categories
Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 27 Oct 26 −53
- Endpoint reachability: reachable → not serving MCP ▼ security
- Stability: 0.47 → unverified ▼ security
- Authorization: partial → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Transport: pass → fail ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- First check of Schema quality: unverified functional
- 26 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 24 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Oct 26 +1
- Tool “attestpage_verify_receipt” rewrote its description, which is the text the model reads security
- New tool “attestpage_scan_reply” functional
- 20 Oct 26 0
- Tool “attestpage_access_check” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_citations” rewrote its description, which is the text the model reads security
- “attestpage_preview_text_quote” reworded the description of “start” cosmetic
- “attestpage_verify_quote” reworded the description of “url” cosmetic
- “attestpage_verify_text_quote” reworded the description of “start” cosmetic
- Tool “attestpage_access_check” changed its title: Judge one page URL against its site's robots.txt for each AI crawler → Judge one page URL against its site's robots.txt for each AI crawler: allowed, the deciding line, reason and crawl_delay; plus sitemaps, content_signal and llms_txt cosmetic
- 19 Oct 26 +1
- Tool “attestpage_access_check” rewrote its description, which is the text the model reads security
- Tool “attestpage_preview_text_quote” rewrote its description, which is the text the model reads security
- Tool “attestpage_recheck” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_document” rewrote its description, which is the text the model reads security
- “attestpage_access_check” reworded the description of “url” cosmetic
- “attestpage_check_packages” reworded the description of “packages” cosmetic
- “attestpage_fetch” reworded the description of “return_text” cosmetic
- “attestpage_preview_document” reworded the description of “document” cosmetic
- “attestpage_preview_text_quote” reworded the description of “text” cosmetic
- “attestpage_verify_document” reworded the description of “document” cosmetic
- “attestpage_verify_text_quote” reworded the description of “text” cosmetic
- Tool “attestpage_check_packages” changed its title: Check whether up to 10 package names exist on npm, PyPI or crates.io, with known OSV.dev advisories → Check whether up to 10 package names exist on npm, PyPI or crates, with known OSV.dev advisories cosmetic
- 18 Oct 26 −1
- Tool “attestpage_attest” rewrote its description, which is the text the model reads security
- Tool “attestpage_check_links” rewrote its description, which is the text the model reads security
- Tool “attestpage_check_packages” rewrote its description, which is the text the model reads security
- Tool “attestpage_fetch” rewrote its description, which is the text the model reads security
- Tool “attestpage_recheck” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_citations” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_document” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_quote” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_quotes” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_text_quote” rewrote its description, which is the text the model reads security
- Schema quality: 374 → 303 ▲ functional
- Destructive annotations: pass → 0 functional
- New tool “attestpage_access_check” functional
- New tool “attestpage_preview_text_quote” functional
- “attestpage_preview_document” reworded the description of “part_size” cosmetic
- “attestpage_verify_document” reworded the description of “part_size” cosmetic
- 17 Oct 26 0
- Tool “attestpage_attest” rewrote its description, which is the text the model reads security
- Tool “attestpage_check_links” rewrote its description, which is the text the model reads security
- Tool “attestpage_check_packages” rewrote its description, which is the text the model reads security
- Tool “attestpage_fetch” rewrote its description, which is the text the model reads security
- Tool “attestpage_recheck” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_citations” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_document” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_quote” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_quotes” rewrote its description, which is the text the model reads security
- Tool “attestpage_verify_text_quote” rewrote its description, which is the text the model reads security
- “attestpage_verify_text_quote” reworded the description of “start” cosmetic
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Probed https://vehcdj664efetfrsolne5umanq.srv.us/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=srv.us | CN=YR1,O=Let's Encrypt,C=US | 6 Oct 2026 | 4 Jan 2027 | RSA 2048 | SHA256-RSA | 69555d97984e19493cfbf22ef13ff51324a |
| SANs: *.gh.srv.us, *.gl.srv.us, *.srv.us, srv.us | ||||||
| CN=YR1,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | a20253f15f2691c05dc1ce13b9bcca4e |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of vehcdj664efetfrsolne5umanq.srv.us. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| us. | present | 59017 | 8 | Verified |
| srv.us. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Inconclusive
We could not reach the endpoint well enough to judge its authorisation posture.
| Result | Inconclusive |
|---|---|
| HTTP status | 503 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://vehcdj664efetfrsolne5umanq.srv.us/mcp | HTTP error | 503 | |
| http (plaintext) | http://vehcdj664efetfrsolne5umanq.srv.us/mcp | HTTPS enforced | 301 | https://vehcdj664efetfrsolne5umanq.srv.us/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
attestpage_access_check Judge one page URL against its site's robots.txt for each AI crawler: allowed, the deciding line, reason and crawl_delay; plus sitemaps, content_signal and llms_txt ~223
Judges 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
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| content_signal | object|null | yes | The Content-Signal line of the robots.txt (contentsignals.org): { search, ai_input, ai_train }, each yes, no or null when the file does not name that signal. Read file-wide, first value per signal wi… |
| crawlers | array | yes | One verdict per crawler: crawler, allowed, user_agent (the lowercase User-agent token used, * when only the wildcard group applies, null when no group applies), deciding_line ({ line, text } of the w… |
| llms_txt | object | yes | The site's /llms.txt: url, http_status (null when it could not be read) and served (true for a 2xx). Reported only: a missing or unreadable /llms.txt never refuses the call or changes a crawler verdi… |
| network | string|null | – | The payment network (CAIP-2 id); null on trial calls. |
| rail | string|null | – | The payment rail (x402); null on trial calls. |
| robots | object | yes | The robots.txt that was read: url, http_status, served (true for a 2xx) and truncated (true when the file was longer than the 500 KB this check parses, so only its start was judged). A robots.txt tha… |
| sitemaps | array | yes | The absolute http(s) URLs of the Sitemap lines in the robots.txt, in file order, without repeats (at most 100). Empty when the file is not served (2xx) or declares none. |
| tier | string | – | paid or trial. |
| url | string | yes | – |
{"url":"https://www.iana.org/help/example-domains"} attestpage_attest Sign a timestamped receipt over a SHA-256 hash ~236
Signs 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
| Name | Type | Req | Description |
|---|---|---|---|
| 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 paym… |
| note | string | – | Optional note; only its SHA-256 goes in the receipt. |
| sha256 | string | yes | SHA-256 (hex) of the thing being attested. |
| Name | Type | Req | Description |
|---|---|---|---|
| attestation | object | yes | – |
| receipt | string | yes | – |
| tier | string | – | – |
{"note":"example note: replace me","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"} attestpage_check_links Check up to 10 links in one call: a link verdict (ok, broken, moved, unknown) per URL, optional expected_text ~182
Checks 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
| Name | Type | Req | Description |
|---|---|---|---|
| urls | array | yes | 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| receipt | string | yes | – |
| results | array | yes | One entry per URL, each with a link verdict (ok, broken, moved or unknown; per URL, signed into the receipt), server_ip, tls and headers (network evidence also signed into the receipt; null on an edg… |
| tier | string | – | – |
{"urls":["https://www.iana.org/help/example-domains","https://www.iana.org/domains/reserved"]} attestpage_check_packages Check whether up to 10 package names exist on npm, PyPI or crates, with known OSV.dev advisories ~174
Checks 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
| Name | Type | Req | Description |
|---|---|---|---|
| packages | array | yes | 1 to 10 packages to look up. Each is { ecosystem, name, version? }; ecosystem is npm, pypi or crates. |
| Name | Type | Req | Description |
|---|---|---|---|
| note | string | yes | – |
| receipt | string | yes | – |
| results | array | yes | – |
| tier | string | – | – |
{"packages":[{"ecosystem":"npm","name":"left-pad"},{"ecosystem":"pypi","name":"requests"},{"ecosystem":"crates","name":"serde"}]} attestpage_fetch Fetch a page, or up to 10 in one call, each with a verdict, injection flags and a signed receipt ~243
Returns 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
| Name | Type | Req | Description |
|---|---|---|---|
| return_text | boolean | – | Return up to 20,000 characters of clean text (per page). Default true; send false to leave the text out. |
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| advice | string | – | – |
| injection_flags | array | – | – |
| injection_severity | array | – | One { flag, severity } per injection flag; severity is high, medium or low. |
| injection_verdict | string | – | From injection_flags: block if any high-severity flag, caution if any other flag, pass if none of our patterns matched. Flag list: /docs/detection. |
| page | object | – | Page verdict and evidence, including server_ip, tls and headers (the network evidence also signed into the receipt; null on an edge server); on a PDF also pdf { page_count, pages_read, truncated }. |
| receipt | string | – | – |
| results | array | – | With urls only (then page, text and receipt are inside each entry): one entry per URL in order, { url, page, text, text_chars, text_truncated, injection_flags, injection_verdict, injection_severity,… |
| text | string|null | – | – |
| tier | string | – | – |
{"return_text":true,"urls":["https://www.iana.org/help/example-domains"]} attestpage_preview_document Preview a document check ~395
Use 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
| Name | Type | Req | Description |
|---|---|---|---|
| case_sensitive | boolean | – | Default false; must be false with match "passages". |
| document | string | yes | 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). |
| 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). |
| 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 (… |
| min_words | integer | – | A quoted span with fewer words is skipped as too_short (default 4). |
| part | integer | – | 0-based part to check, default 0; call POST /v1/verify/document/preview first to see how many parts there are. |
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| document_sha256 | string | yes | SHA-256 of the document as sent (UTF-8); the paid route signs the same value. |
| extractor | string | yes | The fixed extraction rules used (doc-v1). |
| hint | string | – | Only when pairs_total is 0: how to write the links so they pair with their quotes. |
| limit_reached | boolean | – | – |
| pairs | array | yes | Each pair: pair, part, quote, url, doc_start/doc_end (code points in the document); doc_spans when the pair appears more than once (the first 20), with doc_spans_truncated counting the rest. |
| pairs_total | integer | yes | – |
| part_size | integer | – | – |
| parts | integer | yes | Paid calls needed to check every pair (part 0 to parts - 1). |
| price | object | yes | – |
| skipped | array | yes | Each skipped item with its reason: no_url, bad_url, blocked_target (a local or private host), too_short, too_long or beyond_limit. The first 100 only. |
| skipped_counts | object | – | Every skipped item counted by reason. |
| skipped_truncated | integer | – | Skipped items left out of skipped. |
| units | string | – | Says what the price units mean: usd is US dollars; sats is satoshis (1 sat = 1e-8 BTC). |
{"document":"WHO says \"Air pollution kills an estimated seven million people every year\" ([WHO](https://www.who.int/health-topics/air-pollution)).\n\n\u003e These domains may be used as illustrative examples in documents\n\u003e — [IANA](https://www.iana.org/help/example-domains)","format":"markdown","match":"fuzzy","part":0} attestpage_preview_text_quote Preview a text quote check ~483
Send 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
| Name | Type | Req | Description |
|---|---|---|---|
| case_sensitive | boolean | – | Default false; must be false with match "passages". |
| 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… |
| quote | string | yes | Text to look for in the source, or with match "passages" the claim to find support for (max 1,000 characters after normalisation). |
| 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 sa… |
| text | string | yes | 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 has… |
| threshold | number | – | Fuzzy similarity needed, default 0.9. |
| Name | Type | Req | Description |
|---|---|---|---|
| advice | string | – | – |
| page_note | string | – | – |
| paid_route | object | – | Path and price of the signed call. |
| result | object | yes | – |
| signed | boolean | yes | Always false. |
{"case_sensitive":false,"match":"fuzzy","quote":"refunds are paid within 14 days","text":"Refunds are paid within 14 days of purchase, to the card that was used."} attestpage_recheck Re-check a page against an earlier receipt: unchanged, changed, gone or unreadable ~466
Reports 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
| Name | Type | Req | Description |
|---|---|---|---|
| content_sha256 | string | – | Only with url: the page.content_sha256 from our own fetch (64 hex). Other tools hash other text. |
| 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. |
| 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.verdi… |
| 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 li… |
| 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. |
| url | string | – | Only without receipt: the http(s) URL to re-check (max 2,048 characters). |
| Name | Type | Req | Description |
|---|---|---|---|
| advice | string | – | – |
| baseline | object | yes | The baseline compared against; receipt_sha256 links a chain of recheck receipts. |
| change | string | yes | – |
| changed | boolean|null | yes | – |
| differences | array | yes | – |
| elapsed_seconds | integer|null | – | – |
| injection_flags | array | – | – |
| page | object | yes | The new fetch, as /v1/fetch gives it. |
| receipt | string | yes | – |
| text | string|null | – | – |
| tier | string | – | – |
| timeline | array|null | – | Only with history: each history receipt, then this check; changed compares clean-text hashes with the entry before. |
{"content_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","return_text":false,"url":"https://www.iana.org/help/example-domains"} attestpage_scan_reply Scan a bot's draft reply before it is sent: pass, caution or block, with findings on links, hosts, injection phrases and unsupported prices ~290
Scans 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
| Name | Type | Req | Description |
|---|---|---|---|
| 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… |
| 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. |
| text | string | yes | The draft reply your bot is about to send (1 to 10,000 characters). Plain text, Markdown or HTML. |
| Name | Type | Req | Description |
|---|---|---|---|
| advice | string | – | – |
| checks | object | – | Which checks ran: urls_against_allowlist and numbers_against_source are false when their inputs were not sent. |
| counts | object | – | – |
| findings | array | yes | One per problem: type, severity (high, medium, low), detail, and url/host, flag or match where it applies. |
| receipt | string | yes | – |
| tier | string | – | – |
| urls | array | – | Every link found in the reply: url, host, allowed (true/false, or null when neither allowed_urls nor source_text was sent). |
| verdict | string | yes | block: at least one high finding; caution: only medium or low ones; pass: none of the checks matched (not proof the reply is harmless). |
{"allowed_urls":["https://shop.example.net"],"source_text":"Refund approved: $25, back to the original card in 5 to 7 days. Order page: https://shop.example.net/orders","text":"Your refund of $25 is on its way. Track it at https://shop.example.net/orders or confirm your card at https://shop-example.net.verify-account.io/login."} attestpage_verify_citations Verify up to 10 quote and URL citations in one call ~270
Checks 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
| Name | Type | Req | Description |
|---|---|---|---|
| case_sensitive | boolean | – | Default false; must be false with match "passages". |
| citations | array | yes | 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 jud… |
| threshold | number | – | Fuzzy similarity needed, default 0.9. |
| Name | Type | Req | Description |
|---|---|---|---|
| pages | array | yes | One entry per distinct URL: page verdict and evidence, including server_ip, tls and headers (also signed into the receipt). A page with a DOI also has crossref: { doi, doi_source, status (found, not_… |
| receipt | string | yes | – |
| results | array | yes | One entry per citation, in request order: the match verdict (with match "passages": passages [{ start, end, score, text, missing, flags }] and scorer), or error (match_too_costly) for that citation a… |
| summary | object | – | Counts of exact, fuzzy, none (and passages) verdicts, failed citations, retracted: citations whose page DOI Crossref marks retracted, and doi_unchecked: citations whose page DOI lookup was skipped (b… |
| tier | string | – | – |
{"citations":[{"quote":"These domains may be used as illustrative examples in documents","url":"https://www.iana.org/help/example-domains"},{"quote":"IANA-managed Reserved Domains","url":"https://www.iana.org/domains/reserved"}],"match":"fuzzy"} attestpage_verify_document Check the quotes and links in a whole document, 10 per part ~442
Checks 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
| Name | Type | Req | Description |
|---|---|---|---|
| case_sensitive | boolean | – | Default false; must be false with match "passages". |
| document | string | yes | 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). |
| 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). |
| 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 (… |
| min_words | integer | – | A quoted span with fewer words is skipped as too_short (default 4). |
| part | integer | – | 0-based part to check, default 0; call POST /v1/verify/document/preview first to see how many parts there are. |
| 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| document_sha256 | string | yes | SHA-256 of the document as sent (UTF-8); the same on every part. |
| extractor | string | yes | – |
| pages | array | yes | One entry per distinct URL, as verify/citations. |
| pairs_total | integer | – | – |
| part | integer | yes | – |
| parts | integer | yes | – |
| receipt | string | yes | – |
| results | array | yes | One entry per pair of this part: pair, quote, url, doc_start/doc_end (code points in the document; doc_spans when the pair appears more than once, the first 20, with doc_spans_truncated counting the… |
| skipped | array | yes | Each skipped item with its reason: no_url, bad_url, blocked_target (a local or private host), too_short, too_long or beyond_limit. The first 100 only. |
| skipped_counts | object | – | Every skipped item counted by reason. |
| skipped_truncated | integer | – | Skipped items left out of skipped. |
| summary | object | – | – |
| tier | string | – | – |
{"document":"WHO says \"Air pollution kills an estimated seven million people every year\" ([WHO](https://www.who.int/health-topics/air-pollution)).\n\n\u003e These domains may be used as illustrative examples in documents\n\u003e — [IANA](https://www.iana.org/help/example-domains)","format":"markdown","match":"fuzzy","part":0} attestpage_verify_quote Verify that a quote appears on a web page ~296
Checks 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
| Name | Type | Req | Description |
|---|---|---|---|
| case_sensitive | boolean | – | Default false; must be false with match "passages". |
| 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). |
| quote | string | yes | Text to look for on the page, or with match "passages" the claim to find support for (max 1,000 characters after normalisation). |
| threshold | number | – | Fuzzy similarity needed, default 0.9. |
| url | string | yes | http(s) URL of the page to check (max 2,048 characters). The whole request body is capped at 64 KB. |
| Name | Type | Req | Description |
|---|---|---|---|
| advice | string | – | – |
| injection_flags | array | – | – |
| page | object | yes | Page verdict and evidence, including server_ip, tls and headers (the network evidence also signed into the receipt; null on an edge server). |
| receipt | string | yes | – |
| result | object | yes | match, score, start, end, context, occurrences, normalised_sha256; on a none, nearest (the closest span: start, end, text, score, diff; charged like any answer); with match "passages" also passages [… |
| tier | string | – | – |
{"case_sensitive":false,"match":"fuzzy","quote":"These domains may be used as illustrative examples in documents","url":"https://www.iana.org/help/example-domains"} attestpage_verify_quotes Verify up to 20 quotes on one web page in one call ~311
Checks 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
| Name | Type | Req | Description |
|---|---|---|---|
| case_sensitive | boolean | – | Default false; must be false with match "passages". |
| 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… |
| quotes | array | yes | 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. |
| threshold | number | – | Fuzzy similarity needed, default 0.9. |
| url | string | yes | http(s) URL of the page to check (max 2,048 characters). Fetched once for all the quotes. |
| Name | Type | Req | Description |
|---|---|---|---|
| advice | string | – | – |
| injection_flags | array | – | – |
| page | object | yes | Page verdict and evidence, including server_ip, tls and headers (the network evidence also signed into the receipt). |
| receipt | string | yes | – |
| results | array | yes | One entry per quote, in request order, each the verify/quote result: match, score, start, end, context, occurrences, normalised_sha256; with match "passages" also passages [{ start, end, score, text,… |
| summary | object | – | Counts of exact, fuzzy, none (and passages) verdicts and failed quotes. |
| tier | string | – | – |
{"match":"fuzzy","quotes":["These domains may be used as illustrative examples in documents","without prior coordination with us"],"url":"https://www.iana.org/help/example-domains"} attestpage_verify_receipt Verify an evidence receipt ~105
Use 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
| Name | Type | Req | Description |
|---|---|---|---|
| receipt | string | yes | The compact JWS from the "receipt" field of a response. |
| Name | Type | Req | Description |
|---|---|---|---|
| kid | string|null | – | Key id from the JWS header. |
| message | string | – | Plain-language failure reason, only when valid is false. |
| payload | object|null | – | The decoded receipt payload. |
| reason | string | – | Machine-readable failure reason, only when valid is false. |
| tier | string|null | – | paid, trial or sample. |
| valid | boolean | yes | True when the signature verifies with one of our keys and the payload matches schema v1. |
{"receipt":"eyJhbGciOiJFZERTQSIs…"} attestpage_verify_text_quote Verify a quote against text you already hold, with no fetch ~517
Checks 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
| Name | Type | Req | Description |
|---|---|---|---|
| case_sensitive | boolean | – | Default false; must be false with match "passages". |
| 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… |
| quote | string | yes | Text to look for in the source, or with match "passages" the claim to find support for (max 1,000 characters after normalisation). |
| 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 sa… |
| text | string | yes | 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 has… |
| threshold | number | – | Fuzzy similarity needed, default 0.9. |
| Name | Type | Req | Description |
|---|---|---|---|
| advice | string | – | – |
| injection_flags | array | – | Prompt-injection signals found in the supplied text. |
| receipt | string | yes | – |
| result | object | yes | match, score, occurrences; in search mode start, end (into the normalised text), context and normalised_sha256; with start and end, declared { start, end, slice_sha256, slice_matches } (raw offsets)… |
| tier | string | – | – |
{"case_sensitive":false,"match":"fuzzy","quote":"refunds are paid within 14 days","text":"Refunds are paid within 14 days of purchase, to the card that was used."} How do I install the AttestPage (Quoteproof) MCP server?
AttestPage (Quoteproof) is a hosted endpoint at https://vehcdj664efetfrsolne5umanq.srv.us/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · vehcdj664efetfrsolne5umanq.srv.us
claude mcp add --transport http us-srv-vehcdj664efetfrsolne5umanq-quoteproof-mcp 'https://vehcdj664efetfrsolne5umanq.srv.us/mcp'
What is the AttestPage (Quoteproof) MCP server?
AttestPage (Quoteproof) is an MCP server listed in the public MCP registry as us.srv.vehcdj664efetfrsolne5umanq/quoteproof-mcp. Use before citing a page, sharing links or installing a suggested package. Signed receipts. This page covers its hosted endpoint (https://vehcdj664efetfrsolne5umanq.srv.us/mcp).
Is the AttestPage (Quoteproof) MCP server safe to use?
AttestPage (Quoteproof) scores 23 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the AttestPage (Quoteproof) MCP server expose?
AttestPage (Quoteproof) exposes 15 tools: attestpage_verify_quote, attestpage_verify_citations, attestpage_fetch, attestpage_recheck, attestpage_check_links, and 10 more. Their descriptions and schemas cost roughly 4,633 tokens of context every time the server is loaded.
Does the AttestPage (Quoteproof) MCP server require authentication?
Its publisher declares no required credentials for AttestPage (Quoteproof). We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.
Is the AttestPage (Quoteproof) MCP server still maintained?
AttestPage (Quoteproof) is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.