mcpField
D
datacite-mcp-server

datacite-mcp-server

远程服务
github.com/cyanheads搜索与检索12 天前更新
代码仓库

关于 datacite-mcp-server

用于搜索 DataCite 研究成果并获取 DOI 元数据、关系图、仓储记录和引文的 MCP 服务,涵盖数据集、软件等存入作品,无需 API 密钥。

主要功能

  1. 01通过文本和结构化筛选搜索作品
  2. 02获取完整 DOI 元数据
  3. 03追踪 DOI 关系和引文链接
  4. 04按领域等条件搜索仓储账户
  5. 05以引用格式和机器格式生成引文
  6. 06查询支持的词汇表和数据覆盖范围

适用场景

  1. 01按创建者、领域或仓储查找数据集或软件
  2. 02检查 DOI 相关版本、补充材料和引文
  3. 03为论文或文献管理器生成 DOI 引文
  4. 04搜索作品前查看仓储详情

MCP 相关

向 MCP 客户端提供六种 DataCite 搜索、元数据、关系、仓储、引文和参考信息工具,支持 STDIO 和 Streamable HTTP 传输。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://datacite.caseyjhand.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npm@cyanheads/datacite-mcp-server0.2.0

工具

6
参数类型必填说明
pageinteger否排名分页页码,省略时为 1。page × limit 不得超过 10,000;不能与 cursor 同时使用。
sortenum否可选 relevance、newest、oldest、recently_updated、most_cited、most_viewed 或 most_downloaded。省略时:设置了 text 或 query 则为 relevance,否则为 newest。不能与 cursor 同时使用。relevance | newest | oldest | recently_updated | most_cited | most_viewed | most_downloaded
textstring否普通词语和短语,按字面搜索:所有查询语法字符都会转义,因此 "Climate change: impacts" 可以正常使用,text 绝不会导致语法错误。各词项之间使用 AND。
limitinteger否每页行数,1–100。
placestring否地理位置短语,与已提交的位置名称匹配。
querystring否OpenSearch 查询字符串语法——字段路径(titles.title:"…"、creators.name:…、relatedIdentifiers.relationType:…)、AND/OR/NOT、范围、通配符。字段路径:datacite_list_reference topic query_syntax。与 text 和筛选条件使用 AND 连接。
cursorstring否按注册顺序遍历完整结果集的游标:使用 "*" 开始,然后原样传入上一页的 nextCursor,并保持 query 和筛选条件不变。不能与 page 或 sort 同时使用。
funderstring否资助方的 ROR ID、Crossref Funder ID(10.13039/100000001、其 doi.org URL 或纯数字),或资助方名称。
creatorstring否创建者的 ORCID iD(0000-0002-1825-0097、16 位数字或 orcid.org URL;会验证校验位)或姓名——姓名中的每个词都必须出现在同一个创建者字段中。
subjectstring否主题短语,与主题词进行不区分大小写的匹配。
languagestring否作品的 ISO 639-1 语言代码,大小写不限(en、de)。
licensesarray否作品自身的许可证 ID(匹配任意一个),采用 SPDX 风格:cc-by-4.0、cc0-1.0、mit。先转换为小写,再进行精确匹配;常见 ID:datacite_list_reference topic licenses。
affiliationstring否ROR ID(021nxhr62 或 ror.org URL)——匹配创作者和贡献者的所属机构——或所属机构名称短语。
provider_idsarray否提供方 ID(匹配任意一个),例如 dryad——即 datacite_search_repositories 返回的 providerId。大小写不限。
published_tointeger否最晚出版年份(含)。单独使用时,范围没有上限。
min_citationsinteger否仅返回 DataCite 记录的引用次数不少于此值的作品。
include_facetsboolean否添加顶级分面计数(资源类型、年份、知识库、提供方、所属机构、科学领域、许可证)。耗时增加 2–8 秒。
published_frominteger否最早出版年份(含)。单独使用时,范围没有上限。
repository_idsarray否知识库 ID(匹配任意一个),格式为 provider.repository — 例如 dryad.dryad 或 cern.zenodo — 与 datacite_search_repositories 在 repositoryId 中返回的值相同。大小写不限。
resource_typesarray否resourceTypeGeneral 值(匹配任意一个):dataset、software、computational-notebook、workflow、model、physical-object、……也接受 PascalCase。完整列表:datacite_list_reference topic resource_types。
fields_of_sciencearray否OECD 科学领域 ID 或标签(匹配任意一个),例如 computer_and_information_sciences 或 "Earth and related environmental sciences"。列表:datacite_list_reference topic fields_of_science。
affiliation_countrystring否创作者或贡献者所属机构所在国家/地区的 ISO 3166-1 alpha-2 代码,大小写不限(DE、us)。不接受 alpha-3 代码和名称。
include_child_fundersboolean否同时匹配 ROR 资助方的下属组织。仅适用于 ROR 资助方。

