Access the OpenAlex academic research catalog - 270M+ publications through MCP. STDIO & Streamable HTTP.
- ✓Open-source license (Apache-2.0)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
git clone https://github.com/cyanheads/openalex-mcp-server{
"mcpServers": {
"openalex": {
"command": "node",
"args": ["/path/to/openalex-mcp-server/dist/index.js"],
"env": {
"OPENALEX_API_KEY": "<openalex_api_key>"
}
}
}
}OPENALEX_API_KEYMCP Servers overview
<div align="center"> <h1>@cyanheads/openalex-mcp-server</h1> <p><b>Access the OpenAlex academic research catalog - 270M+ publications through MCP. STDIO & Streamable HTTP.</b> <div>5 Tools • 2 Prompts</div> </p> </div> <div align="center"> [](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/openalex-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/openalex-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/) </div> <div align="center"> [](https://github.com/cyanheads/openalex-mcp-server/releases/latest/download/openalex-mcp-server.mcpb) [](https://cursor.com/en/install-mcp?name=openalex-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvb3BlbmFsZXgtbWNwLXNlcnZlciJdfQ==) [](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22openalex-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads/openalex-mcp-server%22%5D%7D) [](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) </div> <div align="center"> **Public Hosted Server:** [https://openalex.caseyjhand.com/mcp](https://openalex.caseyjhand.com/mcp) </div> --- ## Overview Scholarly catalog data from [OpenAlex](https://openalex.org) — 270M+ works, 90M+ authors, 100K+ sources, plus institutions, topics, keywords, publishers, and funders. Search, filter, and aggregate across all eight entity types, resolve ambiguous names to canonical IDs, and walk the citation graph one hop at a time. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above. ### Tools | Tool | Description | |:---|:---| | `openalex_search_entities` | Search, filter, sort, or retrieve by ID across all 8 entity types | | `openalex_analyze_trends` | Group-by aggregation for trend and distribution analysis | | `openalex_resolve_name` | Resolve a name or an identifier (DOI, ORCID, ROR, PMID, ISSN, OpenAlex ID) to an OpenAlex ID | | `openalex_get_citation_graph` | Walk the citation graph one hop from a seed work: `cites`, `cited_by`, or `related_to` | | `openalex_describe_fields` | List valid filter, group_by, and select field names for an entity type | ### Prompts | Prompt | Description | |:-------|:------------| | `openalex_literature_review` | Guides a systematic literature search: formulate query, search, filter, analyze citation network, synthesize findings | | `openalex_research_landscape` | Analyzes the research landscape for a topic: volume trends, top authors/institutions, open access rates, funding sources | ## Capability reference ### `openalex_search_entities` <sub>tool</sub> - Retrieve a single entity by ID — OpenAlex ID, DOI, ORCID, ROR, PMID, ISSN, or PMCID (bare or URL form). `id` takes precedence: search parameters passed alongside it are dropped, and the response names which ones. A PMCID resolves nothing (OpenAlex indexes none) — use the work's PMID or DOI instead - Keyword search (boolean operators, quoted phrases, wildcards, fuzzy match) plus `exact` and `semantic` search modes — semantic caps at 50 results per page and ~1 req/sec - Rich filter syntax: AND across fields, OR within a field (`|`), NOT (`!`), ranges, comparisons; a comma inside a filter value is rejected (use `|`, or a `.search` filter for free text) - `select` returns a curated per-entity-type default unless overridden, or `["*"]` for the full record; invalid field names error with the valid set - Cursor pagination, up to 100 results per page (default 25); `sample` (up to 100, single page only, no `cursor`) plus a deterministic `seed` for reproducible random sampling - `display_name` is nullable for untitled records; every call reports OpenAlex daily-budget cost and remaining balance --- ### `openalex_analyze_trends` <sub>tool</sub> - Group any supported field for trend, distribution, or comparative analysis; combine with `filters` to scope the population before aggregation - Up to 200 groups per page (default). `order: "count"` (default) returns the top-N by count with no further pages; `order: "key"` enumerates all distinct values key-ascending with cursor pagination - `include_unknown` (default `false`) adds a group for entities with no value for the grouped field - Not every field is groupable — raw date fields, `.search` operators, and `from_*`/`to_*` range modifiers are rejected; check with `openalex_describe_fields(entity_type, "group_by")` - Reports OpenAlex daily-budget cost and remaining balance — aggregation is priced far below paging the same entities --- ### `openalex_resolve_name` <sub>tool</sub> - A name or partial name runs an autocomplete search: up to 10 matches with disambiguation hints (last institution, host organization, place, etc.) - An identifier — OpenAlex ID, DOI, ORCID, ROR, PMID, or ISSN, bare or in URL form — resolves directly to the one record it addresses; no `entity_type` needed, since the identifier determines its own. A PMCID is recognized but resolves nothing — OpenAlex indexes none - `filters` narrows autocomplete only; on an identifier lookup they're ignored and named in a notice - Reports OpenAlex daily-budget cost and remaining balance --- ### `openalex_get_citation_graph` <sub>tool</sub> - `direction` sets the edge: `cites` (works citing the seed), `cited_by` (the seed's own reference list), `related_to` (OpenAlex's algorithmic related works, ~8-30 typical, may be empty) - `seed_id` accepts an OpenAlex ID, DOI, or PMID (PMCID recognized but resolves nothing); validated against a live lookup first, so a non-existent seed fails as `NotFound` rather than returning an empty graph - Stacks with `filters`/`sort`/`select` to narrow the graph; `filters` cannot set `cites`/`cited_by`/`related_to` directly — those are reserved for `direction` - Cursor pagination, up to 100 results per page (default 25) - Reports OpenAlex daily-budget cost, covering both the seed-validation lookup and the graph page, plus remaining balance --- ### `openalex_describe_fields` <sub>tool</sub> - Lists every valid field name for an entity type + context (`filter`, `group_by`, `select`) — the complete pool, never truncated - `group_by` is the filter set minus raw date fields, `.search`/`.search.exact` operators, and `from_*`/`to_*` range modifiers, which OpenAlex rejects as aggregation keys - Optional `query` reorders results by name similarity without dropping any field — a nested value's parent object stays reachable further down the list - Backed by a generated field catalog — no live API calls --- ### `openalex_literature_review` <sub>prompt</sub> - Arguments: `topic` required; `scope` (`narrow` / `broad`) optional, defaults to `narrow` - Returns one user message walking a 6-step workflow: resolve entities, search literature, identify key papers, trace citations, analyze the landscape, synthesize findings - `scope` changes the search step: `narrow` favors exact search with tight topic filters; `broad` adds semantic search across multiple related topic IDs --- ### `openalex_research_landscape` <sub>prompt</sub> - Arguments: `topic` required - Returns one user message walking a 7-step quantitative workflow: resolve the topic ID, volume trends, top contributors (institutions/countries/journals), open access rate, funding sources, most-cited works, emerging fronts - The funding step groups by `awards.funder_id` (resolve names via `openalex_resolve_name`) or `awards.funder_display_name` for readable labels in a single hop ## Features Built on [`@cyanheads/mcp-ts-core`](https://github.com/cyanheads/mcp-ts-core): stdio and Streamable HTTP transports, pluggable auth (`none` / `jwt` / `oauth`), swappable storage (`in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`), structured logging with optional OpenTelemetry tracing. OpenAlex-specific: - Typed API client with automatic ID normalization (DOI, ORCID, ROR, PMID, PMCID, ISSN, OpenAlex and PubMed/PubMed Central URLs); a PMCID normalizes but resolves nothing since OpenAlex indexes none - Keyless by default — an optional API key raises rate and daily-budget limits, and an optional `mailto` identifies the caller to OpenAlex's polite pool - HTTP status codes mapped to specific MCP error classes (400 → InvalidParams, 422 → ValidationError, 429 → RateLimited) with upstream messages surfaced - Timeout-aware request retries and cancellation support via `AbortSignal` Agent-friendly output: - Provenance — every API-calling tool reports OpenAlex daily-budget cost, remaining balance, and reset time (`budget.costUsd`, `remainingUsd`, `resetsInSeconds`) - Effective-query echo — search, trends, and citation-graph responses echo the criteria that actually ran, so an empty result is diagnosable without re-reading the request - Discriminated output contracts — typed error reasons (`entity_not_found`, `upstream_budget_exhausted`, `se
What people ask about openalex-mcp-server
What is cyanheads/openalex-mcp-server?
+
cyanheads/openalex-mcp-server is mcp servers for the Claude AI ecosystem. Access the OpenAlex academic research catalog - 270M+ publications through MCP. STDIO & Streamable HTTP. It has 14 GitHub stars and its last recorded update is dated 2026-09-13.
How do I install openalex-mcp-server?
+
You can install openalex-mcp-server by cloning the repository (https://github.com/cyanheads/openalex-mcp-server) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is cyanheads/openalex-mcp-server safe to use?
+
Our security agent has analyzed cyanheads/openalex-mcp-server and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains cyanheads/openalex-mcp-server?
+
cyanheads/openalex-mcp-server is maintained by cyanheads. The last recorded GitHub activity is dated 2026-09-13, with 14 open issues.
Are there alternatives to openalex-mcp-server?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy openalex-mcp-server to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/cyanheads-openalex-mcp-server)<a href="https://claudewave.com/repo/cyanheads-openalex-mcp-server"><img src="https://claudewave.com/api/badge/cyanheads-openalex-mcp-server" alt="Featured on ClaudeWave: cyanheads/openalex-mcp-server" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
The fastest path to AI-powered full stack observability, even for lean teams.