openalex-mcp
The OpenAlex MCP server connects AI agents and CLI tools to OpenAlex, the world's largest free scholarly database (250M+ works, 300M+ authors, 100K+ institutions), enabling search, retrieval, and aggregation of academic data.
Core capabilities:
Search scholarly works: Find articles, books, datasets, preprints, and theses by keyword, filtered by year, type, institution, open-access status, citation count, and more.
Retrieve full work metadata: Get complete details for a single work via OpenAlex ID, DOI, PubMed ID, or MAG ID — including abstract, authors, affiliations, topics, and open-access URL.
Search and profile authors: Find researchers by name, institution, ORCID, or citation metrics; retrieve detailed profiles with h-index, i10-index, total citations, top topics, and year-by-year citation counts.
Search and explore institutions: Find universities and research organizations by name or country; get full details including ROR ID, country, type, h-index, and top research topics.
Discover publication sources: Search journals, conference proceedings, and repositories by name, OA status, or type; retrieve metadata including ISSN, publisher, DOAJ listing, and citation metrics.
Aggregate and analyze works: Group and count works by fields like publication year, type, language, or country to generate distribution statistics and trends.
Access filter reference: Consult a built-in filter syntax guide (
openalex://filter-reference) for constructing advanced queries.CLI support: Perform all operations directly from the terminal with JSON output support.
Broad AI client compatibility: Integrates with Claude Desktop, Claude Code, Cursor, VS Code Copilot, Windsurf, Zed, and other MCP-compatible clients.
Allows retrieval of scholarly work metadata by DOI using the OpenAlex API.
Enables GitHub Copilot to search and retrieve scholarly metadata from OpenAlex.
Allows searching for authors by ORCID identifier using the OpenAlex API.
Allows retrieval of scholarly work metadata by PubMed ID using the OpenAlex API.
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-mcpfind papers about CRISPR gene editing from 2024"
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 Server & CLI
Connects any MCP-compatible AI agent — or your terminal — to OpenAlex: the world's largest free and open scholarly database with 250+ million works, 300+ million authors, 100,000+ institutions, and billions of citation links.
Works with: Claude Desktop · Claude Code · Cursor · VS Code Copilot · Windsurf · Zed · any MCP client — or standalone via the openalex CLI
No paywall. No institutional access required. CC0 licensed data.
Quickstart (2 minutes)
1. Get your free API key at openalex.org/settings/api — takes 30 seconds
2. Install the server
pip install openalex-mcp3. Add to your AI agent — copy your client's config from Configuration below.
Related MCP server: OpenAlex Author Disambiguation MCP Server
Prerequisites
Python 3.11+
python --version # needs 3.11 or higher
# Install if missing: https://python.org/downloadsuv (recommended)
# Windows
winget install astral-sh.uv
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | shNo uv? Use
pip install openalex-mcpinstead, then replaceuvx openalex-mcpin configs with the path fromwhere openalex-mcp(Windows) orwhich openalex-mcp(macOS/Linux).
Installation Options
Option A — uvx (recommended)
uvx openalex-mcp # install and run — uv handles everything
uv tool upgrade openalex-mcp # upgrade laterOption B — pip
pip install openalex-mcp
which openalex-mcp # macOS/Linux → /usr/local/bin/openalex-mcp
where openalex-mcp # Windows → C:\Users\YOU\AppData\...Option C — From source
git clone https://github.com/JOSETRA44/openalex-mcp.git
cd openalex-mcp
uv sync
cp .env.example .env # edit .env with your key
uv run openalex-mcp # run directlyEnvironment Variables
Variable | Required | Default | Description |
| Recommended | — | Free API key from openalex.org/settings/api |
| Alt to key | — | Your email — uses the "polite pool" (slower but free, no key) |
| No |
| Response cache duration in seconds (0 = disabled) |
| No |
| Retries on rate-limit errors |
| No |
|
|
Either
OPENALEX_API_KEYorOPENALEX_EMAILis required. The API key gives 10× more daily quota ($1/day free).
Configuration by Client
Replace YOUR_API_KEY_HERE with your actual key in all configs below.
Claude Desktop
Config file:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"openalex": {
"command": "uvx",
"args": ["openalex-mcp"],
"env": {
"OPENALEX_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Restart Claude Desktop after saving. You'll see a hammer icon (🔨) confirming tools are loaded.
Claude Code (CLI)
Add to your project's .mcp.json in the repo root:
{
"mcpServers": {
"openalex": {
"command": "uvx",
"args": ["openalex-mcp"],
"env": {
"OPENALEX_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Or from source (local development):
{
"mcpServers": {
"openalex": {
"command": "uv",
"args": [
"--directory", "/absolute/path/to/openalex-mcp",
"run", "openalex-mcp"
],
"env": {
"OPENALEX_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Verify with /mcp in the Claude Code prompt — you should see openalex with 9 tools.
Cursor
Config file: .cursor/mcp.json in project root, or globally:
Windows:
%APPDATA%\Cursor\User\globalStorage\cursor.mcp\mcp.jsonmacOS:
~/Library/Application Support/Cursor/User/globalStorage/cursor.mcp/mcp.json
{
"mcpServers": {
"openalex": {
"command": "uvx",
"args": ["openalex-mcp"],
"env": {
"OPENALEX_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Settings → Features → MCP → toggle on → reload window.
VS Code + GitHub Copilot
Create .vscode/mcp.json in your workspace:
{
"servers": {
"openalex": {
"type": "stdio",
"command": "uvx",
"args": ["openalex-mcp"],
"env": {
"OPENALEX_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Ctrl+Shift+P → GitHub Copilot: Configure MCP
Windsurf
Config file:
Windows:
%APPDATA%\Codeium\windsurf\mcp_config.jsonmacOS:
~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"openalex": {
"command": "uvx",
"args": ["openalex-mcp"],
"env": {
"OPENALEX_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}Zed
Edit ~/.config/zed/settings.json:
{
"context_servers": {
"openalex": {
"command": {
"path": "uvx",
"args": ["openalex-mcp"],
"env": {
"OPENALEX_API_KEY": "YOUR_API_KEY_HERE"
}
}
}
}
}Continue.dev
Edit .continue/config.yaml:
mcpServers:
- name: openalex
command: uvx
args:
- openalex-mcp
env:
OPENALEX_API_KEY: "YOUR_API_KEY_HERE"Any other MCP client (generic stdio)
command: uvx
args: ["openalex-mcp"]
env: OPENALEX_API_KEY=YOUR_API_KEY_HEREAutomated Setup Script
Auto-detect your installed clients and configure them:
# Interactive
python setup_mcp.py
# Non-interactive — configure all detected clients
python setup_mcp.py --key YOUR_API_KEY_HERE --yes
# Preview without writing files
python setup_mcp.py --key YOUR_API_KEY_HERE --dry-run --yes
# Show detected clients only
python setup_mcp.py --listThe script backs up existing config files before modifying them.
Available Tools (9 total)
Tool | What it does |
| Keyword + filter search over 250M+ scholarly works |
| Full metadata for one work (by OpenAlex ID, DOI, or PubMed ID) |
| Find researchers by name, institution, ORCID, or metrics |
| Author profile: h-index, i10-index, citations by year, topics |
| Search universities and research organizations by name/country |
| Institution details: country, type, h-index, top topics |
| Search journals, conferences, and repositories |
| Source details: ISSN, publisher, OA status, h-index |
| Group/count works by year, type, country, topic, etc. |
MCP Resource
Resource | Contents |
| Complete filter syntax: 100+ field codes, operators, and examples |
CLI (Command Line)
This package also installs an openalex command — a standalone terminal client for OpenAlex, no MCP client required. Every subcommand calls the exact same tool functions the MCP server uses (src/openalex_mcp/tools/*.py), so results match 1:1.
Install
pip install openalex-mcp # or: uv tool install openalex-mcp
openalex --help # confirm it's on your PATHFrom source: uv sync installs the openalex script into .venv/Scripts (Windows) or .venv/bin (macOS/Linux).
Commands
Command | Mirrors | What it does |
|
| Search works |
|
| Full work metadata |
|
| Search researchers |
|
| Full author profile |
|
| Search institutions |
|
| Full institution details |
|
| Search journals/venues |
|
| Full source details |
|
| Group/count works |
|
| Print the filter syntax reference |
Run openalex <command> --help for that command's flags. Every command supports --json for raw machine-readable output (pipe into jq, save to a file, script it), and --api-key / --email to override .env for a single call.
openalex search-works "federated learning privacy" -f "publication_year:>2021,type:article" -s "cited_by_count:desc"
openalex get-work 10.1038/s41586-021-03819-2
openalex search-authors "Geoffrey Hinton"
openalex aggregate-works publication_year -f "institutions.id:I865918315" --json | jq '.groups[0]'Auth and settings come from the same environment variables as the MCP server — see Environment Variables.
Example Queries
# Find recent papers on a topic
openalex_search_works(
query="federated learning privacy",
filters="publication_year:>2021,type:article",
sort="cited_by_count:desc"
)
# Get full paper details by DOI
openalex_get_work("10.1038/s41586-021-03819-2")
# Find an author and get their profile
openalex_search_authors(query="Geoffrey Hinton")
openalex_get_author("A2208157607")
# Find an institution, then see its recent output
openalex_search_institutions(query="UNAM", country_code="MX")
openalex_search_works(
filters="institutions.id:I865918315,publication_year:>2020",
sort="cited_by_count:desc"
)
# Annual publication trend for a topic
openalex_aggregate_works(
group_by="publication_year",
filters="type:article",
query="machine learning"
)
# Find open-access journals in a field
openalex_search_sources(
query="bioinformatics",
is_oa=True,
source_type="journal"
)Filter Quick Reference
Pattern | Example |
Year range |
|
Newer than |
|
Work type |
|
Open access only |
|
Highly cited |
|
By institution |
|
By country |
|
In a journal |
|
By language |
|
Papers citing a work |
|
Has DOI |
|
Has abstract |
|
For the full filter reference, read the openalex://filter-reference resource or see developers.openalex.org.
Rate Limits & Quotas
Auth method | Daily budget | Calls/second |
API key (free) | $1.00/day | ~10 |
Email (polite pool) | $0.10/day | ~3 |
No auth | $0.10/day | ~1 |
The server tracks rate-limit headers and automatically sleeps when the quota is low.
Action costs (free tier):
Action | Daily allowance |
Get single entity (by ID/DOI) | Unlimited |
List + filter | 10,000 calls / 1M results |
Full-text search | 1,000 calls / 100K results |
Tip: Use
openalex_get_work(unlimited) for single-record lookups rather than search.
Verify It's Working
MCP Inspector (interactive UI)
npx @modelcontextprotocol/inspector uvx openalex-mcpOpen the URL, click Connect, List Tools — you should see all 9 tools.
Quick smoke test
echo "" | OPENALEX_API_KEY=your_key uvx openalex-mcp
# Should start without errors, then exit when stdin closesRun unit tests (source install)
uv sync --group dev
uv run pytest tests/ -v
# Expected: 28 passedTroubleshooting
"Configuration error: Set OPENALEX_API_KEY..."
Add OPENALEX_API_KEY to your MCP client's env block. Get a free key at openalex.org/settings/api.
"command not found: uvx"
Install uv: docs.astral.sh/uv
401 error
API key is invalid. Regenerate at openalex.org/settings/api.
404 error on a work/author/institution
The identifier may be wrong. Try looking up the entity with a search tool first, then use the returned openalex_id.
"uvx openalex-mcp" slow on first run
uv is downloading and caching the package — subsequent starts are instant (~0.2s).
Tools appear but return empty results
Broaden your query: remove publication_year filters, or try query= instead of filters=.
vs. Scopus / Web of Science
OpenAlex | Scopus | Web of Science | |
Cost | Free | Subscription | Subscription |
Coverage | 250M+ works | 90M works | 170M works |
Open data | CC0 | Proprietary | Proprietary |
API quota | 10K calls/day | 20K/week | Limited |
Non-English | Excellent | Good | Fair |
Full-text links | Yes | Partial | Partial |
Project Structure
openalex-mcp/
├── src/openalex_mcp/
│ ├── server.py # FastMCP entry point (registers tools as MCP tools)
│ ├── cli.py # `openalex` CLI entry point (calls the same tool functions)
│ ├── cli_output.py # Human-readable table/detail rendering for the CLI
│ ├── config.py # Env var configuration (pydantic-settings)
│ ├── client.py # Async HTTP client + TTL cache + rate limiting
│ ├── exceptions.py # Error hierarchy
│ ├── formatters.py # Raw OpenAlex JSON → clean AI-friendly dicts
│ ├── tools/ # Core tool functions, shared by server.py and cli.py
│ └── resources/ # openalex://filter-reference static resource
├── openalex-researcher/ # Agent skill
│ ├── SKILL.md
│ └── references/ # Filter syntax, workflows, output reference
├── tests/ # Unit tests (28 cases, no network required)
├── setup_mcp.py # Automated config installer
├── .env.example # Environment variable template
└── pyproject.toml # Package definitionLicense
MIT — see LICENSE
Data from OpenAlex is CC0 (public domain).
Available Tools
9 toolsopenalex_aggregate_worksA
Aggregate (count/group) works by a field to get distribution statistics. Useful for: annual publication trends, breakdown by type or language, top institutions by output, open-access percentage, topic distribution. Returns a list of {key, label, count} groups sorted by count descending. Combine with 'filters' to scope the analysis (same syntax as openalex_search_works).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| filters | No | ||
| group_by | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the return format (list of {key, label, count} groups sorted descending) and mentions combining with filters. It lacks details on rate limits, authentication, or potential performance issues, but covers core behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only 3 sentences, front-loaded with the core action, and each sentence adds value. No unnecessary information or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 parameters and no output schema. The description explains return format and usage, but lacks detailed parameter constraints, especially for group_by valid values. The cross-reference to another tool's syntax helps but is not fully self-contained, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema coverage, the description must compensate. It mentions group_by but does not explain valid values (e.g., field names). Query and filters are described only by cross-reference to another tool's syntax, which is helpful but not self-contained. The schema provides no further clues, so some ambiguity remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aggregates works by a field to get distribution statistics, with specific examples (annual trends, type breakdown, top institutions, open-access percentage, topic distribution). It effectively distinguishes from sibling tools like openalex_search_works, which is for searching individual works.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases and mentions combining with 'filters' referencing openalex_search_works syntax. It implies when to use aggregate vs search but does not explicitly state when not to use it or alternative tools for other tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openalex_get_authorA
Retrieve the full profile for a researcher: name, ORCID, h-index, i10-index, works count, total citations, last known affiliation, top research topics, and year-by-year citation counts. Accepts an OpenAlex Author ID (A-number) or ORCID.
| Name | Required | Description | Default |
|---|---|---|---|
| author_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It details the return fields but does not disclose any behavioral aspects such as rate limits, data freshness, or read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences with no extra words, effectively communicating purpose and acceptance criteria.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists key return fields, making the tool's output clear. However, it could mention response structure or pagination if applicable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists, and the description adds meaning by specifying the format (OpenAlex Author ID or ORCID), compensating for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a full researcher profile with specific fields listed, and it specifies the accepted identifiers (OpenAlex Author ID or ORCID), distinguishing it from sibling tools like search_authors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when a full profile is needed) and contrasts with search tools by listing detailed fields, but does not explicitly state when not to use it or provide alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openalex_get_institutionA
Retrieve full details for a university or research institution: name, country, type, ROR ID, total works, total citations, h-index, homepage URL, and top research topics. Accepts an OpenAlex Institution ID (I-number) or ROR ID.
| Name | Required | Description | Default |
|---|---|---|---|
| institution_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It correctly implies a read-only operation with 'Retrieve' and lists output fields, but omits any operational traits such as rate limits, authentication needs, or potential error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence lists key fields, the second clarifies input format. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (single required parameter, no output schema), the description is complete. It covers the purpose, input format, and output content, making it sufficient for an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the parameter, but the description explains that it accepts I-numbers or ROR IDs, adding crucial context that the schema alone does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Retrieve' and resource 'full details for a university or research institution' clearly specify the tool's function. Listing specific fields (name, country, type, etc.) differentiates it from sibling tools like openalex_search_institutions, which are for searching rather than fetching by ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that it accepts an OpenAlex Institution ID or ROR ID, providing clear usage context. However, it does not explicitly mention when to avoid this tool or suggest alternatives (e.g., use openalex_search_institutions when you don't have an ID).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openalex_get_sourceA
Get full details for a journal, conference, or repository: ISSN, publisher, open-access status, DOAJ listing, total works, citations, h-index, i10-index, and top research topics. Accepts OpenAlex Source ID (S-number) or ISSN.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It implies a read operation but does not explicitly state idempotency, rate limits, or error behavior. Adequate but could be more explicit about safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that front-loads the purpose and lists key fields. Could be slightly more structured but is efficient and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 0% schema coverage, the description provides a good overview of input format and returned data fields. Covers essential information for tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds significant meaning: specifies that source_id can be an S-number or ISSN, providing format guidance beyond the raw schema type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get full details for a journal, conference, or repository' and lists specific fields like ISSN, publisher, open-access status. Distinguishes from sibling tools like search_sources by focusing on retrieving details by ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions acceptable input formats: 'Accepts OpenAlex Source ID (S-number) or ISSN.' Implies usage context but does not explicitly state when not to use or compare to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openalex_get_workA
Retrieve full metadata for a single scholarly work. Accepts an OpenAlex ID (W-number), DOI (bare '10.x/y' or full URL), PubMed ID ('pmid:12345678'), or MAG ID. Returns title, abstract, all authors with affiliations, topics, citation count, open-access URL, referenced works count, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It lists return fields (title, abstract, authors, etc.) and accepted identifier formats, but does not mention error handling, rate limits, or authentication needs. For a simple read operation, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of three sentences, front-loaded with the action and purpose. Every sentence adds value, and there is no redundant or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one required parameter, no output schema), the description is complete. It explains what the tool does, what input is needed, and what the output contains, with no missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides no description for the 'identifier' parameter (0% coverage). The description compensates by explaining that the parameter accepts OpenAlex ID (W-number), DOI, PubMed ID, or MAG ID, and describes formats for DOIs and PubMed IDs. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves full metadata for a single scholarly work, and specifies accepted identifier types (OpenAlex ID, DOI, PubMed ID, MAG ID). This distinguishes it from sibling tools like 'openalex_search_works' which are for searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly provides usage context by listing identifier formats and stating the tool is for a single work. It does not explicitly mention when not to use or alternative tools, but the list of sibling tools provides that context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openalex_search_authorsA
Search researchers/authors in OpenAlex by name or filter by institution, ORCID, citation count, etc. Returns OpenAlex ID, name, ORCID, h-index, works count, cited-by count, and current affiliation. Use openalex_get_author for full profile.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | cited_by_count:desc | |
| query | No | ||
| filters | No | ||
| per_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries burden. It mentions returns fields but omits pagination, rate limits, or safety (though read-only is implied). Adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with main action and purpose, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 params with no schema descriptions and no output schema, description covers core purpose but fails to detail filter syntax or pagination. Adequate for basic use but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must explain parameters. It names query and filters but lacks syntax/format details. Only high-level meaning added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches authors by name or filters, returns specific fields, and distinguishes from openalex_get_author for full profiles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use search vs get_author, and lists returned fields for informed selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openalex_search_institutionsA
Search universities, research institutes, hospitals, and other organizations in OpenAlex. Returns the OpenAlex institution ID (needed for work filters), ROR ID, name, country, type, and publication/citation counts. Use the returned 'openalex_id' in openalex_search_works filter: 'institutions.id:{id}'
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| per_page | No | ||
| country_code | No | ||
| institution_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes the tool as a search (read-only) returning specific fields and how to use the ID. It does not mention destructive behavior, rate limits, or authentication, but these are not critical for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose, and contains no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool searches, what it returns, and how to use the result. Without an output schema, it explains return values well. It could mention that country_code and institution_type are filters, but overall it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the four parameters (query, per_page, country_code, institution_type). It only mentions returned fields, not how to use the inputs. The description adds no value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'universities, research institutes, hospitals, and other organizations in OpenAlex.' It lists returned fields and how to use the OpenAlex ID, distinguishing it from sibling tools that search works, authors, or sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use the returned openalex_id in openalex_search_works filter'. It implies this tool is for finding institution IDs before filtering works, but does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openalex_search_sourcesA
Search journals, conference proceedings, repositories, and other publication venues in OpenAlex. Returns ISSN, publisher, open-access status, h-index, works count, and citation count. Use the returned 'openalex_id' in work filters: 'primary_location.source.id:{id}'
| Name | Required | Description | Default |
|---|---|---|---|
| is_oa | No | ||
| query | No | ||
| filters | No | ||
| per_page | No | ||
| source_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It states it searches and returns data, implying a read-only operation, but does not disclose pagination behavior, rate limits, or sorting. The description adds moderate context beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy: first sentence defines purpose and output, second provides a practical usage hint. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description lists key return fields and provides a usage tip. However, it is incomplete regarding parameter details and does not describe the structure of results (e.g., pagination info). Still, for a search tool, it covers the most critical context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the five parameters (query, filters, is_oa, per_page, source_type). The agent must infer functionality from parameter names alone, which is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb (Search), resource (journals, conference proceedings, etc.), and lists specific return fields (ISSN, publisher, open-access status, etc.). This distinguishes it from sibling tools that search works, authors, or institutions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on using the returned 'openalex_id' in work filters, which is a direct usage hint. However, it does not contrast with alternatives like openalex_get_source for when to search versus retrieve a specific source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openalex_search_worksA
Search scholarly works (articles, books, datasets, preprints, theses) in OpenAlex. Use 'query' for full-text keyword search. Use 'filters' to narrow by year, type, institution, open access, citation count, etc. Filter syntax: 'publication_year:2020-2024,type:article,open_access.is_oa:true'. Sort options: 'cited_by_count:desc', 'publication_date:desc', 'relevance_score:desc'. Returns title, DOI, authors, year, citation count, open-access status.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| sort | No | relevance_score:desc | |
| query | No | ||
| filters | No | ||
| per_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the burden. It mentions read operations (search, filter, sort) and return fields, but lacks explicit disclosure of pagination behavior, rate limits, or non-destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each adding unique value: purpose, usage hints, filter syntax, sort options, and return fields. No redundant or missing elements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and no annotations, the description adequately covers purpose, usage, and return fields. Lacks detail on pagination limits or error handling, but sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by explaining the purpose of 'query', 'filters', and 'sort' parameters, including example filter syntax. It implicitly explains 'page' and 'per_page' via context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches scholarly works, listing specific types (articles, books, datasets, preprints, theses). It distinguishes from sibling tools like openalex_get_work (single work retrieval) and openalex_aggregate_works (aggregation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use 'query' and 'filters' parameters, provides filter syntax and sort options. While it does not mention when not to use it or directly compare to alternatives, the context from sibling names implies differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a unique purpose: search vs get vs aggregate for each entity type (works, authors, institutions, sources). There is no overlap or ambiguity.
All tools follow the exact pattern 'openalex_<verb>_<entity>' with verbs like get, search, aggregate. Consistent and predictable.
9 tools is well-scoped for a scholarly database API, covering search and retrieval for the main entities plus aggregation.
Covers all core entities with search and get operations. Minor gaps like no dedicated topic/concept search, but the main workflows are well-supported.
Maintenance
Related MCP Connectors
Academic literature search, retrieval, and private library management on top of OpenAlex.
Access the OpenAlex academic research catalog — 270M+ publications.
Scholarly search: OpenAlex, Crossref, arXiv, OpenCitations and PubMed in one endpoint.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables academic research through the OpenAlex API, allowing users to search for papers, authors, and institutions, retrieve citations, and fetch full-text content when available. Perfect for building intelligent research assistants that can explore academic literature and related works.87MIT
- AlicenseAqualityFmaintenanceEnables streamlined academic research and author disambiguation by providing AI agents with optimized access to the OpenAlex.org API. It supports searching for authors, resolving institutional affiliations, and retrieving scholarly works with detailed citation metrics.854MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching and retrieving scholarly works, authors, institutions, and citation networks from the OpenAlex catalog via natural language.34ISC
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search and analyze OpenAlex scholarly database for OSINT research, including works, authors, institutions, funding, citations, and collaboration networks.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/JOSETRA44/openalex-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server