详细介绍

@cyanheads/datacite-mcp-server

通过 MCP 搜索 DataCite 数据集和软件、获取 DOI 元数据、追踪关联并格式化引文。支持 STDIO 或 Streamable HTTP。

6 个工具

版本 许可证 Docker MCP SDK npm TypeScript Bun

在 Claude Desktop 中安装 在 Cursor 中安装 在 VS Code 中安装

框架

公共托管服务: https://datacite.caseyjhand.com/mcp


概述

DataCite 提供 DOI 元数据,涵盖全球各地存储库提交的数据集、软件、样本、工作流及其他研究成果。您可以搜索记录、查看完整记录、追踪 DOI 的关联(版本、组成部分、补充材料、引文),查找在某个领域发布内容的存储库,并格式化引文。无需 API 密钥。

工具
工具描述
datacite_search_works通过纯文本或查询语法及结构化筛选条件搜索作品;支持按排名分页或遍历完整游标,并可选择获取分面计数
datacite_get_work获取单个 DOI 的完整提交元数据,或查询哪个注册机构持有 DataCite 未收录的 DOI
datacite_trace_relations绘制任意 DOI 周围的关联图谱——版本、组成部分、补充材料、衍生作品、引文——并标明每条关联的来源
datacite_search_repositories按文本、科学领域、类型、认证、软件或提供方查找存储库账户,并获取作品搜索筛选条件所依据的 repositoryId
datacite_get_citation按 CSL 样式和区域设置将 DOI 转换为格式化引文,或转换为 BibTeX、RIS、CSL JSON 等机器可读格式
datacite_list_reference离线查询其他工具接受的词汇表、标识符形式和覆盖范围规则

功能参考

datacite_search_works 工具
  • text(字面词语,移除尖括号后;非空白文本若无法形成可搜索子句,则会报错 invalid_text)或 query(OpenSearch 查询语法),并与以下筛选条件进行 AND 运算:resource_types、creator(ORCID iD 或姓名)、affiliation(ROR ID 或名称)、affiliation_country、funder(ROR ID、Crossref Funder ID 或名称;使用 ROR 资助方时可指定 include_child_funders)、subject、fields_of_science、repository_ids、provider_ids、licenses、language、place、published_from / published_to 和 min_citations;列表筛选条件最多接受 10 个值,匹配其中任意一个即可
  • limit 为 1–10,000(默认值为 20),最多实际应用 100,并附带提示;排序后的 page 可通过 sort(relevance、newest、oldest、recently_updated、most_cited、most_viewed、most_downloaded;有 text 或 query 时默认 relevance,否则为 newest)访问前 10,000 条匹配结果;而 cursor: "*" 会按注册顺序通过 nextCursor 遍历整个结果集,且不接受 page 或 sort。达到排序结果上限时会明确提示,与最后一页有所区别
  • Crossref Funder ID 会先通过一条精确的 ROR FundRef 映射解析,然后再搜索 funded-by;若映射不可用、不完整或存在歧义,则保留字面标识符匹配,并说明覆盖范围缩小。缓存的限速查询最多耗时 5 秒,不会重试。游标遍历会在每次继续时沿用最初解析得到的筛选条件或字面筛选条件,不会再次查询 ROR,包括服务重启后也是如此。include_child_funders 仍要求明确提供 ROR
  • License ID 会先去除首尾空格并转换为小写,同时保留内部空格(cc0 1.0 与 cc0-1.0 不同);请完全按照 licenses facet ID 使用。query 还支持存入时间戳,例如 created:[2026-10-16 TO *]、updated 和 registered
  • include_facets 会添加资源类型、年份、存储库、提供方、所属机构、科学领域和许可的计数汇总(耗时增加 2–8 秒);每个响应都会报告 totalCount、effectiveQuery、sortApplied 和 appliedFilters

