Skip to main content

openalex-mcp-server

io.github.cyanheads/openalex-mcp-serverVersion 0.11.1

Access the OpenAlex academic research catalog — 270M+ publications.

Status

Responds274 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:48 UTC
Latency
274 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://openalex.caseyjhand.com/mcpResponds274 ms
No sign-in

Claude Code

claude mcp add --transport http openalex-mcp-server https://openalex.caseyjhand.com/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: openalex-mcp-server
Remote MCP server URL: https://openalex.caseyjhand.com/mcp

Cursor

{
  "mcpServers": {
    "openalex-mcp-server": {
      "url": "https://openalex.caseyjhand.com/mcp"
    }
  }
}

VS Code

code --add-mcp '{"name":"openalex-mcp-server","type":"http","url":"https://openalex.caseyjhand.com/mcp"}'
Streamable HTTP
npm: @cyanheads/openalex-mcp-server 0.11.1
Package only

npm (npx)

claude mcp add openalex-mcp-server -- npx -y @cyanheads/openalex-mcp-server@0.11.1
Streamable HTTP
npm: @cyanheads/openalex-mcp-server 0.11.1
Package only

npm (npx)

claude mcp add openalex-mcp-server -- npx -y @cyanheads/openalex-mcp-server@0.11.1

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

5 tools

Tools of openalex-mcp-server
Read-only
Idempotent
Open world
openalex_analyze_trendsAggregate OpenAlex entities into groups and count them. Use for trend analysis (group works by publication_year), distribution analysis (group by oa_status, type, country), and comparative analysis (group by institution or topic). Combine with filters to scope the analysis. Returns up to 200 groups per page — use order "key" and cursor pagination for fields with many distinct values. OpenAlex can wrap a key-ordered walk to earlier groups. Stop when a page's first key repeats an earlier key, or when a page is short or empty.Not declaredYesYesYes
openalex_describe_fieldsList valid field names for an OpenAlex entity type and context (filter, group_by, or select). Use proactively before constructing a filter or group_by to avoid invalid-field 400 errors. Pass `query` to rank the list by name similarity — useful when you have a partial or guessed field name. Ranking never drops a field: the full list comes back either way.Not declaredYesYesNot declared
openalex_get_citation_graphWalk the citation graph one hop from a seed work. Direction picks the edge: incoming citations (`cites`), the seed's own references (`cited_by`), or OpenAlex's algorithmically-related works (`related_to`). Note: `direction` follows OpenAlex's filter convention, which inverts the common English reading — `cites` returns works that cite the seed; `cited_by` returns works the seed cites. Results use the works schema; combine with filters/sort to narrow further. A page holds `per_page` works and `next_cursor` continues it.Not declaredYesYesYes
openalex_resolve_nameResolve a name or an identifier to an OpenAlex ID. ALWAYS use this before filtering by entity — names are ambiguous, IDs are not. A name returns up to 10 autocomplete matches with disambiguation hints. An identifier — OpenAlex ID, DOI, ORCID, ROR, PMID, PMCID, ISSN, or arXiv ID, bare or in URL form — resolves directly to the record it addresses instead of running a name search. An arXiv ID resolves to its work under any entity_type, found by its arXiv landing page when OpenAlex holds no work under its arXiv DOI, one billed list request. Short names share the bare OpenAlex ID shape (keyword p53 reads as publisher ID P53), so a bare OpenAlex ID that resolves nothing is searched as a name next. Two identifiers can address more than one entity type: a ROR names an organization's institution, funder, and publisher records alike, so it returns each one that exists (institution first) unless entity_type picks one of those three; and a Crossref Funder Registry DOI (10.13039/…) resolves to the funder unless entity_type is works. An award ID (G…, bare or as an OpenAlex URL) is not looked up, since OpenAlex has no award autocomplete: it returns no matches and a notice naming the openalex_search_entities call that opens the award. Under entity_type, a bare G… is searched as a name of that type instead.Not declaredYesYesYes
openalex_search_entitiesSearch, filter, sort, or retrieve by ID. Covers all OpenAlex entity types (works, authors, sources, institutions, topics, keywords, publishers, funders, awards). Pass `id` to retrieve a single entity; on works it also takes an arXiv ID, found by its arXiv landing page when OpenAlex holds no work under its arXiv DOI, one billed list request. Otherwise, use `query` and/or `filters` for discovery. Filters take a record object; an unambiguous native string such as "primary_location.source.issn:0920-8542" is also accepted when enabled and disclosed in `notice`. Native clauses split on commas outside paired double quotes and the first colon; duplicate keys and bare fragments are rejected. Any filter value sent unquoted must have paired double quotes; balanced search phrases remain valid. Supports keyword search with boolean operators, exact phrase matching, AI semantic search, and seeded random samples. On works, wildcards (`*`, `?`) need search_mode "exact" or a `.search.exact` filter, and a `*` needs three characters before it. Use openalex_resolve_name to resolve names to IDs before filtering. Searches and ID lookups return a curated set of fields by default; pass `select` (an array, or a comma-separated string) to override with specific fields, or `["*"]` for the full record. A page holds `per_page` records and `next_cursor` continues it — semantic search and a seeded `sample` continue with `page` instead; an `id` lookup returns every selected array whole, and `slice` pages one array by count.Not declaredYesYesYes

Details

Registry status
Active
Published
Nov 11, 2026
Updated
Nov 11, 2026
Website
Not given
Categories (suggested)
Data and analyticsSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing