Skip to main content
Glama
bbutlerau

paper-search-mcp

by bbutlerau

paper-search-mcp

An MCP server exposing scholarly literature search across CrossRef, ERIC, Semantic Scholar, OpenAlex, and Unpaywall.

Tools

  • search_crossref(query, rows=20, filter=None, sort=None) — search CrossRef (all scholarly disciplines)

  • get_crossref_work(doi) — full CrossRef metadata for one DOI

  • search_eric(query, rows=20, start=0) — search ERIC (education research literature)

  • get_eric_record(eric_id) — full ERIC metadata for one record (e.g. "EJ1234567")

  • search_semantic_scholar(query, rows=20) — search Semantic Scholar (all disciplines)

  • get_semantic_scholar_paper(paper_id) — full metadata by S2 ID, or "DOI:...", "ARXIV:...", "PMID:...", "CorpusID:..."

  • search_openalex(query, rows=20, filter=None, sort=None) — search OpenAlex (all disciplines)

  • get_openalex_work(work_id) — full metadata by OpenAlex ID (e.g. "W2741809807") or DOI

  • get_open_access_pdf(doi) — find a legal open-access PDF for a DOI via Unpaywall

All of these APIs are free and none require an account, except as noted below.

Related MCP server: paper-search

Configuration

Both environment variables are optional:

Variable

Effect

PAPER_SEARCH_CONTACT_EMAIL

Sent as a mailto: contact to get "polite pool" (faster, more reliable) treatment from CrossRef and OpenAlex. Required by get_open_access_pdf — Unpaywall rejects requests with no email, and the tool raises a clear error if it is unset.

SEMANTIC_SCHOLAR_API_KEY

A personal Semantic Scholar key. Without one, S2 calls fall back to the shared unauthenticated rate limit, which is slower and more prone to 429s. Everything else works unaffected.

A key enforces 1 request/sec cumulative across all S2 endpoints, so all Semantic Scholar calls go through a shared throttle (min 1.05s between requests) plus retry-with-backoff on 429 — the limit is enforced somewhat burstily in practice.

Install

Requires Python 3.10+.

Installs into an isolated environment and puts a paper-search-mcp command on your PATH.

macOS / Linux

brew install pipx          # or: python3 -m pip install --user pipx
pipx ensurepath            # restart your terminal afterwards
pipx install git+https://github.com/bbutlerau/paper-search-mcp.git
which paper-search-mcp

Windows (PowerShell)

py -m pip install --user pipx
py -m pipx ensurepath      # restart PowerShell afterwards
pipx install git+https://github.com/bbutlerau/paper-search-mcp.git
where.exe paper-search-mcp

Editable installs (pipx install -e <path>) are worth it if you plan to edit the code or track updates: a git pull takes effect immediately with no reinstall.

Option B — virtualenv from a clone

macOS / Linux

git clone https://github.com/bbutlerau/paper-search-mcp.git
cd paper-search-mcp
python3 -m venv .venv
.venv/bin/pip install -e .

Windows (PowerShell)

git clone https://github.com/bbutlerau/paper-search-mcp.git
cd paper-search-mcp
py -m venv .venv
.venv\Scripts\pip install -e .

Verify the install

The server takes no command-line arguments; it is configured entirely through the environment variables above. To confirm it starts, run it and check that it waits rather than exiting:

paper-search-mcp                 # pipx
.venv/bin/paper-search-mcp       # venv (macOS/Linux)
.venv\Scripts\paper-search-mcp   # venv (Windows)

It will sit silently waiting for MCP traffic on stdin — that is correct behaviour, not a hang. Press Ctrl-C to exit. An immediate traceback (rather than silence) means the install is broken.

Connect to Claude Code

claude mcp add paper-search -s user \
  -e PAPER_SEARCH_CONTACT_EMAIL=you@example.com \
  -e SEMANTIC_SCHOLAR_API_KEY=<your-key> \
  -- paper-search-mcp

With a venv instead of pipx, replace the final paper-search-mcp with the absolute path to the launcher inside .venv.

Verify with claude mcp list — it should report paper-search: ✓ Connected. Remove with claude mcp remove paper-search -s user.

Connect to Claude Desktop

Edit the config file:

  • macOS~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows%APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "paper-search": {
      "command": "/absolute/path/to/paper-search-mcp",
      "env": {
        "PAPER_SEARCH_CONTACT_EMAIL": "you@example.com",
        "SEMANTIC_SCHOLAR_API_KEY": "your-key-here"
      }
    }
  }
}

Getting command exactly right matters:

  • Use an absolute path. Claude Desktop does not inherit your shell PATH, so a bare paper-search-mcp will not resolve.

  • No trailing slash. A path ending in / is treated as a directory and the spawn fails with Failed to spawn process: Not a directory.

  • With pipx, prefer the shim at ~/.local/bin/paper-search-mcp over the venv-internal path (~/.local/pipx/venvs/…/bin/…). The shim is what pipx maintains, and it survives a pipx reinstall.

  • On Windows, use escaped backslashes and the .exe suffix, e.g. "C:\\Users\\you\\.local\\bin\\paper-search-mcp.exe".

Confirm the path resolves to a file before restarting:

ls -l ~/.local/bin/paper-search-mcp        # macOS / Linux
where.exe paper-search-mcp                 # Windows

Then fully quit and reopen Claude Desktop (on macOS ⌘Q — closing the window is not enough).

Troubleshooting

If the tools do not appear, check the log:

  • macOS~/Library/Logs/Claude/mcp-server-paper-search.log

  • Windows%APPDATA%\Claude\logs\mcp-server-paper-search.log

Two things about that log are easy to misread:

  • Server started and connected successfully is printed optimistically, before the process is confirmed running. A Failed to spawn process line immediately after it is the real result.

  • An IncompleteFieldDefinitionWarning about a lifespan field from pydantic_settings is harmless. It comes from a dependency on Python 3.14, is written to stderr, and does not touch the JSON-RPC stream on stdout. Its absence alongside a spawn failure is a useful signal: it means Python never started, so the problem is the command path.

Also make sure no stale paper-search entry exists under Settings → Connectors; a duplicate there conflicts with the config-file entry.

Remote / networked use

server.py also supports streamable-HTTP transport, for running the server on one machine and connecting from another. Running it locally over stdio is simpler and faster, so prefer that unless you specifically need a shared instance.

Variable

Meaning

MCP_TRANSPORT

stdio (default) or streamable-http

MCP_HOST / MCP_PORT

Bind address (default 127.0.0.1:8000)

MCP_ALLOWED_HOSTS

Comma-separated Host headers to accept (DNS-rebinding protection); required when behind a reverse proxy

MCP_PUBLIC_URL

Externally-visible base URL. When set, enables OAuth 2.1. Leave unset for local stdio use.

MCP_AUTH_STATE_PATH

Where to persist OAuth clients/tokens (default: oauth-state.json beside server.py)

Bind to loopback and put a reverse proxy in front of it for TLS. Never expose it directly to the public internet — there is no real authentication here (see below).

About the OAuth layer

Claude Desktop's custom-connector flow always attempts OAuth Dynamic Client Registration against remote MCP servers, even ones advertising no auth, and there is currently no "no auth" option in the UI (upstream: anthropics/claude-ai-mcp#457, #402). Without an OAuth implementation, adding the connector fails with "Couldn't register with … sign-in service."

auth_provider.py exists to satisfy that flow. TrustedNetworkOAuthProvider is a minimal OAuth 2.1 authorization server that auto-approves every client with no login step. It is a protocol formality, not access control — it assumes the server is already reachable only from a trusted network. It supports Dynamic Client Registration, issues long-lived (1 year) bearer tokens, and persists clients and tokens to MCP_AUTH_STATE_PATH so a restart does not invalidate cached client registrations.

This entire layer is inert unless MCP_PUBLIC_URL is set, so local stdio installs are unaffected by it.

A 401 from the /mcp endpoint when you have no token is the expected response, and indicates the server is running correctly.

Development

pip install -e .

The dependency on mcp is pinned to <2: version 2.x restructured mcp.server.fastmcp and this server targets the 1.x API.

License

MIT — see LICENSE.

Available Tools

9 tools
get_crossref_workA

Fetch full CrossRef metadata for a single work by its DOI.

Args: doi: The DOI of the work, e.g. "10.1037/0003-066x.59.1.29".

ParametersJSON Schema
NameRequiredDescriptionDefault
doiYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of disclosing behavior. It states the operation is a fetch, implying read-only, but does not elaborate on potential errors (e.g., invalid DOI), network dependencies, or whether the DOI should be URL-encoded. The behavior is straightforward, but the description adds no context beyond the basic action, earning a mid-range score.

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 lines, front-loaded with the action and scope, and includes an example for the parameter. Every word earns its place; there is no wasted text. It is a model of conciseness.

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 tool's simplicity (one parameter, no annotations, no nested objects) and the presence of an output schema, the description is complete enough. It tells the agent exactly what the tool does and provides an example DOI, leaving no significant gaps for invocation. The 'full metadata' phrase sets appropriate expectations for the return value, and the output schema covers details.

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?

The only parameter 'doi' has zero schema description coverage, but the description provides an example ('10.1037/0003-066x.59.1.29'), which adds format guidance and clarifies expectations. This efficiently compensates for the missing schema detail, though it does not fully explain DOI formatting rules or validation.

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 'Fetch full CrossRef metadata for a single work by its DOI' – a specific verb ('Fetch'), a clear resource ('CrossRef metadata'), and scope ('single work by DOI'). This distinguishes it from sibling tools like search_crossref, which is a search operation, and other get_ tools for different providers.

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 implies use when you have a DOI for a specific work and need its complete metadata. It does not explicitly mention alternatives or when not to use, but given the sibling search_crossref tool, the context is clear enough for an agent to infer appropriate usage. No exclusion criteria are provided, but none are critical for this simple case.

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

get_eric_recordA

Fetch full ERIC metadata for a single record by its ERIC ID (e.g. "EJ1234567").

Args: eric_id: The ERIC document identifier, e.g. "EJ1234567" or "ED123456".

ParametersJSON Schema
NameRequiredDescriptionDefault
eric_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. The verb 'Fetch' indicates a read-only operation, but no additional behavioral context (e.g., auth requirements, error handling, rate limits) is disclosed. This is adequate for a simple lookup but not richer than the bare minimum.

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 extremely concise: a single sentence defining the action and a short Args block. Every element serves a purpose with no redundancy or 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?

For a simple get-by-ID tool, the description covers the purpose, the parameter, and an example. An output schema is present, so return values are documented separately. No further context is necessary for reasonable use.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates by explaining the parameter in the Args section: 'The ERIC document identifier, e.g. "EJ1234567" or "ED123456".' It provides clear meaning and examples, adding significant value beyond the schema's minimal type/title.

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 ('Fetch') and a specific resource ('full ERIC metadata') with a clear scope ('a single record by its ERIC ID'). It also gives an example ID format, making it easy to distinguish from sibling search tools like search_eric or crossref getters.

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 implies this is the tool to use when you have a known ERIC ID and need the full metadata for that single record. It does not explicitly name alternatives, but the context (single record vs. search) is clear enough for an agent to decide.

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

get_open_access_pdfA

Find a legal open-access PDF for a DOI via Unpaywall.

Use this after CrossRef/OpenAlex/ERIC turns up a paper you want to read in full. Returns the best OA copy plus any alternatives, or is_open_access false when no free version is known.

Args: doi: The DOI of the work, e.g. "10.1371/journal.pone.0000308".

