[Agent Tools](https://tools.openkrill.app/) / [Blog](https://tools.openkrill.app/blog)

# How to verify bibliography references, spot hallucinated DOIs and check retractions in one MCP tool

On 2026-10-20, calling `check_references` on [Citation Checker](https://tools.openkrill.app/tools/citations) checked 3 bibliography references in 2,670 ms against Crossref, DataCite and OpenAlex: it confirmed the 2021 AlphaFold paper in *Nature* (`10.1038/s41586-021-03819-2`, `verdict: "found"`, `retraction.status: "none_recorded"`), flagged Wakefield et al. 1998 in *The Lancet* (`10.1016/s0140-6736(97)11096-0`) as `retracted` with both its 2004-03-06 correction DOI and its 2010-02-06 retraction DOI, and returned `verdict: "unavailable"` (rather than a false verdict) on a fabricated 2019 *Nature* neutron-star reference when OpenAlex timed out. A 4-reference call completed in 2,581 ms and also caught a `2019` vs `2021` publication-year mismatch (`verdict: "mismatch"`, `differences: ["year"]`).

Large language models frequently invent plausible-looking bibliography lines by combining real author names, real journal titles such as *Nature* or *The Lancet*, and a fabricated DOI string, or by citing a real paper that was later retracted. Raw Crossref search endpoints return ranked candidate lists without telling you whether a citation actually matches or whether it carries a retraction notice. The [Citation Checker MCP server](https://tools.openkrill.app/tools/citations) (`https://citations.openkrill.app/mcp`) checks 1 to 20 references in a single call with no API key.

## 1. Check a 3-reference bibliography for real DOIs, fake papers and retractions

In our saved 2026-10-20 ranking run, we passed three bibliography strings to `check_references`:

1. **Real paper**: Jumper J, Evans R, Pritzel A, et al., *"Highly accurate protein structure prediction with AlphaFold"*, *Nature* 2021;596:583-589, `doi:10.1038/s41586-021-03819-2`.
2. **Fabricated citation and DOI**: Smith J, Lee K., *"Deep learning predicts quantum gravity corrections in neutron stars"*, *Nature* 2019;570:112-118, `doi:10.1038/s41586-019-1234-9`.
3. **Retracted paper**: Wakefield AJ, Murch SH, Anthony A, et al., *"Ileal-lymphoid-nodular hyperplasia, non-specific colitis, and pervasive developmental disorder in children"*, *Lancet* 1998;351:637-641, `doi:10.1016/S0140-6736(97)11096-0`.

Here is the exact JSON-RPC request:

```
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "check_references",
    "arguments": {
      "references": [
        "Jumper J, Evans R, Pritzel A, et al. Highly accurate protein structure prediction with AlphaFold. Nature. 2021;596:583-589. doi:10.1038/s41586-021-03819-2",
        "Smith J, Lee K. Deep learning predicts quantum gravity corrections in neutron stars. Nature. 2019;570:112-118. doi:10.1038/s41586-019-1234-9",
        "Wakefield AJ, Murch SH, Anthony A, et al. Ileal-lymphoid-nodular hyperplasia, non-specific colitis, and pervasive developmental disorder in children. Lancet. 1998;351:637-641. doi:10.1016/S0140-6736(97)11096-0"
      ]
    }
  }
}
```

In 2,670 ms (`as_of: "2026-10-20T06:08:04.422Z"`), `check_references` returned:

```
{
  "as_of": "2026-10-20T06:08:04.422Z",
  "source": {
    "name": "Crossref, DataCite and OpenAlex",
    "url": "https://api.crossref.org"
  },
  "summary": {
    "found": 2,
    "mismatch": 0,
    "not_found": 0,
    "unavailable": 1,
    "ambiguous": 0,
    "retracted": 1
  },
  "references": [
    {
      "index": 1,
      "verdict": "found",
      "doi": "10.1038/s41586-021-03819-2",
      "title": "Highly accurate protein structure prediction with AlphaFold",
      "authors": ["Jumper", "Evans", "Pritzel", "et al."],
      "year": 2021,
      "venue": "Nature",
      "source": "Crossref",
      "retraction": { "status": "none_recorded" }
    },
    {
      "index": 2,
      "verdict": "unavailable",
      "message": "The DOI does not exist, and no matching paper was found in Crossref, but OpenAlex, which holds most conference papers, could not be searched right now. This is not a verdict; try again in a few minutes."
    },
    {
      "index": 3,
      "verdict": "found",
      "doi": "10.1016/s0140-6736(97)11096-0",
      "title": "RETRACTED: Ileal-lymphoid-nodular hyperplasia, non-specific colitis, and pervasive developmental disorder in children",
      "authors": ["Wakefield", "Murch", "Anthony", "et al."],
      "year": 1998,
      "venue": "The Lancet",
      "source": "Crossref",
      "retraction": {
        "status": "retracted",
        "notices": [
          { "type": "correction", "date": "2004-03-06", "doi": "10.1016/s0140-6736(04)15715-2" },
          { "type": "retraction", "date": "2010-02-06", "doi": "10.1016/s0140-6736(10)60175-4" }
        ]
      }
    }
  ]
}
```

## 2. Catch year, author or title mismatches on real DOIs

When a bibliography line cites a real DOI but has the wrong publication year, first author or title, `check_references` returns `verdict: "mismatch"` and lists the conflicting fields in `differences`. In our 4-reference run on 2026-10-20 (2,581 ms), adding a fourth line that cited the 2021 AlphaFold paper as `Nature. 2019;596:583-589. doi:10.1038/s41586-021-03819-2` produced:

```
{
  "index": 4,
  "verdict": "mismatch",
  "doi": "10.1038/s41586-021-03819-2",
  "title": "Highly accurate protein structure prediction with AlphaFold",
  "authors": ["Jumper", "Evans", "Pritzel", "et al."],
  "year": 2021,
  "venue": "Nature",
  "source": "Crossref",
  "retraction": { "status": "none_recorded" },
  "differences": ["year"],
  "message": "Matches a real paper, but the year in the reference differs from the record shown."
}
```

## 3. How Citation Checker compares with Crossref Simple Text Query, Crossref REST API and scite

On 2026-10-20 we tested the same 3-reference list across [Citation Checker](https://tools.openkrill.app/tools/citations) and three alternatives:

| Tool | Wall time | Fake #2 (`10.1038/s41586-019-1234-9`) | Retracted #3 (Wakefield 1998) |
| --- | --- | --- | --- |
| **OpenKrill Citation Checker** (`check_references`) | 2,670 ms (1 call for all 3) | Reports DOI does not exist and no match in Crossref (`verdict: "unavailable"` while OpenAlex is unreachable) | Flags `retraction.status: "retracted"` with 2004 correction DOI and 2010 retraction DOI |
| **Crossref Simple Text Query** (`apps.crossref.org/SimpleTextQuery`) | 1,780 ms | Leaves reference #2 without a DOI link, with no verdict word | Links to `10.1016/s0140-6736(97)11096-0` with no retraction flag |
| **Crossref REST API** (`api.crossref.org/works?query.bibliographic=`) | 4,045 ms (3 calls, 1 per reference) | Returns an unrelated real neutron-star paper as the top hit with no verdict | Returns the Wakefield record as top hit; requires custom code to inspect update-to notices |
| **scite Reference Check** (`scite.ai/reference-check`) | Not run | Blocked without login | Requires a scite account and a paid subscription plan |

## 4. Connect Citation Checker in ChatGPT, Claude, Cursor, VS Code or Pi

Add `https://citations.openkrill.app/mcp` to your client or follow the step-by-step setup guides for [ChatGPT](https://tools.openkrill.app/integrations/citations/chatgpt), [Claude](https://tools.openkrill.app/integrations/citations/claude), [Cursor](https://tools.openkrill.app/integrations/citations/cursor), [VS Code](https://tools.openkrill.app/integrations/citations/vscode) and [Pi](https://tools.openkrill.app/integrations/citations/pi):

```
{
  "mcpServers": {
    "citations": {
      "type": "streamable-http",
      "url": "https://citations.openkrill.app/mcp"
    }
  }
}
```

## Frequently asked questions

### How can I check a list of references in a paper to see which DOIs are real, mismatched or retracted?

Pass 1 to 20 bibliography strings to `check_references` on `https://citations.openkrill.app/mcp`. In one call, the server checks each reference against Crossref, DataCite and OpenAlex, returning a per-reference `verdict` (`found`, `mismatch`, `not_found`, `ambiguous` or `unavailable`), the matched DOI, title, authors, year and venue, any field differences, and a `retraction` status block.

### How does Citation Checker report retractions and corrections on a cited paper?

For every matched DOI, `check_references` inspects Crossref update-to notices and OpenAlex retraction flags. On Wakefield et al. 1998 (`10.1016/s0140-6736(97)11096-0`), it returns `retraction.status: "retracted"` along with both dated notices: the 2004-03-06 correction (`10.1016/s0140-6736(04)15715-2`) and the 2010-02-06 retraction (`10.1016/s0140-6736(10)60175-4`).

### What happens when a citation has a real DOI but the wrong publication year in my bibliography?

When a DOI resolves or a title matches a known work but your citation text disagrees on the year, title or first author (such as citing the 2021 AlphaFold Nature paper as 2019), `check_references` sets `verdict: "mismatch"` and lists the conflicting fields in `differences` (for example `["year"]`).

### Why did Citation Checker return verdict unavailable instead of not_found on the fake Smith & Lee 2019 Nature reference?

DOI `10.1038/s41586-019-1234-9` did not exist and Crossref had no matching paper, but OpenAlex (which holds many conference papers) could not be searched during that call. Rather than guess `not_found` from an incomplete search, Citation Checker returns `verdict: "unavailable"` with an explicit retry message.

## Sources

- [Crossref REST API and Crossmark Retraction Metadata Documentation](https://www.crossref.org/documentation/retrieve-metadata/rest-api/)
- [DataCite REST API Documentation](https://support.datacite.org/docs/api)
- [OpenAlex API Documentation](https://docs.openalex.org/)
- [OpenKrill Citation Checker MCP Server Documentation](https://tools.openkrill.app/tools/citations)
