Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.cyanheads/crossref-mcp-server

REMOTE · CROSSREF.CASEYJHAND.COM · 2 COMPONENTS

Resolve DOIs, search ~188M scholarly works, and fetch references via the Crossref REST API.

0 this week 88 Trust /100

Last scanned (3 hours ago)

Scores higher than 96% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Education and Research

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security83
Transport & Reachability100
Schema Quality & AI Usability73
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4528 tokens (~566/item across 8 items; 7 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 7 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 9 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 0
    • Tool “crossref_get_member” rewrote its description, which is the text the model reads security
    • Tool “crossref_get_prefix” rewrote its description, which is the text the model reads security
    • Tool “crossref_get_work” rewrote its description, which is the text the model reads security
    • Tool “crossref_search_funders” rewrote its description, which is the text the model reads security
    • Tool “crossref_search_journals” rewrote its description, which is the text the model reads security
    • Server version: 0.5.0 → 0.5.1 functional
    • “crossref_get_member” reworded the description of “member_id” cosmetic
    • “crossref_get_references” reworded the description of “limit” cosmetic
    • “crossref_get_work” reworded the description of “limit” cosmetic
    • “crossref_search_funders” reworded the description of “offset” cosmetic
    • “crossref_search_funders” reworded the description of “rows” cosmetic
    • “crossref_search_funders” reworded the description of “works_offset” cosmetic
    • “crossref_search_journals” reworded the description of “include_works” cosmetic
    • “crossref_search_journals” reworded the description of “offset” cosmetic
    • “crossref_search_journals” reworded the description of “rows” cosmetic
    • “crossref_search_journals” reworded the description of “works_offset” cosmetic
    • “crossref_search_works” reworded the description of “fields” cosmetic
    • “crossref_search_works” reworded the description of “offset” cosmetic
    • “crossref_search_works” reworded the description of “rows” cosmetic
  • 28 Oct 26 +2
    • Schema quality: 582 → 521 ▲ functional
    • First check of Schema quality: 100 functional
    • New resource “crossref-guide” functional
    • Server version: 0.4.4 → 0.5.0 functional
  • 24 Oct 26 +3
    • Stability: fail → pass ▲ security
    • Server version: 0.4.3 → 0.4.4 functional
  • 23 Oct 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “crossref_search_journals” rewrote its description, which is the text the model reads security
    • Tool “crossref_search_works” rewrote its description, which is the text the model reads security
    • Schema quality: 516 → 582 ▼ functional
    • Server version: 0.4.2 → 0.4.3 functional
    • “crossref_search_works” reworded the description of “order” cosmetic
    • “crossref_search_works” reworded the description of “sort” cosmetic
    • “crossref_get_references” reworded the description of “limit” cosmetic
    • “crossref_search_journals” reworded the description of “rows” cosmetic
    • “crossref_search_funders” reworded the description of “rows” cosmetic
    • “crossref_get_work” reworded the description of “limit” cosmetic
    • “crossref_search_works” reworded the description of “authorLimit” cosmetic
    • “crossref_search_works” reworded the description of “cursor” cosmetic
    • “crossref_search_works” reworded the description of “fields” cosmetic
    • “crossref_search_works” reworded the description of “rows” cosmetic
  • 18 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 72 to 75.

  • 16 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 65 to 69.

  • 14 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 59 to 62.

  • 12 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 49 to 55.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://crossref.caseyjhand.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=caseyjhand.com CN=WE1,O=Google Trust Services,C=US 2 Nov 2026 31 Jan 2027 ECDSA 256 ECDSA-SHA256 995a30681ab772540e934241ca1d576c
SANs: caseyjhand.com, *.caseyjhand.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC secure

Validation of crossref.caseyjhand.com. — Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
caseyjhand.com. present 2371 13 Verified
crossref.caseyjhand.com. Verified address RRset verified with the apex keys
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://crossref.caseyjhand.com/mcp Verified 200
http (plaintext) http://crossref.caseyjhand.com/mcp HTTPS enforced 301 https://crossref.caseyjhand.com/mcp
MCP tools · 7 exposed · ~4,130 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
crossref_get_member ~197

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 Crossref, so this answers "what does this publisher publish, and how completely do they deposit metadata?" The member that holds a DOI now is the memberId crossref_get_work or crossref_search_works returns for it — pass that ID here. crossref_get_prefix returns the member a DOI prefix record names, the prefix's registrant, which for a transferred title is a former publisher rather than the DOI's current one.

NameTypeReqDescription
member_idintegeryesCrossref 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.
NameTypeReqDescription
countsobject–Registered DOI counts
coveragearray–Per-category metadata deposit coverage — each a 0–1 fraction split into current (recent) and backfile (older) DOIs. Signals how completely this publisher deposits references, abstracts, ORCIDs, funde…
depositsboolean–Whether the member deposits any metadata with Crossref
depositsArticlesboolean–Whether the member deposits journal-article metadata
errorobject–Present when the call failed. Absent on success.
idnumber–Crossref member ID
locationstring–Publisher location (city, region, country)
namesarray–Alternate and imprint names registered under this member
prefixesarray–DOI prefixes owned by this member, e.g. "10.1038"
primaryNamestring–Primary publisher/organization name
worksByTypearray–DOI counts broken down by work type (all DOIs), sorted by count descending

No examples provided.

crossref_get_prefix ~172

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 holding the DOI now — crossref_get_work's memberId names that one. The Crossref prefix record carries only these three facts (no counts, coverage, or flags); the returned memberId chains directly into crossref_get_member for the full publisher record.

NameTypeReqDescription
prefixstringyesDOI prefix in the format "10.NNNN" — the registrant portion of a DOI with no "/suffix", e.g. "10.1038" or "10.1371".
NameTypeReqDescription
errorobject–Present when the call failed. Absent on success.
memberIdnumber–Numeric Crossref member ID the prefix record names — pass to crossref_get_member for the full publisher record. For a transferred title it is a former publisher; a DOI's current member is the memberI…
ownerNamestring–Name of the member (publisher) the prefix record names — its registrant
prefixstring–The DOI prefix that was resolved, e.g. "10.1038"

No examples provided.

crossref_get_references ~313

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, and when more remain the response carries a nextOffset to pass back as offset. Reference list coverage varies by publisher; many older works and non-participating publishers have no indexed references. Incoming citations — the works that cite this paper — are not available through Crossref; use OpenAlex for that.

NameTypeReqDescription
doistringyesDOI 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 un…
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 returned…
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.
NameTypeReqDescription
capnumber–The limit that was applied to this page.
doistring–DOI of the citing work
errorobject–Present when the call failed. Absent on success.
nextOffsetnumber–Offset to pass in the next call to retrieve the following page. Absent when this page reaches the end of the reference list.
noticestring–Coverage guidance when no references are indexed, a range explanation when the requested offset is past the end of the list, or which references this page covers and the offset that reaches the next…
offsetnumber–Zero-based index of the first returned reference within the deposited list
referenceCountnumber–Total number of references in the deposited list
referencesarray–Page of the outgoing reference list
shownnumber–Number of references returned in this page.
truncatedboolean–True when references remain beyond this page. Absent when the page is the last.

No examples provided.

crossref_get_work ~572

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 links, and funder acknowledgements. The author list is paged: authorCount is the full deposited total, offset and limit select the page (25 authors by default), and when authors remain the response carries a nextOffset to pass back as offset — large-collaboration papers deposit thousands. Post-publication updates are relayed as Crossref records them: updatedBy names each correction, retraction, expression of concern, or new version issued against this work, with its notice DOI and whether the publisher or Retraction Watch recorded it, and updateTo names the works this record is itself a notice for. An absent updatedBy does not mean the work was never updated — coverage depends on those deposits. relations lists related identifiers, such as a preprint and its published version, grouped by relation type; only the Crossref-registered DOIs among them resolve through crossref_get_work. memberId is the Crossref member that holds the DOI now — pass it to crossref_get_member for the publisher record and its deposit coverage; the prefix of the DOI names the member that registered the prefix, which for a transferred title is a former publisher. Outgoing references are reported as a count in referencesCount; the reference entries themselves come from crossref_get_references. The isReferencedByCount field reports the total incoming citation count from Crossref; the citing works themselves are not available through Crossref — use OpenAlex for citation graphs.

NameTypeReqDescription
doistringyesDOI 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 un…
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. Ord…
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 re…
NameTypeReqDescription
abstractstring–Abstract when deposited by the publisher. Many records lack abstracts. Publishers deposit it as JATS XML, so this is the text of that deposit with markup removed and character references decoded; num…
articleNumberstring–Article number, deposited by journals that number articles instead of paging them
authorCountnumber–Total number of authors in the deposited list, before offset and limit were applied. Omitted alongside authors when the record deposits no author field.
authorsarray–Page of the author and contributor list, bounded by limit. Omitted when the record deposits no author field at all.
capnumber–The limit that was applied to this page of authors.
containerTitlestring–Journal, book, or proceedings name containing this work — the first entry of containerTitles
containerTitlesarray–Every container title the record deposits, in deposited order. A book chapter or proceedings paper often deposits two: the series, then the book or volume. Omitted when the record deposits none.
doistring–Canonical DOI
editorsarray–Editors of the work, or of the book or proceedings containing it, in the entry shape authors use. Returned whole — never paged by offset and limit, and never counted in authorCount. Omitted when the…
errorobject–Present when the call failed. Absent on success.
fundersarray–Funding acknowledgements
isReferencedByCountnumber–Incoming citation count from Crossref — the count of works citing this DOI
isbnarray–ISBN(s) as deposited — for a book chapter, those of the containing book. Omitted when the record deposits none.
issnarray–ISSN(s) of the containing journal
issuestring–Issue of the container the work appears in
languagestring–Language code (ISO 639)
licensesarray–License terms
linksarray–Registered full-text links
memberIdnumber–Crossref member ID of the publisher that holds this DOI now — pass to crossref_get_member for its record. The DOI's prefix names the member that registered the prefix, which for a transferred title i…
nextOffsetnumber–Offset to pass in the next call to retrieve the following page of authors. Absent when this page reaches the end of the author list.
noticestring–When updatedBy is present, the update types Crossref records for this work with the source of each, and where the notice is read. Then, when limit was above its per-call cap, the value requested and…
offsetnumber–Zero-based index of the first returned author within the deposited list. Omitted alongside authors when the record deposits no author field.
pagestring–Page range as deposited, e.g. "357-362"
publishedobject–Publication date — the first of published, published-print, published-online, and issued that names one. A component Crossref records as unknown is omitted, and so is every component below it.
publisherstring–Publisher name
referencesCountnumber–Number of outgoing references (works cited by this paper)
relationsarray–Related identifiers — preprints and published versions, other versions, reviews, supplements, parts — grouped by relation type, identifier type, and asserting party, groups in Crossref's order and id…
shownnumber–Number of authors returned in this page.
subjectarray–Subject classification terms
subtitlestring–Subtitle when present
titlestring–Work title
truncatedboolean–True when authors remain beyond this page. Absent when the page is the last.
typestring–Work type (e.g. journal-article, book-chapter, posted-content)
updateToarray–Works this record is an update notice for, in the entry shape updatedBy uses and in deposited order. Omitted when the record is not registered as a notice.
updatedByarray–Update notices Crossref records against this work — corrections, errata, retractions, expressions of concern, withdrawals, new versions — in deposited order. Entries are never merged: the same notice…
urlstring–DOI resolution URL
volumestring–Volume of the container the work appears in

No examples provided.

crossref_search_funders ~889

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 name-based search. Name-query results page with offset — the nextOffset enrichment carries the value for the following page, up to offset + rows = 100000. Set include_works to true to also return a page of the most recent works funded by the matched funder; that list pages two ways, in two orders. works_offset is the simple one: newest published first, capped ten times lower at works_offset + rows = 10000. works_cursor has no ceiling and reaches the whole funded-works list, newest registered first — ordered by the date each DOI was registered with Crossref, since Crossref does not walk a publication-date sort by cursor: pass works_cursor="*" on the first call, then chain the nextWorksCursor token from each response. The two cannot be combined, and a cursor walk always starts at the most recently registered work — it cannot resume from an offset. This list also counts works funded by the funder's registry descendants, which a crossref_search_works filter on {"funder": "10.13039/<id>"} does not; a funder_doi lookup returns those descendants' registry IDs as descendants, and the funder's own ID OR'd with each of them in the funder filter ({"funder": "<id>,funder:<descendant>,…"}) counts the same scope with date, type, or other filters. Returns funder name, registry ID, country, and alternate names, plus the work count of the ID alone on a funder_doi lookup. The Funder Registry supersedes entries, and a deprecated one answers to the same names as its successor while carrying only a fraction of its works: such a record carries replacedBy with the superseding registry ID and the response carries a notice naming it. The replacement is never followed automatically — re-run with funder_doi set to that ID…

NameTypeReqDescription
funder_doi––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.
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 th…
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).
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 respon…
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 woul…
NameTypeReqDescription
errorobject–Present when the call failed. Absent on success.
fundedWorksarray–Page of works funded by the matched funder, newest first — by publication date on an offset page, by Crossref registration date on a works_cursor page. Only present when include_works is true.
fundedWorksTotalnumber–Total count of funded works for the matched funder, including works funded by its registry descendants, when include_works is true
funderCountnumber–Number of funder records returned in this page
fundersarray–Matching funder records
fundersTotalnumber–Total funder records matching the query in Crossref
nextOffsetnumber–Value to pass as offset on the next call for the following page of funders. Absent when this page ends the matches or reaches the 100000-record offset ceiling.
nextWorksCursorstring–Value to pass as works_cursor on the next call for the following page of funded works. Present only on a page requested with works_cursor, and absent once the walk reaches the end of the works list.
nextWorksOffsetnumber–Value to pass as works_offset on the next call for the following page of funded works. Absent when this page ends the works list, reaches the 10000-record offset ceiling, or was requested with works_…
noticestring–Guidance on a page that needs a caveat: a query nothing matched, an offset or works_offset past the end of a list that did match, a page whose offset + rows would pass one of the route offset ceiling…

