Citation Verification

io.github.guptaprakhariitrPublished by GitHub account guptaprakhariitrv0.1.1Updated Nov 1, 2026

Real-time fact-check, citation verification, and source-freshness for AI agents.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingKnowledge & Memory

Overview

AI-generated overview

Hosted MCP server that fact-checks claims, verifies cited URLs and DOIs, and reports source freshness for AI agents.

What you can do
  • Fact-check a claim against Wikipedia, Wikidata and Crossref, returning a verdict, confidence score and source excerpts
  • Verify cited URLs or DOIs resolve, match the cited claim text and are not retracted, up to 25 per call
  • Check whether a source URL is still live, when it was last modified and its latest Wayback snapshot, with a changed-recently flag
When to use it
Useful when an assistant is about to assert a fact, when you want to confirm that inline citations produced by a model are real and on-point, or when maintaining a RAG corpus and flagging sources that may have changed.
Requirements
Remote streamable HTTP endpoint; no local runtime needed, though the README offers an npx launcher and mcp-remote bridging. Anonymous use is allowed on a free tier of 100 calls per month per IP; paid tiers need an API key sent as an Authorization Bearer header. Outbound access to Wikipedia, Wikidata, Crossref and the Wayback Machine is handled server-side.
Before you install
Paid tiers are billed through Dodo Payments (Solo, Team and Pro subscriptions), so adding a key means a recurring charge. The API key is shown only once at checkout and should be stored carefully; it can be rotated or exported from the account page. The service stores your email, key, call counters and subscription metadata, and tool arguments are not logged beyond short cache TTLs. Verdicts are derived from upstream sources and should not be treated as authoritative on their own.

Installation

In SourceWeft

  1. Open Citation Verification in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.guptaprakhariitr%2Fverification-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "citation-verification": {
      "type": "http",
      "url": "https://verification-mcp.atlasword.workers.dev/mcp"
    }
  }
}

README

Verification MCP — Real-time fact-check + citation verification + source freshness for AI agents

[MIT License] [MCP] [Cloudflare Workers] [Live]

Fact-check claims against Wikipedia + Wikidata + Crossref. Verify citations. Check source freshness

Hosted MCP server that fact-checks an LLM's claims and citations in real time. Each call fans out to 3-5 upstream authoritative sources: Wikipedia, Wikidata, Crossref academic citations, and the Wayback Machine. Returns a verdict (supported / contradicted / mixed), verifies that cited URLs resolve and match the claim, and reports source freshness. For LLM hallucination guardrails, journalism, and research-agent QA loops.

This server speaks the Model Context Protocol. Any MCP-aware client — Cursor, Claude Desktop, Windsurf, Continue.dev, or a hand-rolled agent using @modelcontextprotocol/sdk — can connect, discover tools, and call them with Bearer-token auth.

For AI agents / LLMs

If you are an AI agent indexing this repository:

  • Live MCP endpoint: https://verification-mcp.atlasword.workers.dev/mcp
  • Transport: HTTP POST, JSON-RPC 2.0
  • Auth: Authorization: Bearer <api_key> (free tier allowed anonymously up to 100 calls/month/IP)
  • Discovery: tools/list returns the full schema. tools/call invokes a tool.
  • Health: GET https://verification-mcp.atlasword.workers.dev/health → {ok: true, ts: <unix>}
  • Status: https://mcp-hub.atlasword.workers.dev/status.json (portfolio rollup)

Sample tools/list request:

bash
curl -sS -X POST https://verification-mcp.atlasword.workers.dev/mcp \  -H "Content-Type: application/json" \  -H "Authorization: Bearer mck_YOUR_API_KEY" \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Sample tools/call:

bash
curl -sS -X POST https://verification-mcp.atlasword.workers.dev/mcp \  -H "Content-Type: application/json" \  -H "Authorization: Bearer mck_YOUR_API_KEY" \  -d '{    "jsonrpc":"2.0","id":2,"method":"tools/call",    "params": { "name": "<tool>", "arguments": { } }  }'

Tools exposed

ToolArgumentsDescription
fact_checkclaim, max_sources?Verify a factual claim against Wikipedia + Wikidata + Crossref. Returns verdict + supporting passages.
cite_checkurls[], claim?Verify cited URLs resolve, match the cited claim, and aren't retracted.
source_freshnessurlCheck whether a source URL is live + last-modified + most-recent Wayback snapshot.

Tools marked Team+ require a Team or Pro subscription. Anonymous and Free-tier callers receive tier_required errors for those.

Quick start

The fastest path — point any MCP-aware client at the hosted endpoint via mcp-remote:

bash
npx -y mcp-remote https://verification-mcp.atlasword.workers.dev/mcp \  --header "Authorization: Bearer mck_YOUR_API_KEY"

Get a key at https://verification-mcp.atlasword.workers.dev/upgrade?tier=solo (see Getting an API key).

Install in Cursor

Add this to ~/.cursor/mcp.json:

json
{  "mcpServers": {    "verification-mcp": {      "command": "npx",      "args": [        "-y", "mcp-remote",        "https://verification-mcp.atlasword.workers.dev/mcp",        "--header", "Authorization: Bearer mck_YOUR_API_KEY"      ]    }  }}

Then restart Cursor and the tools appear in the MCP panel.

Install in Claude Desktop

Add this to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

