Veritap

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.

Category
Visit Server

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_feasibility and 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.mjs fails 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.ts is 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

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.

Official
Featured
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured