Skip to main content
Glama
xiaoxiaoxiaotao

paper-search-mcp

README.md
# paper-search-mcp

paper-search-mcp is an MCP server for agents that need to search papers, read arXiv PDFs, align records across sources, and produce structured literature-analysis inputs.

The server currently integrates two paper sources:

- Semantic Scholar for citation-aware discovery and metadata lookup
- arXiv for recent papers, metadata lookup, and PDF text extraction

It also includes higher-level utilities for cross-source alignment, BibTeX export, and compact literature digests.

Chinese documentation is available in `README-zh.md`.

## MCP Tools

### `search_semantic_scholar`

Search Semantic Scholar and return normalized paper metadata sorted by citation count.

Parameters:

- `query`: Search query
- `max_results`: Maximum number of results, default `10`

### `get_semantic_scholar_paper`

Fetch detailed metadata for a Semantic Scholar paper by `paper_id`.

### `search_arxiv`

Search arXiv and return normalized metadata.

Parameters:

- `query`: Search query
- `max_results`: Maximum number of results, default `10`
- `sort_by`: `relevance`, `lastUpdatedDate`, or `submittedDate`
- `sort_order`: `ascending` or `descending`

### `get_arxiv_paper`

Fetch metadata for one arXiv paper using an arXiv ID, abstract URL, or PDF URL.

### `read_arxiv_paper`

Download an arXiv PDF, cache it locally, extract text from the first pages, and return a structured reading pack.

Parameters:

- `arxiv_id_or_url`: arXiv ID, abstract URL, or PDF URL
- `max_pages`: Maximum number of pages to extract, default `8`
- `max_characters`: Maximum number of extracted characters, default `20000`

### `export_bibtex`

Export a paper as BibTeX.

Parameters:

- `source`: `semantic_scholar` or `arxiv`
- `identifier`: Semantic Scholar `paper_id` or arXiv ID/URL

### `align_paper_by_title`

Search Semantic Scholar and arXiv by title and return exact normalized title matches across both sources.

Parameters:

- `title`: Paper title used for exact title alignment
- `semantic_scholar_max_results`: Search limit for Semantic Scholar, default `10`
- `arxiv_max_results`: Search limit for arXiv, default `10`

### `build_literature_digest`

Search across Semantic Scholar and arXiv, deduplicate overlapping papers, and return a compact literature-analysis bundle.

This is useful for downstream agent tasks such as:

- finding classic work versus recent work
- grouping methods into families
- comparing datasets, metrics, and limitations

## Installation

This project is designed to use `uv` for environment and dependency management.

```bash
uv sync
```

This creates `.venv` in the project directory and installs the project dependencies.

To include development dependencies as well:

```bash
uv sync --group dev
```

If you have a Semantic Scholar API key:

```bash
export S2_API_KEY=your_key_here
```

Optional environment variables:

- `S2_API_KEY`: Semantic Scholar API key
- `PAPER_MCP_HTTP_TIMEOUT`: HTTP timeout in seconds, default `30`
- `PAPER_MCP_USER_AGENT`: Custom user agent string
- `PAPER_MCP_CACHE_DIR`: Override the on-disk cache directory for downloaded PDFs

### Install As A Python Package

For local development or direct Python-based deployment:

```bash
pip install .
```

To install directly from a Git repository:

```bash
pip install https://github.com/xiaoxiaoxiaotao/paper-search-mcp.git
```

## Running The Server

Start the server directly:

```bash
uv run paper-search-mcp
```

Example MCP client configuration:

```json
{
	"servers": {
		"paper-search": {
			"type": "stdio",
			"command": "uv",
			"args": [
				"run",
				"--no-sync",
				"paper-search-mcp"
			],
			"cwd": "/home/tao/code/projects/paper-search-mcp",
			"env": {
				"S2_API_KEY": "${env:S2_API_KEY}"
			}
		}
	},
	"inputs": []
}
```

If you prefer not to use input prompts, configure `envFile` instead of `env` and place `S2_API_KEY=your_key_here` in that file.

## Notes

- Semantic Scholar is better for established, citation-rich papers.
- arXiv is better for recent work and full-text PDF reading.
- `build_literature_digest` reduces prompt assembly work for downstream agents.
- `read_arxiv_paper` returns text and analysis prompts instead of hard-coded conclusions.
- PDF downloads are cached on disk to avoid repeated arXiv fetches.
- An npm package is possible as a thin wrapper, but the primary runtime is still Python or Docker.

## Possible Extensions

- DOI / PMID / ACL Anthology / OpenAlex support
- citation graph and related-paper retrieval
- richer section-aware PDF chunking
- persistent metadata caching beyond PDFs

TDQS

A3.5/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a specific action (search, get, download, align, digest, export) or a specific source (arXiv vs Semantic Scholar), with no overlap in purpose. For example, search_arxiv and search_semantic_scholar clearly differ by source.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, with clear action and target (e.g., search_arxiv, get_arxiv_paper, download_arxiv_pdf). The naming is predictable and uniform.

Tool Count5/5

With 10 tools, the surface is well-scoped for a paper search and retrieval domain. Each tool serves a distinct need without being excessive or insufficient.

Completeness5/5

The tools cover the full workflow: searching both sources, fetching metadata, downloading PDFs, aligning cross-source papers, building digests, and exporting citations. No obvious gaps exist for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues