Skip to main content
ClaudeWave
cyanheads avatar
cyanheads

crossref-mcp-server

View on GitHub

Resolve DOIs, search ~155M scholarly works, and fetch references via the Crossref REST API. STDIO or Streamable HTTP.

MCP ServersOfficial Registry3 stars0 forksTypeScriptNOASSERTIONUpdated today
ClaudeWave Trust Score
80/100
Trusted
Passed
  • Actively maintained (<30d)
  • Clear description
  • Topics declared
  • Documented (README)
Flags
  • !Licence file present but not machine-readable
Last scanned: 8/26/2026
Install in Claude Code / Claude Desktop
Method: Manual
Claude Code CLI
git clone https://github.com/cyanheads/crossref-mcp-server
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "crossref": {
      "command": "node",
      "args": ["/path/to/crossref-mcp-server/dist/index.js"]
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
💡 Clone https://github.com/cyanheads/crossref-mcp-server and follow its README for install instructions.
Use cases

MCP Servers overview

<div align="center">
  <h1>@cyanheads/crossref-mcp-server</h1>
  <p><b>Resolve DOIs, search ~155M scholarly works, fetch references, and look up publishers via the Crossref REST API. STDIO or Streamable HTTP.</b>
  <div>7 Tools</div>
  </p>
</div>

<div align="center">

[![Version](https://img.shields.io/badge/Version-0.3.11-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/crossref-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.0.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/crossref-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/crossref-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.0-blueviolet.svg?style=flat-square)](https://bun.sh/)

[![Install in Claude Desktop](https://img.shields.io/badge/Install_in-Claude_Desktop-D97757?style=for-the-badge&logo=anthropic&logoColor=white)](https://github.com/cyanheads/crossref-mcp-server/releases/latest/download/crossref-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=crossref-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvY3Jvc3NyZWYtbWNwLXNlcnZlciJdfQ==) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22crossref-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads/crossref-mcp-server%22%5D%7D)

[![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-67E8F9?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)

</div>

---

## Tools

Seven tools for working with Crossref data — DOI resolution, full-text search across all scholarly works, outgoing reference lists, and journal, funder, and publisher lookup:

| Tool | Description |
|:-----|:------------|
| `crossref_get_work` | Resolve a DOI to its full Crossref metadata record: title, authors, affiliations, abstract (when deposited), journal, publication date, type, license, full-text links, funder acknowledgements, and outgoing reference count. The author list pages by `offset`/`limit`. |
| `crossref_search_works` | Search the Crossref works index by free text and/or structured filters. Supports sort, field selection, a per-work author cap, and cursor-based deep paging. |
| `crossref_get_references` | Return the outgoing reference list for a DOI — the works cited by this paper, with deposited citation strings and resolved DOIs where available |
| `crossref_search_journals` | Find Crossref journal records by ISSN or title query; optionally retrieve a page of the journal's most recent works by publication date. Both lists page by offset. |
| `crossref_search_funders` | Find funders registered in the Crossref Funder Registry by name, bare registry ID, or funder DOI; optionally retrieve a page of funded works. Both lists page by offset. |
| `crossref_get_member` | Resolve a Crossref member ID to its publisher record — name, owned DOI prefixes, DOI counts, per-work-type breakdown, and per-category metadata deposit coverage |
| `crossref_get_prefix` | Resolve a DOI prefix (e.g. `10.1038`) to its owning publisher — name and member ID, chaining into `crossref_get_member` |

### `crossref_get_work`

Resolve a DOI to its canonical Crossref record.

- DOI validated against `10.NNNN/suffix` regex before the upstream call
- Returns title, authors with affiliations, abstract (when deposited), container/journal, publication date, work type, ISSN, license URLs, full-text link URLs, and funder acknowledgements
- The author list is paged with `offset` and `limit` (default 25, max 500). `authorCount` is the full deposited total; when authors remain, the response carries a `nextOffset` to pass back as `offset`. Ordinary records fit in a single page — large-collaboration papers deposit thousands of authors, enough to fill a client's context from one record. Only the author list is paged; every other field comes back in full on every page.
- A funder or an affiliation the publisher asserted through the ROR registry rather than by name carries that identifier as `ror`, and no `name`. The entry still names an organization instead of coming back as an award number with nothing attached to it.
- A date component Crossref records as unknown — it deposits `null` in place of the number — is omitted rather than reported, so a record with no registered year comes back with no publication date.
- The publication date is the first of `published`, `published-print`, `published-online`, and `issued` that names one. The three search tools read the same order without `issued`, which is this tool's alone. A source deposited holding only unknown components names nothing and is passed over; one naming a coarser date than the source behind it still answers, since the four are different facts rather than one fact at four precisions.
- Outgoing references are reported as a count; the entries themselves come from `crossref_get_references`
- Incoming citation count (`is-referenced-by-count`) is included; citing works are not — Crossref does not expose that data. Use OpenAlex for citation graphs.

---

### `crossref_search_works`

Search across ~155M Crossref-registered works.

- Free-text `query` plus a structured `filter` object using Crossref's hyphen-separated key syntax: `from-pub-date`, `until-pub-date`, `type`, `funder`, `issn`, `member`, `has-abstract`, `has-references`, `has-full-text`, `directory` (use `DOAJ` to restrict to open-access content)
- Field-specific query parameters scope matching beyond the generic `query`: `queryTitle`, `queryAuthor`, `queryContainerTitle` (journal/book name), and `queryBibliographic` (whole-citation match to resolve a known reference to its DOI) — all combine with each other and with `query`
- Sort by `relevance`, `is-referenced-by-count`, `published`, `deposited`, or `score`
- `fields` parameter narrows response payload — useful for large result sets. Names are case-sensitive; `DOI` is always returned whether or not it is listed, so every result stays resolvable by `crossref_get_work`.
- Each work returns at most `authorLimit` authors (default 25, max 500), with `authorCount` reporting that work's full deposited total. A single page of large-collaboration papers can carry tens of thousands of author entries; pass a cut work's DOI to `crossref_get_work` to page its whole author list, or raise `authorLimit` to widen the cap here.
- Offset paging up to ~10K results; deep paging requires `cursor=*` on the first call, then pass the returned `nextCursor` token. Cursor and offset cannot be combined.
- A cursor walk ends on the page that omits `nextCursor`. Crossref keeps minting a token past the end of a list, so the token is withheld on an empty page rather than relayed — the rule the `works_cursor` walks below follow too. Here that page also carries a `notice` saying the walk is complete, because `works` is this tool's whole payload and an empty page nothing is said about renders as blank text.

---

### `crossref_get_references`

Fetch the outgoing reference list for a DOI.

- Each reference includes its deposited citation string and, where Crossref has resolved it, a DOI for follow-up lookup
- Citation strings come back with markup removed — inline emphasis (`<i>`, `<em>`, `<small>`, `<span>`), scripts (`<sub>`, `<sup>`, `<inf>`), block boundaries (`<p>`, `<br>`, `<refersplit />`), MathML and TeX formula wrappers, and a whole JATS `<mixed-citation>` deposited into a free-text field. A bracket comes out only when it is a well-formed tag whose element name is on a closed list, so an angle-bracket span that is not one — a cited URL, a Miller index, a DOI fragment, a bracketed phrase — is returned exactly as deposited. A link (`<a>`, `<ext-link>`, `<uri>`) is decided against its own text: its tags come out where the text already carries what the `href` holds, and stay where the `href` addresses something the text does not name.
- Paged with `offset` and `limit` (default 100, max 500). `referenceCount` is the full deposited total; when more remain, the response carries a `nextOffset` to pass back as `offset`. Most works fit in a single page — bibliography records can carry tens of thousands of references.
- Coverage varies by publisher — pre-2000 literature and non-participating publishers may have no reference list
- Single-hop only; agents that need N-hop traversal chain calls explicitly

---

### `crossref_search_journals`

Find journal records by ISSN or title.

- `include_works: true` also returns a page of the journal's most recent works by publication date
- Returns journal title, publisher, ISSN-L, subject areas, and total DOI count
- Title-query results page with `offset`; `journalsTotal` reports the full match count and `nextOffset` carries the input for the following page. The journal works list pages separately with `works_offset` and `nextWorksOffset`.
- The two lists have different ceilings: title search allows `offset + rows` up to 100,000, the works list only 10,000. A page that stops at either ceiling carries a `notice` saying so — a missing continuation offset would otherwise read as the end of the list.
- The journal works list also pages by cursor, which has no ceiling: pass `works_cursor="*"` and chain the `nextWorksCursor` token from each response to read the whole list. A cursor walk starts at the newest work and cannot resume fro
academic-searchai-agentbibliometricsbuncitationcrossrefcyanheadsdoimcpmcp-servermodel-context-protocolresearchscholarly-metadatatypescript

What people ask about crossref-mcp-server

What is cyanheads/crossref-mcp-server?

+

cyanheads/crossref-mcp-server is mcp servers for the Claude AI ecosystem. Resolve DOIs, search ~155M scholarly works, and fetch references via the Crossref REST API. STDIO or Streamable HTTP. It has 3 GitHub stars and its last recorded update is dated 2026-08-25.

How do I install crossref-mcp-server?

+

You can install crossref-mcp-server by cloning the repository (https://github.com/cyanheads/crossref-mcp-server) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is cyanheads/crossref-mcp-server safe to use?

+

Our security agent has analyzed cyanheads/crossref-mcp-server and assigned a Trust Score of 80/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.

Who maintains cyanheads/crossref-mcp-server?

+

cyanheads/crossref-mcp-server is maintained by cyanheads. The last recorded GitHub activity is dated 2026-08-25, with 3 open issues.

Are there alternatives to crossref-mcp-server?

+

Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.

Deploy crossref-mcp-server to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: cyanheads/crossref-mcp-server
[![Featured on ClaudeWave](https://claudewave.com/api/badge/cyanheads-crossref-mcp-server)](https://claudewave.com/repo/cyanheads-crossref-mcp-server)
<a href="https://claudewave.com/repo/cyanheads-crossref-mcp-server"><img src="https://claudewave.com/api/badge/cyanheads-crossref-mcp-server" alt="Featured on ClaudeWave: cyanheads/crossref-mcp-server" width="320" height="64" /></a>

More MCP Servers

crossref-mcp-server alternatives