Skip to main content
Glama
Walids35

MCP Paper Finder

by Walids35
README.md
# MCP Paper Finder ๐Ÿ“š๐Ÿ”

A modular, extensible Model Context Protocol (MCP) server for searching, downloading, and reading academic papers from multiple sources, including arXiv, Zenodo, bioRxiv, medRxiv, CrossRef, Google Scholar, ResearchGate, Sci-Hub, and Elsevier.

![MCP Paper Finder](docs/images/Diagram.jpg)

## Features โœจ

- **Unified Search** ๐Ÿ”Ž: Query multiple academic sources with a single interface.
- **Download PDFs** ๐Ÿ“ฅ: Download papers (when available) from supported sources.
- **Read Papers** ๐Ÿ“–: Extract and return text from downloaded PDFs (where supported).
- **MCP Compatible** ๐Ÿค: Works as a local MCP tool for Claude, Open Interpreter, and other MCP clients.
- **Extensible** ๐Ÿ› ๏ธ: Easily add new sources or tools.

## Supported Sources ๐ŸŒ

- [arXiv](https://arxiv.org)
- [Zenodo](https://zenodo.org)
- [bioRxiv](https://www.biorxiv.org)
- [medRxiv](https://www.medrxiv.org)
- [CrossRef](https://www.crossref.org)
- [Google Scholar](https://scholar.google.com)
- [ResearchGate](https://www.researchgate.net)
- [Sci-Hub](https://sci-hub.st)
- [Elsevier](https://www.elsevier.com) (requires API key)

## Quick Start ๐Ÿš€

You can run MCP Paper Finder in two ways:

### 1. Run with Docker (Recommended) ๐Ÿณ

Copy this JSON as your MCP tool in your MCP client (Make sure to locate the config file). Feel free to add `env` variable in the env section. Env variables are presented in `.env.example`.

```json
"mcpServers": {
  "paper-finder": {
    "command": "docker",
    "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "DOTENV_CONFIG_QUIET=true",
        "walids35/mcp-paper-finder"
    ],
    "env": {
        "ELSEVIER_API_KEY": "your API KEY", // OPTIONAL (in case you want to use elsevier provider)
        "RESEARCHGATE_COOKIE": "", // OPTIONAL (in case of 429 Too many requests error)
        "SCIHUB_COOKIE": "" // OPTIONAL (recommended to bypass DDOS Guard)
      }
  }
}
```

### 2. Run Locally ๐Ÿ’ป

```sh
git clone https://github.com/Walids35/mcp-paper-finder.git
cd mcp-paper-finder
npm install
npm run build
```

- Create `.env` file and add the environment variables presented in `.env.example`

Then, add the path to your built entry point (e.g., `node ./build/index.js`) as a local tool in your MCP client (such as Claude or Open Interpreter).

```json
"paper-finder": {
    "command": "node",
    "args": [
    "ABSOLUTE/PATH/TO/MCPDIRECOTRY/build/index.js"
     ]
}
```

## Testing ๐Ÿงช

Run all tests with:

```sh
npm test
```

## Project Structure ๐Ÿ—‚๏ธ

```
src/
  index.ts                # MCP server entry point
  providers/              # Source-specific search/download/read logic
  tests/                  # Jest test cases for each provider
  types/                  # Shared type definitions
```

## Adding New Sources โž•

1. Implement a new provider class in `src/providers/`.
2. Register it as a tool in `src/index.ts`.
3. Add tests in `src/tests/`.

## Demo
![MCP Paper Finder DEMO](docs/images/demo.png)

## License ๐Ÿ“œ

[ISC](LICENSE)

---

**Note:** This project is for research and educational purposes. Respect the terms of service and copyright policies of each data provider.