No examples provided.

crossref_search_journals ~783

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 to offset + rows = 100000. Set include_works to true to also return a page of the matched journal's most recent works — the works deposited under any of its ISSNs, whichever one you passed; that list pages two ways, in two orders. works_offset is the simple one: newest published first, capped ten times lower at works_offset + rows = 10000. works_cursor has no ceiling and reaches the whole works list, newest registered first — ordered by the date each DOI was registered with Crossref, since Crossref does not walk a publication-date sort by cursor: pass works_cursor="*" on the first call, then chain the nextWorksCursor token from each response. The two cannot be combined, and a cursor walk always starts at the most recently registered work — it cannot resume from an offset. Returns journal metadata: title, publisher, ISSNs with their print or electronic form, subject areas, DOI counts (total, current, backfile), and per-category metadata deposit coverage — how completely the journal deposits abstracts, references, ORCIDs, funders, licenses, and similar metadata. An issn lookup also returns DOI counts by issued year.

NameTypeReqDescription
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 iss…
issn––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 journals…
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 and…
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 respo…
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 wou…
NameTypeReqDescription
errorobject–Present when the call failed. Absent on success.
journalCountnumber–Number of journal records returned in this page
journalsarray–Matching journal records
journalsTotalnumber–Total journal records matching the query in Crossref
nextOffsetnumber–Value to pass as offset on the next call for the following page of journals. Absent when this page ends the matches or reaches the 100000-record offset ceiling.
nextWorksCursorstring–Value to pass as works_cursor on the next call for the following page of works. Present only on a page requested with works_cursor, and absent once the walk reaches the end of the works list.
nextWorksOffsetnumber–Value to pass as works_offset on the next call for the following page of works. Absent when this page ends the works list, reaches the 10000-record offset ceiling, or was requested with works_cursor.
noticestring–Guidance on a page that needs a caveat: a query nothing matched, an offset or works_offset past the end of a list that did match, a page whose offset + rows would pass one of the route offset ceiling…
recentWorksarray–Page of works from the matched journal, newest first — by publication date on an offset page, by Crossref registration date on a works_cursor page. Requires include_works, and absent even then when t…
worksTotalnumber–Total works deposited under any of the journal's ISSNs, when include_works is true

