Skip to content
Agentmart
Submit a tool

Dotsy

Build and publish static sites on Dotsy with draft-first MCP tools, OAuth Connect, and API keys.

Connector by dotsy.aiOfficial · Domain verified by the MCP Registry

IndexedLicense unknownRemote (HTTP)
Write a review

Install

Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install connector/dotsy-ai-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://mcp.dotsy.ai/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Build and publish static sites on Dotsy with draft-first MCP tools, OAuth Connect, and API keys.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
40 read · 22 write · 36 delete
Secrets
None asked for
Install scripts
Nothing to install (hosted)
Runs as
Hosted (remote endpoint)

Tools by what they do 98

From the running server's own tool list (tools/list) on Oct 25, 2026.

Read 40 · Look things up without changing anything.

  • adapt_site_analyze
  • edit_page
  • estimate_test
  • get_account_context
  • get_activity
  • get_adapt_status
  • get_analytics
  • get_asset
  • get_collection_schema
  • get_content
  • get_custom_domain_connect
  • get_draft_status
Show 28 more tools
  • get_form_submission
  • get_menu
  • get_menu_doc
  • get_route
  • get_site
  • get_site_build_progress
  • get_site_manifest
  • get_site_outline
  • get_skill
  • get_structure_result
  • get_structure_status
  • infer_collection_schema
  • inspect_collection
  • list_assets
  • list_collections
  • list_content
  • list_custom_domains
  • list_form_submissions
  • list_goals
  • list_my_sites
  • list_pages
  • list_skills
  • list_versions
  • new_post_template
  • preflight_site
  • preview_page
  • search_content
  • verify_page

Write 22 · Create, change, send or run things.

  • add_custom_domain
  • claim_site
  • create_site
  • decompose_analyze
  • graduate_site
  • import_site_from_url
  • reapply_custom_domain_oauth
  • refresh_custom_domain
  • reindex_collection
  • reorder_menu
  • restore_version
  • set_experiment_note
Show 10 more tools
  • set_primary_custom_domain
  • stage_content_chunk
  • start_edit_session
  • start_site
  • start_test
  • structure_site_analyze
  • submit_feedback
  • update_collection
  • update_site
  • wait_for_custom_domain

Delete 36 · Delete, drop, revoke or wipe things.

  • adapt_site_apply
  • adapt_site_revert
  • apply_changeset
  • batch_patch_content
  • bulk_put_assets
  • bulk_put_content
  • delete_asset
  • delete_content
  • delete_draft_test
  • delete_menu_item
  • delete_route
  • delete_site
Show 24 more tools
  • detach_section
  • discard_drafts
  • find_replace
  • patch_content
  • patch_route
  • promote_experiment
  • publish_site
  • put_collection_schema
  • put_content
  • put_goals
  • put_menu_doc
  • put_menu_item
  • put_post
  • put_route
  • remove_custom_domain
  • rename_content
  • rename_page
  • rename_site
  • revert_change
  • set_analytics_provider
  • share_section
  • structure_site_apply
  • undo_publish
  • update_brief

Network hosts it talks to 1

  • mcp.dotsy.ai · found in remote endpoint, install command

Files it touches

  • Any path the agent passes to its tools

Tools (98)

As the server listed them on Oct 25, 2026. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • adapt_site_analyzeAnalyze nav and blogread-only

    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.

  • adapt_site_applyApply nav and blog changescan change or delete data

    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.

  • adapt_site_revertRevert nav and blog changescan change or delete data

    Atomically restore everything the last adapt_site_apply wrote (fragments, the menu doc when the op touched it, index, member configs, routes).

  • add_custom_domainAdd custom domain

    Connect apex and/or www on a paid plan; starts a DNS connect session.

  • apply_changesetApply changesetcan change or delete data

    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.

  • batch_patch_contentEdit content in bulkcan change or delete data

    patch_content on multiple keys; all-or-nothing validation. Preferred edit path for pages over 60KB. replace-string value/replace ≤60KB; whole call ≤80KB.

  • bulk_put_assetsUpload assetscan change or delete data

    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 prev…

  • bulk_put_contentSave content in bulkcan change or delete data

    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.

  • claim_siteClaim guest draft site

    Move the guest draft onto your signed-in Dotsy account. Requires OAuth Connect; pass the guestToken from start_site.

  • create_siteCreate site

    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.

  • decompose_analyzeAnalyze site structure (deprecated)

    Deprecated — use structure_site_analyze.

  • delete_assetDelete assetcan change or delete data

    Delete a static asset by key. The editor and draft preview drop it at once; the published site drops it at the next publish.

  • delete_contentDelete contentcan change or delete data

    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.

  • delete_draft_testDelete draft A/B testcan change or delete data

    Remove a draft A/B test (releases variant bodies; does not publish).

  • delete_menu_itemDelete menu itemcan change or delete data

    Remove one item from a menu (page stays live).

