Atlas / MCP servers / openags / Paper Search

Paper SearchBLOCK

mcp/openags/paper-search

MCP, CLI, Skills for searching and downloading academic papers from multiple sources like arXiv, PubMed, bioRxiv, etc.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
63 63r · 0w · 0d
Transport
sse · stdio · streamable-http
License
MIT
Stars
2,682
01

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

Read from source at commit ec10f4995059OBSERVED · 2026-09-23
02

Connect

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-code
claude mcp add paper-search-mcp --env ACM_API_KEY=${ACM_API_KEY} --env IEEE_API_KEY=${IEEE_API_KEY} -- uvx paper-search-mcp
claude-desktop
{
  "mcpServers": {
    "paper-search-mcp": {
      "command": "uvx",
      "args": [
        "paper-search-mcp"
      ],
      "env": {
        "ACM_API_KEY": "${ACM_API_KEY}",
        "IEEE_API_KEY": "${IEEE_API_KEY}"
      }
    }
  }
}
03

Exposed tools (63)

63 read · 0 write · 0 destructive.

ToolRiskDescription
download_acmreadDownload a PDF from ACM Digital Library. Requires PAPER_SEARCH_MCP_ACM_API_KEY (or ACM_API_KEY) and institutional access.
download_arxivreadDownload PDF of an arXiv paper.
download_basereadDownload PDF for a paper from BASE.
download_biorxivreadDownload PDF of a bioRxiv paper.
download_citeseerxreadDownload PDF for a paper from CiteSeerX.
download_crossrefreadAttempt to download PDF of a CrossRef paper.
download_dblpreadDownload PDF for a paper from dblp.
download_doajreadDownload PDF for a paper from DOAJ.
download_halreadDownload PDF for a paper from HAL.
download_iacrreadDownload PDF of an IACR ePrint paper.
download_ieeereadDownload a PDF from IEEE Xplore. Requires PAPER_SEARCH_MCP_IEEE_API_KEY (or IEEE_API_KEY) and institutional access.
download_medrxivreadDownload PDF of a medRxiv paper.
download_openairereadDownload PDF for a paper from OpenAIRE.
download_openalexreadDownload PDF for a paper from OpenAlex.
download_pubmedreadAttempt to download PDF of a PubMed paper.
download_scihubreadDownload paper PDF via Sci-Hub (optional fallback connector).
download_semanticreadDownload PDF of a Semantic Scholar paper.
download_ssrnreadDownload PDF for a paper from SSRN.
download_with_fallbackreadTry source-native download, OA repositories, Unpaywall, then optional Sci-Hub.
download_zenodoreadDownload PDF for a paper from Zenodo.
get_crossref_paper_by_doireadGet a specific paper from CrossRef by its DOI.
read_acm_paperreadDownload and read an ACM Digital Library paper. Requires PAPER_SEARCH_MCP_ACM_API_KEY (or ACM_API_KEY).
read_arxiv_paperreadRead and extract text content from an arXiv paper PDF.
read_base_paperreadRead and extract text content from a BASE paper.
read_biorxiv_paperreadRead and extract text content from a bioRxiv paper PDF.
read_citeseerx_paperreadRead and extract text content from a CiteSeerX paper.
read_crossref_paperreadAttempt to read and extract text content from a CrossRef paper.
read_dblp_paperreadAttempt to read and extract text content from a dblp paper.
read_doaj_paperreadRead and extract text content from a DOAJ paper.
read_hal_paperreadRead and extract text content from a HAL paper.
read_iacr_paperreadRead and extract text content from an IACR ePrint paper PDF.
read_ieee_paperreadDownload and read an IEEE Xplore paper. Requires PAPER_SEARCH_MCP_IEEE_API_KEY (or IEEE_API_KEY).
read_medrxiv_paperreadRead and extract text content from a medRxiv paper PDF.
read_openaire_paperreadAttempt to read and extract text content from an OpenAIRE paper.
read_openalex_paperreadAttempt to read and extract text content from an OpenAlex paper.
read_pubmed_paperreadRead and extract text content from a PubMed paper.
read_semantic_paperreadRead and extract text content from a Semantic Scholar paper.
read_ssrn_paperreadRead paper content from SSRN.
read_zenodo_paperreadRead and extract text content from a Zenodo paper.
search_acmreadSearch ACM Digital Library for papers. Requires PAPER_SEARCH_MCP_ACM_API_KEY (or ACM_API_KEY).
search_arxivreadSearch academic papers from arXiv.
search_basereadSearch academic papers from BASE (Bielefeld Academic Search Engine).
search_biorxivreadSearch academic papers from bioRxiv.
search_citeseerxreadSearch academic papers from CiteSeerX digital library.
search_corereadSearch academic papers from CORE.
search_crossrefreadSearch academic papers from CrossRef database.
search_dblpreadSearch academic papers from dblp computer science bibliography.
search_doajreadSearch academic papers from DOAJ (Directory of Open Access Journals).
search_europepmcreadSearch academic papers from Europe PMC.
search_google_scholarreadSearch academic papers from Google Scholar.
search_halreadSearch academic papers from HAL open archive.
search_iacrreadSearch academic papers from IACR ePrint Archive.
search_ieeereadSearch IEEE Xplore for papers. Requires PAPER_SEARCH_MCP_IEEE_API_KEY (or IEEE_API_KEY).
search_medrxivreadSearch academic papers from medRxiv.
search_openairereadSearch academic papers from OpenAIRE European Open Access infrastructure.
search_openalexreadSearch academic papers from OpenAlex.
search_papersreadUnified top-level search across all configured academic platforms.
search_pmcreadSearch academic papers from PubMed Central (PMC).
search_pubmedreadSearch academic papers from PubMed.
search_semanticreadSearch academic papers from Semantic Scholar.
search_ssrnreadSearch metadata records from SSRN.
search_unpaywallreadLookup a DOI via Unpaywall and return OA metadata.
search_zenodoreadSearch academic papers from Zenodo open repository.
04

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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (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)

HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
paper_search_mcp/academic_platforms/sci_hub.py:55
response = self.session.get(pdf_url, verify=False, timeout=30)
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
paper_search_mcp/academic_platforms/sci_hub.py:87
response = self.session.get(search_url, verify=False, timeout=20)
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
paper_search_mcp/academic_platforms/sci_hub.py:151
pdf_hash = hashlib.md5(response.content).hexdigest()[:8]
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
paper_search_mcp/academic_platforms/sci_hub.py:157
pdf_hash = hashlib.md5(response.content).hexdigest()[:8]
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_google_scholar.py:49
proxy_searcher = GoogleScholarSearcher(proxy_url="http://127.0.0.1:7890")
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_google_scholar.py:50
self.assertEqual(proxy_searcher.session.proxies.get("http"), "http://127.0.0.1:7890")
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_google_scholar.py:51
self.assertEqual(proxy_searcher.session.proxies.get("https"), "http://127.0.0.1:7890")
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
tests/test_openaire.py:26
verify=False,
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:102
| OpenAlex | ✅ | ❌ | ⚠️ info-only | Open API; free API key improves daily limits |
Why it matters. asks the agent to read credentials
LOWSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
README.md:268
curl -LsSf https://astral.sh/uv/install.sh | sh
LOWSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
README.md:425
curl -LsSf https://astral.sh/uv/install.sh | sh

Gates applied: no_behavioural_pass.

Audited 2026-09-23 · audit v0.4.1 · source sha ec10f4995059full audit observations/trust-audit/mcp-server/openags__paper-search.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-09-23ec10f4995059BLOCKD69source changed, verdict held
2026-09-18b02abc9ff913BLOCKD69first audit
06

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.

Advertisement