Skip to main content
Glama
ckgerteis

semantic-scholar-mcp

by ckgerteis

semantic-scholar-mcp

DOI

MCP stdio server for the Semantic Scholar Academic Graph API.

Data via Semantic Scholar, Allen Institute for AI.

What this is for

The Semantic Scholar Academic Graph, reached through citation traversal in both directions: the works a paper cites, and the works that went on to cite it. Look up as many as five hundred papers in a single call when a bibliography needs resolving.

The recommendation tools answer a question searching cannot: hand it two or three papers you already trust and it proposes adjacent work, which is how you enter a literature whose vocabulary you have not yet learned.

Records carry abstracts, influential-citation counts, open-access links, and machine-generated one-line summaries useful for triage. Where openalex-mcp is strongest on institutions and geography, this is strongest on the shape of a citation network.

Related MCP server: semanticscholar-mcp

What the receipts are for

A search you cannot re-run is a claim you cannot check. When a footnote rests on a database query, say that no article in this index uses a term before a certain year, the reader is asked to take the search on trust: which term, in which script, on what date, against which index and which version of it, and how far down the results the author went. Ordinary searching leaves none of that behind. This server leaves all of it. Every query-answering tool returns its envelope through the ledger, which appends one line to an append-only file: the term actually sent and its script, how the source matched it, how many records existed and how many came back, the diagnostics, the tool and its parameters, the server version, a timestamp, and the hash of the previous line. The hash makes the file a chain: a line cannot be altered, removed or reordered afterwards without the verifier saying so.

What that gives a researcher:

  • A citable search. Name the receipt in the footnote (session slug, server, date, line hash) and a reader can see exactly what was asked and run it again against the same version.

  • Negative findings that carry weight. "Not found" is evidence only if the search that produced it is on record, with its term, its script and its breadth.

  • A method section that writes itself. semantic-scholar-mcp-ledger manifest <folder> summarises every query a project made, by server, script and session: the disclosure a journal, a data-availability statement or a research-integrity review asks for.

  • A record of AI-mediated research. When a model chose the term, the receipt shows the term it chose and what came back, which is the thing to disclose about work done with an assistant.

  • Nothing interpreted. The receipt is the source's own answer with credentials removed. The server does not summarise, rank or paraphrase, so the record is of the source, not of the tool.

Receipts are off until you name a folder (MCP_RECEIPT_DIR); each server then writes its own <server>.jsonl inside it, and MCP_RECEIPT_SESSION stamps a project or article slug on every line so one folder can serve several projects. semantic-scholar-mcp-ledger verify-dir <folder> checks the chains. The mechanics, the variables and what the envelope says when nothing is deposited are in the receipts section below.

Install

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

Python. The pip and source routes need Python 3.10 or later; 3.10, 3.12, 3.13 and 3.14 are tested in CI on Windows, macOS and Linux. The Claude Desktop bundle uses whichever of these is already installed, and has uv download one only if none is.

Getting Python

Every route needs Python 3.10 to 3.14. The Claude Desktop bundle uses one already on the machine and has uv download one only if none is; the other routes also need the venv module, which the official installers include.

  • Windows. Download the 64-bit installer from python.org/downloads and run it; tick "Add python.exe to PATH" on the first screen. Afterwards py --version (the launcher the installer adds) or python --version in a new terminal should print 3.1x. If typing python opens the Microsoft Store instead, Windows has no Python yet: that Store page is a stub, and it is also what "'python' is not recognized" usually means.

  • macOS. The python.org installer, or brew install python@3.13 with Homebrew. The /usr/bin/python3 that Xcode's command-line tools provide may be older than 3.10; python3 --version says.

  • Linux. Your distribution's package: sudo apt install python3 python3-venv on Debian and Ubuntu, sudo dnf install python3 on Fedora. Or let uv provide one (next line).

  • Any platform, with uv. uv installs Python itself: uv python install 3.13, then uv venv or the uvx route below.

One click: the Claude Desktop bundle

