# Dr Cook:literature Downloader

> Retrieve full-text academic articles and literature metadata. Use when downloading papers, getting full text from PubMed Central, fetching article metadata by PMID or DOI, or building structured download lists for papers behind paywalls. Triggers on: download paper, get full text, fetch article, retrieve literature, PubMed download, PMC, PMID, DOI lookup, 下载文献, 获取全文, 文献下载, 下载论文, 获取PDF.

- Skill: `wen-chen/dr-cook-literature-downloader` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add wen-chen/dr-cook-literature-downloader`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wen-chen/dr-cook-literature-downloader/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: wen-chen (https://skillmd.com/u/wen-chen)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wen-chen/dr-cook-literature-downloader

---


# literature-downloader

## 1. Overview

literature-downloader retrieves open-access full text and metadata for academic articles using the PubMed MCP server as the primary tool. Three-tier retrieval strategy: (1) PMC full-text via PubMed MCP — highest success rate for biomedical literature; (2) Publisher open-access links from article metadata; (3) Structured download list fallback — when direct retrieval fails, generates a table with DOI, PMID, PMCID, OA status, and direct URLs for manual or institutional access. Does not attempt to bypass paywalls or access subscription-only content. Operates standalone or as a feeder for literature-reviewer in the Grant pipeline.

## 2. Parameters

### Required

| Parameter | Values | Description |
|---|---|---|
| `input_type` | `pmid` \| `doi` \| `title` \| `search_query` | How the article(s) are identified. Infer from format of user input — do not ask unless genuinely ambiguous. |

### Optional

| Parameter | Values | Description |
|---|---|---|
| `batch_mode` | bool (default: `false`) | If `true`, processes a list of identifiers in sequence and returns a consolidated batch report. |
| `output_format` | `full_text` \| `metadata_only` \| `download_list` (default: `full_text` if available, else `download_list`) | Controls the scope of output. If full text is unavailable, automatically falls back to `download_list`. |
| `max_results` | integer (default: `1` for single identifier; `10` for `search_query`) | Maximum number of articles to return for search queries. |

### Parameter collection rule

Infer `input_type` from the format of what the user provides: eight-digit number or "PMID: XXXXXXXX" → `pmid`; "10.XXXX/..." → `doi`; quoted title → `title`; natural language topic → `search_query`. Do not ask unless the input genuinely cannot be classified. Do not ask for optional parameters unless the user has mentioned them.

## 3. Workflow

**Step 1 — Parse input and determine identifier type.**

Classify the user's input using the rules in Section 2. If `batch_mode` is detected (user provides a list of identifiers separated by commas, newlines, or enumerated), set `batch_mode = true` and apply Steps 2–5 to each identifier in the list; compile a batch report in Step 6.

**Step 2 — Resolve identifier to PMID and PMCID.**

- If input is a PMID: proceed directly to Step 3 with the PMID.
- If input is a DOI: call `convert_article_ids` with the DOI to obtain PMID and PMCID. Consult `references/pubmed-mcp-guide.md` for parameter syntax.
- If input is a title or search query: call `search_articles` with the title or query string. Present the top results (up to `max_results`) to the user for confirmation before proceeding. Do not retrieve full text for unconfirmed results.

**Step 3 — Attempt Tier 1 retrieval: PMC full text.**

If a PMCID is available (either supplied directly or obtained via `convert_article_ids`):
- Call `get_full_text_article` with the PMCID. PMCID format must be "PMC" followed by digits (e.g., "PMC9876543").
- If retrieval succeeds: proceed to Step 7 (output).
- If the article is not available in PMC (error "Article not in PMC" or no PMCID exists): proceed to Step 4.

If no PMCID is available: proceed directly to Step 4.

**Step 4 — Attempt Tier 2 retrieval: Publisher OA check.**

- Call `get_article_metadata` with the PMID to retrieve full metadata including OA status, DOI, and available links.
- Consult `references/oa-sources.md` for known publisher OA patterns: check the DOI prefix against the publisher table to determine if the article is from a known OA publisher (PLOS, BioMed Central, Frontiers, eLife, PeerJ).
- If a publisher OA link is identified: report the direct URL to the user and attempt retrieval if possible.
- If the article is subscription-only or OA status is unknown: proceed to Step 5.

**Step 5 — Tier 3 fallback: Generate structured download list.**

Compile all available information into a download list table with the following fields: Title, Authors, Year, Journal, PMID, DOI, PMCID (if any), OA Status, Best URL, Notes.

Include in the Notes field: "Access via institutional VPN and library proxy" for subscription articles, or "Preprint — not peer reviewed" for bioRxiv/medRxiv articles.

State clearly: "This article requires institutional access. Use the download list with your library proxy or university interlibrary loan service."

**Step 6 — Batch processing (when batch_mode = true).**

Repeat Steps 2–5 for each identifier sequentially. Track outcome per article: `full_text`, `metadata_only`, or `failed`. After all processed, compile a batch report: total count with status breakdown, a per-article table, and a consolidated download list for failed articles. On rate limit errors, process remaining identifiers in smaller groups. See `references/pubmed-mcp-guide.md` for the batch pattern.

**Step 7 — Output results.**

Present output per Section 4. Then write `context_output` per Section 5.

## 4. Output Format

### Single article — full text retrieved

```
## Article Retrieved

