@cyanheads/crossref-mcp-server

中文文档
0.5.1发布于 2026/11/04Apache-2.0TypeScriptES Module近 30 天下载 3263

解析 DOI, 搜索~1880M 学术著作, 获取参考文献,并通过 Crossref REST API 查找出版商. (原始内容存档于2012-10-12). STIO or Streamable HTTP.

中文使用文档
文档目录21 节
  1. 概览
  2. 工具
  3. 资源
  4. 能力参考
  5. crossref_get_work 工具
  6. crossref_search_works 工具
  7. crossref_get_references 工具
  8. crossref_search_journals 工具
  9. crossref_search_funders 工具
  10. crossref_get_member 工具
  11. crossref_get_prefix 工具
  12. 特征
  13. 开始
  14. 配置
  15. 运行服务器
  16. 地方发展
  17. 夹克
  18. 项目结构
  19. 发展指南
  20. 捐款
  21. 许可证

@cyanheads/ crossref-mcp-服务器

解析 DOI, 搜索~1880M 学术著作, 获取参考文献,并通过 Crossref REST API 查找出版商. (原始内容存档于2012-10-12). STIO or Streamable HTTP.

7个工具 • 1个资源

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework


概览

Crossref REST API的学者元数据. 通过免费文本或结构化过滤器搜索到相近1.88亿所学术作品, 获取外出参考列表.

工具

工具说明
crossref_get_work确定一个DOI以完整的Crossref元数据记录:标题、作者、编辑、隶属关系、摘要、带有卷/发/页的期刊、ISSSN和ISBN、出版日期、许可证、全文链接、资助者确认、出版后更新和相关识别资料
crossref_search_works以免费文本和/或结构化过滤器搜索 Crossref 工作索引, 并带有字段范围查询参数、 排序、 字段选择以及 抵消或基于光标的呼叫
crossref_get_references返回当前 DOI 的参考列表 — 本文引用的作品, 并附带引用字符串, 并解决可用的 DOI
crossref_search_journals通过 ISSN 或标题查询查找 Crossref 日记记录; 可选择检索该日记最新作品的一页
crossref_search_funders在Crossref Funder Register 注册中按名称、注册身份证或出资人DOI查找资助者;可选取一页资助作品
crossref_get_member将 Crossref 成员ID 解至其出版商记录——名称、拥有的 DOI 前缀、 DOI 计数和每个类别元数据存储范围
crossref_get_prefix解析 DOI 前缀( 例如 ). 10.1038给注册它的出版商,链入 crossref_get_member

资源

资源说明
skill://crossref-guide/SKILL.md特工技能 crossref-guide判决: crossref_* 工具——确认引用匹配,在日记/funder作品列表和被过滤的作品搜索中选择,Crossref过滤语法,DOI前缀相对于当前出版商,以及依赖存款的覆盖

技能也通过 skill://{+path} 模板和船舶作为 skills/crossref-guide/SKILL.md 在 npm 包中,多克图像 .mcpb 捆绑和插件安装 。 工具并不依赖于它.

能力参考

