TinyPNG MCP by usefulapi
Server Details
Compress, resize and convert images with TinyPNG by URL, and check this month's compression count.
The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 92.7% over 20 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 4 tools
Each tool maps to a clearly distinct operation: compress (POST /shrink), download (GET /output/{id}), transform (POST /output/{id}), and usage check. Although compress and transform both write and consume quota, their descriptions make the boundary explicit (transform operates on an earlier output_url). No tool pair is likely to be confused.
All four tools follow the identical tinypng_verb_noun pattern: tinypng_compress_image, tinypng_download_image, tinypng_get_usage, tinypng_transform_image. Prefix, casing (snake_case), and verb style are perfectly uniform.
Four tools cover the core Tinify API surface (shrink, output, transform, usage) without redundancy, which is reasonable for this narrow domain. It is slightly lean—there is no separate tool for local-file/byte upload—but nothing is wasted or missing that would bloat scope.
The compress → download/transform → usage lifecycle is fully covered, including quota visibility and metadata/resize/convert options. The one notable gap is that compression only accepts a public URL, so agents cannot compress local files or raw bytes, which limits some real workflows.
Available Tools
4 toolstinypng_compress_imageCompress an image from a URLAInspect
WRITE (uses quota): ask TinyPNG (Tinify) to fetch a public image by URL and compress it (JPEG, PNG, WebP, AVIF or JPEG XL). Returns the output_url (Tinify's Location address of the compressed image), the compressed size and type, the savings when the input size is known, and the Compression-Count header (compressions used this month). The image is stored by Tinify for about 48 hours; output_url needs your API key, so use tinypng_download_image to get the bytes and tinypng_transform_image to resize, convert or keep metadata. Each compression counts against the monthly quota of your Tinify API key (the free plan includes 500 per month); resizing and converting count one extra compression each. POST /shrink.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public http(s) URL of the image to compress. Tinify's servers fetch it, so it must be reachable from the internet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark this as a non-read-only, non-idempotent, open-world write; the description adds substantial context beyond them: resulting output_url is key-gated, Tinify retains the image ~48 hours, each call decrements a monthly quota (500 free), and resize/convert each cost an extra compression. That is rich operational disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It front-loads the most decision-relevant fact ('WRITE (uses quota)') then packs purpose, return shape, retention, and sibling routing into tight sentences with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and discharges it: output_url, compressed size and type, savings, and Compression-Count header. Quota, retention, and alternatives are all covered, so an agent can call this correctly without further lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the lone 'url' parameter is fully described there, including the internet-reachability requirement. The description restates that Tinify's servers fetch the URL but adds no syntax or formatting detail beyond the schema, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific write operation ('ask TinyPNG to fetch a public image by URL and compress it'), enumerates the supported formats, and distinguishes itself from siblings by delegating resizing/converting to tinypng_transform_image and byte retrieval to tinypng_download_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use tinypng_download_image for bytes and tinypng_transform_image for resize/convert/metadata. It also states the costs (quota consumption, extra compression per resize/convert), which is exactly the when-to-use-wisely guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinypng_download_imageDownload a compressed imageARead-onlyInspect
Fetch the compressed image of an earlier tinypng_compress_image (its output_url, valid about 48 hours) and return it as an image with its type, byte size, width and height. Images over 1 MB are described but not returned inline. Downloading does not use extra compression quota. GET /output/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| output_url | Yes | The output_url returned by tinypng_compress_image (https://api.tinify.com/output/<id>), or just the id. Outputs are kept by Tinify for about 48 hours. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description discloses non-obvious traits: the ~48-hour output validity window, that images over 1 MB are described rather than returned inline, and that downloading consumes no extra compression quota. These are exactly the operational facts an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and the source of the input, then packs expiry, return shape, size threshold and quota into a compact block. Dense but every clause carries information; the trailing 'GET /output/{id}' is a useful endpoint anchor rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and one parameter, the description carries the burden well by describing the returned image and its metadata. The one wrinkle is the >1 MB case, where it says the image is 'described' without specifying what representation the caller actually receives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the sole parameter's format, length bounds and 48h note are already documented in the schema. The description restates the 48h validity but adds no new syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the compressed image... and return it as an image') and ties it directly to the sibling that produces the input ('of an earlier tinypng_compress_image'). An agent can distinguish this from tinypng_compress_image and tinypng_transform_image without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the condition for use: retrieving the output of a prior compress call via its output_url, within a ~48h window. It does not explicitly contrast against tinypng_transform_image or note what to do when the output has expired, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinypng_get_usageGet compression usage this monthARead-onlyInspect
How many compressions your Tinify API key has used this calendar month (the Compression-Count header), and whether the key is valid. The check sends an empty request that Tinify refuses, so nothing is compressed and no quota is used. Compare with your Tinify plan (the free plan includes 500 per month). POST /shrink with no body.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the generic read-only/no-destruction profile; the description adds genuinely non-obvious behavior: the check issues an empty request that Tinify refuses so no image is compressed and no quota is consumed. It also names the underlying signal (Compression-Count header) and the endpoint used, which an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose and then the safety explanation before the plan comparison. Information density is high and every clause earns its place, though the parenthetical header name and endpoint spec make it slightly denser than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it states that the result is the monthly compression count and key validity. Combined with the no-quota-consumed guarantee and the free-plan reference, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and 100% schema coverage, so the baseline is 4. The description correctly signals the parameterless nature ('POST /shrink with no body'), confirming no input is expected beyond the configured API key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reporting how many compressions the API key has used this calendar month plus key validity. This is clearly distinguishable from the sibling tools (compress, download, transform), none of which report quota or key state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives the context for using it — comparing consumption against the Tinify plan, with the free plan's 500/month figure — which implies a pre-flight quota check. It stops short of an explicit 'call this before compressing to avoid overage' instruction or any when-not clause, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tinypng_transform_imageResize, convert or keep metadata of a compressed imageAInspect
WRITE (uses quota): apply a resize, a format conversion and/or metadata preservation to an image compressed earlier (the output_url from tinypng_compress_image, valid about 48 hours). Returns the resulting type, byte size, width, height and Compression-Count; the image itself is returned too when include_image is true and it is under 1 MB. Resize: method scale (give width OR height), or fit / cover / thumb (give width AND height); images are never scaled up. Convert: one or more of image/webp, image/jpeg, image/png, image/avif, image/jxl (several = the smallest is returned) or / (the smallest of WebP, JPEG, PNG); converting a transparent image to JPEG needs a background colour. Preserve: copyright, creation, location (location is JPEG only) keeps that metadata, which makes the file slightly larger. Each call is a fresh request: resize and convert each count one extra compression on your monthly Tinify quota, preserve is free. Tinify returns the bytes only (no new URL), so only include_image gives you the transformed file, and only when it is under 1 MB. POST /output/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| preserve | No | Metadata to keep: copyright, creation, location (JPEG only). | |
| background | No | Background for transparent areas when converting to a type without transparency (JPEG): "#rrggbb", "white" or "black". Only with convert_to. | |
| convert_to | No | Target type(s), e.g. ["image/webp"]. Several = the smallest result is returned. ["*/*"] = the smallest of WebP, JPEG, PNG. | |
| output_url | Yes | The output_url returned by tinypng_compress_image (https://api.tinify.com/output/<id>), or just the id. Outputs are kept by Tinify for about 48 hours. | |
| resize_width | No | Target width in pixels. | |
| include_image | No | Also return the resulting image (only when it is under 1 MB). Default false: sizes only. | |
| resize_height | No | Target height in pixels. | |
| resize_method | No | Resize method. scale: width or height; fit/cover/thumb: width and height. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description discloses quota cost per operation (resize and convert each cost one extra compression, preserve is free), the 48-hour validity window of outputs, the 1 MB cap on returned images, and the fact that Tinify returns bytes only with no new URL. These are material operational facts an agent cannot infer from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loads the WRITE/quota warning, then proceeds method-by-method (Resize / Convert / Preserve), which is easy to scan. It is long for a tool description, and the include_image/1 MB rule is restated twice, which is a small redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and does so fully: resulting type, byte size, width, height, Compression-Count, plus the conditional image payload. It also covers expiry, quota, and the endpoint, leaving nothing essential unstated for an 8-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real semantic value: it explains the cross-parameter constraint that scale takes width OR height while fit/cover/thumb require both, that images are never scaled up, that multiple convert targets return the smallest result, and that transparent-to-JPEG conversion requires a background colour. This goes beyond the per-field schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("WRITE (uses quota): apply a resize, a format conversion and/or metadata preservation to an image") and explicitly anchors the input to the sibling tool's output ("the output_url from tinypng_compress_image"). An agent can distinguish this from tinypng_compress_image without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use it: it operates on an already-compressed image from tinypng_compress_image, within a ~48 hour window, and each call is a fresh request. It does not explicitly state when NOT to use it or point to tinypng_download_image as the alternative for fetching files, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Related MCP Connectors
Convert, compress and resize many images to WebP, JPEG, PNG or AVIF; returns links and sizes.
Compress, convert and resize images, and scan web pages for every image they load.
Compress PNG images and convert them to or from popular image and document formats.
Resize, convert, compress, crop and thumbnail images, and strip EXIF and GPS metadata.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables batch image compression and resizing using the TinyPNG API. Supports PNG, JPEG, WebP, and AVIF formats with detailed compression reports and multiple resize modes.10 npm2ISC
- AlicenseAqualityCmaintenanceCompress, resize, crop and convert images via tinify.dev532 npmMIT
- AlicenseCqualityDmaintenanceImage Tools MCP is a Model Context Protocol (MCP) service that retrieves image dimensions and compresses images from URLs and local files using the TinyPNG API. It supports converting images to formats like webp, jpeg/jpg, and png, providing detailed information on width, height, type, and compressi235 npm9MIT
- AlicenseBqualityDmaintenance🧙🏻 Integrated TinyPNG MCP server, quickly use TinyPNG through LLMs.33 npmApache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.