{"serverId":"mcp-registry/ai.dotsy/mcp","tools":[{"name":"update_brief","fixed":{"name":"update_brief","description":"Update `_intent/site.md` (site brief) or a page brief when `page` is set. See field descriptions for rules, notes, and head enums.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["site","context"],"properties":{"body":{"type":"string","maxLength":50000,"description":"Replace narrative body (site ≤50k chars; page ≤10k)."},"goal":{"type":"string","maxLength":4000,"description":"Current goal (site ≤4k chars; page ≤2k)."},"head":{"description":"Head fields to merge. Site: purpose, audience, kind (exploration|production), priorities ({seo,analytics,design,mobile}: must|nice|skip), editingModel (ai|simple-editor|creator), sections, design (strict): palette string[] max 8, type string[] max 6, layout string max 80 chars — no other keys. Page: purpose, design.{direction,hero}.","type":"string"},"page":{"type":"string","description":"Content key — targets that page's brief (`_intent/pages/<key>.md`). Omit for the site brief."},"site":{"type":"string","description":"Site slug, e.g. acme-studio"},"notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"object","properties":{"seo":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]},"design":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]},"content":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]}},"additionalProperties":false}],"description":"Site: free-form ## Notes string (≤4k) OR per-section notes object for Design system / Content & CMS / SEO (null clears one). Page brief: string only (≤2k)."},"rules":{"type":"array","items":{"type":"object","required":["id","card","text"],"properties":{"id":{"type":"string","pattern":"^[a-z0-9-]{2,40}$"},"card":{"enum":["intent","design","content","seo"],"type":"string"},"text":{"type":"string","maxLength":160,"minLength":1},"check":{"anyOf":[{"anyOf":[{"type":"object","required":["type","max"],"properties":{"max":{"type":"integer","maximum":300,"minimum":10},"type":{"type":"string","const":"title-max"}},"additionalProperties":false},{"type":"object","required":["type","suffix"],"properties":{"type":{"type":"string","const":"title-suffix"},"suffix":{"type":"string","maxLength":60,"minLength":1}},"additionalProperties":false},{"type":"object","required":["type","min","max"],"properties":{"max":{"type":"integer","maximum":1000,"minimum":1},"min":{"type":"integer","maximum":1000,"minimum":0},"type":{"type":"string","const":"description-length"}},"additionalProperties":false},{"type":"object","required":["type"],"properties":{"type":{"type":"string","const":"one-h1"}},"additionalProperties":false},{"type":"object","required":["type","words"],"properties":{"type":{"type":"string","const":"banned-words"},"words":{"type":"array","items":{"type":"string","maxLength":40,"minLength":1},"maxItems":50,"minItems":1}},"additionalProperties":false},{"type":"object","required":["type"],"properties":{"type":{"type":"string","const":"image-alt"}},"additionalProperties":false},{"type":"object","required":["type","colors"],"properties":{"type":{"type":"string","const":"allowed-colors"},"colors":{"type":"array","items":{"type":"string","pattern":"^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$"},"maxItems":24,"minItems":1}},"additionalProperties":false},{"type":"object","required":["type","fonts"],"properties":{"type":{"type":"string","const":"allowed-fonts"},"fonts":{"type":"array","items":{"type":"string","maxLength":60,"minLength":1},"maxItems":12,"minItems":1}},"additionalProperties":false}]},{"type":"null"}]},"level":{"enum":["block","warn"],"type":"string"},"locked":{"type":"boolean"}},"additionalProperties":false},"maxItems":30,"description":"Rules & guidelines lines to add or change (upsert by id — send only fields you change; omitted fields keep their stored value; check: null turns a Rule into a Guideline). A supported check (title-max, title-suffix, description-length, one-h1, banned-words, image-alt, allowed-colors, allowed-fonts) makes a Rule — use level block for hard musts (banned words, title suffix), warn for softer checks. locked can only be set by a person; locked: false unlocks."},"context":{"type":"string","minLength":1,"description":"One sentence: why you are calling this tool and what you are trying to accomplish. Stored on the site's activity log and visible to everyone on the site — never put secrets or personal data here."},"guestToken":{"type":"string","minLength":20,"description":"Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy."},"removeRules":{"type":"array","items":{"type":"string"},"maxItems":30,"description":"Ids of rules or guidelines to remove (site brief only)."},"appendHandoff":{"type":"string","maxLength":500,"minLength":1,"description":"Append a hand-off log line — site brief only; ignored when page is set."}},"additionalProperties":false},"annotations":{"title":"Update site brief","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: head. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":1362,"tokensAfter":1366}],"toolsChanged":1,"tokensSaved":0,"todo":[{"tool":"adapt_site_analyze","params":["options"]},{"tool":"apply_changeset","params":["writes","message"]},{"tool":"batch_patch_content","params":["items"]},{"tool":"bulk_put_assets","params":["items"]},{"tool":"bulk_put_content","params":["title","content"]},{"tool":"create_site","params":["slug","title","purpose","onSlugTaken","keyConvention"]},{"tool":"decompose_analyze","params":["profileId","sampleLimit"]},{"tool":"delete_content","params":["key"]},{"tool":"delete_draft_test","params":["experimentId"]},{"tool":"delete_menu_item","params":["id","menu"]},{"tool":"delete_route","params":["path"]},{"tool":"delete_site","params":["confirmSlug"]},{"tool":"discard_drafts","params":["key","keys","routes"]},{"tool":"find_replace","params":["find","keys","replace","expectPerKey"]},{"tool":"get_content","params":["key","selector","published"]},{"tool":"get_menu","params":["menu"]},{"tool":"get_route","params":["path"]},{"tool":"get_site_manifest","params":["mode","limit","cursor","routes"]},{"tool":"import_site_from_url","params":["sourceUrl","onSlugTaken"]},{"tool":"list_assets","params":["limit","cursor"]},{"tool":"list_form_submissions","params":["toMs","limit","cursor","fromMs"]},{"tool":"patch_content","params":["key","ops"]},{"tool":"patch_route","params":["path","vars","title","purpose","experiment"]},{"tool":"preview_page","params":["path"]},{"tool":"promote_experiment","params":["experimentId","loserDisposition"]},{"tool":"put_content","params":["body","contentType"]},{"tool":"put_goals","params":["goals"]},{"tool":"put_menu_doc","params":["doc"]},{"tool":"put_menu_item","params":["id","ref","data","html","kind","menu","sort","attrs","label","newTab","parent","childShell","childTemplate"]},{"tool":"put_post","params":["key","body","head","meta"]},{"tool":"put_route","params":["path","vars","title","purpose","experiment"]},{"tool":"reorder_menu","params":["menu","ifMatch","orderedIds"]},{"tool":"search_content","params":["q","limit"]},{"tool":"set_analytics_provider","params":["provider"]},{"tool":"set_experiment_note","params":["experimentId"]},{"tool":"stage_content_chunk","params":["seq","body","finalize","stagingId","contentType"]},{"tool":"start_edit_session","params":["path"]},{"tool":"start_site","params":["title","purpose"]},{"tool":"start_test","params":["name","path","goalId","source","weights","hypothesis"]},{"tool":"structure_site_analyze","params":["profileId","sampleLimit"]},{"tool":"structure_site_apply","params":["scope","overrides"]},{"tool":"submit_feedback","params":["title","findings","description","impactPercent","suggestedImprovement"]},{"tool":"update_site","params":["title","keyConvention"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}