paper-download-mcp
Enables downloading scholarly papers via Elsevier's Article Retrieval API, including probing availability, fetching PDFs to a temporary staging area, and verifying the resulting artifacts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@paper-download-mcpprobe DOI 10.3390/su15108123 with hint mdpi"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
paper-download-mcp
General-purpose paper downloader MCP: probes providers by DOI/UT identifier, downloads to a short-lived staging area, verifies the PDF, and cleans up. It does not connect to PostgreSQL, does not accept project/output_dir/year/publisher/filename, and does not manage final storage—those are the responsibility of the calling project (e.g., the HC integration side).
Architecture (converged 2026-07-22)
MCP (通用获取器) 调用项目集成侧
health 任务规划与项目筛选
list_providers 最终存储与资产登记
probe(identifier, hint?) 批量编排与限速
fetch(identifier, hint?) → artifact 下载审计
verify_artifact(id) 项目级状态管理
discard_artifact(id)Related MCP server: acatome-quest-mcp
Tools (6)
Tool | Description |
| Version/staging directory/provider availability (does not echo keys) |
| Lists providers and their status |
| Probes whether a provider can fetch a given identifier |
| Downloads to staging, returns artifact_id (does not accept project/output_dir, etc.) |
| Verifies the staged PDF (existence/page count/hash/size) |
| Cleans up the staged artifact |
fetch returns: artifact_id / temp_path / source / byte count / SHA-256 / page count / status / failure classification.
Providers
Provider | Status | Description |
| ✅ | For testing, synthesizes PDFs, no network |
| ✅ controlled enablement | Article Retrieval API; requires authorization, campus IP, and a 0600 key file |
| ✅ | cloakbrowser extracts the PDF link and captures the browser download |
| ✅ | cloakbrowser obtains cookies, requests downloads; limited subscription scope |
| ✅ | Redirected article URL goes from |
| ✅ | DOI journal prefix maps to the PLOS PDF address |
| ✅ | Article page and DOI suffix construct the PDF address |
| ✅ | Springer-like page structure and cookie download |
The Elsevier key only enters through the mode 0600 file pointed to by PAPER_DOWNLOAD_ELSEVIER_API_KEY_FILE, never into tool arguments, logs, or messages.
These providers' page rules come from practical records in existing English-literature paper download work; specific limitations and evidence are in docs/provider-acceptance.md. "Implemented" in code does not mean every paper is downloadable in the current network environment; subscriptions, page changes, rate limiting, and article takedowns still cause explainable failures.
This project does not integrate scansci-pdf. It is an independent third-party MCP and is not part of this project's provider chain.
Installation and Running
cd paper-download-mcp
python -m pip install -e ".[dev,browser]"
# 测试(无网络无 DB 无 secret)
python -m pytest tests -v
# 启动 MCP (stdio)
paper-download-mcp # 或 python -m paper_download_mcpBrowser providers require cloakbrowser; Elsevier's page-count verification requires the system to provide pdfinfo (usually from poppler-utils).
Calling Project Integration Side
The project side is responsible for candidate SQL, canonical storage policy, orchestration loop, asset table, and download audit. This MCP only delivers staged artifacts and their verification metadata.
Available Tools
6 toolspaper_download_discard_artifactC
Remove a staged artifact from the staging area.
| Name | Required | Description | Default |
|---|---|---|---|
| artifact_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a destructive action ('remove') but does not disclose details such as whether the removal is permanent, whether it affects other artifacts, or any associated side effects. With no annotations provided, the description carries the full transparency burden and fails to provide sufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately concise, though it sacrifices necessary detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too brief for a tool with no annotations and minimal schema information. It does not explain the workflow context (e.g., why discard an artifact, what happens after), nor does it leverage the output schema to provide hints. Given the existence of sibling tools like verify_artifact, more context is needed for an agent to decide when to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, artifact_id, is explained only by its name. The description does not clarify what an artifact_id is, how to obtain it, or any constraints (e.g., format, required staging status). With 0% schema description coverage, the description should compensate but does not add meaningful value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove') and the resource ('a staged artifact from the staging area'). It distinguishes itself from sibling tools like fetch, probe, and verify by focusing on the discard operation, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool vs alternatives, no mention of prerequisites (e.g., artifact must be staged first), and no indication of when not to use it. The description only states what it does, not when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
paper_download_fetchA
Fetch a paper into the staging area; return artifact metadata.
Does NOT accept project, output_dir, year, publisher, or final filename. The caller moves the verified artifact to final storage.
Args: identifier: DOI or UT. provider_hint: Preferred provider name (hard constraint if given).
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | ||
| provider_hint | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the transparency burden. It mentions 'Fetch a paper into the staging area' and clarifies that it does not accept certain parameters, giving some insight into its behavior. However, it does not detail side effects (e.g., network usage, potential failures) or mention whether it is read-only or modifies state. The 'verified artifact' phrase hints at a workflow but lacks explicit disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a clear main sentence, a separate line for exclusions, and an Args section listing parameters. No superfluous wording or redundancy, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description mentions 'return artifact metadata' which gives a basic idea of the output. It also explains the staging area and the caller's responsibility to move the verified artifact, providing workflow context. It does not cover error handling, but for a simple fetch tool, the coverage is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful semantics to both parameters: identifier is described as 'DOI or UT', and provider_hint is explained as 'Preferred provider name (hard constraint if given).' This exceeds the schema's bare definitions. Additionally, it lists exclusions (project, output_dir, etc.) that are not in the schema, further clarifying the parameter space.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Fetch a paper into the staging area; return artifact metadata.' The verb 'fetch' and resource 'paper' specify the primary action. It also distinguishes itself from siblings (discard, probe, health, list, verify) by focusing on the retrieval aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context by noting that it does NOT accept certain parameters (project, output_dir, year, publisher, final filename) and indicates the caller's role in moving the verified artifact to final storage. This implies when this tool should be used (for staging) versus final operations, though it does not explicitly compare with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
paper_download_healthA
Report version, staging dir, provider availability.
Never prints API keys or credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral transparency. It explicitly states that it never prints API keys or credentials, which is valuable. However, it does not address side effects, permissions, or other behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with two short sentences that directly convey the tool's purpose and a security guarantee. No redundant or unnecessary information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main outputs (version, staging dir, provider availability) and adds a security note. Given the absence of parameters and presence of an output schema, the description is reasonably complete for a simple health-check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers parameter semantics. The description adds no parameter-related details, but with no parameters to explain, this is acceptable per the baseline for 0 params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: reporting version, staging directory, and provider availability. This distinguishes it from sibling tools like fetch, probe, and verify, which have distinct purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternatives. There is no mention of typical scenarios, prerequisites, or conditions under which this health report would be needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
paper_download_list_providersA
List available download providers and their status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full transparency burden. It states the operation is a listing action, implying it is read-only and non-destructive, but it does not disclose any additional behavior such as authentication requirements, rate limits, or whether the status is cached. This is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 7 words, perfectly front-loaded and free of any filler or repetition. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description fully covers what the tool does. It specifies the resource (providers) and the information returned (status). The output schema presumably details the return structure, so no additional return-value explanation is needed. The description is complete for its scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so the description does not need to explain parameter semantics. The baseline for 0 parameters is 4, and the description appropriately avoids inventing parameters. It adds no unnecessary detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List available download providers and their status' with a specific verb (list), resource (download providers), and scope (their status). This distinguishes it from sibling tools like paper_download_fetch or paper_download_probe, which perform different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need to see what download providers are available, call this tool. However, it provides no explicit when/when-not guidance or mentions of alternatives, leaving the agent to infer context from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
paper_download_probeB
Probe whether a provider can likely fetch the given identifier.
Args: identifier: DOI (e.g. 10.1016/j.x) or UT. provider_hint: If given, only this provider is considered.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | ||
| provider_hint | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the full burden. It says 'Probe' but doesn't disclose potential side effects, whether it's read-only, if it makes network calls, rate limits, or what it returns. The description gives minimal behavioral info beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the purpose. The Args section is clear and brief. No wasted words, though it could be slightly expanded without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple probe with 2 parameters Chinad no output schema, the description adequately states purpose and parameters. However, it lacks behavioral details like whether it's a read-only operation and what the return value signifies, which would help an agent use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains both parameters beyond the schema: identifier is a DOI or UT, and provider_hint restricts to a single provider. This adds meaningful context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: to probe whether a provider can fetch a given identifier. It distinguishes from siblings like paper_download_fetch (which likely performs the fetch) by using 'probe' and 'likely'. However, it doesn't explicitly contrast with siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (check before fetching), but doesn't explicitly say when to use this vs alternatives. It provides context that provider_hint restricts to a single provider, but no exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
paper_download_verify_artifactA
Verify a staged artifact: existence, PDF validity, page count, hash.
| Name | Required | Description | Default |
|---|---|---|---|
| artifact_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. 'Verify' strongly implies a read-only operation with no side effects, and the listed checks clarify expected behavior. However, it does not explicitly state that no changes are made or what happens if verification fails, leaving minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence that conveys the purpose, scope, and method. Every word contributes value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and an output schema (which explains return values), the description sufficiently covers what is verified (existence, validity, page count, hash). It lacks explicit mention of error handling or prerequisites, but is otherwise complete for a straightforward verification task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 0%, the description must compensate. It does by clarifying that the only parameter, artifact_id, refers to a 'staged artifact', linking it to the verification context. It does not explain format, but a string ID is self-explanatory. This adds meaningful semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Verify' with a clear resource 'staged artifact' and lists precise checks (existence, PDF validity, page count, hash), distinguishing it from sibling tools like fetch, discard, probe, health, and list_providers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly indicates it applies to 'staged artifacts', which gives clear context for when to use. It does not mention alternatives or exclusions, but the 'staged' qualifier implies it follows fetch and precedes discard, providing enough contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
paper_download_discard_artifact - First observed
paper_download_fetch - First observed
paper_download_health - First observed
paper_download_list_providers - First observed
paper_download_probe - First observed
paper_download_verify_artifact
TDQS
Scored across 6 tools
Each tool has a clear, distinct role in the fetch→verify→discard workflow, plus provider/system introspection. Fetch and probe are differentiated by actual download vs. likelihood check, and health versus list_providers is similarly distinct.
All tools share the paper_download_ prefix and use snake_case, but most follow a verb_noun pattern while paper_download_health uses a noun. The overall convention is still predictable and readable.
With six tools covering fetch, discard, probe, health, provider listing, and verification, the count is well-scoped for a focused paper-download staging service. Each tool earns its place and there is no bloat.
The core lifecycle of fetching, verifying, discarding, and probing is covered, and provider/health introspection is present. A minor gap is the lack of a tool to list currently staged artifacts, though the workflow is still usable without it.
Maintenance
Related MCP Connectors
Crossref MCP — wraps the Crossref REST API (academic papers, free, no auth)
Document processing over MCP: merge, split and compress PDFs, run OCR, extract document text.
Hosted MCP server: convert PDFs to clean, LLM-ready Markdown with tables, formulas and OCR.
Convert files, URLs, and documents to clean, AI-ready Markdown via MCP.
Related MCP Servers
- AlicenseAqualityBmaintenanceAn MCP server for downloading academic papers from multiple sources using intelligent routing and year-aware priority selection. It enables users to retrieve metadata and download single or batch PDFs by DOI or URL.32MIT
- AlicenseAqualityDmaintenanceAn MCP server that resolves paper requests (DOI, arXiv, etc.), checks a local store, fetches open-access PDFs, and returns request IDs. It integrates with acatome-extract for ingestion and provides tools for submission, status, update, and file upload.4GPL 3.0
- AlicenseAqualityAmaintenanceMCP server for downloading academic papers from DOI or title, resolving references, and generating citations. Supports batch downloads, multiple mirrors, and optional Unpaywall integration.2111MIT
- AlicenseAqualityAmaintenanceA local MCP server for searching scientific papers, retrieving metadata and abstracts, and legally downloading Open Access PDFs via OpenAlex, CrossRef, and Unpaywall APIs.53MIT