arXiv MCP Server
# arXiv MCP Server
[](https://pypi.org/project/arxiv-paper-mcp-server/)
[](https://pypi.org/project/arxiv-paper-mcp-server/)
[](https://opensource.org/licenses/MIT)
A Model Context Protocol (MCP) server that enables LLMs to search, download, and read arXiv papers. Gives AI assistants direct access to scientific literature.
## Features
- **Search papers** - Search by title, keywords, author, or arXiv ID
- **Read full text** - Download PDFs and extract text automatically
- **Section extraction** - Get specific sections (abstract, introduction, methods, conclusion)
- **Local caching** - Downloaded papers are cached locally for fast re-access
- **Zero configuration** - Works out of the box with sensible defaults
## Getting Started
### Prerequisites
This MCP server uses `uvx` to run. First, install `uv`:
```bash
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Or using Homebrew
brew install uv
```
After installation, restart your terminal.
### Installation
Install the arXiv MCP server with your client.
Standard config works in most tools:
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
<details>
<summary>Amp</summary>
```bash
amp mcp add arxiv -- uvx arxiv-paper-mcp-server
```
</details>
<details>
<summary>Claude Code</summary>
```bash
claude mcp add arxiv-server -- uvx arxiv-paper-mcp-server
```
</details>
<details>
<summary>Claude Desktop</summary>
Add to your `claude_desktop_config.json`:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
</details>
<details>
<summary>Codex</summary>
```bash
codex mcp add arxiv -- uvx arxiv-paper-mcp-server
```
</details>
<details>
<summary>Cursor</summary>
Add to `~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
</details>
<details>
<summary>Factory</summary>
Add to Factory MCP settings:
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
</details>
<details>
<summary>Gemini CLI</summary>
```bash
gemini mcp add arxiv -- uvx arxiv-paper-mcp-server
```
</details>
<details>
<summary>Goose</summary>
Run `goose configure`, then add to `~/.config/goose/config.yaml`:
```yaml
extensions:
arxiv:
command: uvx
args:
- arxiv-paper-mcp-server
```
</details>
<details>
<summary>Kiro</summary>
Add to Kiro MCP settings:
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
</details>
<details>
<summary>LM Studio</summary>
Add to LM Studio MCP settings:
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
</details>
<details>
<summary>opencode</summary>
```bash
opencode mcp add arxiv -- uvx arxiv-paper-mcp-server
```
</details>
<details>
<summary>Qodo Gen</summary>
Add to Qodo Gen MCP configuration:
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
</details>
<details>
<summary>VS Code</summary>
Add to `.vscode/mcp.json` in your workspace:
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
</details>
<details>
<summary>Warp</summary>
Add to Warp MCP settings:
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
</details>
<details>
<summary>Windsurf</summary>
Add to `~/.windsurf/mcp.json`:
```json
{
"mcpServers": {
"arxiv": {
"command": "uvx",
"args": ["arxiv-paper-mcp-server"]
}
}
}
```
</details>
<details>
<summary>Using pip</summary>
```bash
pip install arxiv-paper-mcp-server
arxiv-mcp-server
```
</details>
## Tools
| Tool | Description |
|------|-------------|
| `search` | Search arXiv papers by title, keywords, or arXiv ID (e.g., `2401.12345`) |
| `get_paper` | Download and read the full text of a paper, with optional section filtering |
| `list_downloaded_papers` | List all locally cached papers |
### Tool Details
#### `search(query, max_results=10)`
Search for papers on arXiv. Supports:
- Keywords: `"transformer attention mechanism"`
- Paper ID: `"2401.12345"` or `"arXiv:2401.12345"`
- Author: `"Yann LeCun"`
Returns paper ID, title, authors, publication date, and abstract preview.
#### `get_paper(paper_id, section="all")`
Download and extract text from a paper.
| Section | Description |
|---------|-------------|
| `all` | Full paper text (default) |
| `abstract` | Abstract only |
| `introduction` | Introduction section |
| `method` | Methods/Approach section |
| `conclusion` | Conclusion/Discussion section |
#### `list_downloaded_papers()`
List all papers that have been downloaded and cached locally.
## Configuration
| Environment Variable | Description | Default |
|---------------------|-------------|---------|
| `ARXIV_STORAGE_DIR` | Directory for downloaded papers | `~/.arxiv-mcp/papers` |
## Usage Examples
**Search for papers:**
```
User: Find recent papers about prompt compression
Claude: [Uses search("prompt compression", max_results=5)]
Found 5 papers:
- 2504.16574: PIS: Linking Importance Sampling...
- ...
```
**Read a specific paper:**
```
User: Read the introduction of paper 2401.12345
Claude: [Uses get_paper("2401.12345", section="introduction")]
[Returns the introduction section]
```
**Review cached papers:**
```
User: What papers have I downloaded?
Claude: [Uses list_downloaded_papers()]
You have 3 papers cached locally:
- 2401.12345: Paper Title...
```
## Development
```bash
# Clone the repository
git clone https://github.com/AnnaSuSu/arxiv-mcp.git
cd arxiv-mcp
# Install dependencies
uv sync
# Run server locally
uv run arxiv-mcp-server
```
## Requirements
- Python 3.10+
- Dependencies: `mcp`, `arxiv`, `pymupdf`
## License
MIT License - see [LICENSE](LICENSE) for details.
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose with no overlap: get_paper retrieves full text or sections of a specific paper, list_downloaded_papers shows locally stored papers, and search finds papers based on queries. The descriptions make it easy to differentiate between retrieving, listing local content, and searching.
All tool names follow a consistent verb_noun pattern (get_paper, list_downloaded_papers, search), using snake_case throughout. The naming is predictable and readable, with no deviations or mixed conventions.
With only 3 tools, the server feels thin for an arXiv domain that might benefit from more operations like filtering searches, managing downloads, or accessing metadata. While the tools cover basic needs, the count is borderline low for comprehensive arXiv interaction.
The tools cover core arXiv operations (search, retrieve, list local), but there are notable gaps such as no ability to download papers, update local storage, or access advanced metadata. Agents can work around this by using existing tools, but the surface is incomplete for full paper management workflows.