**Title:** [title]
**PMID:** [pmid]  **DOI:** [doi]  **PMCID:** [pmcid]
**OA Status:** Open Access (PMC) | Open Access (Publisher) | Preprint
**Authors:** [authors]  **Year:** [year]  **Journal:** [journal]

---
[Full text in markdown; original section headings preserved]
```

### Single article — not retrievable (Tier 3 fallback)

```
## Download Information

| Field | Value |
|-------|-------|
| Title | ... | PMID | ... | DOI | ... |
| PMCID | None — not deposited in PMC |
| OA Status | Subscription only |
| Best URL | https://doi.org/[doi] |
| Action | Access via institutional library or interlibrary loan |

> This article requires institutional access. Use the download list with your library proxy.
```

### Batch mode report

```
## Batch Retrieval Report
Retrieved (full text): N | Metadata only: N | Failed (paywall or invalid): N

| # | Title | PMID | DOI | PMCID | OA Status | Retrieval Status | Best URL |
|---|-------|------|-----|-------|-----------|-----------------|----------|

### Failed Articles — Download List
[Consolidated download list table for unretrieved articles]
```

## 5. context_output

### Reads from upstream

Typically standalone. In pipeline mode, may receive a PMID list from `literature-reviewer`'s `references` field — treat as batch input with `batch_mode = true`.

### Writes to output

```json
{
  "module": "literature-downloader",
  "domain": "<if determinable from article content, otherwise null>",
  "summary": "Retrieved N articles: N full text, N metadata only, N failed",
  "raw_text": "<full text of retrieved article(s); concatenated for batch mode>",
  "references": [
    {
      "pmid": "...",
      "doi": "...",
      "title": "...",
      "authors": "...",
      "year": 0,
      "retrieval_status": "full_text | metadata_only | failed",
      "pmcid": "...",
      "oa_status": "open | subscription | unknown"
    }
  ],
  "status": "success | partial | failed",
  "error_message": "string | null"
}
```

**Status:** `"success"` — full text retrieved, all identifiers resolved. `"partial"` — mixed outcomes. `"failed"` — no valid identifiers resolved or MCP unavailable.

**Note:** `references` extends the base schema with `retrieval_status`, `pmcid`, and `oa_status` fields.

### Downstream readers

`raw_text`, `references` → literature-reviewer (synthesis input). `references` → citation-checker.

## 6. References

See `references/` for:
- `pubmed-mcp-guide.md` — PubMed MCP tool call reference, parameter syntax, expected return structures, and error handling patterns
- `oa-sources.md` — Open access source patterns, publisher OA portal URLs, and fallback download list format

