Paper Search
STDIOAcademic paper search and download server across 13 platforms including arXiv, PubMed, Google Scholar
Academic paper search and download server across 13 platforms including arXiv, PubMed, Google Scholar
A Node.js Model Context Protocol (MCP) server for searching and downloading academic papers from multiple sources, including arXiv, Web of Science, PubMed, Google Scholar, Sci-Hub, ScienceDirect, Springer, Wiley, Scopus, and 13 academic platforms in total.
| Platform | Search | Download | Full Text | Citations | API Key | Special Features | 
|---|---|---|---|---|---|---|
| arXiv | ✅ | ✅ | ✅ | ❌ | ❌ | Physics/CS preprints | 
| Web of Science | ✅ | ❌ | ❌ | ✅ | ✅ Required | High-quality journal index | 
| PubMed | ✅ | ❌ | ❌ | ❌ | 🟡 Optional | Biomedical literature | 
| Google Scholar | ✅ | ❌ | ❌ | ✅ | ❌ | Comprehensive academic search | 
| bioRxiv | ✅ | ✅ | ✅ | ❌ | ❌ | Biology preprints | 
| medRxiv | ✅ | ✅ | ✅ | ❌ | ❌ | Medical preprints | 
| Semantic Scholar | ✅ | ✅ | ❌ | ✅ | 🟡 Optional | AI semantic search | 
| IACR ePrint | ✅ | ✅ | ✅ | ❌ | ❌ | Cryptography papers | 
| Sci-Hub | ✅ | ✅ | ❌ | ❌ | ❌ | Universal paper access via DOI | 
| ScienceDirect | ✅ | ❌ | ❌ | ✅ | ✅ Required | Elsevier's full-text database | 
| Springer Nature | ✅ | ✅* | ❌ | ❌ | ✅ Required | Dual API: Meta v2 & OpenAccess | 
| Wiley | ✅ | ✅ | ❌ | ❌ | ✅ Required | Text and Data Mining API | 
| Scopus | ✅ | ❌ | ❌ | ✅ | ✅ Required | Largest citation database | 
✅ Supported | ❌ Not supported | 🟡 Optional | ✅* Open Access only
# Clone repository git clone https://github.com/your-username/paper-search-mcp-nodejs.git cd paper-search-mcp-nodejs # Install dependencies npm install # Copy environment template cp .env.example .env
Get Web of Science API Key
.env fileGet PubMed API Key (Optional)
Configure Environment Variables
# Edit .env file WOS_API_KEY=your_actual_api_key_here WOS_API_VERSION=v1 # PubMed API key (optional, recommended for better performance) PUBMED_API_KEY=your_ncbi_api_key_here # Semantic Scholar API key (optional, increases rate limits) SEMANTIC_SCHOLAR_API_KEY=your_semantic_scholar_api_key # Elsevier API key (required for ScienceDirect and Scopus) ELSEVIER_API_KEY=your_elsevier_api_key # Springer Nature API keys (required for Springer) SPRINGER_API_KEY=your_springer_api_key # For Metadata API v2 # Optional: Separate key for OpenAccess API (if different from main key) SPRINGER_OPENACCESS_API_KEY=your_openaccess_api_key # Wiley TDM token (required for Wiley) WILEY_TDM_TOKEN=your_wiley_tdm_token
# Direct run with npx (most common MCP deployment) npx -y paper-search-mcp-nodejs # Or install globally npm install -g paper-search-mcp-nodejs paper-search-mcp
# Build TypeScript code npm run build # Start server npm start # Or run in development mode npm run dev
Add the following configuration to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "paper-search-nodejs": { "command": "npx", "args": ["-y", "paper-search-mcp-nodejs"], "env": { "WOS_API_KEY": "your_web_of_science_api_key" } } } }
{ "mcpServers": { "paper_search_nodejs": { "command": "node", "args": ["/path/to/paper-search-mcp-nodejs/dist/server.js"], "env": { "WOS_API_KEY": "your_web_of_science_api_key" } } } }
search_papersSearch academic papers across multiple platforms
// Random platform selection (default behavior) search_papers({ query: "machine learning", platform: "all", // Randomly selects one platform for efficiency maxResults: 10, year: "2023", sortBy: "date" }) // Search specific platform search_papers({ query: "quantum computing", platform: "webofscience", // Target specific platform maxResults: 5 })
Platform Selection Behavior:
platform: "all" - Randomly selects one platform for efficient, focused resultsarxiv, webofscience/wos, pubmed, biorxiv, medrxiv, semantic, iacr, googlescholar/scholar, scihub, sciencedirect, springer, wiley, scopussearch_arxivSearch arXiv preprints specifically
search_arxiv({ query: "transformer neural networks", maxResults: 10, category: "cs.AI", author: "Attention" })
search_webofscienceSearch Web of Science database specifically
search_webofscience({ query: "CRISPR gene editing", maxResults: 15, year: "2022", journal: "Nature" })
search_pubmedSearch PubMed/MEDLINE biomedical literature database
search_pubmed({ query: "COVID-19 vaccine efficacy", maxResults: 20, year: "2023", author: "Smith", journal: "New England Journal of Medicine", publicationType: ["Journal Article", "Clinical Trial"] })
search_google_scholarSearch Google Scholar academic database
search_google_scholar({ query: "machine learning", maxResults: 10, yearLow: 2020, yearHigh: 2023, author: "Bengio" })
search_biorxiv / search_medrxivSearch biology and medical preprints
search_biorxiv({ query: "CRISPR", maxResults: 15, days: 30 })
search_semantic_scholarSearch Semantic Scholar AI semantic database
search_semantic_scholar({ query: "deep learning", maxResults: 10, fieldsOfStudy: ["Computer Science"], year: "2023" })
search_iacrSearch IACR ePrint cryptography archive
search_iacr({ query: "zero knowledge proof", maxResults: 5, fetchDetails: true })
search_scihubSearch and download papers from Sci-Hub using DOI or paper URL
search_scihub({ doiOrUrl: "10.1038/nature12373", downloadPdf: true, savePath: "./downloads" })
check_scihub_mirrorsCheck health status of Sci-Hub mirror sites
check_scihub_mirrors({ forceCheck: true // Force fresh health check })
download_paperDownload paper PDF files
download_paper({ paperId: "2106.12345", // or DOI for Sci-Hub platform: "arxiv", // or "scihub" for Sci-Hub downloads savePath: "./downloads" })
get_paper_by_doiGet paper information by DOI
get_paper_by_doi({ doi: "10.1038/s41586-023-12345-6", platform: "all" })
get_platform_statusCheck platform status and API keys
get_platform_status({})
All platform paper data is converted to a unified format:
interface Paper { paperId: string; // Unique identifier title: string; // Paper title authors: string[]; // Author list abstract: string; // Abstract doi: string; // DOI publishedDate: Date; // Publication date pdfUrl: string; // PDF link url: string; // Paper page URL source: string; // Source platform citationCount?: number; // Citation count journal?: string; // Journal name year?: number; // Publication year categories?: string[]; // Subject categories keywords?: string[]; // Keywords // ... more fields }
src/
├── models/
│   └── Paper.ts              # Paper data model
├── platforms/
│   ├── PaperSource.ts        # Abstract base class
│   ├── ArxivSearcher.ts      # arXiv searcher
│   ├── WebOfScienceSearcher.ts # Web of Science searcher
│   ├── PubMedSearcher.ts     # PubMed searcher
│   ├── GoogleScholarSearcher.ts # Google Scholar searcher
│   ├── BioRxivSearcher.ts    # bioRxiv/medRxiv searcher
|   ├── SemanticScholarSearcher.ts # Semantic Scholar searcher
|   ├── IACRSearcher.ts       # IACR ePrint searcher
|   ├── SciHubSearcher.ts     # Sci-Hub searcher with mirror management
|   ├── ScienceDirectSearcher.ts # ScienceDirect (Elsevier) searcher
│   ├── SpringerSearcher.ts   # Springer Nature searcher (Meta v2 & OpenAccess APIs)
|   ├── WileySearcher.ts      # Wiley TDM API searcher
|   └── ScopusSearcher.ts     # Scopus citation database searcher
├── utils/
│   └── RateLimiter.ts        # Token bucket rate limiter
└── server.ts                 # MCP server main file
PaperSourceserver.ts# Run tests npm test # Run linting npm run lint # Code formatting npm run format
Springer Nature provides two APIs:
Metadata API v2 (Main API)
https://api.springernature.com/meta/v2/jsonOpenAccess API (Optional)
https://api.springernature.com/openaccess/json// Search all Springer content search_springer({ query: "machine learning", maxResults: 10 }) // Search only open access papers search_springer({ query: "COVID-19", openAccess: true, // Uses OpenAccess API if available maxResults: 5 })
// Use Web of Science query syntax search_webofscience({ query: 'TS="machine learning" AND PY=2023', maxResults: 20 }) // Author search search_webofscience({ query: 'AU="Smith, J*"', maxResults: 10 }) // Journal search search_webofscience({ query: 'SO="Nature" AND PY=2022-2023', maxResults: 15 })
Supported Fields:
TS: Topic searchAU: AuthorSO: Source journalPY: Publication yearDO: DOITI: TitleMIT License - see LICENSE file for details.
Contributions welcome! See CONTRIBUTING.md for guidelines.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)If you encounter issues, please report them at GitHub Issues.
⭐ If this project helps you, please give it a star!