_ registry / mcp streamable-http · checked 6h ago

com.clawhard/dev

https://dev.clawhard.com

Registry code: 0fb780a79d1fd509

api record

Clawhard Dev Tools return exact, deterministic answers. stamp_check_email_domain and stamp_check_dns_record: SPF, DKIM, DMARC and MX from live DNS with fix records. deadbolt_check_supabase_access and deadbolt_catalog_query: per-table read and write access for anon and signed-in users, findings and fix SQL. tick_next_runs and tick_matches: cron next runs with DST warnings. mend_repair_json, mend_outline_json and mend_query_json: repair JSON without changing values, outline it, extract fields by path. swatch_check_contrast, swatch_fix_contrast, swatch_make_scale and swatch_check_pairs: WCAG and…

endpoint
https://dev.clawhard.com/mcp
protocol
streamable-http ·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 com.clawhard/dev live?
Yes — it answered the hub's last check (checked 6h ago). It answered 100% of checks over the last 30 days.
Is com.clawhard/dev free to use?
Yes — the hub reached it with no key and no payment.
What tools does com.clawhard/dev have?
19 tools: mend_outline_json, doorman_check_ai_bot_access, stamp_check_email_domain, stamp_check_dns_record, deadbolt_check_supabase_access, tick_next_runs, tick_matches, mend_repair_json, ….
Is com.clawhard/dev 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 100%· all time 100%

latency
200ms

last good check

priced tools
0

of 19 tools

_ answered our checks, 90 days 2 checks · signed record
  • unknown → live