Download semantic-scholar-mcp-2.1.1.mcpb from the latest release and open it; Claude Desktop installs it. One bundle serves Windows, macOS (Apple Silicon and Intel) and Linux. Claude Desktop asks for Semantic Scholar API key and a receipts folder at install time; the key is stored in the OS keychain.

The bundle carries the server's source and a lock file, nothing compiled, and needs no Python of its own: Claude Desktop runs it with uv, using a uv already on your PATH if there is one and otherwise the copy the app ships. On first launch uv uses a Python 3.10 or later already on the machine, downloading one only if there is none, and installs the locked libraries: roughly 40 MB, or 60 MB with an interpreter, which took 26 to 46 seconds on the author's connection; later launches take under a second. If the first launch is slow enough that Claude Desktop reports the server disconnected, restart the app: what uv already fetched is cached, and the second launch completes. Bundles before 2.1.0 vendored libraries compiled for CPython 3.12 only and failed on every other interpreter; see Troubleshooting.

From GitHub, pinned to a release

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

installs the semantic-scholar-mcp console script and semantic-scholar-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.3" && 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/semantic-scholar-mcp" semantic-scholar-mcp

Verify the install:

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

That fails loudly if the package or one of its vendored modules is missing. Do not use semantic-scholar-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 semantic_scholar,cinii# a chosen subset

Nothing about where things go is decided for you. The script asks where to install (the virtual environment Claude Desktop will be pointed at), which folder receives the receipts, and which session slug to stamp on them, offering a neutral suggestion for each that Enter accepts; run without a terminal it does not guess, and stops unless --venv and --receipts-dir (or --no-receipts; -VenvDir and -ReceiptsDir for install.ps1) say so. 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.

Any other MCP client

Nothing here is specific to Claude. The server speaks the Model Context Protocol over stdio and nothing else: any client that can start a process and talk JSON-RPC to it (Claude Code, Cursor, VS Code and Continue, Zed, LibreChat, a script of your own using an MCP SDK) can use it. The Claude Desktop bundle and the installers are conveniences for one client; the server underneath is the same console script. Register it anywhere by giving the client the absolute path of the console script and, optionally, the environment:

{
  "mcpServers": {
    "semantic_scholar": {
      "command": "/absolute/path/to/.venv/bin/semantic-scholar-mcp",
      "env": {
        "SEMANTIC_SCHOLAR_API_KEY": "your key (optional)",
        "MCP_RECEIPT_DIR": "/absolute/path/to/receipts",
        "MCP_RECEIPT_SESSION": "project-or-article-slug"
      }
    }
  }
}

Claude Code takes the same thing on the command line:

claude mcp add semantic_scholar -- /absolute/path/to/.venv/bin/semantic-scholar-mcp

On Windows the path ends in \.venv\Scripts\semantic-scholar-mcp.exe. MCP_RECEIPT_DIR and MCP_RECEIPT_SESSION are optional; without them the server runs and every envelope says RECEIPT_NOT_DEPOSITED. The stdio transport is the only one: there is no HTTP endpoint to expose, and nothing to host.

Troubleshooting