datacite_get_work 工具
  • 一个 doi,大小写不限:可为裸值、带 doi: 或 info:doi/ 前缀的值、doi.org URL,或经过 %2F 编码的值
  • 标题、作者和贡献者(含 ORCID iD 和 ROR 所属机构)、日期、主题、描述、资助信息、地理位置、权利信息、相关标识符和条目、存储库和提供方,以及 counts(引用数、参考文献数、版本数、组成部分数、浏览量、下载量);长列表会被截断,并在 truncatedLists 和 relatedIdentifierCounts 中报告完整数量
  • 第 1 页的 list 会按带零起始索引的 offset(默认值为 0)截断:creators、contributors、relatedIdentifiers、subjects 和 fundingReferences 最多返回 100 条,relatedItems 最多返回 25 条,geoLocations 最多返回 50 条。偏移量按存入顺序对有效映射条目进行索引。若列表仍有条目,listPage 会报告 list、offset、total 和 nextOffset;其他元数据仍采用常规上限。默认的截断提示会提供准确的续查参数。指定偏移量时必须指定列表;超出末尾的页面为空
  • 标题和搜索摘要为纯文本;摘要截断前会移除已识别的格式标签,并对实体解码一次。结构化描述保留存入的文本;渲染后的描述保留段落和换行边界
  • 地理位置会保留点、边界框、有序的多边形顶点以及可选的多边形内部点。不完整的多边形会被省略并附带提示;有效的同级几何信息仍会保留
  • 若 DataCite 对某个 DOI 不持有公开记录,则返回 found: false,并提供 missReason(other_agency、does_not_exist、not_public、unclassified)、已知时的 registrationAgency,以及 guidance

datacite_trace_relations 工具
  • 任意机构的 doi:DataCite 数据集或软件 DOI,或期刊文章的 DOI,用于查找其引用的 DataCite 数据和软件,或引用、补充或衍生自该 DOI 的 DataCite 数据和软件
  • depth 为 1(默认值)或 2——第二跳最多扩展 10 个 DataCite 邻居,且仅当第一跳后 max_nodes 仍有余量时运行;max_nodes 为 1–10,000(默认值 50,包含根节点),最多应用为 100,并附带提示;填充顺序为自身元数据目标、指向根节点的记录、Event Data 端点,然后是第二跳;relation_types 仅保留列出的关系类型,类型取自被追踪 DOI 的一侧(省略时保留全部);include_event_data(默认值为 true)会添加 Event Data 引用链接
  • 边会原样保留 relationType 的断言值,并列出其 sources(metadata、reverse_metadata、event_data);coverage 说明读取了每个来源的多少内容(每跳最多读取 100 条反向记录,其中大型记录仅读取前 10 条;每次调用最多读取 100 个事件),rootCounts 则包含 DataCite 自身的计数,供比较。未出现某条边并不能证明不存在这种关系
  • 反向查询会检查 relatedIdentifiers 和已识别的 relatedItems,验证每项断言的目标和类型,并合并相同的边
  • event_offset(0–9,999,绝对偏移量且从零开始)用于仅追踪 Event Data,即使设为 0 也是如此:此时会跳过元数据边和第二跳扩展。使用相同 DOI 和筛选条件,结合 coverage.eventData.nextEventOffset 继续查询。每次调用读取一个上游页面,并在无法将符合条件的端点纳入 max_nodes 时停止;仅包含根节点的调用会说明如何提高上限。Coverage 会区分数据已耗尽、分类查询受阻、读取不可用或被跳过,以及达到上游 10,000 条结果的上限。上游排序可能在调用之间发生变化;续查结果并非快照

