MCP server wrapping the Crossref REST API for scholarly metadata.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent — or use 1-click editor setup below.
💡 Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
English | 中文
An MCP server wrapping the Crossref REST API, exposing scholarly-metadata lookups (works, members, journals, funders, types, licenses, prefixes) as tools an LLM client can call.
Not affiliated with or endorsed by Crossref. Data is served live from the public Crossref API. Set
CROSSREF_MAILTOto join Crossref's polite pool.
mailto), optional Crossref Plus token.X-Rate-Limit-* headers) with
exponential backoff honoring Retry-After.select, raw vs simplified output.X-API-Key HTTP auth (/health exempt), /health endpoint.Inspect with the MCP Inspector: uv run mcp dev src/crossref_mcp/server.py.
| Env var | Required | Default | Description |
|---|---|---|---|
CROSSREF_MAILTO | recommended | — | Email for Crossref's polite pool. |
CROSSREF_PLUS_TOKEN | no | — | Crossref Plus API token (sent as a header). |
CROSSREF_BASE_URL | no | https://api.crossref.org | API base URL. |
CROSSREF_TIMEOUT | no | 30 | Per-request timeout (seconds). |
MCP_TRANSPORT | no | stdio | stdio or http. |
MCP_API_KEY | no | — | If set, HTTP requests need a matching X-API-Key header (/health exempt). |
LOG_LEVEL | no | INFO | Log level (logs go to stderr). |
REDIS_URL | no | — | Enable Redis cache + shared rate limiting (optional). |
CACHE_TTL | no | 86400 | Cache TTL in seconds. |
RATELIMIT_BACKEND | no | in-memory | in-memory or redis. |
Works — search_works, get_work (by DOI), get_work_references (capped
at 50), get_work_quality (registration agency).
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. Plus ping.
Shared parameters. Search/list tools take query (and
query_bibliographic / query_author / query_title on works), filter
(Crossref key:value,… syntax), sort + order, rows (≤1000) + offset,
and select. Deep paging: set cursor="*" then reuse the returned
next_cursor. All tools return simplified fields by default; pass raw=true
for the full Crossref JSON.
stdio (Claude Desktop / Cursor) — claude_desktop_config.json:
Or run the container over stdio: "command": "docker", "args": ["run", "-i", "--rm", "-e", "CROSSREF_MAILTO", "heyinnaneo/crossref-mcp"].
Streamable HTTP — once the container is up, point an HTTP-capable client at
http://localhost:8000/mcp. If MCP_API_KEY is set, send it as X-API-Key.
Prefer not to run a server? skill.md is a self-contained skill
that teaches an agent to call the Crossref REST API directly — it only needs an
HTTP/fetch capability (no install, no key, no container). Trade-off: the agent
issues raw HTTP and parses Crossref JSON itself, without the MCP server's
polite-pool throttling, field simplification, or structured errors.
Claude Code (Agent Skill):
(Project-scoped instead: place it at .claude/skills/crossref-api/SKILL.md in
your repo.)
Other agents (Cursor, Claude Projects, custom): paste the contents of
skill.md into your system prompt / project knowledge / rules file.
Serves Streamable HTTP at /mcp and /health (compose health check). Set
MCP_API_KEY to require X-API-Key on /mcp. To build locally, uncomment
build: . in docker-compose.yml.
Put it behind the bundled Caddy proxy (Caddyfile + docker-compose.proxy.yml):
TLS termination (auto Let's Encrypt), HTTP→HTTPS, SSE streaming, backend not
published on the host.
Defense in depth: proxy edge (optional IP allowlist / Basic auth) + MCP_API_KEY
app layer; both leave /health open. Needs a domain with DNS pointing at the
host and ports 80/443 reachable. Caddy rate limiting needs the caddy-ratelimit
plugin (custom build).
Set REDIS_URL for a response cache (cache-aside on the raw envelope; mailto/
secrets excluded from keys) and, with RATELIMIT_BACKEND=redis, a shared token
bucket so replicas stay within Crossref's polite-pool rate.
Redis failures degrade gracefully (no cache, in-memory limiting); /health stays
200 with redis: down.
.github/workflows/ci.yml: test (ruff + format + pytest with coverage on
every push/PR), security (Trivy fs scan), build-push (multi-arch image to
heyinnaneo/crossref-mcp on main / v* tags), and on tags publish-pypi
(OIDC Trusted Publisher) + publish-registry (MCP registry).
Repository secrets (Settings → Secrets and variables → Actions):
DOCKERHUB_USERNAME = heyinnaneo, DOCKERHUB_TOKEN = a Docker Hub Access
Token (Read/Write). Tag a release (git tag v0.1.0 && git push origin v0.1.0);
the tag must match pyproject.toml.
Published as io.github.jtl-neo/crossref-mcp (see server.json),
with a PyPI package (uvx crossref-mcp) and an OCI image. Publishing is automated
on version tags (publish-pypi + publish-registry); requires a public repo and
a configured PyPI Trusted Publisher.
readOnlyHint.RATELIMIT_BACKEND=redis.CROSSREF_MAILTO.MCP_API_KEY and front with TLS..env is excluded from image and git.MIT. Bibliographic data comes from the public Crossref REST API; not affiliated with Crossref.
English | 中文
把 Crossref REST API 封裝成 MCP server,將學術文獻 metadata 查詢(works、members、journals、funders、types、 licenses、prefixes)包成 LLM client 可呼叫的工具。
非 Crossref 官方、未經其背書。資料即時取自公開的 Crossref API。請設定
CROSSREF_MAILTO以加入 Crossref 的 polite pool。
mailto)、可選 Crossref Plus token。X-Rate-Limit-* header 自動調整),429 指數退避並
尊重 Retry-After。select、raw 與精簡輸出切換。X-API-Key HTTP 認證(/health 豁免)、/health 端點。用 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.org | API base URL。 |
CROSSREF_TIMEOUT | 否 | 30 | 每請求逾時(秒)。 |
MCP_TRANSPORT | 否 | stdio | stdio 或 http。 |
MCP_API_KEY | 否 | — | 設了則 HTTP 請求需帶相符的 X-API-Key header(/health 豁免)。 |
LOG_LEVEL | 否 | INFO | 日誌層級(日誌走 stderr)。 |
REDIS_URL | 否 | — | 啟用 Redis 快取 + 共享速率控制(選用)。 |
CACHE_TTL | 否 | 86400 | 快取 TTL(秒)。 |
RATELIMIT_BACKEND | 否 | in-memory | in-memory 或 redis。 |
No reviews yet — be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/crossref-mcp)<a href="https://allmcps.com/mcp/crossref-mcp"><img src="https://allmcps.com/api/badge/crossref-mcp?style=directory" alt="Crossref MCP on AllMCPs" /></a>