Citeguard

io.github.FranksterinoPublished by GitHub account Franksterinov0.1.2Updated Oct 24, 2026

Verify citations in AI text: fetches each cited source, returns verdicts with evidence quotes.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingKnowledge & Memory

Overview

AI-generated overview

Fetches each cited source in AI-written text and returns per-claim verdicts with verbatim evidence quotes, plus a document citation integrity score.

What you can do
  • Verify claim and source pairs, returning a verdict per claim with a quoted evidence span and confidence
  • Audit every citation in a markdown or plain-text document and get a citation integrity score from 0 to 100
  • Check cited links for liveness only, flagging dead URLs, homepage redirects and archive.org availability, without an LLM
  • Extract claim and source pairs from inline links, reference links, footnotes, bare DOIs and bare URLs
When to use it
Useful when reviewing AI-drafted reports, articles or research notes whose citations resolve to real pages but may not actually support the claims. It speeds up human fact-checking of existing citations; it does not search for better sources or judge whether a claim is true in itself.
Requirements
Runs as a remote streamable HTTP endpoint or as a local npm package (npx citeguard-mcp, Node.js). Full verification needs a judge LLM: set CITEGUARD_JUDGE_KEY and optionally CITEGUARD_JUDGE_PRESET (qwen, openai, anthropic) or a custom OpenAI-compatible endpoint. The link-only check needs no key. Network access is required to fetch sources.
Before you install
The judge API key is passed as CITEGUARD_JUDGE_KEY and is used to call a third-party LLM provider, so source text and claims are sent to that provider. Cited URLs are fetched by the server, which reveals them to it and to the hosted endpoint if used. A supported verdict only means the cited source says so, not that the claim is true. The hosted endpoint is rate-limited per IP.

Installation

In SourceWeft

  1. Open Citeguard 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.Franksterino%2Fciteguard/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": {
    "citeguard": {
      "type": "http",
      "url": "https://citeguard.boundy.workers.dev/mcp"
    }
  }
}

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:

  1. Fetches the cited source — with timeout handling, redirect tracking, a 5 MB cap, and an automatic archive.org fallback for dead links.
  2. Checks source liveness — dead URLs, DOI redirects, and "soft 404s" (redirects that land on a homepage) are flagged explicitly.
  3. Extracts the real content — boilerplate-stripped article text via Readability; PDFs supported.
  4. Judges entailment — an LLM reads only the fetched source text (never its own world knowledge) and returns one of six verdicts.
VerdictMeaning
supportedSource clearly states or directly entails the claim
partially_supportedPart of the claim is there, but a material element differs or is absent
contradictedSource states the opposite
unsupportedSource is real but does not contain the claim
uncertainSource text too fragmentary/ambiguous to decide
could_not_fetchSource 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:

json
{  "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)

bash
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:

bash
# Preset providersexport CITEGUARD_JUDGE_PRESET=qwen        # or: openai, anthropicexport CITEGUARD_JUDGE_KEY=sk-...
# Or any OpenAI-compatible endpointexport CITEGUARD_JUDGE_URL=https://your-endpoint/v1export CITEGUARD_JUDGE_MODEL=your-modelexport CITEGUARD_JUDGE_KEY=sk-...

Hosted API

A free hosted endpoint (50 requests/day/IP) runs on Cloudflare Workers:

bash
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 supported verdict 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

bash
git clone https://github.com/Franksterino/citeguardcd citeguardnpm installnpm run typechecknpx tsx src/cli.ts extract test/fixtures/sample.md

License

MIT

Source: README.md at commit e3414fa

Tools

3

verify_claims

Verify claim+source pairs: fetches each cited URL and returns a per-claim verdict (supported / partially_supported / contradicted / unsupported / uncertain / could_not_fetch) with a quoted evidence span from the source.

Parametersclaimsrequired

check_document

Audit every citation in a markdown/plain-text document: extracts claim+source pairs (markdown links, footnotes, DOIs, bare URLs), verifies each against the fetched source, and returns a report with a citation integrity score (0-100).

Parametersdocumentrequired

Version history

1
  1. v0.1.2LatestSep 16, 2026

Score

100% 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