No examples provided.

crossref_search_works ~1,204

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 its DOI with queryBibliographic — all combine with each other and with query. Use the filter parameter for structured filtering (object with hyphen-separated Crossref keys). Sort options: relevance, score, is-referenced-by-count, published, deposited, indexed, created. Each work returns at most authorLimit authors (25 by default) with authorCount reporting the full deposited total, since a single page of large-collaboration papers can carry tens of thousands of author entries; crossref_get_work pages the whole author list for any DOI whose list was cut. Post-publication updates ride each work as Crossref records them: updatedBy names each correction, retraction, expression of concern, or new version issued against it, and updateTo the works it is itself a notice for — an absent updatedBy does not mean the work was never updated. Offset-based paging is capped at ~10K results; use cursor="*" to start cursor-based deep paging, then pass the nextCursor value from each response to continue. A walk with a query term and no sort runs by relevance, one with filters only in Crossref registration order. The walk ends on the page where nextCursor is absent — that page also carries a notice saying the list is exhausted. Cursor and offset cannot be combined.

NameTypeReqDescription
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-collaboration…
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 is…
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 / p…
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". Exa…
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 a…
order––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 af…
sort––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-onlin…
NameTypeReqDescription
capnumber–The per-work author cap applied to this page. Absent when no list was cut.
errorobject–Present when the call failed. Absent on success.
nextCursorstring–Cursor token to pass as cursor on the next call to continue a cursor walk. Present only on a page requested with cursor, and absent once the walk reaches the end of the list.
noticestring–Guidance on an empty page, naming which of its three causes applies: a query nothing matched, an offset past the end of a list that did match, or a cursor walk that has reached the end of the list. O…
returnednumber–Number of records returned in this response
totalResultsnumber–Total matching records in Crossref
truncatedboolean–True when at least one work on this page had its author list cut by authorLimit. Absent when every work on the page carries its full deposited author list.
worksarray–Matching works. Empty when nothing matched the query, when an offset runs past the end of the results, or on the page that ends a cursor walk — the notice enrichment says which.

