mcpField
C
crossref-mcp

crossref-mcp

本地服务
github.com搜索与检索020 周前更新

关于 crossref-mcp

crossref-mcp 将 Crossref 学术元数据查询封装为只读 MCP 服务,供大模型客户端调用。它覆盖 works 等多类 Crossref 记录,并支持本地 stdio 和 Streamable HTTP 传输。

主要功能

  1. 0118 个只读 Crossref 工具
  2. 02查询 works、期刊、资助方等
  3. 03支持 stdio 和 Streamable HTTP
  4. 04游标分页与字段选择
  5. 05速率限制及可选 Redis 缓存

适用场景

  1. 01搜索学术作品并按 DOI 获取记录
  2. 02查询期刊、资助方和成员记录
  3. 03分页浏览结果并选择元数据字段

MCP 相关

它将 Crossref REST API 的查询能力提供为 MCP 工具,供客户端搜索和获取 works、members、journals、funders、types、licenses 及 prefixes。支持 stdio 或 Streamable HTTP 连接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"jtl-neo-crossref": {
"command": "uvx",
"args": [
"crossref-mcp"
],
"env": {
"CROSSREF_MAILTO": "<CROSSREF_MAILTO>",
"CROSSREF_PLUS_TOKEN": "<CROSSREF_PLUS_TOKEN>",
"MCP_API_KEY": "<MCP_API_KEY>"
}
}
}
}
启动命令uvx crossref-mcp
需要配置的环境变量
CROSSREF_MAILTOEmail for Crossref's polite pool (recommended).
CROSSREF_PLUS_TOKEN密钥Optional Crossref Plus API token.
MCP_API_KEY密钥Optional X-API-Key for HTTP transport.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypicrossref-mcp0.1.0
ocidocker.io/heyinnaneo/crossref-mcp:0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

crossref-mcp

CI License: MIT Docker

English | 中文

一个封装 Crossref REST API 的 MCP 服务,将学术元数据查询(作品、成员、期刊、资助方、类型、许可证、前缀)作为工具提供给大模型客户端调用。

与 Crossref 无关联,也未获其认可。数据由公开的 Crossref API 实时提供。设置 CROSSREF_MAILTO 即可加入 Crossref 的 礼貌池。

功能特性

  • 提供所有主要 Crossref 资源端点,封装为 18 个只读工具。
  • 双传输方式:stdio(本地)和 Streamable HTTP(容器)。
  • 礼貌池(User-Agent + mailto),可选 Crossref Plus 令牌。
  • 令牌桶限流(根据 X-Rate-Limit-* 标头自动调整),并通过指数退避遵守 Retry-After。
  • 游标深度分页、字段 select、raw 或简化输出。
  • 可选的 X-API-Key HTTP 身份验证(/health 除外),以及 /health 端点。
  • 可选的 Redis 响应缓存和跨副本限流。
  • 可选的 Caddy TLS 反向代理,用于公开部署。

快速开始(本地,stdio)

uv sync
export CROSSREF_MAILTO="[email protected]"   # recommended (polite pool)
uv run crossref-mcp                         # starts a stdio MCP server

使用 MCP Inspector 检查:uv run mcp dev src/crossref_mcp/server.py。

配置

环境变量必需默认值说明
CROSSREF_MAILTO建议—用于加入 Crossref 礼貌池的电子邮箱。
CROSSREF_PLUS_TOKEN否—Crossref Plus API 令牌(作为标头发送)。
CROSSREF_BASE_URL否https://api.crossref.orgAPI 基础 URL。
CROSSREF_TIMEOUT否30每个请求的超时时间(秒)。
MCP_TRANSPORT否stdiostdio 或 http。
MCP_API_KEY否—若已设置,HTTP 请求必须包含匹配的 X-API-Key 标头(/health 除外)。
LOG_LEVEL否INFO日志级别(日志输出到 stderr)。
REDIS_URL否—启用 Redis 缓存和共享限流(可选)。
CACHE_TTL否86400缓存 TTL(秒)。
RATELIMIT_BACKEND否in-memoryin-memory 或 redis。

工具

作品 — search_works、get_work(按 DOI 查询)、get_work_references(最多 50 条)、get_work_quality(注册机构)。 成员 / 期刊 / 资助方 — search_members · get_member · get_member_works;search_journals · get_journal(ISSN)· get_journal_works;search_funders · get_funder · get_funder_works。 类型 / 许可证 / 前缀 — list_types · get_type;list_licenses; get_prefix。另有 ping。

