Skip to main content
Glama
paper-mcp

paper-mcp

by imnotdev25

πŸ“„ paper-mcp

An MCP server built with FastMCP for paper, citation, author, and bibliography search. Run it in one command with uvx β€” no manual install needed.


✨ Features

Paper tools

Tool

Returns

paper_get_metadata

Title, authors, abstract, DOI, arXiv ID, citation count, TL;DR, OA status, fields of study

paper_get_pdf

Best open-access PDF URL

paper_get_fulltext

Full text plus structured pages, sections, and extracted tables

paper_get_citations

Up to 100 papers that cite this one

paper_get_references

Up to 100 papers this one cites

paper_search

Filtered, deduplicated search across S2, OpenAlex, PubMed, and DBLP

paper_get_publication_status

Venue, publisher, version of record, and preprint status

paper_get_bibtex

BibTeX citation from Semantic Scholar or Crossref

paper_get_similar

Related-paper recommendations

paper_batch_lookup

Up to 500 paper IDs in one Semantic Scholar request

doi_get_metadata

DOI metadata merged from Crossref, Semantic Scholar, and Unpaywall

Author and source tools

Tool

Returns

author_search

Disambiguated Semantic Scholar author matches

author_get_profile

h-index, affiliations, paper and citation counts

author_get_papers

A researcher's bibliography

openalex_search

Broad OpenAlex work search with institutions and topics

pubmed_search

PubMed biomedical article summaries

dblp_search

Curated DBLP computer-science bibliography results

paper_search accepts sources, year range, venue, author, publication type, minimum citations, open-access-only, and relevance/year/citation sorting. Full text uses arXiv HTML β†’ structured open-access PDF extraction β†’ Lightpanda β†’ abstract. Responses from repeated Semantic Scholar searches and batch lookups are cached in memory.


Related MCP server: Academic Paper Search MCP Server

πŸš€ Quick Start

Run without installing (uvx)

# stdio mode β€” for Claude Desktop / most MCP clients
uvx paper-mcp

# SSE mode β€” for remote or multi-client setups
uvx paper-mcp --transport sse --port 8000

uvx downloads, installs (in an isolated env), and runs the package β€” zero setup.

Install permanently

uv tool install paper-mcp
paper-mcp                        # now available globally
paper-mcp --transport sse

Local development

git clone https://github.com/imnotdev25/paper-search
cd paper-search
uv sync                                 # install all deps from pyproject.toml
uv run paper-mcp                 # run directly
uv run paper-mcp --transport sse

πŸ–₯ Claude Desktop Config

Add to claude_desktop_config.json:

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

No Python paths, no venv activation β€” uvx handles everything.


🌐 Browser Fallback (gomcp / Lightpanda)

For JS-rendered publisher pages, the server automatically starts a Lightpanda headless browser via gomcp.

One-time setup:

# Download gomcp binary from GitHub releases:
# https://github.com/lightpanda-io/gomcp/releases

# Then download the Lightpanda browser binary:
gomcp download

If gomcp is not installed, the server still works β€” browser-dependent paths fall back to abstract/metadata gracefully.


πŸ— Architecture

Claude (LLM)
    β”‚  MCP (stdio or SSE)
    β–Ό
paper-mcp  [FastMCP, Python]
    β”‚
    β”œβ”€β”€ Semantic Scholar API  ──  metadata, citations, references
    β”œβ”€β”€ arXiv API + HTML      ──  preprint info + full text
    β”œβ”€β”€ Crossref + Unpaywall  ──  DOI metadata, BibTeX, OA PDFs
    β”œβ”€β”€ OpenAlex / PubMed / DBLP ── corpus-specific search
    └── gomcp SSE  ───────────── Lightpanda browser (JS fallback)
             β”‚  CDP
             └── Lightpanda Browser (headless)

πŸ“¦ Publishing to PyPI

# Build
uv build

# Publish (needs PyPI token)
uv publish --token $PYPI_TOKEN

Once on PyPI, anyone can run it with uvx paper-mcp.


βš™οΈ CLI Options

usage: paper-mcp [-h] [--transport {stdio,sse}] [--port PORT] [--host HOST]

options:
  --transport  stdio (default) or sse
  --port       SSE port (default: 8000)
  --host       SSE host (default: 127.0.0.1)

πŸ”‘ Notes

  • Set S2_API_KEY for authenticated Semantic Scholar requests.

  • Set UNPAYWALL_EMAIL to a real contact address to enable Unpaywall. Requests are skipped when it is unset; no placeholder identity is sent.

  • Optionally set OPENALEX_EMAIL for the OpenAlex polite pool.

  • PAPER_CACHE_TTL controls the in-memory cache in seconds (default 3600; 0 disables it).

  • PDF extraction is limited to open PDFs up to 25 MB and 50,000 extracted characters. Paywalled PDFs still require institutional access.


πŸ“ Project Structure

paper-mcp/
β”œβ”€β”€ pyproject.toml                  ← packaging, entry point, deps
β”œβ”€β”€ README.md
β”œβ”€β”€ src/
    └── paper_mcp/
        β”œβ”€β”€ __init__.py
        └── server.py               ← FastMCP tools + main()
└── tests/
    └── test_server.py              ← focused HTTP, PDF, cache, and config tests

Available Tools

6 tools
doi_get_metadataResolve DOI to Full Paper MetadataA
Read-onlyIdempotent

Resolve a DOI to comprehensive paper metadata from multiple authoritative sources.

This is the reverse of paper_get_metadata: given a DOI you already know, retrieve everything about the paper without needing its title.

Data is merged from three complementary sources (all queried in parallel):

  1. Crossref β€” canonical DOI registry; best for bibliographic data, publisher, volume/issue/page, funders, license.

  2. Semantic Scholar β€” adds citation count, references, fields of study, TL;DR, and open-access PDF link.

  3. Unpaywall β€” adds detailed open-access status and every known PDF URL.

Returns a merged JSON object with: doi, title, abstract, authors, year, publication_date, venue, publisher, volume, issue, page, type, subjects, issn, funders, license, citation_count, reference_count, is_referenced_by_count, fields_of_study, tldr, publication_types, is_open_access, oa_status, open_access_pdf, oa_locations (list of all known PDF URLs with host_type / version / license), arxiv_id, semantic_scholar_id, sources (list of which APIs responded successfully)

Args: params (DoiInput): { doi: str } Accepts bare DOI or full URL, e.g.: "10.1145/3442188.3445922" "https://doi.org/10.1145/3442188.3445922"

Returns: str: JSON-encoded metadata dict or { "error": "..." }.

Inputs: params (required). Returns: result

paper_get_citationsGet Papers That Cite This PaperA
Read-onlyIdempotent

Return up to 100 papers that cite the given paper (forward citations).

Returns JSON with: paper_title, total_citations, returned, citations (list of {title, authors, year, venue, doi, arxiv_id, citation_count}).

Args: params (PaperInput): { paper_title: str }

Returns: str: JSON-encoded citations or { "error": "..." }.

Inputs: params (required). Returns: result

paper_get_fulltextGet Paper Full TextA
Read-onlyIdempotent

Retrieve the full text of a paper by title (up to 50,000 characters).

Fetch order: arXiv HTML5 renderer β†’ gomcp browser β†’ abstract-only fallback.

Returns JSON with: title, abstract, tldr, fulltext (str|null), fulltext_length (int), source.

Args: params (PaperInput): { paper_title: str }

Returns: str: JSON-encoded result or { "error": "..." }.

Inputs: params (required). Returns: result

paper_get_metadataGet Paper MetadataA
Read-onlyIdempotent

Return comprehensive metadata for an academic paper searched by title.

Queries Semantic Scholar first (richest metadata), then falls back to arXiv.

Returns JSON with: title, authors, abstract, year, venue, doi, arxiv_id, semantic_scholar_id, citation_count, reference_count, fields_of_study, publication_types, publication_date, is_open_access, open_access_pdf, tldr.

Args: params (PaperInput): { paper_title: str }

Returns: str: JSON-encoded metadata dict or { "error": "..." }.

Inputs: params (required). Returns: result

paper_get_pdfGet Paper PDF URLA
Read-onlyIdempotent

Find the best open-access PDF URL for a paper by title.

Source priority: Semantic Scholar OA β†’ arXiv PDF β†’ Unpaywall β†’ gomcp browser.

Returns JSON with: pdf_url, source, title, year. May include browser_excerpt if gomcp fallback was used.

Args: params (PaperInput): { paper_title: str }

Returns: str: JSON-encoded result or { "error": "..." }.

Inputs: params (required). Returns: result

paper_get_referencesGet Paper Reference ListA
Read-onlyIdempotent

Return the bibliography of a paper β€” the papers it cites (backward citations).

Returns JSON with: paper_title, total_references, returned, references (list of {title, authors, year, venue, doi, arxiv_id}).

Args: params (PaperInput): { paper_title: str }

Returns: str: JSON-encoded references or { "error": "..." }.

Inputs: params (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: metadata by DOI, metadata by title, forward citations, full text, PDF URL, and backward citations. The slight overlap between doi_get_metadata and paper_get_metadata is clarified by their different inputs (DOI vs title).

    Naming Consistency3/5

    Tool names are somewhat inconsistent: most use 'paper_get_' prefix, but one uses 'doi_get_' instead. While all are readable, the mix of prefixes and the inversion in 'doi_get_metadata' compared to 'paper_get_metadata' breaks the otherwise verb_noun pattern.

    Tool Count5/5

    With 6 tools, the server is well-scoped for its purpose. Each tool provides a distinct function without unnecessary bloat, and the count is within the ideal 3-15 range.

    Completeness4/5

    The tool set covers key operations for a paper metadata server: metadata retrieval (by title and DOI), full text, PDF URL, citations, and references. Minor gaps like search by author or keyword are absent, but the core workflow is supported.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables searching and retrieving academic paper metadata from Semantic Scholar, including paper details, citations, and author information.
      20
      MIT
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables searching and retrieving academic paper information from Semantic Scholar and Crossref, including metadata, abstracts, full-text when available, and topic/date-range searches.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables searching for academic papers, authors, and citation networks through the Semantic Scholar API. Supports full-text and title search, batch lookups, citation and reference tracking, author profiles, and paper recommendations.
      -