by The Dryplate Authors
Local image tools for agents: convert HEIC, resize, strip metadata.
Pick Dryplate MCP if an agent has to prepare photos on your machine, such as turning iPhone HEIC into JPEG or removing GPS data before sharing. It is free and needs no account. Skip it if you need a metadata reader, richer editing, or a project with a track record: it is days old.
An agent can convert HEIC and strip location data on the local disk without any image leaving the machine.
It has no moat beyond convenience: it wraps sharp and libheif in an MCP server, and the same code powers the authors website.
Main trade-off
A days-old v0.1 project with a narrow tool set and no metadata reader.
MIT licence, copyright The Dryplate Authors. Free to run with npx and no account. The SDK bundles libheif as an unmodified WASM file under LGPL-3.0.
claude mcp add dryplate -- npx -y @dryplate/mcp
The permissions this connector asks for, as its own documentation states them.
10 actions an agent can call. Open one for its parameters and an example.
Example call
{"tool":"convert_image","arguments":{"format":"jpeg","path":"~/Pictures/IMG_0042.HEIC"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| path | string | Required | Absolute path or ~/ path of the image to read: JPEG, PNG, WebP, AVIF or HEIC. Every tool takes this. |
| format | string | Required | Output format: jpeg, png, webp or avif. |
| output | string | Optional | Where to write the result. Every tool takes this; the default is next to the input. |
| overwrite | booleandefault false | Optional | Replace an existing output file. Every tool takes this. |
| quality | number | Optional | Quality from 1 to 100 for lossy output; PNG ignores it. Every tool takes this. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | Where the converted file was written, its format and the size change. |
Example call
{"tool":"resize_image","arguments":{"width":1600,"path":"~/Pictures/holiday.jpg"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| path | string | Required | The picture to shrink or enlarge. |
| width | number | Optional | Target width in pixels. |
| height | number | Optional | Target height in pixels. |
| percent | number | Optional | Scale in percent, so 50 means half size. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | The resized file path, format and size change. |
Example call
{"tool":"compress_image","arguments":{"maxKb":300,"path":"~/Pictures/scan-04.png"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| path | string | Required | The image to squeeze. |
| maxKb | number | Optional | Target file size in KB; without it a sensible quality is used. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | The compressed file path with before and after sizes. |
Example call
{"tool":"watermark_image","arguments":{"text":"(c) 2026 Jane Doe","tile":true,"path":"~/Pictures/portfolio-7.webp"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| path | string | Required | The image to mark. |
| text | string | Required | Watermark text. |
| size | numberdefault 5 | Optional | Text height as a percent of the short side. |
| opacity | numberdefault 60 | Optional | Opacity in percent, from 5 to 100. |
| x | numberdefault 1 | Optional | Horizontal position, 0 for left to 1 for right. |
| y | numberdefault 1 | Optional | Vertical position, 0 for top to 1 for bottom. |
| tile | boolean | Optional | Repeat the text across the image. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | The watermarked file path, format and size change. |
Example call
{"tool":"generate_thumbnail","arguments":{"size":128,"format":"png","path":"~/Pictures/team-photo.avif"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| path | string | Required | The full-size image to preview. |
| size | numberdefault 256 | Optional | Box edge in pixels, up to 4096. |
| format | stringdefault webp | Optional | Output format: jpeg, png, webp or avif. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | The thumbnail path; a source smaller than the box is not enlarged. |
Example call
{"tool":"crop_image","arguments":{"ratio":"16:9","path":"~/Pictures/banner-draft.jpg"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| path | string | Required | The image to trim. |
| ratio | string | Optional | Centred crop such as 1:1 or 16:9. |
| box | object | Optional | Region to keep as {x, y, w, h}, each a fraction from 0 to 1 measured from the top left. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | The cropped file path, format and size change. |
Example call
{"tool":"rotate_image","arguments":{"degrees":270,"flip":"h","path":"~/Pictures/sideways.png"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| path | string | Required | The image to turn. |
| degrees | numberdefault 90 | Optional | Clockwise turn: 0, 90, 180 or 270. |
| flip | string | Optional | h mirrors left to right and v mirrors top to bottom. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | The rotated file path, format and size change. |
Example call
{"tool":"blur_image","arguments":{"strength":40,"areas":[{"x":0.1,"y":0.2,"w":0.3,"h":0.25}],"path":"~/Pictures/street-view.jpg"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| path | string | Required | The image to soften. |
| strength | numberdefault 20 | Optional | Blur strength from 1 to 100. |
| areas | array | Optional | Regions to blur, each {x, y, w, h} as fractions of the image; default is the whole image. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | The blurred file path, format and size change. |
Example call
{"tool":"remove_metadata","arguments":{"path":"~/Pictures/IMG_0099.jpg"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| path | string | Required | The photo to clean. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | The cleaned file path; HEIC and AVIF input is re-encoded as JPEG, which can be bigger. |
Example call
{"tool":"merge_images","arguments":{"paths":["~/Pictures/before.jpg","~/Pictures/after.jpg"],"gap":16,"background":"black"}}Parameters
| Parameter | Type | Needed | Description |
|---|---|---|---|
| paths | array | Required | Two or more image paths, in order. |
| direction | stringdefault horizontal | Optional | horizontal or vertical. |
| gap | numberdefault 0 | Optional | Pixels between images, from 0 to 500. |
| background | stringdefault white | Optional | Colour of the gap and empty space: white, black or transparent. |
Returns
| Field | Type | Description |
|---|---|---|
| result | string | The merged file path, named after the first input. |
Dryplate MCP is an open-source MCP server that gives AI agents ten local image tools, from format conversion and compression to blurring, merging and metadata removal. It runs over stdio on Node 24 or newer, reads iPhone HEIC, and works on files on your own disk. Its authors say nothing is uploaded.
Ten local image tools
Conversion, resizing, compression, cropping, rotation, blur, watermarks, merging, metadata removal and thumbnails.
Paths in, paths out
Tools take file paths and write files, so image bytes never fill the agent context.
Reads iPhone HEIC
HEIC, JPEG, PNG, WebP and AVIF are accepted as input; HEIC is decoded but written as JPEG.
Careful with your files
Output goes next to the input with a suffix, and an existing file is replaced only when overwrite is true.
Shared options on every tool
Each tool also accepts output, overwrite and quality, the last from 1 to 100 for lossy formats.
Plain error messages
A failed call returns a tool error such as "Set a width, height or percent", and the server keeps running.
Turn an iPhone album into JPEG
Ask the agent to run convert_image on each HEIC path; HEIC is read but never written, and a JPEG lands beside each original.
Strip location data before sharing a photo
remove_metadata removes GPS and camera fields, losslessly for JPEG, PNG and WebP, and keeps the orientation.
Hide a face or a plate
blur_image takes a list of regions as fractions of the image, so an agent that has found a face can blur only that box.
Fit a page weight budget
compress_image takes a target in KB and never returns a bigger file; resize_image and generate_thumbnail cover the dimensions.
The nearest AI agent skills on Hokai for the same job.
| Skill | Works with | Connects by | Checked |
|---|---|---|---|
| Claude · Cursor | MCP | 11 Nov | |
| Claude · Codex · Cursor | MCP | 11 Oct |
Nothing. The server is MIT-licensed and runs from npm with npx, with no account or key. The browser version at dryplate.dev says it is free with no sign-up, no watermark and no daily limit, and handles up to 50 images at a time.
The project is MIT, copyright The Dryplate Authors. The SDK package ships libheif as an unmodified WASM file under LGPL-3.0, and the repository carries a third-party notices file for it. Check that notice if you redistribute the SDK.
The authors say nothing is uploaded, and the server source Hokai read imports only file, path and operating-system modules plus the SDK, reading and writing local files. That is not an independent audit of the SDK or its dependencies, so test it on a network-restricted machine if the photos are sensitive.
The README says this happens when Node comes from nvm or fnm and the client does not inherit that PATH. Add an env entry to the server config with the folder printed by dirname of which node, then restart the client.
It writes a new file next to the original, such as IMG_0042-clean.jpg, and refuses to replace an existing file unless you pass overwrite as true. HEIC is read but never written, so HEIC input comes out as JPEG unless you choose another format.
Dryplate MCP is the agent-facing half of Dryplate, an open-source set of image tools by two individuals credited as The Dryplate Authors, who also run the in-browser versions at dryplate.dev. It is a skill rather than an app: a stdio MCP server that an agent such as Claude Code or Cursor calls to convert, resize, compress, crop, rotate, blur, watermark, merge and clean images stored on your machine. The repository was created on 6 November 2026 and the npm package published three versions that same day.
Every tool takes a file path, not image bytes, so pictures never pass through the agent context. Each call writes a new file next to the input with a suffix such as -resized or -clean, and it never replaces a file unless you pass overwrite as true. Input can be JPEG, PNG, WebP, AVIF or HEIC; HEIC is decoded but never written, so it comes out as JPEG unless you pick a format. The server needs Node 24 or newer and runs on sharp and libheif-js. On 11 November 2026 Hokai started version 0.1.2 and it listed ten tools; converting the repository's HEIC fixture gave a JPEG, and a fixture JPEG that carried an Exif segment had none after remove_metadata.
The README says it works with any MCP client that runs stdio servers and was tested with Claude Code and Claude Desktop (Claude); it also gives a ready JSON block for Cursor. Typical jobs are turning an iPhone album into JPEG, stripping location data before a photo is shared, blurring a face or a number plate by giving the agent a region, and building 256 px previews.
Look elsewhere if you need to read metadata, since the server has no tool for it (the website does), or want editing beyond crops, blurs and rotations; the watermark tool draws text only. This is a v0.1 project with two GitHub stars on 11 November 2026, so there is no track record yet. Its homepage compares it with the web tools TinyPNG, Squoosh, iLoveIMG and CloudConvert, none of which Hokai lists as a skill. For other media work see the media skills list, and for more connectors the MCP skills and developer skills lists.
Protocol, authentication, permissions and the call contracts on this page are read from The Dryplate Authors's own documentation. The verdict is Hokai's reading of them, not the maintainer's claim.