_ 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 19 tools
1 open 18 never probed 1 of 19 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.

  • deadbolt_catalog_query open 6h ago

    Use when you need to check a live Supabase project rather than migration files: returns a read-only SQL query that reads table RLS settings, grants for anon and authenticated, policies, SECURITY DEFINER functions and storage buckets (never row data) and returns one JSON value. Run it with the user's Supabase SQL Editor or a Supabase MCP execute_sql tool, then pass the JSON to deadbolt_check_supabase_access.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • mend_outline_json unknown 6h ago

    Use when you are about to read a big JSON response, log or export into context, before loading it: returns a compact outline of the structure (keys, types, array lengths, one example per repeated shape) so you can plan a query without spending tokens on the whole document. Repairs the JSON first if needed. Follow with mend_query_json to pull only the values you need. Up to 100,000 characters.

    mcp-tool

    {
      "type": "object",
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 1,
          "description": "The JSON (or JSON-ish text)."
        },
        "max_depth": {
          "type": "integer",
          "maximum": 10,
          "minimum": 1,
          "description": "How many levels to expand. Default 4."
        },
        "max_items": {
          "type": "integer",
          "maximum": 20,
          "minimum": 1,
          "description": "How many array items to show when items differ. Default 6."
        }
      }
    }
    arguments 26 lines
  • doorman_check_ai_bot_access unknown 6h ago

    Use when the user asks whether their site (or any public site), or a robots.txt they pasted, blocks ChatGPT, Claude, Google AI, Perplexity or other AI crawlers, whether AI can read or train on their content, or why AI search does not mention their site. Fetches the live robots.txt and reports, for 22 named AI bots in four groups (AI training, AI search, assistants, search engines), which are let in, kept out or partly blocked, plus the site's content-signal preference and fixes. Example: {"url": "example.com"} or {"robots_txt": "User-agent: GPTBot\nDisallow: /"}. Pass robots_txt instead of url to check a draft or pasted file without fetching anything. Read-only.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "description": "Website address or domain, e.g. nytimes.com. Send this or robots_txt."
        },
        "robots_txt": {
          "type": "string",
          "minLength": 0,
          "description": "robots.txt text to check instead of fetching a site (a draft or a pasted file, up to 512 KB). Empty means no robots.txt."
        }
      }
    }
    arguments 14 lines
  • stamp_check_email_domain unknown never probed

    Use when the user asks why their email goes to spam, whether their domain is set up to send email, or before they launch a newsletter, cold outreach, transactional email or a new sending service, e.g. "why are my emails going to spam?", "is my SPF/DKIM/DMARC right?", "do I meet Gmail and Yahoo's sender requirements?" or "I added SendGrid, did I break SPF?". Reads public DNS (DNS-over-HTTPS) and checks: SPF (exactly one record, every include followed and DNS lookups counted per RFC 7208 against the limit of 10, void lookups, loops, +all/?all, ptr), DMARC (RFC 7489 syntax, policy, pct, alignment, inherited from the parent domain, and whether an external report address authorized it), DKIM (17 common selectors plus any you pass; key type and RSA key size read from the key, revoked or broken keys), and MX (provider, null MX). Returns a grade A-F, a verdict, each check with status pass/warn/fail/info, whether the Gmail, Yahoo and Outlook.com sender rules are met, and copy-ready DNS records to fix problems (e.g. one merged SPF record, a starter DMARC record). DNS cannot list DKIM selectors, so when none of the common selectors is found the result says so and a known selector (the s= value in a DKIM-Signature header) can be passed in. Accepts a domain, an email address or a URL. Results are cached for 5 minutes; pass fresh=true right after the user changes DNS.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "fresh": {
          "type": "boolean",
          "description": "true to skip the 5-minute cache, e.g. right after a DNS change."
        },
        "domain": {
          "type": "string",
          "maxLength": 300,
          "minLength": 1,
          "description": "The sending domain, e.g. mycompany.com. An email address ([email protected]) or a URL also works."
        },
        "dkim_selectors": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 63,
            "minLength": 1
          },
          "maxItems": 5,
          "description": "Extra DKIM selectors to try besides the common ones, e.g. [\"mxvault\"]. Find it as s= in a DKIM-Signature header or in the provider's setup page."
        }
      }
    }
    arguments 28 lines
  • stamp_check_dns_record unknown never probed

    Use when you or the user are about to publish or edit an SPF, DMARC or DKIM TXT record, for example after writing a new SPF record that adds a sending service, or when the user pastes a record and asks "is this right?". Detects the record type. SPF: syntax per RFC 7208, every include and redirect followed live in DNS and counted against the 10-lookup limit, void lookups, loops, the final all; returns a lookup tree. DMARC: RFC 7489 tags and values (p, sp, pct, rua/ruf, adkim/aspf, fo). DKIM: key type and RSA key size read from the key, revoked (empty p=) or truncated keys. Returns valid true/false, errors, warnings and where to publish it. Pass domain so a/mx terms without a value can be resolved.

    mcp-tool

    {
      "type": "object",
      "required": [
        "record"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "maxLength": 300,
          "minLength": 1,
          "description": "Optional: the domain the record is for, so SPF a and mx terms can be checked."
        },
        "record": {
          "type": "string",
          "maxLength": 4000,
          "minLength": 1,
          "description": "The TXT record value, e.g. \"v=spf1 include:_spf.google.com ~all\" or \"v=DMARC1; p=none; rua=mailto:[email protected]\". Quoted chunks (\"...\" \"...\") are joined."
        }
      }
    }
    arguments 20 lines
  • deadbolt_check_supabase_access unknown 33h ago

    Use when you write, review or are about to apply Supabase / PostgreSQL migration SQL (CREATE TABLE, RLS, CREATE POLICY, GRANT, views, SECURITY DEFINER functions, storage buckets), or when a user asks whether their Supabase data is exposed, whether RLS is set up right, or why a query returns 42501 permission denied or no rows. Replays the SQL with real Postgres rules and returns, per table, what signed-out (anon) and signed-in (authenticated) users can SELECT/INSERT/UPDATE/DELETE (all rows, own rows, some rows, none, or denied for a missing grant), plus findings with severity and ready-to-run fix SQL: RLS off, policies written but RLS never enabled, using(true) writes, personal columns readable by anyone, views that bypass RLS, SECURITY DEFINER functions anyone can call, user_metadata in policies, public bucket listing, grants missing after the Oct 30 2026 default change. Also accepts the JSON produced by deadbolt_catalog_query for the live database. Deterministic; never connects to any database. Up to 200,000 characters.

    mcp-tool

    {
      "type": "object",
      "required": [
        "sql"
      ],
      "properties": {
        "sql": {
          "type": "string",
          "maxLength": 200000,
          "minLength": 1,
          "description": "Migration SQL (one or many files concatenated, in order), or the single JSON value returned by the catalog query."
        },
        "project_created_before_2026_10_30": {
          "type": "boolean",
          "description": "Only for SQL input. true (default): the project grants new public tables to anon and authenticated automatically (projects created before Oct 30, 2026). false: new tables get no grants unless the SQL grants them (projects created on or after Oct 30, 2026)."
        }
      }
    }
    arguments 18 lines
  • tick_next_runs unknown never probed

    Use when you or the user just wrote a cron expression (GitHub Actions, Vercel cron, Cloudflare Cron Triggers, systemd, an agent schedule) and need its next fire times. Pass the expression and an IANA timezone (default UTC). Returns the next N runs as local wall times and UTC ISO, a plain-English field breakdown, and DST gap/fold warnings (spring-forward skips, fall-back double fires). Example: {"expression":"0 9 * * 1-5","timezone":"America/New_York","count":5}. Uses the tz database, so DST rules match the region and year. Not for converting a meeting time across cities (use Meridian) or for email DNS (use Stamp).

    mcp-tool

    {
      "type": "object",
      "required": [
        "expression"
      ],
      "properties": {
        "from": {
          "type": "string",
          "maxLength": 40,
          "description": "Optional ISO datetime to start from (default now), e.g. 2026-03-07T12:00:00Z."
        },
        "count": {
          "type": "integer",
          "maximum": 20,
          "minimum": 1,
          "description": "How many next runs to return (1–20). Default 5."
        },
        "timezone": {
          "type": "string",
          "maxLength": 80,
          "description": "IANA timezone for local wall times, e.g. America/New_York. Default UTC."
        },
        "expression": {
          "type": "string",
          "maxLength": 120,
          "minLength": 1,
          "description": "Cron expression: 5 fields (minute hour day-of-month month day-of-week) or 6 with seconds first. Also accepts @hourly, @daily, @weekly, @monthly, @yearly."
        }
      }
    }
    arguments 30 lines
  • tick_matches unknown never probed

    Use when you need a yes/no on whether a cron expression would fire at a specific instant in a timezone — for example before shipping a schedule that crosses a DST transition, or to verify a single expected fire. Example: {"expression":"0 9 * * 1-5","timezone":"America/New_York","at":"2026-11-06T14:00:00Z"}. Returns fires true/false, the local wall time of that instant, and DST notes if the local time is in a gap or fold.

    mcp-tool

    {
      "type": "object",
      "required": [
        "expression",
        "at"
      ],
      "properties": {
        "at": {
          "type": "string",
          "maxLength": 40,
          "minLength": 1,
          "description": "ISO datetime to test, e.g. 2026-11-06T14:00:00Z."
        },
        "timezone": {
          "type": "string",
          "maxLength": 80,
          "description": "IANA timezone. Default UTC."
        },
        "expression": {
          "type": "string",
          "maxLength": 120,
          "minLength": 1,
          "description": "Cron expression (5 or 6 fields, or a nickname like @hourly)."
        }
      }
    }
    arguments 26 lines
  • mend_repair_json unknown never probed

    Use when JSON from an LLM, API, log, config or copy-paste fails to parse (JSON.parse error, "Unexpected token", "Expecting property name"), or the user pastes JSON with trailing commas, single quotes, unquoted keys, comments, Python True/False/None, NaN, missing commas or brackets, a ```json fence, text around it, or output that was cut off. Deterministic repair: returns valid, formatted JSON plus a list of every fix with line and column. Values are never rewritten, so big numbers, number formatting and key order stay exactly as written. If the text is already valid it says so. Up to 100,000 characters.

    mcp-tool

    {
      "type": "object",
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 1,
          "description": "The broken JSON, or any text that contains JSON (a chat reply, a log line, a code block)."
        },
        "indent": {
          "type": "integer",
          "maximum": 8,
          "minimum": 0,
          "description": "Spaces per indent level in the output. Default 2. Use 0 for one minified line."
        },
        "sort_keys": {
          "type": "boolean",
          "description": "Sort object keys alphabetically. Default false (keep the original order)."
        }
      }
    }
    arguments 24 lines
  • swatch_fix_contrast unknown never probed

    Use when a color pair fails contrast and the user wants the smallest change that makes it pass, such as "make this gray text accessible without changing the look". Returns the closest text color on that background that reaches the target (AA, AAA, AA-large or ui), and separately the closest background, keeping the hue. Example: {"foreground": "#777777", "background": "#ffffff", "target": "AA"}. Returns already_passes if nothing needs to change.

    mcp-tool

    {
      "type": "object",
      "required": [
        "foreground",
        "background"
      ],
      "properties": {
        "target": {
          "enum": [
            "AA",
            "AAA",
            "AA-large",
            "ui"
          ],
          "type": "string",
          "description": "Contrast target. Default AA."
        },
        "background": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Current background color."
        },
        "foreground": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Current text color."
        }
      }
    }
    arguments 31 lines
  • swatch_check_pairs unknown never probed

    Use when the user has a whole design system, theme or stylesheet and wants every text and background pair checked for accessibility in one go. Takes up to 50 pairs and returns the ratio and AA and AAA results for each, with a count of failures. Example: {"pairs": [{"foreground": "#777", "background": "#fff", "label": "muted text"}, {"foreground": "#fff", "background": "#ff5a1f", "label": "button"}]}.

    mcp-tool

    {
      "type": "object",
      "required": [
        "pairs"
      ],
      "properties": {
        "pairs": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "foreground",
              "background"
            ],
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 60,
                "description": "Optional name, like \"muted text on card\"."
              },
              "background": {
                "type": "string",
                "maxLength": 80,
                "minLength": 1
              },
              "foreground": {
                "type": "string",
                "maxLength": 80,
                "minLength": 1
              }
            }
          },
          "maxItems": 50,
          "minItems": 1,
          "description": "Pairs to check."
        }
      }
    }
    arguments 38 lines
  • meridian_now unknown never probed

    Use when the user asks what time or date it is right now somewhere. Reads the server clock and returns the current time, date, UTC offset, abbreviation and daylight saving status for each place. Places can be cities ("Tokyo"), IANA zones ("Europe/Paris"), abbreviations ("PST") or "UTC+5:30".

    mcp-tool

    {
      "type": "object",
      "required": [
        "places"
      ],
      "properties": {
        "places": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1
          },
          "maxItems": 12,
          "minItems": 1,
          "description": "Cities, IANA zones or abbreviations, e.g. [\"London\",\"Asia/Tokyo\"]."
        }
      }
    }
    arguments 19 lines
  • meridian_convert_time unknown never probed

    Use when you need to convert a specific wall-clock time from one place to others, for any date. It uses the real tz database, so daylight saving is right for that exact date (the US and Europe switch on different weeks), and it warns when the time does not exist (spring forward) or happens twice (fall back). Time accepts "15:00", "3:30pm", "noon", "now" or an ISO local time like 2026-11-05T15:00 (no Z). Date defaults to today in the source zone. Returns {input, utc, source:{...}, converted:[{place, zone, local, time_12h, date, utc_offset, abbreviation, day_note, hours_ahead_of_source}], warning?, summary, open_url}.

    mcp-tool

    {
      "type": "object",
      "required": [
        "time",
        "from",
        "to"
      ],
      "properties": {
        "to": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1
          },
          "maxItems": 12,
          "minItems": 1,
          "description": "Destination places, e.g. [\"London\",\"Tokyo\"]."
        },
        "date": {
          "type": "string",
          "maxLength": 10,
          "description": "Optional date YYYY-MM-DD in the source zone. Default today."
        },
        "from": {
          "type": "string",
          "maxLength": 60,
          "minLength": 1,
          "description": "Source place or zone, e.g. \"New York\" or \"America/New_York\"."
        },
        "time": {
          "type": "string",
          "maxLength": 40,
          "minLength": 1,
          "description": "Local time in the source place, e.g. \"15:00\", \"3:30pm\", \"noon\", \"now\", \"2026-11-05T15:00\"."
        }
      }
    }
    arguments 38 lines
  • meridian_zone_info unknown never probed

    Use when you need to answer "what is the UTC offset of X", "does X observe daylight saving" and "when do the clocks change". Returns the current offset and abbreviation, whether the place observes DST, every clock change in the year with exact local before and after times, and the next change. Abbreviations like IST or CST are ambiguous, so the answer says which zone was used.

    mcp-tool

    {
      "type": "object",
      "required": [
        "place"
      ],
      "properties": {
        "year": {
          "type": "integer",
          "maximum": 2100,
          "minimum": 1970,
          "description": "Year to list clock changes for. Default this year."
        },
        "place": {
          "type": "string",
          "maxLength": 60,
          "minLength": 1,
          "description": "City, IANA zone or abbreviation, e.g. \"London\" or \"America/Phoenix\"."
        }
      }
    }
    arguments 20 lines
  • notary_check_packages unknown never probed

    Use when the user or an agent is about to install or import npm or PyPI packages: before npm install or pip install, when adding lines to package.json or requirements.txt, or when a package name came from an AI answer, a tutorial or memory and may be invented. Looks each name up in the live registry and returns whether it exists, the latest version, whether a pinned version exists, weekly downloads, first and last publish dates, deprecation or yanked status, install-time scripts, whether the name is one or two typed characters from a well-known package, and real similar packages when the name does not exist. Example: {"packages":[{"ecosystem":"npm","name":"@anthropic/mcp-client"},{"ecosystem":"pypi","name":"requests","version":"2.32.3"}]}. Up to 10 packages per call; versions must be exact, not ranges. Not a malware or vulnerability scan: "ok" means it exists and nothing looked wrong.

    mcp-tool

    {
      "type": "object",
      "required": [
        "packages"
      ],
      "properties": {
        "packages": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "ecosystem",
              "name"
            ],
            "properties": {
              "name": {
                "type": "string",
                "maxLength": 214,
                "minLength": 1,
                "description": "The package name only, e.g. left-pad, @types/node or requests. No version, extras (requests[security]), URL or path."
              },
              "version": {
                "type": "string",
                "maxLength": 64,
                "description": "Optional: one exact version to verify, e.g. 4.17.21 (npm also accepts a dist-tag like latest). Not a range such as ^4.17.0."
              },
              "ecosystem": {
                "enum": [
                  "npm",
                  "pypi"
                ],
                "type": "string",
                "description": "Which registry: npm (JavaScript, TypeScript, Node) or pypi (Python)."
              }
            }
          },
          "maxItems": 10,
          "minItems": 1,
          "description": "1 to 10 packages to look up."
        }
      }
    }
    arguments 42 lines
  • mend_query_json unknown never probed

    Use when you need specific fields from a JSON document without reading all of it: $.users[0].name, $.items[*].id, $.a.b[-1], $.list[1:3], $..email (recursive). Returns each match with its exact path, type and value. Repairs the JSON first if needed, so broken input still works. Up to 100,000 characters.

    mcp-tool

    {
      "type": "object",
      "required": [
        "text",
        "path"
      ],
      "properties": {
        "max": {
          "type": "integer",
          "maximum": 200,
          "minimum": 1,
          "description": "Maximum matches to return. Default 50."
        },
        "path": {
          "type": "string",
          "maxLength": 300,
          "minLength": 1,
          "description": "Path such as $.users[*].email, data.items[0], $..id, $.list[-1], $.list[1:3]."
        },
        "text": {
          "type": "string",
          "maxLength": 100000,
          "minLength": 1,
          "description": "The JSON (or JSON-ish text)."
        }
      }
    }
    arguments 27 lines
  • swatch_check_contrast unknown never probed

    Use when the user asks whether a color combination is readable or accessible, passes WCAG AA or AAA, or has enough contrast (text on a background, button, badge, link color), or what a color is in another format. Returns the exact contrast ratio, pass or fail for normal text, large text and UI components at AA and AAA, the APCA lightness contrast and a plain note. Colors can be hex, rgb(), hsl() or CSS names. Example: {"foreground": "#777777", "background": "#ffffff"}. Also returns each color in hex, rgb, hsl and oklch with its nearest CSS name.

    mcp-tool

    {
      "type": "object",
      "required": [
        "foreground",
        "background"
      ],
      "properties": {
        "background": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Background color, e.g. \"#ffffff\"."
        },
        "foreground": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Text (or icon) color, e.g. \"#767676\" or \"rgb(20 20 20)\" or \"tomato\"."
        }
      }
    }
    arguments 21 lines
  • swatch_make_scale unknown never probed

    Use when the user asks for a palette, shades, tints, a design-token scale or a Tailwind-style 50 to 950 ramp from a brand color. Returns 11 steps that keep the hue, with the hex, contrast on white and on black, and the best text color for each step. Example: {"color": "#ff5a1f", "name": "brand"}.

    mcp-tool

    {
      "type": "object",
      "required": [
        "color"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 24,
          "description": "Token name used in the CSS and Tailwind output. Default \"brand\"."
        },
        "color": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "Base color, e.g. \"#ff5a1f\"."
        }
      }
    }
    arguments 19 lines
  • meridian_meeting_slots unknown never probed

    Use when you need to schedule a call across several places. Scans the day in 15-minute steps and ranks start times so the most people are inside working hours and nobody is at night, using each place's real offset and DST for that date. Returns up to 5 slots with each person's local start and end, and says plainly when no time works for everyone. Defaults: working hours 9 to 17, 60 minutes, date today in the first place.

    mcp-tool

    {
      "type": "object",
      "required": [
        "places"
      ],
      "properties": {
        "date": {
          "type": "string",
          "maxLength": 10,
          "description": "Date YYYY-MM-DD, local to the first place. Default today."
        },
        "count": {
          "type": "integer",
          "maximum": 8,
          "minimum": 1,
          "description": "How many slots to return, default 5."
        },
        "places": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 60,
            "minLength": 1
          },
          "maxItems": 8,
          "minItems": 2,
          "description": "Where each attendee is, e.g. [\"San Francisco\",\"London\",\"Tokyo\"]."
        },
        "end_hour": {
          "type": "integer",
          "maximum": 24,
          "minimum": 1,
          "description": "Working day end hour, default 17."
        },
        "start_hour": {
          "type": "integer",
          "maximum": 23,
          "minimum": 0,
          "description": "Working day start hour, default 9."
        },
        "duration_minutes": {
          "type": "integer",
          "maximum": 480,
          "minimum": 15,
          "description": "Meeting length in minutes, multiple of 15. Default 60."
        }
      }
    }
    arguments 48 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 0fb780a79d1fd509.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/0fb780a79d1fd509/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/0fb780a79d1fd509/badge.svg)](https://brick.blue/agent/0fb780a79d1fd509?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.

_ also on clawhard.com 20 entries

Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.

12 more sit on this domain. All of them.