MCP Server
Markdown (for LLMs)Add academic-citation verification to Claude Desktop, Cursor, or any MCP-compatible client.
What you get
Two tools that wrap the CiteTrue REST API. Same credits, same accuracy — just routed through MCP instead of raw HTTP.
| Tool | Purpose | Credits / call |
|---|---|---|
| verify | Split a text blob into references and verify each against real sources. | 1 per ref; tricky ones up to 5 |
| get_credits | Return the account credit balance. | 0 |
Quickstart
- Go to Dashboard → API Keys and click New API Key. Copy the key starting with
sk_. - Open your MCP client config (see Client setup) and add the citetrue block.
- Restart the MCP client — not just the chat, the whole app.
- Ask the assistant something like "Verify these citations: [paste refs]". It will call verify and summarize.
Client setup
Any stdio MCP client works. Below are the three most common; others use the same config shape.
Claude Desktop
Install CiteTrue as a Claude Desktop extension — no JSON editing, no Node setup. The bundled server runs on the Node that ships with Claude Desktop.
Download for Claude DesktopDouble-click the downloaded file (or drag it into Settings → Extensions) and paste your API key when prompted — it's stored securely in your OS keychain.
Important: after installing, make sure the extension is enabled (toggled on) in Settings → Extensions, then restart Claude Desktop — that's what activates its tools.
Or configure manually
Edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows:
{
"mcpServers": {
"citetrue": {
"command": "npx",
"args": ["-y", "@citetrue/mcp-server"],
"env": {
"CITETRUE_API_KEY": "sk_..."
}
}
}
}Cursor
In Settings → MCP → Add new MCP server, use the same command / args / env shape as the Claude Desktop JSON below.
Windsurf, Zed, others
Any stdio MCP client works — whatever the config path, use the same three fields (command, args, env).
Configuration
| Env var | Default | Notes |
|---|---|---|
| CITETRUE_API_KEY | — (Required) | Bearer token from the dashboard. |
| CITETRUE_API_URL | https://api.citetrue.com | Override for self-hosted deploys. |
Tools
verify
Split a free-form text blob into individual references and verify each against real sources. Every reference goes through the same flow, and each one in the result reports what it cost.
Parameters
Supply exactly one of text or taskHash:
textstring — raw text containing one or more references: numbered / bulleted / blank-line-separated lists, BibTeX, or prose with in-text author-year citations. Max 10MB.taskHashstring — resume a task started by an earlier call (thetaskHashit returned). Finished results are replayed without charging again; citations that still need checking are completed and billed as usual.forcebool, optional — ignore cached results and check the text again from scratch (billed like a new check). Only applies withtext.
Output
{
"taskHash": "...",
"refs": [
{
"hash": "a1b2c3...",
"text": "[1] Vaswani, A., Shazeer, N., Parmar (2017)...",
"assessment": "authentic",
"value": {
"type": "citation",
"title": "Attention is all you need",
"authors": ["A Vaswani", "N Shazeer", "N Parmar"],
"year": 2017,
"url": "https://..."
},
"note": "",
"notices": [],
"confidence": null,
"cost": 1
}
],
"cost": 2,
"balance": 248
}Each ref's cost is what the task has charged for that citation: 1 for most citations, up to 5 for tricky ones that needed more data sources and more analysis, 0 if it was already paid for in another task. Resuming a task with taskHash reports the same per-ref numbers again — they are not new charges. The top-level cost is what this call newly charged (0 when a finished task is simply replayed), and balance is what's left afterwards — it can be negative (see Billing). note is a free-form one-line natural-language explanation in English (intended for end-user display); for programmatic checks, match on notices[] instead.
Assessment values
authentic— paper exists and is the one cited;valuecontains the matched paper.unsure— a close candidate was found but couldn't be confirmed;valueis that candidate andconfidencehow likely it is the cited work.inauthentic— definitively not found / fabricated / unrelated.value, if present, is only the closest candidate — not a match.invalid— input wasn't a citation; pipeline refused to search.error— verification failed on this ref;errors[]lists tokens.exceeded— credits ran out before this ref ran.
Notice values
| Value | Meaning |
|---|---|
doi_incorrect | The DOI written in the citation doesn't exist, or it belongs to a different work. Can come with any assessment: on authentic the work is real but the citation carries the wrong DOI; on unsure / inauthentic it is strong evidence that the reference was made up. |
year | The matched record's year differs from the cited year by two years or more. One-year gaps (online-first vs. print), books (editions) and web pages (page dates) are not flagged. |
link | Only a citation record was matched, with no link to the work itself — other papers cite it, but no direct source was found. |
authors | In-text citations: the cited authors don't fully line up with the matched work. |
title | In-text citations: what the sentence describes doesn't fully line up with the matched work. |
likely, url_inaccessible, url_inconsistent, url_mismatch, url_unsure, url_incorrect | Only on results of older checks that are replayed from cache; current checks don't produce them. |
Notices never change the assessment. New values may appear as more mismatch classes are detected — treat unknown tokens as a generic warning.
Billing
Same credits as the REST API. Most citations cost 1 credit. Tricky ones that need more data sources and more analysis can cost up to 5. If you run out of credits mid-check, citations already in progress still finish; the overage is deducted at your next credit reset, so balance can be negative. Citations that couldn't start for lack of credits come back as exceeded. get_credits is free.
Troubleshooting
If the server fails to start, ensure npx is on PATH and CITETRUE_API_KEY is set.
Maintained by the CiteTrue team · Last updated: