accueil / serveurs / Recherche & Web / ai.dotsy/mcp
ai.dotsy/mcp
serveur MCP (Model Context Protocol) · paige 0.3.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que ai.dotsy/mcp est sûr ?
Au dernier audit MCP Hub, le serveur MCP « ai.dotsy/mcp » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 91 outils
- adapt_site_analyze≈ 623 tokens
Propose nav wiring + blog collectionization for an imported mirror (draft, opt-in). Read-only; returns per-adapter reports + proposalEtag. Nav decline may include nextStep (e.g. mega-menu → edit fragments/header.html). Wait for mirror-vs-editable answer if requiredDecision pending.
Paramètres, retour & exemple (7)
Paramètresfull· boolean · optionnel
Return the full per-member harvest report (default: compacted for the token budget).site· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.options· object · optionneladapters· array · optionnel
Which adapters to analyze (default: both).guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.refreshProposal· boolean · optionnel
Replace an existing UNCONSUMED proposal (otherwise re-analyze 409s proposal_exists).
Exemple d'appel{"name": "adapt_site_analyze", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - adapt_site_apply≈ 466 tokens
Apply the adapt proposal (draft): wire nav into the menu store and/or rewrite the blog index to a live <dotsy-collection>. One undo covers the whole apply; a second apply is refused until adapt_site_revert (or force). Queued applies are polled to completion.
Paramètres, retour & exemple (7)
Paramètressite· string · requis
Site slug, e.g. acme-studioforce· string · optionnel
An undo record from a prior apply exists (409 adapt_undo_exists): defer-discard it — the prior record is dropped only when this apply SUCCEEDS; a partial-failure rollback reinstates it. Prefer adapt revert first.dryRun· boolean · optionnel
Full computation, would-write set + previews, ZERO writes, no undo.context· string · requis
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.ifMatch· string · requis
The proposal etag from analyze (or GET …/adapt/proposal / status).adapters· array · requis
Which analyzed adapters to apply.guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "adapt_site_apply", "arguments": {"site": "texte", "context": "texte", "ifMatch": "texte", "adapters": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - adapt_site_revert≈ 259 tokens
Atomically restore everything the last adapt_site_apply wrote (fragments, the menu doc when the op touched it, index, member configs, routes).
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "adapt_site_revert", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_custom_domain≈ 319 tokens
Connect apex and/or www on a paid plan; starts a DNS connect session.
Paramètres, retour & exemple (5)
Paramètressite· string · requis
Site slug, e.g. acme-studiohosts· array · optionnel
1–2 hostnames: apex (example.com) and/or www (www.example.com).domain· string · optionnel
Bare domain when hosts omitted — apex expands to apex + www; a subdomain connects as-is.context· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "add_custom_domain", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - apply_changeset≈ 1931 tokens
Stage writes[] + deletes[] in one call; attach routes via writes[].route. writes[].ifMatch (hash from get_site_manifest; "" = must not exist) guards each key (a delete takes { key, ifMatch } too); atomic:true makes one stale key write nothing (409 changeset_conflict). At most 10 writes; each body ≤60KB and the call ≤80KB. Larger new pages: stage_content_chunk then writes[].bodyStaging, or dotsy push / PUT content-raw.
Paramètres, retour & exemple (7)
Paramètressite· string · requis
Site slug, e.g. acme-studioatomic· boolean · optionnel
All or nothing: every writes[].ifMatch and deletes[].ifMatch is checked before anything is written. One stale key writes nothing and the call fails with 409 changeset_conflict listing `conflicts`. Default: a stale write is skipped and listed, the rest apply.writes· array · optionnelcontext· string · requis
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.deletes· array · optionnel
Keys to delete: a key, or { key, ifMatch } (the hash you read) so a page changed since is not deleted (listed in conflicts).message· string · optionnelguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "apply_changeset", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - batch_patch_content≈ 562 tokens
patch_content on multiple keys; all-or-nothing validation. Preferred edit path for pages over 60KB. replace-string value/replace ≤60KB; whole call ≤80KB.
Paramètres, retour & exemple (4)
Paramètressite· string · requis
Site slug, e.g. acme-studioitems· array · requiscontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "batch_patch_content", "arguments": {"site": "texte", "items": [], "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - bulk_put_assets≈ 717 tokens
Upload 1–200 CMS assets; key = path after /assets/. Each item: exactly one of bodyBase64, bodyText (plain text for .css/.js/.mjs/.json/.svg/.txt/.xml only — not .html pages), or importFromUrl. Optional bodySha256 verifies submitted bytes before write; response sha256 is stored bytes (JS/CSS match; WebP rasters may differ). JPEG/PNG/static GIF are re-encoded to WebP (response key photo.webp; /assets/photo.jpg keeps serving it) — use the response key in CSS/JS; optimize:false stores the bytes as sent at your key; animated GIFs are always kept. Uploaded files are live in the editor and draft preview at once; the published site picks them up at the next publish.
Paramètres, retour & exemple (4)
Paramètressite· string · requis
Site slug, e.g. acme-studioitems· array · requiscontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "bulk_put_assets", "arguments": {"site": "texte", "items": [], "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - bulk_put_content≈ 359 tokens
Stage many content keys (pages, layouts, fragments). Content only — not routes or assets. Each body ≤60KB and the whole call ≤80KB; larger pages use stage_content_chunk, dotsy push, or PUT content-raw. May queue above the inline threshold.
Paramètres, retour & exemple (5)
Paramètressite· string · requis
Site slug, e.g. acme-studiotitle· string · optionnelcontent· array · requiscontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "bulk_put_content", "arguments": {"site": "texte", "content": [], "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - claim_site≈ 224 tokens
Move the guest draft onto your signed-in Dotsy account. Requires OAuth Connect; pass the guestToken from start_site.
Paramètres, retour & exemple (2)
Paramètrescontext· string · requis
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· string · requis
Guest token from start_site (required). Pass the pgg_ value returned by start_site.
Exemple d'appel{"name": "claim_site", "arguments": {"context": "texte", "guestToken": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - create_site≈ 484 tokens
Create empty site; seeds brief. Globally taken slugs auto-suffix to `{slug}-{adjective}-{noun}` (default); pass onSlugTaken:"fail" to get a 409 instead of a renamed site.
Paramètres, retour & exemple (9)
Paramètresslug· string · requistitle· string · optionnelcontext· string · requis
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.purpose· string · optionnelworkspace· string|null · optionnel
Workspace org id or slug (see get_account_context memberships). Only for multi-workspace users; omit otherwise. Ignored for pga_ keys (fixed workspace).guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.editingMode· string · optionnel · live | staged
How the editor's Save behaves. 'live' (default) publishes each save immediately; 'staged' keeps saves as drafts until publish_site. Prefer 'staged' when an agent will hand the editor to a person (see start_edit_session → draftEditorUrl) so keystrokes don't go straight to the public site. API writes always stage regardless of this setting.onSlugTaken· string · optionnel · fail | auto-suffix | mergekeyConvention· string · optionnel · flat | directory
Exemple d'appel{"name": "create_site", "arguments": {"slug": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - decompose_analyze≈ 412 tokens
Deprecated — use structure_site_analyze.
Paramètres, retour & exemple (9)
Paramètresfull· boolean · optionnel
Return the full manifest incl. per-page HTML samples (default: compacted — etag/action/counts kept, samples truncated — to fit the token budget).site· string · requis
Site slug, e.g. acme-studioscope· string · optionnel · flat-only | all
Default flat-only; analyze clusters flat keys only.context· string · requis
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.persist· boolean · optionnel
First call: false (preview only). true only after user confirms editable/CMS mode.profileId· string · optionnel · webflow | wordpress | generic | framerguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.sampleLimit· integer · optionnelrefreshManifest· boolean · optionnel
Replace persisted manifest when true.
Exemple d'appel{"name": "decompose_analyze", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_asset≈ 322 tokens
Delete a static asset by key. The editor and draft preview drop it at once; the published site drops it at the next publish.
Paramètres, retour & exemple (4)
Paramètreskey· string · requis
Path after /assets/ on the site — e.g. photos/hero.webp or style.css. Do not prefix with assets/ or /. Uploaded files are live in the editor and draft preview at once; the published site picks them up at the next publish.site· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "delete_asset", "arguments": {"key": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_content≈ 270 tokens
Delete content key (tombstone if published). A fragments/* section that pages still place is refused with section_in_use (lists the pages) — detach it or remove it first.
Paramètres, retour & exemple (4)
Paramètreskey· string · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "delete_content", "arguments": {"key": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_draft_test≈ 256 tokens
Remove a draft A/B test (releases variant bodies; does not publish).
Paramètres, retour & exemple (4)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.experimentId· string · requis
Exemple d'appel{"name": "delete_draft_test", "arguments": {"site": "texte", "context": "texte", "experimentId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_menu_item≈ 257 tokens
Remove one item from a menu (page stays live).
Paramètres, retour & exemple (5)
Paramètresid· string · requismenu· string · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "delete_menu_item", "arguments": {"id": "texte", "menu": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_route≈ 233 tokens
Remove a route by path.
Paramètres, retour & exemple (4)
Paramètrespath· string · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "delete_route", "arguments": {"path": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - delete_site≈ 244 tokens
Permanently delete site; confirmSlug must equal slug.
Paramètres, retour & exemple (4)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.confirmSlug· string · requis
Exemple d'appel{"name": "delete_site", "arguments": {"site": "texte", "context": "texte", "confirmSlug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - detach_section≈ 436 tokens
Give one page its own copy of a shared section; every other page keeps the shared one. A draft — publish_site to go live. A section the layout places is hidden on that page instead (share_section name + hide).
Paramètres, retour & exemple (7)
Paramètresname· string · requis
Section name. Its file is fragments/<name>.html, placed with <dotsy-fragment name="<name>">.site· string · requis
Site slug, e.g. acme-studiodryRun· boolean · optionnel
Default true: report what would change and write nothing. false: stage the change as a draft (publish_site makes it live).context· string · requis
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.ifMatch· string · optionnel
The page's content hash. If the page changed since, nothing is written.pageKey· string · requis
Content key of the page that gets its own copy, e.g. 'pricing.html'.guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "detach_section", "arguments": {"name": "texte", "site": "texte", "context": "texte", "pageKey": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - discard_drafts≈ 305 tokens
Discard unpublished drafts: all (omit key/keys/routes), one content key (key), or a selection (keys, routes). Destructive — check get_draft_status first.
Paramètres, retour & exemple (6)
Paramètreskey· string · optionnelkeys· array · optionnelsite· string · requis
Site slug, e.g. acme-studioroutes· array · optionnelcontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "discard_drafts", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - edit_page≈ 195 tokens
Open the interactive page canvas to change content: the user clicks an element, then you call patch_content. Use when the intent is editing — not for verify-only checks (use preview_page).
Paramètres, retour & exemple (3)
Paramètrespath· string · optionnel
Route path (default /).site· string · requis
Site slug.stage· string · optionnel · draft | published
Preview stage. Default draft; published is planned but not supported yet.
Exemple d'appel{"name": "edit_page", "arguments": {"site": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - estimate_test≈ 260 tokens
Estimate days to reach promote readiness for a page (traffic baseline). Read-only.
Paramètres, retour & exemple (4)
Paramètrespath· string · requis
Route path, e.g. /pricingsite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "estimate_test", "arguments": {"path": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - find_replace≈ 328 tokens
Case-insensitive find→replace across pages in one staged commit. Batch all replacements into ONE call — never parallelize find_replace on the same key (concurrent edits surface as per-key conflict). find/replace ≤60KB.
Paramètres, retour & exemple (7)
Paramètresfind· string · requiskeys· array · optionnelsite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.replace· string · requisguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.expectPerKey· integer · optionnel
Exemple d'appel{"name": "find_replace", "arguments": {"find": "texte", "site": "texte", "context": "texte", "replace": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_account_context≈ 275 tokens
Account, user, memberships[]. Pass workspace on writes when memberships.length > 1.
Paramètres, retour & exemple (3)
Paramètrescontext· string · requis
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.workspace· string|null · optionnel
Workspace org id or slug (see get_account_context memberships). Only for multi-workspace users; omit otherwise. Ignored for pga_ keys (fixed workspace).guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_account_context", "arguments": {"context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_activity≈ 443 tokens
List site activity or fetch one change diff (pass id). Filters: who, state, actor (me), since, limit≤20. Notes from context are visible to everyone on the site — no secrets.
Paramètres, retour & exemple (10)
Paramètresid· string · optionnel
Event id — returns diff for this change instead of the list.key· string · optionnel
Content key when id is set (default first key in the event).who· string · optionnel · all | people | agents
Default all.slug· string · requis
Site slug, e.g. acme-studioactor· string · optionnel
Actor id or me.limit· integer · optionnel
Page size (default 20).since· string · optionnel
ISO date (default 7 days, plan retention floor).state· string · optionnel · needs_review | reverted
needs_review = agent drafts awaiting a person's publish.context· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_activity", "arguments": {"slug": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_adapt_status≈ 260 tokens
Read adapt state: proposal summary + proposalEtag (+ applied/consumed flag), undo-record presence, active or queued job progress. Use to resume in a fresh session.
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_adapt_status", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_analytics≈ 410 tokens
Read-only traffic overview (default) or full breakdowns via include[]; optional bot id for crawler page drill-down.
Paramètres, retour & exemple (6)
Paramètresbot· string · optionnel
Crawler bot id (e.g. googlebot, gptbot) → that bot's top crawled pages under `crawlerBotPages`.site· string · requis
Site slug, e.g. acme-studiorange· string · optionnel · 7d | 30d | 90d
Time window; default 30d.context· string · requis
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.include· array · optionnel
Full breakdown sections to add under `detail`: pages, sources, countries, devices, browsers, os, utm, goals, series, crawlers, experiments, events — or 'all'. Omit for the overview only.guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_analytics", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_asset≈ 355 tokens
Read one asset (metadata + base64 + stored sha256). sha256 is the stored blob; may differ from upload bodySha256 when IMAGES re-encodes rasters. Uploaded files are live in the editor and draft preview at once; the published site picks them up at the next publish.
Paramètres, retour & exemple (4)
Paramètreskey· string · requis
Path after /assets/ on the site — e.g. photos/hero.webp or style.css. Do not prefix with assets/ or /. Uploaded files are live in the editor and draft preview at once; the published site picks them up at the next publish.site· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_asset", "arguments": {"key": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_content≈ 292 tokens
Read one content key; optional selector (region) or published=true (live body). Bodies over 40KB without a selector return a truncated summary — use selector, batch_patch_content, or dotsy pull.
Paramètres, retour & exemple (6)
Paramètreskey· string · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.selector· string · optionnelpublished· boolean · optionnelguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_content", "arguments": {"key": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_custom_domain_connect≈ 271 tokens
Current connect session and nextAction (browser URL or manual DNS guide).
Paramètres, retour & exemple (4)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.sessionId· string · optionnel
Connect session id from add_custom_domain; omit to resume pending.guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_custom_domain_connect", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_draft_status≈ 251 tokens
Pending draft changes: content keys and routes with status. May include requiredDecision (publish_confirm) before publish_site.
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_draft_status", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_form_submission≈ 274 tokens
Read one form submission with the full field payload (explicit PII access — use only when needed).
Paramètres, retour & exemple (4)
Paramètresid· string · requis
Submission id from list_form_submissionssite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_form_submission", "arguments": {"id": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_menu≈ 246 tokens
Read a menu's draft items and etag; menu rules → get_skill('nav').
Paramètres, retour & exemple (4)
Paramètresmenu· string · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_menu", "arguments": {"menu": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_menu_doc≈ 314 tokens
Read the whole menu doc (all menus + shell/template), etag for put_menu_doc, and issues (by item id) — page_not_routable, page_missing, page_dead_link, page_is_redirect — computed from the draft routes, so a link that won't show or leads nowhere shows up before publish.
Paramètres, retour & exemple (4)
Paramètressite· string · requis
Site slug, e.g. acme-studiosource· string · optionnel · draft | live
Which doc to read. Default draft.context· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_menu_doc", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_route≈ 235 tokens
Get one route by path (home is '/').
Paramètres, retour & exemple (4)
Paramètrespath· string · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_route", "arguments": {"path": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_site≈ 375 tokens
Site detail, stats, publicUrl, brief head (default-on), and readiness flags. pages[] is a ~25-entry head by default (stats.pages has the true count) — pass pages: true for the full array (capped at 1000), or enumerate everything with list_content/get_site_manifest. Large sites (200+ pages): list_pages is paginated — use cursor or get_site_manifest for the full route set.
Paramètres, retour & exemple (5)
Paramètressite· string · requis
Site slug, e.g. acme-studiobrief· boolean · optionnel
Include parsed brief head (default true).pages· boolean · optionnel
Return the full pages[] array instead of the default ~25-entry head (server-capped at 1000 either way). Default false.context· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_site", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_site_build_progress≈ 162 tokens
Read-only build progress for humans (build-theater view) during structure/adapt or after import. Agent reads structuredContent.forHumans — optional; do not call in a loop during import_site_from_url (that tool blocks until done). Prefer get_site for agent logic.
Paramètres, retour & exemple (1)
Paramètressite· string · requis
Site slug.
Exemple d'appel{"name": "get_site_build_progress", "arguments": {"site": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_site_manifest≈ 307 tokens
Content keys + hashes only (optional routes=true) — static files live in list_assets, not manifest. Diff keys+hashes before apply_changeset; stage only changed bodies.
Paramètres, retour & exemple (7)
Paramètresmode· string · optionnel · published | draftsite· string · requis
Site slug, e.g. acme-studiolimit· integer · optionnelcursor· string · optionnelroutes· boolean · optionnelcontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_site_manifest", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_site_outline≈ 344 tokens
Site shape: every layout and shared section (`sections`: fragments/* by name, with page count, whether the file exists and staged-change flag), whether a layout is missing, redirects count, menus grouped by where they show, and collections with their page placements. Use for 'is my layout missing', 'which shared sections exist and where', 'where does this menu show' — without listing every page. Read-only; indexing mirrors list_pages (a freshly imported/graduated site may still be indexing).
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_site_outline", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_skill≈ 221 tokens
Skill body + optional questions[]. Accepts an id OR a synonym (e.g. 'list', 'menu') — resolves aliases and suggests near-misses. Start with intake when ambiguous.
Paramètres, retour & exemple (2)
Paramètresid· string · requis
Skill id or synonym from list_skills, e.g. intake, clone, list, menucontext· string · requis
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.
Exemple d'appel{"name": "get_skill", "arguments": {"id": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_structure_result≈ 269 tokens
Last structure apply job result (structuredKeys, conflicts, partial).
Paramètres, retour & exemple (4)
Paramètresfull· boolean · optionnel
Return the full manifest/detail (default: compacted for the token budget).site· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_structure_result", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_structure_status≈ 248 tokens
Flat vs structured page counts; informs user — do not auto-run analyze/apply while requiredDecision pending.
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "get_structure_status", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - graduate_site≈ 588 tokens
Enable site search & collections (kv → do-sqlite), one-way. Unlocks search_content, collection indexes, visitor /__paige/search, and moves any R2 form-submission ledger into SiteDb. 409 blocked covers three unrelated gates: an unsupported source backend (no override, ever); strictDrafts — default true, this client sends true unless you pass strictDrafts:false — blocking on unpublished drafts or unrecovered KV content rows; or a KV snapshot that looks incomplete (e.g. a page deleted in the last couple of minutes). force:true overrides ONLY that last, incomplete-snapshot gate — never the backend or strictDrafts gates. The blocked response's `reason` names which gate fired, and `audit` (+ `audit.warnings`) is aggregate COUNTS only (published/route/pending-draft counts) — never row keys — so judge the size of the gap, not a row list, before forcing. The flip is one-way: anything outside the frozen snapshot is unreachable once it lands.
Paramètres, retour & exemple (5)
Paramètressite· string · requis
Site slug, e.g. acme-studioforce· boolean · optionnel
Proceed past the incomplete-KV-snapshot 409 only — not the unsupported-backend or strictDrafts blocks, which force does nothing for. Read the blocked response's `reason` + `audit` first; the flip is one-way, so rows outside the snapshot are unreachable afterwards. Default false.context· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.strictDrafts· boolean · optionnel
Block on unpublished drafts or unrecovered KV content rows (default true — publish/discard first, or pass false to proceed anyway).
Exemple d'appel{"name": "graduate_site", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - import_site_from_url≈ 708 tokens
Import URL to draft. On complete, response may include requiredDecision — preview then ask mirror vs editable before structure_*.
Paramètres, retour & exemple (10)
Paramètresmode· string · optionnel · auto | mirror | render
Default auto — per-page mirror with silent render escalationsite· string · requis
Site slug, e.g. acme-studiopages· array · optionnel
Explicit page list; omit to import sourceUrl as index.htmlcontext· string · requis
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.segments· array · optionnel
Split-origin segments — each expands into pages by fetching its own `sitemap`. A segment without `sitemap` imports only its pathPrefix hub page (with a warning), not the whole prefix.sourceUrl· string · requisworkspace· string|null · optionnel
Workspace org id or slug (see get_account_context memberships). Only for multi-workspace users; omit otherwise. Ignored for pga_ keys (fixed workspace).guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.onSlugTaken· string · optionnel · fail | auto-suffix | mergekeyConvention· string · optionnel · flat | directory
Content key shape: directory = Astro dist (about/index.html); default flat
Exemple d'appel{"name": "import_site_from_url", "arguments": {"site": "texte", "context": "texte", "sourceUrl": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - inspect_collection≈ 573 tokens
Collection state — count, server.mode, sample entries, tag (membershipKind, match=) when discovered; plus name, noun, URL pattern, layout, where it's listed, and post fields used. Pass status/q/cursor/limit (any one, even empty) for a full items[] page instead: status draft = never published; a published post with unpublished edits is status published with hasChanges:true (never draft) and shows its staged title/date/tags/author; scheduled = future visibleAt. Never-published drafts come from staged content (no extra reads, no publish needed to see them); published/scheduled come from the index. limit defaults to 50, clamped 1-200. Omit all four for just the base inspect (no items[]).
Paramètres, retour & exemple (8)
Paramètresq· string · optionnel
Case-insensitive title search within items[].site· string · requis
Site slug, e.g. acme-studiolimit· integer · optionnel
Items per page (default 50, max 200).cursor· string · optionnel
Resume from a prior response's nextCursor.prefix· string · requis
Collection id or prefix, e.g. "posts" or "blog/" — use the key exactly as list_collections returned it.status· string · optionnel · all | published | scheduled | draft
Filter items[] by status (see the tool description for what each means). Providing this (or q/cursor/limit) is what makes the response include items[].context· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "inspect_collection", "arguments": {"site": "texte", "prefix": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_assets≈ 304 tokens
CMS uploads under assets/ only — not mirrored clone CDN (get_site mirroredAssets or import warmJob). Not content — use list_content. Uploaded files are live in the editor and draft preview at once; the published site picks them up at the next publish.
Paramètres, retour & exemple (5)
Paramètressite· string · requis
Site slug, e.g. acme-studiolimit· integer · optionnelcursor· string · optionnelcontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "list_assets", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_collections≈ 292 tokens
Collections on the site — name, noun, item count (or 'not published yet'), URL pattern, and whether any member is staged. Includes a collection only a draft page lists. Returns a bare array (not wrapped in an object) — pass each row's key verbatim to inspect_collection/update_collection.
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "list_collections", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_content≈ 447 tokens
List content keys (HTML/md); not assets — use list_assets. Defaults to 50 keys per page — raise limit (max 1000) or pass cursor (from nextCursor) to page through the rest. Per-row `size`/`missing` are measured automatically only on pages of ≤100 rows; past that they're ABSENT (not measured, never `null`) unless you pass withSize:true, which forces measurement at a cost of one storage read per returned row. Only `size: null` + `missing: true` means the page's stored bytes are gone.
Paramètres, retour & exemple (6)
Paramètressite· string · requis
Site slug, e.g. acme-studiolimit· integer · optionnel
Keys per page (default 50, max 1000).cursor· string · optionnel
Resume from a prior response's nextCursor.context· string · requis
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.withSize· boolean · optionnel
Force size/missing measurement on a page bigger than 100 rows (costs one storage read per returned row). Default false — rows in a ≤100-row page are measured either way.guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "list_content", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_custom_domains≈ 237 tokens
List all custom hostnames and connection status for the site.
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "list_custom_domains", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_form_submissions≈ 334 tokens
List form submissions (metadata + bounded field preview — not full PII). Works on kv and do-sqlite backends.
Paramètres, retour & exemple (9)
Paramètresq· string · optionnel
Search reply-to email (indexed)form· string · requis
Form id from dotsy-config, e.g. contactsite· string · requis
Site slug, e.g. acme-studiotoMs· integer · optionnellimit· integer · optionnelcursor· string · optionnelfromMs· integer · optionnelcontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "list_form_submissions", "arguments": {"form": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_goals≈ 240 tokens
List site conversion goals (pageview paths and form submits). Required before start_test.
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "list_goals", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_my_sites≈ 219 tokens
List your Dotsy sites. Renders a site-picker for humans; agent reads structuredContent. Use to choose a site — not for editing content (use edit_page) or verify-only checks (use preview_page). Defaults to your active workspace; pass workspace (org id or slug from get_account_context memberships) to list another workspace's sites without switching the dashboard session.
Paramètres, retour & exemple (1)
Paramètresworkspace· string|null · optionnel
Workspace org id or slug (see get_account_context memberships). Only for multi-workspace users; omit otherwise. Ignored for pga_ keys (fixed workspace).
Exemple d'appel{"name": "list_my_sites", "arguments": {"workspace": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_pages≈ 483 tokens
List pages on a site — route settings (path/title/navLabel/purpose) by default, one row per route. Renders a page-picker for humans (redirect and worker routes left out there — nothing to open in edit_page); agent reads structuredContent. Use after picking a site — not for editing (use edit_page) or verify-only checks (use preview_page). Pass view:'pages' to group by layout instead — adds layout/noLayout/q filters, what each page places, and indexing progress; use that for 'what pages use this layout' or 'is this page indexed yet', not for route settings. Paginated — pass cursor (from nextCursor) for more; partial:true means this page is a window, not the full route set.
Paramètres, retour & exemple (7)
Paramètresq· string · optionnel
Only with view:'pages'. Case-insensitive substring match on path or title.site· string · requis
Site slug.view· string · optionnel · pages
pages: group by layout — enables layout/noLayout/q below, adds page-structure fields and indexing progress. Omit for the default per-route listing.limit· integer · optionnel
Pages per page (server default applies when omitted).cursor· string · optionnel
Resume from a prior response's nextCursor.layout· string · optionnel
Only with view:'pages'. Layout file key (e.g. layouts/store.html, or bare 'store') — only pages using it. Exclusive with noLayout.noLayout· boolean · optionnel
Only with view:'pages'. Only pages with no layout (routeless keys included). Exclusive with layout.
Exemple d'appel{"name": "list_pages", "arguments": {"site": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_skills≈ 175 tokens
Paige build skills (id + whenToUse). Pull get_skill on demand — do not duplicate in tool text.
Paramètres, retour & exemple (1)
Paramètrescontext· string · requis
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.
Exemple d'appel{"name": "list_skills", "arguments": {"context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - new_post_template≈ 340 tokens
Read-only scaffold for a new post — suggested key/path, membership meta, blank or duplicate body. Then put_post (+ optional put_route).
Paramètres, retour & exemple (6)
Paramètresmode· string · optionnel · blank | duplicate
blank (default) or duplicate full bodysite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.collection· string · requis
Collection id or prefix, e.g. "posts" or "blog/"guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.templateKey· string · optionnel
Exemplar content key; default = most recent member
Exemple d'appel{"name": "new_post_template", "arguments": {"site": "texte", "context": "texte", "collection": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - patch_content≈ 508 tokens
Edit one content key via ops[] (selector ops or replace-string; wrap/unwrap/move restructure siblings). Stages draft; op shapes in schema.
Paramètres, retour & exemple (5)
Paramètreskey· string · requisops· array · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "patch_content", "arguments": {"key": "texte", "ops": [], "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - patch_route≈ 1417 tokens
Partial route update (only sent fields change; an OMITTED field is left alone). On a field that accepts null (contentKey, redirectTo, redirectStatus, preserveQuery), sending null CLEARS it back to its default — different from omitting it. To set redirectTo/redirectStatus, include purpose: "redirect" in the SAME call — the check looks only at what's sent, not the route's stored purpose, so a PATCH that sets redirectTo without repeating purpose: "redirect" (even on a route that's already a redirect) 400s invalid_body.
Paramètres, retour & exemple (16)
Paramètresnav· ? · optionnel
DEPRECATED — use put_menu_item / menu API. Menu memberships on the route row. Still accepted during transition and synced to menu items. See get_skill('nav').path· string · requissite· string · requis
Site slug, e.g. acme-studiovars· ? · optionneltitle· string|null · optionnellayout· string|null · optionnel
Layout NAME, bare: "default" for layouts/default.html — not the file key. It must already exist as layouts/<name>.html (400 layout_not_found otherwise). null removes the layout.context· string · requis
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.noindex· boolean|null · optionnel
Exclude from sitemap/RSS; inject noindex meta (0.69).purpose· string|null · optionnelnavLabel· string|null · optionnel
DEPRECATED — use put_menu_item / menu API. Menu link text for <dotsy-nav> (separate from title). Still accepted during transition and synced to menu items.contentKey· ? · optionnel
Explicit content key (defaults to a path-derived key when omitted). null clears an explicit key back to that path default — same as omitting it, but usable on a PATCH to undo a prior set.experiment· ? · optionnelguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.redirectTo· ? · optionnel
Redirect target, a root-relative path (/…). Required when purpose is "redirect". null clears it — only valid once purpose stops being "redirect" (a redirect route always needs a target).preserveQuery· boolean|null · optionnel
Append the visitor's original query string to the redirect target (default true on a redirect). null clears an explicit override.redirectStatus· ? · optionnel
301 permanent / 302 or 308 temporary (default 301 on a redirect). null clears an explicit override.
Exemple d'appel{"name": "patch_route", "arguments": {"path": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - preflight_site≈ 313 tokens
Plan check before publish or large build (counts, route soft limit, seo suggestions). When ok is false, blocking lists the failed suggestion codes. Read-only.
Paramètres, retour & exemple (5)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.requiredAssets· integer · optionnel
How many assets you plan to uploadrequiredRoutes· integer · optionnel
How many routes you plan to add
Exemple d'appel{"name": "preflight_site", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - preview_page≈ 379 tokens
Verify-only composed HTML check; home preview may include requiredDecision — ask mirror vs editable before structure_*.
Paramètres, retour & exemple (8)
Paramètrespath· string · optionnelsite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.variant· string · optionnel
A/B variant arm to compose (e.g. "b") — same as ?dotsy-variant= on the public URL.contains· array · optionnel
Assert substrings present in composed HTML.selector· string · optionnel
Return matched elements only (tag/attrs/text).guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.notContains· array · optionnel
Assert absent — e.g. `<dotsy-` for unresolved template tags.
Exemple d'appel{"name": "preview_page", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - promote_experiment≈ 313 tokens
Promote a winning A/B variant to live — explicit user instruction only; see get_skill('verify') § A/B.
Paramètres, retour & exemple (6)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.variantId· string · requis
Winning variant arm id (usually "b").guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.experimentId· string · requisloserDisposition· string · optionnel · discard | keep_draft
Exemple d'appel{"name": "promote_experiment", "arguments": {"site": "texte", "context": "texte", "variantId": "texte", "experimentId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - publish_site≈ 743 tokens
Publish draft to live. feedback and handoff required (use dummy feedback + one-line handoff if clean).
Paramètres, retour & exemple (8)
Paramètressite· string · requis
Site slug, e.g. acme-studiopages· array · optionnel
Publish only these pages — use when a publish returns rules_not_fully_checked; publish the rest in further batches (≤50 route paths, e.g. /pricing).context· string · requis
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.handoff· string · requis
One sentence: decisions, preferences, or open threads for the next session (appended to the brief).feedback· object · requis
Required. Canonical dummy OK on friction-free sessions; tool intents attached automatically.guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.acknowledgeSeoWarnings· boolean · optionnel
Required when brief.priorities.seo is must and verify_page reported SEO errors (not warnings). User must have explicitly chosen to publish despite errors.confirmedDraftFingerprint· string · optionnel
Required when get_draft_status returned requiredDecision (publish_confirm). Must match the current draft fingerprint from get_draft_status.
Exemple d'appel{"name": "publish_site", "arguments": {"site": "texte", "context": "texte", "handoff": "texte", "feedback": {}}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - put_content≈ 350 tokens
Stage one content key. Body ≤60KB. Larger pages: stage_content_chunk + apply_changeset bodyStaging, dotsy push, or PUT content-raw. Edits to an existing large page: batch_patch_content.
Paramètres, retour & exemple (6)
Paramètreskey· string · requis
Content key: a page (about.html, blog/post.html), a layout (layouts/<name>.html) or a fragment (fragments/<name>.html). A <dotsy-fragment name> tag and a route's layout use the bare name, not the key.body· string · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.contentType· string · optionnel
Exemple d'appel{"name": "put_content", "arguments": {"key": "texte", "body": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - put_goals≈ 563 tokens
Create or replace all site conversion goals (≤50). Required before start_test when no goal exists.
Paramètres, retour & exemple (4)
Paramètressite· string · requis
Site slug, e.g. acme-studiogoals· array · requiscontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "put_goals", "arguments": {"site": "texte", "goals": [], "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - put_menu_doc≈ 534 tokens
Replace the whole menu doc (ifMatch from get_menu_doc required). Each item may omit menu — the enclosing menu key in doc is used.
Paramètres, retour & exemple (5)
Paramètresdoc· object · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.ifMatch· string · requis
Whole-doc etag from get_menu_doc. Required (sent as If-Match).guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "put_menu_doc", "arguments": {"doc": {}, "site": "texte", "context": "texte", "ifMatch": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - put_menu_item≈ 483 tokens
Partial upsert one menu item: provided fields overwrite; omitted html/childTemplate/childShell/attrs/data are preserved. To remove those keys, use put_menu_doc. A brand-new id dedupes by (menu, ref) — reuses an existing item linking the same target instead of creating a duplicate. An id that already names an item always updates that exact item, even if another item links the same page.
Paramètres, retour & exemple (16)
Paramètresid· string · requisref· string · requisdata· object · optionnelhtml· string · optionnelkind· string · requis · page | url | anchor | mailto | groupmenu· string · requissite· string · requis
Site slug, e.g. acme-studiosort· integer · requisattrs· object · optionnellabel· string · requisnewTab· boolean · optionnelparent· string|null · requiscontext· string · requis
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.childShell· string|null · optionnelguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.childTemplate· string · optionnel
Exemple d'appel{"name": "put_menu_item", "arguments": {"id": "texte", "ref": "texte", "kind": "page", "menu": "texte", "site": "texte", "sort": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - put_post≈ 523 tokens
Stage a blog post via structured meta+body (?format=post). Key e.g. blog/my-post.html. Declared membership: meta.collections; schedule: meta.visibleAt; SEO title override: meta.seoTitle (card always shows meta.title); custom fields: meta.custom.
Paramètres, retour & exemple (7)
Paramètreskey· string · requisbody· string · requishead· array · optionnelmeta· object · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "put_post", "arguments": {"key": "texte", "body": "texte", "meta": {}, "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - put_route≈ 1333 tokens
Create/replace route; contentKey derived from path if omitted. On a field that accepts null (contentKey, redirectTo, redirectStatus, preserveQuery), sending null clears it back to its default.
Paramètres, retour & exemple (16)
Paramètresnav· ? · optionnel
DEPRECATED — use put_menu_item / menu API. Menu memberships on the route row. Still accepted during transition and synced to menu items. See get_skill('nav').path· string · requissite· string · requis
Site slug, e.g. acme-studiovars· ? · optionneltitle· string|null · optionnellayout· string|null · optionnel
Layout NAME, bare: "default" for layouts/default.html — not the file key. It must already exist as layouts/<name>.html (400 layout_not_found otherwise). null removes the layout.context· string · requis
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.noindex· boolean|null · optionnel
Exclude from sitemap/RSS; inject noindex meta (0.69).purpose· string|null · optionnelnavLabel· string|null · optionnel
DEPRECATED — use put_menu_item / menu API. Menu link text for <dotsy-nav> (separate from title). Still accepted during transition and synced to menu items.contentKey· ? · optionnel
Explicit content key (defaults to a path-derived key when omitted). null clears an explicit key back to that path default — same as omitting it, but usable on a PATCH to undo a prior set.experiment· ? · optionnelguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.redirectTo· ? · optionnel
Redirect target, a root-relative path (/…). Required when purpose is "redirect". null clears it — only valid once purpose stops being "redirect" (a redirect route always needs a target).preserveQuery· boolean|null · optionnel
Append the visitor's original query string to the redirect target (default true on a redirect). null clears an explicit override.redirectStatus· ? · optionnel
301 permanent / 302 or 308 temporary (default 301 on a redirect). null clears an explicit override.
Exemple d'appel{"name": "put_route", "arguments": {"path": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - reapply_custom_domain_oauth≈ 239 tokens
Re-apply DNS with stored Cloudflare OAuth grant (no browser).
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "reapply_custom_domain_oauth", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - refresh_custom_domain≈ 262 tokens
Poll one hostname until DNS/cert propagates.
Paramètres, retour & exemple (4)
Paramètreshost· string · requis
Hostname to refresh, e.g. www.example.comsite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "refresh_custom_domain", "arguments": {"host": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - reindex_collection≈ 248 tokens
Build/finish collection indexes after publish returns collectionDataPending or collectionSqlPending.
Paramètres, retour & exemple (3)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "reindex_collection", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - remove_custom_domain≈ 255 tokens
Remove one custom hostname from the site.
Paramètres, retour & exemple (4)
Paramètreshost· string · requis
Hostname to removesite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "remove_custom_domain", "arguments": {"host": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - rename_content≈ 546 tokens
Re-key a page by slug (draft or published static). Server-side hash copy — no body round-trip. Default deletes static routes (obscure-URL); movePath:true repoints the route, rewrites menu refs and other redirects aimed at the old path, and — only for an already-PUBLISHED page — leaves a 301 there too (leaveRedirect, default true; no effect on a never-published page, or when movePath is false). Retry-safe: a part-way failure (409 rename_failed) rolls everything back, so resend the same call. On fragments/<name>.html it also rewrites every <dotsy-fragment name> reference and hide marker in the same all-or-nothing commit. Then publish_site.
Paramètres, retour & exemple (7)
Paramètreskey· string · requis
Current content key, e.g. dashboard.htmlsite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.newSlug· string · requis
New filename stem; directory prefix preserved (blog/foo → blog/bar)movePath· boolean · optionnel
false (default): delete routes bound to old key. true: move static route path to match slug.guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.leaveRedirect· boolean · optionnel
With movePath:true on an already-published page, leave a 301 at the old path (default true). false removes the old path outright — old links break. No effect when movePath is false, or on a page that was never published.
Exemple d'appel{"name": "rename_content", "arguments": {"key": "texte", "site": "texte", "context": "texte", "newSlug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - rename_page≈ 536 tokens
Change a page's URL: moves its route from `from` to `to`. Menu links and other redirects that pointed at the old path retarget automatically; a 301 is left at the old path by default (leaveRedirect). Retry-safe (resend the same call after any error). Errors: 404 route_not_found (from isn't a route); 400 reserved_route (to is under /__dotsy/) or invalid_body (missing/malformed from or to); 422 rename_same_path (from equals to already), rename_pattern_route (from or to contains a :param segment — pattern routes can't be renamed this way), rename_redirect_route (from is itself a different redirect — edit its redirectTo instead); 409 rename_experiment_running (an A/B test is running on from — end it first) or rename_target_exists (to is already a different route — unless to already serves the exact content from would, which is treated as already done and returns 200). Then publish_site.
Paramètres, retour & exemple (6)
Paramètresto· string · requis
New route path, e.g. /new-pagefrom· string · requis
Current route path, e.g. /old-pagesite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.leaveRedirect· boolean · optionnel
Leave a 301 from the old path to the new one (default true). false removes the old path outright — old links break.
Exemple d'appel{"name": "rename_page", "arguments": {"to": "texte", "from": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - rename_site≈ 391 tokens
Rename the site slug (public hostname {slug}.dotsy.site). Owner-only. After success: use the returned slug in every later tool. Published site: the old slug redirects on the API (301 for reads, 308 for writes) while it stays reserved; the old host 301s and stays reserved until delete or rename-back. Never published: the old slug 404s on the API and the old hostname is released (no 301; create_site can reuse it). Analytics history stays on the old slug. HTML absolute URLs are not rewritten — publish_site refreshes sitemap; find_replace if stored HTML must change.
Paramètres, retour & exemple (4)
Paramètressite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.newSlug· string · requis
New site slug (lowercase hostname stem)guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "rename_site", "arguments": {"site": "texte", "context": "texte", "newSlug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - reorder_menu≈ 286 tokens
Set final menu order. Pass ifMatch from get_menu; stale → 409 with current items.
Paramètres, retour & exemple (6)
Paramètresmenu· string · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.ifMatch· string · optionnelguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.orderedIds· array · requis
Exemple d'appel{"name": "reorder_menu", "arguments": {"menu": "texte", "site": "texte", "context": "texte", "orderedIds": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - revert_change≈ 346 tokens
Undo one activity event by staging the prior version as draft only — call publish_site to go live. Respects AI access.
Paramètres, retour & exemple (6)
Paramètresid· string · requis
Activity event id from get_activity.keys· array · optionnel
Undo only these keys of the change. Default: every key.slug· string · requis
Site slug, e.g. acme-studioreason· string · optionnel
Why — shown next to 'Reverted by …'. Visible to everyone on the site.context· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "revert_change", "arguments": {"id": "texte", "slug": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - search_content≈ 273 tokens
Find pages containing a phrase (grep without reading bodies). Requires do-sqlite — graduate_site first if search_unavailable.
Paramètres, retour & exemple (5)
Paramètresq· string · requissite· string · requis
Site slug, e.g. acme-studiolimit· integer · optionnelcontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "search_content", "arguments": {"q": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - set_experiment_note≈ 302 tokens
Record what was learned from an ended A/B test (≤500 chars; null clears).
Paramètres, retour & exemple (5)
Paramètresnote· ? · requis
The learning, in plain words (≤500 chars, multiline ok) — null clears it.site· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.experimentId· string · requis
Exemple d'appel{"name": "set_experiment_note", "arguments": {"note": "texte", "site": "texte", "context": "texte", "experimentId": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - set_primary_custom_domain≈ 268 tokens
Set the canonical host (301 target) when multiple hostnames are connected.
Paramètres, retour & exemple (4)
Paramètreshost· string · requis
Connected hostname to make primarysite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "set_primary_custom_domain", "arguments": {"host": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - share_section≈ 1077 tokens
Make a block that repeats on several pages one shared section, or change where one shows. No arguments: lists blocks repeated on 3+ pages. sourceKey + selector (or selectors: a sibling run, one wrapper): a dry run finds every page with it; dryRun:false shares it. name + scope/hide/show: move an existing section to/from every page, or hide/show it per page. Over the per-call cap (too_many_pages, nothing written): share with keys, then again under the same name from a page that still has a copy; for every page then move with name + scope every_page + keys (max-1 pages a call; put all hide on the first) until all are moved. Always a draft (publish_site to go live; undo: revert_change).
Paramètres, retour & exemple (16)
Paramètreshide· array · optionnel
every_page: pages that should not show it (they keep their own copy). Send them with the first move, never later.keys· array · optionnel
Pages with an exact copy to share it on (analyze's matches.keys). Omit for every exact copy. The source page is always included.name· string · optionnel
With sourceKey + selector: the new section's name (default: proposed). Alone: the existing section to re-place.show· array · optionnel
Pages that should show it again (removes their marker).site· string · requis
Site slug, e.g. acme-studioscope· string · optionnel · where_found | every_page
where_found: each page that has it gets a reference. every_page: one slot in the layout, at the top or bottom of the page content; pages listed in `hide` don't show it.dryRun· boolean · optionnel
Default true: report what would change and write nothing. false: stage the change as a draft (publish_site makes it live).context· string · requis
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.ifMatch· string · optionnel
The page's content hash (analyze's sourceEtag). If the page changed since, nothing is written.similar· array · optionnel
Pages with a similar copy (analyze's similar.keys) that take the shared version, losing their own wording. Default none.wrapTag· string · optionnel · div | section | footer | header | article | aside
With selectors: the wrapper. Default footer when the run ends the page content, else section.selector· string · optionnel
CSS selector of the element in the page's stored HTML (the editor's selector, or one checked with get_content?selector=). It must match exactly one element.selectors· array · optionnel
Instead of selector: a run of elements next to each other in one parent, in page order (each matches one element). Shared as one section inside a wrapper, on the pages with the same run.sourceKey· string · optionnel
Content key of the page the element is on, e.g. 'about.html'.guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.keepLayout· boolean · optionnel
With selectors: wrapper gets style="display:contents" so a flex/grid parent lays the run out as before. Default true.
Exemple d'appel{"name": "share_section", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - stage_content_chunk≈ 336 tokens
Append one ≤60KB chunk of a large new page. Omit stagingId on seq 0; pass the returned stagingId on later seq. Set finalize:true on the last chunk, then apply_changeset with writes[].bodyStaging.
Paramètres, retour & exemple (8)
Paramètresseq· integer · requisbody· string · requissite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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.finalize· boolean · optionnelstagingId· string · optionnelguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.contentType· string · optionnel
Exemple d'appel{"name": "stage_content_chunk", "arguments": {"seq": 1, "body": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - start_edit_session≈ 271 tokens
Open a draft session. Returns preview/edit URLs for the person (see linkGuidance). draftEditorUrl only when the site gives AI agents Full access. path defaults to '/'.
Paramètres, retour & exemple (4)
Paramètrespath· string · optionnelsite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "start_edit_session", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - start_site≈ 210 tokens
Start one draft site with no Dotsy account. Returns slug + guestToken — pass guestToken on every later tool call until claim_site.
Paramètres, retour & exemple (3)
Paramètrestitle· string · optionnelcontext· string · requis
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.purpose· string · optionnel
Exemple d'appel{"name": "start_site", "arguments": {"context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - start_test≈ 463 tokens
Start a same-URL A/B test (draft or live source). Rules → get_skill('verify') § A/B.
Paramètres, retour & exemple (11)
Paramètresname· string · optionnelpath· string · requissite· string · requis
Site slug, e.g. acme-studiogoalId· string · requissource· string · requis · draft | livecontext· string · requis
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.weights· array · optionnelhandsOff· boolean · optionnel
Hands-off mode (0.56e M4): Dotsy finishes the test WITHOUT further user instruction — the LIVE SITE may change later on its own (a ≥95% winner is auto-promoted, old page kept as a draft; or after 30 days with no clear winner the test auto-ends keeping the control). Only set when the user explicitly asked for hands-off / auto-finish.changeNote· string · optionnel
One line on what the variant changes, shown on the test card (≤120 chars).guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.hypothesis· string · optionnel
Exemple d'appel{"name": "start_test", "arguments": {"path": "texte", "site": "texte", "goalId": "texte", "source": "draft", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - structure_site_analyze≈ 430 tokens
Propose shared layout + fragments; persist:false first. Wait for mirror-vs-editable answer if requiredDecision pending.
Paramètres, retour & exemple (9)
Paramètresfull· boolean · optionnel
Return the full manifest incl. per-page HTML samples (default: compacted — etag/action/counts kept, samples truncated — to fit the token budget).site· string · requis
Site slug, e.g. acme-studioscope· string · optionnel · flat-only | all
Default flat-only; analyze clusters flat keys only.context· string · requis
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.persist· boolean · optionnel
First call: false (preview only). true only after user confirms editable/CMS mode.profileId· string · optionnel · webflow | wordpress | generic | framerguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.sampleLimit· integer · optionnelrefreshManifest· boolean · optionnel
Replace persisted manifest when true.
Exemple d'appel{"name": "structure_site_analyze", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - structure_site_apply≈ 526 tokens
Rewrite flat pages to layout + fragments (draft). Do not call while requiredDecision pending — user must pick editable first. It extracts header/footer only: afterwards share_section with no arguments lists the other repeated blocks (banner, CTA).
Paramètres, retour & exemple (9)
Paramètreskeys· array · optionnel
Required when scope is keys.mode· string · optionnel · apply | review-only
Default apply. Neither value is a dry run — review-only persists the same content/layout write as apply. Only pass review-only after a review_required error (low analyze confidence); it labels the result outcome "review" and defers primary-nav auto-wiring to a later apply call.site· string · requis
Site slug, e.g. acme-studioscope· string · optionnel · flat-only | all | keys | new-since-lastcontext· string · requis
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.ifMatch· string · requis
Manifest etag from structure_site_analyze or get_structure_status.overrides· object · optionnelguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.restructure· boolean · optionnel
Required true when scope all and site has structured pages.
Exemple d'appel{"name": "structure_site_apply", "arguments": {"site": "texte", "context": "texte", "ifMatch": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - submit_feedback≈ 463 tokens
Optional mid-session feedback (required feedback rides with publish_site).
Paramètres, retour & exemple (9)
Paramètressite· string · requis
Site slug, e.g. acme-studiotitle· string · requiscontext· string · requis
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.category· string · requis · missing_tool | blocking_error | extra_round_trips | confusing_response | workaround | other
missing_tool | blocking_error | extra_round_trips | confusing_response | workaround | otherfindings· array · optionnelguestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.description· string · optionnelimpactPercent· integer · requissuggestedImprovement· string · optionnel
Exemple d'appel{"name": "submit_feedback", "arguments": {"site": "texte", "title": "texte", "context": "texte", "category": "missing_tool", "impactPercent": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - update_brief≈ 1344 tokens
Update `_intent/site.md` (site brief) or a page brief when `page` is set. See field descriptions for rules, notes, and head enums.
Paramètres, retour & exemple (11)
Paramètresbody· string · optionnel
Replace narrative body (site ≤50k chars; page ≤10k).goal· string · optionnel
Current goal (site ≤4k chars; page ≤2k).head· ? · optionnel
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}.page· string · optionnel
Content key — targets that page's brief (`_intent/pages/<key>.md`). Omit for the site brief.site· string · requis
Site slug, e.g. acme-studionotes· ? · optionnel
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· array · optionnel
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· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.removeRules· array · optionnel
Ids of rules or guidelines to remove (site brief only).appendHandoff· string · optionnel
Append a hand-off log line — site brief only; ignored when page is set.
Exemple d'appel{"name": "update_brief", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - update_collection≈ 444 tokens
Rename a collection's display name and/or noun (e.g. the generic 'posts' key shown as 'Recipes' / 'recipe') — cosmetic only, stored separately from the tag that defines membership; doesn't need publish. Provide at least one of name/noun. null (or "") resets that field back to its derived default — different from omitting it, which leaves the current value alone.
Paramètres, retour & exemple (6)
Paramètreskey· string · requis
Collection key exactly as list_collections returned it, e.g. "posts" or "blog/" (a hand-typed key may 404 or get silently normalized).name· ? · optionnel
Display name (≤80 chars). null resets to the derived name.noun· ? · optionnel
Singular noun for one item, e.g. "post" (≤40 chars). null resets to the derived noun.site· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "update_collection", "arguments": {"key": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - update_site≈ 882 tokens
Update site settings: title, keyConvention, or editingMode ('live' = each editor save publishes immediately; 'staged' = saves stay drafts until publish_site). Slug is the hostname — change it with rename_site, not this tool. Set 'staged' before handing the editor to a person via start_edit_session's draftEditorUrl. signature toggles the "Made with Dotsy" badge ({enabled, mark: logo|dot, reveal: pill|seal}); it is live immediately. trailingSlash (ignore|never|always) sets the page URL form: the other form 301s to it and canonicals/sitemap use it; live immediately. ownSeoFiles: true lets the next publish use the site's own robots.txt that blocks the whole site (Disallow: /) and its own static sitemap.xml (replaces the generated one, collection pages included); a robots.txt without Disallow: / is used anyway.
Paramètres, retour & exemple (9)
Paramètressite· string · requis
Site slug, e.g. acme-studiotitle· string · optionnelcontext· string · requis
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.signature· object · optionnel
"Made with Dotsy" signature badge. Takes effect on the live site immediately, no publish needed.guestToken· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.editingMode· string · optionnel · live | staged
How the editor's Save behaves. 'live' (default) publishes each save immediately; 'staged' keeps saves as drafts until publish_site. Prefer 'staged' when an agent will hand the editor to a person (see start_edit_session → draftEditorUrl) so keystrokes don't go straight to the public site. API writes always stage regardless of this setting.ownSeoFiles· boolean · optionnel
Use the site's own robots.txt and sitemap.xml even when they can hurt search: a robots.txt that blocks the whole site (Disallow: /), and a static sitemap.xml, which replaces the generated one (collection pages included). Off by default; a robots.txt without Disallow: / is always used. Takes effect at the next publish.keyConvention· string · optionnel · flat | directorytrailingSlash· string · optionnel · ignore | never | always
Page URL form. 'ignore' (default): /blog and /blog/ both serve the page. 'never': /blog/ 301s to /blog. 'always': /blog 301s to /blog/. The canonical tag and sitemap use the same form. Live immediately, no publish needed.
Exemple d'appel{"name": "update_site", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - verify_page≈ 274 tokens
Pre-publish lint (tags, assets, layout). Pair with preview_page — see get_skill('verify').
Paramètres, retour & exemple (4)
Paramètressite· string · requis
Site slug, e.g. acme-studiopaths· array · optionnel
Routes to check; omit to verify every route on the site.context· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.
Exemple d'appel{"name": "verify_page", "arguments": {"site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - wait_for_custom_domain≈ 334 tokens
Poll one hostname until it is connected or the timeout is reached.
Paramètres, retour & exemple (6)
Paramètreshost· string · requis
Hostname to wait for, e.g. www.example.comsite· string · requis
Site slug, e.g. acme-studiocontext· string · requis
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· string · optionnel
Guest token from start_site. Send it on every call until claim_site. Omit when this chat is already signed in to Dotsy.timeoutSec· integer · optionnel
Max seconds to wait (default 300, max 600).intervalSec· integer · optionnel
Seconds between polls (default 30, min 10, max 60).
Exemple d'appel{"name": "wait_for_custom_domain", "arguments": {"host": "texte", "site": "texte", "context": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».