Content Tools
dotsy.ai
An MCP server for creating and managing websites, including site settings, briefs, publishing, and analytics.
ENDPOINT 1
https://mcp.dotsy.ai/mcp
MCP server metadata
- Name
- paige
- Version
- 0.3.0
No Dotsy account yet: call start_site, pass guestToken on later tools, build the draft, then claim_site when they want to keep it (Connect opens on claim/publish). Dotsy CMS: one site (slug) per call; every tool needs context (one sentence why). Writes stage DRAFT until publish_site (feedback + handoff required). Use publicUrl/liveReady — never guess hostnames. Uploaded files are live in the editor and draft preview at once; the published site picks them up at the next publish. Ambiguous build/clone → get_skill('intake'). Before publish → get_skill('verify'). Before publish_site → get_draft_status (may require publish_confirm); run verify_page sample when brief.priorities.seo ≠ skip. Platform rules → get_skill on demand. Bulk/multi-page: apply_changeset with writes[].route, or dotsy push — never loop put_content/put_route. Page body >60KB or put_content rejected → get_skill('large-content'). Published page re-key / obscure URL: rename_content (not get_content+apply_changeset); then publish_site. Change a page's URL: rename_page (leaves a 301). Site slug = public hostname; change with rename_site (not update_site or rebuild). After import: preview first — publicUrl only when liveReady; draft preview via start_edit_session.draftPreviewUrl (not draftUrl) when not. Extract shared layout only if user wants editable CMS — get_skill('clone'). Each site has rules & guidelines in get_site `guidance`: if `guidance.missing` lists sections, load get_skill('guidance') and write them (ask the user at most 3 questions) before your first change; follow them; rules are checked at publish; when you change the design, content model or SEO patterns, update them with update_brief. Build theater is optional agent-facing guidance for long site builds: say one brief intent sentence before create_site or import_site_from_url; then, at most once per beat (Spark after create_site, First light when previewReady or publishable, Polish when mirrorComplete or assetsReady, Structure when the structure job completes, Launch after publish_site), share one short progress line, about five lines maximum per clone. Reuse forHumans.quote only when forHumans.waiting is true; never call a quote-only tool. On first_light share forHumans.publicUrl only when present (liveReady); never surface payload.publicUrl directly — draft preview via start_edit_session.draftPreviewUrl when suggestEditPage is true (not draftUrl). If forHumans.suggestEditPage is true, you may call start_edit_session and share draftPreviewUrl while the site is still draft; never block import or clone on screenshots or compose. If someone changed the site since your last session, get_activity shows what; revert_change undoes one change.
Known tools 89
get_siteSite detail, stats, publicUrl, brief head (default-on), and readiness flags.
Inferred read-onlyget_analyticsRead-only traffic overview (default) or full breakdowns via include[]; optional bot id for crawler page drill-down.
Inferred read-onlyupdate_siteUpdate site settings: title, keyConvention, or editingMode ('live' = each editor save publishes immediately; 'staged' = saves stay drafts until publish_site).
Potential side effectsdiscard_draftsDiscard unpublished drafts: all (omit key/keys/routes), one content key (key), or a selection (keys, routes).
Inferred read-onlyget_site_manifestContent keys + hashes only (optional routes=true) — static files live in list_assets, not manifest.
Inferred read-onlyget_structure_statusFlat vs structured page counts; informs user — do not auto-run analyze/apply while requiredDecision pending.
Inferred read-onlyget_structure_resultLast structure apply job result (structuredKeys, conflicts, partial).
Inferred read-onlyadapt_site_analyzePropose nav wiring + blog collectionization for an imported mirror (draft, opt-in).
Inferred read-onlyadapt_site_applyApply the adapt proposal (draft): wire nav into the menu store and/or rewrite the blog index to a live <dotsy-collection>.
Inferred read-onlyadapt_site_revertAtomically restore everything the last adapt_site_apply wrote (fragments, the menu doc when the op touched it, index, member configs, routes).
Inferred read-onlyget_adapt_statusRead adapt state: proposal summary + proposalEtag (+ applied/consumed flag), undo-record presence, active or queued job progress.
Inferred read-onlyget_contentRead one content key; optional selector (region) or published=true (live body).
Inferred read-onlylist_collectionsCollections on the site — name, noun, item count (or 'not published yet'), URL pattern, and whether any member is staged.
Inferred read-onlynew_post_templateRead-only scaffold for a new post — suggested key/path, membership meta, blank or duplicate body.
Potential side effectsreindex_collectionBuild/finish collection indexes after publish returns collectionDataPending or collectionSqlPending.
Potential side effectspreview_pageVerify-only composed HTML check; home preview may include requiredDecision — ask mirror vs editable before structure_*.
Inferred read-onlyget_site_outlineSite shape: every layout and section with its page count and staged-change flag, whether a layout is missing, redirects count, menus grouped by where they show, and collections with their page placements.
Inferred read-onlypatch_routePartial route update (only sent fields change; an OMITTED field is left alone).
Potential side effectsestimate_testEstimate days to reach promote readiness for a page (traffic baseline).
Inferred read-onlypromote_experimentPromote a winning A/B variant to live — explicit user instruction only; see get_skill('verify') § A/B.
Inferred read-onlydelete_draft_testRemove a draft A/B test (releases variant bodies; does not publish).
Potential side effectsset_experiment_noteRecord what was learned from an ended A/B test (≤500 chars; null clears).
Inferred read-onlyput_menu_itemPartial upsert one menu item: provided fields overwrite; omitted html/childTemplate/childShell/attrs/data are preserved.
Inferred read-onlyget_menu_docRead 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.
Potential side effectslist_assetsCMS uploads under assets/ only — not mirrored clone CDN (get_site mirroredAssets or import warmJob).
Inferred read-onlysubmit_feedbackOptional mid-session feedback (required feedback rides with publish_site).
Inferred read-onlyrevert_changeUndo one activity event by staging the prior version as draft only — call publish_site to go live.
Inferred read-onlyadd_custom_domainConnect apex and/or www on a paid plan; starts a DNS connect session.
Inferred read-onlyget_custom_domain_connectCurrent connect session and nextAction (browser URL or manual DNS guide).
Inferred read-onlyreapply_custom_domain_oauthRe-apply DNS with stored Cloudflare OAuth grant (no browser).
Inferred read-onlywait_for_custom_domainPoll one hostname until it is connected or the timeout is reached.
Inferred read-onlyset_primary_custom_domainSet the canonical host (301 target) when multiple hostnames are connected.
Inferred read-onlylist_form_submissionsList form submissions (metadata + bounded field preview — not full PII).
Inferred read-onlyget_form_submissionRead one form submission with the full field payload (explicit PII access — use only when needed).
Inferred read-onlylist_pagesList pages on a site — route settings (path/title/navLabel/purpose) by default, one row per route.
Inferred read-onlyedit_pageOpen the interactive page canvas to change content: the user clicks an element, then you call patch_content.
Inferred read-onlyget_site_build_progressRead-only build progress for humans (build-theater view) during structure/adapt or after import.
Inferred read-onlyCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.paige]
url = "https://mcp.dotsy.ai/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"paige": {
"type": "http",
"url": "https://mcp.dotsy.ai/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: paige
Remote MCP URL: https://mcp.dotsy.ai/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"paige": {
"url": "https://mcp.dotsy.ai/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"paige": {
"type": "http",
"url": "https://mcp.dotsy.ai/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "paige",
"transport": "streamable-http",
"url": "https://mcp.dotsy.ai/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
TRUST AND VERIFICATION EVIDENCE
Loading Trust v2 evidence…
Checking the associated registrable domain. The BuiltWith key remains server-side.
Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.