Add academic-citation verification to Claude Desktop, Cursor, or any MCP-compatible client.

@citetrue/mcp-servernpx -y @citetrue/mcp-server

What you get

Two tools that wrap the CiteTrue REST API. Same credits, same accuracy — just routed through MCP instead of raw HTTP.

ToolPurposeCredits / call
verifySplit a text blob into references and verify each against real sources.1 per ref; tricky ones up to 5
get_creditsReturn the account credit balance.0

Quickstart

  1. Go to Dashboard → API Keys and click New API Key. Copy the key starting with sk_.
  2. Open your MCP client config (see Client setup) and add the citetrue block.
  3. Restart the MCP client — not just the chat, the whole app.
  4. 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

Recommended

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 Desktop

Double-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 varDefaultNotes
CITETRUE_API_KEY— (Required)Bearer token from the dashboard.
CITETRUE_API_URLhttps://api.citetrue.comOverride 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:

  • text string — raw text containing one or more references: numbered / bulleted / blank-line-separated lists, BibTeX, or prose with in-text author-year citations. Max 10MB.
  • taskHash string — resume a task started by an earlier call (the taskHash it returned). Finished results are replayed without charging again; citations that still need checking are completed and billed as usual.
  • force bool, optional — ignore cached results and check the text again from scratch (billed like a new check). Only applies with text.

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; value contains the matched paper.
  • unsure — a close candidate was found but couldn't be confirmed; value is that candidate and confidence how 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

ValueMeaning
doi_incorrectThe 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.
yearThe 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.
linkOnly a citation record was matched, with no link to the work itself — other papers cite it, but no direct source was found.
authorsIn-text citations: the cited authors don't fully line up with the matched work.
titleIn-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_incorrectOnly 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: