Paper Search MCP

by openags• 3k•• Scanned•Claim this listing•Request removal
Research & Analysisai scientistarxiv papersmcp serverpaper search

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

Paper Search MCP is an open-source mcp server by openags, written mainly in Python, with 2,962 GitHub stars and the MIT license. Its code was last updated Oct 2, 2026.

Scan summary: scanned Nov 5, 2026 at commit cab1b5c. Seen able to read environment and secrets, connect to the internet. Scan policy

Scanned
Full scan at cab1b5c · Nov 5, 2026
Scanned Builds Boots No undeclared egress Reproducible
Static code scanwarn
Secrets scanpass
Dependency audit107 known vulnerabilitiesfail
Manifestnonewarn
Buildpass
Boot & handshake71 toolspass
Network egresspass
Reproducible (×3)pass

Findings (26)

  • high
    credential-access issue
    Details are available to the maintainer after claiming this listing.
  • high
    credential-access issue
    Details are available to the maintainer after claiming this listing.
  • high
    credential-access issue
    Details are available to the maintainer after claiming this listing.
  • high
    credential-access issue
    Details are available to the maintainer after claiming this listing.
  • high
    dependencies issue
    Details are available to the maintainer after claiming this listing.
  • high
    dependencies issue
    Details are available to the maintainer after claiming this listing.
  • high
    dependencies issue
    Details are available to the maintainer after claiming this listing.
  • high
    dependencies issue
    Details are available to the maintainer after claiming this listing.
  • high
    dependencies issue
    Details are available to the maintainer after claiming this listing.
  • medium
    Turns off TLS certificate checking, allowing traffic interception.
    paper_search_mcp/academic_platforms/sci_hub.py:55
  • medium
    Turns off TLS certificate checking, allowing traffic interception.
    paper_search_mcp/academic_platforms/sci_hub.py:87
  • medium
    dnspython@2.8.0: 1 known vulnerability
    GHSA-45c3-73f7-pv4m
    uv.lock
  • medium
    lxml@6.0.2: 1 known vulnerability
    PYSEC-2026-87
    uv.lock
  • medium
    mcp@1.27.2: 5 known vulnerabilities
    PYSEC-2026-3483, GHSA-5h93-6whr-6q8j, GHSA-84m7-p3x7-pcfv, GHSA-rwrf-2pqf-9j8j, GHSA-w4fh-qvv9-3v23
    uv.lock
  • medium
    pypdf@6.9.2: 50 known vulnerabilities
    PYSEC-2026-3004, PYSEC-2026-3006, PYSEC-2026-3007, PYSEC-2026-3009, PYSEC-2026-3010 +45 more
    uv.lock
  • medium
    soupsieve@2.8.3: 4 known vulnerabilities
    PYSEC-2026-3071, PYSEC-2026-3072, PYSEC-2026-4170, PYSEC-2026-4171
    uv.lock
  • medium
    urllib3@2.6.3: 5 known vulnerabilities
    PYSEC-2026-141, PYSEC-2026-142, PYSEC-2026-4175, PYSEC-2026-4176, PYSEC-2026-4177
    uv.lock
  • low
    fastmcp@3.4.2: 1 known vulnerability
    GHSA-7xgj-8392-5q4r
    uv.lock
  • low
    fastmcp-slim@3.4.2: 1 known vulnerability
    GHSA-7xgj-8392-5q4r
    uv.lock
  • low
    idna@3.11: 1 known vulnerability
    PYSEC-2026-215
    uv.lock
  • low
    joserfc@1.7.5: 1 known vulnerability
    GHSA-9pg5-8c7x-5hfx
    uv.lock
  • low
    opentelemetry-api@1.40.0: 1 known vulnerability
    GHSA-xcq7-p3pf-p88h
    uv.lock
  • low
    pydantic-settings@2.13.1: 1 known vulnerability
    GHSA-4xgf-cpjx-pc3j
    uv.lock
  • low
    pygments@2.19.2: 1 known vulnerability
    PYSEC-2026-2987
    uv.lock
  • low
    requests@2.32.5: 1 known vulnerability
    PYSEC-2026-2275
    uv.lock
  • low
    No manifest declaring network access and environment variables (agent.json)

