OpenAlex MCP
Enables searching and retrieving scholarly papers using arXiv identifiers or URLs, providing access to metadata, citations, and full-text download links through OpenAlex.
Permits resolving scholarly works by their DOI, returning detailed metadata including title, authors, citations, and download links.
Allows finding authors by ORCID identifier, retrieving their publication lists and profiles via OpenAlex.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenAlex MCPsearch for recent papers on machine learning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenAlex MCP
A standalone Model Context Protocol (MCP) server for scholarly search, paper metadata, citation graphs, author and venue resolution, candidate harvesting, API quota visibility, and guarded full-text downloads through OpenAlex.
It uses the official Python MCP SDK with stdio transport and works with any MCP client that can launch a local command. The server is independent of any note-taking application or agent workflow.
This is a community project and is not affiliated with OpenAlex. Metadata and full-text content remain subject to the terms of OpenAlex and the original publishers.
Features
Tool | Purpose |
| Search titles and abstracts or full text, with date, venue, author, topic, OA, arXiv, citation, sorting, and pagination filters |
| Resolve a paper from an OpenAlex W-id, DOI, arXiv ID/URL, or exact title and return detailed metadata |
| Find later works that cite a paper |
| Hydrate a paper's references and rank them by citation count |
| Find authors by name or ORCID |
| Resolve sources, topics, and institutions from names, ISSNs, or OpenAlex IDs |
| Run recent, backfill, topic, venue, citation, author, and slow-window retrieval, then exclude, deduplicate, and fuse results with RRF |
| Show the official |
| Download OpenAlex-hosted PDF or GROBID XML with root-boundary, size, magic-byte, and atomic-write checks |
The current tool responses are in Chinese while paper titles and technical terms remain in their original language.
Related MCP server: OpenAlex MCP Server
Prerequisites
You need:
Python 3.12 or newer
An MCP client that supports local stdio servers
You do not need to install Python separately when using most uv workflows: uv can install and manage a compatible Python interpreter for the project.
1. Install uv
Use one of the official installation methods below.
macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | shHomebrew is also supported:
brew install uvWindows
In PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Or use WinGet:
winget install --id=astral-sh.uv -eRestart the terminal if the installer updated your PATH, then verify the installation:
uv --version
uv python install 3.12See the official uv installation guide for other package managers and uninstall instructions.
2. Get an OpenAlex API key
Sign in or create an OpenAlex account.
Create or reveal your API key in the API settings page.
Keep the key in a password manager until you add it to your local MCP client configuration.
The server reads the key only from OPENALEX_API_KEY. Never commit the key, paste it into an issue, or put a URL containing api_key=... in logs. OpenAlex quotas and prices can change; use get_api_quota after setup to see the current values for your account.
3. Choose an installation method
Option A: Run directly from GitHub with uvx
This is the shortest installation:
uvx --from git+https://github.com/DeyangLiu123/openalex-mcp.git openalex-mcpuvx creates an isolated environment and runs the command. For a reproducible deployment, pin the Git URL to a commit:
uvx --from git+https://github.com/DeyangLiu123/openalex-mcp.git@<commit-sha> openalex-mcpThe command appears to wait when launched in a terminal because it is a stdio MCP server. Normally your MCP client launches it and communicates over stdin/stdout.
Option B: Install a persistent user-level command
uv tool install git+https://github.com/DeyangLiu123/openalex-mcp.git
openalex-mcpVerify where the executable was installed:
uv tool listTo update a VCS installation later:
uv tool install --force git+https://github.com/DeyangLiu123/openalex-mcp.gitOption C: Clone for development or auditing
git clone https://github.com/DeyangLiu123/openalex-mcp.git
cd openalex-mcp
uv sync --locked
uv run pytest -m "not live"The local executable is created at:
.venv/bin/openalex-mcp # macOS/Linux
.venv\Scripts\openalex-mcp.exe # Windows4. Configure an MCP client
Generic stdio configuration
Many desktop and editor clients accept a JSON configuration shaped like this:
{
"mcpServers": {
"openalex": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/DeyangLiu123/openalex-mcp.git",
"openalex-mcp"
],
"env": {
"OPENALEX_API_KEY": "your-api-key"
}
}
}
}The exact configuration filename and location depend on the client. Keep this file local and out of version control because it contains the API key.
For a cloned installation, replace command with the absolute path to .venv/bin/openalex-mcp on macOS/Linux or .venv\\Scripts\\openalex-mcp.exe on Windows, and set args to an empty array.
Codex
Codex CLI, the Codex IDE extension, and the Codex desktop experience share the same MCP configuration in ~/.codex/config.toml. Register the server once with the Codex CLI:
codex mcp add openalex \
--env OPENALEX_API_KEY=<your-api-key> \
-- uvx --from git+https://github.com/DeyangLiu123/openalex-mcp.git openalex-mcpVerify the registration:
codex mcp list
codex mcp get openalexRestart Codex or open a new session after changing MCP configuration. In an interactive Codex session, use /mcp to confirm that openalex is connected and that its nine tools are visible.
The equivalent ~/.codex/config.toml entry is:
[mcp_servers.openalex]
command = "uvx"
args = [
"--from",
"git+https://github.com/DeyangLiu123/openalex-mcp.git",
"openalex-mcp",
]
env = { OPENALEX_API_KEY = "your-api-key" }Keep ~/.codex/config.toml private because this form stores the key locally. If you prefer to manage the secret outside Codex configuration, replace the env line with env_vars = ["OPENALEX_API_KEY"], ensure the variable is present in the environment that launches Codex, and restart Codex.
For more detail, see the official Codex MCP documentation.
Claude Code
With the uvx installation method:
claude mcp add --scope user openalex \
-e OPENALEX_API_KEY=<your-api-key> \
-- uvx --from git+https://github.com/DeyangLiu123/openalex-mcp.git openalex-mcpThen verify that Claude Code sees the server:
claude mcp listIf you do not want the literal key in shell history, read it into a temporary environment variable first and use that variable in the registration command:
read -s OPENALEX_API_KEY
export OPENALEX_API_KEY
claude mcp add --scope user openalex \
-e OPENALEX_API_KEY="$OPENALEX_API_KEY" \
-- uvx --from git+https://github.com/DeyangLiu123/openalex-mcp.git openalex-mcp
unset OPENALEX_API_KEYPrompt-based deployment with Codex or Claude Code
Modern coding agents can inspect the repository, install the package, configure their own MCP client, and verify the result. Copy the prompt below into Codex or Claude Code as-is.
Install the OpenAlex MCP server from https://github.com/DeyangLiu123/openalex-mcp.git for me.
Requirements:
1. Inspect the repository README and pyproject.toml before making changes.
2. Check whether Git and uv are installed. If uv is missing, explain the official installation command for my operating system and ask before running a network installer.
3. Use Python 3.12 or newer. Prefer `uvx --from git+https://github.com/DeyangLiu123/openalex-mcp.git openalex-mcp`; use a local clone only if my MCP client requires an absolute executable path.
4. Run the offline test suite if you clone the repository. Do not run live tests or paid download tests without asking me first.
5. Ask me for my OPENALEX_API_KEY only when you are ready to configure the MCP server. Store it only in my local MCP client environment configuration. Never write it into the repository, a tracked file, a chat response, or a log.
6. Configure this current Codex or Claude Code installation with a user-scoped stdio MCP server named `openalex`.
7. Leave OPENALEX_DOWNLOAD_ROOT unset unless I explicitly opt in to file downloads. If I opt in, set it to an absolute directory I approve.
8. Verify that the MCP server is registered and that its nine tools are visible. Then call get_api_quota and perform one low-cost search for three KV cache papers.
9. Report the installed command, configuration location, verification results, and any API cost incurred. Do not create a GitHub release or modify the OpenAlex MCP source repository.Review an agent's proposed commands before approving them, especially network installers, client configuration changes, and any command that includes credentials.
5. Verify the setup
Start a fresh MCP client session after registration and try:
Use OpenAlex to find three papers about KV cache. Then show the key references of the most-cited result.You can also ask the client to call get_api_quota. A successful result should show the daily budget, usage, remaining quota, reset time, current endpoint prices, and the cost accumulated by this MCP server process.
Configuration reference
Environment variable | Default | Description |
| unset | Required. The server can start without it, but tools return setup guidance |
|
| OpenAlex API base URL |
|
| OpenAlex content API base URL |
|
| HTTP timeout in seconds |
| unset | File downloads are disabled until this absolute root is configured |
|
| Maximum downloaded file size, 200 MiB by default |
To enable content downloads, add an approved absolute directory to the MCP process environment:
{
"OPENALEX_API_KEY": "your-api-key",
"OPENALEX_DOWNLOAD_ROOT": "/absolute/path/to/papers"
}The download_work_pdf tool may write only to this root or its descendants.
Usage notes
Work search
search_works defaults to the more precise title-and-abstract search and supports:
from_date/to_date, or a publicationyearvenue_ids,author_ids, andtopic_idsoa_only,arxiv_only, andmin_citationssort=relevance|date|citationspage or cursor pagination
OpenAlex often creates a separate source record for each conference year. To inspect one edition, first call resolve_entity(entity_type="source", query="INFOCOM 2026"), verify the canonical name and year, and pass the resulting source ID to search_works(venue_ids=[...]). Prefer ISSN resolution for journals.
Identifiers and ambiguity
OpenAlex W-ids and URLs are resolved directly.
DOI and arXiv inputs use singleton lookups. A missing identifier is reported as not indexed instead of being silently replaced by fuzzy text search.
A title is accepted automatically only when its normalized form matches exactly. Otherwise the server returns up to three candidates for the caller to choose from.
Lists are deduplicated by normalized DOI first and normalized title second.
Candidate harvesting
harvest_candidates is intended for literature alerts and recommendation workflows. Base queries use {"line": "label", "q": "query"} objects and may be combined with a temporary topic, venue IDs, citation seeds, authors, and JSONL exclusion files.
The output reports route counts, per-query coverage, adaptive backfill pages, exclusions, deduplication, RRF scores, and API cost. The free OpenAlex plan does not expose from_created_date, so the default strategy combines a recent window with an older publication-date backfill. It reduces losses from delayed indexing but cannot guarantee retrieval beyond the configured window or maximum page count.
API cost and rate limits
Use get_api_quota as the runtime source of truth. OpenAlex quotas and endpoint prices may change. Typical current prices are:
singleton lookup: free
filter-only list request: about
$0.0001search request: about
$0.001OpenAlex content download: about
$0.01
Every tool reports the cost of that call and the total accumulated by the current MCP process. A target file that already exists with overwrite=false is detected before the billable content request.
The client distinguishes invalid credentials, paid-plan restrictions, daily quota exhaustion, and short rate limits. It retries bounded network/server failures and short Retry-After responses. It also serializes unusually broad Boolean searches when required by the OpenAlex API.
Download security boundary
download_work_pdf cannot write files until OPENALEX_DOWNLOAD_ROOT is explicitly configured. When enabled:
dest_dirmust resolve to the configured root or one of its descendants.filenamemust be a basename; absolute paths,.., slashes, backslashes, and NUL are rejected.Both
Content-Lengthand the actual streamed byte count are bounded.PDF content must begin with
%PDF; XML must have an XML declaration or a<TEIroot.A random temporary file is validated and then atomically installed.
Failures remove only the temporary file and do not overwrite an existing target.
URLs containing the API key are redacted from logs and errors.
Testing
Offline tests do not access the network:
uv run pytest -m "not live"Live smoke tests make low-cost OpenAlex requests:
OPENALEX_API_KEY=... uv run pytest -m "live and not paid"The free-plan canary is opt-in because it intentionally checks that a Premium filter is rejected:
OPENALEX_API_KEY=... OPENALEX_EXPECT_FREE_PLAN=1 \
uv run pytest tests/test_live.py::test_created_date_filter_remains_plan_gatedThe content-download smoke test incurs an additional charge and requires a second explicit opt-in:
OPENALEX_API_KEY=... OPENALEX_RUN_PAID_TESTS=1 \
uv run pytest -m "live and paid"Live tests monitor API syntax, quota payloads, title-and-abstract compatibility, Boolean queries, harvesting, and optional content downloads. Online API behavior and data can change, so these canaries require ongoing maintenance.
Troubleshooting
uv or uvx is not found
Restart the terminal after installation and run uv --version. If it is still missing, follow the PATH instructions printed by the uv installer or consult the official installation guide linked above.
The server starts but prints nothing
That is normal for a stdio MCP server waiting for a client. Verify it through your MCP client's server list instead of running it interactively.
Tools report a missing API key
Set OPENALEX_API_KEY in the environment of the MCP server entry, not only in an unrelated terminal session. Restart the MCP client after changing its configuration.
HTTP 401, 403, or 429
401: the key is missing or invalid.403, or a plan-related message: the requested feature requires a higher OpenAlex plan.Other
429: the daily quota is exhausted or a request-rate limit was reached. Checkget_api_quotaandRetry-After.
Downloads are rejected
Set OPENALEX_DOWNLOAD_ROOT to an absolute directory and keep dest_dir inside it. Downloads remain intentionally disabled when the variable is absent.
Known compatibility note
OpenAlex has deprecated filter=field.search: but currently provides no equivalent non-deprecated title-and-abstract-only query. The top-level search= parameter also searches full text and can be substantially noisier. This project isolates the current behavior in text_search_filter() and monitors it with a live canary so a future migration is limited to one compatibility layer.
Contributing and security
See CONTRIBUTING.md for development requirements and SECURITY.md for vulnerability reporting.
License
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DeyangLiu123/openalex-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server