mcp-crossref
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-crossrefFind recent papers on retrieval augmented generation and cite the top 5 in APA"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-crossref
MCP server to give client the ability to search scholarly metadata, citations and references through Crossref
Features
Search ~170 million works from every Crossref publisher with field queries and filters
Resolve any DOI into a normalized record with a metadata-completeness check
Format citations in APA, IEEE, Vancouver, Chicago, MLA, Harvard, any CSL style, BibTeX, RIS or CSL-JSON
Extract and verify every DOI in pasted text (reference lists, PDF text)
Reference lists, similar works, and citation snowballing (references + citing works via OpenAlex)
Topic trends with exact-phrase matching, author, journal and funder profiles
Tools
Tool | Use it for |
| Literature search across publishers; find a paper from a citation string ( |
| Full metadata for one DOI, plus which fields the publisher did not deposit |
| Bibliography in any style, or BibTeX/RIS export (also works for arXiv/DataCite DOIs) |
| Turn messy text containing DOIs into verified metadata |
| Backward snowballing: what a paper cites |
| "More like this" by title and subjects |
| Publications per year, top venues/publishers/funders for an exact phrase |
| Output, co-authors, venues, ORCID iDs for a researcher |
| Journal profile by ISSN, or find a journal's ISSN by name |
| What a funder (e.g. LPDP) has funded |
| References + works citing the paper + related works + open-access status (OpenAlex) |
Each tool's docstring explains when to use it, its arguments with examples, and Crossref's pitfalls, so the MCP client can pick the right tool on its own.
Things to know
Crossref has no exact-phrase search: a plain query matches any of its words. Use the top results, add filters, or
analyze_crossref_topicfor phrase-accurate counts.Crossref exposes citation counts but not the list of citing works;
snowball_doigets that from OpenAlex.Many publishers do not deposit abstracts to Crossref;
snowball_doireturns OpenAlex's abstract when available.arXiv DOIs (
10.48550/arXiv.*) are registered with DataCite, soget_crossref_workcannot find them, butcite_doiscan format them.Counts and coverage describe metadata only, never the scientific quality of a paper, journal or author.
Configuration
Copy .env.example to .env (both optional, no account needed for Crossref):
CROSSREF_MAILTO: your contact email. Joins Crossref's "polite" pool with a higher rate limit.OPENALEX_API_KEY: free key from openalex.org settings for 10x the keyless daily budget used bysnowball_doi. Without it, OpenAlex runs keyless; a rejected key falls back to keyless automatically.
Usage
For this MCP server to work, add the following configuration to your MCP config file:
{
"mcpServers": {
"crossref": {
"command": "uv",
"args": [
"--directory",
"%USERPROFILE%/Documents/GitHub/mcp-crossref",
"run",
"python",
"main.py"
]
}
}
}Example prompts:
"Find journal articles on retrieval augmented generation since 2024 and cite the top 5 in APA."
"Here is my reference list, check every DOI and give me BibTeX."
"Snowball from 10.1016/j.eswa.2016.04.008: which newer papers cite it?"
"Is research on federated learning in healthcare growing, and where is it published?"
Available Tools
11 toolsanalyze_crossref_topicA
Describe a research topic: publications per year, top venues, publishers and funders, and the
most cited works, counting only titles that contain the exact phrase.
When to use:
- Trend questions: "is X growing?", "when did X take off?", thesis/proposal background.
- "Where is X published?", "who funds X?" (venue and funder landscape).
How it works:
Crossref has no phrase search, so a plain query for "retrieval augmented generation" matches
about a million works. This tool scans the top `scan` relevance-ranked hits and keeps only
works whose title contains the exact phrase, then aggregates them. It is a sample of the most
relevant works, not a complete count; older years may be under-represented.
Args:
phrase: The topic phrase, e.g. "retrieval augmented generation" (hyphens/case ignored).
scan: Relevance hits to scan, 100-2000 (default 500). Larger = slower but more complete.
from_year: Optional earliest publication year.
until_year: Optional latest publication year.
work_type: Optional Crossref type, e.g. "journal-article".
Returns:
{"phrase", "fuzzy_total" (all keyword matches, for context), "scanned", "matched",
"per_year": {year: count}, "top_venues", "top_publishers", "top_funders": [[name, count]],
"most_cited": [compact work]}
Counts describe metadata only; they do not rank venue or funder quality.
| Name | Required | Description | Default |
|---|---|---|---|
| scan | No | ||
| phrase | Yes | ||
| from_year | No | ||
| work_type | No | ||
| until_year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it explains the phrase-matching workaround, warns the result is a sample of top relevance hits rather than a complete count, notes older years may be under-represented, states larger scan is slower but more complete, and clarifies counts describe metadata only, not quality. These are exactly the caveats an agent needs before relying on the numbers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is sectioned (purpose, when to use, how it works, args, returns) and front-loaded so the highest-value information comes first. It is somewhat long and the Args/Returns blocks partially restate the schema/output structure, but nearly every line carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter aggregation tool with no annotations, the description covers purpose, usage, mechanism, limitations, all parameters, and a return-shape sketch (which is welcome even alongside the output schema). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it documents every parameter: phrase (case/hyphen-insensitive), scan (100-2000, default 500, with a speed/completeness tradeoff), from_year/until_year as bounds, and work_type as a Crossref type with an example value. This adds semantics the bare schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific action and its outputs (per-year counts, top venues/publishers/funders, most-cited works) gated on exact-phrase title matching. The 'How it works' note that Crossref lacks phrase search and that this scans top relevance hits distinguishes it from a plain search sibling. An agent can separate it from search_crossref or find_related_works without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use scenarios (trend questions, thesis background, venue/funder landscape) with example phrasings. What it lacks is a negative statement routing the agent to an alternative (e.g., 'for a plain keyword search use search_crossref'), so context is clear but no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cite_doisA
Format citations for one or more DOIs in any citation style or export format.
Uses DOI content negotiation, so it works for Crossref AND DataCite DOIs (arXiv, Zenodo, ...).
When to use:
- Building a bibliography / reference list for a thesis or paper.
- Exporting references to Zotero, Mendeley or EndNote (bibtex / ris).
Args:
dois: List of DOIs (max 50), e.g. ["10.1038/nature14539", "10.1145/3065386"].
style: Citation style or export format:
- "apa" (default), "ieee", "vancouver", "chicago", "mla", "harvard", "nature"
- any other CSL style id from https://github.com/citation-style-language/styles,
e.g. "american-medical-association"
- "bibtex", "ris" or "csl-json" for reference-manager exports
Returns:
{"style": str, "citations": [{"doi": str, "citation": str}], "failed": [{"doi", "error"}]}
Example:
cite_dois(["10.1038/nature14539"], style="ieee")
-> "Y. LeCun, Y. Bengio, and G. Hinton, “Deep learning,” Nature, vol. 521, no. 7553, ..."
| Name | Required | Description | Default |
|---|---|---|---|
| dois | Yes | ||
| style | No | apa |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden, and it does well: it discloses the DOI content-negotiation mechanism, that it covers both Crossref and DataCite DOIs (arXiv, Zenodo), the max-50 input limit, and a partial-failure result shape. It omits auth requirements, rate limits, and whether failures are retried, which are the remaining gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then cleanly sectioned into When to use / Args / Returns / Example. Every section is useful, though the Returns block partially restates the output schema that already exists, adding a small amount of redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter formatting tool with an output schema, the description covers coverage (Crossref + DataCite), the input cap, the failure path, accepted style values, and a worked example. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully, and it does: 'dois' gets an example list and a max-50 constraint, and 'style' gets a default, an explicit enumeration of common styles, the CSL-style-id escape hatch with a URL, and three export formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (format/cite) and resource (DOIs/citations) plus scope: any citation style or export format. It is clearly distinct from siblings like resolve_dois (which resolves metadata) and search_crossref (which finds works).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes an explicit 'When to use' list with concrete scenarios (building a bibliography, exporting to Zotero/Mendeley/EndNote). It does not, however, name sibling alternatives or state when NOT to use it, leaving the routing to resolve_dois or search_crossref to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crossref_authorA
Build an author profile: publications, years active, frequent co-authors, venues, affiliations
and ORCID iDs seen in Crossref metadata.
When to use:
- "Who is this researcher / what do they work on / who do they collaborate with?"
- Finding collaborators or research groups around a person.
Args:
name: Author name, e.g. "Geoffrey Hinton". Matching is fuzzy, so namesakes can be mixed in.
orcid: ORCID iD (e.g. "0000-0002-1825-0097"). When given, only works carrying this iD are used,
which removes namesakes. If the result lists several ORCID iDs, rerun with one of them.
max_works: Works to scan, 20-500 (default 100).
Returns:
{"name", "orcid_filter", "scanned", "matched", "total_citations", "years": {year: count},
"orcids_seen", "affiliations", "coauthors", "venues": [[name, count]],
"most_cited": [compact work]}
Counts describe Crossref metadata, not research impact; centrality is not quality.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| orcid | No | ||
| max_works | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it warns that name matching is fuzzy and namesakes can be mixed in, explains that an ORCID filter removes them and that multiple returned ORCIDs signal a rerun, caps max_works at 20-500, and cautions that counts reflect Crossref metadata rather than research impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The sectioned layout (When to use / Args / Returns) is front-loaded and scannable, and most lines earn their place. The Returns block largely restates the output schema, which is mildly redundant, though it is compact and does add the impact caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need not be re-explained; the description instead covers the argument semantics, usage triggers, and the fuzzy-matching/namesake caveats that structured fields cannot convey. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely, and it does: each of the three parameters gets meaning beyond its type, including a concrete name example, the ORCID filtering semantics plus a sample iD, and the max_works range with default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb (build) and resource (author profile from Crossref metadata), enumerating the exact fields produced (publications, co-authors, venues, affiliations, ORCID iDs). This is clearly distinct from siblings like get_crossref_work or search_crossref, which target works rather than people.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to use' block gives concrete triggering questions ("Who is this researcher / who do they collaborate with?") and the ORCID workflow tells the agent how to iterate when namesakes appear. It stops short of naming alternative siblings or stating when NOT to use this tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crossref_funderA
Look up a research funder and the works it funded (as declared by publishers in Crossref).
When to use:
- "What has LPDP / NSF / Horizon Europe funded?", grant output tracking, funder landscape.
Args:
name_or_id: Funder name ("LPDP", "National Science Foundation") or Crossref Funder ID
("501100014538").
latest: Number of most recent funded works to include (0-20, default 5).
Returns:
{"funder": {"id", "name", "location", "alt_names"}, "other_matches", "funded_works_total",
"per_year": {year: count}, "top_venues": [[name, count]], "latest": [compact work]}
| Name | Required | Description | Default |
|---|---|---|---|
| latest | No | ||
| name_or_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It implies a read-only lookup and usefully discloses that funding links are 'as declared by publishers', plus the ambiguity signal via 'other_matches', but says nothing about auth requirements, rate limits, or failure behavior for an unknown funder.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by clearly labelled When to use / Args / Returns sections; every element is scannable. The Returns block is somewhat redundant given a formal output schema exists, which keeps it just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter, output-schema-backed tool this covers the essentials: what it returns at a glance, parameter formats, and the multi-match case. Missing only the read-only/auth framing that the absent annotations would otherwise have provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load and it does: name_or_id is explained as accepting either a funder name or a Crossref Funder ID with a concrete ID example ('501100014538'), and latest is bounded ('0-20, default 5') beyond the bare schema default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('look up') plus the resource ('a research funder') and its payload ('the works it funded'), and pins the data provenance to Crossref publisher declarations. The funder resource is clearly distinct from the sibling author/journal/work lookup tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
An explicit 'When to use' block names concrete scenarios ('What has LPDP / NSF / Horizon Europe funded?', grant output tracking, funder landscape). It gives clear positive context but names no alternatives or when-not conditions (e.g. when to use search_crossref instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crossref_journalA
Look up a journal: publisher, ISSNs, subjects, DOI counts, metadata coverage and latest works.
When to use:
- "Tell me about journal X", "what does X publish lately?", "does X deposit abstracts/ORCIDs?"
- Finding a journal's ISSN from its name (then filter search_crossref by issn).
Args:
issn_or_name: An ISSN like "0957-4174" for the full profile, or a name like
"expert systems with applications" to list matching journals with their ISSNs.
latest: Number of most recent works to include for an ISSN lookup (0-20, default 5).
Returns:
For an ISSN: {"title", "publisher", "issn", "subjects", "total_dois", "coverage" (share of
current works with abstracts, ORCIDs, references, licenses, ...), "dois_by_year", "latest"}.
For a name: {"matches": [{"title", "publisher", "issn", "total_dois"}]}.
Coverage is metadata completeness, not a journal quality ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| latest | No | ||
| issn_or_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses the two distinct return shapes, the meaning of "coverage" (share of current works with abstracts/ORCIDs/references/licenses), the latest range and default, and a critical caveat that coverage is metadata completeness, not a quality ranking. It omits operational traits such as rate limits or auth, but for a public read-only metadata lookup this is close to complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then cleanly sectioned into When to use, Args, and Returns. Every sentence adds information an agent needs (trigger conditions, dual-mode argument behavior, return shapes, the coverage caveat) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema present, the description supplies everything an agent needs: when to call it, the dual interpretation of the primary argument, the return structure per mode, and the semantic caveat on coverage. Nothing required to invoke or interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully and it does: issn_or_name is explained with a concrete example ("0957-4174") and the behavioral difference between passing an ISSN versus a name (full profile vs. list of matches), and latest is documented as 0-20 with a default of 5. Both parameters gain meaning absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb (look up) and resource (a journal) and enumerates exactly what is retrieved: publisher, ISSNs, subjects, DOI counts, metadata coverage and latest works. This is clearly distinguishable from siblings like get_crossref_work or get_crossref_author, which operate on works and people rather than journals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit trigger phrasings ("Tell me about journal X", "does X deposit abstracts/ORCIDs?") and names a concrete downstream alternative: use the returned ISSN to filter search_crossref by issn. When to use and how it chains into a sibling are both stated rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crossref_referencesA
List the references (bibliography) of a paper, i.e. the older works it cites.
When to use:
- Backward snowballing in a literature review: find the foundational papers a key paper builds on.
- Checking which sources a paper relies on.
Args:
doi: DOI of the citing paper.
resolve: Also fetch full metadata for the first N references that have a DOI (max 20),
sorted by citation count, to spot the most influential ones. Default 0 (no extra calls).
Returns:
{"doi", "title", "reference_count", "references": [{doi, title, author, year, journal,
unstructured}], "resolved": [compact work]}
Notes:
- Only references the publisher deposited are available; some publishers deposit none.
- Crossref does not expose the reverse direction (papers that cite this one); use snowball_doi.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | ||
| resolve | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does so well: it discloses that resolve triggers extra calls capped at 20 and sorted by citation count, and that only publisher-deposited references exist (some publishers deposit none). It stops short of stating the operation is read-only or describing failure behavior for an invalid DOI.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and cleanly sectioned into When to use / Args / Returns / Notes. The Returns block partially duplicates the output schema, which is minor redundancy, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers purpose, selection guidance, both parameter semantics, data-availability caveats, and sibling routing, while an output schema already documents the return shape. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains doi as the citing paper's DOI and fully specifies resolve's semantics (fetch metadata for the first N DOI-bearing references, max 20, sorted by citation count, default 0 = no extra calls). The doi entry is minimal but sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the references (bibliography) of a paper') and immediately clarifies the scope with 'the older works it cites.' It also distinguishes itself from the sibling snowball_doi by declaring the reverse direction is not covered.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit 'When to use' list (backward snowballing, checking relied-on sources) and a 'Notes' section that routes the agent to snowball_doi when the forward-citation direction is needed. Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crossref_workA
Get the complete, normalized metadata record for one DOI.
When to use:
- You have a DOI (from any search tool, a PDF, a reference list) and need authors with ORCID
and affiliations, journal, volume/issue/pages, abstract, license, funders, citation counts.
- Checking whether a DOI is real before citing it (a 404 means Crossref does not know it).
Args:
doi: Any DOI spelling: "10.1145/3065386", "https://doi.org/10.1145/3065386",
"doi:10.1145/3065386". Case does not matter.
Returns:
The work record plus "metadata_quality": {"metadata_completeness": 0-1, "missing": [...]},
which tells you which fields the publisher did not deposit (e.g. abstract). It describes the
metadata only, never the scientific quality of the paper.
Tips:
- abstract is often null because many publishers do not deposit abstracts to Crossref;
snowball_doi returns OpenAlex's abstract when it has one.
- arXiv DOIs (10.48550/arXiv.*) are registered with DataCite, not Crossref, so this returns
"not found"; cite_dois still works for them.
- Use get_crossref_references for the reference list.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that a 404 means Crossref does not know the DOI, that arXiv DOIs are registered with DataCite so this returns 'not found', and that abstract is frequently null due to publisher deposit behavior. It also explains that metadata_quality describes metadata only, never scientific quality — a subtle but important framing caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line summary, then labeled blocks (When to use / Args / Returns / Tips) that map to the questions an agent actually asks. Each sentence carries distinct information; none restate the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-param read tool this is complete: input formats, output semantics (metadata_quality with its missing-fields meaning), failure modes, and known data-source gaps are all covered. The output schema handles structure, so the description is free to explain interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single doi parameter, so the description must compensate — and it does, enumerating accepted spellings ('10.1145/3065386', 'https://doi.org/...', 'doi:10.1145/...') and stating case-insensitivity. This is meaningfully more than the bare 'string' schema field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Get the complete, normalized metadata record for one DOI.' It clearly delimits itself from get_crossref_references (reference list) and snowball_doi (alternate abstract source) in the Tips, so an agent can route between siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to use' block gives two concrete triggering conditions (you already hold a DOI; you want to validate a DOI before citing), and the Tips name explicit alternatives and their conditions — snowball_doi for abstracts, cite_dois for arXiv DOIs, get_crossref_references for reference lists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_doisA
Find every DOI mentioned in free text and resolve each one to clean metadata.
When to use:
- The user pastes a messy reference list, a PDF's text, notes or a URL list and wants to know
what the papers are, check that the DOIs exist, or turn them into a clean table.
- Verifying DOIs produced by another tool or model before citing them.
Args:
text: Any text containing DOIs in any form ("doi:10.x/y", "https://doi.org/10.x/y", bare).
max_dois: Resolve at most this many unique DOIs (default 25, max 100).
Returns:
{"found": int, "works": [compact work], "failed": [{"doi", "error"}]}. A DOI in "failed"
with "Not found" is unknown to Crossref (typo, fabricated, or registered with DataCite).
Follow-up: pass the resolved DOIs to cite_dois to format a bibliography.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| max_dois | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the failure mode and its meaning ('Not found' = typo, fabricated, or DataCite-registered), the cap behavior (default 25, max 100), and that dedup applies to unique DOIs. It stops short of stating network/auth behavior or partial-failure semantics beyond the failed list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by tightly scoped Args/Returns/Follow-up sections; every block earns its place. The Returns block partially restates the output schema, which slightly blunts conciseness, but the 'Not found' interpretation is genuinely additive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the shape need not be re-explained, yet the description usefully clarifies the meaning of the 'failed' entries and points to the next tool. Coverage is complete for an agent to call this correctly; only edge-case behavior (e.g., partial results on network failure) is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: text accepts any DOI form ('doi:10.x/y', 'https://doi.org/10.x/y', bare) and max_dois is documented with default and ceiling. Minor gap: no guidance on behavior when max_dois exceeds the number found.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb (find, resolve) and resource (DOIs in free text) plus the outcome (clean metadata). It is clearly distinguishable from siblings like get_crossref_work (single work lookup) and cite_dois (bibliography formatting).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to use' block gives two concrete scenarios (messy reference list/PDF text/URL list, and verifying DOIs from another tool or model) and the closing follow-up explicitly routes to cite_dois. Alternatives and conditions are named, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_crossrefA
Search ~170 million scholarly works registered in Crossref (all publishers: Elsevier, IEEE,
Springer, ACM, MDPI, Indonesian journals, ...). Every result carries a DOI you can pass to the
other crossref tools.
When to use:
- Broad literature discovery across publishers ("papers on X since 2022").
- Finding a specific paper from a messy citation string (use `bibliographic`).
- Listing an author's or a journal's works (use `author` / `orcid` / `issn`).
How matching works (important):
Crossref has NO exact-phrase search. `query="retrieval augmented generation"` matches any work
containing ANY of those words, so total_results is inflated and the tail is noise. Rely on the
top relevance-sorted results, add filters, or use analyze_crossref_topic for phrase-accurate trends.
Args:
query: Free-text keywords over all metadata, e.g. "graph neural network traffic forecasting".
author: Author name, e.g. "Geoffrey Hinton". Fuzzy; combine with `orcid` for precision.
title: Words that should appear in the title.
bibliographic: A full or partial citation string, e.g.
"LeCun Bengio Hinton 2015 Deep learning Nature". Best tool for "find this exact paper".
journal: Journal / proceedings name, e.g. "Expert Systems with Applications".
publisher: Publisher name, e.g. "IEEE".
affiliation: Author affiliation text, e.g. "Universitas Indonesia" (only works where deposited).
funder: Funder name, e.g. "LPDP" or "National Science Foundation".
from_date: Earliest publication date, "YYYY", "YYYY-MM" or "YYYY-MM-DD".
until_date: Latest publication date, same formats.
work_type: Crossref type id, e.g. "journal-article", "proceedings-article", "book-chapter",
"posted-content" (preprints), "dissertation", "dataset".
issn: Restrict to one journal by ISSN, e.g. "0957-4174".
orcid: Restrict to works carrying this ORCID iD, e.g. "0000-0002-1825-0097".
has_abstract: Only works with a deposited abstract (many publishers do not deposit them).
has_full_text: Only works with full-text links deposited (does NOT mean open access).
sort: "relevance" (default), "published", "is-referenced-by-count" (most cited),
"references-count", "updated", "created".
order: "desc" (default) or "asc".
rows: Results to return, 1-100 (default 10).
offset: Skip this many results for paging (Crossref caps offset at 10,000).
include_abstract: Add abstracts to results (longer output). Default False to save tokens;
fetch a single paper's abstract with get_crossref_work instead.
Returns:
{"total_results": int, "returned_results": int, "items": [work, ...]} where each work has
doi, title, authors, year, journal, publisher, type, cited_by_count, reference_count, url, ...
Examples:
search_crossref(query="large language model education", from_date="2023", work_type="journal-article")
search_crossref(author="Yoshua Bengio", sort="is-referenced-by-count", rows=5)
search_crossref(bibliographic="Vaswani 2017 Attention is all you need")
search_crossref(query="deep learning", issn="2169-3536", sort="published")
Note: cited_by_count counts only citations registered in Crossref; it is not a quality measure.
| Name | Required | Description | Default |
|---|---|---|---|
| issn | No | ||
| rows | No | ||
| sort | No | relevance | |
| orcid | No | ||
| order | No | desc | |
| query | No | ||
| title | No | ||
| author | No | ||
| funder | No | ||
| offset | No | ||
| journal | No | ||
| from_date | No | ||
| publisher | No | ||
| work_type | No | ||
| until_date | No | ||
| affiliation | No | ||
| has_abstract | No | ||
| bibliographic | No | ||
| has_full_text | No | ||
| include_abstract | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: Crossref has no exact-phrase search, query matches ANY word so total_results is inflated, offset is capped at 10,000, has_full_text does not imply open access, and cited_by_count only counts Crossref-registered citations. These are exactly the non-obvious behaviors an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then usage, then the critical matching caveat, then args/returns/examples — a logical, skimmable structure. The Args section is lengthy, but with 20 undocumented parameters that length is largely earned; only minor trimming would be possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 20 params, no annotations, and a defined output schema, the description still supplies the return shape, paging limits, abstract-token tradeoff, and interpretation caveats. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 20 parameters, so the description must compensate — and it does, documenting every argument with format rules (date formats, offset cap), accepted values (work_type ids, sort keys, order), and worked examples. This is well above the baseline expected when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with scale (~170M scholarly works) and explicitly names the sibling it is not ('use analyze_crossref_topic for phrase-accurate trends'). An agent can distinguish it from get_crossref_work, analyze_crossref_topic, and the author/journal tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to use' block gives three concrete scenarios and routes each alternative (bibliographic, author, orcid, issn) to the right tool. It also names the exact alternative for phrase-accurate trends, so when/when-not is fully covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snowball_doiA
Citation snowballing around one paper: its references (backward), the works that cite it
(forward), and related works, plus open-access status and an abstract when available.
Forward citations are not available from Crossref, so this tool uses OpenAlex (free; set
OPENALEX_API_KEY for a 10x daily budget, otherwise it runs keyless).
When to use:
- Systematic literature review snowballing from one or two seed papers.
- "Who built on this paper?", "what newer work cites it?", "is there a free PDF?"
Args:
doi: DOI of the seed paper.
rows: Works per direction, sorted by citation count (1-50, default 10).
Returns:
{"seed": work with open_access + abstract, "backward_total", "backward": [...],
"forward_total", "forward": [...], "related": [...],
"strong_candidates": works found by more than one direction}
Notes:
- OpenAlex matching is automatic and occasionally wrong; sanity-check odd entries.
- open_access.url is a legal free copy when OpenAlex knows one; DOI != free PDF.
- Costs about 4 OpenAlex list calls; single lookups are free.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | ||
| rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: it discloses the OpenAlex dependency, the OPENALEX_API_KEY budget behavior (10x daily budget vs keyless), per-call cost (~4 list calls), automatic matching that is 'occasionally wrong', and the non-obvious fact that open_access.url is a legal free copy while DOI != free PDF.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line summary, then cleanly sectioned into When to use / Args / Returns / Notes. It is longer than average but every block (provider rationale, cost, matching caveat) adds distinct value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-source traversal tool, the description covers provider, cost, caveats, args, and the concrete return shape (seed, backward/forward totals, strong_candidates). Even with an output schema present, the returned-key summary is useful and everything an agent needs to call it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: 'doi' is defined as the seed paper's DOI and 'rows' is given the semantics 'works per direction, sorted by citation count (1-50, default 10)' — including the range and sort order absent from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (citation snowballing) and resource (one seed paper) and enumerates the three traversal directions (backward/forward/related). It also names the underlying provider distinction (OpenAlex for forward citations, since Crossref lacks them), which separates it from siblings like find_related_works and get_crossref_references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to use' block gives both a scenario (systematic literature review snowballing from seed papers) and concrete user-style questions it answers. An agent can route to this tool without guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
analyze_crossref_topic - First observed
cite_dois - First observed
find_related_works - First observed
get_crossref_author - First observed
get_crossref_funder - First observed
get_crossref_journal - First observed
get_crossref_references - First observed
get_crossref_work - First observed
resolve_dois - First observed
search_crossref - First observed
snowball_doi
TDQS
Scored across 11 tools
Tools are largely distinct by resource and action: search, get, cite, resolve, references, author/journal/funder lookup, snowballing, and related works. Some overlap exists between find_related_works and snowball_doi's related component, and between get_crossref_references and snowball_doi's backward citations, but descriptions clearly distinguish Crossref text similarity from OpenAlex citation graph.
All names use snake_case and follow a mostly verb_noun pattern. However, the use of 'crossref' is inconsistent: get_crossref_* is prefixed, search_crossref is suffixed, and cite_dois/resolve_dois/snowball_doi/find_related_works omit it entirely. Still readable and predictable overall.
11 tools is well-scoped for a Crossref metadata server. Each tool earns its place by covering a distinct part of literature discovery, metadata retrieval, citation formatting, or entity profiling.
The surface covers search, topic analysis, work metadata, citation formatting, DOI resolution, reference lists, citation snowballing, and author/journal/funder profiles. There are no obvious gaps for the stated domain of scholarly metadata discovery and analysis.
Maintenance
Related MCP Connectors
Search papers, format citations in 60 styles, and verify bibliographies against scholarly sources.
Catch AI-fabricated citations (real DOI + fake title). Retraction, open-access, 10,000+ CSL styles.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Search 150M+ academic works, journals, and funders via Crossref API.
Related MCP Servers
- AlicenseAqualityBmaintenanceResolves scholarly identifiers — DOI, PubMed ID, PMCID, ISBN, ISSN, arXiv, ADS bibcode — into clean, formatted citations in any of 10,000+ CSL styles. Returns plain text, HTML, Markdown, RIS, BibTeX, CSL-JSON, or EndNote XML for direct paste or reference manager import.7122 npm10MIT
- AlicenseAqualityAmaintenanceSearches and fetches research datasets across Zenodo, DataCite (Dryad/Figshare/Dataverse/OSF), NCBI omics archives (GEO/SRA/BioProject), and the literature (PubMed/OpenAIRE) through one normalized model — deduplicating by DOI, expanding organism queries with NCBI Taxonomy synonyms, and bridging papers to the datasets they produced. Resolves citations and open-access full text, and downloads files.64MIT
- AlicenseAqualityCmaintenanceEnables retrieval of academic literature metadata via DOI or search using the Crossref REST API.2MIT
- AlicenseNot gradedqualityDmaintenanceSearches and retrieves scholarly metadata from the CrossRef REST API, covering over 150 million records across all disciplines, without requiring an API key.MIT