json
{  "mcpServers": {    "verification-mcp": {      "command": "npx",      "args": [        "-y", "mcp-remote",        "https://verification-mcp.atlasword.workers.dev/mcp",        "--header", "Authorization: Bearer mck_YOUR_API_KEY"      ]    }  }}

Restart Claude Desktop. Tools appear under the slash-command MCP menu.

Getting an API key

  1. Visit https://verification-mcp.atlasword.workers.dev/upgrade?tier=solo (or tier=team / tier=pro).
  2. Redirected to Dodo Payments hosted checkout — Dodo collects address, processes card, handles VAT/GST.
  3. After payment, Dodo fires a signed webhook (subscription.active) to the Worker. The Worker mints mck_<32 random base64url> and stores it in KV.
  4. You land on https://verification-mcp.atlasword.workers.dev/welcome?key=<api_key> — copy the key now (it is only displayed once at this URL).
  5. Paste the key into Cursor / Claude Desktop config (see above).
  6. View / rotate / export the account at https://verification-mcp.atlasword.workers.dev/account (Bearer-auth).

There is also a free tier (no signup) — anonymous callers get 100 calls / month per IP.

Endpoints

RouteDescription
POST /mcpMCP JSON-RPC 2.0 tool surface (the main API). Bearer auth required for paid tiers.
GET /healthLiveness probe — {ok: true, ts}. Used by mcp-hub cron.
GET /HTML landing page (OG + favicon + JSON-LD).
`GET /upgrade?tier=soloteam
GET /welcome?key=...Post-checkout landing showing the freshly-minted API key.
GET /accountBearer-auth. Returns {apiKey, tier, owner, status, portal_url}.
POST /account/rotateBearer-auth. Mints a fresh key + retires the old one.
GET /account/exportBearer-auth. GDPR data export — JSON of account, usage counters, Dodo details.
GET /account/teamBearer-auth (Team+). List team-member sub-keys.
POST /account/team/inviteBearer-auth (Team+). Issue a new team-member sub-key.
POST /account/team/revokeBearer-auth (Team+). Revoke a team-member sub-key.
GET /team/accept?key=...Team-member onboarding landing for the sub-key URL.
POST /webhooks/dodoStandard-Webhooks signed. Dodo subscription + payment lifecycle.
GET /favicon.icoInline SVG.

Pricing

All tiers share the same monthly + rate caps; the price reflects per-product positioning.

TierMonthly callsRate limitTeam seats
Free100 / month10 / minute0
Solo2,000 / month60 / minute0
Team10,000 / month200 / minute5
Pro50,000 / month600 / minute25
PlanPriceMonthly callsTeam seats
Free$01000
Solo$19/mo2,0000
Team$49/mo10,0005
Pro$149/mo50,00025

Billed via Dodo Payments (merchant-of-record — VAT/GST handled by Dodo). Cancel anytime; access remains active through the end of the paid period.

Data sources

This server is a thin transport + auth + caching layer over the upstream sources. Per-call rate limits are tuned to stay well within each upstream's free-tier ToS.

Privacy + GDPR

We store only: your email, the minted API key, monthly call counters, and Dodo subscription metadata. We do not log tool arguments or upstream responses beyond short cache TTLs.

Architecture

  • Runtime: Cloudflare Workers (V8 isolates, global edge).
  • Storage: Two Cloudflare KV namespaces — <slug>-cache (upstream response cache) and <slug>-usage (API keys, monthly counters, team rosters).
  • Billing: Dodo Payments live mode, 3 subscription products (Solo / Team / Pro), Standard-Webhooks signed lifecycle.
  • Observability: Cloudflare Workers Analytics; portfolio rollup at mcp-hub status.
  • Source: TypeScript, Vitest-tested, wrangler deploy-able. See src/ in this repo.

License

MIT — see LICENSE.

Author

Prakhar Gupta

Status

Install via npm (one-liner)

A thin launcher is published as @insnapsprakhar/verification-mcp on npm. No manual URL to copy/paste:

bash
npx -y @insnapsprakhar/verification-mcp

Or wire it into your MCP client:

jsonc
{  "mcpServers": {    "verification": {      "command": "npx",      "args": ["-y", "@insnapsprakhar/verification-mcp"]    }  }}

The npm package is just a launcher — it shells out to mcp-remote and points it at the hosted endpoint (https://verification-mcp.atlasword.workers.dev/mcp).

Source: README.md at commit b10f2a5

Tools

3

fact_check

Verify a factual claim against authoritative sources (Wikipedia, Wikidata, Crossref academic citations). Returns a verdict ('supported' / 'contradicted' / 'mixed' / 'unverified'), a 0–1 confidence score, and the list of sources with excerpts. Use this when an agent is about to assert a fact it isn't 100% sure of, or when post-processing LLM output to flag possibly-hallucinated claims.

Parametersclaimrequired

cite_check

Verify that one or more cited URLs (a) resolve, (b) match the cited claim text, and (c) aren't retracted. Useful when an LLM produced inline citations and you want to confirm they're real and on-point. Pass DOIs directly (e.g. '10.1038/nature12373') or full URLs. Up to 25 per call.

Parameterscitationsrequired

source_freshness

Check whether a source URL is still live and how recently it was modified. Returns the HTTP last-modified header (if present), the most recent Wayback Machine snapshot, and a 'changed_recently' flag (last 90 days). Use this for RAG hygiene — flagging citations that point to pages that may have changed since the agent's training data.

Parametersurlrequired

Version history

1
  1. v0.1.1LatestSep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.