"Server disconnected" is all Claude Desktop says when the server process exited before or during the handshake, whatever the reason. The reason is in the log:

  • Windows: %APPDATA%\Claude\logs\mcp-server-<name>.log (the extension's display name, or the key under mcpServers), with mcp.log beside it for the app's side of the conversation.

  • macOS: ~/Library/Logs/Claude/mcp-server-<name>.log and mcp.log.

  • Linux: ~/.config/Claude/logs/.

Read the last launch from the bottom up. Three shapes account for nearly every report:

  • A Python traceback ending in ImportError or ModuleNotFoundError (for example No module named 'pydantic_core._pydantic_core'). The interpreter started, the code was found, and a compiled library did not match that interpreter. This is what every bundle before 2.1.0 did on any Python other than 3.12. Install the current bundle, or use the pip route, which resolves wheels for the interpreter you install into.

  • 'python' is not recognized, spawn python ENOENT, or a line from the Microsoft Store: no interpreter was found on the PATH Claude Desktop constructs. Nothing of this server ran. The current bundle does not launch python at all; for the pip route, register the console script by absolute path as shown above.

  • A line from uv (error: ..., or a download that never finished): the current bundle's runtime could not build its environment, usually because the first launch had no network or ran past Claude Desktop's sixty-second limit. Restart the app; uv keeps what it fetched. A uv older than 0.5 cannot read the lock file; upgrade it or remove it so the app uses its own.

The bundle's own entry point writes one line naming the interpreter, its path and the supported range before re-raising an import failure, so a log from 2.1.0 onwards says which of these it is.

Tools

Tool

Purpose

s2_search_papers

Papers by keyword, with year, field-of-study, citation-count and open-access filters

s2_get_paper

One paper by S2 ID, DOI, ArXiv ID or URL

s2_batch_papers

Up to 500 papers by ID in one call

s2_citations

Papers citing a paper, or the papers it cites

s2_search_authors

Authors by name

s2_get_author

One author by S2 Author ID

s2_author_papers

An author's papers, paginated

s2_recommend_single

Papers similar to one seed paper

s2_recommend_multi

Papers similar to a set of seeds, unlike optional negatives

All nine 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 the two term searches (s2_search_papers, s2_search_authors), 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, citation traversals, batch and recommendations omit it: they were handed identifiers and chose no term.

  • queryinput_terms as supplied, normalized as sent, and the detected script. For batch and multi-seed recommendations the identifiers asked for are in params, so the receipt hash fixes the request and not only the answer. The key is sent as a header and never enters params.

  • matching_moderelevance_ranked for term searches (title, abstract and venue, ranked; result.total is the API's estimate); filter_exact for citation and authorship traversals; identifier_lookup for fetches and batch; similarity_ranked for the recommender.

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

  • items[] — the family's item shape. Semantic Scholar reports no language, so script decides the typed title slot: kana or Hangul place a title in ja or ko, Latin script in en, and a han-only title is left untyped rather than guessed; extra.title always carries the text. S2 and Corpus IDs, ArXiv and PubMed IDs, citation and influential-citation counts, fields of study, TL;DR and the abstract sit in extra; the DOI in ids.doi; the S2 page in ids.url_en; an open-access PDF in ids.fulltext_url. Author records use record_type author.

  • receipt — an ISO 8601 timestamp, a SHA-256 over the normalised query and its parameters, and the DOIs returned. Papers without a DOI are identified only in extra.s2_paper_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.

TOTAL_NOT_REPORTED

info

The endpoint reports no corpus total (citations, references, an author's papers, batch, recommendations); result.total is the returned count, and the message says whether the API offers a further page.

ZERO_RESULTS

warning

No records. Coverage of non-English humanities scholarship is thin; consult the CiNii, J-STAGE, NDL and KCI servers before concluding the literature is absent.

PARTIAL_NOT_FOUND

warning

Batch: some identifiers resolved to no record; they are listed in coverage_note.

NOT_FOUND

warning

A lookup by identifier answered 404.

RATE_LIMITED

error

The API answered 429. Keyless callers share one pool and search endpoints are throttled first; a free key gives 1 request/second, which the server enforces.

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

SEMANTIC_SCHOLAR_API_KEY=your_semantic_scholar_api_key

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/semantic-scholar-mcp.

{
  "mcpServers": {
    "semantic-scholar": {
      "command": "C:\\path\\to\\.venv\\Scripts\\semantic-scholar-mcp.exe",
      "env": {
        "SEMANTIC_SCHOLAR_API_KEY": "your_semantic_scholar_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 nine tools should appear under "semantic-scholar" in the tool list.

Query receipts

Every envelope can be deposited to an append-only, hash-chained JSONL log by semantic_scholar_mcp.ledger. 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:

semantic-scholar-mcp-ledger verify      receipts/semantic-scholar.jsonl
semantic-scholar-mcp-ledger verify-dir  receipts
semantic-scholar-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 Semantic Scholar responses under tests/fixtures/ (captured 2026-09-04 without a key) 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 Semantic Scholar, Allen Institute for AI data, which remains governed by that provider's terms: the Semantic Scholar API License Agreement and the API documentation. Those terms ask that Semantic Scholar be credited, with a link, wherever its data is shown, which the attribution line in every envelope carries, and that published work built on the API cite the platform: Kinney et al., "The Semantic Scholar Open Data Platform" (2023, arXiv:2301.10140).

Author

Dr Christopher Gerteis, SOAS University of London.

Available Tools

9 tools
s2_author_papersA
Read-onlyIdempotent

Papers by one author, paginated. Returns the unified envelope; result.total is the returned count (TOTAL_NOT_REPORTED).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, openWorld, and non-destructive behavior. The description adds valuable behavioral context by stating that the endpoint is paginated and that result.total is only the returned count (TOTAL_NOT_REPORTED), not a true total. There is no contradiction with 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 two short sentences with the core purpose first and the return-value caveat second. Every phrase earns its place, and there is no fluff or redundant restating of the tool name.

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?

With an output schema and rich annotations, the description covers the essential invocation context: a specific author's papers with pagination, plus a nonobvious total-count caveat. It does not mention sort order or explicitly route agents away from sibling tools, but those are secondary for a simple paginated lookup.

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's 'by one author' and 'paginated' map naturally to author_id and the limit/offset parameters, and the nested input schema provides the concrete constraints and defaults. The tool description does not add much parameter-level detail beyond this, but it gives enough orientation for a correct call.

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 clearly identifies the resource (papers) and the selection criterion (one author), and the pagination note adds operational context. It lacks an explicit action verb and does not name sibling tools, but an agent can distinguish it from s2_get_author, s2_search_papers, and s2_citations by its author-scoped paper listing.

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 'Papers by one author, paginated' implies the tool should be used when the agent already has an author identifier and needs that author's papers. However, it provides no explicit when-to-use or when-not-to-use guidance, nor does it point to alternatives such as s2_search_papers for keyword search or s2_get_author for author metadata.

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

s2_batch_papersA
Read-onlyIdempotent

Look up up to 500 papers at once by ID. Returns the unified envelope; identifiers the API could not resolve are counted in a PARTIAL_NOT_FOUND diagnostic and listed in coverage_note.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses an important behavioral trait beyond the annotations: partial failure handling via PARTIAL_NOT_FOUND diagnostic and coverage_note listing unresolved IDs. Annotations already indicate read-only/idempotent, so this additional error-handling context is valuable.

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 tightly worded sentences with no redundancy. The key batch limit is front-loaded, and the partial-failure behavior is succinctly described.

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 straightforward batch lookup with a single parameter, the description covers the operational limit, the input mode, and the return envelope's failure diagnostics. Annotations and output schema fill remaining needs, so nothing critical is missing.

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 adds the 'up to 500' limit and batch semantics, but it does not explain accepted ID types (S2 IDs, DOIs, ArXiv IDs) or format requirements. The input schema provides this detail, and with only one parameter the description's contribution is limited but meaningful.

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?

Description states a specific action ('Look up'), resource ('papers'), and mode ('by ID', batch up to 500). This clearly distinguishes it from s2_search_papers (search by query) and s2_get_paper (single ID lookup).

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 makes the usage context clear: use when you have a batch of paper IDs to resolve. It does not explicitly name alternatives or exclusions, but the contrast with single-ID and search tools is strongly implied by 'at once by ID'.

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

s2_citationsA
Read-onlyIdempotent

Papers citing a given paper (citations) or cited by it (references). Returns the unified envelope. The API reports no total for this endpoint, so result.total is the returned count (TOTAL_NOT_REPORTED).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate read-only, open-world, and idempotent behavior, so the description does not need to restate those. It adds valuable API quirk information: the endpoint reports no total, so result.total is the returned count (TOTAL_NOT_REPORTED). This goes beyond the annotations and helps the agent correctly interpret the response.

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 purpose is front-loaded, and the total-count caveat is presented as a separate, useful note. 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?

Given the presence of an output schema and comprehensive annotations, the description is largely sufficient. It covers the core operation and an important response quirk. However, it leaves out any mention of how to obtain or format the paper_id, and the phrase 'unified envelope' is unexplained, though the output schema may resolve this for the 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 only clarifies the 'citations' vs 'references' direction concept, which is already present in the schema's direction property. It does not explain paper_id format, limit/offset behavior, defaults, or the required params wrapper. With schema description coverage reported as 0%, the description fails to compensate for the lack of parameter-level 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 identifies the tool as retrieving papers that cite a given paper or are cited by it, distinguishing it from sibling tools that search, fetch, or recommend papers. It also states the return format ('unified envelope') and scope of the operation, making it easy for an agent to select this tool for citation graph traversal.

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 does not provide any guidance on when to use this tool versus alternatives such as s2_search_papers or s2_get_paper. It also does not mention when not to use it or what prerequisites exist (e.g., needing a valid paper identifier). No exclusions or alternative routing are given.

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

s2_get_authorA
Read-onlyIdempotent

Look up one author by Semantic Scholar Author ID. Returns the unified envelope with a single author item, or NOT_FOUND.

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 indicate this is a safe, idempotent read operation. The description adds useful behavioral context by specifying the return shape ('unified envelope with a single author item') and the NOT_FOUND outcome, which is beyond what the annotations provide.

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 short sentences with no filler. The primary action is front-loaded, and the return behavior is stated in a compact, informative second sentence.

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 one-parameter lookup tool with an output schema and read-only annotations, the description is nearly complete. It covers the input key, the single-item return envelope, and the not-found case; only explicit alternative routing to search tools is absent.

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?

There is only one parameter, author_id, and the description repeats its purpose ('by Semantic Scholar Author ID') rather than adding new details like ID format or how to obtain it. The schema also provides a minimal description, so combined coverage is sufficient but not enhanced.

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 clear resource ('one author'), and the exact key ('Semantic Scholar Author ID'). This distinguishes it from sibling tools like s2_search_authors, which search by query rather than lookup by ID.

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: use this when you have an Author ID and need a single author. However, it does not explicitly state when to prefer this over s2_search_authors or mention any exclusions, leaving the routing decision implicit.

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

s2_get_paperA
Read-onlyIdempotent

Look up one paper by S2 ID, DOI, ArXiv ID, or URL. Returns the unified envelope with a single item, or NOT_FOUND.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds valuable disclosure about the return shape ('unified envelope with a single item') and NOT_FOUND case, which the annotations do not convey. It provides useful behavioral context beyond the structured hints.

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 concise sentences: the first states the action and resource, the second states the return behavior. No redundant adjectives or filler; every clause contributes to a usable definition.

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 lookup tool with rich annotations and an output schema, the description is complete: it identifies the input format, the output container, and the not-found signal. No critical missing information remains for an agent to invoke it correctly.

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?

With schema description coverage at 0%, the description fully compensates by enumerating the accepted identifier formats (S2 ID, DOI, ArXiv ID, URL). This gives an agent the exact semantics needed to populate the paper_id parameter correctly, including examples in the parameter 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') and resource ('one paper') and clearly distinguishes itself from sibling tools by specifying single-item lookup by ID, in contrast to search or batch retrieval. The identifier types are enumerated, making the scope unambiguous.

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 single paper identifier and need that specific paper, but it does not explicitly state when to prefer this tool over s2_search_papers or s2_batch_papers. No exclusion criteria or alternatives are mentioned, leaving the routing to the agent's inference.

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

s2_recommend_multiA
Read-onlyIdempotent

Papers similar to a set of positive seed papers and unlike optional negative ones. Returns the unified envelope (matching_mode similarity_ranked); the seed IDs are in query.params so the receipt fixes them.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds useful non-obvious behavioral context: it returns a unified envelope with matching_mode similarity_ranked, and the seed IDs are echoed in query.params so the response receipt pins them. This goes beyond the annotation coverage.

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 the primary purpose front-loaded and the return-behavior detail in the second sentence. There is no filler or repetition; every sentence contributes useful information.

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 rich input schema, output schema, and annotations, the description covers the essential purpose and a key invocation quirk (seed IDs in query.params). It does not explain the 'unified envelope' jargon or route between siblings, but the remaining gaps are minor for an agent that has access to the full schema.

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 nested input schema has clear descriptions for positive_paper_ids, negative_paper_ids, and limit, so the schema carries the parameter documentation burden. The description adds conceptual context ('positive seed papers', 'negative ones') but no additional syntax or constraints beyond what the schema already provides.

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 clearly states the core behavior: return papers similar to positive seed papers and dissimilar to optional negative ones. It distinguishes from s2_recommend_single by emphasizing a set of positive seeds, though it does not explicitly name the sibling or say 'recommend'.

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 use for multi-seed similarity recommendations with optional negatives, but it gives no explicit guidance on when to choose this over s2_recommend_single or other siblings. No alternatives, exclusions, or when-not-to-use conditions are stated.

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

s2_recommend_singleA
Read-onlyIdempotent

Papers similar to one seed paper, by Semantic Scholar's recommender. Returns the unified envelope (matching_mode similarity_ranked).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/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, and open-world behavior. The description adds that the result is a 'unified envelope (matching_mode similarity_ranked)', but this phrase is cryptic and does not meaningfully explain output behavior or limitations beyond what annotations already provide.

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 short and front-loaded: the core behavior appears in the first sentence. The second sentence adds output-mode terminology, but it is compact and does not bloat the definition, even if it could be clearer.

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?

For a simple single-seed recommendation tool, the description is almost sufficient, and the output schema plus annotations carry some burden. It is missing explicit guidance on the `limit` semantics and on when to prefer s2_recommend_multi, so an agent would still need to infer some important call decisions.

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 mentions the seed-paper concept and gives no guidance about the `limit` parameter or how the recommendation set is influenced by it. With the reported low schema description coverage, the description does not compensate by explaining parameter roles, though the input schema itself does contain basic definitions for `paper_id` and `limit`.

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 that the tool returns papers similar to one seed paper using Semantic Scholar's recommender, which is a specific resource-and-action pair. It also distinguishes itself from s2_recommend_multi by emphasizing the single-seed-paper input.

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 this is for recommendation from a single seed paper, which gives some context about when to use it. However, it does not explicitly tell the agent when to choose this over s2_recommend_multi or when not to use it, leaving the routing partly to inference.

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

s2_search_authorsA
Read-onlyIdempotent

Search for authors by name. Returns the unified envelope; each item is an author record (record_type author) with affiliations, paper count, citation count and h-index in extra.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful context beyond these annotations by explaining the return envelope structure, the per-item record_type, and which metrics appear in extra. This gives the agent a clearer picture of the operation's output without contradicting 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 two concise sentences with the core purpose front-loaded. It avoids repetition of the tool name and every sentence adds specific information about behavior or return structure. No filler or redundant content is present.

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 search tool with strong annotations and an output schema, the description is nearly complete: it covers the action, the entity type, and the key return fields. It could be slightly more complete by acknowledging pagination behavior, though the schema already defines limit and offset. Overall, an agent can invoke this tool correctly with high confidence.

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 partially addresses parameters by indicating the query is an author name. It does not compensate for the 0% schema description coverage: limit and offset are not mentioned, and there is no guidance on pagination or result sizing. The schema itself provides descriptions for these fields, but the tool description carries little semantic weight for them.

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: 'Search for authors by name.' It clearly differentiates this from sibling search tools like s2_search_papers by stating the exact entity type returned and even notes the record_type as author. This is unambiguous and immediately actionable.

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 usage context is implied: use this when you need to find authors by name. However, the description does not explicitly mention alternatives or conditions for choosing this tool over s2_get_author or s2_author_papers. There is no clear when-not-to-use guidance, so it falls short of a stronger score.

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

s2_search_papersA
Read-onlyIdempotent

Search Semantic Scholar for papers by keyword, with year, field-of-study, citation-count and open-access filters. Returns the unified envelope.

Matching is relevance-ranked over title, abstract and venue (matching_mode relevance_ranked); result.total is the API's estimate. Titles are typed by script: kana or Hangul decide ja or ko, Latin goes to en, and a han-only title stays untyped in extra.title. Coverage of non-English humanities work is thin — a ZERO_RESULTS here is weak evidence; consult the CiNii, J-STAGE, NDL and KCI servers.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: relevance-ranking mode, result.total being an estimate, title script-based language classification, and a coverage caveat. These details help an agent interpret results correctly and are consistent with the readOnly/openWorld/idempotent hints.

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 primary purpose is front-loaded in a single clear sentence, and the second paragraph adds meaningful caveats about ranking and coverage. The title-script detail is niche but relevant; the description remains compact 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?

Given the rich output schema and annotations, the description covers the important missing semantics: matching behavior, result total interpretation, language typing, and fallback guidance for weak coverage. Pagination and per-field constraints are already in the schema, so no critical information is missing.

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 summarizes the filter families (year, field-of-study, citations, open access) that correspond to schema parameters, but the schema itself already documents each parameter with clear descriptions. The description adds a concise framing but doesn't provide much semantic detail beyond what the structured schema already carries.

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: 'Search Semantic Scholar for papers by keyword' and enumerates the available filters. It clearly distinguishes this from author search and paper-retrieval siblings, so an agent can tell what it does without opening schemas.

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 gives a clear main use case (keyword search with filters) and adds practical guidance: a ZERO_RESULTS in non-English humanities is weak evidence, and it names alternative servers to consult. It doesn't explicitly contrast with sibling tools like s2_get_paper or s2_citations, but the search framing makes the primary context clear.

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. 9 tool updatesv1.1.0
    • First observeds2_author_papers
    • First observeds2_batch_papers
    • First observeds2_citations
    • First observeds2_get_author
    • First observeds2_get_paper
    • First observeds2_recommend_multi
    • First observeds2_recommend_single
    • First observeds2_search_authors
    • First observeds2_search_papers

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation5/5

Every tool targets a distinct resource and action: searching papers, getting individual papers, batch retrieval, citation exploration, author lookup, and recommendation generation. The two recommendation tools are clearly separated by single vs. multiple seed papers, so there is no real ambiguity among the set.

Naming Consistency4/5

All tools share the 's2_' prefix and mostly follow a verb_noun pattern like s2_search_papers and s2_get_author. Minor deviations such as s2_citations and s2_author_papers omit an explicit verb, but the overall naming is still predictable and readable.

Tool Count5/5

Nine tools is well-scoped for read-only access to Semantic Scholar. Each tool addresses a distinct core capability of the API without extraneous or redundant functionality, and the count feels appropriately balanced for the domain.

Completeness5/5

The set covers the main Semantic Scholar workflows: paper search, paper lookup by various identifiers, batch retrieval, citation/reference exploration, author search and profiles, author paper listings, and both single- and multi-seed recommendations. No significant gaps are apparent for a read-only scholarly API tool server.

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

  • F
    license
    A
    quality
    D
    maintenance
    An MCP server that provides access to Semantic Scholar's academic paper database, enabling paper search, detailed retrieval, author info, and citation export.
    4
    10
    -
  • A
    license
    B
    quality
    D
    maintenance
    MCP server that provides Semantic Scholar academic search capabilities, including paper search, detail query, citation analysis, author search, and intelligent recommendations.
    9
    59
    7
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables searching and retrieving academic papers, authors, citations, and references from Semantic Scholar via an HTTP MCP server with caching and rate limiting.
    -

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/semantic-scholar-mcp'

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