Resolve DOIs, search ~155M scholarly works, and fetch references via the Crossref REST API. STDIO or Streamable HTTP.
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
- !Licence file present but not machine-readable
git clone https://github.com/cyanheads/crossref-mcp-server{
"mcpServers": {
"crossref": {
"command": "node",
"args": ["/path/to/crossref-mcp-server/dist/index.js"]
}
}
}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"> [](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/crossref-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/crossref-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/) [](https://github.com/cyanheads/crossref-mcp-server/releases/latest/download/crossref-mcp-server.mcpb) [](https://cursor.com/en/install-mcp?name=crossref-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvY3Jvc3NyZWYtbWNwLXNlcnZlciJdfQ==) [](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) [](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
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.
[](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
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!