Skip to main content
Glama

scholar-mcp

CI

An MCP server that gives LLM agents grounded access to academic literature: paper search over arXiv and Semantic Scholar, citation graphs, related-paper discovery, and BibTeX export, plus prompt templates that make the model write related-work summaries only from retrieved evidence.

Design rule: tools fetch and compute; the LLM reasons and writes. Search, graph construction, ranking and BibTeX happen in code (reproducible, testable). Summaries are written by the client model from tool output, guided by MCP prompts, so every claim traces back to a paper the server actually returned.

Architecture

flowchart LR
    A[LLM client<br/>Claude Desktop / Claude Code / agent.py] -- MCP: stdio or HTTP --> B[scholar-mcp server]
    B --> C[Tools<br/>8 typed tools]
    B --> D[Resources<br/>paper://id, cache stats]
    B --> E[Prompts<br/>related_work_review, literature_map]
    C --> F[HttpClient<br/>rate limit + retry + backoff]
    F --> G[(SQLite TTL cache)]
    F --> H[arXiv API]
    F --> I[Semantic Scholar<br/>Graph + Recommendations]

Related MCP server: PapersFlow

Tools

Tool

Purpose

Source

search_papers

Keyword search with year / min-citation filters, sortable by citations

Semantic Scholar

search_arxiv

Category-aware search; sort_by="newest" for fresh preprints

arXiv

get_paper_details

Full abstract, authors, venue, citation counts, links

Semantic Scholar

get_citations

Forward citations, optionally influential-only, ranked

Semantic Scholar

get_references

A paper's bibliography, ranked

Semantic Scholar

find_related_papers

Similar papers from a seed (recommendation model)

Semantic Scholar

build_citation_graph

Bounded BFS graph (depth 1-2); returns nodes, edges, key_papers ranked by in-graph citations

Semantic Scholar

export_bibtex

Deterministic BibTeX, per-paper failure reporting

Semantic Scholar

Resources: paper://{id} (Markdown paper card), scholar://cache/stats. Prompts: related_work_review(topic, num_papers, year_from), literature_map(seed_paper).

All tools are annotated read-only. Paper ids can be arXiv ids (1706.03762, arXiv:...v3, URLs), DOIs, or Semantic Scholar ids; they are normalised automatically.

Engineering notes

  • Typed schemas via Pydantic Field constraints (limit 1-50, depth 1-2, ...); invalid calls are rejected by the protocol layer before any network call.

  • Rate limiting & resilience: per-host throttling (arXiv 1 req / 3 s, Semantic Scholar 1 req / 1.6 s, safely under its 1 req/s key limit), retries with exponential backoff, honours Retry-After, distinct errors for 404 / 429 / 5xx.

  • Caching: SQLite TTL cache (search 1 h, paper 24 h, citations 6 h) so agent loops don't burn quota.

  • LLM-readable errors: failures say what went wrong and what to try next. Errors subclass the SDK's ToolError, because the SDK hides the text of unexpected exceptions from the client.

  • Bounded outputs: abstracts trimmed in lists, graphs capped by nodes / per-node / per-level limits, with a truncated flag, so responses fit in a context window.

  • MCP SDK compatibility: developed and tested on mcp 2.x (where FastMCP became MCPServer); a small import shim keeps 1.x working, but 1.x is not covered by CI.

Quick start

git clone https://github.com/raovivek02/scholar-mcp.git && cd scholar-mcp
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev,agent]"
pytest -q                          # unit tests use mocked HTTP, no network needed
python scripts/live_smoke.py       # one-off check against the real APIs
mcp dev src/scholar_mcp/server.py  # opens the MCP Inspector (needs Node.js)

Optional but recommended: a free Semantic Scholar API key in SEMANTIC_SCHOLAR_API_KEY for reliable rate limits.

Use it from Claude Desktop / Claude Code

Claude Desktop: copy examples/claude_desktop_config.json into your config and fix the path. Claude Code: claude mcp add scholar -- /path/to/.venv/bin/python -m scholar_mcp

Run it as an HTTP server

python -m scholar_mcp --transport streamable-http --host 127.0.0.1 --port 8000

Run the agent loop

