Datacite Mcp Server

io.github.cyanheads由 GitHub 帳號 cyanheads 發布v0.2.1更新於 Nov 1, 2026

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

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取知識與記憶

概覽

AI 產生的概覽

唯讀的 DataCite DOI 中介資料 MCP 伺服器:檢索資料集與軟體、檢視紀錄、追蹤關聯並產生引用格式。

可以做什麼
  • 依文字、查詢語法及資源類型、建立者、資助者、倉儲、發布日期等篩選條件檢索 DataCite 作品
  • 取得單一 DOI 的完整寄存中介資料,包含建立者、機構、資助、地理座標與計數
  • 追蹤 DOI 周邊的關聯圖(版本、部分、補充資料、引用),並標明每條邊的來源與涵蓋範圍
  • 依名稱、學科領域、類型或認證尋找 DataCite 倉儲,並取得作品檢索所用的倉儲 ID
  • 將 DOI 輸出為指定 CSL 樣式與語言的引用,或 BibTeX、RIS、CSL JSON、DataCite XML、Schema.org、Codemeta、JATS
  • 查詢其他工具所接受的受控詞彙與識別碼格式
適用情境
適合需要依 DOI 尋找研究資料集或軟體、確認某個 DOI 實際描述的內容、沿版本與引用關係追蹤研究成果,或產生可直接使用的引用條目。適用於文獻與資料探索、倉儲調查與參考文獻格式化。
執行需求
不需要 API 金鑰。可連線託管的 Streamable HTTP 端點,或以 npx 在本機執行(需 Node.js v24+ 或 Bun v1.4.0+)。選用的 DATACITE_CONTACT_EMAIL 可提高 DataCite 的每 IP 請求額度;DATACITE_MAX_REQUESTS_PER_5MIN 設定本機請求預算。需要連線至 DataCite 與 doi.org 的網路。
安裝前請注意
伺服器為唯讀,但託管執行個體的所有呼叫端共用每 5 分鐘 800 次的請求預算,大量使用應自行架設。DATACITE_CONTACT_EMAIL 會以 mailto: 形式寫入 User-Agent 傳送給 DataCite。寄存的標題、描述與姓名屬第三方文字,應視為資料而非指令。中介資料為 CC0,但其描述的資料集與軟體保留各自的授權。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Datacite Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.cyanheads%2Fdatacite-mcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

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

README

@cyanheads/datacite-mcp-server

Search DataCite datasets and software, fetch DOI metadata, trace relations, format citations via MCP. STDIO or Streamable HTTP.

6 Tools

Public Hosted Server: https://datacite.caseyjhand.com/mcp


Overview

DOI metadata from DataCite for datasets, software, samples, workflows, and other research outputs that repositories deposit worldwide. Search it, open a record in full, trace a DOI's relations (versions, parts, supplements, citations), find the repositories that publish in a field, and format citations. No API key required.

Tools

ToolDescription
datacite_search_worksSearch works by plain text or query syntax plus structured filters, in ranked pages or a full cursor walk, with optional facet counts
datacite_get_workFetch the full deposited metadata for one DOI, or learn which registration agency holds a DOI DataCite doesn't
datacite_trace_relationsMap the relation graph around any DOI — versions, parts, supplements, derivations, citations — with each edge's source
datacite_search_repositoriesFind repository accounts by text, field of science, type, certificate, software, or provider, and get the repositoryId work search filters on
datacite_get_citationRender a DOI as a formatted citation in a CSL style and locale, or as BibTeX, RIS, CSL JSON, and other machine formats
datacite_list_referenceLook up the vocabularies, identifier forms, and coverage rules the other tools accept, offline

Capability reference

