Citation Guard
README.md
# Citation Guard ๐ก๏ธ
**Catches AI-hallucinated citations.** Paste a reference list โ every DOI is verified against live public
registries. Free, open-source, **zero extra credits**.
One [MCP](https://modelcontextprotocol.io) server for Claude & ChatGPT.
## Why this exists
AI models fabricate citations that *look* perfect โ real-sounding authors, real journals, plausible DOIs.
People have been sanctioned in court and had papers retracted over them. Citation Guard is the check.
Unlike the rest of this plugin family (which inject reasoning protocols), **this one returns facts, not
opinions** โ retrieved from doi.org, OpenAlex and Crossref. You can verify every verdict yourself.
## The key insight
> **"The DOI resolves" is NOT proof the citation is real.**
> A fabricated citation can carry a *real* DOI that points to a **different paper**.
So it verifies in two stages:
1. **`doi.org/doiRA`** โ does this DOI exist at *any* registration agency? (catches invented DOIs)
2. **OpenAlex / Crossref** โ fetch the paper the DOI *actually* points to, then check whether the cited
text matches that paper's real title. **This is what catches the sneaky ones.**
## Verdicts
| | Meaning |
|---|---------|
| โ
**VERIFIED** | DOI exists and the cited text matches the real paper |
| โ **FABRICATED** | DOI resolves nowhere โ treat as invented |
| โ ๏ธ **MISMATCH** | DOI is real but belongs to a **different paper** โ the classic hallucination signature |
| ๐ซ **RETRACTED** | The paper exists but has been retracted |
| โ **UNRESOLVED** | Registered, but no metadata retrievable โ check by hand |
| โ **NO_DOI** | Nothing to verify against โ *not* a pass |
Plus **duplicate detection** (same DOI cited twice).
## Real example
```
1. โ
VERIFIED โ 10.1038/nature14539 โ "Deep learning" โ Yann LeCun (2015)
2. โ FABRICATED โ 10.1234/jsi.2023.99999 โ does not exist at any registration agency
3. โ ๏ธ MISMATCH โ 10.1038/nature14539 โ cited as "Blockchain Approaches to Feline Psychology",
actually "Deep learning" โ Yann LeCun (2015)
4. ๐ซ RETRACTED โ 10.1016/S0140-6736(97)11096-0 โ Wakefield et al. 1998
```
## Tools
- **`verify_citations`** โ check a whole reference list (up to **15 per call**)
- **`check_doi`** โ resolve a single DOI: what paper is it *really*?
## Use it
```
Citation Guard: check these references
[paste your bibliography, one per line]
```
## Limits (honest ones)
- **15 references per call** โ Cloudflare's free tier allows 50 subrequests and 6 concurrent connections per request; each reference costs up to 3 lookups. Batch larger lists.
- **No DOI = not checkable.** Many valid works (arXiv preprints, books, NeurIPS papers) have no DOI. `NO_DOI` means "unknown", never "fake".
- **A โ
means the DOI matches the cited title** โ it doesn't mean the paper supports the claim it's cited for.
## Deploy your own (free)
```powershell
npm install
npx wrangler deploy # prints your live URL
```
Your connector URL is that address **+ `/mcp`**.
**Optional:** set a `CONTACT_EMAIL` var to unlock Crossref's faster "polite pool" (10/s vs 5/s):
```powershell
npx wrangler secret put CONTACT_EMAIL
```
It works fine without it. *(It's an env var rather than hardcoded so nobody's email ends up in a public repo.)*
## Connect it
- **Claude** (any plan): Settings โ Connectors โ Add custom connector โ paste the `/mcp` URL
- **ChatGPT** (Plus+, desktop web): Settings โ Connectors โ Advanced โ Developer mode โ add the `/mcp` URL, Auth **None**
## Data sources
[doi.org](https://www.doi.org/) (registration agency lookup) ยท [OpenAlex](https://openalex.org/) (metadata + retraction flags) ยท [Crossref](https://www.crossref.org/) (metadata fallback). All free, all public.
## License
MIT ยฉ 2026 Pranay Mahendrakar โ free to use, modify, and share.
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues