Cleanor
Measured conclusion: Alive, not deep-tested. L2 outcome: not_attempted.
Zero-auth MCP: image optimize, cited storage/format data, and dev utilities LLMs get wrong.
| Author | cleanor-app |
|---|---|
| Access | mixed |
| Publisher key required | No |
| Measured state | Alive, not deep-tested |
| L1 liveness | alive |
| L1 latency | 786 ms |
| Endpoint region | Global |
| Languages | EN |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Cleanor": {
"url": "https://mcp.cleanor.app/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (22)
optimize_imageread-onlyFetch an image from a public URL and re-encode it smaller (WebP/AVIF/JPEG), optionally resizing to a target width. Returns the optimized image plus before/after byte sizes. Use this when an AI-generated or dropped-in asset (hero image, screenshot, illustration) is too large to ship.
Parameters:
image_url(required) — string — Public URL of the source image (PNG/JPEG/WebP/AVIF/GIF).width— integer — Resize to this width in px, preserving aspect ratio. Omit to keep original size.format— string — Output format. webp = best browser support; avif = smallest; jpeg = universal.quality— integer — Encode quality 1-100 (80 is a good default).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world yes
storage_capacityread-onlyHow many photos or minutes of video actually fit in a given storage size, corrected for real OS/filesystem overhead. Backed by Cleanor Labs measured per-item sizes. Use for realistic sample copy, dashboards, or "how many photos fit in 128 GB" answers.
Parameters:
storage_gb(required) — number — Advertised storage size in GB (e.g. 64, 128, 256, 512).content— string — What to count.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
image_format_savingsread-onlyHow much smaller WebP, AVIF or JPEG XL are than JPEG at matched perceptual quality, from Cleanor Labs’ controlled benchmark. Also reports the "HEIC conversion tax" (converting an iPhone HEIC to JPG/PNG makes it bigger). Use to justify a format choice when building a site or app.
Parameters:
format— string — Target format to compare against JPEG.quality— string — web = typical web quality (SSIM 0.95); high = near-lossless (SSIM 0.98).
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
qr_coderead-onlyEncode text or a URL as a QR code and return a crisp, dependency-free SVG you can paste straight into a page, deck or doc.
Parameters:
text(required) — string — Text or URL to encode.ecc— string — Error-correction level: L=7%, M=15%, Q=25%, H=30% recoverable.size— integer — SVG pixel size.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world no
hashread-onlyCompute a cryptographic hash of text (SHA-1, SHA-256, SHA-384 or SHA-512) and return the hex digest. Use for checksums, cache keys, or verifying content. MD5 is intentionally not offered (broken, and unavailable in Web Crypto). LLMs cannot compute these reliably by hand, so always use this tool instead of guessing.
Parameters:
input(required) — string — Text to hash (UTF-8).algorithm— string — Hash algorithm. Default sha-256.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
uuidread-onlyGenerate one or more UUIDs. v4 is fully random; v7 is time-sortable (recommended for database keys). LLMs cannot produce cryptographically random or correctly-formatted UUIDs, so always use this tool.
Parameters:
count— integer — How many to generate.version— string — UUID version. v7 = time-ordered.
Hints: read-only yes · destructive not declared · idempotent no · open-world no
base64read-onlyEncode text to Base64 or decode Base64 back to text (UTF-8 safe). Supports URL-safe alphabet. Use whenever you need to encode/decode data URIs, tokens, or config values instead of guessing the bytes.
Parameters:
input(required) — string — Text to encode, or Base64 to decode.mode— string — Direction.url_safe— boolean — Use URL-safe alphabet (-_ instead of +/, no padding).
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
json_formatread-onlyValidate JSON and pretty-print or minify it, optionally sorting object keys. Returns a precise parse error (with position) if invalid. Use to check and clean JSON instead of eyeballing it.
Parameters:
input(required) — string — JSON text.mode— string — pretty = 2-space indent; minify = single line.sort_keys— boolean — Sort object keys alphabetically (deep).
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
jwt_decoderead-onlyDecode a JSON Web Token into its header and payload so you can inspect claims (iss, exp, sub, scopes). The signature is NOT verified and no secret is required or stored. Use to read a token during debugging.
Parameters:
token(required) — string — The JWT (three dot-separated segments).
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
colorread-onlyConvert a color (hex, rgb() or hsl()) and return hex, RGB and HSL representations at once. Use when picking or translating colors for CSS, design tokens or themes.
Parameters:
value(required) — string — A color: "#3b82f6", "rgb(59,130,246)" or "hsl(217,91%,60%)".
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
slugifyread-onlyTurn a title or phrase into a clean, URL-safe slug (lowercase, hyphenated, accents stripped). Use when generating page paths, filenames or anchor IDs.
Parameters:
input(required) — string — Text to slugify.separator— string — Word separator.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
countread-onlyAccurately count characters (Unicode code points), UTF-16 units, words, lines and UTF-8 bytes in text. LLMs are notoriously bad at counting, so always use this tool for "how many characters/words" questions.
Parameters:
input(required) — string — Text to measure.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
regex_testread-onlyTest a JavaScript regular expression against sample text and return whether it matches, plus every match with its captured groups and index. Use to verify a pattern instead of reasoning about it in your head. Input and pattern are length-capped to keep it fast and safe.
Parameters:
pattern(required) — string — The regex pattern (without slashes).input(required) — string — Text to test against.flags— string — Regex flags, e.g. "gi". Allowed: g i m s u y d.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
cron_describeread-onlyParse a standard 5-field cron expression (minute hour day-of-month month day-of-week) into a plain-English breakdown and the next few run times in UTC. Use to sanity-check a schedule instead of guessing what the fields mean.
Parameters:
expression(required) — string — A 5-field cron expression, e.g. "30 2 * * 1-5".
Hints: read-only yes · destructive not declared · idempotent no · open-world no
unit_convertread-onlyConvert a value between units of length, mass, data size, time, speed or temperature. Supported units: mm, cm, m, km, in, ft, yd, mi, nmi, mg, g, kg, t, oz, lb, st, bit, byte, kb, kib, mb, mib, gb, gib, tb, tib, ms, s, min, h, day, week, mps, kph, mph, fps, knot, c, f, k. Use for exact conversions instead of approximating.
Parameters:
value(required) — number — The numeric value to convert.from(required) — string — Source unit (e.g. "km", "lb", "mib", "c").to(required) — string — Target unit (must be the same category as "from").
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
datetimeread-onlyGet the current date/time, or convert a given timestamp, into a target IANA timezone with ISO, Unix and human-readable forms. Pass a Unix timestamp (seconds or ms) or an ISO string as input; omit it for "now". LLMs cannot know the real current time, so use this instead of guessing.
Parameters:
input— string — Optional: a Unix timestamp (s or ms) or ISO date string. Omit for the current time.timezone— string — IANA timezone, e.g. "America/New_York" or "UTC".
Hints: read-only yes · destructive not declared · idempotent no · open-world no
url_parseread-onlyBreak a URL into its components: scheme, host, port, path, decoded query parameters and fragment. Use to inspect or debug a URL instead of parsing it by eye.
Parameters:
url(required) — string — The URL to parse (absolute, with scheme).
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
base_convertread-onlyConvert an integer between number bases 2–36 (e.g. hex to binary, decimal to base-36). Arbitrary precision via BigInt, so large values stay exact. Use for radix conversions instead of doing them by hand.
Parameters:
value(required) — string — The number, in from_base (e.g. "ff", "1010", "255").to_base— integer — Base to convert to (2–36).from_base— integer — Base of the input (2–36).
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
diffread-onlyCompute a line-by-line diff between two texts, marking removed lines with "-", added with "+" and unchanged with two spaces, plus a change count. Use to see exactly what changed instead of comparing by eye. Capped at 1000 lines per side.
Parameters:
a(required) — string — The original ("before") text.b(required) — string — The updated ("after") text.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
hmacread-onlyCompute an HMAC (keyed hash) of a message with a secret, using SHA-1/256/384/512, returned as hex or Base64. Use to sign webhook payloads or verify a signature instead of guessing. LLMs cannot compute this by hand.
Parameters:
message(required) — string — The message to sign (UTF-8).secret(required) — string — The shared secret key (UTF-8).encoding— string — Output encoding.algorithm— string — Hash algorithm.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
placeholder_imageread-onlyGenerate a lightweight SVG placeholder image at any size, with an optional label and custom background/text colors. Dependency-free, pastes straight into a page or mockup. Use for wireframes and design stubs instead of hotlinking a placeholder service.
Parameters:
bg— string — Background color (hex, rgb() or hsl()).text— string — Label text. Defaults to the dimensions, e.g. "600×400".color— string — Text color.width— integer — Width in pixels.height— integer — Height in pixels.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
color_paletteread-onlyBuild a harmonious color palette from a base color using color-theory rules (complementary, analogous, triadic, tetradic, or monochromatic). Returns each color as hex and HSL. Use to derive a theme or design tokens from one brand color.
Parameters:
color(required) — string — Base color: "#3b82f6", "rgb(...)" or "hsl(...)".harmony— string — Color-harmony rule.
Hints: read-only yes · destructive not declared · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.