export ANTHROPIC_API_KEY=...
python client/agent.py "Write a related-work paragraph on LiDAR moving object segmentation"

No paid API? Use a free local model through Ollama (or any OpenAI-compatible endpoint such as Groq, Gemini or OpenRouter):

ollama pull qwen2.5:32b            # or qwen2.5:7b on a smaller GPU
python client/agent_openai.py "Write a related-work paragraph on LiDAR moving object segmentation"
python eval/run_eval.py --provider openai --model qwen2.5:32b

Free hosted option: a Google AI Studio key (free tier) works through Gemini's OpenAI-compatible endpoint - set LLM_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai/, LLM_API_KEY, and LLM_MODEL (see the docstring in client/agent_openai.py).

client/agent.py connects over MCP, lists the tools, passes them to the model, executes tool calls and loops until the model produces a final answer.

Evaluation

eval/run_eval.py runs the agent on the questions in eval/cases.json and reports:

Metric

Meaning

tool_selection

Required tools were called

retrieval_recall

Fraction of known key papers that appeared in tool output

grounded

Every arXiv id in the final answer was returned by a tool (no invented citations)

citation_support

Every "(Author et al., Year)" citation matches a paper a tool returned

graceful_failure

A nonexistent paper is reported as not found, not hallucinated

python eval/run_eval.py --model claude-sonnet-5-5   # writes eval/results.md

Results (eval/results.md):

Model: gemini-3.5-flash-lite - 8 cases

metric

score

tool_selection

1.0

retrieval_recall

0.889

grounded

1.0

citation_support

1.0

graceful_failure

1.0

case

tools ok

recall

grounded

turns

lookup-details

True

1.0

True

3

recent-preprints

True

None

True

2

forward-citations

True

None

True

3

foundations-graph

True

None

True

3

bibtex

True

1.0

True

2

related-work

True

0.667

True

3

similar-papers

True

None

True

4

missing-paper

True

None

True

3

Single run on 8 hand-written queries (eval/cases.json). A small sample, so treat it as a smoke-level evaluation, not a benchmark.

Configuration

Variable

Purpose

SEMANTIC_SCHOLAR_API_KEY

Semantic Scholar key (strongly recommended)

SCHOLAR_MCP_CACHE

Cache file path (default ~/.cache/scholar-mcp/cache.sqlite)

ANTHROPIC_API_KEY, ANTHROPIC_MODEL

For client/agent.py

LLM_BASE_URL, LLM_MODEL, LLM_API_KEY

For client/agent_openai.py (Ollama, Gemini, Groq, ...)

Project layout

src/scholar_mcp/   server.py (tools/resources/prompts) · semantic_scholar.py · arxiv_client.py
                   graph.py · bibtex.py · http.py · cache.py · ids.py · models.py · errors.py
client/agent.py    tool-calling agent loop      eval/    evaluation harness + cases
tests/             unit + stdio protocol tests  scripts/ live API smoke test

Limitations

  • Coverage and citation counts are whatever the two APIs return; Semantic Scholar's citation list is fetched in a 200-paper window, so very highly cited papers are sampled, not exhaustive.

  • Citation graphs are bounded samples of top-cited neighbours, not complete networks.

  • Abstracts only; full-text retrieval is not implemented.

  • The evaluation is small: 8 hand-written queries, one run, one model (Gemini 3.5 Flash-Lite via its free tier).

  • Semantic Scholar occasionally returns HTTP 429 even within the key's limit. The client retries with backoff (up to 5 times); a call that still fails reaches the model as a tool error it can react to (in one eval run the agent fell back to arXiv search).

Roadmap

Full-text PDF extraction tool · OpenAlex as a third source · author-centric tools · Docker image + auth for remote hosting.

License

MIT

Available Tools

8 tools
build_citation_graphA
Read-onlyIdempotent

Build a bounded citation graph around a seed paper.

Returns nodes, edges (source cites target), and key_papers ranked by how often they are cited within the graph - a quick way to find foundational work in a subfield. The graph is a top-cited sample, not the full network (see the 'truncated' flag).