Show 83 more tools
  • delete_routeDelete routecan change or delete data

    Remove a route by path.

  • delete_siteDelete sitecan change or delete data

    Permanently delete site; confirmSlug must equal slug.

  • detach_sectionDetach a sectioncan change or delete data

    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).

  • discard_draftsDiscard draftscan change or delete data

    Discard unpublished drafts: all (omit key/keys/routes), one content key (key), or a selection (keys, routes). Destructive — check get_draft_status first.

  • edit_pagePage canvasread-only

    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).

  • estimate_testEstimate A/B testread-only

    Estimate days to reach promote readiness for a page (traffic baseline). Read-only.

  • find_replaceFind and replacecan change or delete data

    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.

  • get_account_contextAccount contextread-only

    Account, user, memberships[]. Pass workspace on writes when memberships.length > 1.

  • get_activitySite activityread-only

    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.

  • get_adapt_statusAdapt statusread-only

    Read adapt state: proposal summary + proposalEtag (+ applied/consumed flag), undo-record presence, active or queued job progress. Use to resume in a fresh session.

  • get_analyticsSite analyticsread-only

    Read-only traffic overview (default) or full breakdowns via include[]; optional bot id for crawler page drill-down.

  • get_assetGet assetread-only

    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.

  • get_collection_schemaGet collection fieldsread-only

    Read the site's collection field definitions (`_data/collections.json`, draft view): { schema: { v: 1, collections: { "<key>": { fields[], settings? } } }, hash }. hash is null when no schema exists yet — pass it as put_collection_schema ifMatch. 409 collection_schema_invalid { hash, issues } means the stored file is broken: fix it with put_collection_schema using that hash.

  • get_contentRead contentread-only

    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.

  • get_custom_domain_connectCustom domain setupread-only

    Current connect session and nextAction (browser URL or manual DNS guide).

  • get_draft_statusDraft statusread-only

    Pending draft changes: content keys and routes with status. May include requiredDecision (publish_confirm) before publish_site.

  • get_form_submissionRead form submissionread-only

    Read one form submission with the full field payload (explicit PII access — use only when needed).

  • get_menuGet menuread-only

    Read a menu's draft items and etag; menu rules → get_skill('nav').

  • get_menu_docGet all menusread-only

    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.

  • get_routeGet routeread-only

    Get one route by path (home is '/').

  • get_siteSite detailsread-only

    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.

  • get_site_build_progressBuild progressread-only

    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.

  • get_site_manifestSite manifestread-only

    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.

  • get_site_outlineSite outlineread-only

    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).

  • get_skillGet build skillread-only

    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.

  • get_structure_resultStructure resultread-only

    Last structure apply job result (structuredKeys, conflicts, partial).

  • get_structure_statusStructure statusread-only

    Flat vs structured page counts; informs user — do not auto-run analyze/apply while requiredDecision pending.

  • graduate_siteEnable search and collections

    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…

  • import_site_from_urlImport site from URL

    Import URL to draft. On complete, response may include requiredDecision — preview then ask mirror vs editable before structure_*.

  • infer_collection_schemaSuggest collection fieldsread-only

    Suggest fields for one collection from a sample of its items' meta.custom values (published data, else drafts) — writes nothing. Returns { sampled, suggestions: [{ field: { key, type, options? }, count, samples, defined }], skipped }. Review, then add the ones you want via put_collection_schema.

  • inspect_collectionInspect collectionread-only

    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…

  • list_assetsList assetsread-only

    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.

  • list_collectionsList collectionsread-only

    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.

  • list_contentList contentread-only

    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.

  • list_custom_domainsList custom domainsread-only

    List all custom hostnames and connection status for the site.

  • list_form_submissionsList form submissionsread-only

    List form submissions (metadata + bounded field preview — not full PII). Works on kv and do-sqlite backends.

  • list_goalsList goalsread-only

    List site conversion goals (pageview paths and form submits). Required before start_test.

  • list_my_sitesYour sitesread-only

    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.

  • list_pagesSite pagesread-only

    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 nextCurs…

  • list_skillsList build skillsread-only

    Paige build skills (id + whenToUse). Pull get_skill on demand — do not duplicate in tool text.

  • list_versionsList published versionsread-only

    List the site's published versions, newest first (who, when, pages, live, restorable). Use before restore_version.

  • new_post_templateNew post templateread-only

    Read-only scaffold for a new post — suggested key/path, membership meta, blank or duplicate body. Then put_post (+ optional put_route).

  • patch_contentEdit contentcan change or delete data

    Edit one content key via ops[] (selector ops or replace-string; wrap/unwrap/move restructure siblings). Stages draft; op shapes in schema.

  • patch_routeUpdate routecan change or delete data

    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.

  • preflight_sitePreflight site buildread-only

    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.

  • preview_pagePreview pageread-only

    Verify-only composed HTML check; home preview may include requiredDecision — ask mirror vs editable before structure_*.

  • promote_experimentPromote A/B winnercan change or delete data

    Promote a winning A/B variant to live — explicit user instruction only; see get_skill('verify') § A/B.

  • publish_sitePublish sitecan change or delete data

    Publish draft to live. feedback and handoff required (use dummy feedback + one-line handoff if clean).

  • put_collection_schemaReplace collection fieldscan change or delete data

    Replace the whole field schema (draft; publish makes it live). Read it with get_collection_schema first and send it back edited. Collection keys exactly as list_collections returns them ("blog/" or an id). Field: { key, type, label?, help?, required?, unique?, inCard?, default? } — type text (multiline, minLength, maxLength) | number (min, max, integer) | boolean | option (options[] required) | multiOption (options[] required, max) | link | email | phone | color. Keys: letter then letters/digits/_ (≤40), not a built-in post field (title, date, excerpt, tags, image, url, slug, …; author only as…

  • put_contentSave contentcan change or delete data

    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.

  • put_goalsReplace goalscan change or delete data

    Create or replace all site conversion goals (≤50). Required before start_test when no goal exists.

  • put_menu_docReplace all menuscan change or delete data

    Replace the whole menu doc (ifMatch from get_menu_doc required). Each item may omit menu — the enclosing menu key in doc is used.

  • put_menu_itemSave menu itemcan change or delete data

    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.

  • put_postSave blog postcan change or delete data

    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 (typed per collection by get_collection_schema; the response's fieldWarnings flag values that don't fit — soft, never blocking).

  • put_routeSave routecan change or delete data

    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.

  • reapply_custom_domain_oauthReapply domain DNS

    Re-apply DNS with stored Cloudflare OAuth grant (no browser).

  • refresh_custom_domainCheck custom domain

    Poll one hostname until DNS/cert propagates.

  • reindex_collectionRebuild collection index

    Build/finish collection indexes after publish returns collectionDataPending or collectionSqlPending.

  • remove_custom_domainRemove custom domaincan change or delete data

    Remove one custom hostname from the site.

  • rename_contentRename content keycan change or delete data

    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 s…

  • rename_pageChange page URLcan change or delete data

    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 redirec…

  • rename_siteRename site addresscan change or delete data

    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.

  • reorder_menuReorder menu

    Set final menu order. Pass ifMatch from get_menu; stale → 409 with current items.

  • restore_versionRestore a version

    Bring an earlier published version back as unpublished changes (page content only — routes, menus, images and settings stay). version: a number from list_versions, or "previous". dryRun: show what would change. Then review and publish_site, or discard_drafts to undo; publish:true makes it live at once.

  • revert_changeRevert one change

    Undo one activity event by staging the prior version as draft only — call publish_site to go live. Respects AI access.

  • search_contentSearch contentread-only

    Find pages containing a phrase (grep without reading bodies). Requires do-sqlite — graduate_site first if search_unavailable.

  • set_analytics_providerSet analytics providercan change or delete data

    Connect a third-party analytics provider (GA4, Plausible, Fathom, Umami) or remove it (provider 'none'). Dotsy adds the provider's script to the <head> of every live page — live immediately, no publish needed. Replaces any earlier provider (one per site). Use this instead of pasting a GA4 gtag snippet into a layout. Other tags (Google Tag Manager, ads pixels, Clarity, search-console verification <meta>) still go in the layout.

  • set_experiment_noteSave A/B test note

    Record what was learned from an ended A/B test (≤500 chars; null clears).

  • set_primary_custom_domainSet primary domain

    Set the canonical host (301 target) when multiple hostnames are connected.

  • share_sectionShare a sectioncan change or delete data

    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…

  • stage_content_chunkStage large content chunk

    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.

  • start_edit_sessionStart edit session

    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 '/'.

  • start_siteStart guest draft site

    Start one draft site with no Dotsy account. Returns slug + guestToken — pass guestToken on every later tool call until claim_site.

  • start_testStart A/B test

    Start a same-URL A/B test (draft or live source). Rules → get_skill('verify') § A/B.

  • structure_site_analyzeAnalyze site structure

    Propose shared layout + fragments; persist:false first. Wait for mirror-vs-editable answer if requiredDecision pending.

  • structure_site_applyApply site structurecan change or delete data

    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).

  • submit_feedbackSend feedback

    Optional mid-session feedback (required feedback rides with publish_site).

  • undo_publishUndo last publishcan change or delete data

    Take back the last publish at once: restores the version before it for the pages that publish changed and publishes them, and the undone changes stay as unpublished changes (`restaged`). On a live-mode site nothing is kept (its next save would publish it again): the answer has `redo.version` — restore_version with that version and publish: true brings it back. publishVersion = the version publish_site returned. Fails with not_latest if another publish landed since. If its publish fails, the undo stays as unpublished changes — publish_site finishes it.

  • update_briefUpdate site briefcan change or delete data

    Update `_intent/site.md` (site brief) or a page brief when `page` is set. See field descriptions for rules, notes, and head enums.

  • update_collectionRename collection

    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.

  • update_siteUpdate site settings

    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 nex…

  • verify_pageVerify pageread-only

    Pre-publish lint (tags, assets, layout, SEO, speed and accessibility). Summary first: health issues grouped by code, each with fix:{tool,args,fill?} — supply the fill args, then call. health.summary counts are whole-site (groups/codes filter only issues and assets). Pair with preview_page — see get_skill('verify').

  • wait_for_custom_domainWait for custom domain

    Poll one hostname until it is connected or the timeout is reached.

Signals

Last release
Oct 25, 2026 (4 days ago)

Details

Registry name
ai.dotsy/mcp
Version
0.6.1
Auth
Auth not stated
License
License unknown
Website
dotsy.ai
First seen
Oct 24, 2026
Last checked
Oct 26, 2026
Cite this page

Dotsy MCP server. Agent Mart. https://agentmart.dev/connectors/dotsy-ai-mcp (last updated 2026-10-26)