Skip to content
Agentmart
Submit a tool

Scholar MCP

FastMCP server for scholarly papers, patents, books and standards with docling PDF conversion

Connector by pvliesdonk · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)Remote (HTTP)★ 2
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/pvliesdonk-scholar-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

FastMCP server for scholarly papers, patents, books and standards with docling PDF conversion

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
15 read · 2 write · 0 delete · 1 not yet classified
Secrets
6 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Python package

Tools by what they do 18

Read from the source code; the running server may list different tools.

Read 15 · Look things up without changing anything.

  • batch_resolve
  • enrich_paper
  • find_bridge_papers
  • generate_citations
  • get_author
  • get_book_excerpt
  • get_citation_graph
  • get_citations
  • get_paper
  • get_patent
  • get_references
  • get_sync_status
Show 3 more tools
  • recommend_books
  • recommend_papers
  • search_papers

Write 2 · Create, change, send or run things.

  • fetch_and_convert
  • fetch_paper_pdf

Not yet classified 1 · We could not tell from the name and description.

  • wrapper

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • SCHOLAR_GITHUB_TOKEN
  • SCHOLAR_MCP_EPO_CONSUMER_KEY
  • SCHOLAR_MCP_EPO_CONSUMER_SECRET
  • SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY
  • SCHOLAR_MCP_S2_API_KEY
  • SCHOLAR_MCP_VLM_API_KEY

Other settings (environment variables or headers).

  • FASTMCP_ENABLE_RICH_LOGGING
  • FASTMCP_LOG_LEVEL
  • SCHOLAR_MCP_CACHE_DIR
  • SCHOLAR_MCP_CONTACT_EMAIL
  • SCHOLAR_MCP_DOCLING_URL
  • SCHOLAR_MCP_INSTANCE_DESCRIPTION
  • SCHOLAR_MCP_INSTRUCTIONS
  • SCHOLAR_MCP_INSTRUCTIONS_EXTRA
  • SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT
  • SCHOLAR_MCP_JOBS_RESULT_TTL_S
  • SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S
  • SCHOLAR_MCP_KV_STORE_URL
Show 6 more settings
  • SCHOLAR_MCP_READ_ONLY
  • SCHOLAR_MCP_SERVER_NAME
  • SCHOLAR_MCP_TOOLS_ALLOW
  • SCHOLAR_MCP_TOOLS_DENY
  • SCHOLAR_MCP_VLM_API_URL
  • SCHOLAR_MCP_VLM_MODEL

Network hosts it talks to 29

  • api.crossref.org · found in code
  • api.github.com · found in code
  • api.openalex.org · found in code
  • api.semanticscholar.org · found in code
  • api.unpaywall.org · found in code
  • arxiv.org · found in code
  • commoncriteriaportal.org · found in code
  • covers.openlibrary.org · found in code
  • developers.epo.org · found in code
  • docs.astral.sh · found in code
  • doi.org · found in code
  • epo.org · found in code
  • etsi.org · found in code
  • forms.epo.org · found in code
  • github.com · found in code
  • gofastmcp.com · found in code
  • googleapis.com · found in code
  • loc.gov · found in code
  • ncbi.nlm.nih.gov · found in code
  • openalex.org · found in code
  • openlibrary.org · found in code
  • ops.epo.org · found in code
  • pubmed.ncbi.nlm.nih.gov · found in code
  • pvliesdonk.github.io · found in code
  • raw.githubusercontent.com · found in code
  • semanticscholar.org · found in code
  • vale.sh · found in code
  • worldcat.org · found in code
  • worldwide.espacenet.com · found in code

Files it touches

  • /etc/scholar-mcp/tokens.toml
  • /opt/scholar-mcp

