Iminify MCP server
Connect Claude, ChatGPT, Cursor or VS Code to Iminify's MCP server and let an AI agent compress, convert and resize images and scan pages for you.
Iminify runs an MCP server, so an AI agent can compress, convert and resize images and scan pages for you, straight from the chat or the editor you already use. Ask Claude to "make these product photos WebP under 1600 pixels wide" and it calls Iminify, waits for the results and hands you the download links.
The server lives at one address:
https://www.iminify.com/mcp
It speaks MCP over streamable HTTP and signs you in with OAuth, so most apps only need that address. The first time you connect, the app sends you to Iminify to approve it, and from then on it works as you: your images, your plan, your counts.
Connecting an app
You need an account with a verified email address. The free plan works.
Claude
Iminify is in Claude's connectors directory. In Claude, on the web, the desktop app or mobile, open Customize, then Connectors, search for Iminify and press Connect, or go straight to its listing. Claude opens Iminify in a browser tab; sign in if you aren't already, check what it asks for, and press Approve. One connection covers both Chat and Cowork.
You can also add it as a custom connector with the address above, the same way you'd add any server that isn't in the directory.
The connector is all Claude needs. It compresses anything with a web address, scans pages, and in Cowork it can work through a folder on your computer and write the smaller files back (Files on your computer explains how). The Iminify plugin is optional: it adds ready-made routines for that folder job, for alt text and file names, and for the images that slow a page down.
Claude Code
The Iminify plugin is in Anthropic's plugin directory. It brings the server and routines for optimizing a whole project's images, writing their alt text and names, and fixing the images that slow a page down. Type this into Claude Code and pick where to install it:
/plugin install iminify@anthropic-plugin-directory
Then run /mcp and sign in to plugin:iminify:iminify.
To add only the server, without the plugin, run this in your terminal, then run /mcp inside Claude Code and pick Iminify to sign in:
claude mcp add --transport http iminify https://www.iminify.com/mcp
To install the plugin by hand from its GitHub repository instead of the directory, type these two commands into Claude Code and sign in the same way:
/plugin marketplace add mozex/iminify-plugin
/plugin install iminify@iminify
Cursor
Add the server to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project:
{
"mcpServers": {
"iminify": {
"url": "https://www.iminify.com/mcp"
}
}
}
Cursor shows a sign-in button next to the server in its MCP settings.
VS Code
Add it to .vscode/mcp.json in your workspace:
{
"servers": {
"iminify": {
"type": "http",
"url": "https://www.iminify.com/mcp"
}
}
}
ChatGPT
ChatGPT adds MCP servers as plugins, and one you add yourself needs developer mode, which Plus, Pro, Business, Enterprise and Education accounts have. Turn it on under Settings, then Security and login. Then open Plugins, add an MCP server with the address above and OAuth as the sign-in, and approve it on Iminify when ChatGPT sends you there. On the web, pick it for a chat from the + menu, under Developer mode; the desktop app offers an enabled server to every chat.
Anything else
Any client that speaks MCP over HTTP can use the same address. If it can't do OAuth, give it an API key instead, sent as a header on every request:
Authorization: Bearer <your-api-key>
In Claude Code that's claude mcp add --transport http iminify https://www.iminify.com/mcp --header "Authorization: Bearer $IMINIFY_API_KEY".
What the agent can do
| Tool | What it does |
|---|---|
compress_images |
Compress, convert or resize up to 20 images in one call, or fit them under a file size, from their addresses, from upload links, or sent inline, each with an AI alt text and a suggested file name; on a paid plan, into a folder of your choosing, and at several widths for an <img srcset> |
create_upload_link |
Get a one-time address to send a local file to |
get_image |
One image's status, sizes, savings and download links, its responsive sizes' links and their <img srcset> included, and whether it lost the Content Credentials its file carried |
list_images |
Your images, newest first, a page at a time, filtered by status, source or scan. This is where a scan's images come from. Responsive sizes show only their status here, so a page stays small |
create_zip |
One download link for several finished images, each in the folder it was sent with, all of a scan's, in the page's folders with a manifest, or a finished site crawl's, a folder for each page |
scan_page |
Scan a web page for every image it loads and compress them all, with an AI alt text for each one the page shows without any |
crawl_site |
Crawl several pages of one site at once, from its sitemap or a list, each scanned like scan_page and an image the pages share compressed once (paid plans) |
get_crawl |
A site crawl's progress, each page with its status, and once it's done the site's report, an image the pages share counted once. Each page's own images and report are get_scan's and list_images' |
monitor_site |
Have a crawled site crawled again every week, compressing only the images that are new or changed, with an email when a check finds some (paid plans) |
list_monitors |
Your weekly site checks, each with its next run and its newest run, which get_crawl and create_zip read |
stop_monitor |
Stop a weekly site check and delete its runs, for good |
get_scan |
A scan's progress, how many images it found and how many are still compressing, the ones it skipped and why, what it saved, and its page report: oversized images, missing dimensions and alt text, lazy loading in the wrong place, the largest contentful paint. It leaves the images themselves to list_images and the report's image-by-image list to audit_images, so an answer stays small however many images the page has |
share_scan_report |
Give a finished scan's page report a public link to send a client (paid plans) |
export_scan_report |
One download link for a page report as a CSV of every image or a PDF to send on (paid plans) |
rename_image |
Change the name a result downloads under |
write_alt_text |
Ask for the AI alt text and suggested file name of a finished image that has none, or of one in another language |
share_image |
Give a result a public page to send to someone |
delete_image |
Delete an image and its files, for good |
get_usage |
Your plan, its limits and what today has used |
The settings are the API's: a level, a format, a width, a height or a scale, whether to keep the metadata, a size limit and, on a paid plan, the widths of responsive sizes. You rarely need to name them. Say what you want in plain words and the agent picks them.
Every image also gets an AI alt text unless you say you don't want one, in the language you ask for. It arrives a few seconds after the image finishes, so the agent waits for it, then can put it in your page's alt attribute or give the file the suggested name.
The Iminify plugin
You don't need the plugin. The server alone does everything on this page, and an agent can do each of the jobs below with it by working out the steps as it goes. The Iminify plugin, open source on GitHub, packs the server with three skills that have those steps written down, so each job goes the same careful way every time. It installs in Claude Code and in Claude, where one install covers Chat and Cowork, and it works wherever the agent can reach your files: a project in Claude Code, a folder in Cowork.
optimize-images does the whole job of optimizing a project's images, or any folder of them:
- It finds the images you name, or every image the project tracks in git, leaving out dependency and build folders.
- It shows you the list and the settings it will use, and waits for a yes.
- It uploads each file through an upload link, compresses them on your account and waits for the results.
- It writes each smaller file over the original. A file Iminify couldn't make smaller stays as it was.
It never overwrites a file git couldn't give back: one with uncommitted changes waits for your say-so. A new format means a new file name, so it converts only when you ask, saves the new file beside the old one and updates the references it finds. Ask in plain words, like "optimize the images in public/images" or "convert the PNGs in resources/img to WebP", or run it as /iminify:optimize-images.
image-seo gives your images alt text and descriptive file names. It finds the images your pages show with no alt text, has the AI write it in the page's language, and puts in the text you approve. Alt text a person wrote stays, and so does alt="" on an image marked as decoration. Ask for file names too and it renames a file like IMG_4032.jpg to one that says what's in it, updating every reference. Given a page's address instead of files, it scans the page and suggests alt text for each image shown without any. Ask "add alt text to the images in src/pages", or run it as /iminify:image-seo.
fix-core-web-vitals fixes the images that slow a published page down. It scans the page, reads the page report, finds each image in your project and shows you what it would change: fetchpriority="high" on the largest contentful paint, no lazy loading in the first screen, width and height where they're missing, lazy loading further down, and files more than twice the size of their space resized. The page has to be online, because the scan runs on Iminify's servers and can't reach your computer. Ask "the images slow down example.com, fix them", or run it as /iminify:fix-core-web-vitals.
To install it:
- Claude Code: type
/plugin install iminify@anthropic-plugin-directory, then run/mcpand sign in toplugin:iminify:iminify. Claude Code above also shows how to install it by hand from GitHub. - Claude, Chat and Cowork: it's in Claude's plugin directory. Open Customize, then Plugins, search for Iminify under Discover and press Add, and sign in the first time Claude asks. One install covers Chat and Cowork, and it includes the connection to Iminify, so you don't need the connector as well. Already have the connector? Nothing doubles up: both use the same address, so Claude shows one set of Iminify's tools. Then, in Cowork on the desktop app, hand Claude a folder, say "optimize the images in this folder", and it takes it from there.
Every image the skills compress, every page they scan and every AI alt text they ask for counts toward your plan, like any other.
Files on your computer
An agent can only send files it can reach. In a plain chat, Claude works with images that have an address on the internet, or small files it sends inline. An agent that runs commands next to your files, like Claude Code, Cursor, or Claude in Cowork with a folder connected, can send local files of any size your plan takes, with or without the plugin:
-
It calls
create_upload_linkwith the file's name and gets back an address that works once, for 15 minutes. -
It sends the file there with a
PUT, the way this command does:Shellcurl --fail-with-body --upload-file hero.png "<upload_url>"If the upload is refused, say for a file larger than your plan takes, curl prints the reason, and the agent can pass it on. A curl older than 7.76 doesn't know
--fail-with-bodyand stops before it sends anything, so the link is still unused and the agent runs the same command with--failinstead. -
It calls
compress_imageswith theupload_idit got in step 1.
A file that is sent but never compressed is deleted about a day after it arrives. Uploads waiting to be compressed can't outnumber the images your plan can still compress today, and never more than a fixed number of them: past that, create_upload_link answers with uploads_waiting and names the upload ids already sent, so the agent can compress them before it asks for another link. Inline files, sent as base64 inside the call, are limited to 4 MB each; anything bigger goes through an upload link.
Claude in Cowork runs those commands in a sandbox, and the smaller files come back the same way, downloaded from their links. If Claude says the sandbox can't reach Iminify, turn on Allow network egress under Settings, then Capabilities. On a Team or Enterprise plan, an owner allows the domain in the organization's settings.
Results come back as links
The server never puts image bytes in its answers. Every image comes with a download_url for the optimized copy and another for the original, and create_zip gives one for a whole batch. These links work without a key, so the agent can fetch them or simply show them to you, and they stop working after 60 minutes. Ask again for fresh ones.
Work runs in the background, as it does everywhere else. compress_images, scan_page and crawl_site answer straight away with the work queued, and the agent checks back with get_image, get_scan or get_crawl until it's done. Each answer carries a hint when there is something to wait for or to know, like an image Iminify couldn't make any smaller with the settings used, or one it made smaller in pixels to fit a size limit.
Limits
The MCP server is one more door onto your account, not a separate one. Every image an agent queues counts against your plan's daily images and compressions a minute, the same counts the website and the API spend, and every call to the server counts as an API request. Limits and quotas explains each one, and the pricing page has the numbers for every plan.
When a limit is reached, or anything else is refused, the tool answers with an error carrying the API's message and code (listed on the errors page), plus retry_after in seconds when waiting will help. A good agent tells you the message rather than retrying in a loop.
Disconnecting an app
Settings > Connected apps lists every app you've approved, with when it last called. Disconnect one there and it stops working straight away; it has to be approved again to come back. An app that goes unused for 30 days has to be connected again anyway.
An app connected with an API key instead is removed by deleting that key in Settings > API Tokens.