Skip to content
Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
64
A2A live JSON-RPC A2A 1.0 v1.9.0

Clawhard Studio

clawhard.com · Clawhard Studio

Clawhard Studio makes small web tools that AI assistants can call: trim text, check writing and websites for AI habits, total AI subscriptions, split costs, build event schedules, write design briefs. No account or key.

Sign in to save Compare Sign in to watch Own this agent? Verify ownership →
Trust score
64/100
grade C · 9 criteria
Uptime
accumulating
1/5 direct probes · 30d
~90 ms response
Observed inflow · 30d
—
no payment wallet declared
Invocations · 7d
0
no calls observed
Card drift · 7d
stable
1 snapshot tracked
Owner
unverified
claim this listing →

Dispute or improve this rating

C
Conformance score: 64/100
C-grade: usable but has clear conformance issues, review the breakdown below.
Show breakdown Hide breakdown
pass Valid AgentCard 10/10
Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification).
pass Live JSON-RPC 25/25
Endpoint responds to a negotiated A2A SendMessage probe (answers in ~90 ms).
pass Protocol version 10/10
Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape).
info JWS signature 0/10
Card is unsigned (most published agents are).
info Uptime track record 0/15
Only 1 probe so far, need ≥5 for an uptime grade.
pass Skill declaration 10/10
Declares 28 skills with structured metadata.
partial Verified Identity 5/10
Provider declared: Clawhard Studio (https://clawhard.com). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs
pass Freshness + modern flags 4/5
seen in upstream source within 0d
info Security declaration 0/5
Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated.

Activity

last 24h · 0 invocations No personal data recorded

No activity in the last 7 days.

Card history

1 snapshot
Snapshots
Agent card snapshots
Captured Hash Snapshot
2026-11-05 05:52:00 current b6f76c8ed950… view →
Uptime
accumulating
1 direct probes · 30d
Response
61ms
last direct probe
Skills
28
declared
Streaming
—
SSE-capable

Try it

Sent live, through Agenstry.

calling agent… ⌘/Ctrl + Enter

Skills · 28 declared

Count the exact tokens in a text

Counts the exact number of tokens in a text with the o200k tokenizer (GPT-4o family and later), plus words and characters (Unicode code points, so an emoji is 1…

No taxonomy category yet
tokendietDeveloperApplicationread-only
Score a website for AI-made design habits

Fetches a public web page and its main stylesheets and scripts once, then scores it from 0 (hand-made feel) to 100 (certified slop) against 19 design and copy h…

No taxonomy category yet
slopscoreDesignApplicationread-only
List AI subscription plans and list prices

Lists the AI subscription plans AI Tab knows (chat assistants, coding tools, image and video, voice and music, work) with their USD list prices and the plan key…

No taxonomy category yet
aitabFinanceApplicationread-only
Total what you pay for AI subscriptions

Adds up a list of AI subscriptions and returns the monthly, yearly and daily total, where the user is paying twice for the same thing (overlaps), what could be …

No taxonomy category yet
aitabFinanceApplicationread-only
Score writing for AI-sounding habits

Checks a piece of writing for the habits that make people think a chatbot wrote it (em dashes, words like "delve", assistant filler like "I hope this helps", "i…

No taxonomy category yet
tellsUtilitiesApplicationread-only
Create a live day-of schedule (run of show)

Creates a Runsheet: a live, shareable schedule for an event day (wedding, shoot, conference, any timed run of show). Start from a template or send your own item…

No taxonomy category yet
runsheetBusinessApplicationcreates-link
Work out who owes whom, in the fewest payments

Given a group of people and the expenses (who paid, how much, who shared it), returns each person's net balance and the smallest set of payments that squares ev…

No taxonomy category yet
halvesFinanceApplicationread-only
Create a shared expense group link

Creates a Halves group and returns a link anyone can open (no sign-up) to add and fix expenses and see who owes whom. Optionally pre-loads expenses. Anyone who …

No taxonomy category yet
halvesFinanceApplicationcreates-link
See which AI bots a website lets in

Reads the public robots.txt of a website and reports which AI bots it lets in, by purpose: AI training (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, M…

doormanDeveloperApplicationread-only
Check a robots.txt file for AI bot access

Same report as the check tool, for robots.txt text you already have (a draft, or a file from a site the checker cannot reach). Parses it the way crawlers do (RF…

doormanDeveloperApplicationread-only
Write a robots.txt that lets in only the AI bots you want

Builds a robots.txt from a simple choice: AI training in or out, AI search in or out, assistants in or out. Keeps every rule in the existing file (pass it as ro…

doormanDeveloperApplicationread-only
Check text and background color contrast (WCAG and APCA)

Use when you pick, review or generate UI colors and need an exact accessibility answer. Computes the WCAG 2.x contrast ratio of a text color on a background (ne…

No taxonomy category yet
swatchDesignApplicationread-only
Find the closest colors that pass a contrast target

Use when a color pair fails contrast and you need a replacement that still looks like the original. Returns the nearest passing text color (background fixed) an…

No taxonomy category yet
swatchDesignApplicationread-only
Pick black or white text for a background color

Use when you place text or an icon on a colored surface (button, badge, chip, tag, hero) and need the readable text color. Returns whichever of black or white h…

No taxonomy category yet
swatchDesignApplicationread-only
Build a 50 to 950 color scale from one color

Use when you need a design-token palette from a brand color. Generates an 11-step scale (50, 100 ... 950) in OKLCH so steps look evenly spaced, with your exact …

No taxonomy category yet
swatchDesignApplicationread-only
Convert a color between hex, rgb, hsl and oklch

Use when you need the same color in another CSS format, or a color name turned into a value. Returns hex, rgb(), hsl(), oklch(), relative luminance and the near…

No taxonomy category yet
swatchDesignApplicationread-only
Check many foreground and background pairs at once

Use when you need to audit a whole UI or design-token set in one call. Takes up to 50 pairs and returns each pair's ratio, grade and AA/AAA results, plus how ma…

No taxonomy category yet
swatchDesignApplicationread-only
Current time in any places or time zones

Use when you need to know what time or date it is right now somewhere. You have no clock of your own, so never guess the current time. Returns the real current …

meridianUtilitiesApplicationread-only
Convert a time between time zones, DST-correct

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 th…

meridianUtilitiesApplicationread-only
Find meeting times that work across time zones

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 a…

meridianUtilitiesApplicationread-only
Offset, abbreviation and daylight saving changes for a zone

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 abbr…

meridianUtilitiesApplicationread-only
Repair broken or LLM-generated JSON

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 J…

JSON Repair match 91%
mendDeveloperApplicationread-only
Validate JSON and locate the exact error

Use when you need to know whether text is strictly valid JSON, and if not, exactly where it breaks. Strict RFC 8259 check (the same accept/reject as JSON.parse)…

JSON Repair match 89%
mendDeveloperApplicationread-only
Outline the structure of a large JSON payload

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, arra…

No taxonomy category yet
mendDeveloperApplicationread-only
Extract values from JSON by path

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). …

mendDeveloperApplicationread-only
Check who can read and write Supabase tables (RLS, policies, grants)

Use when you write, review or are about to apply Supabase / PostgreSQL migration SQL (CREATE TABLE, RLS, CREATE POLICY, GRANT, views, SECURITY DEFINER functions…

No taxonomy category yet
deadboltDeveloperApplicationread-only
Get the read-only SQL that snapshots a live Supabase database for Deadbolt

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…

No taxonomy category yet
deadboltDeveloperApplicationread-only
Find and redact API keys, tokens, private keys and passwords in text

Use when the user asks whether some text contains secrets, or before you paste, commit, share, log or send code, a .env file, a diff, config, logs, a stack trac…

spillSecurityApplicationread-only

Health · last 1 probes

Probe log
When HTTP Live JSON-RPC Latency
2026-11-05 05:52:00 200 ✓ 61ms

Similar agents

AI Tab live
AI Tab adds up the AI subscriptions you pay for, shows your monthly and yearly total, flags where you pay twice for the same thing, and make
Clawhard Studio · q 100%
CompetLab
Competitive intelligence for B2B SaaS. CompetLab tracks how AI assistants name and recommend a brand against its competitors across ChatGPT,
CompetLab · q 90%
api.tokenplans.dev
Full JSON catalog of verified AI coding-subscription plans across 31 providers (Claude, OpenAI, Cursor, Gemini, and more). Each record: mont
api.tokenplans.dev · q 65%
Blockquote
Blockquote scores a public URL 0-100 for how likely ChatGPT, Perplexity and Google AI Overviews are to cite it, and returns the fixes. The s
Arne Kellmann · q 90%
Agent Data Tools
569 pay-per-call tools for AI agents over HTTP or MCP, from $0.002 a call, most at $0.01. Every caller gets 25 free calls; then pay per call
SpellzCode · q 76%
INITE live
INITE over A2A and MCP. Over A2A: the AI visibility audit - how ChatGPT, Claude, Gemini and Perplexity read a website, a score out of 100 an
inite LLC · q 100%
Embed a badge

Updates itself and links back here.

Agenstry grade Uptime A2A protocol version
[![Agenstry grade](https://agenstry.com/badge/clawhard.com.svg)](https://agenstry.com/agents/clawhard.com)
[![Verified Business](https://agenstry.com/badge/clawhard.com/identity.svg)](https://agenstry.com/agents/clawhard.com)
[![Uptime](https://agenstry.com/badge/clawhard.com/uptime.svg)](https://agenstry.com/agents/clawhard.com)
[![A2A version](https://agenstry.com/badge/clawhard.com/protocol.svg)](https://agenstry.com/agents/clawhard.com)

Audit evidence

JSON for vendor reviews. Signed copy verifies against our JWKS.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "name": "Clawhard Studio",
  "description": "Clawhard Studio makes small web tools that AI assistants can call: trim text, check writing and websites for AI habits, total AI subscriptions, split costs, build event schedules, write design briefs. No account or key.",
  "version": "1.9.0",
  "url": "https://mcp.clawhard.com/a2a",
  "preferredTransport": "JSONRPC",
  "protocolVersion": "1.0",
  "supportedInterfaces": [
    {
      "url": "https://mcp.clawhard.com/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    },
    {
      "url": "https://mcp.clawhard.com/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "0.3"
    }
  ],
  "provider": {
    "organization": "Clawhard Studio",
    "url": "https://clawhard.com"
  },
  "iconUrl": "https://clawhard.com/icon-512.png",
  "documentationUrl": "https://clawhard.com/llms.txt",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/plain"
  ],
  "skills": [
    {
      "id": "tokendiet_count_tokens",
      "name": "Count the exact tokens in a text",
      "description": "Counts the exact number of tokens in a text with the o200k tokenizer (GPT-4o family and later), plus words and characters (Unicode code points, so an emoji is 1 character), and whether it fits in 128K, 200K and 1M token context windows. Language models cannot count their own tokens reliably.",
      "tags": [
        "tokendiet",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "How many tokens is this prompt?",
        "Will this log fit in a 128K context window?",
        "Count the tokens in this document"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "slopscore_check_website",
      "name": "Score a website for AI-made design habits",
      "description": "Fetches a public web page and its main stylesheets and scripts once, then scores it from 0 (hand-made feel) to 100 (certified slop) against 19 design and copy habits that make a site look AI-made (purple gradients, gradient headlines, glow blobs, glassmorphism, default fonts, untouched component kits, icon card grids, buzzwords, template headlines, vague social proof, placeholder testimonials,\u2026",
      "tags": [
        "slopscore",
        "DesignApplication",
        "read-only"
      ],
      "examples": [
        "Does my website look AI-generated?",
        "Score https://example.com for AI design habits",
        "What makes this landing page look like AI slop?"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "aitab_list_ai_plans",
      "name": "List AI subscription plans and list prices",
      "description": "Lists the AI subscription plans AI Tab knows (chat assistants, coding tools, image and video, voice and music, work) with their USD list prices and the plan keys to pass to the total tool.",
      "tags": [
        "aitab",
        "FinanceApplication",
        "read-only"
      ],
      "examples": [
        "How much do I spend on AI subscriptions per month?",
        "Do ChatGPT Plus, Claude Pro and Cursor Pro overlap?",
        "Total my AI plans for a year"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "aitab_total_ai_subscriptions",
      "name": "Total what you pay for AI subscriptions",
      "description": "Adds up a list of AI subscriptions and returns the monthly, yearly and daily total, where the user is paying twice for the same thing (overlaps), what could be cut and how much that saves, plus a link that opens the shareable receipt. Use plan keys from the plans tool, for example chatgpt.plus, claude.pro, cursor.pro. Append \":y\" to a key for yearly billing.",
      "tags": [
        "aitab",
        "FinanceApplication",
        "read-only"
      ],
      "examples": [
        "How much do I spend on AI subscriptions per month?",
        "Do ChatGPT Plus, Claude Pro and Cursor Pro overlap?",
        "Total my AI plans for a year"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "tells_check_writing",
      "name": "Score writing for AI-sounding habits",
      "description": "Checks a piece of writing for the habits that make people think a chatbot wrote it (em dashes, words like \"delve\", assistant filler like \"I hope this helps\", \"it's not X, it's Y\", fake suspense, stiff transitions, markdown leftovers, emoji bullets, rule of three, same-length sentences). Returns a 0-100 bot-o-meter score, a verdict and the tells found. Style habits only.",
      "tags": [
        "tells",
        "UtilitiesApplication",
        "read-only"
      ],
      "examples": [
        "Does this draft sound like AI wrote it?",
        "Which phrases in this paragraph sound like a chatbot?",
        "Score my cover letter for AI tells"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "runsheet_create_schedule",
      "name": "Create a live day-of schedule (run of show)",
      "description": "Creates a Runsheet: a live, shareable schedule for an event day (wedding, shoot, conference, any timed run of show). Start from a template or send your own items. Returns a view-only link for guests and vendors and a private edit link for the planner. Keep the edit link secret: anyone with it can change the schedule.",
      "tags": [
        "runsheet",
        "BusinessApplication",
        "creates-link"
      ],
      "examples": [
        "Build a run of show for a wedding day",
        "Make a shareable schedule for a photo shoot",
        "Create a day-of timeline for a conference"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "halves_settle_up",
      "name": "Work out who owes whom, in the fewest payments",
      "description": "Given a group of people and the expenses (who paid, how much, who shared it), returns each person's net balance and the smallest set of payments that squares everyone up. Splits equally by default, or by exact amounts. Stateless: nothing is saved. Use create_group instead to make a shared link people can keep adding to.",
      "tags": [
        "halves",
        "FinanceApplication",
        "read-only"
      ],
      "examples": [
        "Split our trip costs so we make the fewest payments",
        "Who owes whom if Sam paid 120, Ana 60 and Lee 0?",
        "Create a shared group to track dinner expenses"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "halves_create_group_link",
      "name": "Create a shared expense group link",
      "description": "Creates a Halves group and returns a link anyone can open (no sign-up) to add and fix expenses and see who owes whom. Optionally pre-loads expenses. Anyone who has the link can edit the group, so share it only with the people in it. Groups are kept for about 400 days after the last change.",
      "tags": [
        "halves",
        "FinanceApplication",
        "creates-link"
      ],
      "examples": [
        "Split our trip costs so we make the fewest payments",
        "Who owes whom if Sam paid 120, Ana 60 and Lee 0?",
        "Create a shared group to track dinner expenses"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "doorman_check_ai_bot_access",
      "name": "See which AI bots a website lets in",
      "description": "Reads the public robots.txt of a website and reports which AI bots it lets in, by purpose: AI training (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, Meta-ExternalAgent, CCBot, Bytespider, Amazonbot and more), AI search and answers (OAI-SearchBot, Claude-SearchBot, PerplexityBot, DuckAssistBot), assistants opening pages for a person (ChatGPT-User, Claude-User, Perplexity-User,\u2026",
      "tags": [
        "doorman",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "Which AI bots does my site allow?",
        "Write a robots.txt that allows AI search but blocks training",
        "Check this robots.txt for AI crawler rules"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "doorman_check_robots_txt",
      "name": "Check a robots.txt file for AI bot access",
      "description": "Same report as the check tool, for robots.txt text you already have (a draft, or a file from a site the checker cannot reach). Parses it the way crawlers do (RFC 9309 groups, longest-match Allow/Disallow, * and $ wildcards) and reports which AI training bots, AI search bots, assistants and search engines it lets in, plus the shared __usage_ai-training preference.",
      "tags": [
        "doorman",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "Which AI bots does my site allow?",
        "Write a robots.txt that allows AI search but blocks training",
        "Check this robots.txt for AI crawler rules"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "doorman_write_robots_txt",
      "name": "Write a robots.txt that lets in only the AI bots you want",
      "description": "Builds a robots.txt from a simple choice: AI training in or out, AI search in or out, assistants in or out. Keeps every rule in the existing file (pass it as robots_txt), removes old lines for the AI bots it manages, and adds one clearly labelled block, including the shared User-agent: __usage_ai-training preference. Never touches Googlebot, Bingbot or Applebot, so normal search is unaffected.",
      "tags": [
        "doorman",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "Which AI bots does my site allow?",
        "Write a robots.txt that allows AI search but blocks training",
        "Check this robots.txt for AI crawler rules"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "swatch_check_contrast",
      "name": "Check text and background color contrast (WCAG and APCA)",
      "description": "Use when you pick, review or generate UI colors and need an exact accessibility answer. Computes the WCAG 2.x contrast ratio of a text color on a background (never guess ratios, LLMs get them wrong) and returns pass or fail for AA and AAA at normal and large text, the 3:1 UI-component rule, and the APCA Lc score.",
      "tags": [
        "swatch",
        "DesignApplication",
        "read-only"
      ],
      "examples": [
        "Does #777 on white pass WCAG AA?",
        "Make this gray text accessible without changing the look",
        "Build a 50 to 950 palette from #ff5a1f and check the contrast"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "swatch_fix_contrast",
      "name": "Find the closest colors that pass a contrast target",
      "description": "Use when a color pair fails contrast and you need a replacement that still looks like the original. Returns the nearest passing text color (background fixed) and the nearest passing background (text fixed), keeping hue and changing only lightness, with the new exact ratios. Targets: AA (4.5:1 normal text, default), AAA (7:1), AA-large (3:1 large text), ui (3:1 icons and borders).",
      "tags": [
        "swatch",
        "DesignApplication",
        "read-only"
      ],
      "examples": [
        "Does #777 on white pass WCAG AA?",
        "Make this gray text accessible without changing the look",
        "Build a 50 to 950 palette from #ff5a1f and check the contrast"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "swatch_pick_text_color",
      "name": "Pick black or white text for a background color",
      "description": "Use when you place text or an icon on a colored surface (button, badge, chip, tag, hero) and need the readable text color. Returns whichever of black or white has the higher contrast ratio, both ratios, the grade, and a softer near-black or near-white option that still passes AA.",
      "tags": [
        "swatch",
        "DesignApplication",
        "read-only"
      ],
      "examples": [
        "Does #777 on white pass WCAG AA?",
        "Make this gray text accessible without changing the look",
        "Build a 50 to 950 palette from #ff5a1f and check the contrast"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "swatch_make_scale",
      "name": "Build a 50 to 950 color scale from one color",
      "description": "Use when you need a design-token palette from a brand color. Generates an 11-step scale (50, 100 ... 950) in OKLCH so steps look evenly spaced, with your exact color kept as the closest step. Returns each step's hex, contrast on white and black, the best text color on it, and ready-to-paste CSS variables, a Tailwind colors block and JSON.",
      "tags": [
        "swatch",
        "DesignApplication",
        "read-only"
      ],
      "examples": [
        "Does #777 on white pass WCAG AA?",
        "Make this gray text accessible without changing the look",
        "Build a 50 to 950 palette from #ff5a1f and check the contrast"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "swatch_convert_color",
      "name": "Convert a color between hex, rgb, hsl and oklch",
      "description": "Use when you need the same color in another CSS format, or a color name turned into a value. Returns hex, rgb(), hsl(), oklch(), relative luminance and the nearest CSS color name. Accepts hex, rgb(), hsl(), hwb(), oklch() and CSS names.",
      "tags": [
        "swatch",
        "DesignApplication",
        "read-only"
      ],
      "examples": [
        "Does #777 on white pass WCAG AA?",
        "Make this gray text accessible without changing the look",
        "Build a 50 to 950 palette from #ff5a1f and check the contrast"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "swatch_check_pairs",
      "name": "Check many foreground and background pairs at once",
      "description": "Use when you need to audit a whole UI or design-token set in one call. Takes up to 50 pairs and returns each pair's ratio, grade and AA/AAA results, plus how many fail AA for normal text. Ideal after you generate a theme or dark mode and want every text-on-surface pair verified.",
      "tags": [
        "swatch",
        "DesignApplication",
        "read-only"
      ],
      "examples": [
        "Does #777 on white pass WCAG AA?",
        "Make this gray text accessible without changing the look",
        "Build a 50 to 950 palette from #ff5a1f and check the contrast"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "meridian_now",
      "name": "Current time in any places or time zones",
      "description": "Use when you need to know what time or date it is right now somewhere. You have no clock of your own, so never guess the current time. Returns the real 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\".",
      "tags": [
        "meridian",
        "UtilitiesApplication",
        "read-only"
      ],
      "examples": [
        "What time is it in Tokyo right now?",
        "Convert 3pm New York on Nov 5 to London and Sydney",
        "Find a 30 minute call time for San Francisco, London and Berlin"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "meridian_convert_time",
      "name": "Convert a time between time zones, DST-correct",
      "description": "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).",
      "tags": [
        "meridian",
        "UtilitiesApplication",
        "read-only"
      ],
      "examples": [
        "What time is it in Tokyo right now?",
        "Convert 3pm New York on Nov 5 to London and Sydney",
        "Find a 30 minute call time for San Francisco, London and Berlin"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "meridian_meeting_slots",
      "name": "Find meeting times that work across time zones",
      "description": "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.",
      "tags": [
        "meridian",
        "UtilitiesApplication",
        "read-only"
      ],
      "examples": [
        "What time is it in Tokyo right now?",
        "Convert 3pm New York on Nov 5 to London and Sydney",
        "Find a 30 minute call time for San Francisco, London and Berlin"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "meridian_zone_info",
      "name": "Offset, abbreviation and daylight saving changes for a zone",
      "description": "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.",
      "tags": [
        "meridian",
        "UtilitiesApplication",
        "read-only"
      ],
      "examples": [
        "What time is it in Tokyo right now?",
        "Convert 3pm New York on Nov 5 to London and Sydney",
        "Find a 30 minute call time for San Francisco, London and Berlin"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "mend_repair_json",
      "name": "Repair broken or LLM-generated JSON",
      "description": "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.",
      "tags": [
        "mend",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "Fix this JSON, it has a trailing comma and single quotes",
        "Why does this JSON fail to parse?",
        "Pull every email out of this JSON blob"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "mend_check_json",
      "name": "Validate JSON and locate the exact error",
      "description": "Use when you need to know whether text is strictly valid JSON, and if not, exactly where it breaks. Strict RFC 8259 check (the same accept/reject as JSON.parse). Returns line, column, the offending line with a caret and whether Mend can repair it. Use mend_repair_json to fix it. Up to 100,000 characters.",
      "tags": [
        "mend",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "Fix this JSON, it has a trailing comma and single quotes",
        "Why does this JSON fail to parse?",
        "Pull every email out of this JSON blob"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "mend_outline_json",
      "name": "Outline the structure of a large JSON payload",
      "description": "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.",
      "tags": [
        "mend",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "Fix this JSON, it has a trailing comma and single quotes",
        "Why does this JSON fail to parse?",
        "Pull every email out of this JSON blob"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "mend_query_json",
      "name": "Extract values from JSON by path",
      "description": "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.",
      "tags": [
        "mend",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "Fix this JSON, it has a trailing comma and single quotes",
        "Why does this JSON fail to parse?",
        "Pull every email out of this JSON blob"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "deadbolt_check_supabase_access",
      "name": "Check who can read and write Supabase tables (RLS, policies, grants)",
      "description": "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.",
      "tags": [
        "deadbolt",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "Is my Supabase schema leaking data?",
        "Check these migrations for RLS problems before I push",
        "Why do I get permission denied 42501 on my new Supabase table?"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "deadbolt_catalog_query",
      "name": "Get the read-only SQL that snapshots a live Supabase database for Deadbolt",
      "description": "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.",
      "tags": [
        "deadbolt",
        "DeveloperApplication",
        "read-only"
      ],
      "examples": [
        "Is my Supabase schema leaking data?",
        "Check these migrations for RLS problems before I push",
        "Why do I get permission denied 42501 on my new Supabase table?"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    },
    {
      "id": "spill_scan_secrets",
      "name": "Find and redact API keys, tokens, private keys and passwords in text",
      "description": "Use when the user asks whether some text contains secrets, or before you paste, commit, share, log or send code, a .env file, a diff, config, logs, a stack trace or a prompt that might contain credentials, for example \"did I leak a key in this?\", \"is this safe to post?\" or \"redact the secrets in this log\".",
      "tags": [
        "spill",
        "SecurityApplication",
        "read-only"
      ],
      "examples": [
        "Did I leak an API key in this code?",
        "Redact the secrets in this log before I post it",
        "Is this Supabase key the anon key or the service_role key?"
      ],
      "inputModes": [
        "application/json",
        "text/plain"
      ],
      "outputModes": [
        "application/json",
        "text/plain"
      ]
    }
  ]
}