Tools (18)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • batch_resolveBatch Resolve Identifiersread-only

    Resolve a list of paper, patent, or book identifiers to full records. Uses the S2 batch endpoint for paper IDs/DOIs, with OpenAlex fallback. An OpenAlex-sourced paper (``"source": "openalex"``) has the same keys as an S2 one for the requested ``fields``, with ``paperId`` null. Patent numbers (e.g. EP1234567A1) are auto-detected and resolved via the EPO OPS API when configured. ISBNs (prefixed ``ISBN:``) are resolved via Open Library. Identifiers fan out across three upstreams, so a large batch runs long and is then handed back as a job handle to poll with ``get_job_result`` rather than the r…

  • enrich_paperEnrich Paperread-only

    Fetch OpenAlex metadata to supplement Semantic Scholar data. Resolves the paper's DOI from S2, then queries OpenAlex for the requested enrichment fields. Results are cached for 30 days. A cached record answers immediately. Should the lookup run long it continues in the background and returns a job handle to poll with ``get_job_result``. Args: identifier: S2 paper ID or DOI (prefix ``DOI:``). fields: One or more of: affiliations, funders, oa_status, concepts. service: Injected service. Returns: A mapping with the requested fields plus ``doi``, or an error mapping.

  • fetch_and_convertFetch and Convert Paper

    Resolve a paper, download its PDF, and convert to Markdown. Tries the Semantic Scholar open-access URL first, then alternative sources (ArXiv, PubMed Central, Unpaywall). Each stage fails gracefully: metadata is always returned if the paper resolves, even if PDF download or conversion fails. The full pipeline typically takes 1-5 minutes, so expect a background job handle rather than an inline result. Tip: start with ``use_vlm=false`` (the default). Standard conversion handles most papers well. Only retry with ``use_vlm=true`` when the result has garbled formulas or missing figure descriptio…

  • fetch_paper_pdfFetch Paper PDF

    Download the PDF of a paper. Tries the Semantic Scholar open-access URL first. When that is unavailable, automatically checks alternative sources: ArXiv (from externalIds), PubMed Central, and Unpaywall (by DOI, requires ``SCHOLAR_MCP_CONTACT_EMAIL``). Skips download if the file already exists locally, which answers immediately; a fresh download usually takes 10-30 seconds and may be returned as a background job handle instead. Args: identifier: Paper identifier (DOI, S2 ID, ARXIV:, etc.). Returns: ``{"path": "...", "source": "..."}`` on success, or a structured error dict. The…

  • find_bridge_papersFind Bridge Papersread-only

    Find the shortest citation path between two papers. Uses BFS over the citation/reference graph. Uses cached citation and reference lists to minimise API calls. The search walks outward one rate-limited request per node, so it commonly runs long and returns a job handle to poll with ``get_job_result`` rather than the path itself. A Semantic Scholar throttle defers the same search. Poll the job handle; the resumed search does not mark the throttled request as partial. A failed upstream request does not abort the search. When one happens, ``partial`` is true, ``failed_requests`` counts them, …

  • generate_citationsGenerate Citationsread-only

    Generate formatted citations for one or more papers. Resolves papers via Semantic Scholar, optionally enriches with OpenAlex metadata, and formats as BibTeX, CSL-JSON, or RIS. Enrichment fans out per paper, so a large batch can take a while; such a call answers with a job handle to poll using ``get_job_result`` instead of the citations themselves. Args: paper_ids: List of paper identifiers (S2 IDs, DOIs, arXiv IDs, etc.). Maximum 100. citation_format: Output format — bibtex, csl-json, or ris. enrich: If True, attempt OpenAlex enrichment for missing venue data whe…

  • get_authorGet Authorread-only

    Fetch author profile and publications, or search by name. If *identifier* looks like a numeric S2 author ID, fetches the author directly. Otherwise performs a name search and returns up to 5 candidates for disambiguation. A direct lookup returns one page of publications, ``limit`` long from ``offset``; ``next_offset`` is present when more follow. Semantic Scholar can list fewer publications than ``paperCount``, so the last page may end short of that count. Answers directly in normal use. Should the call run long it continues in the background and returns a job handle to poll with ``get_job_…

  • get_book_excerptGet Book Excerptread-only

    Get a book excerpt and preview info from Google Books. Returns the publisher description, text snippet, and a link to the Google Books preview page. Google Books does not expose full chapter text via API -- the excerpt is a publisher-provided summary and/or search snippet. An ``error`` of ``not_found`` means Google Books answered and has no such volume: stop asking about that ISBN. A lookup that never got an answer says so instead, as ``rate_limited`` (with ``retryable``) or ``upstream_error``, and is worth retrying -- the book may well exist. Args: isbn: ISBN-10 or ISBN-13. Returns: …

  • get_citation_graphGet Citation Graphread-only

    Traverse the citation graph from one or more seed papers. Performs BFS up to *depth* hops. Returns nodes (paper records) and directed edges. Hard-caps at *max_nodes* to prevent runaway expansion. Traversal makes one rate-limited request per node, so anything past a shallow, narrow graph runs long: expect a job handle to poll with ``get_job_result`` rather than the graph itself. A Semantic Scholar throttle defers the same walk. Poll the job handle; the resumed graph does not mark the throttled request as partial. A failed upstream request does not abort the walk. When one happens, ``stats.p…

  • get_citationsGet Citationsread-only

    Fetch papers that cite the given paper (forward citations). Returns at most 1000 citing papers per call; a larger ``limit`` is capped at 1000, so page further with ``offset``. Paging deeply to satisfy ``min_citations`` can run long; such a call continues in the background and returns a job handle to poll with ``get_job_result``. Args: identifier: Paper identifier (DOI, S2 ID, ARXIV:, etc.). fields: Field set preset for returned paper records. limit: Max results (pagination, max 1000). offset: Pagination offset. year_start: Filter citing papers published from this year. …

  • get_paperGet Paperread-only

    Fetch full metadata for a single paper. A cached paper answers immediately. Otherwise the record is fetched and enriched; should that run long it continues in the background and returns a job handle to poll with ``get_job_result``. Args: identifier: Paper identifier — DOI, S2 paper ID, arXiv ID (prefix with ``ARXIV:``), ACM ID (``ACM:``), or PubMed ID (``PMID:``). service: Injected service. Returns: A mapping with full paper metadata, or ``{"error": "not_found", "identifier": "..."}`` if not found.

  • get_patentGet Patentread-only

    Get detailed information about a single patent. Accepts patent numbers in any format (EP, WO, US, etc.). By default returns bibliographic data only -- use the sections parameter to request additional detail (claims, description, family members, legal status, cited references). When sections includes 'citations', non-patent literature references are resolved to Semantic Scholar papers on a best-effort basis; unresolved references are returned as raw citation strings. When EPO reports itself busy this waits for it to clear, which can take a few minutes, so the call may answer with a job handle…

  • get_referencesGet Referencesread-only

    Fetch papers referenced by the given paper (backward references). Returns at most 1000 references per call; a larger ``limit`` is capped at 1000, so page further with ``offset``. Should the call run long it continues in the background and returns a job handle to poll with ``get_job_result``. Args: identifier: Paper identifier (DOI, S2 ID, ARXIV:, etc.). fields: Field set preset for returned paper records. limit: Max results (max 1000). offset: Pagination offset. Returns: JSON with ``data`` list of ``{"citedPaper": {...}}`` dicts.

  • get_sync_statusGet Sync Statusread-only

    Report the last standards sync run for each standards body. Returns {"runs": [...]}, one row per body with body, upstream_ref, added, updated, unchanged, withdrawn, errors (non-fatal error strings from the latest run; empty on success), started_at and finished_at (Unix seconds). runs is empty when no sync has run yet.

  • recommend_booksRecommend Booksread-only

    Recommend books for a subject via Open Library. Uses the Open Library subject API to find popular books on a topic, sorted by edition count (a proxy for popularity). Args: subject: Subject or topic (e.g. "machine learning", "algorithms", "computer vision"). limit: Maximum results to return (max 50). Returns: JSON list of book records sorted by popularity.

