Academic Search MCP Server
An MCP (Model Context Protocol) server for searching, filtering, and exploring academic papers across multiple databases, with citation graph walking.
Providers: Semantic Scholar, Crossref, OpenAlex, PubMed
Features
- Multi-provider search — unified interface across 4 academic databases
- Universal regex filtering — regex post-filtering on all providers (not just Semantic Scholar)
- Rich post-hoc filters — year range, citation count, journal, publication type, open access, author
- Citation graph walk — random walk on the Semantic Scholar citation graph with backtracking, cross-edge detection, and topic-aware pruning
- Text similarity — pure-Python TF cosine similarity for topic drift detection and most-similar candidate selection (no heavy dependencies)
- Stats — per-query metadata on authors, years, and field coverage
- Normalised output — all providers return data in the same schema
Tools
search_papers
Search papers by keyword with optional regex post-filtering on title and abstract.
Parameters: query, search_type, limit, regex_filter, regex_search_fields, match_mode, year_min, year_max, min_citation_count, max_citation_count, open_access_only, has_pdf, journal, exclude_journals, publication_types, exclude_publication_types, author, has_abstract, provider
search_by_author
Find papers by author name with the same post-hoc filters.
explore_citations
Walk the Semantic Scholar citation graph step by step, starting from a seed paper.
| Parameter | Default | Description |
|---|---|---|
seed_paper_id |
(required) | S2 paper ID |
num_steps |
30 | Max walk length |
max_depth |
None | Max hops from seed before forced backtrack |
direction_choice |
"random" |
"forward", "backward", "alternating", or "random" |
bias |
"random" |
"top_cited", "bottom_cited", "most_similar", or "random" |
candidates_per_step |
100 | Candidates per API call |
stop_similarity |
None | 0.0–1.0 topic drift threshold |
Includes the same post-hoc filters as search_papers.
get_paper_stats
Fetch papers and compute statistics: field availability, author counts, publication year distributions.
build_extended_query
Preview how a regex pattern gets transformed for a given provider's API.
Usage
Via uvx (recommended)
uvx academic-search
Via uv run
uv run --with academic-search academic-search
From source
git clone ...
cd academic-search
uv run academic-search
With Claude Desktop
{
"mcpServers": {
"academic-search": {
"command": "uvx",
"args": ["academic-search"]
}
}
}
Development
uv sync
uv run academic-search
Providers
| Provider | Citation graph | Notes |
|---|---|---|
| Semantic Scholar | Yes | Full citation/reference graph endpoints, citation counts |
| Crossref | No | Good DOI coverage, no OA metadata |
| OpenAlex | No | Best OA metadata, abstracts from inverted index |
| PubMed | No | NIH literature |
Design Notes
queryandregex_filterare separate — the API query is plain text; regex filtering is a post-hoc step on all providers- Citation walk is a true graph walk — one step at a time, not bucket collection. Uses backtracking, cross-edge recording, and per-step filtering
- Caching — API responses for
(paper_id, direction)are cached per walk to avoid redundant fetches during backtracking - Text similarity — pure-Python TF cosine similarity (no sentence-transformers); used for
most_similarbias andstop_similaritypruning - No API key required — all providers have free tiers, but Semantic Scholar rate limits are ~1 req/5s without a key. Set
S2_API_KEYfor up to 100 req/s
Metadata
Release files for academic-search 0.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| academic_search-0.8.0.tar.gz | 23.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| academic_search-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.0 kB
Release files / academic_search-0.8.0.tar.gz
| Download URL | academic_search-0.8.0.tar.gz |
|---|---|
| Size | 23.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d6125a186e4a72528e4355ca6576c96dddcbb6e1aa2ef98ea3a9495bd1a1b607
|
|
BLAKE2b-256 checksum How to use checksums |
1fccdf3ee756f93ae4597511d32fbb8c25293e82b53518c1db558de9911bd489
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / academic_search-0.8.0-py3-none-any.whl
| Download URL | academic_search-0.8.0-py3-none-any.whl |
|---|---|
| Size | 32.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c63ddb12c9f04e873f2f870d47e0671d3155888b551bdbfc0f9688e2036270fd
|
|
BLAKE2b-256 checksum How to use checksums |
d9f9114f685d11d8104ef7cbc16b944828d2cd3f85929bd08c5ff0b06514c5e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|