Skip to main content
Glama

crossref-mcp-server

Get Work by DOI

crossref_get_work
Read-onlyIdempotent

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. 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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
doiYesDOI 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 unwrapped.
limitNoMaximum number of authors to return in one page (1–500, default 25). Ordinary records fit in a single page; large-collaboration papers in particle physics and genomics deposit thousands.
offsetNoZero-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 record is returned in full on every page.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe limit that was applied to this page of authors.
doiNoCanonical DOI
urlNoDOI resolution URL
isbnNoISBN(s) as deposited — for a book chapter, those of the containing book. Omitted when the record deposits none.
issnNoISSN(s) of the containing journal
pageNoPage range as deposited, e.g. "357-362"
typeNoWork type (e.g. journal-article, book-chapter, posted-content)
errorNoPresent when the call failed. Absent on success.
issueNoIssue of the container the work appears in
linksNoRegistered full-text links
shownNoNumber of authors returned in this page.
titleNoWork title
noticeNoWhen updatedBy is present, the update types Crossref records for this work with the source of each, and where the notice is read. Then which authors this page covers and the offset that reaches the next ones, or an explanation when the requested offset is past the end of the author list. Both share this one string when both apply. Absent when the page holds the whole author list and no update is recorded.
offsetNoZero-based index of the first returned author within the deposited list. Omitted alongside authors when the record deposits no author field.
volumeNoVolume of the container the work appears in
authorsNoPage of the author and contributor list, bounded by limit. Omitted when the record deposits no author field at all.
editorsNoEditors 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 record deposits none.
fundersNoFunding acknowledgements
subjectNoSubject classification terms
abstractNoAbstract 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; a link keeps its tag only where its href holds an address the text it wraps does not already carry, and each formula appears once — MathML as the TeX annotation it carries, otherwise written out linearly (x_i, A^{−1}, √(m), (a+b)/c), and TeX deposited beside MathML in whichever notation comes first.
languageNoLanguage code (ISO 639)
licensesNoLicense terms
subtitleNoSubtitle when present
updateToNoWorks 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.
publishedNoPublication 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.
publisherNoPublisher name
relationsNoRelated 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 ids in deposited order. Returned whole. Omitted when the record deposits none.
truncatedNoTrue when authors remain beyond this page. Absent when the page is the last.
updatedByNoUpdate 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 DOI can appear once per source, typed differently by each. Omitted when none is recorded, which does not mean the work was never updated: coverage depends on publisher and Retraction Watch deposits.
nextOffsetNoOffset to pass in the next call to retrieve the following page of authors. Absent when this page reaches the end of the author list.
authorCountNoTotal number of authors in the deposited list, before offset and limit were applied. Omitted alongside authors when the record deposits no author field.
articleNumberNoArticle number, deposited by journals that number articles instead of paging them
containerTitleNoJournal, book, or proceedings name containing this work
referencesCountNoNumber of outgoing references (works cited by this paper)
isReferencedByCountNoIncoming citation count from Crossref — the count of works citing this DOI

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changed
    • changedOutput schema / properties / abstract / description
      Previous value: -"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; a link keeps its tag only where its href holds an address the text it wraps does not already carry, and a formula the deposit encodes more than once — TeX beside MathML — appears once, in the first notation deposited."New value: +"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; a link keeps its tag only where its href holds an address the text it wraps does not already carry, and each formula appears once — MathML as the TeX annotation it carries, otherwise written out linearly (x_i, A^{−1}, √(m), (a+b)/c), and TeX deposited beside MathML in whichever notation comes first."
    • addedOutput schema / properties / articleNumber
      Added value: +{
      +  "description": "Article number, deposited by journals that number articles instead of paging them",
      +  "type": "string"
      +}
    • addedOutput schema / properties / editors
      Added value: +{
      +  "description": "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 record deposits none.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "Author or contributor",
      +    "properties": {
      +      "affiliation": {
      +        "description": "Institutional affiliations",
      +        "items": {
      +          "additionalProperties": false,
      +          "description": "Affiliation",
      +          "properties": {
      +            "name": {
      +              "description": "Affiliation name as deposited. Absent when the publisher asserted the organization by identifier alone, where ror carries it instead.",
      +              "type": "string"
      +            },
      +            "ror": {
      +              "description": "ROR identifier for the affiliated organization, when the deposit carries one. It is the whole identity of an affiliation deposited without a name.",
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "family": {
      +        "description": "Family (last) name",
      +        "type": "string"
      +      },
      +      "given": {
      +        "description": "Given (first) name",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "Name when no given/family split is available",
      +        "type": "string"
      +      },
      +      "orcid": {
      +        "description": "ORCID identifier URI",
      +        "type": "string"
      +      },
      +      "sequence": {
      +        "description": "Author order role (first, additional)",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / isbn
      Added value: +{
      +  "description": "ISBN(s) as deposited — for a book chapter, those of the containing book. Omitted when the record deposits none.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / issue
      Added value: +{
      +  "description": "Issue of the container the work appears in",
      +  "type": "string"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Which authors this page covers and the offset that reaches the next ones, or an explanation when the requested offset is past the end of the author list. Absent when the page holds the whole list."New value: +"When updatedBy is present, the update types Crossref records for this work with the source of each, and where the notice is read. Then which authors this page covers and the offset that reaches the next ones, or an explanation when the requested offset is past the end of the author list. Both share this one string when both apply. Absent when the page holds the whole author list and no update is recorded."
    • addedOutput schema / properties / page
      Added value: +{
      +  "description": "Page range as deposited, e.g. \"357-362\"",
      +  "type": "string"
      +}
    • addedOutput schema / properties / relations
      Added value: +{
      +  "description": "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 ids in deposited order. Returned whole. Omitted when the record deposits none.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "Related identifiers sharing one relation type, identifier type, and asserting party",
      +    "properties": {
      +      "assertedBy": {
      +        "description": "Whose deposit asserts the relation: subject (this work's depositor) or object (the related record's depositor, whose assertion Crossref shows here inverted)",
      +        "type": "string"
      +      },
      +      "idType": {
      +        "description": "Identifier scheme of ids: doi, uri, pmid, arxiv, accession, issn, isbn, or other",
      +        "type": "string"
      +      },
      +      "ids": {
      +        "description": "Related identifiers in deposited order. A DOI resolves through crossref_get_work only when Crossref registered it; one registered with another agency, such as DataCite, returns doi_not_found there.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "description": "Relation type as deposited, read from this work toward ids: is-preprint-of, has-preprint, is-version-of, has-version, has-review, is-supplemented-by, references, has-part, and others",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "idType",
      +      "assertedBy",
      +      "ids"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / updateTo
      Added value: +{
      +  "description": "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.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "Update link",
      +    "properties": {
      +      "doi": {
      +        "description": "DOI on the other side of the link: the notice, in updatedBy; the updated work, in updateTo. It is this work's own DOI when the update was made to this record in place.",
      +        "type": "string"
      +      },
      +      "recordId": {
      +        "description": "Retraction Watch record ID. Present only on retraction-watch entries.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Who recorded the link: publisher, or retraction-watch for an entry Crossref carries from the Retraction Watch database",
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Crossref update type as deposited: correction, erratum, corrigendum, addendum, retraction, withdrawal, expression_of_concern, new_version, new_edition, or another code",
      +        "type": "string"
      +      },
      +      "updated": {
      +        "additionalProperties": false,
      +        "description": "Date the update was issued",
      +        "properties": {
      +          "day": {
      +            "description": "Day of month",
      +            "type": "number"
      +          },
      +          "month": {
      +            "description": "Month (1–12)",
      +            "type": "number"
      +          },
      +          "year": {
      +            "description": "Year",
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "doi",
      +      "type",
      +      "source"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / updatedBy
      Added value: +{
      +  "description": "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 DOI can appear once per source, typed differently by each. Omitted when none is recorded, which does not mean the work was never updated: coverage depends on publisher and Retraction Watch deposits.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "Update link",
      +    "properties": {
      +      "doi": {
      +        "description": "DOI on the other side of the link: the notice, in updatedBy; the updated work, in updateTo. It is this work's own DOI when the update was made to this record in place.",
      +        "type": "string"
      +      },
      +      "recordId": {
      +        "description": "Retraction Watch record ID. Present only on retraction-watch entries.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Who recorded the link: publisher, or retraction-watch for an entry Crossref carries from the Retraction Watch database",
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Crossref update type as deposited: correction, erratum, corrigendum, addendum, retraction, withdrawal, expression_of_concern, new_version, new_edition, or another code",
      +        "type": "string"
      +      },
      +      "updated": {
      +        "additionalProperties": false,
      +        "description": "Date the update was issued",
      +        "properties": {
      +          "day": {
      +            "description": "Day of month",
      +            "type": "number"
      +          },
      +          "month": {
      +            "description": "Month (1–12)",
      +            "type": "number"
      +          },
      +          "year": {
      +            "description": "Year",
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "doi",
      +      "type",
      +      "source"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / volume
      Added value: +{
      +  "description": "Volume of the container the work appears in",
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds substantial behavior beyond that: author-list paging with nextOffset mechanics, the caveat that absent updatedBy does not imply no updates due to deposit coverage, the fact that only Crossref-registered DOIs in relations resolve through this tool, and the distinction between referencesCount (a count) and the actual entries available via a sibling tool. This is exactly the kind of behavioral disclosure agents need and it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but information-dense: every sentence earns its place by covering paging, post-publication updates, relations resolution, reference counts, and citation counts, and the core purpose is front-loaded in the first sentence. It loses a point for being a single dense unbroken block that requires careful reading, but there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the tool's complexity, the description covers the tricky aspects an agent needs: pagination over multi-thousand-author papers, update/retraction semantics with naming and source, partial resolvability of relations, and the boundary between Crossref's citation counts and OpenAlex's citation graph. An output schema exists, so return-value structure is already handled; the only omissions, such as error behavior for unresolvable DOIs, are minor and not required for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — doi format/unwrapping, limit bounds and default, and offset semantics with nextOffset are already fully documented in the input schema. The description reinforces the author-paging model and adds the detail that only the author list is paged while all other fields return in full, but this largely echoes the schema. At baseline 3 with no coverage gap to compensate, the schema carries the load and the description adds only marginal extra meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Resolves a DOI to its full Crossref metadata record.' It enumerates the concrete contents (title, authors, container, volume/issue/pages, ISSNs/ISBNs, license, full-text links, funder acknowledgements), and distinguishes itself from siblings by pointing out that reference entries come from crossref_get_references and citing works are not available through Crossref. An agent can tell exactly what this tool does relative to crossref_get_member, crossref_get_prefix, and crossref_get_references.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit routing guidance: 'the reference entries themselves come from crossref_get_references' tells the agent which sibling to call for references, and 'the citing works themselves are not available through Crossref — use OpenAlex for citation graphs' names an external alternative with the condition that selects it. It also warns about updatedBy coverage gaps so the agent knows not to conclude an absent field means no update occurred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.