Skip to main content
Glama

crossref-mcp-server

Search Works

crossref_search_works
Read-only

Searches the Crossref works index (~155M records) by free text and/or structured filters. The generic query matches loosely across all fields; scope precisely with the field-specific parameters queryTitle, queryAuthor, and queryContainerTitle, or resolve a known citation to its DOI with queryBibliographic — all combine with each other and with query. Use the filter parameter for structured filtering (object with hyphen-separated Crossref keys). Sort options: relevance, score, is-referenced-by-count, published, deposited, indexed. Each work returns at most authorLimit authors (25 by default) with authorCount reporting the full deposited total, since a single page of large-collaboration papers can carry tens of thousands of author entries; crossref_get_work pages the whole author list for any DOI whose list was cut. Offset-based paging is capped at ~10K results; use cursor="*" to start cursor-based deep paging, then pass the nextCursor value from each response to continue. The walk ends on the page where nextCursor is absent — that page also carries a notice saying the list is exhausted. Cursor and offset cannot be combined.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
rowsNoNumber of results to return per page (1–100, default 20)
sortNoSort field
orderNoSort direction (asc or desc)
queryNoFree-text search query, e.g. "CRISPR gene editing" or "climate change adaptation"
cursorNoCursor token for deep paging. Pass "*" to start cursor-based paging (required past ~10K results), then pass the nextCursor value from each response until a response omits it, which means the list is exhausted. Cannot be combined with offset.
fieldsNoFields to return (reduces payload). Names are case-sensitive. Useful set: DOI, title, author, published, type, is-referenced-by-count, abstract, container-title, publisher, score. DOI is always returned whether or not it is listed here, so every result stays resolvable by crossref_get_work.
filterNoStructured filter object using Crossref hyphen-separated keys. All values must be strings. Boolean flag keys (has-abstract, has-references, has-full-text) require string values "true" or "false". Example: {"type":"journal-article","has-abstract":"true","from-pub-date":"2023-01-01","directory":"DOAJ"}
offsetNoZero-based result offset for offset-based paging. Cannot be used with cursor. Capped at ~10K; use cursor for deeper paging.
queryTitleNoMatch against work titles only, e.g. "Array programming with NumPy".
authorLimitNoMaximum number of authors to return per work (1–500, default 25). Ordinary records fit under the default; large-collaboration papers deposit thousands, and a page of them is large enough to exhaust a client context. Each work reports its full deposited total as authorCount — call crossref_get_work with that work doi to page the authors this cap left out.
queryAuthorNoMatch against author names only, e.g. "Charles R. Harris".
queryBibliographicNoWhole-citation match to resolve a known reference to its DOI. Combine title, author, year, and container into one string, e.g. "Watson Crick molecular structure of nucleic acids Nature 1953".
queryContainerTitleNoMatch against the container title (journal or book name) only, e.g. "Nature".

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe per-work author cap applied to this page. Absent when no list was cut.
errorNoPresent when the call failed. Absent on success.
worksNoMatching works. Empty when nothing matched the query, when an offset runs past the end of the results, or on the page that ends a cursor walk — the notice enrichment says which.
noticeNoGuidance on an empty page, naming which of its three causes applies: a query nothing matched, an offset past the end of a list that did match, or a cursor walk that has reached the end of the list. On a page carrying records, present only when authorLimit cut at least one work list, naming how many and the route to the rest.
returnedNoNumber of records returned in this response
truncatedNoTrue when at least one work on this page had its author list cut by authorLimit. Absent when every work on the page carries its full deposited author list.
nextCursorNoCursor token to pass as cursor on the next call to continue a cursor walk. Present only on a page requested with cursor, and absent once the walk reaches the end of the list.
totalResultsNoTotal matching records in Crossref

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to repeat those. It adds substantial behavioral detail beyond annotations: offset paging capped at ~10K, cursor-based paging for deeper results, the rule that cursor and offset cannot be combined, the behavior of authorLimit (at most that many authors, full total in authorCount), and the signal for list exhaustion (nextCursor absent). These are non-obvious and critical for correct invocation.

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

Conciseness5/5

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

The description is dense but well-organized. The first sentence states the core purpose and scale. Subsequent sentences cluster related concepts: query types, filters, sort, author limits, and paging. No sentence is redundant; every clause adds operational detail an agent needs. It is long but not bloated, with front-loaded intent and clear progression.

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?

Given 13 parameters, a nested filter object, and an open-world dataset, the description covers all operational facets: multiple search modes, filter constraints, sort options, author pagination, and deep paging with cursor. It references crossref_get_work for complementary functionality. With the output schema present and annotations declaring read-only and open-world behavior, nothing essential is missing for an agent to call this tool correctly.

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 baseline is 3. The description adds significant meaning beyond the schema: it explains the purpose of queryBibliographic (whole-citation match to resolve to DOI), the string-value requirement for boolean filter keys, the rationale for authorLimit in large-collaboration papers, and the mechanics of cursor paging. This is more than just restating the schema, but some parameters (e.g., rows, sort, order) are adequately described by the schema alone, so a 4 is appropriate.

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 opens with a precise verb and resource: 'Searches the Crossref works index (~155M records) by free text and/or structured filters.' It clearly states what the tool does and the scope of the index. The mention of structured filters and field-specific parameters distinguishes it from sibling search tools for funders and journals, and from crossref_get_work which retrieves single works.

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 guidance on choosing among search modes (generic query vs. queryTitle, queryAuthor, queryContainerTitle, queryBibliographic) with examples. It also explains when to use crossref_get_work: when a work's author list is truncated by authorLimit. Paging behavior (offset vs. cursor) is clearly directed, including the exact mechanism to start and end cursor-based paging.

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.