datacite_search_works tool

  • text (literal words, with angle brackets removed; nonblank text that leaves no searchable clause fails as invalid_text) or query (OpenSearch query syntax), ANDed with filters: resource_types, creator (ORCID iD or name), affiliation (ROR ID or name), affiliation_country, funder (ROR ID, Crossref Funder ID, or name; include_child_funders with a ROR funder), subject, fields_of_science, repository_ids, provider_ids, licenses, language, place, published_from / published_to, and min_citations; list filters take up to 10 values, any of which match
  • Positive integer limit (default 20), applied at most 1,000 with a requested/applied notice; ranked pages reach the first 10,000 matches under sort (relevance, newest, oldest, recently_updated, most_cited, most_viewed, most_downloaded; default relevance with text or query, else newest), while cursor: "*" walks the whole result set in registration order through nextCursor and takes neither page nor sort. A ranked ceiling stop is distinguished from the last page
  • affiliation_country accepts current and formerly assigned ISO alpha-2 codes plus XK, in any case. UK maps to GB with a notice; unassigned codes fail as invalid_filter before searching
  • Crossref Funder IDs resolve through one exact ROR FundRef mapping before searching funded-by; an unavailable, incomplete, or ambiguous mapping keeps literal identifier matching and discloses reduced coverage. The cached, paced lookup takes at most five seconds without retry. A cursor walk keeps its initial resolved or literal filter on every continuation without another ROR lookup, including across server restarts. include_child_funders still requires an explicitly supplied ROR
  • License ids are trimmed and lowercased, preserving internal spaces (cc0 1.0 differs from cc0-1.0); reuse the licenses facet ids exactly. query also supports deposition timestamps, e.g. created:[2026-10-16 TO *], updated, and registered
  • include_facets adds top counts for resource types, years, repositories, providers, affiliations, fields of science, and licenses (2–8 s slower); every response reports totalCount, effectiveQuery, sortApplied, and appliedFilters

datacite_get_work tool

  • One doi, in any case: bare, with a doi: or info:doi/ prefix, as a doi.org URL, or %2F-encoded
  • Titles, creators and contributors with ORCID iDs and ROR affiliations, dates, subjects, descriptions, funding, geolocations, rights, related identifiers and items, repository and provider, and counts (citations, references, versions, parts, views, downloads); long lists are capped and their full sizes reported in truncatedLists and relatedIdentifierCounts
  • Page one capped list with a zero-based offset (default 0): creators, contributors, relatedIdentifiers, subjects, and fundingReferences return up to 100 entries, relatedItems 25, and geoLocations 50. Offsets index valid mapped entries in deposit order. listPage reports list, offset, total, and nextOffset while entries remain; other metadata keeps its normal caps. Default truncation notices give exact continuation inputs. An offset requires a list; past-end pages are empty
  • Titles and search snippets are plain text, with recognized formatting tags removed and entities decoded once before snippet truncation, including all semicolon-terminated WHATWG named references such as α and β. Structured descriptions keep their deposited text; rendered descriptions preserve paragraph and line boundaries
  • Geolocations preserve points, boxes, ordered polygon vertices, and optional polygon interior points. Incomplete polygons are omitted with a notice; valid sibling geometry remains
  • A DOI DataCite holds no public record for returns found: false with missReason (other_agency, does_not_exist, not_public, unclassified), the registrationAgency when known, and guidance

datacite_trace_relations tool

  • Any agency's doi: a DataCite dataset or software DOI, or a journal article's DOI to find the DataCite data and software it cites or that cite, supplement, or derive from it
  • depth 1 (default) or 2 — the second hop expands at most 10 DataCite neighbours and runs only when the first hop leaves max_nodes room; positive integer max_nodes (default 50, root included), applied at most 100 with a notice, fills with own-metadata targets, then records pointing at the root, then Event Data endpoints, then the second hop; relation_types keeps only the listed relation types, read from the traced DOI's side (omitted: all); include_event_data (default true) adds Event Data citation links
  • Edges keep relationType exactly as asserted and list their sources (metadata, reverse_metadata, event_data); coverage states how much of each source was read (up to 100 reverse records per hop, only the first 10 when those are large, and up to 100 events per call), and rootCounts carries DataCite's own counts for comparison. An absent edge is not evidence that no relationship exists
  • Reverse lookups inspect both relatedIdentifiers and identified relatedItems, verify each assertion's target and type, and merge identical edges
  • event_offset (0–9,999, absolute and zero-based) selects Event-Data-only tracing, including when set to 0: metadata edges and depth-2 expansion are skipped. Continue with coverage.eventData.nextEventOffset and the same DOI and filters. Each call reads one upstream page and stops before an eligible endpoint that cannot fit max_nodes; root-only calls explain how to raise the cap. Coverage distinguishes exhaustion, a blocked classification lookup, unavailable/skipped reads, and the upstream 10,000-result ceiling. Upstream ordering can change between calls; continuations are not snapshots

datacite_search_repositories tool

  • query text over names and descriptions, plus field_of_science, repository_types, certificates, software, client_type, and provider_id; or repository_ids alone (up to 1,000 inputs) to look up the first 25 distinct normalized ids in input order. A notice names unqueried ids; missing-id notices cover queried ids only
  • Positive integer limit (default 20), applied at most 1,000 with a requested/applied notice, with page; name-ordered rows carry the repositoryId that datacite_search_works takes in repository_ids, plus providerId, types, certificates, software, subjects, homepage, and re3data link
  • Search responses echo the composed effectiveQuery (* without query clauses), including empty pages; ID lookups report appliedFilters.repository_ids without a query echo

datacite_get_citation tool

  • format: text (default), csl_json, bibtex, ris, datacite_json, datacite_xml, schema_org, codemeta, or jats
  • For text only: style takes a CSL style id (default apa; verified ids under datacite_list_reference topic citation_styles), and one DataCite would silently render as APA fails as unsupported_style; locale takes one of the 61 CSL locales DataCite renders (en-GB, de-DE, fr-FR, …) or a bare language code that expands to its primary dialect (de → de-DE), default en-US (list: topic citation_locales)
  • text returns the citation as plain text in citation and the upstream markup in citationHtml; text payloads over 100,000 UTF-16 code units are cut without splitting a surrogate pair. Machine formats return complete payloads inline up to that cap; larger documents omit citation and return downloadUrl for the full document and totalCharacters, with truncated: true, shown: 0, and cap: 100000. A DOI DataCite doesn't hold returns found: false as in datacite_get_work; a format DataCite can't render for that DOI fails as format_unavailable
  • JATS stays verbatim. A notice reports empty name elements or a year that disagrees with its ISO date, including when the document is returned by download URL; use csl_json, bibtex, ris, or datacite_json for another representation

datacite_list_reference tool

  • topic: resource_types, relation_types, identifier_types, date_types, contributor_types, fields_of_science, licenses, repository_types, certificates, software_platforms, client_types, sort_orders, query_syntax, citation_formats, citation_styles, citation_locales, identifier_formats, or coverage
  • Returns entries (value, label, group, inverse) and usage notes; makes no upstream request

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

The published datacite-guide skill covers attribution, identifier resolution, relation evidence, and complete inventories. It ships with the package and plugins and is available through the MCP Skills extension.

DataCite-specific:

  • Keyless and read-only: the DataCite REST API (/dois, /repositories, Event Data at /events, and DOI content negotiation for citations), plus the doi.org registration-agency lookup for DOIs DataCite doesn't hold
  • Shared request budget: one paced request queue, an in-process response cache, and a 45 s deadline per tool call; a spent budget fails as rate_limited with the wait in seconds. DATACITE_CONTACT_EMAIL moves requests to DataCite's identified tier, 1,000 requests per 5 minutes per IP instead of 500
  • Forgiving identifiers: DOIs in any case, bare or prefixed or as doi.org URLs; ORCID iDs with their checksum verified; ROR IDs and Crossref Funder IDs bare or as URLs; vocabulary values in any case, with hyphens, underscores, or spaces
  • DataCite DOI metadata is waived under CC0 1.0; the waiver covers the deposited metadata only, not the datasets, software, or papers it describes. datacite_get_work reports metadataLicense separately from the work's own rights

Agent-friendly output:

  • Provenance on every search: effectiveQuery, appliedFilters as sent upstream, the sort or order applied, and totalCount; trace edges name their sources, and coverage says how much of each source was read
  • Typed misses instead of errors: a DOI DataCite doesn't hold comes back found: false with a missReason, the agency that holds it when known, and the next step
  • Disclosed limits: capped lists report their full counts, and notices explain zero hits, the 10,000-match paging ceiling, an unexpanded second hop, and citations the returned edges don't account for
  • In the text output, depositor-supplied text (titles, descriptions, names) is blockquoted or flattened and machine payloads are fenced, so deposited content can't pose as structure. Titles and snippets are normalized on both surfaces; structured descriptions and other deposited fields retain their original text

Getting started

Connect to the hosted instance, no install:

sh
claude mcp add --transport http datacite-mcp-server https://datacite.caseyjhand.com/mcp

Every caller of the hosted instance shares one DataCite request budget of 800 requests per 5 minutes. For sustained use, run your own instance.

Or run it locally:

sh
claude mcp add datacite-mcp-server -- npx -y @cyanheads/datacite-mcp-server

For other clients, add this to the MCP config file:

json
{  "mcpServers": {    "datacite-mcp-server": {      "command": "npx",      "args": ["-y", "@cyanheads/datacite-mcp-server"]    }  }}

No API key is needed. Set the optional DATACITE_CONTACT_EMAIL to double DataCite's per-IP request allowance. For Docker or a source build, see Running the server.

