CiteGuard
Enables per-claim citation verification for AI-generated text by fetching cited sources and judging whether they support the claim, with verdicts and evidence quotes.
README
CiteGuard
Per-claim citation verification for AI-generated text. CiteGuard fetches every cited source and tells you whether it actually supports the claim — with a quoted evidence span, so you can verify the verdict yourself in seconds.
Built for the age of vibe citing: AI-drafted reports full of citations that resolve to real URLs but don't say what the text claims they say.
What it does
Give CiteGuard a document (markdown or plain text) or explicit claim+URL pairs. For each claim it:
- Fetches the cited source — with timeout handling, redirect tracking, a 5 MB cap, and an automatic archive.org fallback for dead links.
- Checks source liveness — dead URLs, DOI redirects, and "soft 404s" (redirects that land on a homepage) are flagged explicitly.
- Extracts the real content — boilerplate-stripped article text via Readability; PDFs supported.
- Judges entailment — an LLM reads only the fetched source text (never its own world knowledge) and returns one of six verdicts.
| Verdict | Meaning |
|---|---|
supported |
Source clearly states or directly entails the claim |
partially_supported |
Part of the claim is there, but a material element differs or is absent |
contradicted |
Source states the opposite |
unsupported |
Source is real but does not contain the claim |
uncertain |
Source text too fragmentary/ambiguous to decide |
could_not_fetch |
Source unreachable and no archive snapshot — never guessed |
Every verdict ships with a verbatim evidence quote, a confidence score, and full source status. Document audits also return a citation integrity score (0–100).
CiteGuard never overclaims: if it can't fetch a source, it says so instead of judging blind, and borderline cases land in uncertain — the goal is to make human verification 10× faster, not to replace it.
Quick start (MCP)
Add to Claude Code / Claude Desktop / any MCP client:
{
"mcpServers": {
"citeguard": {
"command": "npx",
"args": ["-y", "citeguard-mcp"],
"env": {
"CITEGUARD_JUDGE_PRESET": "qwen",
"CITEGUARD_JUDGE_KEY": "sk-..."
}
}
}
}
Tools exposed: verify_claims, check_document, check_links (liveness-only, needs no LLM key).
Quick start (CLI)
npm install -g citeguard
citeguard extract report.md # show extracted claim/source pairs (no network)
citeguard links report.md # dead-link check (no LLM needed)
citeguard check report.md # full audit (needs judge configured)
Judge configuration
CiteGuard is model-agnostic — anything with an OpenAI-compatible chat endpoint works:
# Preset providers
export CITEGUARD_JUDGE_PRESET=qwen # or: openai, anthropic
export CITEGUARD_JUDGE_KEY=sk-...
# Or any OpenAI-compatible endpoint
export CITEGUARD_JUDGE_URL=https://your-endpoint/v1
export CITEGUARD_JUDGE_MODEL=your-model
export CITEGUARD_JUDGE_KEY=sk-...
Hosted API
A free hosted endpoint (50 requests/day/IP) runs on Cloudflare Workers:
curl -X POST https://citeguard.YOUR-SUBDOMAIN.workers.dev/api/verify \
-H "content-type: application/json" \
-d '{"claims":[{"text":"The Eiffel Tower is 330 m tall.","source":"https://en.wikipedia.org/wiki/Eiffel_Tower"}]}'
Remote MCP endpoint: POST /mcp (streamable HTTP, stateless).
What CiteGuard is not
- Not an AI-text detector. It doesn't care who wrote the text — it checks whether cited sources support claims.
- Not a truth oracle. A
supportedverdict means the cited source says this, not this is true. Garbage source in, garbage support out. - Not a search engine. It verifies the citations you have; it doesn't find better ones (yet).
Extraction formats
Markdown inline links, reference-style links, footnotes, bare DOIs (resolved via doi.org), bare URLs. APA-style parsing and PDF input documents are on the roadmap.
Development
git clone https://github.com/Franksterino/citeguard
cd citeguard
npm install
npm run typecheck
npx tsx src/cli.ts extract test/fixtures/sample.md
License
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.