Show 3 more tools
  • recommend_papersRecommend Papersread-only

    Recommend papers based on positive (and optionally negative) examples. Returns at most 500 recommendations; a larger ``limit`` is capped at 500. Answers directly in normal use. Should the call run long it continues in the background and returns a job handle to poll with ``get_job_result``. Args: positive_ids: 1-5 S2 paper IDs to use as positive examples. negative_ids: Optional S2 paper IDs to steer away from. limit: Number of recommendations to return (max 500). fields: Field set preset for returned records. service: Injected service. Returns: ``{"recommendations": …

  • search_papersSearch Papersread-only

    Search Semantic Scholar for papers matching a query. Usually completes in a few seconds. Returns at most 100 papers per call; a larger ``limit`` is capped at 100, so page further with ``offset``. Answers directly in normal use. Should the call run long it continues in the background and returns a job handle to poll with ``get_job_result``. Args: query: Keyword or semantic search query. fields: Field set preset — compact, standard, or full. limit: Maximum results to return (max 100). offset: Pagination offset. year_start: Earliest publication year (inclusive). year_en…

  • wrapper

Signals

Stars
2
Forks
1
Open issues
84
Weekly downloads
122
Last commit
Sep 30, 2026 (29 days ago)
Last release
Sep 11, 2026 (1 month ago)
Last package publish
Sep 11, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.pvliesdonk/scholar-mcp
Version
2.0.0
Auth
API key
Packages
pypi pvliesdonk-scholar-mcpoci ghcr.io/pvliesdonk/scholar-mcp:v2.0.0
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from pvliesdonk

Cite this page

Scholar MCP. Agent Mart. https://agentmart.dev/connectors/pvliesdonk-scholar-mcp (last updated 2026-10-24)