Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Stipple — Document Verification & Extraction

REMOTE · WWW.STIPPLE.SH · SCANNED SEP 25

Document forensics: tamper/AI checks, fields, tables, identity, screening, tenders, citations.

Available components

+2 this week 75 Trust /100
Trust breakdown (7 categories)

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
Transport & Reachability100
Schema Quality & AI Usability72
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6270 tokens (~391/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (94% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 16 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 17 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Stipple — Document Verification & Extraction MCP server?

Stipple — Document Verification & Extraction is a hosted endpoint at https://www.stipple.sh/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 · www.stipple.sh

# add to Claude Code
claude mcp add --transport http sh-stipple-openwarrant 'https://www.stipple.sh/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "sh-stipple-openwarrant": {
      "url": "https://www.stipple.sh/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "sh-stipple-openwarrant": {
      "type": "http",
      "url": "https://www.stipple.sh/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.sh-stipple-openwarrant]
url = "https://www.stipple.sh/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sh-stipple-openwarrant": {
      "type": "remote",
      "url": "https://www.stipple.sh/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add sh-stipple-openwarrant --url 'https://www.stipple.sh/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  sh-stipple-openwarrant:
    url: "https://www.stipple.sh/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "sh-stipple-openwarrant": {
      "Transport": "http",
      "Url": "https://www.stipple.sh/mcp"
    }
  }
}
# add to Vellum
assistant mcp add sh-stipple-openwarrant -t streamable-http -u 'https://www.stipple.sh/mcp'
// mcp.json
{
  "mcpServers": {
    "sh-stipple-openwarrant": {
      "type": "http",
      "url": "https://www.stipple.sh/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

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.

  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 21 Sept 26 +2
    • Stability: fail → pass ▲ security
  • 15 Sept 26 0
    • Tool “find_tenders” rewrote its description, which is the text the model reads security
    • Tool “match_tenders” rewrote its description, which is the text the model reads security
    • Schema quality: 5636 → 6270 ▼ functional
    • New tool “buyer_awards” functional
    • New tool “find_signals” functional
  • 11 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
  • 10 Sept 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “check_document” rewrote its description, which is the text the model reads security
    • Tool “check_pack” rewrote its description, which is the text the model reads security
    • Tool “check_source_overlap” rewrote its description, which is the text the model reads security
    • Tool “detect_ai_text” rewrote its description, which is the text the model reads security
    • Tool “extract_fields” rewrote its description, which is the text the model reads security
    • Tool “find_tenders” rewrote its description, which is the text the model reads security
    • Tool “get_warrant” rewrote its description, which is the text the model reads security
    • Tool “match_tenders” rewrote its description, which is the text the model reads security
    • Tool “screen_adverse_media” rewrote its description, which is the text the model reads security
    • Tool “submit_feedback” rewrote its description, which is the text the model reads security
    • Tool “tender_sources” rewrote its description, which is the text the model reads security
    • Tool “verify_document” rewrote its description, which is the text the model reads security
    • Tool “verify_identity” rewrote its description, which is the text the model reads security
    • Tool “verify_references” rewrote its description, which is the text the model reads security
    • Schema quality: good → excellent functional
    • Tool “find_tenders” changed its title: Search AU/NZ government tenders → Search AU/NZ tenders cosmetic
  • 7 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
  • 4 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “screen_adverse_media” rewrote its description, which is the text the model reads security
  • 2 Sept 26 0
    • Tool “find_tenders” rewrote its description, which is the text the model reads security
    • “find_tenders” added an optional parameter “first_seen_after” cosmetic
Diagnostics

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 25 Sept 2026 · Probed https://www.stipple.sh/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=www.stipple.sh CN=WR3,O=Google Trust Services,C=US 17 Sept 2026 16 Dec 2026 RSA 2048 SHA256-RSA 71d7bab9e173bbd1067733485f73929
SANs: www.stipple.sh
CN=WR3,O=Google Trust Services,C=US (CA) CN=GTS Root R1,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 RSA 2048 SHA256-RSA 7ff005a91568d63abc22861684aa4b5a
CN=GTS Root R1,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 19 Jun 2020 28 Jan 2028 RSA 4096 SHA256-RSA 77bd0d6cdb36f91aea210fc4f058d30d

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of www.stipple.sh. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
sh. present 55297 8 Verified
stipple.sh. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://www.stipple.sh/mcp Verified 200
http (plaintext) http://www.stipple.sh/mcp HTTPS enforced
MCP tools · 16 exposed · ~5,957 tokens

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 →

Tool Tokens
buyer_awards ~289

What a buyer has awarded, what is ending, and what they plan. FREE. USE THIS WHEN someone asks about a specific buyer before a bid: "who holds Transport for NSW's work", "what is ending soon at Queensland Health", "what does this agency usually pay". Give `buyer` (the organisation name as published) or `buyer_key` (from a tender's buyer, or a previous answer). Returns `{buyer, expiring[], planned[], recent_awards[], top_suppliers[], open_tenders[], computed_at, sources}`: the nightly rollup (awards in the window, value quartiles as published, median response window), contracts ending within 12 months with the incumbent, planned procurements with their quarter and spend band, the suppliers who win from them (name and share), and open tenders under the same name. ANONYMOUS CALLERS SEE COUNTS, VALUES, DATES AND BUYERS; supplier and incumbent names are withheld and `withheld_reason` says so. Relay that sentence as it is. Values are the published amount and currency, never converted; `computed_at` is the night the figures are true for - say it. Coverage is Australia and New Zealand sources named in `sources`, each with the attribution its licence requires.

NameTypeReqDescription
buyer–––
buyer_key–––

Structured output declared, but exposes no named fields.

No examples provided.

check_document ~67

Cheap cache-check: has this exact document already been inspected? Hash the file yourself (sha256, lowercase hex) and call this before verify_document to skip a redundant (paid) inspection. Returns {cached, warrant_id, permalink}.

NameTypeReqDescription
sha256stringyes–

Structured output declared, but exposes no named fields.

No examples provided.

check_pack ~341

Check whether a SET of documents satisfies a checklist — completeness, cheaply. USE THIS WHEN you have an application / onboarding pack and need "do we have the required documents, and what's still missing?" Each document is CLASSIFIED (one cheap page-1 read — never full field extraction or multi-page), then matched against the checklist's required slots. (For "is a document genuine?" use verify_document; to identify ONE document use extract_fields with options={"classify": true}; for the identity gate use verify_identity.) Define the checklist ONE of two ways: - `scheme`: a named preset — "income_proof", "lending_prequal", "rental_application". - `requirements`: an ad-hoc checklist — a list of document-type names like ["payslip","bank_statement"], or objects {"key":..., "accepts":[types], "optional":bool}. `documents` is a list (up to 12), each ONE of: {"url": "https://..."} (public link, fetched server-side) or {"bytes_b64": "...", "filename": "statement.pdf"} (inline). Returns `{complete, slots[] (key, satisfied, matched), missing[], documents[] (filename, classified_type), unmatched_documents[]}`. COVERAGE, not approval — that the right document TYPES are present, NOT that any is genuine (run verify_document) or that an application is approved. Documents are never stored.

NameTypeReqDescription
documentsarrayyes–
requirements–––
scheme–––

Structured output declared, but exposes no named fields.

No examples provided.

check_source_overlap ~329

Check whether text OVERLAPS text published on the public web — a plagiarism-style check: does this text appear elsewhere? was this copied? find the source of this text. Provide the document ONE way: `text` (pasted prose), `url` (a public http(s) link — fetched server-side; that page and its host are excluded from matches), OR `bytes_b64` (a base64 PDF/.docx/text file, plus `filename` for routing). Returns two evidence tiers, never mixed: `matches` are EXACT/near-verbatim overlaps confirmed against the fetched source page — each carries the quoted text from both sides, the source URL, and char spans for highlighting. `possible_paraphrases` are model JUDGEMENTS (reworded overlap), clearly labelled, never quotes, and alone they cap the overlap band at "low". `overlap_band` summarises: none | low | notable | high. HONEST SCOPE: this searches the PUBLIC WEB within capped queries — it is not an academic-database check, absence of matches is never an originality certificate, and overlap says nothing about who published first or intent. Plagiarism is a judgement this tool never makes. English-language prose only; non-prose and unsupported languages abstain (`applicable: false`). Free within the weekly cap.

NameTypeReqDescription
bytes_b64–––
filenamestring––
text–––
url–––

Structured output declared, but exposes no named fields.

No examples provided.

detect_ai_text ~304

Estimate the PROBABILITY that a document's text was AI-GENERATED (LLM-written prose). USE THIS WHEN someone shares prose — an essay, cover letter, article, review, application, or report (or a link to one) — and asks: did an AI / ChatGPT write this? is this human-written? detect AI text. Provide the document ONE way: `text` (pasted markdown/plain prose), `url` (a public http(s) link to a page or PDF — fetched server-side, the cheapest call), OR `bytes_b64` (a base64 PDF/file, plus `filename` for routing). Returns `{probability, lean, tells, reasoning, applicable}`. HONEST SCOPE: the probability is the model's CONFIDENCE, not a calibrated truth — it can false-flag templated/coached or non-native-English writing. It works on PROSE only: for a form/table/numeric document (payslip, statement) it returns `applicable: false` and abstains, because AI-text detection false-positives badly there — use `verify_document` (the authenticity engine) for those, and `verify_references` to check a doc's citations/claims.

NameTypeReqDescription
bytes_b64–––
filenamestring––
text–––
url–––

Structured output declared, but exposes no named fields.

No examples provided.

extract_fields ~1,706

Extract structured FIELDS from a document (PDF or image) with a vision model. USE THIS WHEN you need specific values OUT of a document — a payslip's gross/net, an invoice's total/ABN, a form's checkboxes, a table's cells — rather than a yes/no about the document. (For "is this genuine?" use verify_document; "what kind of document is this?" is `options={"classify": true}` right here.) Say WHAT to pull, four ways: - `fields`: an ad-hoc list — names like ["gross_pay","abn"], or objects {"name":..., "type":"text|amount|date|boolean", "description":...}. THE general case: ask for exactly the fields your task needs. Use type "boolean" for a checkbox/tickbox. `"question"` works instead of `"description"` if you would rather just ask: {"name":"customer_name", "question":"What is the customer name?"}. - `template`: a named preset — "payslip", "tax_invoice", "bank_statement", "receipt". - NEITHER: AUTO — the document is classified and that type's fields are used. - auto on an unrecognised type: schema-free — every labelled field is returned. Provide the document ONE way: `url` (a public http(s) link — fetched server-side, the cheapest call) OR `bytes_b64` (inline base64, plus `filename` for PDF-vs-image routing). `country` is an optional hint; `max_pages` caps how many pages are read (default a few; hard ceiling 10). `options` turns on extra capabilities. Every one defaults OFF, and asking for one that this server does not support is an ERROR naming it — never a silent no-op, so you can always tell "asked wrongly" from "nothing found". Available today: - `{"grounding": true}` — every value gains `bbox` (the rectangle it was read from, in PDF points, origin top-left) and `text_layer_match`. Use it to CITE a value back to the page. Born-digital PDFs only for now; a scan returns `bbox: null` and `grounding: "none"`. - `{"flag_below": 0.7}` — adds `…

NameTypeReqDescription
bytes_b64–––
country–––
fields–––
filenamestring––
max_pages–––
options–––
render_scale–––
template–––
url–––

Structured output declared, but exposes no named fields.

No examples provided.

find_signals ~325

Signals: what may be tendered before it is. FREE. USE THIS WHEN someone asks what is coming: "which contracts in Queensland end in the next six months", "what is planned for ICT next quarter", "what is expiring for this buyer". `kind` is one of contract_expiry (a contract ending, with its incumbent), planned_procurement (a buyer's stated plan with its quarter and spend band as published) or recurring_tender (derived from our own history, labelled `derived`). `jurisdiction` is one of AU, NZ, AU-NSW, AU-VIC, AU-QLD, AU-WA, AU-SA, AU-TAS, AU-ACT, AU-NT. `window_before` is an ISO date: signals whose window starts on or before it. `q` searches the subject, buyer and incumbent. Returns `{total, results[], computed_at, sources}`. Each signal carries `confidence` (`published` or `derived` - a vocabulary, not a score), its window (never invented: an expiry's window IS the contract's end date; a planned row with no parseable quarter has none), `evidence_ref` and `evidence_url`. ANONYMOUS CALLERS SEE EVERYTHING BUT THE INCUMBENT'S NAME; `withheld_reason` says so - relay it as it is.

NameTypeReqDescription
buyer–––
jurisdiction–––
kind–––
limitinteger––
q–––
window_before–––

Structured output declared, but exposes no named fields.

No examples provided.

find_tenders ~411

Search open tenders across Australia and New Zealand. FREE, within the weekly cap. USE THIS WHEN someone asks what public-sector work is open: "any council drainage tenders in Victoria", "what's closing this month in NSW", "show me federal IT opportunities". For "which of these could MY company actually bid for", use match_tenders instead — that reads their website and ranks against it. `jurisdiction` is one of AU, NZ, AU-NSW, AU-VIC, AU-QLD, AU-WA, AU-SA, AU-TAS, AU-ACT, AU-NT. `tier` is federal, national, state, council, university or health. `closing_before` is an ISO date. `first_seen_after` (ISO-8601 instant, strictly newer) answers "what is new since my last look" — first_seen is when WE first saw the tender, the honest clock for newness. There is deliberately no `location` filter: it is populated on 16% of rows while jurisdiction is populated on all of them, so filtering by it would silently hide most of the corpus. Returns `{total, results[], coverage}`. Each result carries title, buyer, jurisdiction, closing_date, categories, a summary, a link, and source_id/source_tag/source_name/ source_url/source_refresh — plus `link_is_listing` when the portal publishes no per-tender URL and the link goes to the list it appeared on. `coverage` names which sources were searched and which returned nothing. Quote it if the result is empty: "no match in what we searched" is true, "there are none" is not.

NameTypeReqDescription
category–––
closing_before–––
first_seen_after–––
include_closedboolean––
jurisdiction–––
limitinteger––
q–––
source–––
tier–––

Structured output declared, but exposes no named fields.

No examples provided.

get_warrant ~131

Retrieve a stored warrant by id (e.g. 'warrant_<hex>') — the full bundle as JSON, or a human-readable Markdown report when as_markdown=True. USE THIS WHEN you have a warrant_id from an earlier verify_document / check_document call and need the FULL evidence — every signal that fired, per-page findings, provenance — rather than the summary the original call returned. Use as_markdown=True to get a report you can show a human verbatim.

NameTypeReqDescription
as_markdownboolean––
warrant_idstringyes–

No output schema declared.

No examples provided.

match_tenders ~360

Rank open tenders against what a company actually does. Free, inside the weekly cap. USE THIS WHEN someone asks which opportunities suit a specific business: "what could we bid for", "is there anything for a civil contractor in Victoria", "find work for acme.com.au". Give `company_url` — a plain domain is fine, we resolve it — and we read their site, build a capability profile, and score the shortlist against it. `example` runs a built-in profile (civil, it, facilities) with no site read, for demonstrating the shape of the answer. Returns `{profile, matched, shown, withheld, withheld_reason, matches[], degraded, score_means, coverage}`. Each match has `score`, `band`, `why[]` — the company's own stated capabilities this tender needs — and `gaps[]`, things the tender asks for that their website does not mention. An anonymous call shows the strongest few and says how many were withheld; relay `withheld_reason` as it is. TELL THE USER WHAT THE SCORE IS: relative fit within these results, against what their website says. NOT a probability of winning. And `gaps` is what to check before bidding, not a list of everything the tender requires — that is in the tender documents. When `degraded` is true, scoring was unavailable and the order is keyword relevance only, with no `why`/`gaps`. Say so rather than presenting it as a judged ranking.

NameTypeReqDescription
closing_before–––
company_url–––
example–––
jurisdiction–––

Structured output declared, but exposes no named fields.

No examples provided.

screen_adverse_media ~352

Screen a person or organisation for ADVERSE MEDIA and SANCTIONS exposure (KYC/AML). PEP lists are not screened: `sanctions.flags.pep` is always false and `sanctions.note` says so. USE THIS WHEN onboarding or due-diligence asks: does this subject appear in negative news (fraud, money laundering, bribery, sanctions, trafficking, enforcement action), or on a sanctions list? Pairs naturally after verify_identity. Identify the subject ONE of two ways: pass `name` (plus any of `dob` as YYYY-MM-DD, `country`, `aliases`, `employer`, `role` — these sharpen matching and cut same-name false positives), OR pass an identity document via `url`/`bytes_b64` (+`filename`) and the subject is read from it. Returns `{subject, sanctions{...}, adverse_media{...}, risk_flag, headline, limitations}`: sanctions candidates are corroboration-gated (a name-only hit is `possible`, NEVER confirmed — one common name matches several different people); media hits are entity-disambiguated and classified, with same-name articles surfaced under `excluded`. This is screening COVERAGE, not a determination — a hit means "review this", not "guilty"; "nothing found" is not a clean record. Stateless — nothing is stored.

NameTypeReqDescription
aliases–––
bytes_b64–––
country–––
dob–––
employer–––
filenamestring––
name–––
role–––
url–––

Structured output declared, but exposes no named fields.

No examples provided.

submit_feedback ~118

Record thumbs up/down on a warrant's rating (the engine's precision-flywheel label source). verdict must be 'up' or 'down'; note is optional free text. USE THIS WHEN the ground truth became known after a verify_document call — e.g. the document was later confirmed genuine or fraudulent — so the engine learns from the outcome. Tell it what happened; it sharpens future inspections for everyone.

NameTypeReqDescription
note–––
verdictstringyes–
warrant_idstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

tender_sources ~170

Every source we search, what it is allowed to do, and what the last run returned. FREE. USE THIS WHEN someone asks where the data comes from, whether a particular portal is covered, or why a search came back empty. It is the honesty surface: it names sources behind login walls, sources whose robots.txt refuses us, and sources that returned nothing on the last run and why. Returns `{sources[], coverage}` — per source: id, tag, name, URL, refresh mode, jurisdiction, tier, how it is accessed, what its robots.txt says, how many tenders we hold from it, and its status on the most recent run. Snapshot sources include their observed date and are not presented as nightly feeds.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

verify_document ~349

Forensically inspect a document (PDF or image) for authenticity: tampering signs, AI-generation indicators, arithmetic reconciliation (financial docs), and provenance. USE THIS WHEN someone shares a payslip, bank statement, invoice, receipt, ID, certificate, or contract and asks: is this genuine / real / authentic? has it been edited, doctored, or photoshopped? can I trust this file? (For "did an AI *write* this prose" use `detect_ai_text`; for "are this report's citations real" use `verify_references`. Both are available in this canonical suite.) Provide the document ONE way: `url` (a public http(s) link — fetched server-side, the cheapest call: no need to download or encode anything) OR `bytes_b64` (inline base64, plus `filename` so PDF-vs-image routing is right). Returns the headline result — `risk_band` (low/medium/high/insufficient/error), `inspection_quality` (coverage, orthogonal to risk), `recommended_action`, a `summary`, the RISK-axis `risk_findings`, and a shareable `permalink`. This is a SIGNAL, not a fraud verdict — a human or agent adjudicates. Use `get_warrant(warrant_id)` for the full evidence bundle. Identical bytes are cached by content hash — `check_document` first skips a redundant, paid inspection.

NameTypeReqDescription
bytes_b64–––
filenamestring––
freshboolean––
url–––

Structured output declared, but exposes no named fields.

No examples provided.

verify_identity ~300

Run an Australian identity check over a SET of identity documents. A vision model reads each document (which ID it is, which fields it shows — name/photo/address/signature — and its issue date); a deterministic engine then tallies them against a scheme and reports whether identity is established, and exactly what's still missing if not. USE THIS WHEN someone needs to verify a person's identity from their documents — KYC / onboarding / "do these documents satisfy the 100-point check?" Pass ALL the person's documents together (a passport alone is 70 points; the check needs >= 100). `documents` is a list, each item ONE of: {"url": "https://..."} (public link, fetched server-side) or {"bytes_b64": "...", "filename": "passport.pdf"} (inline). Up to 10. `scheme`: "afp_100_point" (points, default) or "austrac_safe_harbour" (category combinations). Returns `{established, points/target or satisfied_path, documents[] (per-document: type, fields shown, whether it counted and why-not), reason, accepts, ...}`. This is identity COVERAGE, not a forgery judgment — run verify_document for authenticity. Documents are never stored.

NameTypeReqDescription
documentsarrayyes–
schemestring––

Structured output declared, but exposes no named fields.

No examples provided.

verify_references ~405

Fact-check a document's REFERENCES and CLAIMS — built for AI-generated reports whose citations must be checked before they're trusted. USE THIS WHEN someone shares a report, article, whitepaper, or deep-research export (or a link to one) and asks: is this accurate / legit? are these citations real? fact-check this. did the AI make this up? Also use it proactively before relying on any AI-written document. Provide the document ONE way: `url` (a public http(s) link to a PDF or web page — fetched server-side, the cheapest call: no need to download or encode anything), `text` (pasted markdown/plain prose), OR `bytes_b64` (a base64 PDF; URLs are read from the PDF's link annotations, so they're exact). Default (fast): provenance (is it a ChatGPT deep-research export?), citation resolution (live / archived / dead, papers matched against arXiv/Crossref to catch 'real ID, wrong paper'), and internal MATH (recompute the doc's own arithmetic). Set `deep=true` to also fetch each cited source and judge whether it SUPPORTS or CONTRADICTS the claim (slower, ~a minute). Returns a trust summary, per-item tables, and a shareable `permalink` to the public fact-check record. HONEST BOUNDARY: this reports verification COVERAGE, not truth — 'supported' means evidence-backed (not necessarily true) and 'unsupported' means no evidence found (not necessarily false). It tells a reviewer WHERE to look; it does not bless the document, and it never affects the fraud risk band.

NameTypeReqDescription
bytes_b64–––
deepboolean––
filenamestring––
text–––
url–––

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

What is the Stipple — Document Verification & Extraction MCP server?

Stipple — Document Verification & Extraction is an MCP server listed in the public MCP registry as sh.stipple/openwarrant. Document forensics: tamper/AI checks, fields, tables, identity, screening, tenders, citations. This page covers its hosted endpoint (https://www.stipple.sh/mcp).

Is the Stipple — Document Verification & Extraction MCP server safe to use?

Stipple — Document Verification & Extraction scores 75 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 Stipple — Document Verification & Extraction MCP server expose?

Stipple — Document Verification & Extraction exposes 16 tools: verify_document, check_document, get_warrant, submit_feedback, extract_fields, and 11 more. Their descriptions and schemas cost roughly 5,957 tokens of context every time the server is loaded.

Does the Stipple — Document Verification & Extraction MCP server require authentication?

No. We connected to Stipple — Document Verification & Extraction without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Stipple — Document Verification & Extraction MCP server still maintained?

Stipple — Document Verification & Extraction is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.