NameRequiredDescriptionDefault
depthNo1 = direct neighbours, 2 = neighbours of neighbours
paper_idYesarXiv id (1706.03762), arXiv URL, DOI (10.xxxx/...) or Semantic Scholar id
directionNoboth
max_nodesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, and openWorld, so the bar is lower, and the description still adds genuinely non-obvious context: the result is a top-cited sample rather than the complete network, and a 'truncated' flag signals incompleteness. It also defines edge direction (source cites target), which matters for interpreting results. It does not mention cost, latency, or rate limits for a potentially expensive traversal.

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?

Front-loaded with the action and the return shape, with no filler sentences. Slight redundancy between 'top-cited sample, not the full network' and the 'truncated' flag note, which restate the same caveat.

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?

An output schema exists, so return-value detail is mostly covered, and the description still usefully explains edge direction and the key_papers ranking. For a 4-parameter, open-world traversal tool the main omission is routing guidance against get_citations/get_references.

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?

Schema coverage is 50%: depth and paper_id are documented in the schema, while direction and max_nodes have none. The description's 'bounded' language gestures at max_nodes/depth but adds no meaning for the direction enum or for how max_nodes trades off against truncation, so it does not compensate for the gap.

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?

States a specific verb and resource — 'Build a bounded citation graph around a seed paper' — and names the returned artifacts (nodes, edges, key_papers). It implies, but never states, how this differs from siblings like get_citations or get_references, so it stops short of 5.

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 only implied: 'a quick way to find foundational work in a subfield' hints at the use case, but there is no explicit when-to-use or when-to-prefer-a-sibling guidance despite four closely related sibling tools (get_citations, get_references, find_related_papers).

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

export_bibtexB
Read-onlyIdempotent

Generate BibTeX entries for papers. Done in code, so entries are exact and reproducible.

NameRequiredDescriptionDefault
paper_idsYesPaper ids to export

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds one genuine piece of context beyond that: entries are generated in code, so output is exact and reproducible. It says nothing about the maximum of 20 ids or how invalid ids are handled.

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 short sentences, zero filler, with the purpose front-loaded and the reproducibility note second. Every sentence earns its place.

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?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. What remains missing is modest but real: batching limits, error behavior on unknown ids, and any hint about when to reach for this over the sibling tools.

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?

Schema coverage is 100% with a single, well-documented `paper_ids` array, so the schema does the heavy lifting. The description adds no format hints (e.g. where ids come from) and does not mention the 20-item cap, so it does not exceed the baseline.

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?

States a specific verb and resource: "Generate BibTeX entries for papers." That is clearly distinct from the discovery-oriented siblings (search_papers, get_citations), though the description never names a sibling or explicitly contrasts itself. The purpose is unambiguous without opening the schema.

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?

There is no when-to-use guidance and no alternatives named. The reader must infer that this is the export/citation-format step from the tool name alone; nothing says what happens with unknown or duplicate ids, or when another tool (e.g. get_paper_details) would be the better choice.

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

get_citationsB
Read-onlyIdempotent

Papers that cite the given paper (forward citations), from a window of up to 200.

NameRequiredDescriptionDefault
limitNoMaximum number of results
sort_byNocitations
paper_idYesarXiv id (1706.03762), arXiv URL, DOI (10.xxxx/...) or Semantic Scholar id
influential_onlyNoOnly citations marked influential

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so safety and repeatability are covered. The description adds the citation direction and an unspecified 'window of up to 200', but says nothing about result ordering, whether the window is a candidate pool vs. a result cap, or what the response contains.

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?

A single front-loaded sentence with no filler; the parenthetical clarification is well placed. The trailing 'from a window of up to 200' clause is the only part that would benefit from rewording.

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?

An output schema and annotations carry much of the load, so a one-line description is defensible for a read-only retrieval tool. However, the unexplained 200-vs-50 discrepancy and the absence of any note on sort_by or ordering leave real gaps for correct invocation.

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

Parameters2/5

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

Schema coverage is 75% and the schema already documents limit, paper_id, and influential_only, so the description adds little. Worse, 'a window of up to 200' conflicts with the schema's limit maximum of 50, leaving an agent unsure whether 200 is a result cap or an underlying candidate pool, and sort_by's semantics remain undocumented in both places.

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 gives a specific resource (papers citing a paper) and explicitly disambiguates direction with '(forward citations)', which contrasts with the backward-looking sibling get_references. It stops short of naming that sibling or any other alternative, so differentiation is implied rather than stated.

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?

