关于 datacite-mcp-server
用于搜索 DataCite 研究成果并获取 DOI 元数据、关系图、仓储记录和引文的 MCP 服务,涵盖数据集、软件等存入作品,无需 API 密钥。
主要功能
- 01通过文本和结构化筛选搜索作品
- 02获取完整 DOI 元数据
- 03追踪 DOI 关系和引文链接
- 04按领域等条件搜索仓储账户
- 05以引用格式和机器格式生成引文
- 06查询支持的词汇表和数据覆盖范围
适用场景
- 01按创建者、领域或仓储查找数据集或软件
- 02检查 DOI 相关版本、补充材料和引文
- 03为论文或文献管理器生成 DOI 引文
- 04搜索作品前查看仓储详情
MCP 相关
向 MCP 客户端提供六种 DataCite 搜索、元数据、关系、仓储、引文和参考信息工具,支持 STDIO 和 Streamable HTTP 传输。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://datacite.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-datacite https://datacite.caseyjhand.com/mcp{"mcpServers":{"cyanheads-datacite":{"type":"http","url":"https://datacite.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-datacite":{"type":"http","url":"https://datacite.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-datacite":{"type":"http","url":"https://datacite.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-datacite":{"serverUrl":"https://datacite.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
6| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | integer | 否 | 排名分页页码,省略时为 1。page × limit 不得超过 10,000;不能与 cursor 同时使用。 |
| sort | enum | 否 | 可选 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 |
| text | string | 否 | 普通词语和短语,按字面搜索:所有查询语法字符都会转义,因此 "Climate change: impacts" 可以正常使用,text 绝不会导致语法错误。各词项之间使用 AND。 |
| limit | integer | 否 | 每页行数,1–100。 |
| place | string | 否 | 地理位置短语,与已提交的位置名称匹配。 |
| query | string | 否 | OpenSearch 查询字符串语法——字段路径(titles.title:"…"、creators.name:…、relatedIdentifiers.relationType:…)、AND/OR/NOT、范围、通配符。字段路径:datacite_list_reference topic query_syntax。与 text 和筛选条件使用 AND 连接。 |
| cursor | string | 否 | 按注册顺序遍历完整结果集的游标:使用 "*" 开始,然后原样传入上一页的 nextCursor,并保持 query 和筛选条件不变。不能与 page 或 sort 同时使用。 |
| funder | string | 否 | 资助方的 ROR ID、Crossref Funder ID(10.13039/100000001、其 doi.org URL 或纯数字),或资助方名称。 |
| creator | string | 否 | 创建者的 ORCID iD(0000-0002-1825-0097、16 位数字或 orcid.org URL;会验证校验位)或姓名——姓名中的每个词都必须出现在同一个创建者字段中。 |
| subject | string | 否 | 主题短语,与主题词进行不区分大小写的匹配。 |
| language | string | 否 | 作品的 ISO 639-1 语言代码,大小写不限(en、de)。 |
| licenses | array | 否 | 作品自身的许可证 ID(匹配任意一个),采用 SPDX 风格:cc-by-4.0、cc0-1.0、mit。先转换为小写,再进行精确匹配;常见 ID:datacite_list_reference topic licenses。 |
| affiliation | string | 否 | ROR ID(021nxhr62 或 ror.org URL)——匹配创作者和贡献者的所属机构——或所属机构名称短语。 |
| provider_ids | array | 否 | 提供方 ID(匹配任意一个),例如 dryad——即 datacite_search_repositories 返回的 providerId。大小写不限。 |
| published_to | integer | 否 | 最晚出版年份(含)。单独使用时,范围没有上限。 |
| min_citations | integer | 否 | 仅返回 DataCite 记录的引用次数不少于此值的作品。 |
| include_facets | boolean | 否 | 添加顶级分面计数(资源类型、年份、知识库、提供方、所属机构、科学领域、许可证)。耗时增加 2–8 秒。 |
| published_from | integer | 否 | 最早出版年份(含)。单独使用时,范围没有上限。 |
| repository_ids | array | 否 | 知识库 ID(匹配任意一个),格式为 provider.repository — 例如 dryad.dryad 或 cern.zenodo — 与 datacite_search_repositories 在 repositoryId 中返回的值相同。大小写不限。 |
| resource_types | array | 否 | resourceTypeGeneral 值(匹配任意一个):dataset、software、computational-notebook、workflow、model、physical-object、……也接受 PascalCase。完整列表:datacite_list_reference topic resource_types。 |
| fields_of_science | array | 否 | OECD 科学领域 ID 或标签(匹配任意一个),例如 computer_and_information_sciences 或 "Earth and related environmental sciences"。列表:datacite_list_reference topic fields_of_science。 |
| affiliation_country | string | 否 | 创作者或贡献者所属机构所在国家/地区的 ISO 3166-1 alpha-2 代码,大小写不限(DE、us)。不接受 alpha-3 代码和名称。 |
| include_child_funders | boolean | 否 | 同时匹配 ROR 资助方的下属组织。仅适用于 ROR 资助方。 |
详细介绍
@cyanheads/datacite-mcp-server
通过 MCP 搜索 DataCite 数据集和软件、获取 DOI 元数据、追踪关联并格式化引文。支持 STDIO 或 Streamable HTTP。
概述
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_PORT | HTTP 服务端口。 | 3010 |
MCP_SESSION_MODE | HTTP 会话模式: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.ts | createApp() 入口点——注册六个工具并设置服务说明。 |
skills/ | 为使用 DataCite 工具的 Agent 发布的指导内容。 |
src/mcp-server/tools | 工具定义(*.tool.ts)以及它们共用的输入模式、缺失信息指导和文本渲染辅助函数。 |
src/services/datacite | DataCite REST 客户端(/dois、/repositories、/events、内容协商)、查询构建器、标识符规范化器、记录映射器、关系图构建器和引文样式检查。 |
src/services/doi-ra | 对 DataCite 没有公开记录的 DOI 查询 doi.org 注册机构。 |
src/services/ror | 将 Crossref Funder ID 精确查询为 ROR,无法精确匹配时回退到字面搜索。 |
src/services/http | 共享上游处理流程——响应缓存、请求节流、重试、单次调用截止时间和速率限制处理。 |
src/services/reference | datacite_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 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。