• mcp server
  • mit
  • node 20+

image-tiler-mcp-server

Stop LLMs from crushing your screenshots. Split large images into optimally-sized tiles so Claude, ChatGPT, and Gemini process full-resolution content, not a blurry downscale.

The HTML preview the server writes for every image, cycling through the Claude, OpenAI, and Gemini presets to show each one's tile grid and token estimate
Every run writes an interactive HTML preview: the same image under each preset's tile grid, with the token estimate that preset costs.

Presets

ModelTile sizeTokens / tileMax dimension
Claude1,092px~1,5901,568px
OpenAI768px~7652,048px
Gemini 31,536px~1,1203,072px
Gemini768px~258768px

Updated 03/01/2026. Any other model: pass a custom tile size.

Usage

# 1. send just the image, get a comparison table
tiler(filePath: "screenshot.png")

  → model comparison table with token estimates
  → outputDir: "tiles/screenshot_v1/"

# 2. pick a preset, get tiles with metadata
tiler(
  filePath: "screenshot.png",
  preset: "claude",
  outputDir: "tiles/screenshot_v1/"
)

FAQ

Why does my LLM miss details in screenshots?
Vision models have a maximum image dimension. Anything larger gets silently downscaled before the model sees it. A 3,600 x 20,220px screenshot becomes 279 x 1,568px, losing 99.4% of pixels. Buttons, labels, and fine UI details turn into unreadable noise.
Does it work with URLs, not just local files?
Yes. It captures full-page screenshots from any URL via headless Chrome with scroll-stitching support up to 200,000px tall. Ask to capture in mobile view and it sets a 390px viewport, 2x retina scale, and a mobile Safari user agent, so sites that detect the user agent or touch capability serve their real mobile HTML rather than a narrowed desktop layout.
Will it waste tokens on blank tiles?
No. Each tile is analyzed locally via Sharp for entropy-based content density: blank, low-detail, mixed, or high-detail. Blank and low-detail tiles are flagged so your LLM can skip them and spend tokens only where it matters.
What input and output formats does it accept?
Local file paths, remote URLs, base64 strings, and data URIs. Output is WebP by default or lossless PNG. Iterative runs write to versioned directories (_v1, _v2) so previous results are never overwritten.
Can I use it for visual QA: capture, analyze, fix, re-verify?
That's the primary workflow. Point it at a URL, tile the result, and let your LLM flag layout issues, misaligned elements, or broken styling at full resolution. Fix the code, re-capture, and the server writes to a new versioned directory (_v2, _v3, ...) so you can compare before and after without losing prior runs.
Can I get just a screenshot without tiling?
Yes. Ask for a screenshot and stop after the comparison step. The server returns the full-page capture and the interactive HTML preview without slicing the image into tiles.