Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
MCP server wrapping the Crossref REST API for scholarly metadata.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
CROSSREF_MAILTO, CROSSREF_PLUS_TOKEN「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"crossref": {
"command": "uvx",
"args": [
"crossref-mcp"
],
"env": {
"CROSSREF_MAILTO": "your-value",
"CROSSREF_PLUS_TOKEN": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add crossref --env CROSSREF_MAILTO=your-value --env CROSSREF_PLUS_TOKEN=your-value -- uvx crossref-mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"crossref": {
"command": "uvx",
"args": [
"crossref-mcp"
],
"env": {
"CROSSREF_MAILTO": "your-value",
"CROSSREF_PLUS_TOKEN": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"crossref": {
"type": "stdio",
"command": "uvx",
"args": [
"crossref-mcp"
],
"env": {
"CROSSREF_MAILTO": "your-value",
"CROSSREF_PLUS_TOKEN": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
CROSSREF_MAILTO envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント jtl-neo で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:CROSSREF_PLUS_TOKEN
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.0)がレジストリに届いたのは5 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv), Dockerも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, LexPact UK Contracts
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Generate UK-law contracts: NDA, service, freelance, recruiter terms of business, IR35.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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
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.uv sync
export CROSSREF_MAILTO="you@example.com" # recommended (polite pool) uv run crossref-mcp # starts a stdio MCP server
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:
{
"mcpServers": { "crossref": { "command": "uvx", "args": ["crossref-mcp"], "env": { "CROSSREF_MAILTO": "you@example.com" } } } }
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):
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
(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.
cp .env.example .env # set CROSSREF_MAILTO
docker compose up -d # pulls heyinnaneo/crossref-mcp, HTTP on :8000 curl http://localhost:8000/health
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.
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
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.
docker compose -f docker-compose.redis.yml up -d
curl http://localhost:8000/health # cache_enabled + ratelimit_backend + redis: up
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 的
mailto)、可選 Crossref Plus token。X-Rate-Limit-* header 自動調整),429 指數退避並 尊重 Retry-After。select、raw 與精簡輸出切換。X-API-Key HTTP 認證(/health 豁免)、/health 端點。uv sync
export CROSSREF_MAILTO="you@example.com" # 建議(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.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。 |
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。
stdio(Claude Desktop / Cursor) — claude_desktop_config.json:
{
"mcpServers": { "crossref": { "command": "uvx", "args": ["crossref-mcp"], "env": { "CROSSREF_MAILTO": "you@example.com" } } } }
或以容器跑 stdio:"command": "docker"、"args": ["run", "-i", "--rm", "-e", "CROSSREF_MAILTO", "heyinnaneo/crossref-mcp"]。
Streamable HTTP — 容器啟動後,將支援 HTTP 的 client 指向 http://localhost:8000/mcp。若設了 MCP_API_KEY,以 X-API-Key header 帶上。
不想架 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 檔。
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。要本地 build,取消 docker-compose.yml 內 build: . 註解。
放在內附的 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-
冒頭だけを表示しています。続きはリポジトリで読めます