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 -v runs and reports pdftoppm version 25.07.0.
  • pdftoppm.exe exists under the winget poppler ...\Library\bin directory.
  • 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 pdftoppm returns 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 .exe on win32) or a cross-platform which-style resolver.
  • Make the "not installed" message platform-aware (e.g. mention winget install oschwartz10612.Poppler or choco install poppler on 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.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