Skip to main content
Glama
ckgerteis

openalex-mcp

by ckgerteis

openalex-mcp

MCP stdio server for the OpenAlex API (global scholarly graph).

Data via OpenAlex, OurResearch.

What this is for

OpenAlex maps roughly 240 million works and the relations between them, and this is the instrument for questions about circulation rather than content.

Ask who cites a given work and from which countries and institutions; assemble an author's full output across the name variants that defeat a title search; find which institutions cluster around a problem; identify the journals and repositories where a field actually publishes. Open-access status and PDF links come back with each record.

For a historian, the useful move is tracing whether an argument travelled — out of its language, out of its discipline, out of the decade that produced it — which is a question a bibliographic catalogue cannot answer and a citation graph can.

Related MCP server: Crossref Academic MCP Server

Install

Three routes. All three give you the same server; pick by how much you want to see of it.

One click: the Claude Desktop bundle

Download the .mcpb for your platform (Windows x64, Apple Silicon, Linux x64; Intel Macs use the pip route below) from the latest release and open it; Claude Desktop installs it. Claude Desktop asks for OpenAlex API key and Contact email (legacy mailto) and a receipts folder at install time; the key is stored in the OS keychain. The bundle carries every library it needs, but not Python itself: a Python 3.10+ interpreter must be on the machine (python on Windows, python3 on macOS and Linux).

From GitHub, pinned to a release

pip install "git+https://github.com/ckgerteis/openalex-mcp@v2.0.1"
# or, without an environment of your own:
uvx --from "git+https://github.com/ckgerteis/openalex-mcp@v2.0.1" openalex-mcp

installs the openalex-mcp console script and openalex-mcp-ledger. The tag is the thing to cite; @main gets whatever is current. Then register it in Claude Desktop (below), or let install.py do that.

The whole family

pip install "git+https://github.com/ckgerteis/bibliograph-mcp@v1.0.0" && bibliograph install

installs all six servers and registers them together — one receipts folder, credentials asked for once. See bibliograph-mcp. From a checkout of this repository, python install.py does the same for this server alone, python install.py --all for the six, on Windows, macOS and Linux; install.ps1 remains for Windows.

From source

python3 -m venv .venv
.venv/bin/pip install .

On Windows:

py -3.11 -m venv .venv
.venv\Scripts\pip.exe install .

Or straight from the repository, without cloning:

uvx --from "git+https://github.com/ckgerteis/openalex-mcp" openalex-mcp

Verify the install:

.venv/bin/python -c "import openalex_mcp; print(openalex_mcp.__version__)"

That fails loudly if the package or one of its vendored modules is missing. Do not use openalex-mcp --help as the check: unknown arguments are ignored, the server starts, reads end-of-input and exits 0, so it reports success whatever the state of the code.

Installing more than this one

Six independent packages. None imports another, none depends on another, and each installs and answers on its own — pip install . in this directory is a complete install of this server and nothing else.

They do share three things: a response envelope, a query ledger, and — if you run more than one — a receipts folder. install.ps1 is vendored byte-identical into all six and handles that on Windows; install.py is its cross-platform port. Both install this server by default, because cloning one repository is not a request for five more.

.\install.ps1                        # this server
.\install.ps1 -All                   # all six
.\install.ps1 -Servers openalex,cinii      # a chosen subset

Whatever subset you name is registered against one receipts folder, asked for once. The script prefers a sibling checkout to the network, carries across credentials already registered rather than asking again, leaves servers it was not asked about alone, and stops rather than guessing where the servers already registered disagree about the folder or the session slug. It also asserts that ledger.py and mediation.py are byte-identical across everything it installed, so two envelope versions cannot end up in one environment unnoticed.

Tools

Tool

Purpose

oa_search_works

Works (articles, books, datasets, theses) by term, with year, author, institution, source and open-access filters

oa_get_work

One work by OpenAlex ID, DOI or PMID

oa_search_authors

Authors by name, optionally within an institution

oa_get_author

One author by OpenAlex ID or ORCID

oa_search_sources

Journals, repositories and conferences by name

oa_search_institutions

Institutions by name, optionally by country

oa_cited_by

Works citing a given work, most-cited first

oa_author_works

An author's works, with year filter and sort

All eight return one typed JSON response envelope — see Response format. (Releases before 2.0.0 returned formatted markdown text; that is a breaking change, not a formatting preference.)

Response format

Every tool returns one JSON response envelope, built by mediation.py and defined in response-schema.json. Schema version 2.3.0. The same module and schema are vendored byte-identically across the server family, so an envelope from one server can be read by a consumer written for another.

The envelope reports how the search was made, not only what it found:

  • searched_for — on search operations, the term actually sent, its detected script, and the matching mode, hoisted to the top of the envelope so a relaying client cannot drop it. Lookups (oa_get_work, oa_get_author) and identifier filters (oa_cited_by, oa_author_works) omit it: they were handed an identifier and chose no term.

  • queryinput_terms as supplied, normalized as sent, and the detected script. The credential never enters params.

  • matching_modefull_text_stemmed for term searches: OpenAlex matches title, abstract and indexed full text with stemming, so result.total is a loose count and a high breadth is expected. filter_exact for identifier filters; identifier_lookup for single-record fetches.

  • result.breadthnone, narrow (1–50), broad (51–1000), very_broad (>1000).

  • items[] — the family's item shape. OpenAlex's own language field decides which typed title slot a work's title lands in (ja, ko; Latin-script titles in any other language go to en). A CJK title OpenAlex marks neither ja nor ko, or a han-only title with no language, is left untyped rather than guessed; extra.title always carries the text and extra.language the code. OpenAlex identifiers, citation counts, open-access flags, topics and the reconstructed abstract sit in extra; the DOI (bare, without the https://doi.org/ prefix) in ids.doi; the landing page in ids.url_en; an open-access copy in ids.fulltext_url. Author, source and institution records use record_type author, source and institution with their metrics in extra.

  • receipt — an ISO 8601 timestamp, a SHA-256 over the normalised query and its parameters, and the DOIs returned. Works without a DOI are identified only in extra.openalex_id, which the receipt's result_ids does not yet read.

  • attribution — the required credit line, in every response.

Diagnostic codes

Typed and closed. A diagnostic is never prose the client has to parse.

Code

Level

Meaning

OK

info

Records returned; nothing to flag.

ZERO_RESULTS

warning

No records for this term and filter set. Non-English titles are indexed as the publisher supplied them, so an English rendering of a Japanese or Korean title may not match.

NOT_FOUND

warning

A lookup by identifier answered 404.

RATE_LIMITED

error

OpenAlex answered 429. Since 2026 OpenAlex meters keyless access by a per-IP daily budget as well as per-second rate; a key raises both.

API_ERROR

error

The API answered, and answered with an error (or with a 200 that was not JSON).

TRANSPORT_ERROR

error

The request did not complete. Kept distinct from API_ERROR because a failed search has an unknown result and must never be written up as an absence.

RECEIPT_NOT_DEPOSITED

info

The response was not written to the query ledger, because no receipts destination is configured.

RECEIPT_WRITE_FAILED

warning

A receipts destination is set, the write was attempted, and it did not land.

Configuration

OPENALEX_API_KEY=your_openalex_api_key
OPENALEX_EMAIL=your_email        # legacy; see below

OpenAlex retired the polite pool on 13 February 2026 and replaced it with an API key regime; the mailto parameter it depended on is now ignored. OPENALEX_API_KEY is the access route. OPENALEX_EMAIL is kept only as a fallback for anyone running against a mirror that still honours mailto, and sends nothing OpenAlex reads.

Claude Desktop

Add an entry to %APPDATA%\Claude\claude_desktop_config.json under mcpServers, pointing at the console script in the environment you installed into. On macOS or Linux use the absolute path to .venv/bin/openalex-mcp.

{
  "mcpServers": {
    "openalex": {
      "command": "C:\\path\\to\\.venv\\Scripts\\openalex-mcp.exe",
      "env": {
        "OPENALEX_API_KEY": "your_openalex_api_key"
      }
    }
  }
}

Changed in 2.0.0. Tools return the JSON envelope rather than markdown; any consumer that parsed the 1.x text must be rewritten.

Changed in 1.1.0. Earlier versions were registered by path — "command": "…\\python.exe", "args": ["…\\server.py"]. That entry will not start this version, because server.py is now a module inside a package rather than a script beside its imports. Replace it with the console script above.

Restart Claude Desktop. The eight tools should appear under "openalex" in the tool list.

Query receipts

Every envelope can be deposited to an append-only, hash-chained JSONL log by openalex_mcp.ledger. Since 2.0.0 the envelope says whether that happened: RECEIPT_NOT_DEPOSITED when no destination is set, RECEIPT_WRITE_FAILED when one is set and the write did not land. It is off unless MCP_RECEIPT_DIR (or the legacy MCP_RECEIPT_LOG) is set, and a logging failure is swallowed rather than raised — a search matters more than the record of it. Secrets are redacted before a line is composed.

