_ registry / mcp http-sse · checked 2h ago

cleanor

https://mcp.cleanor.app

Registry code: bcd780219df093a1

api record

Cleanor tools for AI builders. Use optimize_image to shrink/convert an image an AI generated or dropped in (returns the optimized bytes + before/after size). Use storage_capacity and image_format_savings for real, cited Cleanor Labs data on device storage and image formats. Use qr_code for a paste-ready SVG QR. No API key needed. Every result links its cleanor.app source.

endpoint
https://mcp.cleanor.app/mcp
protocol
http-sse ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is cleanor live?
Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
Is cleanor free to use?
Partly — some of its tools are open, others need a key or payment.
What tools does cleanor have?
22 tools: cron_describe, storage_capacity, json_format, optimize_image, qr_code, diff, slugify, base_convert, ….
Is cleanor safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 99.1%· all time 99.1%

latency
1,043ms

last good check

priced tools
0

of 22 tools

_ answered our checks, 90 days 458 checks · signed record
  • degraded → live
  • degraded → live
  • live → degraded· HTTP 500
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • optimize and convert an image
  • generate a qr code
  • encode or decode base64
  • compute a hash or hmac
  • convert units and colors
takes → gives
text, images → text, data, images
tools
22 reads
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 22 tools
4 open2 auth-required 16 never probed 6 of 22 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • datetime reads open 16h ago

    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 ms) or an ISO string as input; omit it for "now". LLMs cannot know the real current time, so use this instead of guessing.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "input": {
          "type": "string",
          "maxLength": 64,
          "description": "Optional: a Unix timestamp (s or ms) or ISO date string. Omit for the current time."
        },
        "timezone": {
          "type": "string",
          "default": "UTC",
          "maxLength": 64,
          "description": "IANA timezone, e.g. \"America/New_York\" or \"UTC\"."
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • image_format_savings reads open 16h ago

    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 tax" (converting an iPhone HEIC to JPG/PNG makes it bigger). Use to justify a format choice when building a site or app.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "format": {
          "enum": [
            "webp",
            "avif",
            "jxl"
          ],
          "type": "string",
          "default": "avif",
          "description": "Target format to compare against JPEG."
        },
        "quality": {
          "enum": [
            "web",
            "high"
          ],
          "type": "string",
          "default": "web",
          "description": "web = typical web quality (SSIM 0.95); high = near-lossless (SSIM 0.98)."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • uuid reads open 16h ago

    Generate 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "count": {
          "type": "integer",
          "default": 1,
          "maximum": 100,
          "minimum": 1,
          "description": "How many to generate."
        },
        "version": {
          "enum": [
            "v4",
            "v7"
          ],
          "type": "string",
          "default": "v4",
          "description": "UUID version. v7 = time-ordered."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • placeholder_image reads open 13h ago

    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 or mockup. Use for wireframes and design stubs instead of hotlinking a placeholder service.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "bg": {
          "type": "string",
          "default": "#e5e7eb",
          "maxLength": 32,
          "description": "Background color (hex, rgb() or hsl())."
        },
        "text": {
          "type": "string",
          "maxLength": 120,
          "description": "Label text. Defaults to the dimensions, e.g. \"600×400\"."
        },
        "color": {
          "type": "string",
          "default": "#6b7280",
          "maxLength": 32,
          "description": "Text color."
        },
        "width": {
          "type": "integer",
          "default": 600,
          "maximum": 4000,
          "minimum": 1,
          "description": "Width in pixels."
        },
        "height": {
          "type": "integer",
          "default": 400,
          "maximum": 4000,
          "minimum": 1,
          "description": "Height in pixels."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • hmac reads auth-required 5h ago

    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 instead of guessing. LLMs cannot compute this by hand.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "message",
        "secret"
      ],
      "properties": {
        "secret": {
          "type": "string",
          "maxLength": 4096,
          "minLength": 1,
          "description": "The shared secret key (UTF-8)."
        },
        "message": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 0,
          "description": "The message to sign (UTF-8)."
        },
        "encoding": {
          "enum": [
            "hex",
            "base64"
          ],
          "type": "string",
          "default": "hex",
          "description": "Output encoding."
        },
        "algorithm": {
          "enum": [
            "sha-256",
            "sha-1",
            "sha-384",
            "sha-512"
          ],
          "type": "string",
          "default": "sha-256",
          "description": "Hash algorithm."
        }
      },
      "additionalProperties": false
    }
    arguments 43 lines
  • jwt_decode reads auth-required 5h ago

    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 or stored. Use to read a token during debugging.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "token"
      ],
      "properties": {
        "token": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 1,
          "description": "The JWT (three dot-separated segments)."
        }
      },
      "additionalProperties": false
    }
    arguments 16 lines
  • cron_describe reads unknown 20h ago

    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 sanity-check a schedule instead of guessing what the fields mean.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "expression"
      ],
      "properties": {
        "expression": {
          "type": "string",
          "maxLength": 200,
          "minLength": 1,
          "description": "A 5-field cron expression, e.g. \"30 2 * * 1-5\"."
        }
      },
      "additionalProperties": false
    }
    arguments 16 lines
  • storage_capacity reads unknown 20h ago

    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 sizes. Use for realistic sample copy, dashboards, or "how many photos fit in 128 GB" answers.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "storage_gb"
      ],
      "properties": {
        "content": {
          "enum": [
            "photos",
            "video"
          ],
          "type": "string",
          "default": "photos",
          "description": "What to count."
        },
        "storage_gb": {
          "type": "number",
          "maximum": 4096,
          "minimum": 1,
          "description": "Advertised storage size in GB (e.g. 64, 128, 256, 512)."
        }
      },
      "additionalProperties": false
    }
    arguments 25 lines
  • json_format reads unknown 5h ago

    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 JSON instead of eyeballing it.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "input"
      ],
      "properties": {
        "mode": {
          "enum": [
            "pretty",
            "minify"
          ],
          "type": "string",
          "default": "pretty",
          "description": "pretty = 2-space indent; minify = single line."
        },
        "input": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 1,
          "description": "JSON text."
        },
        "sort_keys": {
          "type": "boolean",
          "default": false,
          "description": "Sort object keys alphabetically (deep)."
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • optimize_image reads unknown 2h ago

    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 byte sizes. Use this when an AI-generated or dropped-in asset (hero image, screenshot, illustration) is too large to ship.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "image_url"
      ],
      "properties": {
        "width": {
          "type": "integer",
          "maximum": 4096,
          "minimum": 16,
          "description": "Resize to this width in px, preserving aspect ratio. Omit to keep original size."
        },
        "format": {
          "enum": [
            "webp",
            "avif",
            "jpeg"
          ],
          "type": "string",
          "default": "webp",
          "description": "Output format. webp = best browser support; avif = smallest; jpeg = universal."
        },
        "quality": {
          "type": "integer",
          "default": 80,
          "maximum": 100,
          "minimum": 1,
          "description": "Encode quality 1-100 (80 is a good default)."
        },
        "image_url": {
          "type": "string",
          "format": "uri",
          "description": "Public URL of the source image (PNG/JPEG/WebP/AVIF/GIF)."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • qr_code reads unknown 2h ago

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "text"
      ],
      "properties": {
        "ecc": {
          "enum": [
            "L",
            "M",
            "Q",
            "H"
          ],
          "type": "string",
          "default": "M",
          "description": "Error-correction level: L=7%, M=15%, Q=25%, H=30% recoverable."
        },
        "size": {
          "type": "integer",
          "default": 320,
          "maximum": 1024,
          "minimum": 64,
          "description": "SVG pixel size."
        },
        "text": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1,
          "description": "Text or URL to encode."
        }
      },
      "additionalProperties": false
    }
    arguments 34 lines
  • diff reads unknown 20h ago

    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 exactly what changed instead of comparing by eye. Capped at 1000 lines per side.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "a",
        "b"
      ],
      "properties": {
        "a": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 0,
          "description": "The original (\"before\") text."
        },
        "b": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 0,
          "description": "The updated (\"after\") text."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • slugify reads unknown 24h ago

    Turn a title or phrase into a clean, URL-safe slug (lowercase, hyphenated, accents stripped). Use when generating page paths, filenames or anchor IDs.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "input"
      ],
      "properties": {
        "input": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1,
          "description": "Text to slugify."
        },
        "separator": {
          "enum": [
            "-",
            "_"
          ],
          "type": "string",
          "default": "-",
          "description": "Word separator."
        }
      },
      "additionalProperties": false
    }
    arguments 25 lines
  • base_convert reads unknown 9h ago

    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 conversions instead of doing them by hand.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "value"
      ],
      "properties": {
        "value": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1,
          "description": "The number, in from_base (e.g. \"ff\", \"1010\", \"255\")."
        },
        "to_base": {
          "type": "integer",
          "default": 16,
          "maximum": 36,
          "minimum": 2,
          "description": "Base to convert to (2–36)."
        },
        "from_base": {
          "type": "integer",
          "default": 10,
          "maximum": 36,
          "minimum": 2,
          "description": "Base of the input (2–36)."
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • color reads unknown 2h ago

    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 themes.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "value"
      ],
      "properties": {
        "value": {
          "type": "string",
          "maxLength": 64,
          "minLength": 1,
          "description": "A color: \"#3b82f6\", \"rgb(59,130,246)\" or \"hsl(217,91%,60%)\"."
        }
      },
      "additionalProperties": false
    }
    arguments 16 lines
  • url_parse reads unknown 9h ago

    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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "maxLength": 4000,
          "minLength": 1,
          "description": "The URL to parse (absolute, with scheme)."
        }
      },
      "additionalProperties": false
    }
    arguments 16 lines
  • color_palette reads unknown 24h ago

    Build 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "color"
      ],
      "properties": {
        "color": {
          "type": "string",
          "maxLength": 64,
          "minLength": 1,
          "description": "Base color: \"#3b82f6\", \"rgb(...)\" or \"hsl(...)\"."
        },
        "harmony": {
          "enum": [
            "complementary",
            "analogous",
            "triadic",
            "tetradic",
            "monochromatic"
          ],
          "type": "string",
          "default": "analogous",
          "description": "Color-harmony rule."
        }
      },
      "additionalProperties": false
    }
    arguments 28 lines
  • count reads unknown 24h ago

    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 tool for "how many characters/words" questions.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "input"
      ],
      "properties": {
        "input": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 0,
          "description": "Text to measure."
        }
      },
      "additionalProperties": false
    }
    arguments 16 lines
  • base64 reads unknown 13h ago

    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 config values instead of guessing the bytes.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "input"
      ],
      "properties": {
        "mode": {
          "enum": [
            "encode",
            "decode"
          ],
          "type": "string",
          "default": "encode",
          "description": "Direction."
        },
        "input": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 1,
          "description": "Text to encode, or Base64 to decode."
        },
        "url_safe": {
          "type": "boolean",
          "default": false,
          "description": "Use URL-safe alphabet (-_ instead of +/, no padding)."
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • unit_convert reads unknown 9h ago

    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, 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.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "value",
        "from",
        "to"
      ],
      "properties": {
        "to": {
          "type": "string",
          "maxLength": 8,
          "minLength": 1,
          "description": "Target unit (must be the same category as \"from\")."
        },
        "from": {
          "type": "string",
          "maxLength": 8,
          "minLength": 1,
          "description": "Source unit (e.g. \"km\", \"lb\", \"mib\", \"c\")."
        },
        "value": {
          "type": "number",
          "description": "The numeric value to convert."
        }
      },
      "additionalProperties": false
    }
    arguments 28 lines
  • hash reads unknown 13h ago

    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 intentionally not offered (broken, and unavailable in Web Crypto). LLMs cannot compute these reliably by hand, so always use this tool instead of guessing.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "input"
      ],
      "properties": {
        "input": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 1,
          "description": "Text to hash (UTF-8)."
        },
        "algorithm": {
          "enum": [
            "sha-256",
            "sha-1",
            "sha-384",
            "sha-512"
          ],
          "type": "string",
          "default": "sha-256",
          "description": "Hash algorithm. Default sha-256."
        }
      },
      "additionalProperties": false
    }
    arguments 27 lines
  • regex_test reads unknown 27h ago

    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 pattern instead of reasoning about it in your head. Input and pattern are length-capped to keep it fast and safe.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "pattern",
        "input"
      ],
      "properties": {
        "flags": {
          "type": "string",
          "default": "g",
          "maxLength": 8,
          "description": "Regex flags, e.g. \"gi\". Allowed: g i m s u y d."
        },
        "input": {
          "type": "string",
          "maxLength": 20000,
          "minLength": 0,
          "description": "Text to test against."
        },
        "pattern": {
          "type": "string",
          "maxLength": 1000,
          "minLength": 1,
          "description": "The regex pattern (without slashes)."
        }
      },
      "additionalProperties": false
    }
    arguments 29 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id bcd780219df093a1.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/bcd780219df093a1/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/bcd780219df093a1/badge.svg)](https://brick.blue/agent/bcd780219df093a1?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.