Scholar MCP
A FastMCP server providing 29 tools for searching and retrieving scholarly papers, patents, books, and standards. It supports full-text search, citation analysis, PDF-to-markdown conversion via docling, and enrichment with metadata from OpenAlex and Open Library.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
What you can do with it
- Search scholarly papers by DOI, arXiv ID, or author
- Retrieve patent bibliographic and claims data via EPO OPS
- Convert PDF documents to Markdown using docling
- Enrich citations with OpenAlex venue and Open Library data
Source and maintenance
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
pvliesdonk-scholar-mcp 2.0.0
{
"version": "2.0.0",
"transport": "stdio",
"identifier": "pvliesdonk-scholar-mcp",
"runtimeHint": "uvx",
"registryType": "pypi",
"environmentVariables": [
{
"name": "SCHOLAR_MCP_KV_STORE_URL",
"default": "file:///data/state",
"description": "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 family Docker images mount), or to `memory://` (with a warning) on a host where that directory is not usable."
},
{
"name": "SCHOLAR_MCP_TOOLS_ALLOW",
"description": "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`."
},
{
"name": "SCHOLAR_MCP_TOOLS_DENY",
"description": "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`."
},
{
"name": "SCHOLAR_MCP_SERVER_NAME",
"description": "Rename this server instance; defaults to the project name."
},
{
"name": "SCHOLAR_MCP_INSTANCE_DESCRIPTION",
"description": "Concise routing context that distinguishes this deployment's material or responsibility."
},
{
"name": "SCHOLAR_MCP_INSTRUCTIONS_EXTRA",
"description": "Deployment-specific behavioral policy added to the generated MCP instructions."
},
{
"name": "SCHOLAR_MCP_INSTRUCTIONS",
"description": "Legacy: replaces all generated MCP instructions (deprecated; use _INSTANCE_DESCRIPTION for routing and _INSTRUCTIONS_EXTRA for policy)."
},
{
"name": "FASTMCP_LOG_LEVEL",
"choices": [
"DEBUG",
"INFO",
"WARNING",
"ERROR",
"CRITICAL"
],
"default": "INFO",
"description": "Log level for FastMCP internals and app loggers (DEBUG / INFO / WARNING / ERROR / CRITICAL). The -v CLI flag overrides to DEBUG."
},
{
"name": "FASTMCP_ENABLE_RICH_LOGGING",
"format": "boolean",
"default": "true",
"description": "Set false for plain or structured JSON log output."
},
{
"name": "SCHOLAR_GITHUB_TOKEN",
"description": "GitHub token used to raise rate limits when fetching standards documents from GitHub. Optional; unauthenticated requests work at reduced limits."
},
{
"name": "SCHOLAR_MCP_READ_ONLY",
"format": "boolean",
"default": "true",
"description": "When true, write-tagged tools (PDF download and conversion cache writes) are hidden. Set false to enable them."
},
{
"name": "SCHOLAR_MCP_S2_API_KEY",
"description": "Semantic Scholar API key. Optional but strongly recommended: unauthenticated requests are limited to ~1 req/s. Request one at https://www.semanticscholar.org/product/api#api-key-form."
},
{
"name": "SCHOLAR_MCP_DOCLING_URL",
"description": "Base URL of a running docling-serve instance for PDF conversion (e.g. http://localhost:5001). When unset, PDF conversion tools return an error."
},
{
"name": "SCHOLAR_MCP_VLM_API_URL",
"description": "OpenAI-compatible VLM endpoint for formula and figure enrichment during PDF conversion."
},
{
"name": "SCHOLAR_MCP_VLM_API_KEY",
"description": "API key for the VLM endpoint."
},
{
"name": "SCHOLAR_MCP_VLM_MODEL",
"default": "gpt-4o",
"description": "Model name to use with the VLM endpoint."
},
{
"name": "SCHOLAR_MCP_CACHE_DIR",
"format": "filepath",
"default": "/data/scholar-mcp",
"description": "Directory for the SQLite cache database (cache.db) and downloaded PDFs (pdfs/, md/)."
},
{
"name": "SCHOLAR_MCP_CONTACT_EMAIL",
"description": "Contact email for the OpenAlex polite pool (improves rate limits). Also enables Unpaywall lookups as a PDF fallback source."
},
{
"name": "SCHOLAR_MCP_EPO_CONSUMER_KEY",
"description": "EPO Open Patent Services consumer key. Optional; patent tools are hidden when unset. Register at https://developers.epo.org/user/register."
},
{
"name": "SCHOLAR_MCP_EPO_CONSUMER_SECRET",
"description": "EPO Open Patent Services consumer secret. Optional; patent tools are hidden when unset."
},
{
"name": "SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY",
"description": "Google Books API key. Optional; book tools work unauthenticated at reduced rate limits."
},
{
"name": "SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S",
"format": "number",
"default": "25.0",
"description": "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."
},
{
"name": "SCHOLAR_MCP_JOBS_RESULT_TTL_S",
"format": "number",
"default": "3600.0",
"description": "Seconds a background-job record (working or finished) is retained for polling before it expires from the store."
},
{
"name": "SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT",
"format": "number",
"default": "256",
"description": "Maximum live background jobs per calling subject; further promotions are rejected until older records expire."
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"scholar-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-scholar-mcp==2.0.0"
],
"env": {
"SCHOLAR_MCP_KV_STORE_URL": "<YOUR_SCHOLAR_MCP_KV_STORE_URL>",
"SCHOLAR_MCP_TOOLS_ALLOW": "<YOUR_SCHOLAR_MCP_TOOLS_ALLOW>",
"SCHOLAR_MCP_TOOLS_DENY": "<YOUR_SCHOLAR_MCP_TOOLS_DENY>",
"SCHOLAR_MCP_SERVER_NAME": "<YOUR_SCHOLAR_MCP_SERVER_NAME>",
"SCHOLAR_MCP_INSTANCE_DESCRIPTION": "<YOUR_SCHOLAR_MCP_INSTANCE_DESCRIPTION>",
"SCHOLAR_MCP_INSTRUCTIONS_EXTRA": "<YOUR_SCHOLAR_MCP_INSTRUCTIONS_EXTRA>",
"SCHOLAR_MCP_INSTRUCTIONS": "<YOUR_SCHOLAR_MCP_INSTRUCTIONS>",
"FASTMCP_LOG_LEVEL": "<YOUR_FASTMCP_LOG_LEVEL>",
"FASTMCP_ENABLE_RICH_LOGGING": "<YOUR_FASTMCP_ENABLE_RICH_LOGGING>",
"SCHOLAR_GITHUB_TOKEN": "<YOUR_SCHOLAR_GITHUB_TOKEN>",
"SCHOLAR_MCP_READ_ONLY": "<YOUR_SCHOLAR_MCP_READ_ONLY>",
"SCHOLAR_MCP_S2_API_KEY": "<YOUR_SCHOLAR_MCP_S2_API_KEY>",
"SCHOLAR_MCP_DOCLING_URL": "<YOUR_SCHOLAR_MCP_DOCLING_URL>",
"SCHOLAR_MCP_VLM_API_URL": "<YOUR_SCHOLAR_MCP_VLM_API_URL>",
"SCHOLAR_MCP_VLM_API_KEY": "<YOUR_SCHOLAR_MCP_VLM_API_KEY>",
"SCHOLAR_MCP_VLM_MODEL": "<YOUR_SCHOLAR_MCP_VLM_MODEL>",
"SCHOLAR_MCP_CACHE_DIR": "<YOUR_SCHOLAR_MCP_CACHE_DIR>",
"SCHOLAR_MCP_CONTACT_EMAIL": "<YOUR_SCHOLAR_MCP_CONTACT_EMAIL>",
"SCHOLAR_MCP_EPO_CONSUMER_KEY": "<YOUR_SCHOLAR_MCP_EPO_CONSUMER_KEY>",
"SCHOLAR_MCP_EPO_CONSUMER_SECRET": "<YOUR_SCHOLAR_MCP_EPO_CONSUMER_SECRET>",
"SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY": "<YOUR_SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY>",
"SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S": "<YOUR_SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S>",
"SCHOLAR_MCP_JOBS_RESULT_TTL_S": "<YOUR_SCHOLAR_MCP_JOBS_RESULT_TTL_S>",
"SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT": "<YOUR_SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT>"
}
}
}
}Cline
{
"mcpServers": {
"scholar-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-scholar-mcp==2.0.0"
],
"env": {
"SCHOLAR_MCP_KV_STORE_URL": "<YOUR_SCHOLAR_MCP_KV_STORE_URL>",
"SCHOLAR_MCP_TOOLS_ALLOW": "<YOUR_SCHOLAR_MCP_TOOLS_ALLOW>",
"SCHOLAR_MCP_TOOLS_DENY": "<YOUR_SCHOLAR_MCP_TOOLS_DENY>",
"SCHOLAR_MCP_SERVER_NAME": "<YOUR_SCHOLAR_MCP_SERVER_NAME>",
"SCHOLAR_MCP_INSTANCE_DESCRIPTION": "<YOUR_SCHOLAR_MCP_INSTANCE_DESCRIPTION>",
"SCHOLAR_MCP_INSTRUCTIONS_EXTRA": "<YOUR_SCHOLAR_MCP_INSTRUCTIONS_EXTRA>",
"SCHOLAR_MCP_INSTRUCTIONS": "<YOUR_SCHOLAR_MCP_INSTRUCTIONS>",
"FASTMCP_LOG_LEVEL": "<YOUR_FASTMCP_LOG_LEVEL>",
"FASTMCP_ENABLE_RICH_LOGGING": "<YOUR_FASTMCP_ENABLE_RICH_LOGGING>",
"SCHOLAR_GITHUB_TOKEN": "<YOUR_SCHOLAR_GITHUB_TOKEN>",
"SCHOLAR_MCP_READ_ONLY": "<YOUR_SCHOLAR_MCP_READ_ONLY>",
"SCHOLAR_MCP_S2_API_KEY": "<YOUR_SCHOLAR_MCP_S2_API_KEY>",
"SCHOLAR_MCP_DOCLING_URL": "<YOUR_SCHOLAR_MCP_DOCLING_URL>",
"SCHOLAR_MCP_VLM_API_URL": "<YOUR_SCHOLAR_MCP_VLM_API_URL>",
"SCHOLAR_MCP_VLM_API_KEY": "<YOUR_SCHOLAR_MCP_VLM_API_KEY>",
"SCHOLAR_MCP_VLM_MODEL": "<YOUR_SCHOLAR_MCP_VLM_MODEL>",
"SCHOLAR_MCP_CACHE_DIR": "<YOUR_SCHOLAR_MCP_CACHE_DIR>",
"SCHOLAR_MCP_CONTACT_EMAIL": "<YOUR_SCHOLAR_MCP_CONTACT_EMAIL>",
"SCHOLAR_MCP_EPO_CONSUMER_KEY": "<YOUR_SCHOLAR_MCP_EPO_CONSUMER_KEY>",
"SCHOLAR_MCP_EPO_CONSUMER_SECRET": "<YOUR_SCHOLAR_MCP_EPO_CONSUMER_SECRET>",
"SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY": "<YOUR_SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY>",
"SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S": "<YOUR_SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S>",
"SCHOLAR_MCP_JOBS_RESULT_TTL_S": "<YOUR_SCHOLAR_MCP_JOBS_RESULT_TTL_S>",
"SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT": "<YOUR_SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT>"
}
}
}
}VS Code
{
"servers": {
"scholar-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"pvliesdonk-scholar-mcp==2.0.0"
],
"env": {
"SCHOLAR_MCP_KV_STORE_URL": "<YOUR_SCHOLAR_MCP_KV_STORE_URL>",
"SCHOLAR_MCP_TOOLS_ALLOW": "<YOUR_SCHOLAR_MCP_TOOLS_ALLOW>",
"SCHOLAR_MCP_TOOLS_DENY": "<YOUR_SCHOLAR_MCP_TOOLS_DENY>",
"SCHOLAR_MCP_SERVER_NAME": "<YOUR_SCHOLAR_MCP_SERVER_NAME>",
"SCHOLAR_MCP_INSTANCE_DESCRIPTION": "<YOUR_SCHOLAR_MCP_INSTANCE_DESCRIPTION>",
"SCHOLAR_MCP_INSTRUCTIONS_EXTRA": "<YOUR_SCHOLAR_MCP_INSTRUCTIONS_EXTRA>",
"SCHOLAR_MCP_INSTRUCTIONS": "<YOUR_SCHOLAR_MCP_INSTRUCTIONS>",
"FASTMCP_LOG_LEVEL": "<YOUR_FASTMCP_LOG_LEVEL>",
"FASTMCP_ENABLE_RICH_LOGGING": "<YOUR_FASTMCP_ENABLE_RICH_LOGGING>",
"SCHOLAR_GITHUB_TOKEN": "<YOUR_SCHOLAR_GITHUB_TOKEN>",
"SCHOLAR_MCP_READ_ONLY": "<YOUR_SCHOLAR_MCP_READ_ONLY>",
"SCHOLAR_MCP_S2_API_KEY": "<YOUR_SCHOLAR_MCP_S2_API_KEY>",
"SCHOLAR_MCP_DOCLING_URL": "<YOUR_SCHOLAR_MCP_DOCLING_URL>",
"SCHOLAR_MCP_VLM_API_URL": "<YOUR_SCHOLAR_MCP_VLM_API_URL>",
"SCHOLAR_MCP_VLM_API_KEY": "<YOUR_SCHOLAR_MCP_VLM_API_KEY>",
"SCHOLAR_MCP_VLM_MODEL": "<YOUR_SCHOLAR_MCP_VLM_MODEL>",
"SCHOLAR_MCP_CACHE_DIR": "<YOUR_SCHOLAR_MCP_CACHE_DIR>",
"SCHOLAR_MCP_CONTACT_EMAIL": "<YOUR_SCHOLAR_MCP_CONTACT_EMAIL>",
"SCHOLAR_MCP_EPO_CONSUMER_KEY": "<YOUR_SCHOLAR_MCP_EPO_CONSUMER_KEY>",
"SCHOLAR_MCP_EPO_CONSUMER_SECRET": "<YOUR_SCHOLAR_MCP_EPO_CONSUMER_SECRET>",
"SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY": "<YOUR_SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY>",
"SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S": "<YOUR_SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S>",
"SCHOLAR_MCP_JOBS_RESULT_TTL_S": "<YOUR_SCHOLAR_MCP_JOBS_RESULT_TTL_S>",
"SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT": "<YOUR_SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT>"
}
}
}
}Claude Desktop
{
"mcpServers": {
"scholar-mcp": {
"command": "uvx",
"args": [
"pvliesdonk-scholar-mcp==2.0.0"
],
"env": {
"SCHOLAR_MCP_KV_STORE_URL": "<YOUR_SCHOLAR_MCP_KV_STORE_URL>",
"SCHOLAR_MCP_TOOLS_ALLOW": "<YOUR_SCHOLAR_MCP_TOOLS_ALLOW>",
"SCHOLAR_MCP_TOOLS_DENY": "<YOUR_SCHOLAR_MCP_TOOLS_DENY>",
"SCHOLAR_MCP_SERVER_NAME": "<YOUR_SCHOLAR_MCP_SERVER_NAME>",
"SCHOLAR_MCP_INSTANCE_DESCRIPTION": "<YOUR_SCHOLAR_MCP_INSTANCE_DESCRIPTION>",
"SCHOLAR_MCP_INSTRUCTIONS_EXTRA": "<YOUR_SCHOLAR_MCP_INSTRUCTIONS_EXTRA>",
"SCHOLAR_MCP_INSTRUCTIONS": "<YOUR_SCHOLAR_MCP_INSTRUCTIONS>",
"FASTMCP_LOG_LEVEL": "<YOUR_FASTMCP_LOG_LEVEL>",
"FASTMCP_ENABLE_RICH_LOGGING": "<YOUR_FASTMCP_ENABLE_RICH_LOGGING>",
"SCHOLAR_GITHUB_TOKEN": "<YOUR_SCHOLAR_GITHUB_TOKEN>",
"SCHOLAR_MCP_READ_ONLY": "<YOUR_SCHOLAR_MCP_READ_ONLY>",
"SCHOLAR_MCP_S2_API_KEY": "<YOUR_SCHOLAR_MCP_S2_API_KEY>",
"SCHOLAR_MCP_DOCLING_URL": "<YOUR_SCHOLAR_MCP_DOCLING_URL>",
"SCHOLAR_MCP_VLM_API_URL": "<YOUR_SCHOLAR_MCP_VLM_API_URL>",
"SCHOLAR_MCP_VLM_API_KEY": "<YOUR_SCHOLAR_MCP_VLM_API_KEY>",
"SCHOLAR_MCP_VLM_MODEL": "<YOUR_SCHOLAR_MCP_VLM_MODEL>",
"SCHOLAR_MCP_CACHE_DIR": "<YOUR_SCHOLAR_MCP_CACHE_DIR>",
"SCHOLAR_MCP_CONTACT_EMAIL": "<YOUR_SCHOLAR_MCP_CONTACT_EMAIL>",
"SCHOLAR_MCP_EPO_CONSUMER_KEY": "<YOUR_SCHOLAR_MCP_EPO_CONSUMER_KEY>",
"SCHOLAR_MCP_EPO_CONSUMER_SECRET": "<YOUR_SCHOLAR_MCP_EPO_CONSUMER_SECRET>",
"SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY": "<YOUR_SCHOLAR_MCP_GOOGLE_BOOKS_API_KEY>",
"SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S": "<YOUR_SCHOLAR_MCP_JOBS_SOFT_DEADLINE_S>",
"SCHOLAR_MCP_JOBS_RESULT_TTL_S": "<YOUR_SCHOLAR_MCP_JOBS_RESULT_TTL_S>",
"SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT": "<YOUR_SCHOLAR_MCP_JOBS_MAX_PER_SUBJECT>"
}
}
}
}Let your agent find its tools
Find servers like Scholar MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.