Skip to main content

Paper-Research-MCP

Federated academic research retrieval over MCP — 30 connectors, 34 tools, one standardized result schema.

Python MCP Connectors Tools License: MIT

🇮🇩 Versi Bahasa Indonesia · 📦 Source code: github.com/DranxX/Paper-Research-MCP


📜 What is Paper-Research-MCP?

A brand-new MCP server for academic paper search, distilled from the expansion plan in Collection/Markdown/Refer/Reference.md — absorbed while curating three upstream collections plus that additional reference, to make agent-side research broader, not just deeper.

It implements the document's core design rule: don't flatten every source into one search_papers(). Each source is its own connector with its own tools (discovery, conference review, paper↔code mapping, metadata resolution, OA resolution), and a federation layer on top handles cross-source search, deduplication, and provenance.

  • 🔓 Free-first — everything runs without an API key; premium connectors are registered but dormant until you set their env vars
  • 🧵 Federated — cross-source search with DOI → title dedup and alsoIn/matchedQueries provenance
  • 📅 Date-bounded — year_from/year_to passed natively to APIs that support it, universal post-filter for the rest
  • 📦 uv-packaged — Python ≥ 3.10, deps only mcp + httpx
  • 🟢 Honest failures — bot-walls and rate limits return structured envelopes with manual-fallback suggestions, never silent lies

📦 Install

Requires: Python ≥ 3.10 and uv. Deps: mcp + httpx.

Local checkout — point your MCP client at the folder:

// ZCode / Claude Desktop / Cursor / any MCP client
{
  "mcpServers": {
    "paper-research": {
      "command": "uv",
      "args": ["--directory", "<path>/Paper-Research-MCP", "run", "paper-research-mcp"],
      "env": { "S2_API_KEY": "", "ADS_TOKEN": "", "SCOPUS_API_KEY": "" }
    }
  }
}

Published on PyPI — after release (see 🚀 Publishing below) it becomes one line:

{ "mcpServers": { "paper-research": { "command": "uvx", "args": ["paper-research-mcp"] } } }

🔑 Optional API keys

All free connectors work without any key. Premium connectors stay dormant until their env var is set (see .env.example):

Env var Connector Note
S2_API_KEY Semantic Scholar removes the 429 rate limit
OPENALEX_API_KEY OpenAlex dedicated daily budget
ADS_TOKEN NASA ADS free for researchers
ALPHAXIV_API_KEY AlphaXiv or add their official MCP directly
SCOPUS_API_KEY Scopus needs institutional entitlement
LENS_TOKEN / DIMENSIONS_TOKEN / WOS_API_KEY Lens / Dimensions / WoS subscription-based
BAIDU_API_KEY / AMINER_API_KEY / CSTR_CLIENT_ID+CSTR_SECRET Baidu / AMiner / CSTR China platforms

🌐 Connectors

Category Sources
FREE (default on) OpenAlex · Crossref · arXiv · DOAJ · OpenReview · INSPIRE-HEP · ERIC · Unpaywall · ORCID · NSSD (China SSH) · ScienceDB
FREE, bot-wall/rate-limited (default on, honest errors) Semantic Scholar · Papers with Code · Google Scholar · Baidu Scholar · GARUDA · SINTA · OneSearch · RAMA · Moraref · Neliti · BRIN
API KEY (dormant until env set) NASA ADS · AlphaXiv · Scopus · The Lens · Dimensions · Web of Science · AMiner · CSTR

🇮🇩 The indonesia_research block follows the Reference.md warning: these platforms have no official APIs — they are best-effort scrapers with truthful failure envelopes.

🛠 Tools

34 tools are auto-discovered by any MCP client via tools/list — no configuration needed. Two entry points worth knowing:

  • search_papers — federated search; supports single query or parallel queries: ["k1","k2"], date bounds year_from/year_to, source selection, dedup by DOI → title, and provenance (alsoIn + matchedQueries)
  • list_sources — every connector with its access category and env status

Full per-source tools (e.g. openalex_search, openreview_notes, garuda_search) are listed by your client automatically after connecting.

🏗 Architecture

pyproject.toml                      ← uv package ([project.scripts] paper-research-mcp)
└── src/paper_research_mcp/
    ├── server.py                   ← MCP stdio entry (official `mcp` SDK, lowlevel Server)
    ├── registry.py                 ← 30 connectors, auth-gating, universal year post-filter
    ├── federation.py               ← search_papers: queries×sources parallel (pool 8), dedup, provenance
    ├── core.py                     ← httpx w/ timeout, standardized item schema, envelopes, year filter
    └── sources/
        ├── free.py        (11)  OpenAlex Crossref arXiv DOAJ S2 OpenReview INSPIRE ERIC Unpaywall ORCID PwC
        ├── indonesia.py    (8)  GARUDA SINTA OneSearch RAMA Moraref Neliti BRIN Google Scholar
        ├── china.py        (5)  NSSD Baidu Scholar AMiner ScienceDB CSTR
        └── premium.py      (6)  ADS AlphaXiv Scopus Lens Dimensions WoS

🧪 Testing

uv run python tests/e2e_all_tools.py

Live suite with 36 checks: all 34 tools one by one (envelope-shape validation + per-category status expectations), all three federation modes, year-filter leak checks, and the MCP stdio handshake in a subprocess. Scraper sources returning blocked count as PASS — the envelope is the contract, not the network mood. Last run: 36/36 PASS.

🚀 Publishing

# 1. Create a PyPI account → Account Settings → API token
# 2. Dry-run against TestPyPI (optional):
uv publish --publish-url https://test.pypi.org/legacy/ --token pypi-XXXXXXXX
# 3. Release:
uv build
uv publish --token pypi-XXXXXXXX
# 4. Anyone can now run it:
uvx paper-research-mcp

📄 License

MIT. Source of the connector plan: Collection/Markdown/Refer/Reference.md (paper-search-mcp ecosystem + indonesia_research + China platforms + premium connectors).

Metadata

Release files for paper-research-mcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for paper-research-mcp 0.1.1
File Size Uploaded Provenance Actions
paper_research_mcp-0.1.1.tar.gz 97.2 kB Without provenance Details for paper_research_mcp-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for paper-research-mcp 0.1.1
File Interpreter ABI Platform Actions
paper_research_mcp-0.1.1-py3-none-any.whl Python 3 none any Details for paper_research_mcp-0.1.1-py3-none-any.whl

Total release size: 127.9 kB

Release files / paper_research_mcp-0.1.1.tar.gz

Download URL paper_research_mcp-0.1.1.tar.gz
Size 97.2 kB
Tags Source
SHA-256 checksum
How to use checksums
e67137efca003a9afad378d3049dc18813054d0a16ffd73dd8db37be6e74e152
BLAKE2b-256 checksum
How to use checksums
17bd2a41c4db9e8ad6ff29030364703a1bbfcf7bf89d06bd72502ff5369ee4ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / paper_research_mcp-0.1.1-py3-none-any.whl

Download URL paper_research_mcp-0.1.1-py3-none-any.whl
Size 30.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8de2c1bd991dbf113ab3f79a38ff318fcc6b1f009ea90f770ce59852bbe5cc62
BLAKE2b-256 checksum
How to use checksums
81666b9c80e08b0b2843162d46a33290d375276e20550bf8fbe80ec668139e0f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for paper-research-mcp 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page