--- title: "PDF Tool" summary: "Analyze one or more PDF documents with native provider support and extraction fallback" read_when: - You want to analyze PDFs from agents - You need exact pdf tool parameters and limits - You are debugging native PDF mode vs extraction fallback --- # PDF tool `pdf` analyzes one or more PDF documents and returns text. Quick behavior: - Native provider mode for Anthropic and Google model providers. - Extraction fallback mode for other providers (extract text first, then page images when needed). - Supports single (`pdf`) or multi (`pdfs`) input, max 10 PDFs per call. ## Availability The tool is only registered when OpenClaw can resolve a PDF-capable model config for the agent: 1. `agents.defaults.pdfModel` 2. fallback to `agents.defaults.imageModel` 3. fallback to best effort provider defaults based on available auth If no usable model can be resolved, the `pdf` tool is not exposed. ## Input reference - `pdf` (`string`): one PDF path or URL - `pdfs` (`string[]`): multiple PDF paths or URLs, up to 10 total - `prompt` (`string`): analysis prompt, default `Analyze this PDF document.` - `pages` (`string`): page filter like `1-5` or `1,3,7-9` - `model` (`string`): optional model override (`provider/model`) - `maxBytesMb` (`number`): per-PDF size cap in MB Input notes: - `pdf` and `pdfs` are merged and deduplicated before loading. - If no PDF input is provided, the tool errors. - `pages` is parsed as 1-based page numbers, deduped, sorted, and clamped to the configured max pages. - `maxBytesMb` defaults to `agents.defaults.pdfMaxBytesMb` or `10`. ## Supported PDF references - local file path (including `~` expansion) - `file://` URL - `http://` and `https://` URL Reference notes: - Other URI schemes (for example `ftp://`) are rejected with `unsupported_pdf_reference`. - In sandbox mode, remote `http(s)` URLs are rejected. - With workspace-only file policy enabled, local file paths outside allowed roots are rejected. ## Execution modes ### Native provider mode Native mode is used for provider `anthropic` and `google`. The tool sends raw PDF bytes directly to provider APIs. Native mode limits: - `pages` is not supported. If set, the tool returns an error. ### Extraction fallback mode Fallback mode is used for non-native providers. Flow: 1. Extract text from selected pages (up to `agents.defaults.pdfMaxPages`, default `20`). 2. If extracted text length is below `200` chars, render selected pages to PNG images and include them. 3. Send extracted content plus prompt to the selected model. Fallback details: - Page image extraction uses a pixel budget of `4,000,000`. - If the target model does not support image input and there is no extractable text, the tool errors. - Extraction fallback requires `pdfjs-dist` (and `@napi-rs/canvas` for image rendering). ## Config ```json5 { agents: { defaults: { pdfModel: { primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5-mini"], }, pdfMaxBytesMb: 10, pdfMaxPages: 20, }, }, } ``` See [Configuration Reference](/gateway/configuration-reference) for full field details. ## Output details The tool returns text in `content[0].text` and structured metadata in `details`. Common `details` fields: - `model`: resolved model ref (`provider/model`) - `native`: `true` for native provider mode, `false` for fallback - `attempts`: fallback attempts that failed before success Path fields: - single PDF input: `details.pdf` - multiple PDF inputs: `details.pdfs[]` with `pdf` entries - sandbox path rewrite metadata (when applicable): `rewrittenFrom` ## Error behavior - Missing PDF input: throws `pdf required: provide a path or URL to a PDF document` - Too many PDFs: returns structured error in `details.error = "too_many_pdfs"` - Unsupported reference scheme: returns `details.error = "unsupported_pdf_reference"` - Native mode with `pages`: throws clear `pages is not supported with native PDF providers` error ## Examples Single PDF: ```json { "pdf": "/tmp/report.pdf", "prompt": "Summarize this report in 5 bullets" } ``` Multiple PDFs: ```json { "pdfs": ["/tmp/q1.pdf", "/tmp/q2.pdf"], "prompt": "Compare risks and timeline changes across both documents" } ``` Page-filtered fallback model: ```json { "pdf": "https://example.com/report.pdf", "pages": "1-3,7", "model": "openai/gpt-5-mini", "prompt": "Extract only customer-impacting incidents" } ```