Network activity

During install
files.pythonhosted.orgpypi.org
While running
No connections

Tools exposed (71)

  • get_search_cache_status

    Show opt-in local search cache settings and entry count, never query contents. Enable/disable with PAPER_SEARCH_MCP_SEARCH_CACHE_ENABLED and restart the server. Defaults to disabled; inspect docs/SEARCH_CACHE.md for TTL/size knobs.

  • clear_search_cache

    Delete all cached search results at the configured local cache path. Works while caching is disabled and never creates a missing database. Does not delete downloaded PDFs or other files. New searches can fill the cache again if enabled; disable caching and restart to stop future writes.

  • search_papers

    Unified top-level search across all configured academic platforms. Args: query: Search query string. max_results_per_source: Max results to fetch from each selected source. sources: Comma-separated source names or 'all'. Available: arxiv,pubmed,biorxiv,medrxi

  • search_wos

    Explicit Web of Science Starter metadata search; never part of 'all'. Requires a runtime WOS_API_KEY (PAPER_SEARCH_MCP_ prefix supported). Native WoS query syntax, max_results 0..100 (at most two requests). No PDF, abstract, or full-text capability. API errors are not empty results.

  • search_scopus

    Explicit Scopus metadata search, never part of 'all'. Requires runtime SCOPUS_API_KEY (PAPER_SEARCH_MCP_ prefix supported). max_results 0..100; at most four pages. COMPLETE requires extra entitlement. sort: relevance, coverDate, citedby-count, creator; date: YYYY or YYYY-YYYY. Field

  • read_scopus_paper

    Retrieve Scopus abstract metadata, with explicit ScienceDirect opt-in. full_text=True attempts one article retrieval by a verified DOI/PII. Returns status full_text, abstract_only, or unavailable, plus reason. Never guesses by title or writes PDFs; typed API failures are not empty text.

  • search_arxiv

    Search academic papers from arXiv. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). sort_by: Sort criterion — 'relevance', 'submittedDate', or 'lastUpdatedDate' (default: 'relevance'). sor

  • search_pubmed

    Search academic papers from PubMed. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). sort: Sort order — 'relevance' or 'pub_date' (default: 'relevance'). Returns: List of paper metadat

  • search_biorxiv

    Search academic papers from bioRxiv. Note: bioRxiv does not provide full-text keyword search. The query may be a DOI, a date range such as '2024-01-01/2024-01-31', a category such as 'bioinformatics', or an empty string for recent papers. Args: query: DOI, date range, categ

  • search_medrxiv

    Search academic papers from medRxiv. Note: medRxiv API filters by category name within the last 30 days, not full-text keyword search. Use a category keyword such as 'infectious_diseases', 'cardiovascular_medicine', 'oncology', etc. Args: query: Category name to filter by (

  • search_google_scholar

    Search academic papers from Google Scholar. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_iacr

    Search academic papers from IACR ePrint Archive. Args: query: Search query string (e.g., 'cryptography', 'secret sharing'). max_results: Maximum number of papers to return (default: 10). fetch_details: Whether to fetch detailed information for each paper (default: True).

  • download_arxiv

    Download PDF of an arXiv paper. Args: paper_id: arXiv paper ID (e.g., '2106.12345'). save_path: Directory to save the PDF (default: './downloads'). Returns: Path to the downloaded PDF file.

  • download_pubmed

    Attempt to download PDF of a PubMed paper. Args: paper_id: PubMed ID (PMID). save_path: Directory to save the PDF (default: './downloads'). Returns: str: Message indicating that direct PDF download is not supported.

  • download_biorxiv

    Download PDF of a bioRxiv paper. Args: paper_id: bioRxiv DOI. save_path: Directory to save the PDF (default: './downloads'). Returns: Path to the downloaded PDF file.

  • download_medrxiv

    Download PDF of a medRxiv paper. Args: paper_id: medRxiv DOI. save_path: Directory to save the PDF (default: './downloads'). Returns: Path to the downloaded PDF file.

  • download_iacr

    Download PDF of an IACR ePrint paper. Args: paper_id: IACR paper ID (e.g., '2009/101'). save_path: Directory to save the PDF (default: './downloads'). Returns: Path to the downloaded PDF file.

  • read_arxiv_paper

    Read and extract text content from an arXiv paper PDF. Args: paper_id: arXiv paper ID (e.g., '2106.12345'). save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: The extracted text content of the paper.

  • read_pubmed_paper

    Read and extract text content from a PubMed paper. Args: paper_id: PubMed ID (PMID). save_path: Directory where the PDF would be saved (unused). Returns: str: Message indicating that direct paper reading is not supported.

  • read_biorxiv_paper

    Read and extract text content from a bioRxiv paper PDF. Args: paper_id: bioRxiv DOI. save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: The extracted text content of the paper.

  • read_medrxiv_paper

    Read and extract text content from a medRxiv paper PDF. Args: paper_id: medRxiv DOI. save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: The extracted text content of the paper.

  • read_iacr_paper

    Read and extract text content from an IACR ePrint paper PDF. Args: paper_id: IACR paper ID (e.g., '2009/101'). save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: The extracted text content of the paper.

  • search_semantic

    Search academic papers from Semantic Scholar. Args: query: Search query string (e.g., 'machine learning'). year: Optional year filter (e.g., '2019', '2016-2020', '2010-', '-2015'). max_results: Maximum number of papers to return (default: 10). Returns: List o

  • download_semantic

    Download PDF of a Semantic Scholar paper. Args: paper_id: Semantic Scholar paper ID, Paper identifier in one of the following formats: - Semantic Scholar ID (e.g., "649def34f8be52c8b66281af98ae884c09aef38b") - DOI:<doi> (e.g., "DOI:10.18653/v1/N18-3011")

  • read_semantic_paper

    Read and extract text content from a Semantic Scholar paper. Args: paper_id: Semantic Scholar paper ID, Paper identifier in one of the following formats: - Semantic Scholar ID (e.g., "649def34f8be52c8b66281af98ae884c09aef38b") - DOI:<doi> (e.g., "DOI:10.18653/v1

  • search_crossref

    Search academic papers from CrossRef database. CrossRef is a scholarly infrastructure organization that provides persistent identifiers (DOIs) for scholarly content and metadata. It's one of the largest citation databases covering millions of academic papers, journals, books,

  • get_crossref_paper_by_doi

    Get a specific paper from CrossRef by its DOI. Args: doi: Digital Object Identifier (e.g., '10.1038/nature12373'). Returns: Paper metadata in dictionary format, or empty dict if not found. Example: get_crossref_paper_by_doi("10.1038/nature12373")

  • download_crossref

    Attempt to download PDF of a CrossRef paper. Args: paper_id: CrossRef DOI (e.g., '10.1038/nature12373'). save_path: Directory to save the PDF (default: './downloads'). Returns: str: Message indicating that direct PDF download is not supported. Note:

  • download_scihub

    Download paper PDF via Sci-Hub (optional fallback connector). Args: identifier: DOI, title, PMID, or paper URL. save_path: Directory to save the PDF. base_url: Sci-Hub mirror URL. Returns: Downloaded PDF path on success; error message on failure.

  • download_with_fallback

    Try source-native download, OA repositories, Unpaywall, then optional Sci-Hub. Args: source: Source name (arxiv, biorxiv, medrxiv, iacr, semantic, crossref, pubmed, pmc, core, europepmc, citeseerx, doaj, base, zenodo, hal, ssrn). paper_id: Source-native paper identifier.

  • read_crossref_paper

    Attempt to read and extract text content from a CrossRef paper. Args: paper_id: CrossRef DOI (e.g., '10.1038/nature12373'). save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: Message indicating that direct paper reading is not

  • search_openalex

    Search academic papers from OpenAlex. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). filter: OpenAlex filter string. Examples: - 'open_access.is_oa:true,from_publication_

  • extract_sections

    Split an already-downloaded PDF into heuristic heading-based sections. pdf_path must be relative to PAPER_SEARCH_MCP_SECTION_PDF_ROOT (default ./downloads); absolute paths, traversal and symlinks are rejected. Reads at most 20 MiB, 100 pages, 200000 characters and 100 sections, with a 6

  • get_citing_papers

    Get one hop of papers citing a DOI or OpenAlex work ID (never a title). Most-cited first. Limits: 500 results, 5 pages, 8 HTTP requests, 60 seconds. The seed lookup and redirects consume requests; no retries or enrichment. Returns papers with pagination/truncation metadata. API failures

  • get_referenced_papers

    Get one hop of papers referenced by a DOI or OpenAlex work ID. Same budgets/error contract as get_citing_papers. Missing OpenAlex reference coverage may yield an empty successful list; it does not prove no references exist in the original paper. No title guessing or multi-hop graph trav

  • search_pmc

    Search academic papers from PubMed Central (PMC). Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_core

    Search academic papers from CORE. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_europepmc

    Search academic papers from Europe PMC. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_dblp

    Search academic papers from dblp computer science bibliography. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_openaire

    Search academic papers from OpenAIRE European Open Access infrastructure. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_citeseerx

    Search academic papers from CiteSeerX digital library. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_doaj

    Search academic papers from DOAJ (Directory of Open Access Journals). Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_base

    Search academic papers from BASE (Bielefeld Academic Search Engine). Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_zenodo

    Search academic papers from Zenodo open repository. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_hal

    Search academic papers from HAL open archive. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum number of papers to return (default: 10). Returns: List of paper metadata in dictionary format.

  • search_openreview

    Search public OpenReview API v2 papers anonymously (0..1000 results). Reviews, replies, private notes and API v1-only records are excluded. Up to 1000 hits are scanned in 100-record pages; errors are reported.

  • download_openreview

    Download a public OpenReview PDF by note ID or official forum URL. Verifies public paper identity, PDF structure and first-page title. Does not use authentication or follow redirects; files over 50 MiB are rejected.

  • read_openreview_paper

    Download, validate and read an anonymously accessible OpenReview PDF.

  • search_ssrn

    Search SSRN-indexed metadata through OpenAlex. Uses bounded cursor pagination (0..1000 results), with explicit API errors. Direct public SSRN download/read is separate and best-effort. Args: query: Search query string (e.g., 'machine learning'). max_results: Maximum num

  • search_unpaywall

    Lookup a DOI via Unpaywall and return OA metadata. Unpaywall is DOI-centric and does not support generic keyword search. This tool extracts the first DOI from `query` and returns at most one record. Args: query: DOI string or text containing a DOI. max_results: Kept for

  • read_dblp_paper

    Attempt to read and extract text content from a dblp paper. Note: dblp doesn't provide direct paper content access. This function returns an informative message. Args: paper_id: dblp paper identifier. save_path: Directory where the PDF would be saved (unused). Retur

  • download_dblp

    Download PDF for a paper from dblp. Note: dblp doesn't provide direct PDF access. This function returns an informative message. Args: paper_id: dblp paper identifier. save_path: Directory to save the PDF (default: './downloads'). Returns: str: Message indica

  • read_openaire_paper

    Attempt to read and extract text content from an OpenAIRE paper. Args: paper_id: OpenAIRE paper identifier. save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: Extracted text or error message.

  • download_openaire

    Download PDF for a paper from OpenAIRE. Args: paper_id: OpenAIRE paper identifier. save_path: Directory to save the PDF (default: './downloads'). Returns: str: Path to downloaded PDF or error message.

  • read_citeseerx_paper

    Read and extract text content from a CiteSeerX paper. Args: paper_id: CiteSeerX paper identifier. save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: Extracted text or fallback abstract/error message.

  • download_citeseerx

    Download PDF for a paper from CiteSeerX. Args: paper_id: CiteSeerX paper identifier. save_path: Directory to save the PDF (default: './downloads'). Returns: str: Path to downloaded PDF or error message.

  • read_doaj_paper

    Read and extract text content from a DOAJ paper. Args: paper_id: DOAJ paper identifier. save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: Extracted text content.

  • download_doaj

    Download PDF for a paper from DOAJ. Args: paper_id: DOAJ paper identifier. save_path: Directory to save the PDF (default: './downloads'). Returns: str: Path to downloaded PDF.

  • read_base_paper

    Read and extract text content from a BASE paper. Args: paper_id: BASE paper identifier. save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: Extracted text content.

  • download_base

    Download PDF for a paper from BASE. Args: paper_id: BASE paper identifier. save_path: Directory to save the PDF (default: './downloads'). Returns: str: Path to downloaded PDF.

  • read_zenodo_paper

    Read and extract text content from a Zenodo paper. Args: paper_id: Zenodo paper identifier. save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: Extracted text content.

  • download_zenodo

    Download PDF for a paper from Zenodo. Args: paper_id: Zenodo paper identifier. save_path: Directory to save the PDF (default: './downloads'). Returns: str: Path to downloaded PDF.

  • read_hal_paper

    Read and extract text content from a HAL paper. Args: paper_id: HAL paper identifier. save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: Extracted text content.

  • download_hal

    Download PDF for a paper from HAL. Args: paper_id: HAL paper identifier. save_path: Directory to save the PDF (default: './downloads'). Returns: str: Path to downloaded PDF.

  • read_ssrn_paper

    Read paper content from SSRN. Note: SSRN connector is metadata-only and read is not supported. Args: paper_id: SSRN paper identifier. save_path: Directory where the PDF is/will be saved (unused). Returns: str: Error message from metadata-only SSRN connector.

  • download_ssrn

    Download PDF for a paper from SSRN. Note: SSRN connector is metadata-only and download is not supported. Args: paper_id: SSRN paper identifier. save_path: Directory to save the PDF (unused). Returns: str: Error message from metadata-only SSRN connector.

  • read_openalex_paper

    Attempt to read and extract text content from an OpenAlex paper. Args: paper_id: OpenAlex paper ID. save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: Message indicating that direct paper reading is not supported natively.

  • download_openalex

    Download PDF for a paper from OpenAlex. Args: paper_id: OpenAlex paper ID. save_path: Directory to save the PDF (default: './downloads'). Returns: str: Error message, typically OpenAlex relies on extracted pdf_url instead of direct downloads.

  • search_acm

    Search ACM Digital Library for papers. Args: query: Search query string. max_results: Maximum number of results (default: 10). Returns: List of paper dicts from ACM DL.

  • download_acm

    Download a PDF from ACM Digital Library. dl.acm.org sits behind a Cloudflare browser challenge that blocks scripted downloads; on a block, raises with the browser URL and a download_with_fallback suggestion. Args: paper_id: ACM DOI (e.g. '10.1145/...'). save_path: Direc

  • read_acm_paper

    Download and read an ACM Digital Library paper. Args: paper_id: ACM DOI (e.g. '10.1145/...'). save_path: Directory where the PDF is/will be saved (default: './downloads'). Returns: str: Extracted text content.

Automated result for the commit shown. See our scan policy. View the scan log

Maintainers can claim the listing to rescan, or dispute a result.

Paper Search MCP alternatives

View more →

Similar mcp servers in Research & Analysis, ranked by GitHub stars. Compare licence, recent activity and scan status before you choose.

NameStarsLicenceLast updatedScan
Paper Search MCP (this page)
openags
3kMITOct 2, 2026Scanned, no flagged issues
Worldmonitor
koala73
90kAGPL-3.0Nov 1, 2026Scanned, no flagged issues
GPT Researcher
assafelovic
30kApache-2.0Oct 10, 2026Scanned, no flagged issues
Auto Claude Code Research In Sleep
wanshuiyin
18kMITNov 1, 2026Scanned, no flagged issues
Deep Research
u14app
4.7kMITJun 18, 2026Scanned, no flagged issues
MCP Server Chart
antvis
4.4kMITAug 27, 2026Scanned, no flagged issues