crossref_get_work 工具

  • DOI 验证反对 10.NNNN/suffix 上游呼叫前的regex, 接受赤裸的或被其溶液所包裹(https://doi.org/…, (中文(简体) ), https://dx.doi.org/…, (中文(简体) ), doi:…) 并在检查前解开
  • 返回标题、有隶属关系的作者、摘要(交存时)、容器/期刊、出版日期、工作类型、ISSSN、许可证URL、全文链接URL和资助者确认
  • containerTitles 按交存顺序列出记录存放的每个集装箱名称——一本书章或诉讼文件,经常存放其系列,然后存放其书籍或卷数——除此之外 containerTitle,保持第一个; crossref_search_works 返回两者,并返回其 container-title 选择同时填充名称
  • 引用定位器 volume, (中文(简体) ), issue, (中文(简体) ), page,以及 articleNumber 在同一条线上 crossref_search_works附加时 isbn ——每份交存,缺席时省略
  • memberId 是Crossref成员 持有DOI现在—— 传递给 crossref_get_member 为出版商记录。 对于转让给另一个出版商的标题,它与成员不同,通过DOI的前缀名称 crossref_get_prefix
  • editors 在作者的条目形状中,完整返回,从未计算在内 authorCount
  • 作者列表页 offset编号 :limit (违约25起,每起电话最高可达一万起,数额较大) limit 被夹到一万块 notice(三); authorCount 报告已交存的总数a nextOffset 当作者仍然在时继续 —— 所有其他字段在每一页上全部返回
  • updatedBy 列出更正、撤回、关切的表示,以及针对工作的 Crossref 记录的新版本——通知DOI、类型、来源(publisher 或者说 retraction-watch,并附有其记录的身份证)和入境日期——和 updateTo (a) 记录是通知 updatedBy 在场, notice 名称每个更新类型及其来源。 缺席 updatedBy 并不意味着作品从未更新
  • relations 组合相关的标识符(预出QQ已发布版本、版本、评论、补编),按关系类型、标识符类型和主张方,完整返回;其中只有Crossref注册的DIS通过此工具解决
  • 仅通过ROR登记(未保存姓名)声称的出资人或从属关系 ror 替换 name,从不作为空白条目
  • 出版日期是 published, (中文(简体) ), published-print, (中文(简体) ), published-online,以及 issued (仅此工具) 命名一个值; 省略日期元件 Crossref 记录为未知, 以及它下面不太精确的事物
  • 外出参考报告为计数(referencesCount)——条目来源于: crossref_get_references; 收到的引用数 (isReferencedByCountcrossref——在引用图表时使用OpenAlex
  • DOI Crossref 没有返回记录 doi_not_found 命名DOI注册局说持有的机构(registrationAgency ——DataCite, JaLC, mEDRA,.),克罗斯雷夫注册时的基金人注册指针,或根本没有机构注册

crossref_search_works 工具

  • 自由文本 query 加结构化 filter 使用 Crossref 连字符键的对象(from-pub-date, (中文(简体) ), type, (中文(简体) ), funder, (中文(简体) ), issn, (中文(简体) ), has-abstract, (中文(简体) ), license.url页:1
  • 视野参数 queryTitle, (中文(简体) ), queryAuthor, (中文(简体) ), queryContainerTitle,以及 queryBibliographic 结合 query 彼此之间
  • 排序为 relevance, (中文(简体) ), score, (中文(简体) ), is-referenced-by-count, (中文(简体) ), published, (中文(简体) ), deposited,或列出的其他字段——按 offset 只因为克罗斯雷夫用光标拒绝了它们. 光标行走带有查询术语而无 sort 按相关性进行(同意为 sort=score,没有 order并且可以在页面边界上重复或跳过记录; sort: "created" 徒步无相重复. 在 Crossref 注册命令中只执行过滤行走
  • fields 将有效载荷缩小到20个选定名称中的任何一个,包括引号定位器 volume, (中文(简体) ), issue, (中文(简体) ), page, (中文(简体) ), article-number,以及 ISSN,更新链接 updated-by 财务报告和审定财务报表 update-to,以及 member 页:1 memberId,每个工作也带在 fields 省略——并拒绝任何其他名称; DOI 总是返回,和 crossref_get_work 带着记录的其余部分
  • 每次工作都带 updatedBy (更正、撤回、关切表达、新版本记录) updateTo (作品是通知) 在入门形状 和使行 crossref_get_work 使用,因此可以筛选一个结果的一页以收回,而无需每个 DOI 调用
  • 空白或空白的查询术语或过滤器值,以及空的 sort 或者说 order中,读取为省略;当这没有留下可供搜索的内容时 notice 说页面是未过滤的列表
  • rows 返回最多250个工作 authorLimit 每个作品的上限作者(默认为25个,最多500个);其中任一作品的较大值被用一个 notice,在正后页上还标明了在记录返回后继续进行的抵消; authorCount 报告全部存入的总数——将剪接工作的DOI连入 crossref_get_work 其余部分
  • 偏移的呼号上限为 offset + rows ≤ 10,000: 一个会通过它的页面返回 rows 适合,与一个 notice 指定所请求和应用的行,并拒绝抵消1万多行(offset_too_large(三); cursor="*" 通过链条开始深呼 nextCursor 指针 - 光标和偏移不能合并
  • 光标行走结束于省略的页面 nextCursor ——一空一页从不带;每空一页都是 notice 三个原因中哪一个适用

crossref_get_references 工具

  • 以引用的作品的 DOI 赤裸或解析器包装,相同的形式 crossref_get_work 接受
  • 每个参考文献都附有其交存的引用字符串,当Crossref解决后,一个DOI用于 crossref_get_work,与 doiAssertedBy 说出版商存了DOI或Crossref
  • 已交存的结构部分:作者、年份、文章标题、期刊标题、被引用的书籍或卷名(volumeTitle在没有文章标题时作为标题),系列标题,卷,发,首页,版和ISSSN
  • 引用字符串有格式化的标记被剥去并解码字符引用;括号中的间距不是被识别的标记(引用的 URL, Miller 索引, DOI 片段) 被完全保留为已存
  • 页面 offset编号 :limit (违约100起,每起电话最多2 500起) limit 夹入2 500个带a notice(三); referenceCount 全额交存总额和 nextOffset 继续,如果还有更多
  • 2000年以前的作品和未参与的出版商往往没有索引的参考文献
  • 只跳; 无法通过 Crossref 调取引用语句 – 引用图表使用 OpenAlex
  • DOI Crossref 没有返回记录 doi_not_found 命名其登记机构(registrationAgency),或者说没有机构以同样的方式注册 crossref_get_work 已经

crossref_search_journals 工具

  • include_works: true 并返回该期刊最新作品的一页 works_offset,在a works_cursor 行; 需要一个清晰的日记 — 一个匹配多个返回的标题查询 ambiguous_journal,命名候选人和ISSNs
  • 将日记标题、出版商、ISSN及其印刷/电子形式、主题领域、DOI计数(总数/当前/背文件)和每个类别元数据存款覆盖(摘要、参考文献、ORCID、资助者、许可证等)作为当前/背文件分数——同样细分 crossref_get_member 给每个出版社
  • 一个 issn 查找还返回所发年份的 DOI 计数, 递增; 标题清空结果省略
  • 标题查询结果页 offset (上限) offset + rows ≤ 100,000);作品按 works_offset (上限) ≤ 10,000)——一个会通过上限的页面返回 rows 适合,与一个 notice 指定所请求并应用的行,只拒绝在上限上或上下冲抵 notice 命名它,一个达到上限的 记录超过它
  • works_cursor="*" 通过链条将没有上限的作品列表页 nextWorksCursor 符号; 由 Crossref 注册日期运行的光标行走, 最先更新( Crossref 不按光标排列出版日期) , 且不能与 works_offset > 0 (单位:千美元)works_cursor_offset_conflict(中文(简体) )
  • 配对的日记,没有成型的ISSN注册,没有可地址的作品列表—— include_works 用一个 notice 而不是返回空列表

crossref_search_funders 工具

  • 接受名称 query,赤裸的注册身份证(100000001),或完全供资者DOI(10.13039/100000001,可选在后面 doi:编号 :https://doi.org/ 前缀)
  • include_works: true 并返回一个有资助的作品的页面; 需要一个明确的资助者—— 一个匹配多个返回的名称查询 ambiguous_funder,命名候选人和登记册ID
  • 返回供资者名称、登记号、国家及替代名称
  • 名称查询结果页 offset (上限) ≤ 100,000); 供资工作按 works_offset (上限) ≤ 10,000或,没有上限, works_cursor="*" 连锁 nextWorksCursor ——相抵页先运行最新公布的页码,一光标行走最新注册的页码先运行,两者不能合并(works_offset > 0); 页面通过天花板返回 rows 适合,与一个 notice 指定所请求并应用的行,只拒绝在上限上或上下冲抵 notice 命名它,一个达到上限的 记录超过它
  • 资金到位的工作清单还计算了由出资人登记后后裔出资的工作 crossref_search_works 打开过滤器 {"funder": "10.13039/<id>"} 没有; a funder_doi 查找返回这些后代的登记身份 descendants每一个深度,整个——OR'd与资助者的身份在 funder 过滤器用日期、类型或其他过滤器计算出相同的范围。 检查的 worksCount 仅计算身份
  • 被贬损的登记处条目回答其继任者的名字,而只计算自己的作品——答复的 notice 名称 replacedBy; 从未自动跟踪替换

crossref_get_member 工具

  • 会员是注册DOIS的组织——这回答"这个出版商发表什么,他们如何完整地存储元数据?"
  • 返回主名、备选印记名称、自有的DOI前缀、DOI计数(总数/当前/背文件)、每个工作类型的细分以及每个类别元数据存款覆盖率(参考、摘要、ORCID、资助者、许可证等)作为当前/背文件分数
  • 现在的DOI成员是 memberId crossref_get_work 或者说 crossref_search_works 为它返回; crossref_get_prefix 返回成员的一个前缀记录名称,对于一个已转移的标题是以前的出版商

crossref_get_prefix 工具

  • 接受DOI的注册前缀(例如:. 10.1038,没有 /suffix(中文(简体) )
  • 返回出版商名称和数字成员 ID 前缀记录名称——前缀注册人 ID 链条直接输入 crossref_get_member 以完整记录。 转到另一出版商名下的DOI保留其前缀,因此其现任成员是 memberId crossref_get_work 返回时
  • Crossref 前缀记录在设计上是薄的(只有主名和成员链接);更丰富的发布者数据生活在成员记录上
  • 没有 Crossref 成员返回的前缀 prefix_not_found 指定注册的机构(registrationAgency,例如用于 10.5281),或者说没有机构注册

特征

建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.

特定十字:

  • 政治家库 User-Agent 在每个 Crossref 请求上注入了头- 优先访问通过 CROSSREF_MAILTO,无密钥;不需要 API 令牌
  • 在429上以指数反转重试( 荣誉) Retry-After), 5xx, HTTP 408/504, 和网络故障; 一个错误的响应机构和一个点击的请求 CROSSREF_TIMEOUT_MS 未重审
  • 基于光标的深度浏览作品搜索以及期刊和资助者作品列表,结果设定在抵消上限之外
  • Crossref拒绝一项请求是公开宣布的理由—— unknown_filter (用克罗斯雷夫列出一个时的连字符键), invalid_parameter, (中文(简体) ), sort_cursor_conflict, (中文(简体) ), invalid_cursor - 载有被拒绝的投入和回收提示;缺陷 issn 请求前拒绝过滤值, 没有上游错误中继 Crossref 的原始响应正文
  • 每个可读值的文本常态化:HTML字符引用被解码并白空被崩溃;引用字符串附加了格式化标记被剥去,所以标题和摘要被读作纯文本而不是原始的JATS XML;一个MathML公式保持其结构——存单带有一个的TeX注释,否则是一种线性形式,如: x_i, (中文(简体) ), A^{−1}, (中文(简体) ), √(m), (中文(简体) ), (a+b)/c

方便代理输出 :

  • 证明——标识符,URL,和日期在人类可读文本正常化的同时被返回字节精确,因此呼叫者可以信任 doi, (中文(简体) ), issn,和未重新核实的日期字段
  • Graceful 部分失败 — 一个空页是成功的, 不是错误: 一个抵消过列表的结尾, 或者一个查询没有匹配, 带有 notice 说,结束的一页也是这样 crossref_search_works 光标行走; 日志或供资者在页上行走结束, 省略 nextWorksCursor
  • 歧视性产出合同—— nextCursor, (中文(简体) ), nextOffset, (中文(简体) ), nextWorksOffset,以及 nextWorksCursor 一旦清单被耗尽,达到抵消上限的一页就不再保留续作字段 notice,然后将它切到合适的行上;光标符号仍然可以搭载上一页,空页则不带
  • 明确处理的含糊不清—— ambiguous_journal 财务报告和审定财务报表 ambiguous_funder 在错误数据中列出每个候选人及其标识符,而不是默默解决第一个匹配

开始

连接到主机实例, 没有安装 :

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

或者在当地运行它:

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

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

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

设置 CROSSREF_MAILTO 到您的电子邮件将请求移动到 Crossref 的有礼貌的池中,该池的利率限额高于匿名池;不需要账户或令牌。 对于 Docker 或源构建,请参见 运行服务器。 。 。 .

配置

所有配置在启动时通过 Zod schemas 在 src/config/server-config.ts。 。 。 .

变量说明默认
CROSSREF_MAILTO嵌入在礼貌池中的电子邮件地址 User-Agent 每个 Crossref 请求的页眉 。 可选的——服务器在没有它的情况下启动,但登录一个警告,并使用有更严格费率限制的匿名池. 从未发送到 DOI 注册: Crossref 未找到后的机构查找只识别服务器和版本 .—— 说
CROSSREF_BASE_URLCrossref API 基础 URL. 覆盖本地代理测试 。 283)\1cH00FFFF\4cHFF0000\b0}Crossref没找到之后的代理调查总是去 https://doi.org不管这是准备的.https://api.crossref.org
CROSSREF_TIMEOUT_MS请求超时数以毫秒计 同样,最坏的情况是在上游等待一个没有反应的请求——一个最后期限的请求没有被重审.10000
MCP_TRANSPORT_TYPE运输: stdio 或者说 http。 。 。 .stdio
MCP_SESSION_MODEHTTP 会话模式 : auto, (中文(简体) ), stateful,或 stateless。此服务器不需要多轮输入, 因此 src/index.ts 声明 stateless; 贴子和 .env.example 标出相同的值,设置此变量将覆盖声明.stateless (宣布为 src/(中文(简体) )
MCP_HTTP_PORTHTTP 服务器端口 .3010
MCP_AUTH_MODEAuth 模式 : none, (中文(简体) ), jwt,或 oauth。 。 。 .none
MCP_LOG_LEVEL日志级别(RFC 5424).info
LOGS_DIR日志文件目录(只有Node.js).<project-root>/logs
LOG_TOOL_FAILURE_PAYLOADS记录每个工具调用失败的参数和结果,按密钥名称编辑并封顶 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES (默认) 16384) (中文(简体) ). 自由形式值内部的秘密不编辑 .false
OTEL_ENABLED启用 OpenTelemet 仪器。 。 。 .false

见 .env.example 用于完整可选覆盖列表.

运行服务器

地方发展

要求数 Bun v1.4.0 (英语) 或更高(或Node.js v24+).

  • 克隆并安装 :

    git clone https://github.com/cyanheads/crossref-mcp-server.git
    cd crossref-mcp-server && bun install
    cp .env.example .env   # optionally set CROSSREF_MAILTO
    
  • 构建和运行 :

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

    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    

夹克

docker run --rm -e [email protected] -p 3010:3010 ghcr.io/cyanheads/crossref-mcp-server:latest

图像默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/crossref-mcp-server运行到一个 MCP 客户端的 stdio,使用 "command": "docker" 与 "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/crossref-mcp-server:latest"]为了在当地建设, docker build -t crossref-mcp-server .; OpenTeleometry 端点依赖性默认安装——用 --build-arg OTEL_ENABLED=false 以略去它们.