No examples provided.

Install

How do I install the io.github.cyanheads/crossref-mcp-server server?

io.github.cyanheads/crossref-mcp-server is a hosted endpoint at https://crossref.caseyjhand.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · crossref.caseyjhand.com

# add to Claude Code
claude mcp add --transport http cyanheads-crossref-mcp-server 'https://crossref.caseyjhand.com/mcp'
Common questions

What is the io.github.cyanheads/crossref-mcp-server server?

io.github.cyanheads/crossref-mcp-server is listed in the public MCP registry as io.github.cyanheads/crossref-mcp-server. Resolve DOIs, search ~188M scholarly works, and fetch references via the Crossref REST API. This page covers its hosted endpoint (https://crossref.caseyjhand.com/mcp).

Is the io.github.cyanheads/crossref-mcp-server server safe to use?

io.github.cyanheads/crossref-mcp-server scores 88 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.cyanheads/crossref-mcp-server server expose?

io.github.cyanheads/crossref-mcp-server exposes 7 tools: crossref_get_work, crossref_get_references, crossref_search_works, crossref_search_journals, crossref_search_funders, and 2 more. Their descriptions and schemas cost roughly 4,130 tokens of context every time the server is loaded.

Does the io.github.cyanheads/crossref-mcp-server server require authentication?

No. We connected to io.github.cyanheads/crossref-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.cyanheads/crossref-mcp-server server still maintained?

io.github.cyanheads/crossref-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.