Skip to content

io.github.cyanheads/openalex-mcp-server

by cyanheads · remote · local (npm) · no sign-in to list tools · v0.9.0 · published by GitHub user cyanheads

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

Read only

5 tools: 5 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

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

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

5 tools

Only reads 5Claude Code: allow
  • openalex_describe_fieldsList valid field names for an OpenAlex entity type and context (filter, group_by, or select).No findings

    Why it is in this group

    • The name "openalex_describe_fields" says "describe": a word for reading.
    Description, as the server wrote it
    List 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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
  • openalex_get_citation_graphWalk the citation graph one hop from a seed work.No findings

    Why it is in this group

    • The name "openalex_get_citation_graph" says "get": a word for reading.
    Description, as the server wrote it
    Walk 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. Responses cap at 64,000 bytes per surface unless the least a call can return is larger (`over_budget`); `omitted` and `windows` give the openalex_search_entities calls that continue a cut.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • openalex_resolve_nameResolve a name or an identifier to an OpenAlex ID.No findings

    Why it is in this group

    • The name "openalex_resolve_name" says "resolve": a word for reading.
    Description, as the server wrote it
    Resolve 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, or ISSN, bare or in URL form — resolves directly to the record it addresses instead of running a name search. 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. A PMCID is recognized as well, bare or as a PubMed Central URL, but OpenAlex indexes no PMCIDs, so it resolves nothing — pass the work's PMID or DOI instead.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • openalex_search_entitiesSearch, filter, sort, or retrieve by ID.No findings

    Why it is in this group

    • The name "openalex_search_entities" says "search": a word for reading.
    Description, as the server wrote it
    Search, filter, sort, or retrieve by ID. Covers all OpenAlex entity types (works, authors, sources, institutions, topics, keywords, publishers, funders). Pass `id` to retrieve a single entity. Otherwise, use `query` and/or `filters` for discovery. Supports keyword search with boolean operators, exact phrase matching, and AI semantic search. 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` to override with specific fields, or `["*"]` for the full record. Responses cap at 64,000 bytes per surface unless the least a call can return is larger (`over_budget`); `omitted` and `windows` give the calls that continue a cut, and `slice` pages a long array.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.9.0. Values in angle brackets are yours to fill in.

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

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__openalex__openalex_resolve_name",
      "mcp__openalex__openalex_search_entities",
      "mcp__openalex__openalex_analyze_trends",
      "mcp__openalex__openalex_get_citation_graph",
      "mcp__openalex__openalex_describe_fields"
    ],
    "ask": [],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as openalex. Review it before you use it.