datacite_search_repositories 工具
  • 使用 query 搜索名称和描述文本,并可结合 field_of_science、repository_types、certificates、software、client_type 和 provider_id;或者仅使用 repository_ids(最多 1,000 个输入)按输入顺序查询前 25 个不同的规范化 ID。提示会列出未查询的 ID;缺失 ID 提示仅涉及已查询的 ID
  • limit 为 1–10,000(默认值 20),最多应用为 100,并附带提示;可使用 page。按名称排序的行会包含 repositoryId,可供 datacite_search_works 的 repository_ids 使用,还会包含 providerId、类型、证书、软件、主题、主页和 re3data 链接
  • 搜索响应会回显组合后的 effectiveQuery(未指定查询条件时为 *),包括空页面;ID 查询会报告 appliedFilters.repository_ids,但不会回显查询内容

datacite_get_citation 工具
  • format:text(默认值)、csl_json、bibtex、ris、datacite_json、datacite_xml、schema_org、codemeta 或 jats
  • 仅适用于 text:style 接受 CSL 样式 ID(默认值为 apa;已验证的 ID 可在 datacite_list_reference 的 citation_styles 主题下查找);如果 DataCite 无法将某种样式呈现为 APA,则会报错 unsupported_style;locale 接受 DataCite 可呈现的 61 种 CSL 区域设置(en-GB、de-DE、fr-FR,……),或会扩展为其主要方言的纯语言代码(de → de-DE),默认值为 en-US(列表:citation_locales 主题)
  • text 会将引文以纯文本形式返回在 citation 中,并将上游标记内容返回在 citationHtml 中;超过 100,000 个 UTF-16 代码单元的文本载荷会被截断,但不会拆分代理对。机器格式会在该上限内以内嵌形式返回完整载荷;较大的文档会省略 citation,并返回完整文档的 downloadUrl 和 totalCharacters,同时设置 truncated: true、shown: 0 和 cap: 100000。如果 DataCite 中没有该 DOI,则会像 datacite_get_work 一样返回 found: false;如果 DataCite 无法呈现该 DOI 的指定格式,则会报错 format_unavailable

datacite_list_reference 工具
  • 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 或 coverage
  • 返回 entries(value、label、group、inverse)和使用notes;不会发起上游请求

功能

基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),并提供结构化日志记录和可选的 OpenTelemetry 跟踪。

随软件包和插件一同发布的 datacite-guide 技能介绍了署名、标识符解析、关系证据和完整清单。可通过 MCP Skills 扩展使用。

DataCite 专属功能:

  • 无需密钥,只读访问:DataCite REST API(/dois、/repositories、位于 /events 的 Event Data,以及用于引文的 DOI 内容协商),并支持通过 doi.org 的注册机构查询查询不由 DataCite 持有的 DOI
  • 共享请求额度:使用一个限速请求队列、进程内响应缓存,每次工具调用的截止时间为 45 s;额度耗尽时会以 rate_limited 失败,并提供等待秒数。设置 DATACITE_CONTACT_EMAIL 可将请求转至 DataCite 的已识别用户额度层级,即每个 IP 每 5 分钟 1,000 次请求,而非 500 次
  • 灵活的标识符格式:DOI 可使用任意大小写,可为裸值、带前缀形式或 doi.org URL;ORCID iD 会验证校验码;ROR ID 和 Crossref Funder ID 可为裸值或 URL;词表值支持任意大小写,以及连字符、下划线或空格
  • DataCite DOI 元数据根据 CC0 1.0 放弃版权;此放弃仅涵盖已提交的元数据,不包括其描述的数据集、软件或论文。datacite_get_work 会单独报告 metadataLicense 和作品本身的 rights

便于 Agent 使用的输出:

  • 每次搜索均包含来源信息:effectiveQuery、发送至上游的 appliedFilters、所应用的排序或顺序,以及 totalCount;关系边会列出其 sources,coverage 会说明读取了各来源的多少内容
  • 返回有类型的未命中结果,而非错误:对于 DataCite 未持有的 DOI,会返回 found: false、missReason、已知的持有机构以及后续步骤
  • 明示限制:达到上限的列表会报告完整计数;提示会说明零条命中、10,000 条匹配项的分页上限、未展开的第二跳,以及返回的关系边未涵盖的引文
  • 在文本输出中,提交者提供的文本(标题、描述、名称)会以引用块形式呈现或扁平化,机器数据负载则会放在围栏代码块中,以免提交的内容被误认为结构。标题和摘要在两种输出形式中都会规范化;结构化描述和其他已提交字段则保留原文

快速开始

连接托管实例,无需安装:

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

托管实例的所有调用方共享每 5 分钟 800 次 DataCite 请求的额度。如需持续使用,请运行自己的实例。

或者在本地运行:

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

对于其他客户端,请将以下内容添加到 MCP 配置文件中:

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

无需 API 密钥。设置可选的 DATACITE_CONTACT_EMAIL,即可将 DataCite 的每 IP 请求额度提高一倍。关于 Docker 或从源码构建,请参阅运行服务。

配置

变量描述默认值
DATACITE_CONTACT_EMAIL作为 mailto: 发送到 User-Agent 的联系邮箱,不会出现在 URL 中。可将请求提升至 DataCite 的已识别层级:每个 IP 每 5 分钟 1,000 次请求,而非 500 次。启动时会验证其是否为有效邮箱。无
DATACITE_MAX_REQUESTS_PER_5MIN每个 5 分钟窗口的请求预算,取值为 50 到 1000 的整数。多个副本共用一个出口 IP 时,请将预算分配给各副本。有联系邮箱时为 800,没有时为 400
MCP_TRANSPORT_TYPE传输方式:stdio 或 http。stdio
MCP_HTTP_PORTHTTP 服务端口。3010
MCP_SESSION_MODEHTTP 会话模式:stateless、stateful 或 auto。stateless
MCP_AUTH_MODE身份验证:none、jwt 或 oauth。none
MCP_LOG_LEVEL日志级别(debug、info、warning、error 等)。info
LOGS_DIR日志文件目录(仅 Node.js)。<app-root>/logs
STORAGE_PROVIDER_TYPE存储后端:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。in-memory
OTEL_ENABLED启用 OpenTelemetry。false

可在 .env.example 中查看所有可选覆盖项。

运行服务

需要 Bun v1.4.0 或更高版本,或 Node.js v24+。从源代码构建:

git clone https://github.com/cyanheads/datacite-mcp-server.git
cd datacite-mcp-server
bun install
cp .env.example .env

在 .env 中设置 DATACITE_CONTACT_EMAIL,即可使用 DataCite 的已识别层级。

本地开发
  • 构建并运行生产版本:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:http
    # or
    bun run start:stdio
    
  • 运行检查和测试:

    bun run devcheck  # Lints, formats, type-checks, and more
    bun run test      # Runs the test suite
    
Docker

通过 stdio 运行:

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

或在 http://localhost:3010/mcp 上提供 Streamable HTTP:

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

项目结构

目录用途
src/index.tscreateApp() 入口点——注册六个工具并设置服务说明。
skills/为使用 DataCite 工具的 Agent 发布的指导内容。
src/mcp-server/tools工具定义(*.tool.ts)以及它们共用的输入模式、缺失信息指导和文本渲染辅助函数。
src/services/dataciteDataCite REST 客户端(/dois、/repositories、/events、内容协商)、查询构建器、标识符规范化器、记录映射器、关系图构建器和引文样式检查。
src/services/doi-ra对 DataCite 没有公开记录的 DOI 查询 doi.org 注册机构。
src/services/ror将 Crossref Funder ID 精确查询为 ROR,无法精确匹配时回退到字面搜索。
src/services/http共享上游处理流程——响应缓存、请求节流、重试、单次调用截止时间和速率限制处理。
src/services/referencedatacite_list_reference 背后的静态词汇表和输入验证器。
src/config使用 Zod 解析和验证服务专用环境变量。
tests/与 src/ 对应的 Vitest 测试,包含记录的 DataCite 和 doi.org 夹具。

开发指南

请参阅 CLAUDE.md 了解开发指南和架构规则。简要说明:

  • 处理器抛出异常,由框架捕获——工具逻辑中不要使用 try/catch
  • 使用 ctx.log 记录日志,使用 ctx.state 存储数据
  • 在 src/index.ts 中的 createApp() 数组里注册新工具
  • 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出模式;切勿伪造缺失字段

贡献

欢迎提交问题。提交前请运行检查和测试:

bun run devcheck
bun run test

许可证

本项目采用 Apache 2.0 许可证。详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。