{"domain":"clawhard.com","count":1,"changes":[{"captured_at":"2026-11-05T05:52:00.091632","card_hash":"b6f76c8ed9506402f300ff3bbafef3338e79c1083822ae0be71df1d5aebef745","previous_card_hash":null,"diff":{"skills_added":[{"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"],"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"],"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"],"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"],"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,…","tags":["doorman","DeveloperApplication","read-only"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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,…","tags":["slopscore","DesignApplication","read-only"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"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"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"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"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]}],"skills_removed":[],"skills_changed":[],"fields_changed":[{"field":"name","before":null,"after":"Clawhard Studio"},{"field":"description","before":null,"after":"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."},{"field":"version","before":null,"after":"1.9.0"},{"field":"protocolVersion","before":null,"after":"1.0"},{"field":"url","before":null,"after":"https://mcp.clawhard.com/a2a"},{"field":"documentationUrl","before":null,"after":"https://clawhard.com/llms.txt"},{"field":"iconUrl","before":null,"after":"https://clawhard.com/icon-512.png"},{"field":"preferredTransport","before":null,"after":"JSONRPC"},{"field":"supportedInterfaces","before":null,"after":[{"url":"https://mcp.clawhard.com/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"},{"url":"https://mcp.clawhard.com/a2a","protocolBinding":"JSONRPC","protocolVersion":"0.3"}]},{"field":"capabilities","before":null,"after":{"streaming":false,"pushNotifications":false,"extendedAgentCard":false}},{"field":"provider","before":null,"after":{"organization":"Clawhard Studio","url":"https://clawhard.com"}}],"other_changed":true,"is_empty":false,"human_summary":"added 28 skills · name ∅ → Clawhard Studio · description ∅ → Clawhard Studio makes small web tools th · version ∅ → 1.9.0 · protocolVersion ∅ → 1.0 · url ∅ → https://mcp.clawhard.com/a2a · documentationUrl ∅ → https://clawhard.com/llms.txt · iconUrl ∅ → https://clawhard.com/icon-512.png · preferredTransport ∅ → JSONRPC · supportedInterfaces ∅ → https://mcp.clawhard.com/a2a (JSONRPC),  · capabilities ∅ → none · provider ∅ → Clawhard Studio"}}]}