MCP_RECEIPT_DIR=C:\path\to\receipts        # a folder, not a file
MCP_RECEIPT_SESSION=project-or-article-slug
MCP_RECEIPT_STRICT=1                         # optional: make logging failure raise
MCP_RECEIPT_LOG=C:\path\to\receipts.jsonl  # legacy single file; ignored when _DIR is set

A folder, and one file per server. MCP_RECEIPT_DIR points at a directory and each server writes its own <server>.jsonl inside it. That is not tidiness. Appending is read-the-last-hash-then-write, and the lock around it is a threading lock, which holds within one process and not between several — six servers are six processes, and two answering at the same moment will both read the same predecessor and both claim it. Measured, not theorised: six processes writing 150 lines to one file produced fourteen forks. MCP_RECEIPT_LOG still works and is still correct for a single server; it is the wrong shape for a family.

install.ps1 sets this up for all six and writes a README into the folder.

Verify one chain, or the whole folder:

openalex-mcp-ledger verify      receipts/openalex.jsonl
openalex-mcp-ledger verify-dir  receipts
openalex-mcp-ledger manifest    receipts        # writes receipts/manifest.json

verify exits non-zero on failure and says which kind it found: a fork (concurrent writers — a configuration fault, and every line is still there), a missing line, a reordering, or tamper (a line that does not hash to its own content). Only the last is a claim about honesty, and reporting them alike would invite a reader to mistake one for the other. The manifest is the object to cite: one description of the whole deposit — per-file line counts, first and last timestamps, terminal hashes, and combined totals by server, script and session.

Tests

.venv/bin/pip install pytest jsonschema
.venv/bin/python -m pytest -q tests

The suite runs against recorded OpenAlex responses under tests/fixtures/ (captured 2026-09-04) and validates every envelope against response-schema.json; it needs no network and no key. RUN_LIVE=1 adds one request to the live API.

MCP SDK compatibility

Runs on both mcp 1.x and 2.x. Version 2.0.0 of the SDK removed mcp.server.fastmcp; this server imports FastMCP where it exists and falls back to MCPServer where it does not.

License

MIT © 2026 Christopher Gerteis. Covers the server code only; it grants no rights over OpenAlex, OurResearch data, which remains governed by that provider's terms.

Author

Dr Christopher Gerteis, SOAS University of London.

Available Tools

8 tools
oa_author_worksB
Read-onlyIdempotent

Get all works by a specific author. Supports year filtering and sorting by citation count or publication date.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive behavior, lowering the bar. The description adds that year filtering and sorting by citation count or publication date are supported. However, it says 'all works' but does not disclose that results are paginated via page/per_page, which is a notable behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, under 20 words, with the core action front-loaded. Every clause adds useful information, and there is no wasted text or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations and an output schema, the description is not fully burdened. It covers the main intent and filtering/sorting capabilities, but misses pagination behavior and required parameter emphasis. An agent could call it correctly after inspecting the schema, but the description alone is only partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It partially explains year filtering and sorting, but omits the required author_id format and the pagination parameters (page, per_page). For a tool with six underlying parameters, this is insufficient compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action with a clear resource: 'Get all works by a specific author.' This distinguishes it from siblings like oa_get_work (single work) and oa_get_author (author profile), though it does not explicitly name alternatives or contrast with oa_search_works.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: use when you need works by a specific author. However, there is no explicit guidance about when to prefer this tool over oa_search_works or oa_get_work, and no exclusions or alternative routing are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oa_cited_byA
Read-onlyIdempotent

Get works that cite a specific work. Forward citation traversal for exploring a paper's impact and downstream research.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior. The description adds useful context about traversing forward citations and impact exploration, but does not disclose additional behavioral details such as pagination behavior or result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences with zero filler. The core action is front-loaded, and the use-case sentence adds meaningful context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple citation-lookup tool, the description, schema constraints, and output schema provide sufficient context. Annotations cover safety and idempotence, so the tool is readily invocable by an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain accepted identifier formats or pagination inputs; it only refers to 'a specific work.' Schema coverage is reported at 0%, so the description needed to compensate but did not, despite the schema having a brief work_id note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb-resource relationship: 'Get works that cite a specific work.' 'Forward citation traversal' further distinguishes it from related work-focused tools like oa_get_work and oa_search_works.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly frames when to use the tool: 'for exploring a paper's impact and downstream research.' It does not enumerate alternatives or when-not-to-use conditions, but the intended use case is clear and distinguishable from siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oa_get_authorA
Read-onlyIdempotent

Look up a specific author by OpenAlex ID or ORCID. Returns full profile with affiliations, work count, citation count, and h-index.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds useful context about what the response contains (affiliations, work count, citation count, h-index), but it does not disclose potential edge cases like ORCID format ambiguity or network/rate-limit behavior. This is acceptable given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the operation, the identifier forms, and the key return fields without any redundant filler. Every phrase contributes to correct selection and invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple by-ID lookup with a nested output schema and safety annotations, the description is largely complete. It tells the agent what to pass and what to expect. A minor gap is that the ORCID format is not specified (e.g., bare ID vs. URL), but this is unlikely to prevent correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter author_id is documented in the input schema as an OpenAlex author ID or ORCID, and the description restates this identifier requirement. The description adds no significant new semantic detail beyond the schema, but the schema itself is sufficient for this simple parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Look up'), a specific resource ('a specific author'), and the two accepted identifier forms (OpenAlex ID or ORCID). It also names the returned profile contents, which clearly distinguishes this from the sibling search tools like oa_search_authors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool should be used when the agent already has a concrete OpenAlex ID or ORCID, as opposed to using oa_search_authors for query-based discovery. However, it does not explicitly state when not to use it or name alternative tools, so the routing guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oa_get_workA
Read-onlyIdempotent

Look up a specific work by its OpenAlex ID, DOI, or PMID. Returns full metadata including abstract, citation counts, open access links, and topics.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds return-content information but not additional behavioral traits such as auth needs or rate limits; with annotations present, this is acceptable but not especially rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the lookup action and immediately lists accepted identifiers and key metadata returns. Every clause earns its place, and there is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single required parameter, rich annotations, the presence of an output schema, and a clear statement of what the tool returns, nothing needed for correct invocation is missing. The description is complete for this simple lookup tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the tool description must carry the parameter meaning. It does by specifying that work_id can be an OpenAlex ID, DOI URL, or PMID. Although the schema repeats this, the description ensures the agent knows the accepted identifier formats without opening the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Look up a specific work') and names the exact resource and accepted identifiers (OpenAlex ID, DOI, or PMID). It clearly implies a targeted retrieval operation rather than a search, distinguishing it from sibling tools like oa_search_works.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys that this tool is for looking up one known work by identifier, which is the right context for using it over siblings that search works or look up authors. It does not explicitly state 'use this when you have an ID, not a text query,' but the identifier-focused wording provides clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oa_search_authorsA
Read-onlyIdempotent

Search OpenAlex for authors by name. Returns disambiguated author profiles with affiliations, work counts, citation counts, and h-index.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, and non-destructive nature of the tool. The description adds useful behavioral context beyond annotations by explaining that results are disambiguated author profiles and enumerating the key data fields returned, such as work counts and h-index.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler: the action is front-loaded, and the second sentence adds relevant return-value detail. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search tool with annotations and an output schema present, this description covers the essential purpose and result semantics. It could be slightly more complete by noting pagination and the optional institution filter, but those details are already represented in the input schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description only reinforces the query parameter by saying 'by name' and does not explain page, per_page, or institution_id. With schema description coverage reported at 0%, the description fails to compensate for the lack of parameter documentation, even though the parameter names themselves are somewhat self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Search OpenAlex for authors by name.' It also states what the search returns — disambiguated author profiles with affiliations, work counts, citation counts, and h-index — which clearly distinguishes it from sibling tools like oa_search_works or oa_get_author.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when to use the tool: when searching for authors by name. It does not explicitly name alternatives or exclusion conditions (e.g., use oa_get_author when a known author ID exists), so it stops short of full routing guidance, but the intended usage is not merely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oa_search_institutionsA
Read-onlyIdempotent

Search OpenAlex for institutions (universities, research organizations). Useful for finding institution IDs to use as filters in work searches.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, open-world, idempotent, and non-destructive behavior, so the description does not need to repeat that. It adds context about the OpenAlex data source and intended role, but does not disclose additional behaviors like result shaping or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two focused sentences with no filler. The primary action is front-loaded and the second sentence adds a concrete use case, making every word earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is straightforward, has an output schema, and the annotations cover the safety profile, so the description does not need to document return values. It covers source, scope, and purpose; the only minor gap is the absence of explicit sibling tool routing for edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description was expected to compensate for parameter-level guidance, but it only broadly frames the query as institution names. It does not explain country_code, page, or per_page semantics, leaving the agent to rely on the schema alone for parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Search OpenAlex for institutions') with concrete examples ('universities, research organizations') and clarifies the downstream purpose (finding institution IDs for work-search filters). This clearly distinguishes it from sibling search tools for works, authors, and sources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly identifies when to use the tool—when institution IDs are needed as filters in work searches—without naming sibling alternatives or stating when not to use it. This gives clear context but stops short of explicit exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oa_search_sourcesA
Read-onlyIdempotent

