ai.dotsy/mcp
up checked
Unclaimed · Unverified
Agent searches it appeared in, last 30 days: 0. Run this server? Claim the listing: verified label, uptime alerts and analytics.
Publisher-provided title
dotsy
Publisher-provided description
Build and publish static sites on dotsy with draft-first MCP tools, OAuth Connect, and API keys.
Summary by lookupd
Lets an agent create, edit, stage, and publish static websites, manage drafts, custom code, analytics, and site settings.
Install
Claude Code, remote (streamable-http)
claude mcp add --transport http mcp https://mcp.dotsy.ai/mcp
Codex, remote (streamable-http)
codex mcp add mcp --url https://mcp.dotsy.ai/mcp
Cursor, remote (streamable-http) → .cursor/mcp.json
{
"mcpServers": {
"mcp": {
"url": "https://mcp.dotsy.ai/mcp"
}
}
}Other clients: docs. Or tell your agent: Set up lookupd for me: read https://lookupd.com/agent.md and follow it.
Tools (showing 30 of 120)
Publisher-provided text
create_siteCreate empty site; seeds brief. Globally taken slugs auto-suffix to `{slug}-{adjective}-{noun}` (default); pass onSlugTaken:"fail" to get a 409 instead of a renget_siteSite 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 pageupdate_briefUpdate `_intent/site.md` (site brief) or a page brief when `page` is set. See field descriptions for rules, notes, and head enums.get_planRead-only workspace plan and pooled usage; pass slug for this site's add-ons. Call before a large build.get_analyticsRead-only traffic overview (default) or full breakdowns via include[]; optional bot id for crawler page drill-down.set_analytics_providerConnect a third-party analytics provider (GA4, Plausible, Fathom, Umami) or remove it (provider 'none'). dotsy adds the provider's script to the <head> of everyget_custom_codeRead the site-wide custom code: `draft` (what the next publish puts live) and `published` (what visitors get now) for both boxes — head (before </head>) and bodset_custom_codeSet site-wide custom code: `head` goes before </head> and `body` before </body> on every page, on every layout. It is saved as a draft and goes live with the neset_site_iconSet the favicon from a square image asset. Draft until publish.update_siteUpdate site settings: title, keyConvention, or editingMode ('live' = each editor save publishes immediately; 'staged' = saves stay drafts until publish_site). Srename_siteRename the site slug (hostname {slug}.dotsy.site). Owner-only; use the returned slug afterwards. Published site: the old slug redirects on the API (301 reads, 3publish_sitePublish draft to live. handoff required; feedback optional. Warnings (form_unwired, store, SEO) are advisory — tell the user. Site-check errors return a publishget_site_tasksWhat needs fixing on a site, from stored checks. Call after writes, before publish_site.get_draft_statusPending draft changes: content keys and routes with status. May include requiredDecision (publish_confirm) before publish_site.review_changesReview queue: what changed and isn't live yet. list (counts first) → get one item (hidden changes, optional diff, bodyChanged: false means only title/meta/routediscard_draftsDiscard unpublished drafts: all (omit key/keys/routes/menus), one content key (key), menu draft only (menus:true), or a selection (keys, routes). Destructive —delete_sitePermanently delete site; confirmSlug must equal slug.bulk_put_contentStage many content keys (pages, layouts, fragments). Content only — not routes or assets. Each body ≤60KB and the whole call ≤80KB; larger pages use stage_conteget_site_manifestContent keys + hashes only (optional routes=true) — static files live in list_assets, not manifest. Diff keys+hashes before apply_changeset; stage only changedfind_replaceCase-insensitive find→replace across pages in one staged commit. Batch all replacements into ONE call — never parallelize find_replace on the same key (concurresearch_contentFind pages containing a phrase (grep without reading bodies). Requires do-sqlite — graduate_site first if search_unavailable.graduate_siteEnable site search & collections (kv → do-sqlite), one-way. Unlocks search_content, collection indexes, visitor /__paige/search, and moves any R2 form-submissioapply_changesetStage writes[] + deletes[] in one call; attach routes via writes[].route. writes[].ifMatch (hash from get_site_manifest; "" = must not exist) guards each key (aimport_site_from_urlImport URL to draft. On complete, response may include requiredDecision — preview then ask mirror vs editable before structure_*.get_structure_statusFlat vs structured page counts; chromeCoverage = real per-fragment page counts + missedPages (check before promising sitewide edits). Informs user — do not autostructure_site_analyzePropose shared layout + fragments; persist:false first. Wait for mirror-vs-editable answer if requiredDecision pending.structure_site_applyRewrite flat pages to layout + fragments (draft). Do not call while requiredDecision pending — user must pick editable first. It extracts header/footer only; reget_structure_resultLast structure apply job result (structuredKeys, conflicts, partial).adapt_site_analyzePropose nav wiring + blog collectionization for an imported mirror (draft, opt-in). Read-only; returns per-adapter reports + proposalEtag. Nav decline may incluadapt_site_applyApply 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 se
Details
- Version: 0.9.3
- Transports: streamable-http
- Uptime (7 days): 100%
- Median latency: 542 ms
- First indexed:
- Last seen in registry:
- Website: https://dotsy.ai
Badge for your README
Shows this live status and links here; updates hourly.
[](https://lookupd.com/servers/ai.dotsy/mcp)
- 62033 servers
- Last crawl: 2026-11-11T15:38:39.561Z
- API base:
https://api.lookupd.com - MCP URL:
https://api.lookupd.com/mcp