Home · Guides

Resize, compress and watermark images from a chat message

"Make this 1200 pixels wide" or "get this under a megabyte" is normally a trip to a web uploader, which is also the moment a client's product photo or a screenshot with something on screen leaves your machine. The MCP Image server does the same small jobs locally: resize, convert between PNG, JPEG, BMP, GIF and TIFF, compress with a real before-and-after byte count, crop, batch-thumbnail a folder, watermark with your business name, and strip the EXIF and GPS block a phone camera writes into every photo. No network call of any kind, not even for licensing.

Install it

claude mcp add image -- npx -y @theluckystrike/mcp-image

Cursor reads the same block from .cursor/mcp.json:

{
  "mcpServers": {
    "image": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-image"]
    }
  }
}

Claude Desktop takes the identical block in claude_desktop_config.json. Data lives under ~/.local/share/mcp-servers/image/: a register of the last 500 operations, not your images, which stay where you put them.

Why "compress" means something different for a PNG

The tool most people reach for first is image_compress, and the surprising part is that its one real knob, quality, only does anything on a JPEG output. A JPEG throws away detail to get smaller, and quality controls how much. A PNG is lossless: there is no such dial, and a server that silently accepted quality: 40 for a PNG and returned the same file would look like it worked while doing nothing.

Before shipping that behaviour, the alternative was actually tried: pass a PNG through palette quantization, the standard way to shrink a PNG by cutting it down to a small fixed set of colours. Run against a 300x220 noisy test PNG, quantizing to 16 colours did not shrink the file. It produced a 115,451 byte file against a 39,262 byte original, 2.9 times larger, because the encoder here still writes RGBA either way, and quantizing colours destroys the row-to-row pixel similarity that PNG's own deflate step was exploiting to compress in the first place. A tool that claims to compress and hands back a bigger file is worse than one that is honest about which knob exists at all, so the server does not quantize. Instead it reports the byte count before and after, the percentage saved, and the method that did the work, and if compressing a PNG would only reduce it by resizing, it says so plainly: for a PNG the lever is max_width, not quality. The output format follows the extension of out_path, so the practical move for a PNG screenshot you actually want smaller is to write it out as a .jpg instead, where quality applies and a photo typically drops 80 to 95 percent.

The rest of the toolbox

image_resize fits inside a box, fills and crops the overflow, or stretches exactly, with one of width or height following the other. image_crop refuses a rectangle that runs past an edge rather than silently clamping it. image_thumbnails and image_batch_resize reserve every output path before writing any of them, so a collision on file three does not leave files one and two behind as a half-finished batch. image_watermark reads the shared business name from the same profile the invoice and docx servers write, or takes custom text on Pro. image_dominant_colors reports the hex codes that cover most of an image and the share each one holds.

What "strip metadata" actually removes

image_strip_metadata decodes the image to raw pixels and re-encodes from those pixels alone, so EXIF, GPS coordinates, the camera and lens, the capture time, XMP packets and colour profiles are not deleted one field at a time, they are simply never handed to the encoder. Every other writing tool here has the same side effect: resizing a photo also drops its EXIF, since it goes through the same decode-then-encode path.

Refusing a decompression bomb before it decodes

A 4 KB PNG can declare a 20,000 by 20,000 pixel canvas in its header. Decoding that allocates roughly 1.6 GB of raw RGBA and can take the process down before any size check written after the decode would ever run, so the declared width and height are read out of the file's own header, PNG IHDR, the JPEG SOF segment, the GIF logical screen descriptor, the BMP info header, the first TIFF IFD, and a file over 10,000 pixels on a side is refused there, with the memory it would have taken named in the error.

Free tier and Pro

Free covers image_info unlimited, and resize, convert, compress, crop and strip-metadata on sources up to 4 megapixels, batches of 5 files. Pro ($19 once, lifetime) removes the size and batch limits, opens custom watermark text instead of only the business name, and adds dominant-colour reports. Product page: MCP Image Tools.

Questions

Why did compressing my PNG not make it smaller?

quality is a JPEG-only parameter; a PNG is lossless and has no such dial. A measured test of the obvious alternative, palette quantization, produced a file 2.9 times larger (115,451 bytes against 39,262) because quantizing destroys the pixel similarity PNG's own compression depends on. Use max_width for a PNG, or write the output as .jpg where quality genuinely shrinks the file.

Does this upload my photos anywhere?

No. There is no network call of any kind, including for licence checks, which are verified offline. A client photo never leaves the machine it was resized on.

What image formats does it read and write?

PNG, JPEG, BMP, GIF and TIFF, detected by magic bytes rather than file extension. No WebP, AVIF, HEIC or SVG: there is no pure JavaScript decoder for those worth shipping without a native dependency.

Can it edit the original file in place?

No, on purpose. Every tool writes a new file and refuses to overwrite an existing out_path unless you pass overwrite: true, and an out_path that resolves to one of the inputs is refused outright so a result can never be written back over the source that produced it.

How big an image can it handle?

Up to 50 MB on disk and 10,000 pixels per side on Pro; free tier tools cap sources at 4 megapixels. The pixel limit is checked from the file header before anything is decoded, specifically to refuse a decompression bomb.

Related

All MCP servers and prices · All guides