Paper SearchBLOCK
MCP, CLI, Skills for searching and downloading academic papers from multiple sources like arXiv, PubMed, bioRxiv, etc.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
A Model Context Protocol (MCP) server for searching and downloading academic papers from multiple sources. The project follows a free-first strategy: prioritize open and public data sources, support optional API keys when they improve stability or coverage, and keep source-specific connectors extensible for advanced users.
[](https://smithery.ai/server/@openags/paper-search-mcp)
Table of Contents
- Overview
- Project Principles
- MCP Authorization Compatibility
- Features
- Source Strategy
- Sci-Hub Notice
- Installation
- Claude Code (Skill)
- Method 1 — Smithery
- Method 2 — uvx
- Method 3 — uv
- Method 4 — pip
- Method 5 — npx
- Method 6 — Docker
- Method 7 — Clone & run from source
- Environment Variables
- Contributing
- Demo
- Star History
- License
- TODO
Overview
paper-search-mcp is a Python-based tool for searching and downloading academic papers from various platforms. It provides tools for searching papers, downloading PDFs, and extracting text, making it ideal for researchers and AI-driven workflows. It can be used a
ec10f4995059OBSERVED · 2026-09-23Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add paper-search-mcp --env ACM_API_KEY=${ACM_API_KEY} --env IEEE_API_KEY=${IEEE_API_KEY} -- uvx paper-search-mcp{
"mcpServers": {
"paper-search-mcp": {
"command": "uvx",
"args": [
"paper-search-mcp"
],
"env": {
"ACM_API_KEY": "${ACM_API_KEY}",
"IEEE_API_KEY": "${IEEE_API_KEY}"
}
}
}
}Exposed tools (63)
63 read · 0 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
download_acm | read | Download a PDF from ACM Digital Library. Requires PAPER_SEARCH_MCP_ACM_API_KEY (or ACM_API_KEY) and institutional access. |
download_arxiv | read | Download PDF of an arXiv paper. |
download_base | read | Download PDF for a paper from BASE. |
download_biorxiv | read | Download PDF of a bioRxiv paper. |
download_citeseerx | read | Download PDF for a paper from CiteSeerX. |
download_crossref | read | Attempt to download PDF of a CrossRef paper. |
download_dblp | read | Download PDF for a paper from dblp. |
download_doaj | read | Download PDF for a paper from DOAJ. |
download_hal | read | Download PDF for a paper from HAL. |
download_iacr | read | Download PDF of an IACR ePrint paper. |
download_ieee | read | Download a PDF from IEEE Xplore. Requires PAPER_SEARCH_MCP_IEEE_API_KEY (or IEEE_API_KEY) and institutional access. |
download_medrxiv | read | Download PDF of a medRxiv paper. |
download_openaire | read | Download PDF for a paper from OpenAIRE. |
download_openalex | read | Download PDF for a paper from OpenAlex. |
download_pubmed | read | Attempt to download PDF of a PubMed paper. |
download_scihub | read | Download paper PDF via Sci-Hub (optional fallback connector). |
download_semantic | read | Download PDF of a Semantic Scholar paper. |
download_ssrn | read | Download PDF for a paper from SSRN. |
download_with_fallback | read | Try source-native download, OA repositories, Unpaywall, then optional Sci-Hub. |
download_zenodo | read | Download PDF for a paper from Zenodo. |
get_crossref_paper_by_doi | read | Get a specific paper from CrossRef by its DOI. |
read_acm_paper | read | Download and read an ACM Digital Library paper. Requires PAPER_SEARCH_MCP_ACM_API_KEY (or ACM_API_KEY). |
read_arxiv_paper | read | Read and extract text content from an arXiv paper PDF. |
read_base_paper | read | Read and extract text content from a BASE paper. |
read_biorxiv_paper | read | Read and extract text content from a bioRxiv paper PDF. |
read_citeseerx_paper | read | Read and extract text content from a CiteSeerX paper. |
read_crossref_paper | read | Attempt to read and extract text content from a CrossRef paper. |
read_dblp_paper | read | Attempt to read and extract text content from a dblp paper. |
read_doaj_paper | read | Read and extract text content from a DOAJ paper. |
read_hal_paper | read | Read and extract text content from a HAL paper. |
read_iacr_paper | read | Read and extract text content from an IACR ePrint paper PDF. |
read_ieee_paper | read | Download and read an IEEE Xplore paper. Requires PAPER_SEARCH_MCP_IEEE_API_KEY (or IEEE_API_KEY). |
read_medrxiv_paper | read | Read and extract text content from a medRxiv paper PDF. |
read_openaire_paper | read | Attempt to read and extract text content from an OpenAIRE paper. |
read_openalex_paper | read | Attempt to read and extract text content from an OpenAlex paper. |
read_pubmed_paper | read | Read and extract text content from a PubMed paper. |
read_semantic_paper | read | Read and extract text content from a Semantic Scholar paper. |
read_ssrn_paper | read | Read paper content from SSRN. |
read_zenodo_paper | read | Read and extract text content from a Zenodo paper. |
search_acm | read | Search ACM Digital Library for papers. Requires PAPER_SEARCH_MCP_ACM_API_KEY (or ACM_API_KEY). |
search_arxiv | read | Search academic papers from arXiv. |
search_base | read | Search academic papers from BASE (Bielefeld Academic Search Engine). |
search_biorxiv | read | Search academic papers from bioRxiv. |
search_citeseerx | read | Search academic papers from CiteSeerX digital library. |
search_core | read | Search academic papers from CORE. |
search_crossref | read | Search academic papers from CrossRef database. |
search_dblp | read | Search academic papers from dblp computer science bibliography. |
search_doaj | read | Search academic papers from DOAJ (Directory of Open Access Journals). |
search_europepmc | read | Search academic papers from Europe PMC. |
search_google_scholar | read | Search academic papers from Google Scholar. |
search_hal | read | Search academic papers from HAL open archive. |
search_iacr | read | Search academic papers from IACR ePrint Archive. |
search_ieee | read | Search IEEE Xplore for papers. Requires PAPER_SEARCH_MCP_IEEE_API_KEY (or IEEE_API_KEY). |
search_medrxiv | read | Search academic papers from medRxiv. |
search_openaire | read | Search academic papers from OpenAIRE European Open Access infrastructure. |
search_openalex | read | Search academic papers from OpenAlex. |
search_papers | read | Unified top-level search across all configured academic platforms. |
search_pmc | read | Search academic papers from PubMed Central (PMC). |
search_pubmed | read | Search academic papers from PubMed. |
search_semantic | read | Search academic papers from Semantic Scholar. |
search_ssrn | read | Search metadata records from SSRN. |
search_unpaywall | read | Lookup a DOI via Unpaywall and return OA metadata. |
search_zenodo | read | Search academic papers from Zenodo open repository. |
Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- declared (7 observation(s))
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (11)
response = self.session.get(pdf_url, verify=False, timeout=30)
response = self.session.get(search_url, verify=False, timeout=20)
pdf_hash = hashlib.md5(response.content).hexdigest()[:8]
pdf_hash = hashlib.md5(response.content).hexdigest()[:8]
proxy_searcher = GoogleScholarSearcher(proxy_url="http://127.0.0.1:7890")
self.assertEqual(proxy_searcher.session.proxies.get("http"), "http://127.0.0.1:7890")self.assertEqual(proxy_searcher.session.proxies.get("https"), "http://127.0.0.1:7890")verify=False,
| OpenAlex | ✅ | ❌ | ⚠️ info-only | Open API; free API key improves daily limits |
curl -LsSf https://astral.sh/uv/install.sh | sh
curl -LsSf https://astral.sh/uv/install.sh | sh
Gates applied: no_behavioural_pass.
ec10f4995059full audit observations/trust-audit/mcp-server/openags__paper-search.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-09-23 | ec10f4995059 | BLOCK | D | 69 | source changed, verdict held |
| 2026-09-18 | b02abc9ff913 | BLOCK | D | 69 | first audit |
Questions
What is the Paper Search MCP server?
MCP, CLI, Skills for searching and downloading academic papers from multiple sources like arXiv, PubMed, bioRxiv, etc.
What tools does Paper Search expose?
63 in total: 63 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is Paper Search safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (69/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What credentials does Paper Search need?
It reads ACM_API_KEY and IEEE_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Paper Search run?
It speaks sse, stdio and streamable-http, so it runs as a local process your client starts. It is published on PyPI as paper-search-mcp.
How current is this page?
The grade is for one exact copy of the source (ec10f4995059), read on 2026-09-23. The repository is watched and re-audited when it changes.