cyanheads avatar

Crossref Mcp Server

cyanheads/crossref-mcp-server

Connects Claude to Crossref's 155 million scholarly works through five tools: resolve DOIs to full metadata records including authors, abstracts, and references; search the works index with structured filters for publication date, funders, ISSN, and open access status; extract outgoing reference lists with resolved DOIs; and look up journals and funders with optional work retrieval. Built on the mcp-ts-core framework with cursor-based deep paging past the 10k offset limit and polite pool access when you provide an email address. Handles Crossref's hyphenated filter syntax and validates it before upstream calls. Useful for literature review, citation analysis, and metadata extraction workflows where you need programmatic access to scholarly publication data.

GitHub stars
4
tools
7
transport
STDIO, HTTP
env vars
9
last updated
Nov 11, 2026

Install

From registry metadata
$ npx add-mcp https://crossref.caseyjhand.com/mcp --name crossref

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http crossref https://crossref.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 7 tools

Verified live against the running server on Nov 6, 2026.

crossref_get_workResolves a DOI to its full Crossref metadata record: title, authors, editors, affiliations, abstract (when deposited), journal or container with the volume, issue, pages, and article number that locate the work in it, ISSNs and ISBNs, publication date, type, license, full-text...3 params

Resolves a DOI to its full Crossref metadata record: title, authors, editors, affiliations, abstract (when deposited), journal or container with the volume, issue, pages, and article number that locate the work in it, ISSNs and ISBNs, publication date, type, license, full-text...

Parameters* required
doi*string
DOI in the format "10.NNNN/suffix", e.g. "10.1038/nature12373". A resolver-wrapped form — "https://doi.org/10.1038/nature12373", "https://dx.doi.org/…", "doi:10.1038/nature12373" — is accepted and...
limitinteger
Maximum number of authors to return in one page (1–10000 per call, default 25). A larger value, up to 100000, returns 10000 and says so in notice; nextOffset continues after the authors returned. O...default: 25
offsetinteger
Zero-based index of the first author to return. Pass the nextOffset value from the previous response to continue through a long author list. Only the author list is paged; every other field of the...default: 0
crossref_get_referencesReturns the outgoing reference list for a DOI — the works cited by this paper. Each reference includes the deposited citation string and, where Crossref has resolved it, a DOI you can look up with crossref_get_work. Results are paged: referenceCount is the full deposited total...3 params

Returns the outgoing reference list for a DOI — the works cited by this paper. Each reference includes the deposited citation string and, where Crossref has resolved it, a DOI you can look up with crossref_get_work. Results are paged: referenceCount is the full deposited total...

Parameters* required
doi*string
DOI in the format "10.NNNN/suffix", e.g. "10.1038/nature12373". A resolver-wrapped form — "https://doi.org/10.1038/nature12373", "https://dx.doi.org/…", "doi:10.1038/nature12373" — is accepted and...
limitinteger
Maximum number of references to return in one page (1–2500 per call, default 100). A larger value, up to 100000, returns 2500 and says so in notice; nextOffset continues after the references return...default: 100
offsetinteger
Zero-based index of the first reference to return. Pass the nextOffset value from the previous response to continue through a long reference list.default: 0
crossref_search_worksSearches the Crossref works index (~188M records) by free text and/or structured filters. The generic query matches loosely across all fields; scope precisely with the field-specific parameters queryTitle, queryAuthor, and queryContainerTitle, or resolve a known citation to it...13 params

Searches the Crossref works index (~188M records) by free text and/or structured filters. The generic query matches loosely across all fields; scope precisely with the field-specific parameters queryTitle, queryAuthor, and queryContainerTitle, or resolve a known citation to it...

Parameters* required
authorLimitinteger
Maximum number of authors to return per work (1–500 per call, default 25; a larger value, up to 100000, applies 500 and says so in notice). Ordinary records fit under the default; large-collaborati...default: 25
cursorstring
Cursor token for deep paging. Pass "*" to start cursor-based paging (required past ~10K results), then pass the nextCursor value from each response until a response omits it, which means the list i...
fieldsarray
Fields to return (reduces payload). Names are case-sensitive, and each fills one output field: DOI → doi, title → title, type → type, author → authors and authorCount, published / published-print /...
filterobject
Structured filter object using Crossref hyphen-separated keys. All values must be strings. Boolean flag keys (has-abstract, has-references, has-full-text) require string values "true" or "false". E...
offsetinteger
Zero-based result offset for offset-based paging. Cannot be used with cursor. Capped at ~10K: offset + rows cannot pass it, so a page that would returns the rows that fit and says so in notice, and...
ordervalue
Sort direction (asc or desc). Applies only alongside sort; without one it has no effect.
querystring
Free-text search query, e.g. "CRISPR gene editing" or "climate change adaptation"
queryAuthorstring
Match against author names only, e.g. "Charles R. Harris".
queryBibliographicstring
Whole-citation match to resolve a known reference to its DOI. Combine title, author, year, and container into one string, e.g. "Watson Crick molecular structure of nucleic acids Nature 1953".
queryContainerTitlestring
Match against the container title (journal or book name) only, e.g. "Nature".
queryTitlestring
Match against work titles only, e.g. "Array programming with NumPy".
rowsinteger
Number of results to return per page (1–250 per call, default 20). A larger value, up to 1000, returns 250 and says so in notice — on an offset page the notice also names the offset that continues...default: 20
sortvalue
Sort field. Omitted, an offset page with a query term is ranked by relevance, and so is a cursor walk with one (sent as score). The publication-date sorts (published, published-print, published-onl...
crossref_search_journalsFinds Crossref journal records by ISSN or title query. Provide issn for an exact single-journal lookup, or query for title-based search returning up to rows results. Title-query results page with offset — the nextOffset enrichment carries the value for the following page, up t...7 params

Finds Crossref journal records by ISSN or title query. Provide issn for an exact single-journal lookup, or query for title-based search returning up to rows results. Title-query results page with offset — the nextOffset enrichment carries the value for the following page, up t...

Parameters* required
include_worksboolean
When true, also return a page of the journal's most recent works — newest published first on an offset page, newest registered first on a works_cursor walk. Requires an unambiguous journal — pass i...default: false
issnvalue
ISSN for exact single-journal lookup (print or electronic, with or without hyphen). Example: "1234-5678".
offsetinteger
Zero-based offset into the title-query journal list. Pass the nextOffset value from the previous response to continue. Capped at offset + rows = 100000: a page that would pass it returns the journa...default: 0
querystring
Journal title search query, e.g. "Nature" or "Journal of Machine Learning Research"
rowsinteger
Maximum number of journals to return for title queries, or works when include_works is true (1–500 per call, default 10). A larger value, up to 1000, returns 500 and says so in notice; nextOffset a...default: 10
works_cursorstring
Cursor token for deep paging of the journal works list when include_works is true. Pass "*" to start the walk at the most recently registered work, then pass the nextWorksCursor value from each res...
works_offsetinteger
Zero-based offset into the journal works list when include_works is true. Pass the nextWorksOffset value from the previous response to continue. Capped at works_offset + rows = 10000: a page that w...default: 0
crossref_search_fundersFinds funders registered in the Crossref Funder Registry by name or funder DOI. Provide funder_doi for an exact single-funder lookup — the full DOI ("10.13039/100000001"), the bare registry ID ("100000001"), or either behind a doi: or https://doi.org/ prefix — or query for nam...7 params

Finds funders registered in the Crossref Funder Registry by name or funder DOI. Provide funder_doi for an exact single-funder lookup — the full DOI ("10.13039/100000001"), the bare registry ID ("100000001"), or either behind a doi: or https://doi.org/ prefix — or query for nam...

Parameters* required
funder_doivalue
Funder DOI for exact lookup — the full DOI "10.13039/100000001" (NSF) or the bare registry ID "100000001". Supersedes query when provided.
include_worksboolean
When true, also return a page of works funded by the matched funder. Requires an unambiguous funder — pass funder_doi when a name query matches more than one.default: false
offsetinteger
Zero-based offset into the name-query funder list. Pass the nextOffset value from the previous response to continue. Capped at offset + rows = 100000: a page that would pass it returns the funders...default: 0
querystring
Funder name search query, e.g. "National Science Foundation" or "Wellcome Trust"
rowsinteger
Maximum funders to return for name queries, or works when include_works is true (1–1000, default 10).default: 10
works_cursorstring
Cursor token for deep paging of the funded-works list when include_works is true. Pass "*" to start the walk at the most recently registered work, then pass the nextWorksCursor value from each resp...
works_offsetinteger
Zero-based offset into the funded-works list when include_works is true. Pass the nextWorksOffset value from the previous response to continue. Capped at works_offset + rows = 10000: a page that wo...default: 0
crossref_get_memberResolves a Crossref member ID to its publisher/organization record: primary name, alternate imprint names, owned DOI prefixes, registered DOI counts, a per-work-type breakdown, and per-category metadata deposit coverage. Members are the organizations that register DOIs with Cr...1 params

Resolves a Crossref member ID to its publisher/organization record: primary name, alternate imprint names, owned DOI prefixes, registered DOI counts, a per-work-type breakdown, and per-category metadata deposit coverage. Members are the organizations that register DOIs with Cr...

Parameters* required
member_id*integer
Crossref member ID — a positive integer, e.g. 297 (Springer) or 340 (PLOS). A DOI's current member is the memberId crossref_get_work returns for it.
crossref_get_prefixResolves a DOI prefix — the registrant portion of a DOI, e.g. "10.1038" — to the Crossref member its prefix record names: the publisher name and numeric member ID. That member is the prefix's registrant, so for a title transferred to another publisher it is not the member hold...1 params

Resolves a DOI prefix — the registrant portion of a DOI, e.g. "10.1038" — to the Crossref member its prefix record names: the publisher name and numeric member ID. That member is the prefix's registrant, so for a title transferred to another publisher it is not the member hold...

Parameters* required
prefix*string
DOI prefix in the format "10.NNNN" — the registrant portion of a DOI with no "/suffix", e.g. "10.1038" or "10.1371".

Sponsors

Configuration

CROSSREF_MAILTO

Email for polite-pool User-Agent header — optional. Without: anonymous pool with stricter rate limits.

CROSSREF_BASE_URLdefault: https://api.crossref.org

Override the Crossref API base URL. Defaults to https://api.crossref.org.

CROSSREF_TIMEOUT_MSdefault: 10000

Per-request timeout in milliseconds.

MCP_LOG_LEVELdefault: info

Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_AUTH_MODEdefault: none

Authentication mode to use: 'none', 'jwt', or 'oauth'.

Readme

@cyanheads/crossref-mcp-server

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

7 Tools • 1 Resource

Details

Repository
github.com/cyanheads/crossref-mcp-server
Category
Search & Web Crawling
Package
@cyanheads/crossref-mcp-server
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
1
Tools verified
Nov 6, 2026

More from cyanheads

Related Search & Web Crawling MCP servers

View all
1cyanheads avatarInternet Archive Mcp Servercyanheads/internet-archive-mcp-serverSearch the Wayback Machine and IA library (40M+ items), fetch snapshots, item metadata, and text.4stars
2cyanheads avatarMet Museum Mcp Servercyanheads/met-museum-mcp-serverSearch the Met collection, browse by department or update date, fetch full records and CC0 images.4stars
3cyanheads avatarOpenlibrary Mcp Servercyanheads/openlibrary-mcp-serverSearch books and authors, fetch editions, browse subjects, and resolve cover images.4stars
4ofershap avatarScraperofershap/mcp-server-scraperWeb scraping MCP — extract clean markdown, links, and metadata from any URL.4stars
5thinkchainai avatarUK Parliament MCP Server from MCPBundlesthinkchainai/mcpbundlesSearch MPs and Lords, fetch profiles, synopses, and Westminster constituencies3stars
6cyanheads avatarWikidata Mcp Servercyanheads/wikidata-mcp-serverSearch and fetch Wikidata entities, execute SPARQL queries, and resolve external identifiers.3stars