{"id":552889,"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.","card_url":"https://clawhard.com/.well-known/agent-card.json","endpoint":"https://mcp.clawhard.com/a2a","protocol_version":"1.0","first_seen":"2026-11-05T22:08:04.739185+00:00","last_verified":"2026-11-05T22:08:04.739185+00:00","card":{"url":"https://mcp.clawhard.com/a2a","name":"Clawhard Studio","skills":[{"id":"tokendiet_count_tokens","name":"Count the exact tokens in a text","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"slopscore_check_website","name":"Score a website for AI-made design habits","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"],"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,…","outputModes":["application/json","text/plain"]},{"id":"aitab_list_ai_plans","name":"List AI subscription plans and list prices","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"aitab_total_ai_subscriptions","name":"Total what you pay for AI subscriptions","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"tells_check_writing","name":"Score writing for AI-sounding habits","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"runsheet_create_schedule","name":"Create a live day-of schedule (run of show)","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"halves_settle_up","name":"Work out who owes whom, in the fewest payments","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"halves_create_group_link","name":"Create a shared expense group link","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"doorman_check_ai_bot_access","name":"See which AI bots a website lets in","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"],"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,…","outputModes":["application/json","text/plain"]},{"id":"doorman_check_robots_txt","name":"Check a robots.txt file for AI bot access","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"doorman_write_robots_txt","name":"Write a robots.txt that lets in only the AI bots you want","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"swatch_check_contrast","name":"Check text and background color contrast (WCAG and APCA)","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"swatch_fix_contrast","name":"Find the closest colors that pass a contrast target","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"],"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).","outputModes":["application/json","text/plain"]},{"id":"swatch_pick_text_color","name":"Pick black or white text for a background color","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"swatch_make_scale","name":"Build a 50 to 950 color scale from one color","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"swatch_convert_color","name":"Convert a color between hex, rgb, hsl and oklch","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"swatch_check_pairs","name":"Check many foreground and background pairs at once","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"meridian_now","name":"Current time in any places or time zones","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"],"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\".","outputModes":["application/json","text/plain"]},{"id":"meridian_convert_time","name":"Convert a time between time zones, DST-correct","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"],"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).","outputModes":["application/json","text/plain"]},{"id":"meridian_meeting_slots","name":"Find meeting times that work across time zones","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"meridian_zone_info","name":"Offset, abbreviation and daylight saving changes for a zone","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"mend_repair_json","name":"Repair broken or LLM-generated JSON","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"mend_check_json","name":"Validate JSON and locate the exact error","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"mend_outline_json","name":"Outline the structure of a large JSON payload","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"mend_query_json","name":"Extract values from JSON by path","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"deadbolt_check_supabase_access","name":"Check who can read and write Supabase tables (RLS, policies, grants)","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"deadbolt_catalog_query","name":"Get the read-only SQL that snapshots a live Supabase database for Deadbolt","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"],"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.","outputModes":["application/json","text/plain"]},{"id":"spill_scan_secrets","name":"Find and redact API keys, tokens, private keys and passwords in text","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"],"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\".","outputModes":["application/json","text/plain"]},{"id":"stamp_check_email_domain","name":"Check a domain's email authentication (SPF, DKIM, DMARC, MX) from live DNS","tags":["stamp","DeveloperApplication","read-only"],"examples":["Why are my emails going to spam?","Check SPF, DKIM and DMARC for mycompany.com","Do I meet the Gmail and Yahoo bulk sender requirements?"],"inputModes":["application/json","text/plain"],"description":"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?\".","outputModes":["application/json","text/plain"]},{"id":"stamp_check_dns_record","name":"Check an SPF, DMARC or DKIM record before publishing it","tags":["stamp","DeveloperApplication","read-only"],"examples":["Why are my emails going to spam?","Check SPF, DKIM and DMARC for mycompany.com","Do I meet the Gmail and Yahoo bulk sender requirements?"],"inputModes":["application/json","text/plain"],"description":"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;","outputModes":["application/json","text/plain"]}],"iconUrl":"https://clawhard.com/icon-512.png","version":"1.10.0","provider":{"url":"https://clawhard.com","organization":"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.","capabilities":{"streaming":false,"extendedAgentCard":false,"pushNotifications":false},"protocolVersion":"1.0","documentationUrl":"https://clawhard.com/llms.txt","defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json","text/plain"],"preferredTransport":"JSONRPC","supportedInterfaces":[{"url":"https://mcp.clawhard.com/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"},{"url":"https://mcp.clawhard.com/a2a","protocolBinding":"JSONRPC","protocolVersion":"0.3"}]},"status":"verified","publisher_domain":"clawhard.com","signature_status":"unsigned","signature_detail":"No card signature supplied","signature_key_url":null,"signature_checked_at":"2026-11-05T22:08:04.739185+00:00","domain_claimed_at":null,"domain_proof_checked_at":null,"source_name":"Publisher Agent Card","source_url":"https://clawhard.com/.well-known/agent-card.json","last_check":{"checked_at":"2026-11-05T22:08:04.739185+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"also_published_at":[],"history_urls":["https://clawhard.com/.well-known/agent-card.json"],"skills":[{"skill_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"],"quality_warning":false},{"skill_id":"stamp_check_email_domain","name":"Check a domain's email authentication (SPF, DKIM, DMARC, MX) from live DNS","description":"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?\".","tags":["stamp","DeveloperApplication","read-only"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_id":"stamp_check_dns_record","name":"Check an SPF, DMARC or DKIM record before publishing it","description":"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;","tags":["stamp","DeveloperApplication","read-only"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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,…","tags":["slopscore","DesignApplication","read-only"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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,…","tags":["doorman","DeveloperApplication","read-only"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false},{"skill_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"],"quality_warning":false}],"quality_flags":[],"check_history":{"checks":1,"passed":1},"recent_checks":[{"card_url":"https://clawhard.com/.well-known/agent-card.json","checked_at":"2026-11-05T22:08:04.739185+00:00","success":true,"http_status":200,"detail":"Agent Card validated"}],"endpoint_tls_check":{"checked_at":"2026-11-05T22:08:04.739185+00:00","success":true,"detail":"Valid TLS connection to advertised endpoint host; no A2A request sent"},"protocol_check":{"checked_at":"2026-11-05T22:08:04.739185+00:00","endpoint":"https://mcp.clawhard.com/a2a","protocol_binding":"JSONRPC","protocol_version":"1.0","state":"a2a_response","http_status":200,"detail":"A2A task-not-found response to a read-only task lookup","request_diagnostics":{"requests":[{"path":"/a2a","allow":[],"method":"POST","status":200,"version_header":"1.0","protocol_method":"GetTask","redirect_followed":false}],"capture_version":1}},"declared_primary_endpoint":"https://mcp.clawhard.com/a2a","selected_connection_interface":{"url":"https://mcp.clawhard.com/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"},"protocol_interface_checks":[{"endpoint":"https://mcp.clawhard.com/a2a","protocol_binding":"JSONRPC","protocol_version":"1.0","selected":true,"state":"a2a_response","checked_at":"2026-11-05T22:08:04.739185+00:00","http_status":200,"detail":"A2A task-not-found response to a read-only task lookup","binding_recorded":true},{"endpoint":"https://mcp.clawhard.com/a2a","protocol_binding":"JSONRPC","protocol_version":"0.3","selected":false,"state":"a2a_response","checked_at":"2026-11-05T22:08:04.739185+00:00","http_status":200,"detail":"A2A task-not-found response to a read-only task lookup","binding_recorded":true}],"connection_selection_note":"The selected connection uses an address advertised in the publisher card. Read-only observations do not establish task quality or safety.","x402_price_check":null,"events":[],"relationships":[],"verification":{"agent_card_url":"https://clawhard.com/.well-known/agent-card.json","last_successful_card_check":"2026-11-05T22:08:04.739185+00:00","latest_card_check":{"checked_at":"2026-11-05T22:08:04.739185+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"signature_status":"unsigned","signature_checked_at":"2026-11-05T22:08:04.739185+00:00","task_endpoint_tested":true,"task_execution_tested":false,"endpoint_tls_checked_at":"2026-11-05T22:08:04.739185+00:00","endpoint_tls_reachable":true,"protocol_check_state":"a2a_response","protocol_checked_at":"2026-11-05T22:08:04.739185+00:00","provider_identity_verified":false,"domain_claimed_at":null,"domain_proof_checked_at":null},"synthetic_capability_tests":{"agent_id":552889,"status":"not_tested","reason_code":"not_yet_tested","consent_status":"not_confirmed","latest_observation_status":null,"last_checked_at":null,"fixture_version":"1","reference_demonstration":false,"scope":"A publisher-authorized synthetic test of a dedicated free test endpoint. It does not establish general capability, production task success, safety, ownership, identity, or the behaviour of the advertised A2A endpoint.","methodology_url":"https://localmark.ai/capability-tests","history":[]},"repair_links":{"agent_repair_url":"https://localmark.ai/agents/552889/repair","publisher_report_url":"https://localmark.ai/publishers/clawhard.com/repair","diagnostics_json_url":"https://localmark.ai/publishers/clawhard.com/repair/diagnostics.json","diagnostics_csv_url":"https://localmark.ai/publishers/clawhard.com/repair/diagnostics.csv"},"_localmark":{"contribution":{"optional":true,"directory_access":"free","operator_authorization_required":true,"affects_rankings":false,"message":"LocalMark is free. Optional contributions help fund ongoing checks.","support_url":"https://localmark.ai/support","metadata_url":"https://localmark.ai/api/v1/support/contributions"}}}