paper-search-mcp
A powerful MCP server for searching, retrieving, and downloading academic papers from multiple sources like arXiv, PubMed, Semantic Scholar, and more.

Suggested prompts
About this skill
Paper Search MCP
A Model Context Protocol (MCP) server for searching and downloading academic papers from multiple sources. Designed for researchers, AI-driven workflows, and anyone who needs to retrieve papers from a variety of academic platforms.
Design Principles
- Free-First: Public and open sources are the default roadmap. Paid or restricted sources are not the core direction of this project.
- Optional API Keys: API keys are supported only when they improve stability, rate limits, or metadata quality. The MCP should still be usable without them whenever possible.
- LLM-Friendly Retrieval: Search results should be standardized, deduplicated, and as complete as possible for downstream LLM workflows.
- Source Transparency: Different sources have different strengths. The MCP should make those tradeoffs explicit instead of pretending every source supports full-text retrieval.
Use Cases
- Researchers looking for relevant academic papers quickly
- AI workflows that need automatic metadata and full-text retrieval
- Multi-source search with deduplication
- Downloading open-access (OA) PDFs
Demo

Core Capabilities
- Two-Layer Architecture: High-level tools (
search_papersfor multi-source concurrent search & deduplication,download_with_fallbackrelying on publisher open access links with sequential fallbacks) and modular platform connectors. - Multi-Source Support: Search and download papers from arXiv, PubMed, bioRxiv, medRxiv, Google Scholar, IACR, Semantic Scholar, Crossref, OpenAlex, PubMed Central (PMC), CORE, Europe PMC, dblp, OpenAIRE, CiteSeerX, DOAJ, BASE, Zenodo, HAL, SSRN, Unpaywall, and optional Sci-Hub.
- Standardized Output: Papers are returned in a consistent dictionary format via the
Paperclass. - Free-First Design: Open and public sources are prioritized before any optional commercial or restricted integrations. API keys are optional and only improve stability or coverage.
- Discovery + Retrieval Workflow: Google Scholar and Crossref can be used for discovery and DOI backfilling; open repositories and publisher links are used for lawful full-text resolution.
- OA-First Fallback Chain:
download_with_fallbackfollows source-native download → OpenAIRE/CORE/Europe PMC/PMC discovery → Unpaywall DOI resolution → optional Sci-Hub. - MCP Integration: Compatible with MCP clients for LLM context enhancement.
- Extensible Design: Easily add new academic platforms by extending the
academic_platformsmodule.
How It Works
- You provide: A search query (keywords, title, author, etc.) or a paper identifier (DOI, arXiv ID).
- The Skill processes: It searches across multiple enabled sources in parallel, deduplicates results, and extracts metadata. For download requests, it tries OA sources in priority order.
- You get: A structured list of papers (title, authors, abstract, DOI, links, etc.), optionally downloadable PDFs or readable text.
What You Need to Provide
Configure environment variables (optional for most, but recommended for some sources):
| Environment Variable | Provider | Required? | How to Obtain |
|---|---|---|---|
PAPER_SEARCH_MCP_UNPAYWALL_EMAIL |
Unpaywall | Yes (Unpaywall disabled without it) | Any valid email; register at unpaywall.org |
PAPER_SEARCH_MCP_CORE_API_KEY |
CORE | Recommended | Free at core.ac.uk/services/api |
PAPER_SEARCH_MCP_SEMANTIC_SCHOLAR_API_KEY |
Semantic Scholar | Optional | Free at semanticscholar.org — improves rate limits |
PAPER_SEARCH_MCP_GOOGLE_SCHOLAR_PROXY_URL |
Google Scholar | Optional | Your HTTP/HTTPS proxy URL — bypasses bot-detection |
PAPER_SEARCH_MCP_DOAJ_API_KEY |
DOAJ | Optional | Free at doaj.org — raises hourly rate limit |
PAPER_SEARCH_MCP_ZENODO_ACCESS_TOKEN |
Zenodo | Optional | Free at zenodo.org — required for private records |
PAPER_SEARCH_MCP_IEEE_API_KEY |
IEEE Xplore | Required to activate | Free at developer.ieee.org |
PAPER_SEARCH_MCP_ACM_API_KEY |
ACM DL | Required to activate | See libraries.acm.org/digital-library/acm-open |
All variables follow the PAPER_SEARCH_MCP_ prefix scheme. Legacy names without the prefix (e.g. CORE_API_KEY, UNPAYWALL_EMAIL) are still supported for backward compatibility.
You can store these in ~/.config/paper-search-mcp/.env (auto-loaded on startup) or use a custom path via PAPER_SEARCH_MCP_ENV_FILE.
What You Get
- Search results: a JSON list of papers with title, authors, abstract, DOI, source, links, etc.
- Downloaded PDF files (when available from OA sources).
- Text content of papers (via the
readtool, when the source supports it).
Usage Examples
In Claude Code, you can simply ask:
- "Find me recent papers on CRISPR base editing"
- "Search arxiv and semantic scholar for transformer attention mechanisms"
- "Download the PDF for arxiv paper 2106.12345"
Platform Capability Matrix
This matrix reflects verified live-integration results. Columns show the highest capability level observed under normal conditions.
| Platform | Search | Download | Read | Notes |
|---|---|---|---|---|
| arXiv | ✅ | ✅ | ✅ | Open API; reliable |
| PubMed | ✅ | ❌ | ⚠️ info-only | Open API; reliable |
| bioRxiv | ✅ | ✅ | ✅ | Open API; reliable |
| medRxiv | ✅ | ✅ | ✅ | Open API; reliable |
| Google Scholar | ⚠️ | ❌ | ❌ | Bot-detection active; set PAPER_SEARCH_MCP_GOOGLE_SCHOLAR_PROXY_URL |
| IACR | ✅ | ✅ | ✅ | Open API; reliable |
| Semantic Scholar | ✅ | ✅ (OA) | ✅ (OA) | Works without key (rate-limited); key improves limits; key rejection (403) retried automatically without key |
| Crossref | ✅ | ❌ | ⚠️ info-only | Open API; reliable |
| OpenAlex | ✅ | ❌ | ⚠️ info-only | Open API; reliable |
| PMC | ✅ | ✅ (OA only) | ✅ (OA only) | OA PDFs only; direct download may be blocked by some proxy environments |
| CORE | ✅ | ✅ (record-dependent) | ✅ (record-dependent) | Free key recommended; connector retries with backoff and falls back to key-less on 401/403 |
| Europe PMC | ✅ | ✅ (OA) | ✅ (OA) | OA PDFs only; direct download may be blocked by some proxy environments |
| dblp | ✅ | ❌ | ⚠️ info-only | Open API; reliable |
| OpenAIRE | ✅ | ❌ | ❌ | Open API; retries 3× with escalating request profiles on transient 403 |
| CiteSeerX | ⚠️ | ✅ (record-dependent) | ⚠️ | API endpoint intermittently unavailable / redirects to web archive |
| DOAJ | ✅ | ⚠️ (URL-dependent) | ⚠️ (URL-dependent) | PDF availability varies by article; free key raises rate limits |
| BASE | ⚠️ | ✅ (record-dependent) | ✅ (record-dependent) | OAI-PMH endpoint requires institutional IP registration; returns empty gracefully otherwise |
| Zenodo | ✅ | ✅ (record-dependent) | ✅ (record-dependent) | Open API; reliable |
| HAL | ✅ | ✅ (record-dependent) | ✅ (record-dependent) | Open API; reliable |
| SSRN | ⚠️ | ⚠️ best-effort | ⚠️ best-effort | 403 bot-detection active; public PDF only |
| Unpaywall | ✅ (DOI lookup) | ❌ | ❌ | Requires PAPER_SEARCH_MCP_UNPAYWALL_EMAIL |
| Sci-Hub (optional) | ⚠️ fallback-only | ✅ | ❌ | Optional; unstable mirrors; user responsibility |
| IEEE Xplore 🔑 | 🚧 skeleton | 🚧 skeleton | 🚧 skeleton | Requires PAPER_SEARCH_MCP_IEEE_API_KEY to activate |
| ACM DL 🔑 | 🚧 skeleton | 🚧 skeleton | 🚧 skeleton | Requires PAPER_SEARCH_MCP_ACM_API_KEY to activate |
✅ = reliable in live tests. ⚠️ = works but subject to upstream instability or access restrictions. ❌ = not supported. 🔑 = key required. 🚧 = skeleton only.
Important Notes
Known Upstream Limitations
Some search failures are caused by external provider instability, not by bugs in this project:
| Source | Symptom | Cause | Workaround |
|---|---|---|---|
| Google Scholar | Returns 0 results / empty HTML | Bot-detection (CAPTCHA) | Set PAPER_SEARCH_MCP_GOOGLE_SCHOLAR_PROXY_URL to a proxy |
| Semantic Scholar | 429 rate-limited responses | Anonymous access rate limit | Set PAPER_SEARCH_MCP_SEMANTIC_SCHOLAR_API_KEY; if key is rejected (403) connector automatically retries without key |
| CORE | 500 / timeout errors | Unauthenticated rate limiting | Set PAPER_SEARCH_MCP_CORE_API_KEY (free); connector retries with exponential backoff and falls back to key-less on 401/403 |
| OpenAIRE | Transient 403 responses | IP-based session rate limiting | Connector retries 3× per profile, escalating: plain session → XML Accept header → raw requests.get with Mozilla UA |
| CiteSeerX | 404 via web archive redirect | PSU endpoint intermittently redirects to archive | No workaround; connector returns empty gracefully |
| BASE | Search returns 0 results | OAI-PMH endpoint requires institutional IP registration | Register at base-search.net for API access; connector returns empty gracefully otherwise |
| SSRN | HTTP 403 | Bot-detection (Cloudflare) | No workaround; connector tries two endpoints and returns a clear message on failure |
| PMC / Europe PMC | PDF download ProxyError | Local proxy blocking direct HTTPS PDF download | Disable proxy or use download_with_fallback instead |
| Unpaywall | Skipped entirely | UNPAYWALL_EMAIL env var not set |
Set PAPER_SEARCH_MCP_UNPAYWALL_EMAIL in ~/.config/paper-search-mcp/.env |
Sci-Hub Notice
- Sci-Hub support is available as an optional connector for users who explicitly choose to enable it, but it should not be treated as the default or recommended full-text path.
- Availability is unstable and mirrors change frequently.
- Legal and policy risks vary by jurisdiction.
- Users are responsible for enabling and using it.
- Open-access and publisher-permitted sources should be tried first whenever possible.
Optional Paid Platform Connectors
- IEEE Xplore and ACM Digital Library connectors are included as opt-in skeletons. They are disabled by default — no API calls are made unless you explicitly configure the corresponding keys.
- Once a key is set, the corresponding source is automatically added to
ALL_SOURCESand its MCP tools are registered at server startup. - Without a key the connectors log a startup warning only — the rest of the server is unaffected.