# io.github.cyanheads/datacite-mcp-server

> Search DataCite datasets and software, fetch DOI metadata, trace relations, format citations.

- name: io.github.cyanheads/datacite-mcp-server
- version: 0.1.3
- connection class: R0 (autonomous)
- trust: 94/100
- quality: 89/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.cyanheads%2Fdatacite-mcp-server
- tools: https://api.protogrid.dev/v1/servers/io.github.cyanheads%2Fdatacite-mcp-server/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "datacite-mcp-server": {
      "type": "http",
      "url": "https://datacite.caseyjhand.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 80
- drivers: +repository +namespace-matches-repo +reachable +uptime-100% +updated-2d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 89/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: datacite_get_citation (destructiveHint); datacite_search_works (destructiveHint); datacite_trace_relations (destructiveHint); …
- pass `tools.token_cost`: about 5,288 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 4 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: deps.dev does not know @cyanheads/datacite-mcp-server@0.1.3, @cyanheads/datacite-mcp-server@0.1.3

- tools: 6, about 5,288 tokens to load them all
- tool set hash: 9e0ba05cd06349123e1f7f6f684af7d8
- tools last changed: 2026-10-18T22:48:23.905Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.cyanheads/datacite-mcp-server.svg)](https://protogrid.dev/servers/io.github.cyanheads/datacite-mcp-server)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-18 `datacite_search_repositories` changed (inputSchema)
- 2026-10-18 `datacite_trace_relations` changed (inputSchema, outputSchema)
- 2026-10-18 `datacite_get_work` changed (description, inputSchema, outputSchema)
  - before: 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 their full counts reported; use datacite_trace_relations for the complete relation graph. A DOI DataCite does not hold returns found: false naming the registration agency that does, or saying the DOI does not exist.
  - after: 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.
- 2026-10-18 `datacite_search_works` changed (inputSchema, outputSchema)

Full history: https://api.protogrid.dev/v1/servers/io.github.cyanheads%2Fdatacite-mcp-server/changes

## Dependencies

- npm @cyanheads/datacite-mcp-server@0.1.3: unknown
- npm @cyanheads/datacite-mcp-server@0.1.3: unknown

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://datacite.caseyjhand.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

- npm @cyanheads/datacite-mcp-server@0.1.3
- npm @cyanheads/datacite-mcp-server@0.1.3

## Tools (6)

- `datacite_get_citation`: 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.
- `datacite_get_work`: 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.
- `datacite_list_reference`: 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.
- `datacite_search_repositories`: 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.
- `datacite_search_works`: 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.
- `datacite_trace_relations`: 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.