共享参数。 搜索/列表工具接受 query(作品还支持 query_bibliographic / query_author / query_title)、filter(Crossref 的 key:value,… 语法)、sort + order、rows(≤1000)+ offset, 以及 select。深度分页:设置 cursor="*",然后重复使用返回的 next_cursor。所有工具默认返回简化字段;传入 raw=true 可获取完整的 Crossref JSON。

连接 MCP 客户端

stdio(Claude Desktop / Cursor) — claude_desktop_config.json:

{
  "mcpServers": {
    "crossref": {
      "command": "uvx",
      "args": ["crossref-mcp"],
      "env": { "CROSSREF_MAILTO": "[email protected]" }
    }
  }
}

或者通过 stdio 运行容器:"command": "docker"、"args": ["run", "-i", "--rm", "-e", "CROSSREF_MAILTO", "heyinnaneo/crossref-mcp"]。

Streamable HTTP — 容器启动后,将支持 HTTP 的客户端指向 http://localhost:8000/mcp。如果设置了 MCP_API_KEY,请将其作为 X-API-Key 发送。

作为技能使用(无需服务)

不想运行服务?skill.md 是一份独立技能,教会 Agent 直接调用 Crossref REST API——只需具备 HTTP/fetch 能力(无需安装、密钥或容器)。代价是:Agent 需要直接发送原始 HTTP 请求并自行解析 Crossref JSON,无法使用 MCP 服务的 polite-pool 限流、字段简化或结构化错误处理。

Claude Code(Agent Skill):

mkdir -p ~/.claude/skills/crossref-api
curl -fsSL https://raw.githubusercontent.com/jtl-neo/crossref-api-MCP/main/skill.md \
  -o ~/.claude/skills/crossref-api/SKILL.md

(也可以限定在项目范围内:将其放在代码库中的 .claude/skills/crossref-api/SKILL.md。)

**其他 Agent(Cursor、Claude Projects、自定义):**将 skill.md 的内容粘贴到系统提示词/项目知识库/规则文件中。

Docker/HTTP 部署

cp .env.example .env          # set CROSSREF_MAILTO
docker compose up -d          # pulls heyinnaneo/crossref-mcp, HTTP on :8000
curl http://localhost:8000/health

在 /mcp 和 /health 提供 Streamable HTTP(compose 健康检查)。设置 MCP_API_KEY,即可要求访问 /mcp 时提供 X-API-Key。要在本地构建,请取消 docker-compose.yml 中 build: . 的注释。

公共部署(TLS/反向代理)——可选

将其置于捆绑的 Caddy 代理之后(Caddyfile + docker-compose.proxy.yml):终止 TLS(自动使用 Let's Encrypt)、HTTP→HTTPS、SSE 流式传输,后端不发布到主机。

cp .env.example .env   # add DOMAIN=, ACME_EMAIL=, MCP_API_KEY=
docker compose -f docker-compose.proxy.yml up -d
curl https://your-domain/health

纵深防御:代理边缘(可选 IP 允许列表/Basic auth)+ MCP_API_KEY 应用层;两者都不限制 /health。需要一个 DNS 指向主机的域名,且端口 80/443 可访问。Caddy 限速需要 caddy-ratelimit 插件(自定义构建)。

Redis 缓存 + 跨副本限速——可选

设置 REDIS_URL 来启用响应缓存(对原始信封采用 cache-aside;mailto/密钥不会纳入缓存键);再设置 RATELIMIT_BACKEND=redis,启用共享令牌桶,使各副本的请求速率保持在 Crossref polite-pool 的限制内。

docker compose -f docker-compose.redis.yml up -d
curl http://localhost:8000/health   # cache_enabled + ratelimit_backend + redis: up

Redis 故障时会优雅降级(不使用缓存,限速改用内存);/health 仍返回 200,状态为 redis: down。

CI/发布

.github/workflows/ci.yml:test(每次推送/PR 都运行 ruff + 格式检查 + pytest 并生成覆盖率报告)、security(Trivy 文件系统扫描)、build-push(在 main/v* 标签上将多架构镜像推送到 heyinnaneo/crossref-mcp),以及打标签时运行的 publish-pypi(OIDC Trusted Publisher)+ publish-registry(MCP 注册表)。

代码库密钥(Settings → Secrets and variables → Actions):DOCKERHUB_USERNAME = heyinnaneo,DOCKERHUB_TOKEN = Docker Hub 访问令牌(读取/写入)。为发布版本打标签(git tag v0.1.0 && git push origin v0.1.0);标签必须与 pyproject.toml 一致。

从 MCP 注册表安装

已发布为 io.github.jtl-neo/crossref-mcp(参见 server.json),并提供 PyPI 软件包(uvx crossref-mcp)和 OCI 镜像。发布会在版本标签上自动进行(publish-pypi + publish-registry);需要公开代码库和已配置的 PyPI Trusted Publisher。

安全与信任

  • 只读。 每个工具都用于查询,并标注 readOnlyHint。
  • 限速。 默认使用单进程内存限速——不要将其作为公共代理承载大量流量;对于副本,请使用 RATELIMIT_BACKEND=redis。
  • Polite pool。 使用你自己的 CROSSREF_MAILTO。
  • 公共 HTTP。 设置 MCP_API_KEY 并在前端配置 TLS。
  • 不包含捆绑密钥。 .env 不会包含在镜像和 git 中。

许可证

MIT。书目数据来自公开的 Crossref REST API;与 Crossref 无关联。


中文

English | 中文

将 Crossref REST API 封装为 MCP 服务,把学术文献元数据查询(works、members、journals、funders、types、 licenses、prefixes)封装成大模型客户端可调用的工具。

非 Crossref 官方产品,未获其背书。数据实时取自公开的 Crossref API。请设置 CROSSREF_MAILTO 以加入 Crossref 的 polite pool。

特点

  • 主要 Crossref 资源端点,共 18 个只读工具。
  • 双传输:stdio(本机)与 Streamable HTTP(容器)。
  • Polite pool(User-Agent + mailto),可选 Crossref Plus token。
  • Token bucket 速率控制(根据 X-Rate-Limit-* header 自动调整),429 指数退避并 遵守 Retry-After。
  • cursor 深分页、字段 select、raw 与精简输出切换。
  • 可选 X-API-Key HTTP 认证(/health 豁免)、/health 端点。
  • 可选 Redis 响应缓存 + 跨副本速率控制。
  • 可选 Caddy TLS 反向代理,用于公开部署。

快速开始(本机 stdio)

uv sync
export CROSSREF_MAILTO="[email protected]"   # 建議(polite pool)
uv run crossref-mcp                         # 啟動 stdio MCP server

使用 MCP Inspector 检查:uv run mcp dev src/crossref_mcp/server.py。

配置

环境变量必填默认值说明
CROSSREF_MAILTO建议—Crossref polite pool 使用的 email。
CROSSREF_PLUS_TOKEN否—Crossref Plus API token(通过 header 发送)。
CROSSREF_BASE_URL否https://api.crossref.orgAPI base URL。
CROSSREF_TIMEOUT否30每次请求的超时时间(秒)。
MCP_TRANSPORT否stdiostdio 或 http。
MCP_API_KEY否—设置后,HTTP 请求需携带匹配的 X-API-Key header(/health 豁免)。
LOG_LEVEL否INFO日志级别(日志写入 stderr)。
REDIS_URL否—启用 Redis 缓存 + 共享速率控制(可选)。
CACHE_TTL否86400缓存 TTL(秒)。
RATELIMIT_BACKEND否in-memoryin-memory 或 redis。

工具

Works — search_works、get_work(根据 DOI)、get_work_references(上限 50)、get_work_quality(注册机构)。 Members / Journals / Funders — search_members/get_member/ get_member_works;search_journals/get_journal(ISSN)/get_journal_works; search_funders/get_funder/get_funder_works。 Types / Licenses / Prefixes — list_types/get_type;list_licenses; get_prefix。另有 ping。

通用参数。 搜索/列表工具接受 query(works 另有 query_bibliographic/ query_author/query_title)、filter(Crossref key:value,… 语法)、sort

  • order、rows(≤1000)+ offset、select。深分页:设置 cursor="*",再将返回的 next_cursor 传回以继续获取。所有工具默认返回精简字段;传入 raw=true 可获取完整的 Crossref JSON。

连接 MCP 客户端

stdio(Claude Desktop / Cursor) — claude_desktop_config.json:

{
  "mcpServers": {
    "crossref": {
      "command": "uvx",
      "args": ["crossref-mcp"],
      "env": { "CROSSREF_MAILTO": "[email protected]" }
    }
  }
}

或者使用容器运行 stdio:"command": "docker"、"args": ["run", "-i", "--rm", "-e", "CROSSREF_MAILTO", "heyinnaneo/crossref-mcp"]。

Streamable HTTP — 容器启动后,将支持 HTTP 的客户端指向 http://localhost:8000/mcp。如果设置了 MCP_API_KEY,请通过 X-API-Key header 传入。

作为 skill 使用(无需 server)

不想搭建 server?skill.md 是一个自包含的 skill,指导 agent 直接调用 Crossref REST API — 只需 agent 具备 HTTP/fetch 能力(无需安装、无需 key、无需容器)。 取舍:agent 自行发送 raw HTTP、自行解析 Crossref JSON,且不具备 MCP server 的 polite-pool 限速、字段精简和结构化错误处理。

Claude Code(Agent Skill):

mkdir -p ~/.claude/skills/crossref-api
curl -fsSL https://raw.githubusercontent.com/jtl-neo/crossref-api-MCP/main/skill.md \
  -o ~/.claude/skills/crossref-api/SKILL.md

(项目级:放入 repo 内的 .claude/skills/crossref-api/SKILL.md。)

其他 agent(Cursor / Claude Projects / 自制): 将 skill.md 内容粘贴到 system prompt / project knowledge / rules 文件中。

Docker / HTTP 部署

cp .env.example .env          # 設定 CROSSREF_MAILTO
docker compose up -d          # 拉 heyinnaneo/crossref-mcp,HTTP 在 :8000
curl http://localhost:8000/health

通过 /mcp 提供 Streamable HTTP,/health 用于 compose 健康检查。设置 MCP_API_KEY 可要求 /mcp 请求携带 X-API-Key。要在本地构建,取消 docker-compose.yml 中 build: . 的注释。

公开部署(TLS / 反向代理)— 可选

部署在随附的 Caddy proxy 后(Caddyfile + docker-compose.proxy.yml):TLS 终止 (自动 Let's Encrypt)、HTTP→HTTPS、SSE 流式传输,后端不向 host 公开。

cp .env.example .env   # 加上 DOMAIN=、ACME_EMAIL=、MCP_API_KEY=
docker compose -f docker-compose.proxy.yml up -d
curl https://your-domain/health

纵深防御:proxy 边界(可选 IP allowlist / Basic auth)+ MCP_API_KEY 应用层; 两者都保留 /health 开放。需要域名 DNS 指向主机,且 80/443 可访问。Caddy 限流需要 caddy-ratelimit plugin(自行构建)。

Redis 缓存 + 跨副本速率控制 — 可选

设置 REDIS_URL 可启用响应缓存(cache-aside 存储原始 envelope;key 排除 mailto/ 密钥),设置 RATELIMIT_BACKEND=redis 可启用共享 token bucket,让多个副本保持在 Crossref polite-pool 速率范围内。

docker compose -f docker-compose.redis.yml up -d
curl http://localhost:8000/health   # cache_enabled + ratelimit_backend + redis: up

Redis 故障时会优雅降级(不缓存,改用 in-memory 限速);/health 仍返回 200 并标记 redis: down。

CI / 发布

.github/workflows/ci.yml:test(每次 push/PR 都运行 ruff + format + pytest 并统计 覆盖率)、security(Trivy fs 扫描)、build-push(在 main/v* tag 时将 multi-arch image 推送到 heyinnaneo/crossref-mcp),打 tag 时还会运行 publish-pypi (OIDC Trusted Publisher)+ publish-registry(MCP registry)。

Repository secrets(Settings → Secrets and variables → Actions): DOCKERHUB_USERNAME = heyinnaneo、DOCKERHUB_TOKEN = Docker Hub Access Token (Read/Write)。打 tag 发布(git tag v0.1.0 && git push origin v0.1.0);tag 必须 与 pyproject.toml 版本一致。

從 MCP registry 安裝

以 io.github.jtl-neo/crossref-mcp 發佈(見 server.json),含 PyPI 套件(uvx crossref-mcp)與 OCI image。發佈於版本 tag 時自動進行 (publish-pypi + publish-registry);需公開 repo 與已設定的 PyPI Trusted Publisher。

安全與信任

  • 唯讀。 每個工具都是查詢,標註 readOnlyHint。
  • 速率控制。 預設單 process in-memory — 勿當公開代理承載大流量;多副本請用 RATELIMIT_BACKEND=redis。
  • Polite pool。 用你自己的 CROSSREF_MAILTO。
  • 公開 HTTP。 設 MCP_API_KEY 並前置 TLS。
  • 不內含密鑰。 .env 不進 image、不進 git。

授權

MIT。文獻資料來自公開的 Crossref REST API;與 Crossref 無隸屬關係。

评论

支持 Markdown

第一次接触 MCP?

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

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