openalex-mcp-server
270M+ academic publications
@cyanheads/openalex-mcp-server
Access the OpenAlex academic research catalog - 270M+ publications through MCP. STDIO & Streamable HTTP.
3 Tools · 2 Prompts
Public Hosted Server: https://openalex.caseyjhand.com/mcp
Tools
Three tools for querying the OpenAlex academic research catalog:
| Tool Name | 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 partial name to an OpenAlex ID via autocomplete. |
openalex_search_entities
Primary discovery and lookup tool. Covers all OpenAlex entity types (works, authors, sources, institutions, topics, keywords, publishers, funders).
- Retrieve a single entity by ID (OpenAlex ID, DOI, ORCID, ROR, PMID, PMCID, ISSN)
- Keyword search with boolean operators, quoted phrases, wildcards, and fuzzy matching
- Exact and AI semantic search modes
- Rich filter syntax: AND across fields, OR within fields (
us|gb), NOT (!us), ranges (2020-2024), comparisons (>100) - Sensible default field selection per entity type — prevents oversized responses; pass
selectto override - Invalid
selectfield names produce an error listing the valid fields for that entity type - Formatted MCP output is a generic markdown renderer — every returned field is surfaced without per-entity-type hard-coding
- Cursor pagination, sorting, up to 100 results per page
openalex_analyze_trends
Aggregate entities into groups and count them for trend, distribution, and comparative analysis.
- Group by any supported field (publication year, OA status, institution, country, topic, etc.)
- Combine with filters to scope the population before aggregation
- Up to 200 groups per page with cursor pagination
- Supports
include_unknownto show entities with no value for the grouped field
openalex_resolve_name
Name-to-ID resolution via autocomplete. Always use this before filtering by entity — names are ambiguous, IDs are not.
- Returns up to 10 matches with disambiguation hints
- Accepts partial names and DOIs for direct lookup
- Optional entity type filter and field-level filters
- ~200ms response time
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. |
Features
Built on @cyanheads/mcp-ts-core:
- Declarative tool definitions — single file per tool, framework handles registration and validation
- Unified error handling across all tools
- Pluggable auth (
none,jwt,oauth) - Swappable storage backends via the framework (not currently used by this server)
- Structured logging with optional OpenTelemetry tracing
- Runs locally (stdio/HTTP) or in Docker from the same codebase
OpenAlex-specific:
- Typed API client with automatic ID normalization (DOI, ORCID, ROR, PMID, PMCID, ISSN, OpenAlex URLs)
- Abstract reconstruction from inverted indices — plaintext instead of OpenAlex's position-keyed encoding
- HTTP status codes mapped to specific MCP error classes (400/422 → InvalidParams, 429 → RateLimited, etc.) with upstream messages surfaced
- Timeout-aware request retries and cancellation support via
AbortSignal
Getting Started
Public Hosted Instance
A public instance is available at https://openalex.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": {
"openalex-mcp-server": {
"type": "streamable-http",
"url": "https://openalex.caseyjhand.com/mcp"
}
}
}
Self-Hosted / Local
Add to your MCP client config (e.g., claude_desktop_config.json):
{
"mcpServers": {
"openalex-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/openalex-mcp-server"],
"env": {
"OPENALEX_API_KEY": "[email protected]"
}
}
}
}
No API key needed — just provide your email to access the polite pool (10x faster rate limits).
Prerequisites
- Bun v1.3.0 or higher (for development)
Installation
- Clone the repository:
git clone https://github.com/cyanheads/openalex-mcp-server.git
- Navigate into the directory:
cd openalex-mcp-server
- Install dependencies:
bun install
Configuration
| Variable | Description | Default |
|---|---|---|
OPENALEX_API_KEY | Required. Email address for the OpenAlex polite pool (faster rate limits). | — |
OPENALEX_BASE_URL | OpenAlex API base URL. | https://api.openalex.org |
MCP_TRANSPORT_TYPE | Transport: stdio or http. | stdio |
MCP_HTTP_PORT | Port for HTTP server. | 3010 |
MCP_AUTH_MODE | Auth mode: none, jwt, or oauth. | none |
MCP_ALLOWED_ORIGINS | Comma-separated allow-list of browser Origin headers for HTTP transport. Unset = loopback-only; set to * to disable. | loopback only |
MCP_LOG_LEVEL | Log level (RFC 5424). | debug |
LOGS_DIR | Directory for log files (Node.js only). | <project-root>/logs |
OTEL_ENABLED | Enable OpenTelemetry. | false |
Running the Server
Local Development
-
Build and run the production version:
bun run build bun run start:http # or start:stdio -
Run checks and tests:
bun run devcheck # Lints, formats, type-checks bun run test # Runs test suite
Docker
docker build -t openalex-mcp-server .
docker run -e OPENALEX_API_KEY=your-key -p 3010:3010 openalex-mcp-server
Project Structure
| Directory | Purpose |
|---|---|
src/mcp-server/tools/definitions/ | Tool definitions (*.tool.ts). |
src/mcp-server/prompts/definitions/ | Prompt definitions (*.prompt.ts). |
src/services/openalex/ | OpenAlex API client service and domain types. |
src/config/ | Environment variable parsing and validation with Zod. |
tests/ | Unit and integration tests, mirroring the src/ structure. |
Development Guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
- Handlers throw, framework catches — no
try/catchin tool logic - Use
ctx.logfor logging,ctx.statefor storage - Always resolve names to IDs via
openalex_resolve_namebefore using them in filters
Contributing
Issues and pull requests are welcome. Run checks before submitting:
bun run devcheck
bun run test
License
Apache-2.0 — see LICENSE for details.
Related Servers
Kone.vc
sponsorMonetize your AI agent with contextual product recommendations
ClickUp
Integrate ClickUp with AI applications to manage tasks, spaces, lists, and folders.
context-distill
context-distill is an MCP server that compresses noisy command output into precise, actionable summaries for LLM workflows. Use distill_batch for large logs and distill_watch for cycle-to-cycle deltas. Built with Go, Cobra, Viper, and DI for reliable local and provider-backed distillation.
ClickUp MCP Server
Apify-hosted MCP server for ClickUp with 20 tools. Tasks, spaces, folders, lists, views, docs, and custom fields. No local setup needed.
LimeSurvey
Manage surveys and responses in your LimeSurvey instance.
Jira MCP Server
Integrates with Jira's REST API to manage issues programmatically.
obsidian-brain
Standalone Obsidian MCP server with semantic search, knowledge graph analytics (PageRank, Louvain, shortest path), and vault editing — no plugin, no REST API, works when Obsidian is closed.
Follow on Tours
Bespoke cricket travel specialist — search tours, explore destinations, and submit enquiries from any AI assistant.
MetaTrader MCP Server
A Python-based MCP server that allows AI LLMs to execute trades on the MetaTrader 5 platform.
mpesa-mcp
MCP server for M-Pesa (Safaricom Daraja) and Africa's Talking APIs. Gives AI coding assistants — Claude Code, Cursor, GitHub Copilot — direct access to East African payment and SMS infrastructure from a single server. What it does: STK Push payments via Safaricom Daraja (triggers M-Pesa prompt on user's phone) Transaction status queries SMS to 20+ African telecom networks via Africa's Talking Airtime top-up across East and West Africa Safety: All 5 tools are annotated per MCP 2025-03-26 spec — payment and SMS tools declare destructiveHint: true, so Claude Desktop and other clients show confirmation dialogs before executing. Query tools declare readOnlyHint: true for auto-approval. Install: pip install mpesa-mcp Who it's for: Developers building AI agents for East African markets. M-Pesa handles ~$50B/year in transactions and reaches 50M+ users. Africa's Talking reaches 300M+ phones across 20+ telecoms.
Free Trading Charts - TraderWai
Free MCP server that gives AI real-time candlestick charts for forex, crypto, commodities and indices. 34 symbols, 6 timeframes, updated every minute.