Connector documentation
AI Website Builder and Digital Marketing + SEO
Two Model Context Protocol connectors from Dance for small-business owners. AI Website Builder builds and manages the website. Digital Marketing + SEO finds the change that wins more customers and makes it. Both run on the same Dance service, described below as “Dance”, so one access key, one account and one change history work on either.
Built by Dance Technologies, Inc. Support: admin@startdancing.ai. Not affiliated with or endorsed by Meta; listing in Muse is subject to Meta’s review.
The two connectors
Each connector lists only the tools for its job, with its own name, description and instructions, so an assistant can tell which one fits a request. Editing a connected website is in both, because both may need it: a person asking for a new headline uses AI Website Builder; a person asking why they don’t rank, and to fix it, uses Digital Marketing + SEO. Both call the same editing and approval service.
AI Website Builder by Dance
Build, redesign and manage your business website with AI.
Use when someone wants to create, rebuild, redesign, edit, publish or check on their business website, for example a new site, a modern redesign, adding a page, changing the text on a page, or putting it on their own domain.
| Item | Value |
|---|---|
| Endpoint | https://www.startdancing.ai/muse/mcp/website |
| Server name | dance-website-builder |
| Landing page | https://www.startdancing.ai/muse/website-builder-connector |
| Tools | build_website, get_website_build, change_website, get_website_change_status, undo_website_change, connect_domain, check_domain, list_connected_sites (both), get_site_context (both), prepare_website_change (both), apply_website_change (both), publish_website_change (both), get_website_change (both), revert_website_change (both) |
Digital Marketing + SEO by Dance
Digital marketing and SEO for small businesses: find the change that matters most, then make it.
Use when someone wants more customers or more visibility online: SEO audits, Google rankings, search demand and keywords, who outranks them, what to change on their website first, and making that improvement.
| Item | Value |
|---|---|
| Endpoint | https://www.startdancing.ai/muse/mcp/marketing |
| Server name | dance-marketing-seo |
| Landing page | https://www.startdancing.ai/muse/digital-marketing-seo |
| Tools | analyze_business, get_analysis, propose_page_update, plan_site_rebuild, list_connected_sites (both), get_site_context (both), prepare_website_change (both), apply_website_change (both), publish_website_change (both), get_website_change (both), revert_website_change (both) |
The original endpoint, https://www.startdancing.ai/muse/mcp (“Dance: AI Website Builder + Digital Marketing + SEO”), keeps serving every tool so earlier installs, including ones named muse-marketer or matt-mcp, keep working. New installs should use one of the two endpoints above.
What they do
Any public website: analysis and recommendations. Dance reads the site, search demand, search results and AI answers, ranks what to fix first with the evidence behind it, and drafts page copy. It never changes a website it has only analyzed.
Connected websites: editing and publication. When a site’s owner has connected a compatible structured CMS to their account, Dance can change specific page text on that site: it plans the exact before and after, saves an unpublished draft, publishes only after the person approves, verifies the live page, and can undo that one change.
New websites: a free preview, $49 to keep. When the person asks for a new website, build_website builds one from their current site on Yoink (yoink.website), a Dance product, and returns a private link where they watch it being built. The preview is free. Keeping the website costs $49, paid on Yoink through its own checkout, never in the conversation. Their current website, domain and DNS are not changed. When there is no website at the address, nothing is built automatically: Dance’s team follows up to build it with them.
Websites built here: any change, then their own domain. change_website takes any change in plain words, such as a new page, a section, a photo from their current site or a public image link, a booking button that goes to their existing booking tool, layout or words. Each change lands on the preview first; undo_website_change takes the latest back out. On the free preview, changes stay on the homepage; new pages come with buying the website. Once it is bought and published, connect_domain connects a domain the person already owns and returns the DNS records to add. Dance never sells or registers domains, and image files can’t be uploaded from the chat.
The first supported CMS is Dance’s structured CMS. Other deployments of the same CMS are connected through configuration and authorization. Dance does not edit arbitrary WordPress, Wix or Squarespace sites and takes no payments itself.
Endpoint and authentication
| Item | Value |
|---|---|
| Endpoints | https://www.startdancing.ai/muse/mcp/website (AI Website Builder), https://www.startdancing.ai/muse/mcp/marketing (Digital Marketing + SEO) |
| Transport | MCP Streamable HTTP (POST, JSON responses). Stateless: no session ID is required. |
| Protocol versions | 2025-11-25 (latest), 2025-06-18, 2025-03-26 and 2024-11-05 |
| Authentication | Access key sent on every request as Authorization: Bearer <key>. This is API-key authentication, not OAuth. The same key works on both connectors and reaches the same account. |
| Unauthenticated | HTTP 401 with WWW-Authenticate: Bearer realm="dance". No tools are listed or callable without a key. |
| Server names | dance-website-builder, dance-marketing-seo (the original endpoint is muse-marketer; earlier installs named matt-mcp keep working) |
Access keys are issued by Dance. Each key is its own account: its investigations, proposals, connected sites and website changes are invisible to every other key, even to callers who know an ID. Only a SHA-256 fingerprint of each key is stored, and a key can be revoked at any time, which immediately stops it and disconnects its sites.
Each key carries scopes:
| Scope | Allows |
|---|---|
| research | Saved research, analysis results, page proposals and rebuild assessments. |
| live | Starting new live investigations and new website previews, within the daily limits. |
| sites | Reading and changing websites connected to this key’s account, within each connection’s own permissions. |
curl -s https://www.startdancing.ai/muse/mcp/website \
-H "Authorization: Bearer $DANCE_ACCESS_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Connected websites
A site connection links one account to one CMS deployment. It records the managed site address, the public research domain it represents, the permissions granted (read, draft, publish, revert), a sealed copy of the CMS’s own integration key, and its status. The CMS key is encrypted at rest (AES-256-GCM), is never returned by any tool or page, and is deleted when the connection is revoked.
Authorization is checked twice. The CMS verifies its integration key, that key’s permissions and the records it may touch. Dance separately verifies that the caller owns the connection and that the connection grants the action. A matching domain never grants access: it only helps find a page, and a page addressed by its research URL must be recorded in the CMS as the import of that URL.
Demonstration site. polar-website-migration.vercel.app is Dance’s demonstration import of polarseltzer.com into the structured CMS. polarseltzer.com is the research source only and is never modified. The demonstration keeps its own indexing settings (it is not indexed).
Connecting a site
- The site owner signs in to their CMS editor and opens Integrations, creates a connection key, chooses its permissions and, optionally, the pages it may touch. The key is shown once.
- The owner gives that key to Dance through a secure channel (never in a chat or a URL). Dance links it to the owner’s Dance access key and runs a connection test, which records the permissions the CMS actually grants.
- The site now appears in
list_connected_sites. Either side can revoke the connection at any time.
Asking to edit a website that is not connected returns the setup steps instead of an edit. Analysis still works.
Tools
Classifications follow Muse’s connector guidelines. Read changes nothing. Write saves data in Dance or an unpublished CMS draft. Sensitive write changes the live public website and needs approval every time.
analyze_business
WriteResearches a public website: the business, its pages, search demand, search results and AI answers, then ranks what to fix first and drafts a page proposal.
- Side effects
- Saves an investigation to the caller’s account. Reads public pages (bounded, honours robots.txt) and makes paid search-data lookups for new live investigations. Never changes any website.
- Inputs
- url (homepage or deep page), goal, evidence_mode ("saved" | "live"), run_id to resume, country_location_code, language_code.
- Returns
- run_id, status (queued, running, complete, partial, failed, needs_input), stages, recommendation, proposal handoff, limitations, an expiring report link.
get_analysis
ReadReturns one of the caller’s investigations (or a public demo): ranked actions with evidence, confidence, sources and proposals.
- Side effects
- None. Reading never advances or changes an investigation.
- Inputs
- run_id.
- Returns
- The full analysis with evidence IDs and expiring read-only links.
propose_page_update
WriteCreates an evidence-grounded proposal for one inspected page, or revises it from plain-language instructions.
- Side effects
- Saves a proposal revision in Dance. Refining shared demo material creates the caller’s private copy. Never changes any website.
- Inputs
- run_id, action_id, page_url, instructions, proposal_revision (rejects edits to a stale revision).
- Returns
- Proposal ID, revision, validation checks, declined claims.
plan_site_rebuild
ReadAssesses whether a finished investigation’s site would benefit from a structured, plain-language-editable CMS and returns a brief when it would.
- Side effects
- May fetch the site’s homepage once to detect its platform (cached). Builds, deploys and changes nothing.
- Inputs
- run_id, force.
- Returns
- Fit, reasons, blockers, cautions and an optional brief. The brief is not a built website; build_website builds one.
build_website
WriteBuilds a brand-new website for a business from its current site, as a free homepage preview. Built and hosted by Yoink (yoink.website), a Dance product. Keeping it costs $49, paid on Yoink.
- Side effects
- Starts one preview build on Yoink and returns a private link to it. Never changes the current website, its domain or DNS. Nothing is charged in the conversation. The same site from the same access key returns the same website instead of a second build.
- Inputs
- website_url (the business’s current website), email (optional; Yoink emails when the preview is ready).
- Returns
- website_id, status (building, ready, failed, no_website), open_url (private), price, paid.
get_website_build
ReadReports the progress of a website started with build_website.
- Side effects
- None.
- Inputs
- website_id.
- Returns
- Status, the private link, the price and whether it has been bought.
change_website
WriteSends a plain-language change (a page, section, photo from their site or a public image link, booking button, layout, words) to the builder of a website started with build_website.
- Side effects
- Changes the website’s preview only, never the live site. On the free preview, changes stay on the homepage and each one uses a free change; a refused or failed change uses none.
- Inputs
- website_id, request (plain words, up to 2,000 characters).
- Returns
- change_id, state (working, applied, saved, answered, refused, failed, unconfirmed), the builder’s reply, preview_url, changes_left, can_undo.
get_website_change_status
ReadReports where one change or undo stands. Never sends it again.
- Side effects
- None for the person; a finished change is moved onto the preview.
- Inputs
- change_id.
- Returns
- The same fields as change_website.
undo_website_change
WriteTakes the latest change back out, when it is the person’s own and nothing else is running.
- Side effects
- Changes the website’s preview only.
- Inputs
- website_id.
- Returns
- change_id and its state, as change_website.
connect_domain
WriteConnects a domain the person already owns to a website started with build_website, once it is bought and published on Yoink.
- Side effects
- Attaches the domain to the website’s hosting. Never changes the person’s DNS and never buys or registers a domain.
- Inputs
- website_id, domain.
- Returns
- status (needs_verification, pending_dns, active), the DNS records to add, live_url once live.
check_domain
ReadRe-checks a connected domain: live yet, or which records are still missing.
- Side effects
- None.
- Inputs
- website_id, domain.
- Returns
- The same fields as connect_domain.
list_connected_sites
ReadLists the websites connected to the caller’s account, with their permissions and capabilities.
- Side effects
- None.
- Inputs
- None.
- Returns
- Sites (managed address, research domains it represents, permissions, status) or the setup steps when none are connected.
get_site_context
ReadFinds a page on a connected site by URL, path, record ID or search, and returns its published values, editable fields, any draft and its version.
- Side effects
- Reads from the connected CMS. Changes nothing.
- Inputs
- site_id, page, query.
- Returns
- Page record with editable fields and limits, unsupported areas, open changes.
prepare_website_change
WriteReads the page’s current content from the CMS and saves a validated change plan with the exact before and after of every field. Accepts explicit field values, a plain-language request, or a proposal.
- Side effects
- Saves a plan in Dance. Changes nothing in the CMS or on the website. Plain-language requests are mapped by the AI model; no crawl or keyword research runs.
- Inputs
- site_id, page, changes[] or request or proposal_id (+ proposal_revision), context, change_id (revise), idempotency_key.
- Returns
- change_id, plan_revision, plan_hash, changes (before → after), not_applied, approval_summary.
apply_website_change
WriteSaves exactly one plan revision to the connected CMS as an unpublished draft, then reads it back.
- Side effects
- Creates one draft change in the CMS. Nothing is live. Creates a signed draft-preview link that expires after two hours. Refuses if the page changed or holds someone else’s draft.
- Inputs
- change_id, plan_hash, idempotency_key.
- Returns
- CMS change reference, baseline and draft versions, read-back result, preview_url.
publish_website_change
Sensitive writePublishes only this change’s own draft to the live website, then fetches the public page to verify the new values.
- Side effects
- Changes the live public website. Other pending drafts are never published. Fails without changing anything if the plan, draft or page changed after approval.
- Inputs
- change_id, plan_hash (the plan the person approved), idempotency_key.
- Returns
- Publication reference and version, verification (verified, pending or mismatch) or approval_url.
get_website_change
ReadReports the actual state of one change, or lists recent changes.
- Side effects
- Asks the CMS about any unconfirmed operation and re-checks the public page, then records what it found. It never repeats or starts a write.
- Inputs
- change_id (optional).
- Returns
- Status, CMS references, versions, verification and next step.
revert_website_change
Sensitive writeUndoes exactly this change: removes its draft, or restores the live page values from before it was published.
- Side effects
- Changes the live public website when the change was published. Never undoes an unrelated change. Refuses if the page was edited since.
- Inputs
- change_id, plan_hash, idempotency_key.
- Returns
- Reverted CMS references, read-back of the restored values and public-page verification.
Approval and publishing
Talking about a change is not permission to make it, and a draft is not permission to publish. The flow is: prepare_website_change (plan) → apply_website_change (unpublished draft, read back from the CMS) → publish_website_change (live, verified) → optionally revert_website_change.
Every plan has a plan_hash that pins its exact fields, values, page and the CMS version it was read from. Revising a plan creates a new revision and a new hash, and approval given for the old one no longer works, in either direction. If the page changed in the CMS after the plan was read, or holds someone else’s unpublished draft, nothing is written.
In Muse. publish_website_change and revert_website_change are sensitive writes, so Muse asks the person to Allow once or Deny every time, showing the change and its approval_summary. The access key issued for Muse treats that allowed call as the approval for exactly the change_id and plan_hash shown. Dance does not use or imitate any other Muse approval interface.
Other MCP clients. For keys whose client cannot guarantee a per-use human approval, publishing and live reverts return an approval_url instead. That Dance review page shows the exact before and after; the person approves by entering their own access key. The link expires after 24 hours and is tied to the change, the action and the plan hash. A value supplied by the model, such as an “approved” flag, is never accepted as approval.
Publication affects only the change’s own records. Other pending drafts on the site, including other editors’ work, stay unpublished. Reverting undoes only the identified change and refuses if the page was edited since.
Status, retries and errors
| Status | Meaning |
|---|---|
| planned | A plan exists in Dance. Nothing in the CMS. |
| drafted | Saved as an unpublished draft in the CMS and read back. Nothing is live. |
| awaiting_approval | Publication requested; waiting for the person to approve on the review page. |
| published | The CMS confirmed publication. See verification for what the public page shows. |
| reverted | This change was undone. The page fields are back to their earlier values. |
| conflict | The page changed outside this plan, so nothing was overwritten. Prepare a new plan. |
| failed | The operation failed without modifying the site. See last_error. |
| applying · publishing · reverting | An operation started and its result is not yet confirmed. get_website_change reconciles it with the CMS. |
Verification. After publishing or a live revert, Dance fetches the managed public page without caches and checks the title, meta description, H1 and changed copy. verified means the page shows every value. pending means the CMS confirmed the change but the page could not be read or still shows older content; it is reported as propagating, not as failed. get_website_change checks again.
Retries. Write tools accept an optional idempotency_key. Repeating a call with the same key and request returns the stored result without writing again; reusing a key for a different request fails without changing anything. Applying, publishing or reverting the same plan revision twice also writes nothing new, and every CMS mutation carries its own idempotency key that the CMS records in the same transaction as the content change. If a call times out, the outcome is reported as uncertain: call get_website_change, which asks the CMS what happened instead of repeating the action.
| Error | Meaning |
|---|---|
| needs_input | No website or page was given. Nothing was started; ask the person which site they mean. |
| no_connected_site · site_not_connected | The website is not connected to this account. It can be analyzed, not edited. Setup steps are included. |
| permission_denied | The access key or the site connection does not allow this action. |
| identity_unverified | The managed page is not recorded as the import of the research URL given. Name the managed page directly. |
| unrelated_draft | The page already holds someone else’s unpublished draft. The connector will not merge into or publish it. |
| conflict | The page changed after the plan was read. Nothing was written. |
| plan_changed | The plan_hash is not the current plan revision. Review and approve the current plan. |
| validation_failed | A requested value is not allowed (unknown field, too long, markup, unknown link). Nothing was planned. |
| idempotency_key_reused | That idempotency_key was used for a different request. Nothing was changed. |
| request_in_progress | The same request is running or its outcome is unknown. Check get_website_change. |
| cms_unreachable · outcome "uncertain" | The CMS did not confirm. Nothing is assumed; get_website_change asks the CMS what happened. |
| daily_limit | A published usage limit was reached. Saved research still works. |
| unsafe_url | The address is not a public website (private networks and unsafe redirects are refused). |
| invalid_address | build_website: not a public address. Nothing was built. (An address with no website returns status no_website: Dance’s team follows up in person.) |
| unavailable | Website tools: Yoink did not answer. Nothing was built or charged; a change already sent is read back with get_website_change_status, never resent. |
| account_owned | change_website / undo_website_change / connect_domain: the website now belongs to a Yoink account; its owner works on it there. Nothing changed. |
| not_paid · not_published | connect_domain: the website must be bought, then published once on Yoink, before a domain connects. Nothing was connected. |
| invalid_domain | connect_domain / check_domain: not a domain name that can be connected. Nothing was connected. |
| site_unreachable | No server answers for that address (DNS lookup failed). Nothing was analyzed; confirm the address and try again. |
What can be edited
On a connected page, one change can update any of these existing fields:
- SEO title and meta description
- Page headline (H1)
- Introduction or hero paragraph
- Tagline on product pages
- Labels and destinations of existing buttons (a page on the same site, or a link the site already uses)
- Text of existing sections: headings, eyebrows, subheadings, paragraphs, bullets, intros and bodies
Not supported:
- Images, layout, adding or removing sections, creating or deleting pages
- Navigation, footer and other sitewide settings (no sitewide changes are possible through the connector)
- Prices, product facts, nutrition and structured data
- Any website that is not connected through a compatible CMS, including arbitrary WordPress, Wix or Squarespace sites
Values must be plain text within each field’s limit, and links must point to an existing page on the same site or a link the site already uses. When a recommendation includes something the CMS cannot apply, such as a new section or FAQ, it is listed under not_applied in the plan before anything runs, so nothing is silently dropped. On product pages the H1 is stored separately from the product name, so changing a headline does not rename catalog cards or breadcrumbs.
Usage limits
Using the connector is free within these limits. One thing it leads to is paid: a website built with build_website is a free preview, and keeping it costs $49, a one-time payment the person makes on yoink.website through Yoink’s own checkout. Nothing is charged in the conversation, and the connector never sees card details.
| What | Limit |
|---|---|
| New live investigations | Set per access key (3 a day by default, 5 for the reviewer key); 6 a day per network; 30 a day across Dance. Reusing finished research is not limited. |
| Website-change operations | 60 a day per access key and 120 a day per network (prepare, apply, publish and revert each count). |
| New website previews | 1 a day per access key, 2 a day per network and 10 a day across Dance. Checking a website already started is not limited. An address with no website builds nothing and uses none. |
| Changes to websites built here | 20 a day per access key, 40 a day per network and 200 a day across Dance (changes and undos), on top of the website’s own allowance on Yoink: a few free changes on the preview, homepage only, then the bought website’s allowance. Checking a change is not limited. |
| Crawling | Up to 60 pages per investigation (7 for a single deep page), public addresses only, robots.txt and its crawl delay honoured, at least 2 seconds between requests to one site. |
| Call duration | Each call returns within about 80 seconds. Longer investigations return status "running" and a run_id to continue. |
| Field lengths | SEO title 120 characters, meta description 320, H1 140, introduction 1,500, button label 60. Plain text only. |
| Scope of one change | One page and up to 20 fields per change. |
| Links | Report and proposal links expire after 7 days and can be revoked; draft previews after 2 hours; approval links after 24 hours. |
Data handling
What is stored, per account: the websites a person asks about and the evidence gathered from them (page text excerpts, search data), investigations, proposals and their revisions, change plans with their before and after values, CMS change references, approval records and verification results. Access keys are stored only as fingerprints; connected-site credentials are encrypted.
Who processes it: Vercel (hosting and the AI Gateway, which sends prompts to the configured model provider, currently Anthropic), Neon (database, United States) and DataForSEO (search data for the domains and keywords being researched). For a new website, Yoink (Dance) receives the current site’s address, an opaque ID for the access key (never the key) and, only if the person gives it, an email address for the ready notice. Changes go only to the CMS the site owner connected. Dance’s private analytics accounts are never exposed to other callers.
Use: only to answer the person’s requests and to operate, secure and support the connector. Data shared through Muse is not sold, not used for advertising or unrelated profiles, and not used to train models.
Retention and deletion: an account’s research and change history are kept until the account owner asks for deletion (privacy@startdancing.ai). Revoking a site connection deletes its stored CMS credential immediately; revoking an access key stops all of its access. Report links, draft previews and approval links expire.
Safety: fetched website content is treated as evidence and never as instructions; it cannot authorize an edit or change permissions. Crawling is bounded, honours robots.txt and refuses private network addresses. Secrets never appear in tool output, URLs or logs.
Dance Technologies’ Privacy Policy and Terms of Use apply.
Reviewer setup
Reviewers receive a dedicated access key through the submission portal’s secure credential method. It is never published. The key:
- Has its own isolated account with research, live and sites scopes, and 5 new live investigations a day.
- Uses Muse’s per-use approval for publishing and reverting (sensitive writes).
- Is connected to the Polar demonstration site with read, draft, publish and revert permission on a fixed set of test pages, including /lemon/. It cannot touch sitewide settings or other pages.
- Can be revoked by Dance at any time; a replacement is issued on request at admin@startdancing.ai.
- Add the connector with the endpoint above and the reviewer key as a Bearer token.
- Ask “What websites can you edit for me?” to see the demonstration site and its permissions.
- Research-led: “How can I make polarseltzer.com/lemon/ better?”, then “Put that proposal on the connected page.” Review the plan, apply it as a draft and open the preview link.
- Direct edit: “Change the headline on the lemon page to …”. No investigation runs.
- Approve the publication when Muse asks, then “Is it live yet?” to see the public-page verification.
- “Undo that change” restores the earlier values; approve it when asked.
- Ask to edit any other website, for example https://example.com, to see the connection requirement.
Example prompts
- How can I make my website better? It’s https://example.com
- Analyze polarseltzer.com/lemon/ and tell me the one change that matters most.
- What websites can you edit for me?
- Change the headline on the lemon page to “Lemon Sparkling Water”.
- Make the introduction on that page shorter.
- Update the title and meta description of the lemon page.
- Put the proposal you just made on the connected page.
- Publish it.
- Is it live yet?
- Undo that change.
- Build me a new website. My current one is example.com.
- Is my new website ready?