scholar-toolkit-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| paper_toolkit_mcp_ENV_FILE | No | Custom path to a .env file to load environment variables from. | |
| paper_toolkit_mcp_ACM_API_KEY | No | Optional API key to activate ACM Digital Library connector. See https://libraries.acm.org/digital-library/acm-open | |
| paper_toolkit_mcp_CORE_API_KEY | No | Free API key from CORE (recommended). Obtain at https://core.ac.uk/services/api | |
| paper_toolkit_mcp_DOAJ_API_KEY | No | Optional API key for DOAJ to raise hourly rate limit. Get at https://doaj.org/apply-for-api-key/ | |
| paper_toolkit_mcp_IEEE_API_KEY | No | Optional API key to activate IEEE Xplore connector. Free at https://developer.ieee.org/ | |
| paper_toolkit_mcp_UNPAYWALL_EMAIL | No | Email required for Unpaywall (required for Unpaywall to work). Any valid email; register at https://unpaywall.org/products/api | |
| paper_toolkit_mcp_ZENODO_ACCESS_TOKEN | No | Optional access token for Zenodo private records. Get at https://zenodo.org/account/settings/applications/ | |
| paper_toolkit_mcp_GOOGLE_SCHOLAR_PROXY_URL | No | Optional proxy URL to bypass Google Scholar bot-detection. Use your HTTP/HTTPS proxy URL. | |
| paper_toolkit_mcp_SEMANTIC_SCHOLAR_API_KEY | No | Optional API key for Semantic Scholar to improve rate limits. Get at https://www.semanticscholar.org/product/api |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_papersA | Unified top-level search across all configured academic platforms. Returns only cite_key + title + abstract + year + source for each paper. Papers without abstract are discarded. Defaults to last 5 years. Args: query: Search query string. max_results_per_source: Max results to fetch from each selected source. sources: Source names, preset group, or 'all'. Groups: medical (pubmed,pmc,medrxiv), cs (arxiv,dblp,semantic), metadata (crossref,openalex). Or comma-separated individual names. year_from: Earliest publication year (default: current year - 5). Pass 0 to disable year filtering. year_to: Latest publication year (default: none). Returns: Aggregated dict with per-source stats, errors, and simplified papers. |
| get_paper_by_doiA | Get paper metadata by DOI with multi-source fallback. Tries CrossRef first (richest metadata), then Semantic Scholar (best abstract coverage) to backfill missing abstract. Only saves to local library when an abstract is available. Args: doi: Digital Object Identifier (e.g., '10.1038/nature12373'). Returns: Paper metadata dict. Empty dict if not found at all. |
| download_paperA | Try source-native download, OA repositories, Unpaywall, then optional Sci-Hub. Args: source: Source name (arxiv, medrxiv, semantic, crossref, pubmed, pmc, dblp, openalex). paper_id: Source-native paper identifier. doi: Optional DOI used for repository/unpaywall/Sci-Hub fallback. title: Optional title used for repository/Sci-Hub fallback when DOI is unavailable. save_path: Directory to save downloaded files. use_scihub: Whether to fallback to Sci-Hub after OA attempts fail. scihub_base_url: Sci-Hub mirror URL for fallback. Returns: Download path on success or explanatory error message. |
| download_by_cite_keyA | Download a paper's PDF using its cite_key. Looks up the paper in the local library by cite_key, checks for an existing local PDF, then falls back to download_paper. Args: cite_key: The paper's cite_key (e.g. 'Kxq') from search results. save_path: Directory to save the PDF (default: /downloads). Returns: Path to the downloaded PDF, or an error message. |
| read_by_cite_keyA | Download and extract full text from a paper using its cite_key. Checks for cached full text first, then downloads the PDF and extracts text via pypdf. The extracted text is cached in the local library. Args: cite_key: The paper's cite_key (e.g. 'Kxq') from search results. save_path: Directory for PDF download (default: /downloads). Returns: The extracted text content, or an error message. |
| cache_clearA | Clear all cached search results. Returns: Dict with number of cleared entries. |
| library_searchA | Search the local paper library (SQLite) by keyword. Searches across title, authors, and abstract of all previously fetched papers. This is an offline operation — no network calls are made. Args: keyword: Search keyword (matched against title/authors/abstract). limit: Maximum number of results to return (default: 50). Returns: List of matching paper records from the local library. |
| library_statsA | Get statistics about the local paper library. Returns: Dict with total paper count, counts by source, PDF/fulltext coverage, and the database file path. |
| harness_initA | Initialize harness infrastructure for academic paper writing. Creates the following structure in the project directory:
Args: project_dir: Target project directory path. Defaults to current working directory. force: If True, overwrite existing .harness/ directory. Defaults to False. Returns: JSON string with initialization status and next steps. |
| harness_verifyA | Verify a manuscript against harness rules. Runs the harness verification script on the specified manuscript file and returns a JSON report of violations, warnings, and info messages. Args: manuscript_path: Path to the manuscript markdown file. verbose: If True, include detailed violation information. Defaults to False. Returns: JSON string with verification results including error count, warning count, and detailed violation information. |
| harness_list_rulesA | List all harness rules with their descriptions. Returns a summary of all verification rules (R0-R9) including rule ID, name, severity, and brief description. Returns: JSON string with list of all rules. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/czwziy/paper-toolkit-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server