项目结构

目录目的
src/index.tscreateApp() 进入点——登记工具及其服务.
src/config服务器特定环境变量与Zod解析并验证.
src/mcp-server/tools工具定义*.tool.ts) (中文(简体) ).
src/services/crossrefCrossrefService — HTTP 客户端, 有礼貌的池头, 重试, pagination 帮助.
skills/已发布代理技能( E)crossref-guide),服务于MCP并随货包一起发运.
tests/单位和综合测试镜像 src/。 。 。 .

发展指南

见 CLAUDE.md 发展准则和建筑规则。 简本:

  • 搬运工投掷,框架渔获量——否 try/catch 在工具逻辑中
  • 使用 ctx.log 请求范围伐木, ctx.state 租户范围储存
  • 通过枪管登记新工具 src/mcp-server/tools/definitions/index.ts
  • 环绕外部 API 调用: 验证原始 = 与域类型正常化 = 返回输出计划; 永远不要编织缺失的字段( Crossref 记录中经常缺少摘要、参考列表和隶属关系)

捐款

问题值得欢迎。 提交前进行检查和测试:

bun run devcheck
bun run test

许可证

阿帕奇-2.0 — 见 自由主义 详细情况.

版本与发布记录

@cyanheads/crossref-mcp-server 共发布 36 个版本,首次发布于 2026/05/23;过去 12 个月发布了 36 个版本。

