What it is
Semantic Scholar MCP Server is a Python package that exposes the Semantic Scholar Academic Graph and Recommendations APIs as Model Context Protocol tools. Connected to an MCP client — such as Claude Desktop, Claude Code, Cursor, or Cline — it lets the assistant search the literature, traverse citation graphs, look up authors, fetch recommendations, search within paper full text, and export citations, all over the standard MCP interface.
Independent project. This is an unofficial, community-built client. It is not affiliated with, endorsed by, or sponsored by the Allen Institute for AI or Semantic Scholar. It calls the public Semantic Scholar API and is subject to that service's terms and availability.
Install
Pick whichever fits your client. No build step.
# Run directly from PyPI (recommended)
uvx s2-mcp-server
# Or install with pip
pip install s2-mcp-server
# Or run the container image
docker run -i ghcr.io/smaniches/semantic-scholar-mcp:latest
Works with no API key on Semantic Scholar's public tier, which is
rate-limited (around one request per second). A
free API key raises the
limit substantially — provide it via the SEMANTIC_SCHOLAR_API_KEY
environment variable. See the
README for
client-by-client setup.
Tools
Fourteen tools, grouped by what they do.
Search & match
semantic_scholar_search_papers— query with filterssemantic_scholar_bulk_search— sorted, cursor-pagedsemantic_scholar_match_paper— best title matchsemantic_scholar_snippet_search— full-text snippets
Papers & citations
semantic_scholar_get_paper— details, citations, referencessemantic_scholar_bulk_papers— up to 500 at oncesemantic_scholar_export_citation— BibTeX
Authors
semantic_scholar_search_authors— by namesemantic_scholar_get_author— profile & paperssemantic_scholar_paper_authors— a paper's authorssemantic_scholar_author_batch— up to 1,000 at once
Recommendations & status
semantic_scholar_recommendations— from a seed papersemantic_scholar_multi_recommend— positive/negative seedssemantic_scholar_status— health & rate-tier check
Engineering
Verifiable facts, not adjectives.
- Tested across Python 3.10–3.13 on Linux, macOS, and Windows — unit, property-based, load, and live API-compatibility suites, with a coverage gate in CI.
- Static analysis on every change:
ruff,mypy(strict), and CodeQL. - Resilient API client: per-tier rate limiting, exponential-backoff retries that honour
Retry-After, and typed, actionable errors. - Hardened supply chain: GitHub Actions pinned to commit SHAs; SLSA build-provenance attestations on the wheel, sdist, and container image; a CycloneDX SBOM published with each release.
- Distributed on PyPI (with PEP 740 attestations) and as a container image on GHCR. MIT licensed.
Status & honest limitations
This is a Beta (v1.x) project under active maintenance; the tool API is stable across the v1 series. Known boundaries are documented in the open rather than glossed over:
- Paper IDs are validated against injection-relevant characters but are not yet fully URL-encoded — a constrained, documented gap planned for a future release.
- The per-request
api_keytool parameter is deprecated (use the environment variable); removal is planned for v2.0.0.
Full detail: Known Limitations · Security policy