ParametersJSON Schema
NameRequiredDescriptionDefault
doiYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description discloses key behavior: it returns the best OA copy plus alternatives, and sets is_open_access false when no free version is known. This goes beyond a generic 'find' statement, though it could mention more about potential errors or output format.

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 well-structured and concise: purpose, usage, and argument definition in three tight sections. Every sentence earns its place with no 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?

For a single-parameter tool with an output schema, the description sufficiently covers the workflow and return behavior. It explains what the tool does, when to use it, and what to expect in the response.

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

Parameters5/5

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

The only parameter, doi, is described in detail with a concrete example, fully compensating for the absent schema description (0% coverage). This adds real meaning beyond the schema's bare type declaration.

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 opens with a specific verb and resource: 'Find a legal open-access PDF for a DOI via Unpaywall.' This clearly distinguishes it from sibling search/get tools for other databases.

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?

It explicitly advises 'Use this after CrossRef/OpenAlex/ERIC turns up a paper you want to read in full,' giving a clear when-to-use context. It does not name alternatives or exclusions, but the tool is unique among siblings for OA PDF retrieval.

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

get_openalex_workA

Fetch full OpenAlex metadata for a single work.

Args: work_id: An OpenAlex work ID (e.g. "W2741809807"), a bare DOI (e.g. "10.1037/0003-066x.59.1.29"), or a "doi:10.xxxx" string.

ParametersJSON Schema
NameRequiredDescriptionDefault
work_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It explicitly says 'Fetch' indicating a read-only action, and elaborates on accepted ID formats (OpenAlex ID, bare DOI, doi: prefix). This is useful behavioral context beyond the bare schema, though it does not cover error handling or rate 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 sentences: the first states the tool's purpose, the second details the parameter. Every sentence is necessary, and the structure is front-loaded. No wasted words.

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 a single parameter, a clear purpose, and an existing output schema (which defines return values), the description is complete. It covers the essential what and how without needing extra elaboration.

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

Parameters5/5

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

The input schema only names 'work_id' with no description, so the schema coverage is 0%. The description compensates fully by explaining the three accepted formats with examples, providing essential meaning for the 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 clearly states 'Fetch full OpenAlex metadata for a single work' with a specific verb, resource (OpenAlex), and scope (single work). It distinguishes itself from siblings like search_openalex (searching) and get_crossref_work (Crossref-specific).

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 is implied: you use this tool when you need full metadata for a specific OpenAlex work. However, it does not explicitly mention alternatives or when not to use it, such as when to prefer get_crossref_work or search_openalex.

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

get_semantic_scholar_paperA

Fetch full Semantic Scholar metadata for a single paper.

Args: paper_id: A Semantic Scholar paper ID, or a prefixed external ID such as "DOI:10.1037/0003-066x.59.1.29", "ARXIV:2106.15928", "PMID:12345678", or "CorpusID:215416146".

ParametersJSON Schema
NameRequiredDescriptionDefault
paper_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses accepted ID formats and indicates a read-only fetch, but does not detail behavior on invalid IDs, rate limits, or authentication requirements. The term 'full' is vague about what fields are returned, though an output schema exists.

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 front-loaded with a clear one-sentence purpose, followed by a compact args section. Every sentence is necessary and there is no redundancy. It is appropriately concise for a simple single-parameter tool.

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 single-ID lookup, the description covers the essential use case and input format. The presence of an output schema means return values need not be described. It is missing explicit usage comparison, but overall it is complete enough for the tool's low complexity.

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

Parameters5/5

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

The input schema only provides the parameter name and type ('string'). The description compensates fully by explaining the structure of paper_id, including examples of prefixed external IDs (DOI, ARXIV, PMID, CorpusID). This is comprehensive and adds all necessary semantic 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 clearly states a specific action ('Fetch full Semantic Scholar metadata') on a specific resource ('a single paper'). This distinguishes it from search_semantic_scholar, which presumably searches for papers, and other get_* sibling tools for different databases.

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 usage when you have a paper ID, but does not explicitly state when to use this tool over alternatives or mention any exclusions. It provides acceptance criteria for the paper_id but no comparative guidance.

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

