Scholarly papers, patents, books, standards and PDF conversion
Connect Runs on your machine
claude mcp add scholar-mcp -e SCHOLAR_MCP_KV_STORE_URL=<SCHOLAR_MCP_KV_STORE_URL> -e SCHOLAR_MCP_TOOLS_ALLOW=<SCHOLAR_MCP_TOOLS_ALLOW> -e SCHOLAR_MCP_TOOLS_DENY=<SCHOLAR_MCP_TOOLS_DENY> -e SCHOLAR_MCP_SERVER_NAME=<SCHOLAR_MCP_SERVER_NAME> -e SCHOLAR_MCP_INSTANCE_DESCRIPTION=<SCHOLAR_MCP_INSTANCE_DESCRIPTION> -e SCHOLAR_MCP_INSTRUCTIONS_EXTRA=<SCHOLAR_MCP_INSTRUCTIONS_EXTRA> -e SCHOLAR_MCP_INSTRUCTIONS=<SCHOLAR_MCP_INSTRUCTIONS> -e SCHOLAR_MCP_LOG_LEVEL=<SCHOLAR_MCP_LOG_LEVEL> -e SCHOLAR_MCP_LOG_FORMAT=<SCHOLAR_MCP_LOG_FORMAT> -e SCHOLAR_GITHUB_TOKEN=<SCHOLAR_GITHUB_TOKEN> -e SCHOLAR_MCP_READ_ONLY=<SCHOLAR_MCP_READ_ONLY> -e SCHOLAR_MCP_S2_API_KEY=<SCHOLAR_MCP_S2_API_KEY> -e SCHOLAR_MCP_DOCLING_URL=<SCHOLAR_MCP_DOCLING_URL> -e SCHOLAR_MCP_VLM_API_URL=<SCHOLAR_MCP_VLM_API_URL> -e SCHOLAR_MCP_VLM_API_KEY=<SCHOLAR_MCP_VLM_API_KEY> -e SCHOLAR_MCP_VLM_MODEL=<SCHOLAR_MCP_VLM_MODEL> -e SCHOLAR_MCP_VLM_PARAMS=<SCHOLAR_MCP_VLM_PARAMS> -e SCHOLAR_MCP_CACHE_DIR=<SCHOLAR_MCP_CACHE_DIR> -e SCHOLAR_MCP_CONTACT_EMAIL=<SCHOLAR_MCP_CONTACT_EMAIL> -e SCHOLAR_MCP_EPO_CONSUMER_KEY=<SCHOLAR_MCP_EPO_CONSUMER_KEY> -e SCHOLAR_MCP_EPO_CONSUMER_SECRET=<SCHOLAR_MCP_EPO_CONSUMER_SECRET> -e SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY=<SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY> -e SCHOLAR_MCP_ACCESS_LINKS=<SCHOLAR_MCP_ACCESS_LINKS> -e SCHOLAR_MCP_PDF_FETCH_ALLOW_PRIVATE=<SCHOLAR_MCP_PDF_FETCH_ALLOW_PRIVATE> -e SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S=<SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S> -e SCHOLAR_MCP_JOBS_RESULT_TTL_S=<SCHOLAR_MCP_JOBS_RESULT_TTL_S> -e SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT=<SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT> -e SCHOLAR_MCP_TRANSFER_TTL_DEFAULT_S=<SCHOLAR_MCP_TRANSFER_TTL_DEFAULT_S> -e SCHOLAR_MCP_TRANSFER_TTL_MAX_S=<SCHOLAR_MCP_TRANSFER_TTL_MAX_S> -e SCHOLAR_MCP_TRANSFER_GRACE_TTL_S=<SCHOLAR_MCP_TRANSFER_GRACE_TTL_S> -e SCHOLAR_MCP_TRANSFER_LEASE_S=<SCHOLAR_MCP_TRANSFER_LEASE_S> -e SCHOLAR_MCP_TRANSFER_MAX_UPLOAD_BYTES=<SCHOLAR_MCP_TRANSFER_MAX_UPLOAD_BYTES> -- uvx pvliesdonk-scholar-mcp==3.2.0
{
"mcpServers": {
"scholar-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-scholar-mcp==3.2.0"
],
"env": {
"SCHOLAR_MCP_KV_STORE_URL": "<SCHOLAR_MCP_KV_STORE_URL>",
"SCHOLAR_MCP_TOOLS_ALLOW": "<SCHOLAR_MCP_TOOLS_ALLOW>",
"SCHOLAR_MCP_TOOLS_DENY": "<SCHOLAR_MCP_TOOLS_DENY>",
"SCHOLAR_MCP_SERVER_NAME": "<SCHOLAR_MCP_SERVER_NAME>",
"SCHOLAR_MCP_INSTANCE_DESCRIPTION": "<SCHOLAR_MCP_INSTANCE_DESCRIPTION>",
"SCHOLAR_MCP_INSTRUCTIONS_EXTRA": "<SCHOLAR_MCP_INSTRUCTIONS_EXTRA>",
"SCHOLAR_MCP_INSTRUCTIONS": "<SCHOLAR_MCP_INSTRUCTIONS>",
"SCHOLAR_MCP_LOG_LEVEL": "<SCHOLAR_MCP_LOG_LEVEL>",
"SCHOLAR_MCP_LOG_FORMAT": "<SCHOLAR_MCP_LOG_FORMAT>",
"SCHOLAR_GITHUB_TOKEN": "<SCHOLAR_GITHUB_TOKEN>",
"SCHOLAR_MCP_READ_ONLY": "<SCHOLAR_MCP_READ_ONLY>",
"SCHOLAR_MCP_S2_API_KEY": "<SCHOLAR_MCP_S2_API_KEY>",
"SCHOLAR_MCP_DOCLING_URL": "<SCHOLAR_MCP_DOCLING_URL>",
"SCHOLAR_MCP_VLM_API_URL": "<SCHOLAR_MCP_VLM_API_URL>",
"SCHOLAR_MCP_VLM_API_KEY": "<SCHOLAR_MCP_VLM_API_KEY>",
"SCHOLAR_MCP_VLM_MODEL": "<SCHOLAR_MCP_VLM_MODEL>",
"SCHOLAR_MCP_VLM_PARAMS": "<SCHOLAR_MCP_VLM_PARAMS>",
"SCHOLAR_MCP_CACHE_DIR": "<SCHOLAR_MCP_CACHE_DIR>",
"SCHOLAR_MCP_CONTACT_EMAIL": "<SCHOLAR_MCP_CONTACT_EMAIL>",
"SCHOLAR_MCP_EPO_CONSUMER_KEY": "<SCHOLAR_MCP_EPO_CONSUMER_KEY>",
"SCHOLAR_MCP_EPO_CONSUMER_SECRET": "<SCHOLAR_MCP_EPO_CONSUMER_SECRET>",
"SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY": "<SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY>",
"SCHOLAR_MCP_ACCESS_LINKS": "<SCHOLAR_MCP_ACCESS_LINKS>",
"SCHOLAR_MCP_PDF_FETCH_ALLOW_PRIVATE": "<SCHOLAR_MCP_PDF_FETCH_ALLOW_PRIVATE>",
"SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S": "<SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S>",
"SCHOLAR_MCP_JOBS_RESULT_TTL_S": "<SCHOLAR_MCP_JOBS_RESULT_TTL_S>",
"SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT": "<SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT>",
"SCHOLAR_MCP_TRANSFER_TTL_DEFAULT_S": "<SCHOLAR_MCP_TRANSFER_TTL_DEFAULT_S>",
"SCHOLAR_MCP_TRANSFER_TTL_MAX_S": "<SCHOLAR_MCP_TRANSFER_TTL_MAX_S>",
"SCHOLAR_MCP_TRANSFER_GRACE_TTL_S": "<SCHOLAR_MCP_TRANSFER_GRACE_TTL_S>",
"SCHOLAR_MCP_TRANSFER_LEASE_S": "<SCHOLAR_MCP_TRANSFER_LEASE_S>",
"SCHOLAR_MCP_TRANSFER_MAX_UPLOAD_BYTES": "<SCHOLAR_MCP_TRANSFER_MAX_UPLOAD_BYTES>"
}
}
}
}
{
"mcpServers": {
"scholar-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-scholar-mcp==3.2.0"
],
"env": {
"SCHOLAR_MCP_KV_STORE_URL": "<SCHOLAR_MCP_KV_STORE_URL>",
"SCHOLAR_MCP_TOOLS_ALLOW": "<SCHOLAR_MCP_TOOLS_ALLOW>",
"SCHOLAR_MCP_TOOLS_DENY": "<SCHOLAR_MCP_TOOLS_DENY>",
"SCHOLAR_MCP_SERVER_NAME": "<SCHOLAR_MCP_SERVER_NAME>",
"SCHOLAR_MCP_INSTANCE_DESCRIPTION": "<SCHOLAR_MCP_INSTANCE_DESCRIPTION>",
"SCHOLAR_MCP_INSTRUCTIONS_EXTRA": "<SCHOLAR_MCP_INSTRUCTIONS_EXTRA>",
"SCHOLAR_MCP_INSTRUCTIONS": "<SCHOLAR_MCP_INSTRUCTIONS>",
"SCHOLAR_MCP_LOG_LEVEL": "<SCHOLAR_MCP_LOG_LEVEL>",
"SCHOLAR_MCP_LOG_FORMAT": "<SCHOLAR_MCP_LOG_FORMAT>",
"SCHOLAR_GITHUB_TOKEN": "<SCHOLAR_GITHUB_TOKEN>",
"SCHOLAR_MCP_READ_ONLY": "<SCHOLAR_MCP_READ_ONLY>",
"SCHOLAR_MCP_S2_API_KEY": "<SCHOLAR_MCP_S2_API_KEY>",
"SCHOLAR_MCP_DOCLING_URL": "<SCHOLAR_MCP_DOCLING_URL>",
"SCHOLAR_MCP_VLM_API_URL": "<SCHOLAR_MCP_VLM_API_URL>",
"SCHOLAR_MCP_VLM_API_KEY": "<SCHOLAR_MCP_VLM_API_KEY>",
"SCHOLAR_MCP_VLM_MODEL": "<SCHOLAR_MCP_VLM_MODEL>",
"SCHOLAR_MCP_VLM_PARAMS": "<SCHOLAR_MCP_VLM_PARAMS>",
"SCHOLAR_MCP_CACHE_DIR": "<SCHOLAR_MCP_CACHE_DIR>",
"SCHOLAR_MCP_CONTACT_EMAIL": "<SCHOLAR_MCP_CONTACT_EMAIL>",
"SCHOLAR_MCP_EPO_CONSUMER_KEY": "<SCHOLAR_MCP_EPO_CONSUMER_KEY>",
"SCHOLAR_MCP_EPO_CONSUMER_SECRET": "<SCHOLAR_MCP_EPO_CONSUMER_SECRET>",
"SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY": "<SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY>",
"SCHOLAR_MCP_ACCESS_LINKS": "<SCHOLAR_MCP_ACCESS_LINKS>",
"SCHOLAR_MCP_PDF_FETCH_ALLOW_PRIVATE": "<SCHOLAR_MCP_PDF_FETCH_ALLOW_PRIVATE>",
"SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S": "<SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S>",
"SCHOLAR_MCP_JOBS_RESULT_TTL_S": "<SCHOLAR_MCP_JOBS_RESULT_TTL_S>",
"SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT": "<SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT>",
"SCHOLAR_MCP_TRANSFER_TTL_DEFAULT_S": "<SCHOLAR_MCP_TRANSFER_TTL_DEFAULT_S>",
"SCHOLAR_MCP_TRANSFER_TTL_MAX_S": "<SCHOLAR_MCP_TRANSFER_TTL_MAX_S>",
"SCHOLAR_MCP_TRANSFER_GRACE_TTL_S": "<SCHOLAR_MCP_TRANSFER_GRACE_TTL_S>",
"SCHOLAR_MCP_TRANSFER_LEASE_S": "<SCHOLAR_MCP_TRANSFER_LEASE_S>",
"SCHOLAR_MCP_TRANSFER_MAX_UPLOAD_BYTES": "<SCHOLAR_MCP_TRANSFER_MAX_UPLOAD_BYTES>"
}
}
}
}
{
"servers": {
"scholar-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"pvliesdonk-scholar-mcp==3.2.0"
],
"env": {
"SCHOLAR_MCP_KV_STORE_URL": "<SCHOLAR_MCP_KV_STORE_URL>",
"SCHOLAR_MCP_TOOLS_ALLOW": "<SCHOLAR_MCP_TOOLS_ALLOW>",
"SCHOLAR_MCP_TOOLS_DENY": "<SCHOLAR_MCP_TOOLS_DENY>",
"SCHOLAR_MCP_SERVER_NAME": "<SCHOLAR_MCP_SERVER_NAME>",
"SCHOLAR_MCP_INSTANCE_DESCRIPTION": "<SCHOLAR_MCP_INSTANCE_DESCRIPTION>",
"SCHOLAR_MCP_INSTRUCTIONS_EXTRA": "<SCHOLAR_MCP_INSTRUCTIONS_EXTRA>",
"SCHOLAR_MCP_INSTRUCTIONS": "<SCHOLAR_MCP_INSTRUCTIONS>",
"SCHOLAR_MCP_LOG_LEVEL": "<SCHOLAR_MCP_LOG_LEVEL>",
"SCHOLAR_MCP_LOG_FORMAT": "<SCHOLAR_MCP_LOG_FORMAT>",
"SCHOLAR_GITHUB_TOKEN": "<SCHOLAR_GITHUB_TOKEN>",
"SCHOLAR_MCP_READ_ONLY": "<SCHOLAR_MCP_READ_ONLY>",
"SCHOLAR_MCP_S2_API_KEY": "<SCHOLAR_MCP_S2_API_KEY>",
"SCHOLAR_MCP_DOCLING_URL": "<SCHOLAR_MCP_DOCLING_URL>",
"SCHOLAR_MCP_VLM_API_URL": "<SCHOLAR_MCP_VLM_API_URL>",
"SCHOLAR_MCP_VLM_API_KEY": "<SCHOLAR_MCP_VLM_API_KEY>",
"SCHOLAR_MCP_VLM_MODEL": "<SCHOLAR_MCP_VLM_MODEL>",
"SCHOLAR_MCP_VLM_PARAMS": "<SCHOLAR_MCP_VLM_PARAMS>",
"SCHOLAR_MCP_CACHE_DIR": "<SCHOLAR_MCP_CACHE_DIR>",
"SCHOLAR_MCP_CONTACT_EMAIL": "<SCHOLAR_MCP_CONTACT_EMAIL>",
"SCHOLAR_MCP_EPO_CONSUMER_KEY": "<SCHOLAR_MCP_EPO_CONSUMER_KEY>",
"SCHOLAR_MCP_EPO_CONSUMER_SECRET": "<SCHOLAR_MCP_EPO_CONSUMER_SECRET>",
"SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY": "<SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY>",
"SCHOLAR_MCP_ACCESS_LINKS": "<SCHOLAR_MCP_ACCESS_LINKS>",
"SCHOLAR_MCP_PDF_FETCH_ALLOW_PRIVATE": "<SCHOLAR_MCP_PDF_FETCH_ALLOW_PRIVATE>",
"SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S": "<SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S>",
"SCHOLAR_MCP_JOBS_RESULT_TTL_S": "<SCHOLAR_MCP_JOBS_RESULT_TTL_S>",
"SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT": "<SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT>",
"SCHOLAR_MCP_TRANSFER_TTL_DEFAULT_S": "<SCHOLAR_MCP_TRANSFER_TTL_DEFAULT_S>",
"SCHOLAR_MCP_TRANSFER_TTL_MAX_S": "<SCHOLAR_MCP_TRANSFER_TTL_MAX_S>",
"SCHOLAR_MCP_TRANSFER_GRACE_TTL_S": "<SCHOLAR_MCP_TRANSFER_GRACE_TTL_S>",
"SCHOLAR_MCP_TRANSFER_LEASE_S": "<SCHOLAR_MCP_TRANSFER_LEASE_S>",
"SCHOLAR_MCP_TRANSFER_MAX_UPLOAD_BYTES": "<SCHOLAR_MCP_TRANSFER_MAX_UPLOAD_BYTES>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
SCHOLAR_MCP_KV_STORE_URLOptional | Persistent-state backend URL shared by every pvl-core subsystem that needs state. `memory://` is in-process and lost on restart; `file:///path` persists on one server; `redis://`, `dynamodb://` and `mongodb://` each need their matching extra. When unset, defaults to `file:///data/state` (the volume… |
SCHOLAR_MCP_TOOLS_ALLOWOptional | Comma-separated explicit tool names this instance exposes; every other tool is hidden from listings and cannot be invoked. Names matching no registered tool are inert. Mutually exclusive with `tools_deny`. Takes effect through `apply_tool_visibility`. |
SCHOLAR_MCP_TOOLS_DENYOptional | Comma-separated explicit tool names hidden from this instance (absent from listings, cannot be invoked). Names matching no registered tool are inert. Mutually exclusive with `tools_allow`. Takes effect through `apply_tool_visibility`. |
SCHOLAR_MCP_SERVER_NAMEOptional | Rename this server instance; defaults to the project name. |
SCHOLAR_MCP_INSTANCE_DESCRIPTIONOptional | Concise routing context that distinguishes this deployment's material or responsibility. |
SCHOLAR_MCP_INSTRUCTIONS_EXTRAOptional | Deployment-specific behavioral policy added to the generated MCP instructions. |
SCHOLAR_MCP_INSTRUCTIONSOptional | Legacy: replaces all generated MCP instructions (deprecated; use _INSTANCE_DESCRIPTION for routing and _INSTRUCTIONS_EXTRA for policy). |
SCHOLAR_MCP_LOG_LEVELOptional | Log level for every logger in the process, FastMCP's included (DEBUG / INFO / WARNING / ERROR / CRITICAL). The -v CLI flag overrides to DEBUG. The unprefixed FASTMCP_LOG_LEVEL still works for one major version and logs a deprecation warning. |
SCHOLAR_MCP_LOG_FORMATOptional | Log rendering. rich is one colour event key=value line per record, for a terminal; json is one JSON object per record, for a collector. Unset picks rich when stderr is a terminal and json everywhere else, so a container or journald gets JSON with no configuration. |
SCHOLAR_GITHUB_TOKENOptional, secret | GitHub token used to raise rate limits when fetching standards documents from GitHub. Optional; unauthenticated requests work at reduced limits. |
SCHOLAR_MCP_READ_ONLYOptional | When true, write-tagged tools (PDF download and conversion cache writes) are hidden. Set false to enable them. |
SCHOLAR_MCP_S2_API_KEYOptional, secret | Semantic Scholar API key. Optional but strongly recommended: a key has an introductory 1 req/s allowance; anonymous users share capacity and may be throttled. Request one at https://www.semanticscholar.org/product/api#api-key-form. |
SCHOLAR_MCP_DOCLING_URLOptional | Base URL of a running docling-serve instance for PDF conversion (e.g. http://localhost:5001). When unset, PDF conversion tools return an error. |
SCHOLAR_MCP_VLM_API_URLOptional | OpenAI-compatible VLM endpoint for formula and figure enrichment during PDF conversion. |
SCHOLAR_MCP_VLM_API_KEYOptional, secret | API key for the VLM endpoint. |
SCHOLAR_MCP_VLM_MODELOptional | Model name to use with the VLM endpoint. |
SCHOLAR_MCP_VLM_PARAMSOptional | JSON object of extra request parameters for every VLM call, overriding the defaults, for a model that needs them (e.g. {"temperature": 1}). |
SCHOLAR_MCP_CACHE_DIROptional | Directory for the SQLite cache database (cache.db) and downloaded PDFs (pdfs/, md/). |
SCHOLAR_MCP_CONTACT_EMAILOptional | Contact email for the OpenAlex polite pool (improves rate limits). Also enables Unpaywall lookups as a PDF fallback source. |
SCHOLAR_MCP_EPO_CONSUMER_KEYOptional | EPO Open Patent Services consumer key. Optional; patent tools are hidden when unset. Register at https://developers.epo.org/user/register. |
SCHOLAR_MCP_EPO_CONSUMER_SECRETOptional, secret | EPO Open Patent Services consumer secret. Optional; patent tools are hidden when unset. |
SCHOLAR_MCP_GOOGLE_BOOKS_API_KEYOptional, secret | Google Books API key. Optional; book tools work unauthenticated at reduced rate limits. |
SCHOLAR_MCP_ACCESS_LINKSOptional | Links to a paper through your library, offered when no PDF can be fetched and with each paper lookup: a JSON list of objects with a label and an http(s) URL template, in priority order. Placeholders: {doi}, {doi_url} (the encoded doi.org URL, for wrapping), {openurl} (OpenURL 1.0), {openurl_0_1} an… |
SCHOLAR_MCP_PDF_FETCH_ALLOW_PRIVATEOptional | When false (the default), a PDF download is refused if the host, or a redirect target, resolves to a loopback, private, link-local or other non-public address. This covers URLs the caller supplies and URLs taken from paper metadata. Set true to allow hosts on the server's own network, such as an in… |
SCHOLAR_MCP_JOBS_SOFT_DEADLINE_SOptional | Seconds a long-running tool call may run in the foreground before it is promoted to a background job and a job handle is returned instead. |
SCHOLAR_MCP_JOBS_RESULT_TTL_SOptional | Seconds a background-job record (working or finished) is retained for polling before it expires from the store. |
SCHOLAR_MCP_JOBS_MAX_PER_SUBJECTOptional | Maximum live background jobs per calling subject; further promotions are rejected until older records expire. |
SCHOLAR_MCP_TRANSFER_TTL_DEFAULT_SOptional | Link lifetime in seconds when the caller requests no explicit TTL. |
SCHOLAR_MCP_TRANSFER_TTL_MAX_SOptional | Ceiling in seconds a caller-requested link TTL is clamped to. |
SCHOLAR_MCP_TRANSFER_GRACE_TTL_SOptional | Post-success grace window in seconds: a served token's TTL shrinks to this so a stalled transfer can retry within it. |
SCHOLAR_MCP_TRANSFER_LEASE_SOptional | Crashed-handler reclaim window in seconds for an in-flight reservation. |
SCHOLAR_MCP_TRANSFER_MAX_UPLOAD_BYTESOptional | Maximum size in bytes of a single upload. |
Details
| Package | [email protected] (PYPI, stdio) |
| Package | ghcr.io/pvliesdonk/scholar-mcp:v3.2.0 (OCI, streamable-http) |
| First published | 9 Nov 2026 |
| Last updated | 9 Nov 2026 |
| Registry name | io.github.pvliesdonk/scholar-mcp |
More files and documents servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
