CLI tool for searching and downloading academic papers from 20+ sources.
Project description
paper-search-cli
A CLI tool for searching and downloading academic papers from 20+ sources. Also works as a Claude Code Skill for AI-assisted research.
Features
- 20+ academic sources: arXiv, PubMed, Semantic Scholar, CrossRef, OpenAlex, CORE, bioRxiv, medRxiv, and more
- Concurrent search: searches multiple sources in parallel with automatic deduplication
- Smart download: multi-stage fallback chain (source -> OA repositories -> Unpaywall -> Sci-Hub)
- PDF text extraction: download and extract text from papers in one step
- JSON output: machine-readable output for scripting and AI integration
- Claude Code Skill: use as a slash command in Claude Code
Installation
pip
pip install paper-search-cli
uv
uv tool install paper-search-cli
From source
git clone https://github.com/openags/paper-search-cli.git
cd paper-search-cli
uv sync
Docker
docker build -t paper-search .
docker run paper-search search "transformer architecture"
Usage
Search papers
# Search all sources
paper-search search "transformer architecture"
# Search specific sources
paper-search search "quantum computing" --sources arxiv,semantic --max-results 5
# Filter by year (Semantic Scholar)
paper-search search "large language models" --sources semantic --year 2023-2024
# JSON output (for scripting / AI tools)
paper-search search "CRISPR" --json
Download a paper
paper-search download 2106.12345 --source arxiv
paper-search download 2106.12345 --source arxiv --output-dir ./papers
Download with fallback chain
paper-search download-fallback 2106.12345 --source arxiv \
--doi 10.48550/arXiv.2106.12345 --title "Paper Title"
Read (download + extract text)
paper-search read 2106.12345 --source arxiv
List available sources
paper-search sources
Claude Code Skill
This tool can be used as a Claude Code Skill for AI-assisted academic research.
Setup
Copy the skill file to your project:
mkdir -p .claude/commands
cp claude-skill/paper-search.md .claude/commands/paper-search.md
Or for global access (all projects):
mkdir -p ~/.claude/commands
cp claude-skill/paper-search.md ~/.claude/commands/paper-search.md
Then in Claude Code, use:
/paper-search transformer architecture in NLP
Available Sources
| Source | Search | Download | Read | Notes |
|---|---|---|---|---|
| arXiv | yes | yes | yes | Open API, reliable |
| PubMed | yes | no | no | Metadata only |
| bioRxiv | yes | yes | yes | Category-based search |
| medRxiv | yes | yes | yes | Category-based search |
| Google Scholar | limited | no | no | Bot-detection active |
| IACR | yes | yes | yes | Cryptography focus |
| Semantic Scholar | yes | OA | OA | Year filter support |
| CrossRef | yes | no | no | DOI metadata |
| OpenAlex | yes | no | no | Broad metadata |
| PMC | yes | OA | OA | Open access only |
| CORE | yes | yes | yes | API key recommended |
| Europe PMC | yes | OA | OA | Open access only |
| dblp | yes | no | no | CS bibliography |
| OpenAIRE | yes | no | no | EU research |
| CiteSeerX | limited | yes | limited | Intermittent |
| DOAJ | yes | limited | limited | Open access journals |
| BASE | limited | yes | yes | OAI-PMH based |
| Zenodo | yes | yes | yes | Record-dependent |
| HAL | yes | yes | yes | French archives |
| SSRN | limited | limited | limited | Metadata only |
| Unpaywall | DOI | no | no | DOI lookup only |
| Sci-Hub | limited | yes | no | Optional fallback |
| IEEE | key | key | key | Requires API key |
| ACM | key | key | key | Requires API key |
Environment Variables
All environment variables are optional. Set them in a .env file or export them.
| Variable | Purpose |
|---|---|
PAPER_SEARCH_UNPAYWALL_EMAIL |
Required for Unpaywall DOI resolution |
PAPER_SEARCH_CORE_API_KEY |
Better rate limits for CORE |
PAPER_SEARCH_SEMANTIC_SCHOLAR_API_KEY |
Better rate limits for Semantic Scholar |
PAPER_SEARCH_ZENODO_ACCESS_TOKEN |
Access embargoed Zenodo records |
PAPER_SEARCH_DOAJ_API_KEY |
Higher rate limits for DOAJ |
PAPER_SEARCH_GOOGLE_SCHOLAR_PROXY_URL |
Proxy for Google Scholar |
PAPER_SEARCH_IEEE_API_KEY |
Enable IEEE Xplore |
PAPER_SEARCH_ACM_API_KEY |
Enable ACM Digital Library |
Legacy PAPER_SEARCH_MCP_* prefix is also supported for backward compatibility.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file paper_search_cli-1.0.2.tar.gz.
File metadata
- Download URL: paper_search_cli-1.0.2.tar.gz
- Upload date:
- Size: 125.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aaef30540d3d6447ba62dc502224f5771c48c64c8d04a23c677985c81e2e1a41
|
|
| MD5 |
7364b8d6fcf1bf4a2e55f1f656b16f22
|
|
| BLAKE2b-256 |
1bead294510e46da14e0c9c84a398493e00271c96fa7ec97647987f842bb540a
|
Provenance
The following attestation bundles were made for paper_search_cli-1.0.2.tar.gz:
Publisher:
publish.yml on openags/paper-search-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
paper_search_cli-1.0.2.tar.gz -
Subject digest:
aaef30540d3d6447ba62dc502224f5771c48c64c8d04a23c677985c81e2e1a41 - Sigstore transparency entry: 1156707758
- Sigstore integration time:
-
Permalink:
openags/paper-search-cli@eac26e540e5f3a986eebaf604dccca8fe9edd779 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/openags
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@eac26e540e5f3a986eebaf604dccca8fe9edd779 -
Trigger Event:
push
-
Statement type:
File details
Details for the file paper_search_cli-1.0.2-py3-none-any.whl.
File metadata
- Download URL: paper_search_cli-1.0.2-py3-none-any.whl
- Upload date:
- Size: 104.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66aea0f83bb443612c5f17c77bdc455ce319264f56a52beee54bb43b4d649ea9
|
|
| MD5 |
5fe1601eda4ae43f7c45ca6616e584a6
|
|
| BLAKE2b-256 |
09ad8cc832277545285deae1867e6c2bba388eaec86361a1ece954bfa88cb583
|
Provenance
The following attestation bundles were made for paper_search_cli-1.0.2-py3-none-any.whl:
Publisher:
publish.yml on openags/paper-search-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
paper_search_cli-1.0.2-py3-none-any.whl -
Subject digest:
66aea0f83bb443612c5f17c77bdc455ce319264f56a52beee54bb43b4d649ea9 - Sigstore transparency entry: 1156707831
- Sigstore integration time:
-
Permalink:
openags/paper-search-cli@eac26e540e5f3a986eebaf604dccca8fe9edd779 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/openags
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@eac26e540e5f3a986eebaf604dccca8fe9edd779 -
Trigger Event:
push
-
Statement type: