# `crossref__crossref_get_work`

**Get Work by DOI**

Resolves a DOI to its full Crossref metadata record: title, authors, affiliations, abstract (when deposited), journal or container, 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. 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.

- Server: [Crossref](https://gateway.mcpharbor.dev/docs/servers/crossref) (`dev.mcpharbor.gateway/crossref`)
- Price per call: $0.0001 (100 micro-USD); only tools/call is charged
- Endpoint: `https://gateway.mcpharbor.dev/mcp` or `https://gateway.mcpharbor.dev/mcp/crossref`
- Upstream tool: exposed by the provider; called through this gateway as `crossref__crossref_get_work`
- Provider terms: <https://www.crossref.org/documentation/retrieve-metadata/rest-api/access-and-authentication/> (verified 2026-09-19)
- Upstream API documentation: <https://www.crossref.org/documentation/retrieve-metadata/rest-api/>
- Rate limit: 50 requests per minute

## Parameters

- `doi` (string, required): DOI in the format "10.NNNN/suffix", e.g. "10.1038/nature12373". Must start with "10." followed by 4–9 digits and a slash.
- `limit` (integer, optional): Maximum 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. Default: `25`.
- `offset` (integer, optional): 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`.

## Example call

Request headers and body:

```http
POST /mcp HTTP/1.1
Host: gateway.mcpharbor.dev
Authorization: Bearer <your gateway API key>
Content-Type: application/json
Accept: application/json, text/event-stream
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: crossref__crossref_get_work
```

```json
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/clientCapabilities": {},
      "io.modelcontextprotocol/clientInfo": {
        "name": "example-agent",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/protocolVersion": "2026-07-28"
    },
    "arguments": {
      "doi": "example"
    },
    "name": "crossref__crossref_get_work"
  }
}
```

A successful response:

```json
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "_meta": {
      "dev.mcpharbor.gateway/call": {
        "chargedMicroUsd": 100,
        "id": "<the id of this charge>"
      }
    },
    "content": [
      {
        "text": "<whatever the upstream tool returned>",
        "type": "text"
      }
    ],
    "resultType": "complete"
  }
}
```

This call costs $0.0001 (100 micro-USD). Reading this page and listing the tool cost nothing.
The `dev.mcpharbor.gateway/call` record in the result is the receipt for that charge. Each
POST is metered separately, so sending the same call again buys another one: see
[agent.txt](https://gateway.mcpharbor.dev/agent.txt), section 7, before retrying.

## Attribution

This provider asks for no attribution. Their terms still apply: see the table above.

## Tool definition

Exactly as `tools/list` returns it (free):

```json
{
  "_meta": {
    "dev.mcpharbor.gateway/pricing": {
      "currency": "USD",
      "pricePerCallMicroUsd": 100
    }
  },
  "annotations": {
    "idempotentHint": true,
    "readOnlyHint": true
  },
  "description": "Resolves a DOI to its full Crossref metadata record: title, authors, affiliations, abstract (when deposited), journal or container, 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. 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.",
  "inputSchema": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "additionalProperties": false,
    "properties": {
      "doi": {
        "description": "DOI in the format \"10.NNNN/suffix\", e.g. \"10.1038/nature12373\". Must start with \"10.\" followed by 4–9 digits and a slash.",
        "pattern": "^10\\.\\d{4,9}\\/\\S+$",
        "type": "string"
      },
      "limit": {
        "default": 25,
        "description": "Maximum 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.",
        "maximum": 500,
        "minimum": 1,
        "type": "integer"
      },
      "offset": {
        "default": 0,
        "description": "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 record is returned in full on every page.",
        "maximum": 9007199254740991,
        "minimum": 0,
        "type": "integer"
      }
    },
    "required": [
      "doi"
    ],
    "type": "object"
  },
  "name": "crossref__crossref_get_work",
  "outputSchema": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "additionalProperties": false,
    "anyOf": [
      {
        "not": {
          "required": [
            "error"
          ]
        },
        "required": [
          "doi"
        ]
      },
      {
        "required": [
          "error"
        ]
      }
    ],
    "properties": {
      "abstract": {
        "description": "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.",
        "type": "string"
      },
      "authorCount": {
        "description": "Total number of authors in the deposited list, before offset and limit were applied. Omitted alongside authors when the record deposits no author field.",
        "type": "number"
      },
      "authors": {
        "description": "Page of the author and contributor list, bounded by limit. Omitted when the record deposits no author field at all.",
        "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"
      },
      "cap": {
        "description": "The limit that was applied to this page of authors.",
        "type": "number"
      },
      "containerTitle": {
        "description": "Journal, book, or proceedings name containing this work",
        "type": "string"
      },
      "doi": {
        "description": "Canonical DOI",
        "type": "string"
      },
      "error": {
        "additionalProperties": {},
        "description": "Present when the call failed. Absent on success.",
        "properties": {
          "code": {
            "description": "JSON-RPC error code for this failure.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "data": {
            "additionalProperties": {},
            "properties": {
              "reason": {
                "description": "Machine-readable failure mode. Declared by this tool: `rate_limited`: Crossref answered HTTP 429 and the limit did not clear inside the retry budget. `upstream_unavailable`: Crossref was unreachable, returned a 5xx status, or served an HTML error page instead of JSON. `malformed_response`: Crossref returned HTTP 200 with a body that is not valid JSON. `request_timeout`: Crossref did not respond within CROSSREF_TIMEOUT_MS, or answered HTTP 408/504. `doi_not_found`: Valid DOI format but no Crossref record exists. Other values are possible when a failure originates below the handler.",
                "examples": [
                  "rate_limited",
                  "upstream_unavailable",
                  "malformed_response",
                  "request_timeout",
                  "doi_not_found"
                ],
                "type": "string"
              },
              "recovery": {
                "additionalProperties": {},
                "description": "Actionable next step for the caller.",
                "properties": {
                  "hint": {
                    "type": "string"
                  }
                },
                "required": [
                  "hint"
                ],
                "type": "object"
              },
              "retryable": {
                "description": "Whether retrying may succeed.",
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "message": {
            "description": "Human-readable description of what went wrong.",
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "type": "object"
      },
      "funders": {
        "description": "Funding acknowledgements",
        "items": {
          "additionalProperties": false,
          "description": "Funding assertion",
          "properties": {
            "award": {
              "description": "Grant or award numbers",
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "doi": {
              "description": "Funder DOI — the Crossref Funder Registry entry this assertion resolved to",
              "type": "string"
            },
            "name": {
              "description": "Funder name as deposited. Absent when the publisher asserted the funder by identifier alone, where ror carries it instead.",
              "type": "string"
            },
            "ror": {
              "description": "ROR identifier for the funding organization, when the deposit carries one. It is the whole identity of an assertion deposited without a name.",
              "type": "string"
            }
          },
          "type": "object"
        },
        "type": "array"
      },
      "isReferencedByCount": {
        "description": "Incoming citation count from Crossref — the count of works citing this DOI",
        "type": "number"
      },
      "issn": {
        "description": "ISSN(s) of the containing journal",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "language": {
        "description": "Language code (ISO 639)",
        "type": "string"
      },
      "licenses": {
        "description": "License terms",
        "items": {
          "additionalProperties": false,
          "description": "License entry",
          "properties": {
            "contentVersion": {
              "description": "Content version (vor, am, tdm, unspecified)",
              "type": "string"
            },
            "delayInDays": {
              "description": "Embargo delay in days from publication date",
              "type": "number"
            },
            "url": {
              "description": "License URL",
              "type": "string"
            }
          },
          "required": [
            "url"
          ],
          "type": "object"
        },
        "type": "array"
      },
      "links": {
        "description": "Registered full-text links",
        "items": {
          "additionalProperties": false,
          "description": "Registered full-text link",
          "properties": {
            "contentType": {
              "description": "MIME type of linked content",
              "type": "string"
            },
            "intendedApplication": {
              "description": "Intended use (text-mining, similarity-checking, etc.)",
              "type": "string"
            },
            "url": {
              "description": "Full-text URL",
              "type": "string"
            }
          },
          "required": [
            "url"
          ],
          "type": "object"
        },
        "type": "array"
      },
      "nextOffset": {
        "description": "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.",
        "type": "number"
      },
      "notice": {
        "description": "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.",
        "type": "string"
      },
      "offset": {
        "description": "Zero-based index of the first returned author within the deposited list. Omitted alongside authors when the record deposits no author field.",
        "type": "number"
      },
      "published": {
        "additionalProperties": false,
        "description": "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.",
        "properties": {
          "day": {
            "description": "Day of month",
            "type": "number"
          },
          "month": {
            "description": "Month (1–12)",
            "type": "number"
          },
          "year": {
            "description": "Year",
            "type": "number"
          }
        },
        "type": "object"
      },
      "publisher": {
        "description": "Publisher name",
        "type": "string"
      },
      "referencesCount": {
        "description": "Number of outgoing references (works cited by this paper)",
        "type": "number"
      },
      "shown": {
        "description": "Number of authors returned in this page.",
        "type": "number"
      },
      "subject": {
        "description": "Subject classification terms",
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "subtitle": {
        "description": "Subtitle when present",
        "type": "string"
      },
      "title": {
        "description": "Work title",
        "type": "string"
      },
      "truncated": {
        "description": "True when authors remain beyond this page. Absent when the page is the last.",
        "type": "boolean"
      },
      "type": {
        "description": "Work type (e.g. journal-article, book-chapter, posted-content)",
        "type": "string"
      },
      "url": {
        "description": "DOI resolution URL",
        "type": "string"
      }
    },
    "type": "object"
  },
  "title": "Get Work by DOI"
}
```
