# @cyanheads/crossref-mcp-server 中文文档

规范地址：https://npmcn.com/package/%40cyanheads/crossref-mcp-server/

版本：0\.5\.1
npm 元数据更新时间：2026-11-04T05:44:02.631Z
中文译文更新时间：2026-11-11T06:17:27.950Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cyanheads/crossref-mcp-server
原文对照：https://npmcn.com/package/%40cyanheads/crossref-mcp-server/?lang=original
项目主页：https://github.com/cyanheads/crossref-mcp-server#readme
源码仓库：https://github.com/cyanheads/crossref-mcp-server

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：923 kB，146 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=24\.0\.0
- 运行依赖：3 个
- 首次发布：2026-05-23T14:43:24.723Z
- 最新版本发布：2026-11-04T05:44:02.473Z
- 近 30 天下载量：3263（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：36（近 12 个月 36 个）

## 中文简介

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

## 安装

```sh
npm install @cyanheads/crossref-mcp-server
```

也可以使用：`pnpm add @cyanheads/crossref-mcp-server`、`yarn add @cyanheads/crossref-mcp-server`、`bun add @cyanheads/crossref-mcp-server`

## README

# @cyanheads/ crossref-mcp-服务器

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

7个工具 • 1个资源

[![Version](https://img.shields.io/badge/Version-0.5.1-blue.svg?style=flat-square)](https://npmcn.com/package/%40cyanheads/crossref-mcp-server/CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](https://npmcn.com/package/%40cyanheads/crossref-mcp-server/LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/crossref-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-%5E2.4.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/crossref-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/crossref-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-%5E7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.4-blueviolet.svg?style=flat-square)](https://bun.sh/)

[![Install in Claude Desktop](https://img.shields.io/badge/Install_in-Claude_Desktop-D97757?style=for-the-badge&logo=anthropic&logoColor=white)](https://github.com/cyanheads/crossref-mcp-server/releases/latest/download/crossref-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=crossref-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvY3Jvc3NyZWYtbWNwLXNlcnZlciJdfQ==) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22crossref-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fcrossref-mcp-server%22%5D%7D)

[![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-67E8F9?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)

**公共主机服务器 :** [https://crossref.caseyjhand.com/mcp 页面存档备份,存于互联网档案馆](https://crossref.caseyjhand.com/mcp)

* * *

## 概览

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`; 收到的引用数 (`isReferencedByCount`crossref——在引用图表时使用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`](https://github.com/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` 在错误数据中列出每个候选人及其标识符,而不是默默解决第一个匹配

## 开始

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

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

或者在当地运行它:

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

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

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

设置 `CROSSREF_MAILTO` 到您的电子邮件将请求移动到 Crossref 的有礼貌的池中,该池的利率限额高于匿名池;不需要账户或令牌。 对于 Docker 或源构建,请参见 [运行服务器](https://npmcn.com/package/%40cyanheads/crossref-mcp-server/#readme-running-the-server)。 。 。 .

## 配置

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

| 变量 | 说明 | 默认 |
| :-- | :-- | :-- |
| `CROSSREF_MAILTO` | 嵌入在礼貌池中的电子邮件地址 `User-Agent` 每个 Crossref 请求的页眉 。 可选的——服务器在没有它的情况下启动,但登录一个警告,并使用有更严格费率限制的匿名池. 从未发送到 DOI 注册: Crossref 未找到后的机构查找只识别服务器和版本 . | —— 说 |
| `CROSSREF_BASE_URL` | Crossref 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_MODE` | HTTP 会话模式 : `auto`, (中文(简体) ), `stateful`,或 `stateless`。此服务器不需要多轮输入, 因此 `src/index.ts` 声明 `stateless`; 贴子和 `.env.example` 标出相同的值,设置此变量将覆盖声明. | `stateless` (宣布为 `src/`(中文(简体) ) |
| `MCP_HTTP_PORT` | HTTP 服务器端口 . | `3010` |
| `MCP_AUTH_MODE` | Auth 模式 : `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 仪器](https://github.com/cyanheads/mcp-ts-core/tree/main/docs/telemetry)。 。 。 . | `false` |

见 [`.env.example`](https://npmcn.com/package/%40cyanheads/crossref-mcp-server/.env.example) 用于完整可选覆盖列表.

## 运行服务器

### 地方发展

要求数 [Bun v1.4.0 (英语)](https://bun.sh/) 或更高(或Node.js v24+).

-   **克隆并安装 :**
    
    ```sh
    git clone https://github.com/cyanheads/crossref-mcp-server.git
    cd crossref-mcp-server && bun install
    cp .env.example .env   # optionally set CROSSREF_MAILTO
    ```
    
-   **构建和运行 :**
    
    ```sh
    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
    ```
    
-   **运行检查和测试 :**
    
    ```sh
    bun run devcheck   # Lint, format, typecheck, security
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec
    ```
    

### 夹克

```sh
docker run --rm -e CROSSREF_MAILTO=your-email@example.com -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.ts` | `createApp()` 进入点——登记工具及其服务. |
| `src/config` | 服务器特定环境变量与Zod解析并验证. |
| `src/mcp-server/tools` | 工具定义`*.tool.ts`) (中文(简体) ). |
| `src/services/crossref` | CrossrefService — HTTP 客户端, 有礼貌的池头, 重试, pagination 帮助. |
| `skills/` | 已发布代理技能( E)`crossref-guide`),服务于MCP并随货包一起发运. |
| `tests/` | 单位和综合测试镜像 `src/`。 。 。 . |

## 发展指南

见 [`CLAUDE.md`](https://npmcn.com/package/%40cyanheads/crossref-mcp-server/CLAUDE.md) 发展准则和建筑规则。 简本:

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

## 捐款

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

```sh
bun run devcheck
bun run test
```

## 许可证

阿帕奇-2.0 — 见 [自由主义](https://npmcn.com/package/%40cyanheads/crossref-mcp-server/LICENSE) 详细情况.

## 常见问题

### @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 和提交记录判断。