Search OpenAlex for sources: journals, repositories, and conferences. Returns work counts, citation data, and open access status.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, open-world, idempotent, non-destructive behavior. The description adds value beyond them by revealing that results include work counts, citation data, and open access status. It does not mention fuzzy matching or pagination quirks, but the output schema and annotations cover much of the operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first states the action and scope, the second states the return value. The most useful information is front-loaded, and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with rich annotations and an output schema, the description plus structured fields provide enough to invoke it correctly: resource scope, query requirement, optional type filter, pagination bounds, and expected output categories. It could add explicit alternative routing, but is not incomplete enough to mislead.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description itself provides no direct parameter guidance for query, type, page, or per_page. However, the schema documents the required query and the type filter values, and the description's list of source types maps naturally onto valid type options. Given the reported 0% schema coverage, the description only partially compensates, though the nested schema keeps this usable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names an explicit action ('Search OpenAlex'), a concrete resource type ('sources'), and enumerates the resource's members ('journals, repositories, and conferences'). It also states the key returned metrics, making it clear this is about source-level scholarly metadata rather than 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Search OpenAlex for sources' and the enumeration of source types imply when the tool is appropriate. However, the description does not explicitly say when not to use it or name alternatives like oa_search_works for individual articles, leaving routing to inference rather than explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

oa_search_worksA
Read-onlyIdempotent

Search OpenAlex for scholarly works (articles, books, datasets, theses) across 240M+ records. Supports filtering by year, author, institution, source/journal, and open access status. Returns titles, authors, abstracts, citation counts, DOIs, and topics.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish safety: readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false. The description adds context by indicating scale (240M+ records), supported filter dimensions, and the kinds of fields returned. It does not mention pagination or sorting behavior, but those are documented in the schema and this is a read-only search, so no additional risk disclosure is needed. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no fluff: purpose/scope, filter capabilities, and return fields. The most identifying information is front-loaded, and every sentence adds information not already obvious from the tool name alone.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with a rich input schema and an output schema, the description covers purpose, scope, filters, and expected result fields. It does not explain pagination, sort defaults, or when to prefer sibling tools, but those are either in the schema or penalized in the usage dimension. Overall it gives an agent enough orientation to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's nested WorkSearchInput provides descriptions for every parameter, including query scope, sort_by options, per_page range, and ID examples for author_id. The description adds only a high-level summary of filter dimensions (year, author, institution, source/journal, open access). Since the schema carries the semantic weight, a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Search OpenAlex') and a specific resource ('scholarly works'), then narrows scope with content types (articles, books, datasets, theses) and a record count. The resource name 'works' differentiates it from sibling tools that search authors, sources, or institutions, though it does not name those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the general tool for finding scholarly works, but it gives no explicit guidance about when to choose it over siblings like oa_get_work, oa_author_works, or oa_cited_by. There are no conditions, exclusions, or alternative routing hints, so an agent must infer usage from the tool name and sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 8 tool updatesv1.1.0
    • First observedoa_author_works
    • First observedoa_cited_by
    • First observedoa_get_author
    • First observedoa_get_work
    • First observedoa_search_authors
    • First observedoa_search_institutions
    • First observedoa_search_sources
    • First observedoa_search_works

TDQS

A3.9/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: search vs. get for works/authors, search for sources/institutions, plus two relationship queries (cited_by and author_works). No two tools overlap in purpose, and the descriptions make the boundaries clear.

Naming Consistency4/5

Most tools follow a consistent oa_<verb>_<entity> pattern (oa_search_works, oa_get_work, oa_search_authors, oa_get_author, oa_search_sources, oa_search_institutions). However, oa_cited_by and oa_author_works deviate from this pattern, using a noun-preposition and noun-noun structure respectively, though they remain interpretable.

Tool Count5/5

Eight tools is well-scoped for a read-only academic search API. The set covers the primary entity types (works, authors, sources, institutions) and two citation/author relationship queries without unnecessary bloat or excessive minimalism.

Completeness4/5

The surface is nearly complete for read-only exploration: search and get for works/authors, search for sources/institutions, plus citation and author-works traversal. Minor gaps include lack of get-by-ID tools for sources and institutions, and no concept/related-entities endpoints, but these are not core to the apparent purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/ckgerteis/openalex-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server