datacite-mcp-server
Server Details
Search DataCite datasets and software, fetch DOI metadata, trace relations, format citations.
- Status
- Healthy
- Uptime
- 99.8% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/datacite-mcp-server
- GitHub Stars
- 1
- Server Listing
- @cyanheads/datacite-mcp-server
TDQS
Scored across 6 tools
Most tools target clearly distinct actions and resources: search works, search repositories, trace relations, fetch metadata, render citation, and list vocabularies. There is some overlap between datacite_get_citation's machine-readable DataCite JSON/XML output and datacite_get_work's full deposited metadata fetch, which could cause occasional misselection.
All tools use a consistent datacite_ prefix followed by a snake_case verb_noun pattern: get_citation, get_work, list_reference, search_repositories, search_works, trace_relations. The convention is predictable throughout.
Six tools is well-scoped for a read-only DataCite metadata server. Each tool covers a distinct retrieval need—search, lookup, citation, repository search, relation tracing, and vocabulary reference—without obvious redundancy.
The set covers the core DataCite retrieval workflows: search, metadata lookup, citation rendering, repository discovery, relation tracing, and controlled vocabulary reference. Minor gaps remain, such as dedicated provider/client detail lookup or direct event search, but agents can work around most of these using existing filters and reference data.
Available Tools
6 toolsdatacite_get_citationGet DataCite citationARead-onlyIdempotentInspect
Render one DataCite DOI as a formatted citation in a CSL style and locale (APA in US English by default), or as a machine-readable record: CSL JSON, BibTeX, RIS, DataCite JSON or XML, Schema.org JSON-LD, Codemeta, or JATS. A style the upstream renderer does not support — an unknown id or a dependent journal style — is rejected instead of silently rendered as APA. Formatted text comes back as plain text alongside the upstream HTML markup. A DOI DataCite does not hold returns found: false naming the registration agency that does.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | The DataCite DOI, e.g. 10.5061/dryad.234. Accepted bare, with doi: or info:doi/ prefixes, as a doi.org / dx.doi.org URL, or %2F-encoded; case-insensitive. | |
| style | No | CSL style id for format text, e.g. apa (default), ieee, chicago-author-date, modern-language-association, vancouver, nature. Lowercased. A style that would silently fall back to APA is rejected. Verified ids: datacite_list_reference topic citation_styles. | |
| format | No | text (formatted citation, default), csl_json, bibtex, ris, datacite_json, datacite_xml, schema_org, codemeta, or jats. | |
| locale | No | CSL locale for format text, e.g. en-GB, de-DE, fr-FR, or a bare language (de → de-DE); any case. Omitted: en-US. List: datacite_list_reference topic citation_locales. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The character cap applied: 100,000. |
| doi | No | The DOI, lowercase. |
| error | No | Present when the call failed. Absent on success. |
| found | No | True when DataCite holds the DOI and rendered it; false when it holds no public record (the miss fields explain). |
| shown | No | UTF-16 code units of DataCite's payload kept inline; zero for an oversized machine document, or the units text and citationHtml derive from. |
| style | No | CSL style applied (text only). |
| format | No | The format requested. |
| locale | No | CSL locale applied (text only; absent means en-US). |
| notice | No | Set when the style could not be confirmed as distinct from APA, or when the payload exceeded the inline cap (length and retrieval guidance). |
| citation | No | text: the citation as plain text (tags stripped, entities decoded), cut at 100,000 upstream UTF-16 units. Machine formats: the complete payload verbatim when at most 100,000 units; otherwise omitted in favor of downloadUrl. |
| guidance | No | The next step for this miss. Miss arm only. |
| mediaType | No | Media type negotiated. Found only. |
| truncated | No | True when the payload exceeded 100,000 UTF-16 code units: text was cut or a machine document was omitted for download. |
| missReason | No | Why DataCite holds no public record: another agency registered it, no agency did, it is a DataCite DOI without public (Findable) metadata, or the agency lookup did not answer. Miss arm only. |
| downloadUrl | No | Exact negotiated URL for the complete machine document when it exceeds the inline cap; fetch this URL to retrieve the document. |
| citationHtml | No | text only: the upstream HTML markup verbatim (<i>, &, small caps), cut like citation. |
| totalCharacters | No | Complete oversized machine document length in UTF-16 code units. |
| registrationAgency | No | Registration agency that holds the DOI (e.g. Crossref, mEDRA, DataCite), when known. Miss arm only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, openWorld), and the description adds substantive behavior: unsupported or dependent journal styles are rejected rather than silently falling back to APA, text is returned as plain text plus upstream HTML markup, and a DOI held by another agency yields found: false with the agency named. That is exactly the kind of failure-mode disclosure 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 the core action and output modes, then adds error handling and return-shape notes in separate sentences. Dense but every sentence carries information; the only cost is a slightly packed opening clause listing all formats.
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?
With an output schema present, the description need not detail return values, yet it still notes the plain-text-plus-HTML shape and the found:false case. Combined with complete schema coverage and annotations, nothing material is missing for correct invocation.
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 100%, so the baseline is 3; the description adds some value by explaining the default (APA/en-US), that style ids are lowercased, and by pointing to datacite_list_reference for verified style and locale ids. Most parameter detail, however, is already carried by 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 ('Render') plus resource ('one DataCite DOI') and enumerates both rendering modes (formatted citation vs. machine-readable record) with the exact format list. An agent can tell this apart from datacite_get_work, which returns the work record rather than a citation rendering.
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?
Explains defaults (APA in US English), what the style parameter controls, and what happens with unsupported styles or DOIs DataCite does not hold. It stops short of explicitly naming a sibling to use instead when the agent wants raw metadata, but the usage context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datacite_get_workGet DataCite workARead-onlyIdempotentInspect
Fetch the full deposited DataCite metadata for one DOI: titles, creators and contributors with ORCID iDs and ROR affiliations, publisher, dates, version, subjects, descriptions, funding, geolocations, rights, sizes and formats, related identifiers with their relation types, repository and provider, and citation, reference, version, part, view, and download counts. Long lists are capped with exact list/offset continuation recipes; select a list to retrieve later entries without losing the other metadata. datacite_trace_relations maps a bounded graph (at most 100 nodes and 1,000 edges). A DOI DataCite does not hold returns found: false naming the registration agency that does, or saying the DOI does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | The DOI, e.g. 10.5061/dryad.234: 10., a 4–9 digit registrant, a slash, and a suffix. Accepted bare, with doi: or info:doi/ prefixes, as a doi.org / dx.doi.org URL, or %2F-encoded; case-insensitive. | |
| list | No | One capped list to page in deposit order; other record fields keep their default caps. | |
| offset | No | Zero-based offset into valid mapped entries of list. Defaults to zero with list; requires list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| doi | No | The DOI, normalized to lowercase bare form. |
| dates | No | Dates. Found arm only. |
| error | No | Present when the call failed. Absent on success. |
| found | No | True when DataCite holds a public record for the DOI. |
| sizes | No | Sizes as deposited, e.g. "2123413 bytes". Found arm only. |
| counts | No | DataCite's own counts; they can trail the live record by a few events. Found arm only. |
| doiUrl | No | Resolver URL, https://doi.org/<doi>, with #, ?, and % percent-encoded. Found arm only. |
| notice | No | Discloses omitted malformed polygon geometry; other valid geographic fields remain available. |
| rights | No | The work's own rights and licenses — distinct from metadataLicense. Found arm only. |
| titles | No | Every title, main title first. Found arm only. |
| created | No | When the record was created. Found arm only. |
| formats | No | Formats as deposited. Found arm only. |
| updated | No | When the record was last updated. Found arm only. |
| version | No | Version string. Found arm only. |
| creators | No | Creators, up to 100; full count in truncatedLists by default or listPage when selected. Found arm only. |
| guidance | No | The next step for this miss. Miss arm only. |
| language | No | Language as deposited, usually an ISO 639-1 code such as en. Found arm only. |
| listPage | No | Paging metadata for the selected list, including empty and past-end pages. Found arm only. |
| subjects | No | Subjects, up to 100; full count in truncatedLists by default or listPage when selected. Found arm only. |
| publisher | No | Publisher. Found arm only. |
| landingUrl | No | The repository's landing page. Found arm only. |
| missReason | No | Why DataCite holds no public record: another agency registered it, no agency did, it is a DataCite DOI without public (Findable) metadata, or the agency lookup did not answer. Miss arm only. |
| registered | No | When the DOI was registered. Found arm only. |
| repository | No | The DataCite repository that registered the DOI. Found arm only. |
| contentUrls | No | Direct content URLs, when deposited. Found arm only. |
| contributors | No | Contributors, up to 100; full count in truncatedLists by default or listPage when selected. Found arm only. |
| descriptions | No | Descriptions. Found arm only. |
| geoLocations | No | Geolocations, up to 50; full count in truncatedLists by default or listPage when selected. Found arm only. |
| relatedItems | No | Related items described inline in this record — typically the journal, book, or series it appears in — up to 25; full count in truncatedLists by default or listPage when selected. Found arm only. |
| resourceType | No | Free-text resource type the depositor gave. Found arm only. |
| schemaVersion | No | DataCite metadata schema version URI. Found arm only. |
| truncatedLists | No | Lists the caps bound, with their full counts. Present only when a cap bound. |
| metadataLicense | No | License of the DataCite metadata itself (CC0 1.0), not of the work it describes. Found arm only. |
| publicationYear | No | Publication year. Found arm only. |
| fundingReferences | No | Funding, up to 100; full count in truncatedLists by default or listPage when selected. Found arm only. |
| registrationAgency | No | Registration agency that holds the DOI (e.g. Crossref, mEDRA, DataCite), when known. Miss arm only. |
| relatedIdentifiers | No | Related identifiers, capped at 100 (full counts in relatedIdentifierCounts). Found arm only. |
| resourceTypeGeneral | No | resourceTypeGeneral, e.g. Dataset or Software. Found arm only. |
| alternateIdentifiers | No | Alternate identifiers. Found arm only. |
| relatedIdentifierCounts | No | relationType → full count of related identifiers, before the cap. Found arm only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world and idempotent, and the description still adds substantial behavior: long lists are capped with exact list/offset continuation recipes, and a DOI not held by DataCite returns found: false naming the responsible registration agency. That describes both truncation and the miss case, which annotations cannot express.
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 action and dense with specifics; the field enumeration is long but each item tells the agent what is retrievable. Could be tightened by grouping the field list, but no sentence is pure 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?
Given an output schema exists, return value shape need not be explained, and the description still covers the two things the schema cannot: truncation/continuation and the not-found outcome. For a 3-parameter read tool with full schema coverage, 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 coverage is 100%, so the baseline is 3; the description earns a bump by explaining the purpose of `list`/`offset` — page one list while other fields keep default caps — which is the rationale behind the parameter pair rather than a restatement. DOI format handling is left entirely to the schema, which is reasonable given the regex and example there.
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 — fetch full deposited DataCite metadata for one DOI — and enumerates the payload scope (titles, creators with ORCID/ROR, funding, related identifiers, counts). It also positions itself against datacite_trace_relations, so an agent can separate this record-fetch tool from the graph traversal sibling.
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?
Usage is clear from context: call it with a DOI when the full record is wanted, and pass `list` to page one capped list without losing the rest. It also routes graph-shaped queries to datacite_trace_relations and out-of-scope DOIs to the named registration agency. It never explicitly contrasts with datacite_search_works or datacite_get_citation, so the sibling differentiation is partial rather than complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datacite_list_referenceDataCite reference vocabulariesARead-onlyIdempotentInspect
Look up the controlled vocabularies and identifier forms the other datacite_* tools accept: resource types, relation types with their inverses and groups, related-identifier types, date and contributor types, fields of science, common license ids, repository types, certificates, software platforms, client types, sort orders, query-syntax field paths, citation formats, verified citation styles and locales, accepted identifier forms (DOI, ORCID iD, ROR ID, Crossref Funder ID, country, language, repository, and provider ids), and coverage and rate-limit rules. Offline; makes no upstream request.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Which vocabulary or rule set to return. identifier_types lists related-identifier types (the relatedIdentifierType values datacite_trace_relations reports as node idType); identifier_formats lists the accepted input forms of DOIs, ORCID iDs, ROR IDs, Crossref Funder IDs, country and language codes, and repository and provider ids; query_syntax lists the field paths and operators of the datacite_search_works query input; coverage states what DataCite holds, the paging and facet limits, citation accrual, Event Data scope, and rate limits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notes | No | Usage rules and caveats for the topic. |
| title | No | Human-readable topic title. |
| topic | No | The topic returned. |
| entries | No | The vocabulary entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds genuine context on top: "Offline; makes no upstream request" confirms no network/rate cost, and it mentions that coverage includes rate-limit and paging rules. It does not describe output shape, though an output schema exists.
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, then one dense but readable enumeration that mirrors and slightly annotates the enum values, closing with the useful offline note. The list is long, but each item maps to a real topic an agent can request, so it mostly earns its place.
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-enum-parameter reference tool with a full output schema, the description covers purpose, scope, and the offline/no-request behavior. An agent has everything needed to invoke it correctly, with only minor gaps (no mention of response size or caching expectations).
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 100% and the enum's own description already spells out the tricky topics (identifier_types vs identifier_formats, query_syntax, coverage). The prose enumeration in the description largely mirrors the enum values, adding only grouping detail such as 'relation types with their inverses and groups'. Baseline 3 is appropriate.
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) and resource (controlled vocabularies and identifier forms), scoped to what the sibling datacite_* tools accept. An agent immediately understands this is the offline reference/dictionary tool, distinct from the search/get/trace siblings.
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?
Makes the usage context clear by tying the lookup to the inputs other datacite_* tools require ("the identifier forms the other datacite_* tools accept"), which implicitly recommends calling it before those tools. It stops short of explicit when-not-to-use or step-ordering guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datacite_search_repositoriesSearch DataCite repositoriesARead-onlyIdempotentInspect
Find DataCite repository accounts by name or description text, field of science, repository type, certification (e.g. CoreTrustSeal), software platform, client type, or parent provider, or look up known repository IDs. Returns each repository's repositoryId — the value datacite_search_works takes in repository_ids — with its providerId, name, type, certificates, software, subjects, homepage, and re3data link. To rank repositories by how many works they hold on a topic, run datacite_search_works with that topic and include_facets: true; its repositories facet lists the top ten with counts.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number. Past the last page the list is empty. | |
| limit | No | Requested repositories per page, 1–10,000; values above 100 apply 100 with a notice. | |
| query | No | Text matched against repository names, alternate names, and descriptions. Query-string syntax is accepted. | |
| software | No | Software platform slug, lowercased: dataverse, dspace, invenio, ckan, open_journal_systems_ojs, … (free-form upstream; see datacite_list_reference topic software_platforms). | |
| client_type | No | Account type: repository, periodical, igsnCatalog, or raidRegistry. Omitted: all. | |
| provider_id | No | Parent provider id, e.g. dryad — the providerId a repository carries. Any case. | |
| certificates | No | Certificates (any match): CoreTrustSeal, WDS, DSA, DINI, RatSWD, CLARIN, DIN 31644; any case. | |
| repository_ids | No | Known repository ids, shaped provider.repository (e.g. dryad.dryad); any case. Up to 1,000 inputs; queries the first 25 distinct normalized ids and names omitted ids. Use alone — an id lookup ignores query and filters. | |
| field_of_science | No | An OECD Fields of Science id or label the repository lists among its subjects, e.g. earth_and_related_environmental_sciences. List: datacite_list_reference topic fields_of_science. | |
| repository_types | No | Repository types (any match): institutional, disciplinary, multidisciplinary, project-related, governmental, other. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when nothing matched, the page is past the end, or a requested repository id matched no account. |
| nextPage | No | Next page number, when more repositories match. |
| totalCount | No | Total repositories matching. |
| orderApplied | No | Result order — always by name, as the registry returns it. |
| repositories | No | Repositories on this page, ordered by name. |
| appliedFilters | No | Every applied filter as sent upstream; {} when none. |
| effectiveQuery | No | The composed search query, or * for an unfiltered search; absent for repository_ids lookup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world behavior, so the safety bar is low. The description adds the valuable cross-tool contract — the returned repositoryId is exactly the value datacite_search_works accepts in repository_ids — plus a summary of the payload fields. Pagination caps and the >100 limit behavior are left to the schema.
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?
Two sentences, front-loaded with the capabilities and ending with the routing tip. The second sentence is long but every clause — facet ranking, top ten, counts — carries actionable 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?
With an output schema and full annotation coverage, the description only needs to cover purpose, alternatives, and cross-tool wiring, all of which it does. Return-shape details are partially restated but the mode-switching caveats live in the schema rather than the prose.
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 100% and the parameters are thoroughly documented there, including the rule that ID lookup ignores query and filters. The description's filter list and ID-lookup mention largely mirror the schema, so it clears the baseline but adds little parameter-level meaning beyond it.
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 (find/look up) and resource (DataCite repository accounts) and enumerates the filter dimensions, so an agent immediately knows the surface. It is clearly distinct from datacite_search_works, whose repository_ids parameter it feeds the repositoryId into.
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 names both modes (filter search vs. ID lookup) and gives an explicit alternative-with-condition: to rank repositories by work counts on a topic run datacite_search_works with include_facets: true and read the repositories facet. Nothing is left to inference about which sibling to call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datacite_search_worksSearch DataCite worksARead-onlyIdempotentInspect
Search DataCite DOI metadata for datasets, software, samples, workflows, and other research outputs. Combine plain words (text) or OpenSearch query syntax (query) with filters for resource type, creator (ORCID iD or name), affiliation (ROR ID or name), affiliation country, funder (ROR ID, Crossref Funder ID, or name), subject, field of science, repository, provider, license, language, geographic place, publication-year range, and minimum citation count. Returns the total match count and compact rows — DOI, title, first creators, year, type, repository, licenses, and citation/view/download counts — plus optional top facet counts. Page numbers reach the first 10,000 ranked matches; pass cursor "*" to walk any result set in full, in registration order.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Ranked page number, 1 when omitted. page × limit may not exceed 10,000; not with cursor. | |
| sort | No | relevance, newest, oldest, recently_updated, most_cited, most_viewed, or most_downloaded. Omitted: relevance when text or query is set, else newest. Not with cursor. | |
| text | No | Plain words and phrases, searched literally: query-syntax characters are escaped, so "Climate change: impacts" works. Angle brackets are removed; nonblank text with no remaining searchable clause is rejected. Blank text is unset. Terms are ANDed. | |
| limit | No | Requested rows per page, 1–10,000; values above 100 apply 100 with a notice. | |
| place | No | A geographic place phrase, matched against deposited place names. | |
| query | No | OpenSearch query-string syntax — field paths (titles.title:"…", creators.name:…, relatedIdentifiers.relationType:…), AND/OR/NOT, ranges, wildcards. Field paths: datacite_list_reference topic query_syntax. ANDed with text and the filters. | |
| cursor | No | Cursor walk over the full result set in registration order: "*" to start, then the nextCursor of the previous page, unchanged, with the same query and filters. Not with page or sort. | |
| funder | No | A funder ROR ID, a Crossref Funder ID (10.13039/100000001, its doi.org URL, or the bare digits), or a funder name. | |
| creator | No | A creator ORCID iD (0000-0002-1825-0097, 16 digits, or an orcid.org URL; checksum verified) or a name — every name token must appear in one creator field. | |
| subject | No | A subject phrase, matched case-insensitively against subject terms. | |
| language | No | ISO 639-1 language code of the work, any case (en, de). | |
| licenses | No | The work's own license ids (any match), e.g. cc-by-4.0, cc0-1.0, cc0 1.0, mit. Trimmed and lowercased, then matched exactly, preserving internal spaces; reuse ids from the licenses facet or datacite_list_reference topic licenses. | |
| affiliation | No | A ROR ID (021nxhr62 or a ror.org URL) — matches creator and contributor affiliations — or an affiliation name phrase. | |
| provider_ids | No | Provider ids (any match), e.g. dryad — the providerId datacite_search_repositories returns. Any case. | |
| published_to | No | Latest publication year (inclusive). Alone, the range is open-ended. | |
| min_citations | No | Only works DataCite records at least this many citations for. | |
| include_facets | No | Add top facet counts (resource types, years, repositories, providers, affiliations, fields of science, licenses). Adds 2–8 s. | |
| published_from | No | Earliest publication year (inclusive). Alone, the range is open-ended. | |
| repository_ids | No | Repository ids (any match), shaped provider.repository — e.g. dryad.dryad or cern.zenodo — as datacite_search_repositories returns them in repositoryId. Any case. | |
| resource_types | No | resourceTypeGeneral values (any match): dataset, software, computational-notebook, workflow, model, physical-object, … PascalCase accepted. Full list: datacite_list_reference topic resource_types. | |
| fields_of_science | No | OECD Fields of Science ids or labels (any match), e.g. computer_and_information_sciences or "Earth and related environmental sciences". List: datacite_list_reference topic fields_of_science. | |
| affiliation_country | No | ISO 3166-1 alpha-2 country of a creator or contributor affiliation, any case (DE, us). Alpha-3 codes and names are rejected. | |
| include_child_funders | No | Also match the ROR funder's child organizations. Only with a ROR funder. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| works | No | Matching works on this page. |
| facets | No | Top facet counts — only with include_facets. |
| notice | No | Guidance when nothing matched, paging stops short of the total, or the page is past the end. |
| nextPage | No | Next ranked page number, when more results lie within the 10,000 ceiling. |
| nextCursor | No | Pass as cursor, unchanged and with the same query and filters, to read the next page of a walk; absent on the last page. |
| totalCount | No | Total works matching the query and filters. |
| sortApplied | No | The sort order applied; a cursor walk is always oldest (registration order). |
| appliedFilters | No | Every applied filter as sent upstream; {} when none. |
| effectiveQuery | No | The composed query string sent upstream. |
| rankedCeilingReached | No | True when ranked paging stops before all matches have been delivered; restart with cursor "*". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, openWorld), and the description adds real behavioral context: result rows are compact with named fields, facets are optional, and pagination is either ranked-page (bounded at 10,000) or registration-order cursor walk. The latency note for facets also exists in the schema, so part of this is restated rather than new, keeping it below a 5.
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?
Three sentences with the capability statement front-loaded, followed by the filter menu and then the return/pagination contract. The middle sentence is a long enumeration that overlaps the schema, but every clause helps an agent recognize whether the filter it needs exists.
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 23-parameter search tool with annotations and an output schema, the description covers the essentials: query modes, filter surface, return shape, facet cost, and both pagination strategies with their bounds and mutual exclusions. It also cross-references the tools that supply valid repository/provider ids and vocabularies, so nothing blocking a correct call 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 100% and each parameter already documents its accepted forms, so the baseline is 3. The description adds only a synthesis—filters are ANDed with text/query and array filters accept any match—which is modest value beyond the per-parameter docs.
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: searches DataCite DOI metadata for datasets, software, samples, workflows and other research outputs, which makes the scope of the corpus obvious. It does not name a sibling, so an agent must infer the split with datacite_get_work (single DOI lookup) and datacite_search_repositories (provider/repository discovery) rather than being told.
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?
Gives concrete operating guidance: combine `text` (literal) or `query` (OpenSearch syntax) with filters, use page numbers only within the first 10,000 ranked matches, and pass cursor "*" to walk the full set. It points to datacite_list_reference for syntax and controlled vocabularies. It never states when to prefer a sibling over this tool, so the routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datacite_trace_relationsTrace DataCite relationsARead-onlyIdempotentInspect
Map the relation graph around one DOI — versions, parts, supplements, derivations, documentation, citations, references, and every other DataCite relation type — as nodes and directed edges that keep the relationType exactly as asserted and name each edge's source: the DOI's own metadata, other DataCite records that point at it, or DataCite Event Data (citation links harvested from Crossref and other sources). Accepts any DOI, including a journal article's DOI, to find the datasets and software it cites and those that cite, supplement, or derive from it. DataCite DOIs are hydrated with title, type, year, repository, and citation count; other identifiers stay leaf nodes. Depth 1 by default, at most 2, with a node cap (default 50, max 100) disclosed when it binds. An absent edge is not evidence that no relationship exists.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | The root DOI — any agency's, e.g. a DataCite dataset 10.5061/dryad.234 or a journal article's DOI. Bare, doi:, or a doi.org URL; case-insensitive. | |
| depth | No | Hops from the root: 1 (default) or 2. Depth 2 expands at most 10 DataCite neighbours through their own and reverse metadata, and runs only while max_nodes has room after the first hop. | |
| max_nodes | No | Requested node cap including the root, 1–10,000 (default 50); values above 100 apply 100 with a notice. Filled in order: own-metadata targets, records pointing at the root, Event Data endpoints, then the second hop. | |
| event_offset | No | Absolute zero-based Event Data position, 0–9,999. Presence, including 0, selects Event-Data-only mode: no metadata edges or depth-2 expansion. Reads one 100-event upstream page, starting within it. Continue with coverage.eventData.nextEventOffset and the same doi and filters; ordering can change between calls, so this is not a snapshot. | |
| relation_types | No | Only these relation types (IsVersionOf, HasPart, IsSupplementTo, IsDerivedFrom, Cites, IsCitedBy, …), any case, read from the traced DOI's side: HasPart keeps the DOI's own HasPart assertions and the records asserting IsPartOf it, each edge shown as asserted. IsPublishedIn and Other have no inverse and match on either side. A second hop reads them from each expanded neighbour's side. Omitted: all. Groups: datacite_list_reference topic relation_types. | |
| include_event_data | No | Add Event Data citation links (mostly harvested from Crossref). Citation relation types only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The max_nodes applied. |
| root | No | The root DOI. For another agency's DOI, title, type, and year come from DataCite's linking copy when it holds one. |
| edges | No | Edges between returned nodes, at most 1,000, the first found; identical edges from several sources are merged. |
| error | No | Present when the call failed. Absent on success. |
| nodes | No | Nodes, root first. |
| shown | No | Nodes returned, root included. |
| notice | No | Coverage caveats: non-DataCite root, no relations found, Event Data unavailable, records pointing at a DOI too large to read 100 of, Event Data objects left out and nodes left unhydrated because DataCite did not answer in time, node cap, unexpanded second hop, neighbours past the second-hop limit, edge cap, uncounted citations. |
| coverage | No | What each source contributed and how much of it was read. |
| truncated | No | True when max_nodes or the 1,000-edge cap bound. |
| edgesFound | No | Edges between the returned nodes before the 1,000-edge cap; present only when the cap bound. |
| rootCounts | No | DataCite's own counts for the root (DataCite roots only), to compare with the edges shown. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring readOnly/openWorld/idempotent, the description adds real behavioral context: depth cap of 2, node-cap default and ceiling with a notice when it binds, hydration rules for DataCite vs non-DataCite identifiers, single-page event reads with ordering that can change, and the caution that an absent edge is not evidence of no relationship. That is disclosure beyond the structured fields.
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 action and organized as purpose → DOI acceptance → hydration/caps → caveat. It is dense but not padded, though it re-states depth and node-cap defaults that the schema already carries and lists relation categories at unnecessary length in the opening sentence.
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 six-parameter, multi-mode graph tool with an output schema, the description covers the node/edge model, truncation disclosure, second-hop behavior, pagination continuation, and the key epistemics caveat. 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 100%, so the schema already explains doi, depth, max_nodes, event_offset, relation_types and include_event_data in detail. The description largely restates the depth and node-cap defaults rather than adding syntax or semantics the schema lacks; baseline 3 applies.
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 — 'Map the relation graph around one DOI' — and enumerates the scope (versions, parts, supplements, derivations, citations, references). An agent can tell this multi-hop graph tool apart from singular-record siblings like datacite_get_work and datacite_get_citation 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?
Use cases are implied ('find the datasets and software it cites and those that cite, supplement, or derive from it') and the event-data-only mode trigger is explained, but no sibling is ever named as an alternative and no when-not-to-use condition is given. Usage must be inferred from the described behavior.
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.
4 tool updates
- Changed
datacite_get_citation6 fields changed- changed
Output schema / properties / citation / descriptionPrevious value: -"text: the citation as plain text (tags stripped, entities decoded); machine formats: the payload verbatim. A payload over 100,000 characters is cut to its first 100,000 (truncated: true)."New value: +"text: the citation as plain text (tags stripped, entities decoded), cut at 100,000 upstream UTF-16 units. Machine formats: the complete payload verbatim when at most 100,000 units; otherwise omitted in favor of downloadUrl." - added
Output schema / properties / downloadUrlAdded value: +{ + "description": "Exact negotiated URL for the complete machine document when it exceeds the inline cap; fetch this URL to retrieve the document.", + "type": "string" +} - changed
Output schema / properties / notice / descriptionPrevious value: -"Set when the style could not be confirmed as distinct from APA, or when the payload was cut (its full length and the cut)."New value: +"Set when the style could not be confirmed as distinct from APA, or when the payload exceeded the inline cap (length and retrieval guidance)." - changed
Output schema / properties / shown / descriptionPrevious value: -"Characters of DataCite's payload kept; for text, citation and citationHtml derive from them."New value: +"UTF-16 code units of DataCite's payload kept inline; zero for an oversized machine document, or the units text and citationHtml derive from." - added
Output schema / properties / totalCharactersAdded value: +{ + "description": "Complete oversized machine document length in UTF-16 code units.", + "type": "number" +} - changed
Output schema / properties / truncated / descriptionPrevious value: -"True when the payload ran past 100,000 characters and was cut."New value: +"True when the payload exceeded 100,000 UTF-16 code units: text was cut or a machine document was omitted for download."
- Changed
datacite_get_work2 fields changed- added
Output schema / properties / geoLocations / items / properties / polygonAdded value: +{ + "additionalProperties": false, + "description": "Deposited polygon boundary and optional interior point.", + "properties": { + "inPolygonPoint": { + "additionalProperties": false, + "description": "Deposited interior point.", + "properties": { + "latitude": { + "description": "Latitude, decimal degrees.", + "type": "number" + }, + "longitude": { + "description": "Longitude, decimal degrees.", + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + }, + "points": { + "description": "Polygon vertices in deposit order, including a repeated closing vertex when deposited.", + "items": { + "additionalProperties": false, + "description": "One deposited polygon vertex.", + "properties": { + "latitude": { + "description": "Latitude, decimal degrees.", + "type": "number" + }, + "longitude": { + "description": "Longitude, decimal degrees.", + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "points" + ], + "type": "object" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Discloses omitted malformed polygon geometry; other valid geographic fields remain available.", + "type": "string" +}
- Changed
datacite_search_repositories1 field changed- added
Output schema / properties / effectiveQueryAdded value: +{ + "description": "The composed search query, or * for an unfiltered search; absent for repository_ids lookup.", + "type": "string" +}
- Changed
datacite_search_works3 fields changed- changed
Input schema / properties / text / descriptionPrevious value: -"Plain words and phrases, searched literally: every query-syntax character is escaped, so \"Climate change: impacts\" works and text can never cause a syntax error. Terms are ANDed."New value: +"Plain words and phrases, searched literally: query-syntax characters are escaped, so \"Climate change: impacts\" works. Angle brackets are removed; nonblank text with no remaining searchable clause is rejected. Blank text is unset. Terms are ANDed." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `invalid_query`: DataCite rejects the syntax of the query input (unbalanced parentheses or quotes, dangling operator). `invalid_filter`: A filter value is malformed: an ORCID iD failing its checksum, a ror.org or 10.13039/ value that is not a ROR ID or Crossref Funder ID, a language outside ISO 639-1, a creator or funder with no letters or digits, a reversed year range, or include_child_funders without a ROR funder. `page_ceiling`: page × limit exceeds 10,000, or the upstream reports a page other than the one requested. `invalid_cursor`: cursor is neither \"*\" nor an envelope this tool returned, belongs to a different query or filter set, or the upstream restarted the walk. `conflicting_paging`: cursor combined with page or sort. `rate_limited`: This deployment's shared DataCite request budget is spent: its request queue could not start a request before the call's deadline, or DataCite answered HTTP 429. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_text`: Supplied nonblank text has no searchable literal clause after escaping. `invalid_query`: DataCite rejects the syntax of the query input (unbalanced parentheses or quotes, dangling operator). `invalid_filter`: A filter value is malformed: an ORCID iD failing its checksum, a ror.org or 10.13039/ value that is not a ROR ID or Crossref Funder ID, a language outside ISO 639-1, a creator or funder with no letters or digits, a reversed year range, or include_child_funders without a ROR funder. `page_ceiling`: page × limit exceeds 10,000, or the upstream reports a page other than the one requested. `invalid_cursor`: cursor is neither \"*\" nor an envelope this tool returned, belongs to a different query or filter set, or the upstream restarted the walk. `conflicting_paging`: cursor combined with page or sort. `rate_limited`: This deployment's shared DataCite request budget is spent: its request queue could not start a request before the call's deadline, or DataCite answered HTTP 429. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_query", - "invalid_filter", - "page_ceiling", - "invalid_cursor", - "conflicting_paging", - "rate_limited" -]New value: +[ + "invalid_text", + "invalid_query", + "invalid_filter", + "page_ceiling", + "invalid_cursor", + "conflicting_paging", + "rate_limited" +]
4 tool updates
- Changed
datacite_get_work15 fields changed- added
Input schema / properties / listAdded value: +{ + "description": "One capped list to page in deposit order; other record fields keep their default caps.", + "enum": [ + "creators", + "contributors", + "relatedIdentifiers", + "subjects", + "fundingReferences", + "relatedItems", + "geoLocations" + ], + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Zero-based offset into valid mapped entries of list. Defaults to zero with list; requires list.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - changed
Output schema / properties / contributors / descriptionPrevious value: -"Contributors, capped at 100 (full count in truncatedLists). Found arm only."New value: +"Contributors, up to 100; full count in truncatedLists by default or listPage when selected. Found arm only." - changed
Output schema / properties / creators / descriptionPrevious value: -"Creators, capped at 100 (full count in truncatedLists). Found arm only."New value: +"Creators, up to 100; full count in truncatedLists by default or listPage when selected. Found arm only." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `invalid_doi`: The doi input is not a DOI after normalization. `rate_limited`: This deployment's shared DataCite request budget is spent: its request queue could not start a request before the call's deadline, or DataCite answered HTTP 429. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `offset_without_list`: An offset is supplied without a selected list. `invalid_doi`: The doi input is not a DOI after normalization. `rate_limited`: This deployment's shared DataCite request budget is spent: its request queue could not start a request before the call's deadline, or DataCite answered HTTP 429. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_doi", - "rate_limited" -]New value: +[ + "offset_without_list", + "invalid_doi", + "rate_limited" +] - changed
Output schema / properties / fundingReferences / descriptionPrevious value: -"Funding, capped at 100 (full count in truncatedLists). Found arm only."New value: +"Funding, up to 100; full count in truncatedLists by default or listPage when selected. Found arm only." - changed
Output schema / properties / geoLocations / descriptionPrevious value: -"Geolocations, capped at 50 (full count in truncatedLists). Found arm only."New value: +"Geolocations, up to 50; full count in truncatedLists by default or listPage when selected. Found arm only." - added
Output schema / properties / listPageAdded value: +{ + "additionalProperties": false, + "description": "Paging metadata for the selected list, including empty and past-end pages. Found arm only.", + "properties": { + "list": { + "description": "The selected record list.", + "enum": [ + "creators", + "contributors", + "relatedIdentifiers", + "subjects", + "fundingReferences", + "relatedItems", + "geoLocations" + ], + "type": "string" + }, + "nextOffset": { + "description": "Next offset for this same list and DOI; absent at the end.", + "type": "number" + }, + "offset": { + "description": "Requested zero-based offset into valid mapped entries.", + "type": "number" + }, + "total": { + "description": "Total valid mapped entries before capping.", + "type": "number" + } + }, + "required": [ + "list", + "offset", + "total" + ], + "type": "object" +} - changed
Output schema / properties / relatedItems / descriptionPrevious value: -"Related items described inline in this record — typically the journal, book, or series it appears in — capped at 25 (full count in truncatedLists). Found arm only."New value: +"Related items described inline in this record — typically the journal, book, or series it appears in — up to 25; full count in truncatedLists by default or listPage when selected. Found arm only." - changed
Output schema / properties / relatedItems / items / properties / title / descriptionPrevious value: -"Related item title."New value: +"Plain-text related item title, normalized once." - changed
Output schema / properties / subjects / descriptionPrevious value: -"Subjects, capped at 100 (full count in truncatedLists). Found arm only."New value: +"Subjects, up to 100; full count in truncatedLists by default or listPage when selected. Found arm only." - changed
Output schema / properties / titles / items / properties / title / descriptionPrevious value: -"Title text."New value: +"Plain-text title, with formatting tags removed and entities decoded once." - added
Output schema / properties / truncatedLists / items / properties / nextOffsetAdded value: +{ + "description": "First unread offset; call again with list set to field and this offset.", + "type": "number" +} - changed
Output schema / properties / truncatedLists / items / requiredPrevious value: -[ - "field", - "shown", - "total" -]New value: +[ + "field", + "shown", + "total", + "nextOffset" +]
- Changed
datacite_search_repositories4 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Repositories per page, 1–100."New value: +"Requested repositories per page, 1–10,000; values above 100 apply 100 with a notice." - changed
Input schema / properties / limit / maximumPrevious value: -100New value: +10000 - changed
Input schema / properties / repository_ids / descriptionPrevious value: -"Known repository ids to look up in one batch, shaped provider.repository (e.g. dryad.dryad); any case. Use alone — an id lookup ignores query and filters."New value: +"Known repository ids, shaped provider.repository (e.g. dryad.dryad); any case. Up to 1,000 inputs; queries the first 25 distinct normalized ids and names omitted ids. Use alone — an id lookup ignores query and filters." - changed
Input schema / properties / repository_ids / maxItemsPrevious value: -25New value: +1000
- Changed
datacite_search_works5 fields changed- changed
Input schema / properties / licenses / descriptionPrevious value: -"The work's own license ids (any match), SPDX-style: cc-by-4.0, cc0-1.0, mit. Lowercased, then matched exactly; common ids: datacite_list_reference topic licenses."New value: +"The work's own license ids (any match), e.g. cc-by-4.0, cc0-1.0, cc0 1.0, mit. Trimmed and lowercased, then matched exactly, preserving internal spaces; reuse ids from the licenses facet or datacite_list_reference topic licenses." - changed
Input schema / properties / licenses / items / patternPrevious value: -"^\\s*[A-Za-z0-9.+_-]+\\s*$"New value: +"^\\s*[A-Za-z0-9.+_-](?:[A-Za-z0-9.+_ -]*[A-Za-z0-9.+_-])?\\s*$" - changed
Input schema / properties / limit / descriptionPrevious value: -"Rows per page, 1–100."New value: +"Requested rows per page, 1–10,000; values above 100 apply 100 with a notice." - changed
Input schema / properties / limit / maximumPrevious value: -100New value: +10000 - added
Output schema / properties / rankedCeilingReachedAdded value: +{ + "description": "True when ranked paging stops before all matches have been delivered; restart with cursor \"*\".", + "type": "boolean" +}
- Changed
datacite_trace_relations16 fields changed- added
Input schema / properties / event_offsetAdded value: +{ + "description": "Absolute zero-based Event Data position, 0–9,999. Presence, including 0, selects Event-Data-only mode: no metadata edges or depth-2 expansion. Reads one 100-event upstream page, starting within it. Continue with coverage.eventData.nextEventOffset and the same doi and filters; ordering can change between calls, so this is not a snapshot.", + "maximum": 9999, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / max_nodes / descriptionPrevious value: -"Node cap including the root, 1–100 (default 50). Filled in order: own-metadata targets, records pointing at the root, Event Data endpoints, then the second hop."New value: +"Requested node cap including the root, 1–10,000 (default 50); values above 100 apply 100 with a notice. Filled in order: own-metadata targets, records pointing at the root, Event Data endpoints, then the second hop." - changed
Input schema / properties / max_nodes / maximumPrevious value: -100New value: +10000 - added
Output schema / properties / coverage / properties / eventData / properties / hasNextPageAdded value: +{ + "description": "Whether the returned upstream links contain next; does not override totals or the ranked ceiling.", + "type": "boolean" +} - changed
Output schema / properties / coverage / properties / eventData / properties / kept / descriptionPrevious value: -"Events kept as edges before max_nodes applies; for a non-DataCite root, only events whose object is a DataCite DOI are kept."New value: +"Default mode: qualifying events before max_nodes applies. Event-Data-only mode: raw events represented in returned edges, duplicates included. For a non-DataCite root, only confirmed DataCite objects are kept." - added
Output schema / properties / coverage / properties / eventData / properties / nextEventOffsetAdded value: +{ + "description": "Next raw event to examine with the same DOI and filters. A blocked position retries here; max_nodes=1 requires raising max_nodes first. Absent on exhaustion, a skipped/unavailable page, or the 10,000-result ceiling.", + "type": "number" +} - added
Output schema / properties / coverage / properties / eventData / properties / offsetAdded value: +{ + "description": "Requested absolute raw-event offset, present in Event-Data-only mode.", + "type": "number" +} - added
Output schema / properties / coverage / properties / eventData / properties / pageAdded value: +{ + "description": "Upstream page returned, or requested when upstream omits it.", + "type": "number" +} - added
Output schema / properties / coverage / properties / eventData / properties / progressAdded value: +{ + "description": "Continuation state: more raw events, exhausted matching results, the 10,000-ranked-result ceiling, or an uncertain endpoint lookup that must be retried.", + "enum": [ + "more", + "exhausted", + "ceiling", + "blocked" + ], + "type": "string" +} - added
Output schema / properties / coverage / properties / eventData / properties / totalPagesAdded value: +{ + "description": "Upstream total-pages when provided.", + "type": "number" +} - changed
Output schema / properties / coverage / properties / ownMetadata / properties / status / descriptionPrevious value: -"not_datacite when DataCite holds no record for the root."New value: +"not_datacite when DataCite holds no record for the root; skipped in event_offset mode." - changed
Output schema / properties / coverage / properties / ownMetadata / properties / status / enumPrevious value: -[ - "ok", - "not_datacite" -]New value: +[ + "ok", + "not_datacite", + "skipped" +] - removed
Output schema / properties / coverage / properties / reverseMetadata / properties / status / constRemoved value: -"ok" - changed
Output schema / properties / coverage / properties / reverseMetadata / properties / status / descriptionPrevious value: -"Always ok: a reverse query that does not answer fails the whole call."New value: +"skipped in event_offset mode; otherwise a reverse query that does not answer fails the whole call." - added
Output schema / properties / coverage / properties / reverseMetadata / properties / status / enumAdded value: +[ + "ok", + "skipped" +] - changed
Output schema / properties / edges / items / properties / sources / descriptionPrevious value: -"How the edge was reached. metadata and reverse_metadata both read from's own relatedIdentifiers — metadata by reading that record, reverse_metadata by querying for records that point at to — so an edge listing both is one assertion reached twice, not two confirmations; event_data is a link harvested by Event Data, independent of either."New value: +"How the edge was reached. metadata and reverse_metadata both read from's own relatedIdentifiers and relatedItems — metadata by reading that record, reverse_metadata by querying for records that point at to — so an edge listing both is one assertion reached twice, not two confirmations; event_data is a link harvested by Event Data, independent of either."
6 tool updates
- First observed
datacite_get_citation - First observed
datacite_get_work - First observed
datacite_list_reference - First observed
datacite_search_repositories - First observed
datacite_search_works - First observed
datacite_trace_relations
Related MCP Connectors
Search and resolve Zenodo datasets, software, and publications by DOI; trace versions and funding.
Resolve DOIs, search ~188M scholarly works, and fetch references via the Crossref REST API.
Search 150M+ academic works, journals, and funders via Crossref API.
DataCite MCP — DOIs for research datasets (free, no auth)
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides access to DataCite DOIs for research datasets, enabling searching and retrieval of dataset metadata.273 npmMIT
- 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.6520 PyPI4MIT
- AlicenseAqualityCmaintenanceProvides read-only access to DataCite's index of 125M+ research DOIs via natural language queries, enabling searching, metadata retrieval, citation formatting, and relationship exploration.9566 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables querying citation data from OpenCitations, including references, citations, citation counts, and bibliographic metadata for DOIs.8 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.