{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_2jzvkv2kzj3n","handle":"cleanor","url":"https://wellknown.network/agents/cleanor","links":{"self":"https://wellknown.network/agents/cleanor/record.json","html":"https://wellknown.network/agents/cleanor","markdown":"https://wellknown.network/agents/cleanor/record.md","api":"https://wellknown.network/api/v1/agents/cleanor","status":"https://wellknown.network/api/v1/agents/cleanor/status","claim":"https://wellknown.network/agents/cleanor/claim","claimApi":"https://wellknown.network/api/v1/claims","badge":"https://wellknown.network/agents/cleanor/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air:mcp.cleanor.app:server:cleanor","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Cleanor","summary":"Zero-auth MCP: image optimize, cited storage/format data, and dev utilities LLMs get wrong.","description":"Zero-auth MCP: image optimize, cited storage/format data, and dev utilities LLMs get wrong.","publisher":{"name":"app.cleanor","url":null},"homepage":"https://mcp.cleanor.app","repository":"https://github.com/cleanor-app/cleanor-mcp","version":"0.6.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.cleanor.app/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"npm:@cleanor/mcp","type":"package_npm","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-07-14T19:57:06.696306Z","publishedAt":"2026-07-14T19:57:06.696306Z","registryName":"app.cleanor/cleanor"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[],"categories":[]},"observed":{"status":"unknown","statusReason":"Not checked yet.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[{"at":"2026-09-05T18:27:58.484Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":497,"error":null,"detail":{"tools":[{"name":"optimize_image","description":"Fetch 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"},{"name":"storage_capacity","description":"How 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 si"},{"name":"image_format_savings","description":"How much smaller WebP, AVIF or JPEG XL are than JPEG at matched perceptual quality, from Cleanor Labs’ controlled benchmark. Also reports the \"HEIC conversion t"},{"name":"qr_code","description":"Encode 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."},{"name":"hash","description":"Compute 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"},{"name":"uuid","description":"Generate one or more UUIDs. v4 is fully random; v7 is time-sortable (recommended for database keys). LLMs cannot produce cryptographically random or correctly-f"},{"name":"base64","description":"Encode 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 confi"},{"name":"json_format","description":"Validate 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 JS"},{"name":"jwt_decode","description":"Decode 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 o"},{"name":"color","description":"Convert 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 them"},{"name":"slugify","description":"Turn a title or phrase into a clean, URL-safe slug (lowercase, hyphenated, accents stripped). Use when generating page paths, filenames or anchor IDs."},{"name":"count","description":"Accurately 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 "},{"name":"regex_test","description":"Test 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 pat"},{"name":"cron_describe","description":"Parse 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 s"},{"name":"unit_convert","description":"Convert 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,"},{"name":"datetime","description":"Get 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 "},{"name":"url_parse","description":"Break 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."},{"name":"base_convert","description":"Convert 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"},{"name":"diff","description":"Compute 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 exa"},{"name":"hmac","description":"Compute 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 "},{"name":"placeholder_image","description":"Generate a lightweight SVG placeholder image at any size, with an optional label and custom background/text colors. Dependency-free, pastes straight into a page"},{"name":"color_palette","description":"Build a harmonious color palette from a base color using color-theory rules (complementary, analogous, triadic, tetradic, or monochromatic). Returns each color "}],"toolCount":22,"serverName":"cleanor","capabilities":["tools"],"serverVersion":"0.6.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"optimize_image","description":"Fetch 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"},{"name":"storage_capacity","description":"How 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 si"},{"name":"image_format_savings","description":"How much smaller WebP, AVIF or JPEG XL are than JPEG at matched perceptual quality, from Cleanor Labs’ controlled benchmark. Also reports the \"HEIC conversion t"},{"name":"qr_code","description":"Encode 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."},{"name":"hash","description":"Compute 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"},{"name":"uuid","description":"Generate one or more UUIDs. v4 is fully random; v7 is time-sortable (recommended for database keys). LLMs cannot produce cryptographically random or correctly-f"},{"name":"base64","description":"Encode 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 confi"},{"name":"json_format","description":"Validate 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 JS"},{"name":"jwt_decode","description":"Decode 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 o"},{"name":"color","description":"Convert 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 them"},{"name":"slugify","description":"Turn a title or phrase into a clean, URL-safe slug (lowercase, hyphenated, accents stripped). Use when generating page paths, filenames or anchor IDs."},{"name":"count","description":"Accurately 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 "},{"name":"regex_test","description":"Test 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 pat"},{"name":"cron_describe","description":"Parse 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 s"},{"name":"unit_convert","description":"Convert 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,"},{"name":"datetime","description":"Get 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 "},{"name":"url_parse","description":"Break 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."},{"name":"base_convert","description":"Convert 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"},{"name":"diff","description":"Compute 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 exa"},{"name":"hmac","description":"Compute 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 "},{"name":"placeholder_image","description":"Generate a lightweight SVG placeholder image at any size, with an optional label and custom background/text colors. Dependency-free, pastes straight into a page"},{"name":"color_palette","description":"Build a harmonious color palette from a base color using color-theory rules (complementary, analogous, triadic, tetradic, or monochromatic). Returns each color "}],"package":null},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"app.cleanor/cleanor","url":"https://registry.modelcontextprotocol.io/v0/servers/app.cleanor%2Fcleanor","firstSeenAt":"2026-09-05T15:22:05.341Z","fetchedAt":"2026-09-05T15:22:05.341Z","normalizedAt":"2026-09-05T15:22:05.341Z"}]},"firstSeenAt":"2026-09-05T15:22:05.341Z","updatedAt":"2026-09-05T15:22:14.268Z"}