Compress, resize, crop, and convert images with the Tinify.dev API from any MCP client.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
๐ก Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
MCP (Model Context Protocol) server for the Tinify.dev image API. Lets ChatGPT, Claude, Cursor, and other MCP clients compress, resize, crop, and convert images โ with honest results.
optimized: false) instead of writing a byte-identical "optimized" copy.<name>.min.<ext> beside the input, or to an explicit output_path. Replacing a file requires overwrite: true.structuredContent on every call, so agents can do math instead of parsing prose.Not affiliated with TinyPNG. This server talks to the Tinify.dev API.
Add to claude_desktop_config.json (Settings โ Developer โ Edit Config):
Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json globally):
The same five tools are available as a hosted streamable-HTTP MCP server - no install, works from ChatGPT connectors, the claude.ai directory, and any registry that expects a URL:
Two ways to authenticate:
https://api.tinify.dev/mcp) and pick OAuth; the client discovers the authorization and token endpoints automatically from the server's .well-known metadata, registers itself, and opens a Connect Tinify page where you paste your Tinify API key. Your key stays the credential - the client only ever holds an opaque token that maps back to it server-side.Authorization: Bearer tnf_live_... (or tnf_test_...) and skip OAuth entirely. Unchanged.In ChatGPT, open Settings โ Security and login and enable Developer mode.
Open ChatGPT Plugins, select the plus button, and add https://api.tinify.dev/mcp.
Complete Connect Tinify with a Tinify API key.
Add the connection from the conversation's tools menu, attach a PNG/JPEG/WebP/AVIF, and ask:
The hosted server cannot access local paths, so each image tool accepts exactly one of:
image โ the ChatGPT attachment object. ChatGPT fills this automatically because the descriptor advertises openai/fileParams.image_base64 โ a portable fallback for other MCP clients, capped at ~28 MB decoded.ChatGPT attachment downloads are HTTPS-only, reject private/reserved network targets and redirects, time out after 30 seconds, and are capped at the Tinify API's 40 MB limit. Successful operations return exact byte metrics and a temporary MCP result link. Existing base64 callers also receive structuredContent.image_base64 for backwards compatibility. get_usage is identical to the local version. Nothing is written to the user's filesystem.
Try it with curl:
For local files, prefer the stdio server above - it reads and writes them directly with no base64 round-trip and no 28 MB cap.
This repository intentionally supports both OpenAI and Claude:
An OpenAI-only repository would duplicate the Tinify logic and make behavior drift more likely. OpenAI-specific descriptor metadata stays as a small additive layer in the hosted adapter; a separate repository is not needed.
For public OpenAI submission, set the portal-provided domain token as
OPENAI_APPS_CHALLENGE_TOKEN in /etc/tinify/mcp-http.env and deploy the
matching nginx location from deploy/nginx-location.conf. The endpoint returns
only that token at /.well-known/openai-apps-challenge; do not commit the real
portal token.
| Tool | Arguments | Does |
|---|---|---|
compress_image | path (absolute), output_path?, quality_mode? (balanced/best_quality/lossless), target_size_kb? (beta), overwrite? | Compresses PNG/JPEG/WebP/AVIF. Writes <name>.min.<ext> beside the input. When the API returns optimized: false, nothing is written (unless you asked for an explicit output_path). |
resize_image | path, width?/height?/scale? (at least one), keep_aspect_ratio?, output_path?, overwrite? | Resizes and writes the result. |
crop_image | path, x, y, width, height, output_path?, overwrite? | Crops to a rectangle and writes the result. |
convert_image | path, format (avif/webp/jpeg/png), quality_mode?, output_path?, overwrite? | Converts formats (beta โ the endpoint is rolling out server-side). Default output: <name>.min.<new-ext>. |
get_usage | โ | Plan, billing period, operations used and remaining. |
All image tools require absolute paths (MCP servers run with an unpredictable working directory) and pre-check the 40 MB API limit locally. API errors come back as readable tool errors with the error code and request_id to quote to support.
env block of your MCP config.invalid_api_key โ the key is wrong or revoked; create a new one at tinify.dev/developers.quota_exhausted (429) โ the monthly quota is used up; run get_usage to see the period end./Users/you/img.png, not ./img.png.~/Library/Logs/Claude/mcp-server-tinify.log.MIT ยฉ Stian Larsen
Cursor: Add to Cursor - then set your real key in Cursor's MCP settings.
VS Code:
Codex CLI:
or in ~/.codex/config.toml:
Claude Code plugin (MCP + image-optimization skill):
More: https://tinify.dev/mcp
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mcp-174)<a href="https://allmcps.com/mcp/mcp-174"><img src="https://allmcps.com/api/badge/mcp-174?style=directory" alt="Mcp on AllMCPs" /></a>