Configuration

VariableDescriptionDefault
DATACITE_CONTACT_EMAILContact email sent in the User-Agent as mailto:, never in a URL. Moves requests to DataCite's identified tier: 1,000 requests per 5 minutes per IP instead of 500. Validated as an email at startup.none
DATACITE_MAX_REQUESTS_PER_5MINRequest budget per 5-minute window, an integer from 50 to 1000. Divide it across replicas that share one egress IP.800 with a contact email, 400 without
DATACITE_CLAMP_LIMITSClamp search limits to 1,000 and graph node limits to 100, with a notice, log, and counter. Set false to advertise and enforce those caps as strict input maxima.true
MCP_TRANSPORT_TYPETransport: stdio or http.stdio
MCP_HTTP_PORTHTTP server port.3010
MCP_SESSION_MODEHTTP session mode: stateless, stateful, or auto.stateless
MCP_AUTH_MODEAuthentication: none, jwt, or oauth.none
MCP_LOG_LEVELLog level (debug, info, warning, error, etc.).info
LOGS_DIRDirectory for log files (Node.js only).<app-root>/logs
STORAGE_PROVIDER_TYPEStorage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1.in-memory
OTEL_ENABLEDEnable OpenTelemetry.false

See .env.example for the full list of optional overrides.

Running the server

Requires Bun v1.4.0 or higher, or Node.js v24+. To build from source:

sh
git clone https://github.com/cyanheads/datacite-mcp-server.gitcd datacite-mcp-serverbun installcp .env.example .env

Set DATACITE_CONTACT_EMAIL in .env to use DataCite's identified tier.

Local development

  • Build and run the production version:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:http# orbun run start:stdio
  • Run checks and tests:

    sh
    bun run devcheck  # Lints, formats, type-checks, and morebun run test      # Runs the test suite

Docker

Run over stdio:

sh
docker run -i --rm -e MCP_TRANSPORT_TYPE=stdio ghcr.io/cyanheads/datacite-mcp-server:latest

Or expose Streamable HTTP at http://localhost:3010/mcp:

sh
docker run --rm -p 127.0.0.1:3010:3010 ghcr.io/cyanheads/datacite-mcp-server:latest

Project structure

DirectoryPurpose
src/index.tscreateApp() entry point — registers the six tools and sets the server instructions.
skills/Published guidance for agents using the DataCite tools.
src/mcp-server/toolsTool definitions (*.tool.ts) and the input-schema, miss-guidance, and text-rendering helpers they share.
src/services/dataciteDataCite REST client (/dois, /repositories, /events, content negotiation), query builder, identifier normalizers, record mappers, relation-graph builder, and citation style check.
src/services/doi-radoi.org registration-agency lookup for DOIs DataCite holds no public record for.
src/services/rorExact Crossref Funder ID to ROR lookup with literal-search fallback.
src/services/httpShared upstream pipeline — response cache, request pacer, retry, per-call deadline, rate-limit handling.
src/services/referenceStatic vocabularies behind datacite_list_reference and the input validators.
src/configServer-specific environment variable parsing and validation with Zod.
tests/Vitest tests mirroring src/, with recorded DataCite and doi.org fixtures.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for logging, ctx.state for storage
  • Register new tools in the createApp() arrays in src/index.ts
  • Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

This project is licensed under the Apache 2.0 License. See the LICENSE file for details.

來源:README.md,提交 2770e61

工具

6

datacite_search_works

Search DataCite 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.

輸入參數pagesorttextlimitplacequerycursorfundercreatorsubjectlanguagelicenses另有 11 個

datacite_get_work

Get DataCite 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.

輸入參數doi必填listoffset

datacite_trace_relations

Trace DataCite 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.

輸入參數doi必填depthmax_nodesevent_offsetrelation_typesinclude_event_data

datacite_search_repositories

Search DataCite 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.

輸入參數pagelimitquerysoftwareclient_typeprovider_idcertificatesrepository_idsfield_of_sciencerepository_types

datacite_get_citation

Get DataCite 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.

輸入參數doi必填styleformatlocale

datacite_list_reference

DataCite reference vocabularies

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.

輸入參數topic必填

版本歷史

5
  1. v0.2.1最新Nov 1, 2026
  2. v0.2.0Oct 26, 2026
  3. v0.1.3Oct 18, 2026
  4. v0.1.2Oct 9, 2026
  5. v0.1.1Sep 27, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分