academic-mcp
Searches and retrieves papers from arXiv, including direct DOI-to-arXiv resolution and title-based preprint lookup as a fallback for paywalled content.
Uses the Elsevier API for Scopus search and ScienceDirect paper downloads, including PDF retrieval for DOI-based lookups.
Searches academic literature via Scopus, merging results with OpenAlex and tracking referenced DOIs for session-scoped download authorization.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@academic-mcpSearch for papers about graph neural networks published after 2020"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
academic-mcp
A local MCP service that is the whole backend of an academic research workflow:
literature search, citation chains, per-project research memory, paper download
and PDF→Markdown conversion. Any MCP client can drive it — the first one is the
DSH academic agent preset, which contains no Python at all.
client (any MCP host) ──JSON-RPC /mcp──▶ academic-mcp :8790
├─ Scopus + OpenAlex (search, citation chains)
├─ project memory JSON (notes, findings, progress)
├─ arXiv / Elsevier / browser → PDF
└─ MinerU cloud API (PDF → Markdown)Everything that needs Python lives here. A client only sends tool calls.
Tools
Tool | Purpose |
| Scopus + OpenAlex search, merged, deduplicated and hybrid-reranked. |
| Forward / backward citation expansion from seed DOIs (OpenAlex). Pass |
| Per-project research memory: |
| Read a session's tool-call log. |
| DOI → full text (Markdown), cached under |
| DOI → PDF path only (no conversion). |
| Any document (local path or URL) → Markdown: PDF, Word, PPT, Excel, images, HTML. Returns path + outline + page→line map. |
| May this DOI be downloaded in this session? (no network) |
| Machine-readable tool contract: every tool with its required/optional arguments. Clients validate against it instead of assuming names. |
| Config + resolver stats (secrets masked). Call this first when something fails. |
convert_document is the one MinerU implementation for both the paper pipeline
and general document reading.
Related MCP server: openresearch-mcp
Configuration
Settings come from the process environment, then <MCP_HOME>/.env (this
directory), then ~/.shellrc. Copy .env.example to .env and fill it in.
Nothing else is read — in particular, no client's directory is consulted.
The essentials:
Variable | Meaning | Default |
| library root: project memory JSON, |
|
| MinerU cloud PDF→Markdown (required for conversion) | — |
| Scopus search + ScienceDirect download | — |
| OpenAlex search + citation chains | — |
| publisher downloads and Scopus/OpenAlex search; empty = direct | — |
| arXiv / search-engine fallback only | — |
| listen address |
|
| local conversion cache |
|
Full list with defaults and tuning knobs: .env.example.
ELSEVIER_INSTTOKEN is an optional subscription-institution token — leave it
empty unless your library requires it.
Restart the service after editing (configuration is read once at startup):
systemctl --user restart academic-mcp # or however you run itInstall
python -m venv .venv && . .venv/bin/activate
pip install -e . # or: pip install academic-mcp
cp .env.example .env # then edit
academic-mcp # or: python -m academic_mcpThe browser fallback needs a one-time download and a display (Xvfb is fine):
camoufox fetchacademic-mcp.service and academic-mcp-xvfb.service in this directory are
examples — they assume Linux with systemd --user. Adjust the paths before
using them.
PDF → Markdown: MinerU only
There is deliberately no fallback converter. The previous backend tried local MinerU (GPU) and then PyMuPDF4LLM; both produced silently degraded text (lost formulas, broken tables, scrambled reading order) that a reading agent then summarised as authoritative. Failing loudly is better than fabricating structure.
Resolver order
Cheap and reliable first, expensive and fragile last:
arxiv-direct— the DOI is an arXiv ID (10.48550/...)elsevier-api—10.1016/+ ScienceDirect API keydirect-pdf— open-access publishers whose PDF needs no session cookies. Only entries verified to returnapplication/pdfbelong here. SciPost is deliberately excluded: it sits behind a proof-of-work gate, and dodging that with a non-browser User-Agent would evade a control someone installed on purpose — it goes through the browser instead.camoufox-browser— headful Firefox, CloudFlare bypass, paywallsarxiv-title-search— find the preprint by title (DDGS + verification)
The last one is a fallback for content, not access: when every publisher path is paywalled, an arXiv preprint of the same paper is still worth reading. It runs last so the version-of-record wins when reachable. Candidates are verified (title similarity + author) before use — fetching the wrong paper is worse than failing.
Display for the browser
Headful Firefox is required for CloudFlare Turnstile (headless is detected and
challenged harder). The resolver picks, in order: an existing Xvfb on :99–:96,
the ambient DISPLAY, a self-started Xvfb, otherwise headless.
Layout
academic-mcp/
├── academic-mcp.py # script entrypoint (kept for compatibility)
├── academic_mcp/
│ ├── __main__.py # python -m academic_mcp
│ ├── config.py # env + .env settings
│ ├── server.py # MCP tools (incl. contract / health)
│ ├── pipeline.py # cache → resolve → convert
│ ├── mineru.py # MinerU cloud API (the only converter)
│ ├── storage.py # DOI→key, cache validity
│ ├── httpclient.py # pooled client, retries, proxy policy
│ ├── validate.py # session-scoped DOI authorization
│ ├── markdown.py # outline + page→line map
│ ├── resolvers/ # arxiv, elsevier, publisher, camoufox
│ └── agent/ # search, snowball, memory + MCP wrappers
├── scripts/ # manual publisher / network diagnostics
└── tests/ # offline smoke testsDevelopment
pip install -e ".[dev]"
ruff check .
pytest -q # offline: no network, no browser, no MinerU quotaThe tests pin the parts clients depend on as a contract: the tool surface, the
argument names, the cwd → session_id rule and the memory round-trip.
Security notes
The service binds to
127.0.0.1by default and keeps its keys in.env(never returned over the wire;healthmasks them).validate_doionly authorises a DOI that appeared in this session's search results, so a stray DOI cannot trigger a download.The browser fallback drives a real Firefox for CloudFlare challenges and paywalled publishers. Use it in line with those sites' terms.
License
GPL-3.0-or-later — see LICENSE.
Copyright (C) 2026 cxxiao.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.
This server cannot be deployed
Maintenance
Related MCP Connectors
Academic literature search, retrieval, and private library management on top of OpenAlex.
Zotero MCP server for Claude and ChatGPT: search, citations, safe writes, PDF passages and pages.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Academic research MCP server for paper search, citation checks, graphs, and deep research.
Related MCP Servers
- AlicenseAqualityAmaintenanceMulti-source academic paper search, citation graph exploration, and PDF download as an MCP server, designed for LLM agents doing research.676 PyPI3Apache 2.0
- AlicenseNot gradedqualityCmaintenanceZero-auth multi-source research MCP server that enables web search, reading URLs, PDFs, GitHub repos, and querying Hacker News, Stack Overflow, Semantic Scholar, and YouTube transcripts without API keys.11Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA local-first paper RAG server that enables searching and managing academic PDFs via MCP tools, supporting metadata enrichment and citation graphs.1MIT
- AlicenseAqualityAmaintenanceA local MCP server for searching scientific papers, retrieving metadata and abstracts, and legally downloading Open Access PDFs via OpenAlex, CrossRef, and Unpaywall APIs.53MIT