版本发布日期距今
0.5.1latest2026/11/047 天前
0.5.02026/10/2913 天前
0.4.42026/10/2417 天前
0.4.32026/10/2318 天前
0.4.22026/10/081 个月前
0.4.12026/09/241 个月前

关于 @cyanheads/crossref-mcp-server 的常见问题

@cyanheads/crossref-mcp-server 是什么?

解析 DOI, 搜索~1880M 学术著作, 获取参考文献,并通过 Crossref REST API 查找出版商. (原始内容存档于2012-10-12). STIO or Streamable HTTP.

如何安装 @cyanheads/crossref-mcp-server?

在项目目录运行 npm install @cyanheads/crossref-mcp-server,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 crossref-mcp-server,可以用 npx crossref-mcp-server 直接运行。

@cyanheads/crossref-mcp-server 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cyanheads/crossref-mcp-server 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cyanheads/crossref-mcp-server 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cyanheads/crossref-mcp-server 可以商用吗?

@cyanheads/crossref-mcp-server 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@cyanheads/crossref-mcp-server 的下载量有多少?

根据 npm 官方下载统计,@cyanheads/crossref-mcp-server 在 2026/10/11 – 2026/11/09 这 30 天内被下载 3,263 次,日均约 109 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cyanheads/crossref-mcp-server 还在维护吗?

最新版本 0.5.1 发布于 2026/11/04(7 天前);至今共发布 36 个版本,其中过去 12 个月发布了 36 个;首次发布于 2026/05/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。