search_crossrefA

Search CrossRef for scholarly works (articles, books, proceedings, etc.).

Args: query: Free-text search query (e.g. title/author/topic keywords). rows: Max number of results to return (1-100). filter: Optional CrossRef filter string, e.g. "from-pub-date:2020-01-01,type:journal-article". sort: Optional sort field: relevance, published, is-referenced-by-count, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
sortNo
queryYes
filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the search action and lists parameters; it does not describe output format, pagination behavior, access constraints, or any side effects. The term 'Search' implies read-only but adds little beyond that.

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 compact and well-structured: a clear one-sentence purpose followed by an Args list. Every line adds value, with no repetition of schema details or filler. The most important information (what the tool does) is front-loaded.

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?

Given the tool has an output schema (per context signals) and the params are well described, the description is adequate for constructing basic calls. However, it lacks usage guidance and behavioral context (e.g., when to prefer this tool, result characteristics). For a moderately complex search tool with no annotations, this is a minimal but not comprehensive description.

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

Parameters5/5

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

The schema has 0% coverage for parameter descriptions, but the description compensates fully. It explains every parameter: query (free-text keywords), rows (range 1-100), filter (CrossRef filter string with example), and sort (allowed fields with examples). This adds substantial meaning beyond the raw schema types/defaults.

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 clearly states the tool's verb and resource: 'Search CrossRef for scholarly works (articles, books, proceedings, etc.)'. This distinguishes it from sibling search tools (e.g., search_eric, search_openalex) by naming the specific database.

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?

No explicit guidance on when to use this tool vs alternatives. It does not mention when Crossref is preferred over ERIC, Semantic Scholar, or OpenAlex, nor does it state any exclusions or context for choosing this tool.

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

search_ericA

Search the ERIC database (education research literature) via api.ies.ed.gov.

Args: query: Free-text search query, ERIC's Solr-style syntax is supported (e.g. 'title:"reading comprehension" AND author:Smith'). rows: Max number of results to return (1-100). start: Offset for pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
queryYes
startNo

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?

With no annotations, the description carries the burden of disclosing behavior. It adds context about Solr-style query syntax (with a concrete example), row limits (1-100), and start-offset pagination. It omits information on authentication, rate limits, or error behavior, but provides meaningful operational detail.

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 brief, front-loaded with the tool's purpose, and uses a compact Args block. Every sentence adds value; no redundant or filler content.

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 combination of a clear purpose, parameter semantics, and an output schema covers most of what an agent needs. It does not explicitly relate to sibling tools like get_eric_record for retrieving full records, but the core search behavior is adequately described for its moderate complexity.

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

Parameters5/5

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

All three parameters receive semantic explanations beyond the schema: query is described as a free-text Solr-style search with an example, rows is given a numeric range, and start is defined as a pagination offset. Schema coverage is 0%, so this description-level coverage is essential and well done.

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 opening verb 'Search' plus the specific resource 'ERIC database (education research literature)' clearly identifies the tool's function. The reference to api.ies.ed.gov and the explicit database name distinguish it from sibling search tools for other scholarly databases.

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 establishes a clear use case: searching ERIC for education research literature, which implies when to select this tool over Crossref, Semantic Scholar, or OpenAlex. It does not explicitly name alternatives or provide exclusion criteria, so it misses the top bar for explicit guidance.

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

search_openalexA

Search OpenAlex for scholarly works across all disciplines.

Args: query: Free-text search query (title/topic/author keywords). rows: Max number of results to return (1-100). filter: Optional OpenAlex filter string, e.g. "from_publication_date:2020-01-01,type:article". sort: Optional sort string, e.g. "cited_by_count:desc" or "publication_date:desc".

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
sortNo
queryYes
filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavioral traits itself. It only states 'Search' and documents parameters, but does not mention behavior such as API key requirements, pagination, rate limits, error handling, or whether results are read-only. The examples imply functionality but do not explicitly disclose side effects or state changes.

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

Conciseness4/5

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

The description is well-structured with an Args list, each parameter explained concisely and with practical examples. It is slightly lengthy but every sentence contributes value, and the examples aid understanding without unnecessary verbosity.

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?

Given the tool's simplicity (a search with four parameters) and the presence of an output schema, the description covers the essential invocation details. All parameters are documented with examples, and the output schema presumably describes return values. The main gap is the lack of usage context relative to sibling tools, but this is not critical for basic invocation.

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

Parameters5/5

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

The schema has zero description coverage, leaving the description as the sole source of parameter meaning. It thoroughly explains each parameter (query, rows, filter, sort) with examples and defaults, going far beyond the bare schema. This fully compensates for the lack of schema descriptions.

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 starts with a clear, specific statement: 'Search OpenAlex for scholarly works across all disciplines.' This identifies the action (search), resource (OpenAlex), and scope (scholarly works), and inherently distinguishes it from sibling search tools like search_crossref and search_eric which target different databases.

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 provides detailed parameter-level guidance (e.g., filter and sort examples) but offers no direction on when to use this tool versus alternative search tools like search_semantic_scholar or search_crossref. There are no explicit when/when-not conditions or named alternatives.

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

search_semantic_scholarA

Search Semantic Scholar for papers across all disciplines.

Args: query: Free-text search query (title/topic/author keywords). rows: Max number of results to return (1-100).

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden for behavioral disclosure. It only says 'Search Semantic Scholar for papers' and does not mention result formats, pagination, rate limits, or any limitations. This is a significant gap for a tool with no annotation support.

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 concise and well-structured, with a single leading sentence followed by a clear Args list. Every sentence adds value, and the parameter details are directly relevant. There is no waste or redundancy.

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?

Given the tool's simplicity (2 params, output schema exists), the description covers the core purpose and parameters adequately. The output schema handles return value documentation, so the description doesn't need to explain that. However, the lack of behavioral context and usage guidelines slightly hinders full contextual completeness.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates by explaining both parameters: 'query' as free-text search (title/topic/author keywords) and 'rows' as max results with a 1-100 range. This adds meaning not present in the schema, which only lists types and defaults.

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 clearly states the tool's function: 'Search Semantic Scholar for papers across all disciplines.' It uses a specific verb+resource pattern and the scope ('across all disciplines') distinguishes it from other search tools in the sibling list, such as search_crossref or search_eric, and from get_semantic_scholar_paper which retrieves a single paper.

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 usage for general academic paper searches in Semantic Scholar, but it does not explicitly state when to use this tool versus alternatives or provide exclusions. The lack of explicit guidance keeps it at 'implied usage' rather than a 4 or 5.

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

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct combination of provider and action (search vs. get), with provider names clearly separating them. The only non-pair tool, get_open_access_pdf, has a unique purpose not covered by the others.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern: search_<provider> and get_<provider>_<record> for all four services. The single outlier, get_open_access_pdf, still uses the 'get_' verb style, maintaining overall predictability.

Tool Count5/5

Nine tools is well-scoped for a paper-search server, covering four major scholarly databases plus an OA PDF finder. Every tool provides a distinct, necessary capability without redundancy.

Completeness5/5

The domain is read-only scholarly search/retrieval, and the set covers the full lifecycle: search any provider, fetch detailed records, and obtain accessible full text. No obvious gaps or dead ends for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

  • A
    license
    A
    quality
    D
    maintenance
    Enables retrieval of academic paper metadata, PDFs, full text, citations, and references by title via Semantic Scholar, arXiv, and other sources.
    6
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching, downloading, and exporting academic papers from 20+ scholarly sources including arXiv, PubMed, and Semantic Scholar. Supports multi-source concurrent search, citation network tracing, and export to CSV, RIS, and BibTeX.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Aggregates academic paper search from multiple databases (OpenAlex, Semantic Scholar, etc.) with PDF storage and full-text search capabilities.
    1

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/bbutlerau/paper-search-mcp'

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