mcp-citation-checker
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-citation-checkerVerify claim 'Neural nets outperform SVMs' in paper.pdf page 12"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-citation-checker
An MCP server that verifies whether a claim is actually supported by the source text at a given citation — independent of what the calling LLM asserts.
Why this exists
LLM agents that cite sources can still get the citation wrong: paraphrasing loosely, citing the wrong page, or asserting a source says something it doesn't. check_citation closes that gap by independently fetching the real text at the claimed citation and asking a separate LLM call to judge, strictly from that text, whether the claim holds up. The agent's own paraphrase is never trusted as evidence — only the independently-fetched source is.
Related MCP server: eleata-verify-mcp
Design: pluggable backends
Looking up "the real text at citation X" depends entirely on where your documents actually live — Weaviate, Postgres, a flat file, something else. Rather than hardcoding one storage system, this package defines a small interface any backend can implement:
class SourceLookup(Protocol):
def fetch(self, pdf_name: str, page_number: int) -> list[dict]:
...weaviate is included out of the box as a working, tested implementation (bundled as an optional extra, so installing the base package doesn't force a Weaviate dependency on anyone who doesn't need it). Writing your own backend for another storage system just means implementing that one fetch method — see Writing your own backend below.
Install
pip install "mcp-citation-checker[weaviate]"(Omit [weaviate] if you're supplying your own backend instead.)
Configuration
Set via environment variables when the server starts:
Variable | Default | Purpose |
|
| Which backend to use (currently only |
| — | Required. Used for the verification LLM call. |
|
|
|
|
| Used when |
| — | Required when |
Usage
Run directly:
mcp-citation-checkerOr wire it into an MCP client config (e.g. Claude Desktop, or your own agent) like any other stdio MCP server:
{
"mcpServers": {
"citation-checker": {
"command": "mcp-citation-checker",
"env": {
"ANTHROPIC_API_KEY": "...",
"WEAVIATE_MODE": "cloud",
"WEAVIATE_CLOUD_URL": "...",
"WEAVIATE_API_KEY": "..."
}
}
}
}The server exposes one tool, check_citation(claim, pdf_name, pdf_page), returning "<label>: <one-sentence reasoning>" where <label> is one of supported, contradicted, or not_mentioned.
Writing your own backend
The verification logic (mcp_citation_checker.checker.check_citation) has no storage-specific coupling at all — it only needs claim and a list of chunk dicts (pdf_name/page_number/text). Any backend just needs to implement the SourceLookup shape:
class MyBackend:
def fetch(self, pdf_name: str, page_number: int) -> list[dict]:
# return [{"pdf_name": ..., "page_number": ..., "text": ...}, ...]
...No inheritance required — SourceLookup is a typing.Protocol, so any object with a matching fetch method satisfies it.
Two ways to actually use a custom backend:
Bypass the bundled server entirely: call
checker.check_citation(claim, my_backend.fetch(pdf_name, page))directly from your own code/MCP server — this works today, no changes to this package needed.Wire it into this package's own server: the current version only registers a
weaviatebackend in_get_backend()(src/mcp_citation_checker/__init__.py) — using a different backend through the bundledmcp-citation-checkercommand currently means adding a branch there yourself (a small, welcome PR).
Development
pip install -e ".[weaviate,dev]"
pytestLicense
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only MCP over an agentic SLR workspace with per-claim citation verification
Read-only MCP over an agentic SLR workspace with per-claim citation verification
Experimental MCP server for current empirical verification of explicit public HTTPS endpoint claims.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceA standalone MCP server that validates model output against retrieved sources. It flags any claim, statistic, attribution, quote, or URL that cannot be traced back to a real source.-
- AlicenseAqualityCmaintenanceMCP server for verifying claims against evidence using natural language inference, providing verdicts like Supports, Refutes, or Not Enough Evidence.3491MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server for auditing LaTeX citations and numeric claims in academic papers, verifying numerical values against resolved full-text sources.MIT
- AlicenseAqualityCmaintenanceAn MCP server that verifies the existence, metadata accuracy, and claim support of academic citations by querying sources like OpenAlex, Crossref, and arXiv, enabling AI agents to fact-check references.71MIT