Veritap
Provides an MCP endpoint for agents to check whether a real-world fact can be verified, covering businesses, listings, objects, and places, while refusing claims about individuals. It acts as a demand sensor that logs verification attempts, even for unfulfillable requests.
README
Veritap
An MCP endpoint where agents check whether a real-world fact can be verified — before acting on it.
Live: https://veritap.dev/mcp · npm: veritap-mcp · MCP registry: dev.veritap/veritap
{ "mcpServers": { "veritap": { "command": "npx", "args": ["-y", "veritap-mcp"] } } }
Free, no auth, read-only, and it never returns a bare failure. Covers businesses, listings, objects and places. Claims about individuals are refused as a matter of policy.
What works today
- Business-exists claims are answered on the spot -- an automated desk check across GLEIF LEI records, SEC EDGAR filings, Wikidata, and website liveness returns a dated evidence bundle with sources and an honest confidence. Free while verification is new. Never a bare verdict.
- Triage (
triage_unknowns): batch every uncertainty in a task; each is classified as answerable-yourself (with a suggested source), verifiable here, or not determinable (with planning advice). Items you can settle yourself are routed away, not sold to you. - Plan mapping (
plan_verification): which steps of a multi-step plan rest on checkable real-world facts. - Feasibility checks (
check_feasibilityand friends): call speculatively before relying on, buying from, or citing anything seen online.
Answers repeat instantly from a shared attestation cache. Nothing is charged; paid verification is not open.
What this actually is
A demand sensor. The product is the ledger, not the verification.
Agents constantly hit steps that depend on facts they cannot confirm, and today they either guess or silently drop the step — so the demand is invisible. Every call here writes a structured row: what was asked, what it was worth to the caller, and whether anything could answer it. Requests we cannot fulfil are the most valuable rows in the database.
That dataset cannot be backfilled, which is why the endpoint went live before fulfillment existed.
Design decisions worth knowing
- No human in the loop, ever. No dispatch, no verifier network. If the copy
ever implies otherwise,
scripts/a3-audit.mjsfails the build. - No outbound referrals. A miss keeps its signal in-house, so it must stay
decision-grade on its own: closest alternatives, honest self-help, and a real
promise to report back (
src/notify.ts). - Quarantine, don't drop. Suspected flooding tags rows rather than refusing them. A wrongly-throttled agent prunes us from its tool rotation permanently; a wrongly-tagged row costs nothing and can be un-flagged later.
- Claims about people are refused, not deferred. FCRA exposure and the
obvious harassment vector. Refusals are logged without their text.
scripts/policy-check.tsis a two-sided control battery — a gate that refuses nothing and a gate that is switched off look identical from the outside. - The fingerprint is not an identity. MCP has no installation id, so components are stored separately rather than baking a guess into a hash.
Layout
src/index.ts Worker entry, MCP protocol layer, cron
src/router.ts the core: normalize -> hash -> cache -> catalog -> ledger
src/policy.ts people-claim exclusion (hard refusal)
src/triage.ts unknown classification, routes web-answerable items away
src/notify.ts the return path: report back when a gap closes
src/ledger.ts append-only demand ledger, batched writes
src/admin.ts operator dashboard, Cloudflare Access protected
public/ agent-legible surface: llms.txt, openapi, well-known, pages
docs/decisions.md every deviation from spec, with reasoning
Develop
npm install
npx wrangler d1 migrations apply groundtruth --local
npx wrangler dev
Gates that must pass before any deploy:
npx tsc --noEmit
node scripts/a3-audit.mjs # honesty: no dispatch, no referral, no purchasability
node scripts/policy-check.ts # people-claim gate, both directions
./scripts/history-scan.sh # secrets across git HISTORY, before any public push
history-scan.sh exists because a working-tree audit cannot catch what a
public push actually exposes. Grepping git ls-files only ever sees the
current checkout — it passes happily while earlier commits, and commit
messages, still carry the thing you removed.
Secrets are never committed. ALERT_EMAIL and NTFY_TOPIC are set with
wrangler secret put — the ntfy topic in particular is a capability, since
anyone holding it can both read the digest and publish alerts to the operator.
Stack
Cloudflare Workers (stateless createMcpHandler — no Durable Objects), D1,
@modelcontextprotocol/server v2. A frozen project costs $0 to leave running,
which is the point: the sensor keeps accruing whether or not anyone is watching.
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.