Clawhard Studio
REMOTE · MCP.CLAWHARD.COM
Token counts, contrast, time zones, JSON repair, Supabase RLS, leaked API keys, AI-bot access.
Available components
Last scanned (18 hours ago)
Scores higher than 54% of remote servers
Reachable. Last reached 4 Nov 2026.
Category Productivity and Notes
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS check failed: the endpoint is reachable over plaintext HTTP. See how to fix → View diagnostics → Fail
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability87
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5988 tokens (~112/item across 53 items; 28 tools + 25 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability check failed: schema churn in the 7 days we've observed: 9 tool removals, 0 breaking changes, 0 auth/transport breaks, 27 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 28 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 0
- The server rewrote its instructions, which are the text every model session reads security
- New prompt “spill_check_for_secrets” functional
- New resource “spill-llms-txt” functional
- New resource “spill-result-view” functional
- Server version: 1.8.0 → 1.9.0 functional
- New tool “spill_scan_secrets” functional
- 3 Nov 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “mend_outline_json” rewrote its description, which is the text the model reads security
- Tool “meridian_convert_time” rewrote its description, which is the text the model reads security
- Tool “meridian_meeting_slots” rewrote its description, which is the text the model reads security
- Tool “meridian_now” rewrote its description, which is the text the model reads security
- Tool “meridian_zone_info” rewrote its description, which is the text the model reads security
- Schema quality: 4876 → 5454 ▼ functional
- New prompt “deadbolt_audit_supabase” functional
- New resource “deadbolt-llms-txt” functional
- New resource “deadbolt-result-view” functional
- Server version: 1.4.0 → 1.8.0 functional
- New tool “deadbolt_catalog_query” functional
- New tool “deadbolt_check_supabase_access” functional
- 2 Nov 26 +1
- Stability: 0.13 → fail ▼ security
- Tool “aitab_list_plans” was removed ▼ security
- Tool “aitab_total” was removed ▼ security
- Tool “doorman_build_robots” was removed ▼ security
- Tool “doorman_check_robots” was removed ▼ security
- Tool “doorman_check_site” was removed ▼ security
- Tool “fluff_check_text” was removed ▼ security
- Tool “fluff_gist_text” was removed ▼ security
- Tool “halves_create_group” was removed ▼ security
- Tool “lingo_brief” was removed ▼ security
- Tool “lingo_list_terms” was removed ▼ security
- Tool “lingo_translate” was removed ▼ security
- Tool “runsheet_create” was removed ▼ security
- Tool “runsheet_list_templates” was removed ▼ security
- Tool “slopscore_check_site” was removed ▼ security
- Tool “tells_fix_text” was removed ▼ security
- Tool “tells_score_text” was removed ▼ security
- Tool “tokendiet_trim_text” was removed ▼ security
- The server rewrote its instructions, which are the text every model session reads security
- Tool “halves_settle_up” rewrote its description, which is the text the model reads security
- Schema quality: 1965 → 2467 ▼ functional
- Schema quality: 131 → 106 ▲ functional
- The server now declares the “prompts” capability functional
- The server now declares the “resources” capability functional
- First check of Capabilities: pass functional
- First check of Schema quality: 100 functional
- New prompt “aitab_audit_my_subscriptions” functional
- New prompt “doorman_audit_ai_access” functional
- New prompt “halves_split_the_bill” functional
- New prompt “mend_fix_my_json” functional
- New prompt “meridian_plan_a_call” functional
- New prompt “runsheet_plan_event_day” functional
- New prompt “slopscore_review_my_site” functional
- New prompt “swatch_audit_my_colors” functional
- New prompt “tells_humanize_draft” functional
- New prompt “tokendiet_will_it_fit” functional
- New resource “aitab-llms-txt” functional
- New resource “aitab-result-view” functional
- New resource “clawhard-llms-txt” functional
- New resource “doorman-llms-txt” functional
- New resource “doorman-result-view” functional
- New resource “halves-llms-txt” functional
- New resource “halves-result-view” functional
- New resource “mend-llms-txt” functional
- New resource “mend-result-view” functional
- New resource “meridian-llms-txt” functional
- New resource “meridian-result-view” functional
- New resource “runsheet-llms-txt” functional
- New resource “runsheet-result-view” functional
- New resource “slopscore-llms-txt” functional
- New resource “slopscore-result-view” functional
- New resource “swatch-llms-txt” functional
- New resource “swatch-result-view” functional
- New resource “tells-llms-txt” functional
- New resource “tells-result-view” functional
- New resource “tokendiet-llms-txt” functional
- New resource “tokendiet-result-view” functional
- Server version: 1.0.0 → 1.4.0 functional
- New tool “aitab_list_ai_plans” functional
- New tool “aitab_total_ai_subscriptions” functional
- New tool “doorman_check_ai_bot_access” functional
- New tool “doorman_check_robots_txt” functional
- New tool “doorman_write_robots_txt” functional
- New tool “halves_create_group_link” functional
- New tool “mend_check_json” functional
- New tool “mend_outline_json” functional
- New tool “mend_query_json” functional
- New tool “mend_repair_json” functional
- New tool “meridian_convert_time” functional
- New tool “meridian_meeting_slots” functional
- New tool “meridian_now” functional
- New tool “meridian_zone_info” functional
- New tool “runsheet_create_schedule” functional
- New tool “slopscore_check_website” functional
- New tool “swatch_check_contrast” functional
- New tool “swatch_check_pairs” functional
- New tool “swatch_convert_color” functional
- New tool “swatch_fix_contrast” functional
- New tool “swatch_make_scale” functional
- New tool “swatch_pick_text_color” functional
- New tool “tells_check_writing” functional
- New tool “tokendiet_count_tokens” functional
- New tool “doorman_build_robots” functional
- New tool “doorman_check_robots” functional
- New tool “doorman_check_site” functional
- Tool “halves_settle_up” changed its title: Work out who owes whom, in the fewest payments → Work out who owes whom in the fewest payments cosmetic
- 31 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 0
- Schema quality: 1711 → 1965 ▼ functional
- Schema quality: good → excellent functional
- New tool “fluff_check_text” functional
- New tool “fluff_gist_text” functional
- 29 Oct 26 +1
- The server rewrote its instructions, which are the text every model session reads security
- Schema quality: 1334 → 1711 ▼ functional
- Stability: unverified → 0.03 ▲ functional
- New tool “lingo_brief” functional
- New tool “lingo_list_terms” functional
- New tool “lingo_translate” functional
- 28 Oct 26 66
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 4 Nov 2026 · Probed https://mcp.clawhard.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=clawhard.com | CN=WE1,O=Google Trust Services,C=US | 28 Oct 2026 | 26 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 8c01bdcc689fa8ba13ab6284bbe74bda |
| SANs: clawhard.com, mcp.clawhard.com, *.mcp.clawhard.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.clawhard.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| clawhard.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| x-content-type-options | nosniff |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.clawhard.com/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.clawhard.com/mcp | Served over HTTP | 200 |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
aitab_list_ai_plans List AI subscription plans with list prices ~108
Use when the user asks what AI plans cost (ChatGPT, Claude, Gemini, Perplexity, Cursor, Copilot, Midjourney and others), or before aitab_total_ai_subscriptions to look up plan keys. Returns each service with its plans, USD monthly and yearly list prices and the key to pass on. Prices were checked on official pages and carry a checked date; plans marked estimate are unconfirmed. No input. Prefer this over remembering prices, which change often.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
aitab_total_ai_subscriptions Total what you pay for AI subscriptions ~200
Use when the user lists the AI tools they pay for and asks what they spend per month or year, whether they are paying for overlapping tools, or what a stack of AI subscriptions costs. Returns the monthly, yearly and daily total, overlaps between plans, plans already included in another plan they pay for (could_cut, safe to drop), plans that merely overlap in kind (consider_dropping, ask before recommending a cut), and a link to a shareable receipt. Get plan keys from aitab_list_ai_plans. Example: {"plans": ["chatgpt.plus", "claude.pro", "cursor.pro"]}. Add ":y" to a key for yearly billing.
| Name | Type | Req | Description |
|---|---|---|---|
| billing | string | – | Which total the shared receipt shows first. Default monthly. |
| plans | array | yes | Plan keys, e.g. ["chatgpt.plus","claude.pro","cursor.pro"]. In a GET query use a comma-separated list. |
No output schema declared.
No examples provided.
deadbolt_catalog_query Get the read-only SQL that snapshots a live Supabase database for Deadbolt ~95
Use when you need to check a live Supabase project rather than migration files: returns a read-only SQL query that reads table RLS settings, grants for anon and authenticated, policies, SECURITY DEFINER functions and storage buckets (never row data) and returns one JSON value. Run it with the user's Supabase SQL Editor or a Supabase MCP execute_sql tool, then pass the JSON to deadbolt_check_supabase_access.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
deadbolt_check_supabase_access Check who can read and write Supabase tables (RLS, policies, grants) ~360
Use when you write, review or are about to apply Supabase / PostgreSQL migration SQL (CREATE TABLE, RLS, CREATE POLICY, GRANT, views, SECURITY DEFINER functions, storage buckets), or when a user asks whether their Supabase data is exposed, whether RLS is set up right, or why a query returns 42501 permission denied or no rows. Replays the SQL with real Postgres rules and returns, per table, what signed-out (anon) and signed-in (authenticated) users can SELECT/INSERT/UPDATE/DELETE (all rows, own rows, some rows, none, or denied for a missing grant), plus findings with severity and ready-to-run fix SQL: RLS off, policies written but RLS never enabled, using(true) writes, personal columns readable by anyone, views that bypass RLS, SECURITY DEFINER functions anyone can call, user_metadata in policies, public bucket listing, grants missing after the Oct 30 2026 default change. Also accepts the JSON produced by deadbolt_catalog_query for the live database. Deterministic; never connects to any database. Run it before telling a user their schema is safe. Up to 200,000 characters.
| Name | Type | Req | Description |
|---|---|---|---|
| project_created_before_2026_10_30 | boolean | – | Only for SQL input. true (default): the project grants new public tables to anon and authenticated automatically (projects created before Oct 30, 2026). false: new tables get no grants unless the SQL… |
| sql | string | yes | Migration SQL (one or many files concatenated, in order), or the single JSON value returned by the catalog query. |
No output schema declared.
No examples provided.
doorman_check_ai_bot_access See which AI bots a website lets in ~160
Use when the user asks whether their site (or any public site) blocks ChatGPT, Claude, Google AI, Perplexity or other AI crawlers, whether AI can read or train on their content, or why AI search does not mention their site. Fetches the live robots.txt and reports, for 22 named AI bots in four groups (AI training, AI search, assistants, search engines), which are let in, kept out or partly blocked, plus the site's content-signal preference and fixes. Example: {"url": "example.com"}. Read-only. To write a new robots.txt use doorman_write_robots_txt.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Website address or domain, e.g. nytimes.com |
No output schema declared.
No examples provided.
doorman_check_robots_txt Check a pasted robots.txt for AI bot access ~143
Use when the user pastes the text of a robots.txt (or you have drafted one) and asks which AI bots it lets in or blocks, or whether a change does what they want. Parses it the way crawlers do (groups, wildcards, longest-match) and reports each of 22 named AI bots as let in, kept out or partly blocked, with notes and a suggested choice. Pure parsing, no network. Example: {"robots_txt": "User-agent: GPTBot\nDisallow: /"}.
| Name | Type | Req | Description |
|---|---|---|---|
| robots_txt | string | yes | The full robots.txt text (up to 512 KB). Empty means no robots.txt. |
No output schema declared.
No examples provided.
doorman_write_robots_txt Write a robots.txt with your AI bot choices ~204
Use when the user wants to allow or block AI training, AI search or assistant bots on their site and needs the robots.txt lines. Takes an optional existing robots.txt plus a choice of "in" or "out" for each of three groups (training, ai_search, assistants) and returns a complete robots.txt that keeps existing rules, adds one clean group per choice and a shared content-signal line. Example: {"training": "out", "ai_search": "in", "assistants": "in"}. Returns text to paste at /robots.txt; it does not change any site.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_search | string | – | AI search and answer engines (default in). |
| assistants | string | – | Assistants that open a page because a person asked (default in). |
| robots_txt | string | – | Current robots.txt text to keep (optional). |
| training | string | – | Let AI training bots in or keep them out (default out). |
No output schema declared.
No examples provided.
halves_create_group_link Create a shared expense group link ~201
Use when the user wants a shared place for a group (trip, flat, event) to keep adding expenses and see who owes whom, not just a one-time calculation. Creates a group and returns a link anyone can open without signing up to add and edit expenses. Anyone with the link can edit it, so share it only with the group. Creates a saved page, so only call it when the user wants a shared group. For a one-off answer use halves_settle_up. Example: {"name": "Lisbon trip", "currency": "EUR", "people": ["Ana", "Ben", "Cy"]}.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | string | – | Main currency, default USD. |
| expenses | array | – | Optional starting expenses (up to 50), same shape as the settle tool. |
| name | string | – | Group name, e.g. "Lisbon trip". |
| people | array | yes | Names (2 to 40). |
No output schema declared.
No examples provided.
halves_settle_up Work out who owes whom in the fewest payments ~221
Use when the user shares a trip, dinner, household or group expense list and asks who owes whom, how to split costs, or how to settle up. Returns each person's paid, share and net balance, and the smallest set of payments that squares everyone up. Handles equal splits, splits among a subset, exact amounts and payments already made, with correct rounding. Nothing is saved. Example: {"people": ["Ana", "Ben", "Cy"], "expenses": [{"what": "Dinner", "amount": 90, "paid_by": "Ana"}, {"what": "Taxi", "amount": 24, "paid_by": "Ben", "split_between": ["Ben", "Cy"]}]}. Do the arithmetic here instead of by hand.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | string | – | ISO currency code, default USD. |
| expenses | array | yes | What was paid. |
| payments | array | – | Payments already made between people to settle up. |
| people | array | yes | Names of everyone in the group (2 to 40, unique). |
No output schema declared.
No examples provided.
mend_check_json Validate JSON and locate the exact error ~93
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.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | The text to validate. |
No output schema declared.
No examples provided.
mend_outline_json Outline the structure of a large JSON payload ~146
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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_depth | integer | – | How many levels to expand. Default 4. |
| max_items | integer | – | How many array items to show when items differ. Default 6. |
| text | string | yes | The JSON (or JSON-ish text). |
No output schema declared.
No examples provided.
mend_query_json Extract values from JSON by path ~155
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.
| Name | Type | Req | Description |
|---|---|---|---|
| max | integer | – | Maximum matches to return. Default 50. |
| path | string | yes | Path such as $.users[*].email, data.items[0], $..id, $.list[-1], $.list[1:3]. |
| text | string | yes | The JSON (or JSON-ish text). |
No output schema declared.
No examples provided.
mend_repair_json Repair broken or LLM-generated JSON ~247
Use when JSON from an LLM, API, log, config or copy-paste fails to parse (JSON.parse error, "Unexpected token", "Expecting property name"), or the user pastes JSON with trailing commas, single quotes, unquoted keys, comments, Python True/False/None, NaN, missing commas or brackets, a ```json fence, text around it, or output that was cut off. Deterministic repair: returns valid, formatted JSON plus a list of every fix with line and column. Values are never rewritten, so big numbers, number formatting and key order stay exactly as written (re-asking a model to "fix the JSON" changes data and costs tokens). If the text is already valid it says so. Up to 100,000 characters.
| Name | Type | Req | Description |
|---|---|---|---|
| indent | integer | – | Spaces per indent level in the output. Default 2. Use 0 for one minified line. |
| sort_keys | boolean | – | Sort object keys alphabetically. Default false (keep the original order). |
| text | string | yes | The broken JSON, or any text that contains JSON (a chat reply, a log line, a code block). |
No output schema declared.
No examples provided.
meridian_convert_time Convert a time between time zones, DST-correct ~282
Use when you need to convert a specific wall-clock time from one place to others, for any date. It uses the real tz database, so daylight saving is right for that exact date (the US and Europe switch on different weeks), and it warns when the time does not exist (spring forward) or happens twice (fall back). Time accepts "15:00", "3:30pm", "noon", "now" or an ISO local time like 2026-11-05T15:00 (no Z). Date defaults to today in the source zone. Returns {input, utc, source:{...}, converted:[{place, zone, local, time_12h, date, utc_offset, abbreviation, day_note, hours_ahead_of_source}], warning?, summary, open_url}.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | Optional date YYYY-MM-DD in the source zone. Default today. |
| from | string | yes | Source place or zone, e.g. "New York" or "America/New_York". |
| time | string | yes | Local time in the source place, e.g. "15:00", "3:30pm", "noon", "now", "2026-11-05T15:00". |
| to | array | yes | Destination places, e.g. ["London","Tokyo"]. |
No output schema declared.
No examples provided.
meridian_meeting_slots Find meeting times that work across time zones ~219
Use when you need to schedule a call across several places. Scans the day in 15-minute steps and ranks start times so the most people are inside working hours and nobody is at night, using each place's real offset and DST for that date. Returns up to 5 slots with each person's local start and end, and says plainly when no time works for everyone. Defaults: working hours 9 to 17, 60 minutes, date today in the first place.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | – | How many slots to return, default 5. |
| date | string | – | Date YYYY-MM-DD, local to the first place. Default today. |
| duration_minutes | integer | – | Meeting length in minutes, multiple of 15. Default 60. |
| end_hour | integer | – | Working day end hour, default 17. |
| places | array | yes | Where each attendee is, e.g. ["San Francisco","London","Tokyo"]. |
| start_hour | integer | – | Working day start hour, default 9. |
No output schema declared.
No examples provided.
meridian_now Current time in any places or time zones ~116
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".
| Name | Type | Req | Description |
|---|---|---|---|
| places | array | yes | Cities, IANA zones or abbreviations, e.g. ["London","Asia/Tokyo"]. |
No output schema declared.
No examples provided.
meridian_zone_info Offset, abbreviation and daylight saving changes for a zone ~135
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.
| Name | Type | Req | Description |
|---|---|---|---|
| place | string | yes | City, IANA zone or abbreviation, e.g. "London" or "America/Phoenix". |
| year | integer | – | Year to list clock changes for. Default this year. |
No output schema declared.
No examples provided.
runsheet_create_schedule Create a live day-of schedule page ~244
Use when the user wants a shareable run-of-show or day-of schedule for a wedding, conference, shoot or other event that guests or crew can open on their phone and that updates live when edited. Creates the page and returns a view link to share with everyone and a private edit link to keep. Start from a template (wedding, conf, shoot, blank) or pass your own items. Example: {"name": "Maya and Sam wedding", "date": "2026-09-12", "timezone": "America/New_York", "template": "wedding"} or {"name": "Offsite", "items": [{"time": "09:00", "title": "Welcome", "duration_minutes": 30}]}. Creates a saved page, so only call it when the user wants one.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | YYYY-MM-DD |
| items | array | – | Schedule slots. |
| name | string | – | Event name. |
| template | string | – | Starter schedule. Ignored if items are given. |
| timezone | string | – | IANA time zone, e.g. America/New_York. Default UTC. |
No output schema declared.
No examples provided.
slopscore_check_website Score a live website for AI-made design habits ~171
Use when the user asks whether a website, landing page or app looks AI-generated or generic, wants a design critique of a live URL, or asks "does my site look like AI slop?". Fetches the page and checks 19 habits (purple-blue gradients, buzzword copy, glassmorphism, icon-card grids, template headlines, app-builder fingerprints and more), then returns a 0-100 score, a verdict, each habit found with the evidence and how to fix it, and the habits that were not found. It is a habit check, not an AI detector. Public http(s) pages only. Example: {"url": "https://example.com"}.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Public website address, for example example.com or https://example.com/pricing |
No output schema declared.
No examples provided.
spill_scan_secrets Find and redact API keys, tokens, private keys and passwords in text ~453
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". Detects 48 services by exact key format (OpenAI, Anthropic, Gemini/Google, Groq, xAI, OpenRouter, Stripe, Supabase, AWS, GitHub, GitLab, npm, PyPI, Slack, Discord, Twilio, SendGrid, Resend, Shopify, Cloudflare and more) plus PEM private keys, database URLs with passwords, JWTs, Authorization headers and high-entropy values in variables named like secret, token, api_key or password. It verifies what it can deterministically: GitHub token CRC32 checksums, JWT and Supabase key role and expiry (service_role vs anon), documented example keys and placeholders, and NEXT_PUBLIC_/VITE_/EXPO_PUBLIC_ variables that ship to every browser. Returns findings with severity (critical, high, medium, public, info), line and column, a masked preview (never the full secret), why it matters, the fix and the provider's revoke URL, plus a redacted copy with labels like [STRIPE_SECRET_KEY_1]. Text is processed in memory to answer and is not stored. Limits: format-based, so a random secret with a neutral name can be missed; it never tests keys against providers; up to 200,000 characters. For secrets the user should not send anywhere, point them to https://spill.clawhard.com, which runs entirely in the browser.
| Name | Type | Req | Description |
|---|---|---|---|
| redact_public_keys | boolean | – | false (default): keep keys that are meant to be public (Stripe pk_, Supabase anon or publishable, Mapbox pk.) in the redacted copy so the code still runs. true: hide them too. |
| text | string | yes | The text to scan: code, a diff, .env, config, logs, a stack trace, a chat or a prompt. |
No output schema declared.
No examples provided.
swatch_check_contrast Check the WCAG contrast of a text and background color ~177
Use when the user asks whether a color combination is readable or accessible, passes WCAG AA or AAA, or has enough contrast (text on a background, button, badge, link color). Returns the exact contrast ratio, pass or fail for normal text, large text and UI components at AA and AAA, the APCA lightness contrast and a plain note. Colors can be hex, rgb(), hsl() or CSS names. Example: {"foreground": "#777777", "background": "#ffffff"}. Language models cannot compute this reliably, so call it instead of guessing.
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | yes | Background color, e.g. "#ffffff". |
| foreground | string | yes | Text (or icon) color, e.g. "#767676" or "rgb(20 20 20)" or "tomato". |
No output schema declared.
No examples provided.
swatch_check_pairs Check contrast for many color pairs at once ~121
Use when the user has a whole design system, theme or stylesheet and wants every text and background pair checked for accessibility in one go. Takes up to 50 pairs and returns the ratio and AA and AAA results for each, with a count of failures. Example: {"pairs": [{"foreground": "#777", "background": "#fff", "label": "muted text"}, {"foreground": "#fff", "background": "#ff5a1f", "label": "button"}]}.
| Name | Type | Req | Description |
|---|---|---|---|
| pairs | array | yes | Pairs to check. |
No output schema declared.
No examples provided.
swatch_convert_color Convert a color between hex, rgb, hsl and oklch ~93
Use when the user asks to convert a color between hex, RGB, HSL and OKLCH, or asks what a color is called or how light it is. Returns all formats, the relative luminance and the nearest CSS color name. Example: {"color": "#ff5a1f"}. Exact math, so prefer it to converting by hand.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | yes | Any CSS color. |
No output schema declared.
No examples provided.
swatch_fix_contrast Find the nearest accessible color that passes contrast ~139
Use when a color pair fails contrast and the user wants the smallest change that makes it pass, such as "make this gray text accessible without changing the look". Returns the closest text color on that background that reaches the target (AA, AAA, AA-large or ui), and separately the closest background, keeping the hue. Example: {"foreground": "#777777", "background": "#ffffff", "target": "AA"}. Returns already_passes if nothing needs to change.
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | yes | Current background color. |
| foreground | string | yes | Current text color. |
| target | string | – | Contrast target. Default AA. |
No output schema declared.
No examples provided.
swatch_make_scale Build a 50-950 color palette from one color ~132
Use when the user asks for a palette, shades, tints, a design-token scale or a Tailwind-style 50 to 950 ramp from a brand color. Returns 11 steps that keep the hue, with the hex, contrast on white and on black, and the best text color for each step. Example: {"color": "#ff5a1f", "name": "brand"}.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | yes | Base color, e.g. "#ff5a1f". |
| name | string | – | Token name used in the CSS and Tailwind output. Default "brand". |
No output schema declared.
No examples provided.
swatch_pick_text_color Pick black or white text for a background ~90
Use when the user asks what text color (black or white) to put on a given background, button or brand color so it is readable. Returns the better of black or white with both contrast ratios, the WCAG grade and a softer near-black option. Example: {"background": "#ff5a1f"}.
| Name | Type | Req | Description |
|---|---|---|---|
| background | string | yes | The surface color the text sits on. |
No output schema declared.
No examples provided.
tells_check_writing Check writing for AI-sounding habits ~178
Use when the user asks whether a piece of writing sounds like AI, wants an email, post, essay or cover letter checked for chatbot habits before sending, or wants to know which phrases to fix. Returns a 0-100 score, a verdict, and each habit found (chatbot words like "delve" and "tapestry", "not X, it's Y" framing, em-dash overuse, assistant filler, fake suspense, stiff transitions, markdown leftovers and more) with examples and why readers notice it. It is a habit check, not an AI detector, and short texts give rough scores. Example: {"text": "<the draft to check>"}. To rewrite, use your own judgment on the flagged habits.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | The writing to check (up to 60,000 characters). |
No output schema declared.
No examples provided.
tokendiet_count_tokens Count the exact tokens in a text ~153
Use when the user asks how many tokens a text, prompt, log, document or code paste is, whether it fits a context window (128K, 200K, 1M), or how big something is before they send it to an AI. Returns the exact o200k token count (GPT-4o family and later; Claude and Gemini usually within about 15%), plus words, characters and how much of each window it uses. Language models cannot count their own tokens, so call this instead of estimating. Example: {"text": "<the text to measure>"}. Not for shortening text.
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | The text to count (up to 200,000 characters). |
No output schema declared.
No examples provided.
How do I install the Clawhard Studio MCP server?
Clawhard Studio is a hosted endpoint at https://mcp.clawhard.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.clawhard.com
claude mcp add --transport http com-clawhard-studio 'https://mcp.clawhard.com/mcp'
What is the Clawhard Studio MCP server?
Clawhard Studio is an MCP server listed in the public MCP registry as com.clawhard/studio. Token counts, contrast, time zones, JSON repair, Supabase RLS, leaked API keys, AI-bot access. This page covers its hosted endpoint (https://mcp.clawhard.com/mcp).
Is the Clawhard Studio MCP server safe to use?
Clawhard Studio scores 69 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Clawhard Studio MCP server expose?
Clawhard Studio exposes 28 tools: tokendiet_count_tokens, slopscore_check_website, aitab_list_ai_plans, aitab_total_ai_subscriptions, tells_check_writing, and 23 more. Their descriptions and schemas cost roughly 5,036 tokens of context every time the server is loaded.
Does the Clawhard Studio MCP server require authentication?
No. We connected to Clawhard Studio without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Clawhard Studio MCP server still maintained?
Clawhard Studio is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.