A Model Context Protocol server that prevents citation hallucination by verifying academic citations against multiple authoritative databases. Forked from tfscharff/doi-mcp and trimmed for atmospheric science / geophysical research workflows.
Large language models sometimes hallucinate academic citations — fabricating papers that don't exist, misattributing titles to wrong authors, or inventing DOIs. During thesis writing with AI assistance, this is a serious risk.
This MCP server addresses the first layer of citation integrity: does the paper actually exist?
Does:
- Verifies that a paper with given title/author/year/DOI exists in real databases
- Returns the verified DOI so you can add the paper to your reference manager
- Searches for real papers on a topic when you need citations
Doesn't:
- Verify that a paper says what you're citing it for (that requires reading the paper)
- Replace your reference manager (Zotero, etc.)
- Fetch or manage BibTeX entries
This MCP complements local library tools rather than replacing them:
| Tool | Purpose | Searches |
|---|---|---|
| doi-mcp | Verify a paper exists, get DOI | External databases (CrossRef, OpenAlex, Semantic Scholar) |
| semq | Find conceptually related papers you already have | Your Zotero library (semantic embeddings) |
| qoll-fd | Find exact phrases/terms in papers you already have | Your Zotero PDFs (full-text search) |
Typical workflow:
- AI agent suggests citing "Smith et al. (2019)" during writing
- doi-mcp →
verifyCitation({title: "...", authors: ["Smith"], year: 2019})→ confirmed, DOI returned - Add DOI to Zotero
- semq/qoll-fd → verify the paper actually supports the specific claim
Three databases are queried in parallel (~1 second total):
- CrossRef — 150M+ scholarly publications, the DOI registry
- OpenAlex — 250M+ scholarly works, broad coverage
- Semantic Scholar — 200M+ papers, AI-powered search
These three cover essentially all published academic work across all disciplines. No API keys required.
Verifies a citation exists before it can be mentioned.
Input:
title(string, optional): Paper title (partial matches accepted)authors(array, optional): Author names (last names sufficient)year(number, optional): Publication yeardoi(string, optional): DOI if knownjournal(string, optional): Journal name
Returns: verified: true/false, with DOI, metadata, and confidence level if verified.
Verify multiple citations in a single call.
Search for real papers on a topic.
Input:
query(string): Search querysource(string, optional):"all"(default),"crossref","openalex", or"semanticscholar"limit(number, optional): Results per source (1-20, default: 5)yearFrom/yearTo(number, optional): Publication year range
{
"mcpServers": {
"doi-mcp": {
"command": "npx",
"args": ["-y", "github:nbCloud91/doi-mcp"]
}
}
}git clone git@github.com:nbCloud91/doi-mcp.git
cd doi-mcp
npm install
npm run buildConfig:
{
"mcpServers": {
"doi-mcp": {
"command": "node",
"args": ["/absolute/path/to/doi-mcp/dist/index.js"]
}
}
}- Removed 6 irrelevant APIs: ERIC (education), DBLP (computer science), INSPIRE-HEP (particle physics), PubMed (biomedical), zbMATH (mathematics), HAL (French archives). Reduces latency and noise for non-biomedical/non-CS research.
- Improved match scoring: Replaced crude 30-character substring match with token-overlap scoring (normalize titles, tokenize, compute overlap ratio). More robust against minor title variations.
- Kept: CrossRef, OpenAlex, Semantic Scholar — sufficient coverage for atmospheric science and most other fields.
MIT