cyanheads/openalex-mcp-server
Access the OpenAlex academic research catalog — 270M+ publications — via MCP. STDIO or Streamable HTTP.
Changelog
All notable changes to this project. Each entry links to its full per-version file in changelog/.
0.11.0 — 2026-10-28 · ⚠️ Breaking
Adds the awards entity, seeded sample paging up to 10,000 records, and the openalex-guide skill. Pages are no longer cut to a byte budget (omitted and over_budget removed; a response over 8,000,000 bytes fails response_too_large), and boolean group_by fields keep count order.
0.10.1 — 2026-10-25
mcp-ts-core 0.13.18: query echoes render as code spans, error text in content[] escapes Markdown, invalid framework config fails startup naming the variable, and the root Agent Plugins pair ships.
0.10.0 — 2026-10-22 · ⚠️ Breaking
Preserve nullable aggregation labels, correct filter handling, and disclose pagination and author-storage limits.
0.9.0 — 2026-10-18 · ⚠️ Breaking
Filter values reach OpenAlex as it reads them (AND with +, country and language codes, quoted names), mixed OR/AND values are rejected up front, identifiers route to the record they name, and provider-text cleanup converges in one pass.
0.8.0 — 2026-09-30
Search and citation-graph responses hold to a 64,000-byte budget, with continuations for cut records and a new slice input for windowed arrays, alongside provider-text and identifier fixes.
0.7.16 — 2026-09-24
Provider text arrives clean on both surfaces (entities decoded, markup removed, Markdown escaped in content[]), plus a flagged unknown group_by bucket, local rejection of sample with semantic search or sort, and corrected group_by field lists and error reasons.
0.7.15 — 2026-09-22
Keyword identifiers, semantic-mode page pagination, AND'd filter aliases, and honest pagination/notice handling across the paginating tools.
0.7.14 — 2026-09-19
Input aliases for filter/search/name parameters, mcp-ts-core 0.13.x error-text and validation upgrades, and a code-declared stateless session default.
0.7.13 — 2026-09-13
Framework adoption and plugin configuration
0.7.12 — 2026-09-08
PMCID is now recognized as a PubMed Central URL too, and every PMCID miss says OpenAlex indexes none and points at converting to a PMID or DOI instead of the generic verify-the-ID advice.
0.7.11 — 2026-09-08
Uppercase ID schemes and PubMed URLs now resolve instead of 404ing, summary_stats leaves (h_index, i10_index, 2yr_mean_citedness) alias into select, and describe_fields ranking no longer hides a nested field's parent.
0.7.10 — 2026-09-02
An OpenAlex 500 now retries instead of failing on the first attempt, and a caller that disconnects mid-call surfaces as a cancellation rather than an internal error.
0.7.9 — 2026-08-22
Adopts mcp-ts-core 0.12 with strict tool inputs and advertised structured error envelopes.
0.7.8 — 2026-07-26
Fixed: search_entities pre-flight validations no longer reject an id lookup over search-only constraints it never applies.
0.7.7 — 2026-07-26
Added: openalex_resolve_name resolves identifiers directly; prepaid budget balance. Fixed: search_entities id lookup echoing ignored params, field catalog gaps, an all-digit ROR resolving as neither ROR nor PMID.
0.7.6 — 2026-07-26
Added: per-call cost and remaining daily-budget enrichment on every API-calling tool. Fixed: retried requests under-reporting cost.
0.7.5 — 2026-07-26
Fix: six error-contract gaps (statusless failures, 400-family InvalidParams drift, multi-key sort corruption, nullable display_name, 429 budget vs. throttle, resolve_name's missing comma_in_filter_value entry); mcp-ts-core ^0.11.0, typescript ^7.0.2.
0.7.4 — 2026-07-09
Fix: research_landscape funding step resolves funder IDs correctly; invalid-params 400 recovery branches by upstream failure shape; describe_fields(group_by) no longer advertises non-groupable fields.
0.7.3 — 2026-07-09 · ⚠️ Breaking
Breaking: OPENALEX_API_KEY now authenticates as api_key= (the old mailto= was ignored) — an email previously set there must move to the new OPENALEX_MAILTO; mcp-ts-core ^0.10.14 supply-chain guard adopted.
0.7.2 — 2026-06-20
mcp-ts-core ^0.10.6 → ^0.10.9 maintenance: fresh-scaffold devcheck guards, new floating-dependency-specifier check, plugin-manifest packaging checks; dev-dependency refresh. No behavior change.
0.7.1 — 2026-06-11
mcp-ts-core ^0.9.21 → ^0.10.6: identity pair, sampling removed, elicitation wired, DataCanvas SQL gate hardened; enrichment key renames totalCount; bundle cleaner; skill sync
0.7.0 — 2026-06-08
openalex_analyze_trends: gated page-truncation notice on sort order; 0.7.0 recognizes openalex_describe_fields as a minor addition
0.6.21 — 2026-06-08
openalex_describe_fields tool, ranked invalid-field suggestions, comma-safe filters
0.6.20 — 2026-06-04
openalex_analyze_trends: order parameter, count-desc default, cursor fix, truncation notice
0.6.19 — 2026-06-02
Adopt @cyanheads/mcp-ts-core 0.9.21: per-request log context fix, fetchWithTimeout secret scrubbing, withRetry fail-fast on non-retryable errors
0.6.18 — 2026-06-01
openalex_search_entities: curated DEFAULT_SELECT applied to ID lookups; resolveSelect helper unifies ID and search paths; select: ["*"] sentinel for full record
0.6.17 — 2026-06-01
tool contract fixes: upstream_timeout/unavailable recovery hints, tightened invalid-params hints, direction-inversion note, consumer-phrasing scrub; remove unused tsx devDependency
0.6.16 — 2026-05-30
enrichment block on search/analyze/citation/resolve_name tools; query echo, true totals, and empty-result guidance in both structuredContent and content[]
0.6.15 — 2026-05-28
mcp-ts-core ^0.9.6 → ^0.9.13: body limit guard, session-init gate, quieter client-error logs, GET /mcp keywords; dep refresh
0.6.14 — 2026-05-25
cursor pagination for non-boolean group_by, corrected citation direction semantics, scope optional
0.6.13 — 2026-05-23
mcp-ts-core ^0.9.1 → ^0.9.6, zod added, manifest.json + .mcpbignore scaffolded, install badges
0.6.12 — 2026-05-20
Citation-graph seed validation and reserved-filter-key rejection; recover truncated upstream 400 messages; true population count under sample.
0.6.11 — 2026-05-20 · 🛡️ Security
Add openalex_get_citation_graph for one-hop citation traversal; polish analyze_trends (per_page, chronological year sort, broader recovery hint); redact polite-pool mailto from error messages.
0.6.10 — 2026-05-16
Adopt @cyanheads/mcp-ts-core ^0.8.19 → ^0.9.1; surface server-level instructions on the MCP initialize response so clients can forward catalog orientation to the model.
0.6.9 — 2026-05-08
Adopt @cyanheads/mcp-ts-core ^0.8.15 → ^0.8.19; bump Node engine ≥24, pin Docker base to oven/bun:1.3; tighten tool/prompt copy.
0.6.8 — 2026-05-05
search_entities — random sampling via sample/seed (#14); alias common LLM-prior field/filter names to OpenAlex canonical names (#17).
0.6.7 — 2026-05-03
Maintenance: pick up @cyanheads/mcp-ts-core 0.8.7 → 0.8.12, biome 2.4.13 → 2.4.14, tsc-alias 1.8.16 → 1.8.17; resync 7 framework skills + add api-canvas reference. No tool/service code changes.
0.6.6 — 2026-05-01
search_entities — coerce bare relevance_score sort to descending so OpenAlex stops rejecting it; document that relevance_score requires an active search
0.6.5 — 2026-04-30
Adopt @cyanheads/mcp-ts-core 0.7.5 → 0.8.7: typed error contracts on every tool, service-layer reason carrying via ctx.recoveryFor, httpStatusToErrorCode replaces manual status mapping (fixes 422 → ValidationError, other 4xx → InvalidRequest)
0.6.4 — 2026-04-27
search_entities — caller-supplied select missing id/display_name no longer breaks output validation; framework ^0.7.5 adoption (vitest projects shape)
0.6.3 — 2026-04-26
Field-test issue triage — HTML entity decoding, abstract select alias, dense flat format, empty-result echo, semantic per_page guard, framework ^0.7.5
0.6.2 — 2026-04-25
Framework bump to ^0.7.4 — fail-closed Origin guard for HTTP, framework-antipattern devcheck step, literal-variant linter exemption, issue templates
0.6.1 — 2026-04-24
Framework bump to ^0.7.0 — flattened ZodError messages, locale-aware format-parity linter, devcheck crash fix on single-file changelog projects
0.6.0 — 2026-04-24
Framework bump to ^0.6.17, directory-based changelog, cleaner field rendering in search_entities (no comma-years, uppercased acronyms), security-pass skill surfaced
0.5.0 — 2026-04-23
Adds HTTP landing page and SEP-1649 Server Card via @cyanheads/mcp-ts-core 0.6.x, plus sourceUrl overrides; syncs skills and adds api-linter + release-and-publish
0.4.0 — 2026-04-20
Framework bump to ^0.5.3; rewrites tool format() bodies to satisfy the new format-parity linter so content[] now carries every output-schema field
0.3.3 — 2026-04-15
Generic field rendering in openalex_search_entities; abstracts returned as plaintext; OpenAlex 4xx responses now map to specific MCP error classes
0.3.2 — 2026-04-14
Framework bump to ^0.3.5; retries empty/HTML/malformed JSON responses; analyze_trends paginates cleanly; adds add-app-tool skill
0.3.1 — 2026-03-30
Framework bump to ^0.2.10; adds funding links and public hosted server URL; refreshes add-tool, add-resource, and design-mcp-server skills
0.3.0 — 2026-03-28
Framework bump @cyanheads/mcp-ts-core ^0.2.3 → ^0.2.8
0.2.9 — 2026-03-28
Rich structured markdown output for openalex_search_entities and openalex_resolve_name; adds report-issue-framework and report-issue-local skills; framework bump to ^0.2.3
0.2.8 — 2026-03-24
Default select fields per entity type — searches now return curated subsets, preventing 20-70KB-per-record payloads from overwhelming context windows
0.2.7 — 2026-03-24
Unifies package description across README, package.json, server.json, and Dockerfile to a shorter consistent form
0.2.6 — 2026-03-24
Adds idempotentHint: true to all three tools; adds publishing section to CLAUDE.md with npm and GHCR release commands
0.2.5 — 2026-03-24
Clarifies README storage backend description; removes unused STORAGE_PROVIDER_TYPE env var; reformats retryable status code condition for readability
0.2.4 — 2026-03-24
API client retries transient failures (429, 500, 502, 503, 504) with exponential backoff — up to 3 attempts before surfacing the error
0.2.3 — 2026-03-24
openalex_analyze_trends sorts groups by count descending and caps display at 50; cursor pagination only sent when explicitly provided; cross-entity autocomplete filters to known entity types
0.2.2 — 2026-03-24
Literature review prompt adapts strategy to scope; 404s throw notFound() instead of serviceUnavailable(); group-by queries always send cursor (defaults to * for first page)
0.2.1 — 2026-03-24
Explicit 404 handling in API client; non-JSON error response bodies sanitized (HTML stripped, truncated to 200 chars); next_cursor normalized to null when missing
0.2.0 — 2026-03-24
Full unit test suite for all three tools and the OpenAlex service; API auth changed from api_key to mailto (polite pool convention); sort direction syntax fixed
0.1.1 — 2026-03-24
README, LICENSE, docs/tree.md; package.json metadata filled in; server.json OpenAlex env vars declared; Dockerfile OCI labels; echo placeholder tests removed
0.1.0 — 2026-03-24
Initial release. MCP server for the OpenAlex academic research catalog (270M+ works, 90M+ authors, 100K+ sources) with 3 tools, 2 prompts, and dual stdio/HTTP transports