The discipline is what stands out for a catalogue this size. Names are ambiguous and IDs are not, so resolution is a deliberate first step; field names are discoverable, so a filter is built from real fields instead of a guess that errors; and a default field selection per entity type stops a search dumping full records into the context. The aggregation tool earns its place — grouped counts over a filtered population answer how a field has changed without retrieving the underlying works at all.
A server over the OpenAlex academic catalogue with five tools: resolve a name or identifier to an ID, search or fetch any entity type, group entities and count them, walk one hop of the citation graph, and list the field names a query may legally use before you build it.
- openalex_resolve_name turns a name or an identifier — DOI, ORCID, ROR, PMID, PMCID, ISSN or an OpenAlex ID — into one unambiguous OpenAlex ID for the other tools to filter on
- openalex_search_entities covers every entity type — works, authors, sources, institutions, topics, keywords, publishers and funders — by keyword with boolean operators, quoted phrases, wildcards and fuzzy matching, or straight by ID
- Filter syntax with AND across fields, OR within a field, negation, ranges and comparisons, plus sorting on one or several keys and cursor pagination up to 100 results a page
- A sensible default field selection per entity type keeps responses from ballooning; select narrows it further or asks for the whole record, and an invalid field name comes back with the valid ones listed
- openalex_analyze_trends groups entities and counts them — works by publication year, by open-access status, by institution, country or topic — with filters applied first to scope the population, up to 200 groups a page
- openalex_get_citation_graph walks one hop from a seed work in the direction you name: the works citing it, its own references, or OpenAlex's related works
- openalex_describe_fields lists the valid filter, group_by and select fields for an entity type, so a query is built from real field names rather than plausible-looking ones
Published as @cyanheads/openalex-mcp-server, runnable over stdio or as a Streamable HTTP server, which binds to 127.0.0.1 on port 3010 at /mcp by default. A public hosted instance exists at https://openalex.caseyjhand.com/mcp. No credentials are required: OPENALEX_API_KEY is optional and free, and anonymous rate limits apply without it, while OPENALEX_MAILTO sends an email address to join OpenAlex's polite pool and is separate from the key.
One command — npx -y @cyanheads/openalex-mcp-server
