Skip to main content
Glama

crossref-mcp-server

Search Funders

crossref_search_funders
Read-only

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/"} does not. Returns funder name, registry ID, country, and alternate names. 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 to get the current entry.

Input Schema

NameRequiredDescriptionDefault
rowsNoMaximum funders to return for name queries, or works when include_works is true (1–100 per call, default 10). A larger value, up to 1000, returns 100 and says so in notice; nextOffset and nextWorksOffset continue after the records returned.
queryNoFunder name search query, e.g. "National Science Foundation" or "Wellcome Trust"
offsetNoZero-based offset into the name-query funder list. Pass the nextOffset value from the previous response to continue. Ignored when funder_doi is set, which resolves exactly one record.
funder_doiNoFunder DOI for exact lookup — the full DOI "10.13039/100000001" (NSF) or the bare registry ID "100000001". Supersedes query when provided.
works_cursorNoCursor 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 response. A walk runs by the date each DOI was registered with Crossref, newest first, not by publication date — Crossref does not walk a publication-date sort by cursor. Has no offset ceiling and cannot be combined with works_offset.
works_offsetNoZero-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; use works_cursor to read the whole list. Cannot be combined with works_cursor.
include_worksNoWhen 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.

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance 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 that stops at one of the route offset ceilings with records still unretrieved (naming the offset and smaller rows that reach the last records below the ceiling, when any remain), a returned funder that the Funder Registry has deprecated in favor of another entry, a query or funder_doi supplied blank with nothing else to search by, so the page lists every funder unfiltered, or a rows value above its per-call cap, naming the value requested and the cap applied. Absent otherwise. A page needing more than one caveat carries them all in this one string.
fundersNoMatching funder records
nextOffsetNoValue to pass as offset on the next call for the following page of funders. Absent when this page ends the matches or the next page would breach the 100000-record offset ceiling.
fundedWorksNoPage 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.
funderCountNoNumber of funder records returned in this page
fundersTotalNoTotal funder records matching the query in Crossref
nextWorksCursorNoValue 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.
nextWorksOffsetNoValue to pass as works_offset on the next call for the following page of funded works. Absent when this page ends the works list, the next page would breach the 10000-record offset ceiling, or the page was requested with works_cursor.
fundedWorksTotalNoTotal count of funded works for the matched funder, when include_works is true

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / rows / description
      Previous value: -"Maximum funders to return for name queries, or works when include_works is true (1–100, default 10)"New value: +"Maximum funders to return for name queries, or works when include_works is true (1–100 per call, default 10). A larger value, up to 1000, returns 100 and says so in notice; nextOffset and nextWorksOffset continue after the records returned."
    • changedInput schema / properties / rows / maximum
      Previous value: -100New value: +1000
    • changedOutput schema / properties / notice / description
      Previous value: -"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 that stops at one of the route offset ceilings with records still unretrieved, a returned funder that the Funder Registry has deprecated in favor of another entry, or a query or funder_doi supplied blank with nothing else to search by, so the page lists every funder unfiltered. Absent otherwise. A page needing more than one caveat carries them all in this one string."New value: +"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 that stops at one of the route offset ceilings with records still unretrieved (naming the offset and smaller rows that reach the last records below the ceiling, when any remain), a returned funder that the Funder Registry has deprecated in favor of another entry, a query or funder_doi supplied blank with nothing else to search by, so the page lists every funder unfiltered, or a rows value above its per-call cap, naming the value requested and the cap applied. Absent otherwise. A page needing more than one caveat carries them all in this one string."
  2. Changed9 schema fields changed
    • addedInput schema / properties / funder_doi / anyOf
      Added value: +[
      +  {
      +    "const": "",
      +    "type": "string"
      +  },
      +  {
      +    "description": "Funder registry ID or funder DOI, e.g. \"100000001\"",
      +    "pattern": "^(?:(?:https?:\\/\\/(?:dx\\.)?doi\\.org\\/|doi:)?10\\.13039\\/)?\\d+$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / funder_doi / pattern
      Removed value: -"^(?:(?:https?:\\/\\/(?:dx\\.)?doi\\.org\\/|doi:)?10\\.13039\\/)?\\d+$"
    • removedInput schema / properties / funder_doi / type
      Removed value: -"string"
    • changedInput schema / properties / rows / type
      Previous value: -"number"New value: +"integer"
    • changedInput schema / properties / works_cursor / description
      Previous value: -"Cursor token for deep paging of the funded-works list when include_works is true. Pass \"*\" to start the walk at the newest work, then pass the nextWorksCursor value from each response. Has no offset ceiling and cannot be combined with works_offset. Each token runs about 1500 characters and is returned on both result surfaces, a fixed cost per page — raise rows to spread it across more works on a long walk."New value: +"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 response. A walk runs by the date each DOI was registered with Crossref, newest first, not by publication date — Crossref does not walk a publication-date sort by cursor. Has no offset ceiling and cannot be combined with works_offset."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"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. `funder_not_found`: Funder DOI lookup returned 404 — funder is not in the Crossref Funder Registry. `ambiguous_funder`: include_works is true but the name query matched more than one funder, making the target ambiguous. `offset_too_large`: offset + rows exceeds the 100000-record ceiling Crossref allows on funder name search. `works_offset_too_large`: works_offset + rows exceeds the 10000-record ceiling Crossref allows on a funded-works list. `works_cursor_offset_conflict`: include_works is true and works_cursor was supplied alongside a works_offset above zero. Other values are possible when a failure originates below the handler."New value: +"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. `invalid_cursor`: Crossref did not recognize the cursor token (HTTP 404 cursor-invalid). `invalid_parameter`: Crossref rejected a parameter value (a filter value of the wrong type or form), or answered HTTP 400 with a body that did not parse. `funder_not_found`: Funder DOI lookup returned 404 — funder is not in the Crossref Funder Registry. `ambiguous_funder`: include_works is true but the name query matched more than one funder, making the target ambiguous. `offset_too_large`: offset + rows exceeds the 100000-record ceiling Crossref allows on funder name search. `works_offset_too_large`: works_offset + rows exceeds the 10000-record ceiling Crossref allows on a funded-works list. `works_cursor_offset_conflict`: include_works is true and works_cursor was supplied alongside a works_offset above zero. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "rate_limited",
      -  "upstream_unavailable",
      -  "malformed_response",
      -  "request_timeout",
      -  "funder_not_found",
      -  "ambiguous_funder",
      -  "offset_too_large",
      -  "works_offset_too_large",
      -  "works_cursor_offset_conflict"
      -]New value: +[
      +  "rate_limited",
      +  "upstream_unavailable",
      +  "malformed_response",
      +  "request_timeout",
      +  "invalid_cursor",
      +  "invalid_parameter",
      +  "funder_not_found",
      +  "ambiguous_funder",
      +  "offset_too_large",
      +  "works_offset_too_large",
      +  "works_cursor_offset_conflict"
      +]
    • changedOutput schema / properties / fundedWorks / description
      Previous value: -"Page of works funded by the matched funder, ordered by publication date (newest first). Only present when include_works is true."New value: +"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."
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance on a page that needs a caveat: a query nothing matched, an offset past the end of a list that did match, a page that stops at one of the route offset ceilings with records still unretrieved, or a returned funder that the Funder Registry has deprecated in favor of another entry. Absent otherwise. A page needing more than one caveat carries them all in this one string."New value: +"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 that stops at one of the route offset ceilings with records still unretrieved, a returned funder that the Funder Registry has deprecated in favor of another entry, or a query or funder_doi supplied blank with nothing else to search by, so the page lists every funder unfiltered. Absent otherwise. A page needing more than one caveat carries them all in this one string."
  3. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/openWorld annotations, it discloses pagination ceilings (offset + rows = 100000 for funders, 10000 for works), cursor ordering semantics, the fact that cursor walks cannot resume from an offset, descendant-funder inclusion, and the replacedBy/notice behavior for deprecated registry entries. These are material behavioral traits not recoverable from annotations alone.

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

Conciseness3/5

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

The purpose is front-loaded, but the description is a dense single paragraph with repeated cursor-ordering caveats and overlapping explanations of the two works-paging modes. It is appropriately comprehensive for the complexity but would benefit from bullets or trimming of repeated caveats.

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?

An output schema exists, yet the description still supplies enough context for correct invocation: exact-lookup formats, paging limits, cursor chaining, include_works ambiguity requirements, and deprecated-entry handling. Nothing material for safe, correct calling is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds useful interpretation: accepted funder_doi formats, that query is superseded by funder_doi, the nextOffset/nextWorksCursor chaining convention, and that works_cursor='*' starts the walk. Some of this duplicates schema text, which keeps it from a 5.

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?

The description names a specific verb and resource ('Finds funders registered in the Crossref Funder Registry') and explicitly distinguishes lookup by funder DOI from name search. It also contrasts its funded-works behavior with the sibling crossref_search_works filter, so the tool is identifiable without opening the schema.

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?

It states when to use funder_doi versus query, how to page name results with nextOffset, when to use works_offset versus works_cursor, that the two cannot be combined, and that deprecated entries must be re-run manually with the replacement ID. This is explicit when/when-not guidance with alternatives named.

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.