Read tool reports "pdftoppm is not installed" on Windows despite poppler being on PATH
Open 💬 1 comment Opened Jul 7, 2026 by shigekazu23-star
Summary
On Windows, passing a PDF to the Read tool for page rendering fails with:
pdftoppm is not installed. Install poppler-utils (e.g. brew install poppler or apt-get install poppler-utils)
poppler is installed and reachable, so this is a detection bug on win32, not a missing binary. The suggested remedies are also macOS/Linux only.
Environment
- Claude Code 2.1.203 (native installer,
~/.local/bin/claude) - Windows 11, Version 10.0.26100.8737 (x64)
- poppler 25.07.0, installed via winget (
oschwartz10612.Poppler) - Node v24.15.0
Evidence it is a detection bug, not a missing/unreachable binary
pdftoppm -vruns and reportspdftoppm version 25.07.0.pdftoppm.exeexists under the winget poppler...\Library\bindirectory.- The poppler bin dir is in the Claude process's raw inherited environment:
bash --norc --noprofile -c 'echo "$PATH"'(no profile sourcing) still contains it. - A freshly spawned
cmd.exe /c where pdftoppmreturns the full path with exit code 0. - Claude Code was fully restarted after poppler was added to PATH, so this is not a stale-env case.
- Rendering the same PDF manually with
pdftoppm -png -r 150 ...succeeds, and Read displays the resulting PNG correctly. Only Read's internal PDF path is affected.
Likely cause
Read's poppler detection does not resolve pdftoppm the way a normal PATH lookup would on Windows: it likely looks for pdftoppm without the .exe suffix / without honoring PATHEXT, checks a hardcoded set of directories rather than PATH, or assumes a Unix-style install location. The hardcoded brew/apt guidance in the error string points the same way.
Suggested fix
- Resolve the binary with a PATHEXT-aware lookup (append
.exeon win32) or a cross-platform which-style resolver. - Make the "not installed" message platform-aware (e.g. mention
winget install oschwartz10612.Popplerorchoco install poppleron Windows).
Workaround (no functional loss)
Shell out to poppler directly instead of relying on Read's built-in rendering:
- Text PDFs:
pdftotext -enc UTF-8 -layout input.pdf out.txt, then read the text. - Scanned / layout-sensitive PDFs:
pdftoppm -png -r 150 -f N -l N input.pdf prefix, then read the PNG.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