'Forward citations' implicitly tells an agent this is the complement of reference lookup, but there is no explicit when-to-use/when-not guidance and no mention of find_related_papers or build_citation_graph as alternatives. The agent must infer routing from the phrase alone.

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

get_paper_detailsA
Read-onlyIdempotent

Full metadata for one paper: complete abstract, authors, venue, citation counts, links.

NameRequiredDescriptionDefault
paper_idYesarXiv id (1706.03762), arXiv URL, DOI (10.xxxx/...) or Semantic Scholar id

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered without description help. The description adds the field inventory, which is mild added context, but says nothing about failure behavior for malformed or unknown identifiers, or about how external-source lookups may vary. With annotations carrying the main burden, a 3 is appropriate.

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?

A single sentence that front-loads the scope ('Full metadata for one paper') and then lists the payload. No filler, no repetition of the tool name, nothing that could be cut.

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 one fully documented parameter, a present output schema, and annotations covering read-only/idempotent behavior, the definition covers what an agent needs to call it correctly. It falls short of 5 only because there is no routing guidance against the seven sibling tools.

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?

Schema description coverage is 100% and the paper_id field already documents every accepted identifier form (arXiv id, arXiv URL, DOI, Semantic Scholar id). The description adds no meaning beyond the schema for this single required parameter, so the baseline of 3 applies.

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?

States a specific resource and scope: 'Full metadata for one paper', then enumerates the fields returned (abstract, authors, venue, citation counts, links). The 'one paper' phrasing distinguishes it from the sibling list/search tools, though it never names search_papers or get_citations explicitly.

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 only implied: an agent can infer this is the single-record lookup to use once a paper_id is known, versus search_papers for discovery. There is no explicit when-to-use statement, no mention of when to prefer get_citations or find_related_papers, and no note on what happens with an unresolvable id.

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

get_referencesA
Read-onlyIdempotent

Papers the given paper cites (its bibliography), from a window of up to 200.

NameRequiredDescriptionDefault
limitNoMaximum number of results
sort_byNocitations
paper_idYesarXiv id (1706.03762), arXiv URL, DOI (10.xxxx/...) or Semantic Scholar id

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds a cap ('window of up to 200'), but that number conflicts with the schema's limit maximum of 50 and is not explained, leaving the truncated-result behavior unclear.

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?

It is a single front-loaded sentence with no filler. The trailing 'from a window of up to 200' is the one weak spot because it is ambiguous and raises a question it does not answer.

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?

An output schema carries the return shape and annotations carry the safety profile, so the description only needs to fix the direction of the lookup, which it does. The unexplained 200-versus-50 discrepancy is the remaining gap.

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?

Schema coverage is 67%: paper_id and limit are documented in the schema, while sort_by has only an enum. The description adds nothing about accepted id formats, limit behavior, or what the 'window of up to 200' means relative to the limit parameter, so it stays at the baseline.

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 names a specific resource and direction: 'papers the given paper cites (its bibliography)'. That wording implicitly separates it from get_citations, which covers the opposite direction, though it never names that sibling.

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 inferable from the phrase 'cites (its bibliography)', so an agent can tell this is a backward-reference lookup. But there is no explicit when-to-use statement and no mention of alternatives such as get_citations or find_related_papers.

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

search_arxivA
Read-onlyIdempotent

Search arXiv directly. Use sort_by='newest' to find the latest preprints in a category.

Results have no citation counts; call get_paper_details for those.

NameRequiredDescriptionDefault
limitNoMaximum number of results
queryYesKeywords or an arXiv field query like 'ti:transformer'
sort_byNorelevance
year_toNoPublication year bound
categoryNoarXiv category such as cs.CV, cs.RO, cs.LG
year_fromNoPublication year bound

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety and side-effect profile is fully covered. The description adds useful output context — that results carry no citation counts — which is genuinely beyond the annotations, but it says nothing about result limits, pagination or coverage of arXiv's corpus.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action, then a usage tip, then a pointer to a sibling. Every sentence carries information and there is no filler.

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 rich annotations, an output schema, and near-complete parameter documentation, the description needs only to add routing and output caveats, which it does. The missing piece is an explicit statement of how this differs from search_papers.

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?

Schema coverage is 83%, so parameters are largely self-documenting; the description only adds meaning to sort_by by tying 'newest' to recency-oriented browsing. It adds nothing about query syntax, year bounds or category filtering beyond what the schema states.

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?

States a specific verb and resource: 'Search arXiv directly.' The word 'directly' hints that this is arXiv-only, implicitly distinguishing it from the sibling search_papers, but that contrast is never made explicit.

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?

Gives a concrete usage tip ('Use sort_by="newest" to find the latest preprints in a category') and routes the agent to get_paper_details when citation counts are needed. It stops short of saying when this tool is preferable to the sibling search_papers, so alternatives are only partially addressed.

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

search_papersA
Read-onlyIdempotent

Search papers on Semantic Scholar (all venues, with citation counts and abstracts).

Best for finding established or influential work. Use search_arxiv for brand-new preprints.

NameRequiredDescriptionDefault
limitNoMaximum number of results
queryYesKeywords, e.g. 'LiDAR moving object segmentation'
sort_byNorelevance
year_toNoPublication year bound
year_fromNoPublication year bound
min_citationsNoMinimum citation count

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds value by disclosing result content (citation counts, abstracts) and venue breadth (all venues). No mention of rate limits, pagination, or result caps, but an output schema exists to carry return structure, so a 3 is appropriate.

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 short sentences, zero filler, with the core purpose front-loaded and the disambiguation immediately after. Every sentence earns its place.

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

Completeness4/5

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

For a 6-parameter read-only search tool with an output schema, the description covers purpose, source scope, and the main alternative. Sort and citation-filter behavior is left entirely to the schema, which is acceptable given high coverage, but a hint on sorting or result shape would complete it.

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?

Schema description coverage is 83%, with query, limit, year bounds, and min_citations documented in the schema; only sort_by lacks a description there. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

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?

States a specific verb (search), resource (papers), and source (Semantic Scholar), plus scope details: all venues, citation counts, abstracts. The second sentence distinguishes it from search_arxiv by naming the sibling and the condition that selects it.

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?

Explicit guidance: 'Best for finding established or influential work' and 'Use search_arxiv for brand-new preprints' gives a clear when-to-use plus an alternative. Doesn't address the other siblings (get_paper_details, find_related_papers) or when-not-to-use beyond the arxiv split, so not quite exhaustive.

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.

  1. 8 tool updatesv0.1.0
    • First observedbuild_citation_graph
    • First observedexport_bibtex
    • First observedfind_related_papers
    • First observedget_citations
    • First observedget_paper_details
    • First observedget_references
    • First observedsearch_arxiv
    • First observedsearch_papers

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct operation: discovery (search_papers vs search_arxiv, explicitly differentiated by venue and citation availability), metadata retrieval, forward/backward citation traversal, recommendation, graph construction, and export. The descriptions actively disambiguate the one potentially confusable pair (search_papers / search_arxiv) and cross-reference get_paper_details for missing data.

Naming Consistency5/5

Uniform snake_case verb_noun pattern (search_*, get_*, find_*, build_*, export_*) with verbs that accurately signal the action type. No mixing of conventions, and the small verb variety reflects genuinely different operations rather than stylistic drift.

Tool Count5/5

Eight tools is a tight, well-scoped surface for an academic literature server, with no redundant entries. Each tool covers a distinct step in the research workflow and none appear to be filler.

Completeness4/5

The surface covers the core scholarly lifecycle: discovery, metadata, forward/backward citation traversal, recommendation, graph analysis, and citation export. Minor gaps remain—no author-centric tools (search/list papers by author, author profiles) and no batch multi-paper details fetch, which agents must work around with repeated calls.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to search, analyze, and summarize academic research papers in real-time from arXiv, Semantic Scholar, and PubMed. Provides automatic deduplication, citation analysis, and BibTeX generation across multiple research databases.
    23 npm
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables agents to search papers across Semantic Scholar and arXiv, read and extract text from arXiv PDFs, align records across sources, and produce structured literature-analysis digests.
    10
    1
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to search arXiv, extract and analyze paper content, and build a personal semantically-searchable research library with saved papers and notes.
    -