Skip to content

cyanheads/openalex-mcp-server

v0.11.0Apache-2.0

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