MCP & AI connections
Connect ChatGPT, Claude, Codex, or Claude Code, choose access, and make your first website update.
Read as Markdown · AI documentation indexOn this page
Use ChatGPT, Claude, Codex, or Claude Code to read your websites, ask for changes, save revisions, publish, and roll back. Iron Fountain Hosting’s MCP connector uses a normal sign-in and permission screen. You do not need an Iron Fountain API key, OAuth client ID, or client secret for these setups.
Connector address
https://app.ironfountain.com/mcp/hosting
Every Hosting customer uses the same connector URL. It grants access to Hosting only; your Iron Fountain login and organizations stay shared. You choose which Iron Fountain organizations to allow during sign-in. All your current organizations are selected by default; you can uncheck any of them. Manage your connections in your avatar → Connections.
Set up ChatGPT
In ChatGPT on the web, open Settings → Security and login and enable Developer mode. Open ChatGPT Plugins, select +, and create a connection named Iron Fountain Hosting using the connector URL above. Choose OAuth. Leave client ID and secret blank and choose dynamic client registration if asked.
Sign in to Iron Fountain and approve the organizations and permissions. Start a new chat and select Iron Fountain Hosting from + → Developer mode. Developer mode supports reads and writes; availability depends on your account and organization policy. See OpenAI’s developer-mode guide and connection instructions for current menu labels.
Set up Claude
Connect to Claude opens Claude’s Add custom connector form with Iron Fountain Hosting’s name and URL already filled in. Review the values and add the connector. Leave OAuth client ID and client secret empty; Claude registers automatically.
If you need manual setup, open Customize → Connectors → Add custom connector, name it Iron Fountain Hosting, and paste the connector address above.
Click Connect, sign in to Iron Fountain, and choose the organizations and permissions. Check that the authorization screen returns to claude.ai, then click Allow connection. Return to Claude and enable Iron Fountain Hosting for your conversation using its connector controls.
On Team or Enterprise, an organization owner first adds Iron Fountain Hosting under Organization settings → Connectors. Members then connect their own Iron Fountain logins. Each connection follows that person’s membership and the organizations they approved.
Set up Codex
In the desktop app, open Settings → MCP servers → Add server. In the IDE extension, open MCP servers from the gear menu and select Add server. Name the server ironfountain, choose Streamable HTTP, and enter the connector address above. Save, then choose Restart or Restart extension as prompted. Select Authenticate to sign in to Iron Fountain and approve your organizations and permissions.
For the Codex CLI, install and sign in to Codex first, then run this in your terminal:
codex mcp add ironfountain --url https://app.ironfountain.com/mcp/hosting
Complete the browser sign-in if it opens. If sign-in does not start, or you need to reconnect later, run:
codex mcp login ironfountain
Sign in to Iron Fountain and approve your organizations and permissions. Start a new Codex session and use /mcp to check that ironfountain is connected. The desktop app, CLI, and IDE extension share MCP configuration on the same Codex host; you only need one setup method. See OpenAI’s MCP setup guide.
Set up Claude Code
With Claude Code installed and signed in, run this in your terminal:
claude mcp add --transport http --scope user ironfountain https://app.ironfountain.com/mcp/hosting
The --scope user option makes this connection available to you across projects on this computer. Start a new Claude Code session, run /mcp, select ironfountain, and follow the authentication steps. Sign in to Iron Fountain and approve your organizations and permissions, then return to /mcp to check the connection.
If the server already exists, skip the add command and authenticate through /mcp. If your browser does not open, use the sign-in URL Claude Code provides. See Claude Code’s MCP setup guide.
Start with your websites
After connecting your chosen client, enable Iron Fountain Hosting in the conversation if prompted and try:
Use Iron Fountain Hosting to list my available websites.
The Connect your AI button on the homepage and in the app opens setup instructions for all four clients, with Copy buttons for terminal commands, the connector URL, and this starter prompt.
Make your first change
Try this in a conversation with Iron Fountain Hosting enabled:
List my websites. Read the homepage and stylesheet for the site I choose.
Update the introduction to explain what we do more clearly, preserving
the existing design and all other files. Save a draft revision and tell
me exactly what changed. Wait for me to ask before publishing it.
Your AI can batch up to ten relevant file reads in one call and read retained files in chunks, so large pages do not need to fit in one tool response. For small edits it can send exact text replacements instead of rewriting a whole file; Iron Fountain preserves unchanged files from the chosen base revision. The result is still a complete, immutable site revision.
A draft does not change the live site. You can review the changed content in your chat and open the site’s Revisions tab in the Iron Fountain dashboard. Revisions are also linked from each site card and the site overview, and refresh automatically every 15 seconds while the page is visible. The Revisions screen has separate Staging and Production histories, with independent revert controls. Every saved draft updates the permanent staging_url, such as my-site.staging.ironfountain.net. revision_url opens that exact retained revision; production_url opens the published site. The site header opens the current staging revision; each entry in Revisions has its own View revision link. Temporary import previews retire immediately when a site is saved to an organization.
Change the staging subdomain in site Settings → Staging address, or with set_staging_address. Any available valid name can be used, such as secret.staging.ironfountain.net.
When you are ready, ask your AI to publish the saved revision. Publication and production rollback preserve staging; staging reversion preserves production. If the result needs undoing, ask it to restore the previous revision. Draft and published revisions follow the plan’s automatic history policy. Pin important versions in the dashboard or ask your AI to pin them. Pins have their own quota and do not reduce recent history.
Search, AI answers and site speed
Your AI can improve how your site shows up in search engines (SEO) and in AI assistants' answers (AEO), and how fast it loads, by editing its files. Each change goes to staging first, like any other edit. No one can guarantee rankings or mentions, but these changes give search engines and AI tools clearer information.
Try a request like this:
Review my staging site for SEO and AEO. Check every page's title, meta
description, headings, image alt text, canonical link, sitemap.xml and
robots.txt, and suggest structured data for my business. List what you
would change, then save the changes as a draft for me to review.
For search and AI answers, your AI can:
- Give every page a unique title and meta description, and one clear main heading.
- Add descriptive alt text to images and descriptive text to links.
- Answer common customer questions in plain language, for example in an FAQ section.
- Add structured data (JSON-LD), such as your business name, address, opening hours and services.
- Keep
sitemap.xmlandrobots.txtup to date, and add anllms.txtsummary for AI tools. - Add a redirect when a page moves, so links and search results keep working. See Page and file redirects.
For speed, try "Find what makes my homepage slow and fix it on staging." Your AI can:
- Find oversized images, then resize them, convert them to WebP, set their width and height, and load images further down the page only when needed. Resizing and converting images needs an AI tool that can run code, such as Codex or Claude Code.
- Remove unused scripts, fonts and embeds, and load the remaining scripts without blocking the page.
- Rename stylesheets, scripts, fonts and images with their content hash so browsers keep them for a year. See Caching and compression.
Iron Fountain already serves every site over HTTPS through a global CDN and compresses text files automatically. Staging, revision links and test sites are hidden from search engines, so only your published site is indexed. Once your custom domain is active, the free Iron Fountain address redirects to it instead of showing a duplicate copy.
The connector does not read search rankings, analytics or speed scores. Use tools such as Google Search Console or PageSpeed Insights on your published site, and share what they report with your AI.
Permissions and organizations
| Permission | Connector tools it enables |
|---|---|
| Read websites | List sites, read site details and history, list files, read files, view bandwidth, and read form submissions and private attachments. Required for every connection. |
| Manage websites and forms | Create websites, pause/resume forms, and update or delete submissions. |
| Import, edit and publish | Import websites, save draft revisions, publish retained revisions, and roll back. |
| Manage domains | Prepare and verify domains, HTTPS, and redirect domains. |
| Remove domains | Disconnect main or redirect root/www pairs. Separate opt-in permission; current owners only, with exact-hostname confirmation. |
| Read billing | Shared payment-method summaries and invoices; owners with all-site access only. |
| Manage plans and subscriptions | Select complimentary plans, quote and confirm paid plans, manage payment methods, cancel, and resume renewal. Owners only; can incur real charges. |
The authorization screen lets you turn off write permissions. A read-only connection does not expose write tools. One connection can access multiple approved organizations. Newly joined organizations are not added automatically. If an editor loses access to one organization, that organization stops appearing while access to the other approved organizations continues. Existing connections retain their original approval. Open your avatar → Connections → Manage access to explicitly add organizations or limit access to selected sites. Selecting all sites includes future sites in that organization; selected-site access includes only the checked sites. Creating websites requires all-site access plus the Manage websites and forms permission.
The connector and REST API support the same Hosting workflows. MCP connects to your account and works across approved organizations; each API key is restricted to one organization. Permanent site deletion, organization creation and administration, managing people, transfers, API keys, personal settings, and platform complimentary grants remain browser-only for both credential types.
Billing and domain-removal permissions are unchecked by default and require explicit approval. Existing connections keep their permissions; reconnect and select the new permissions to add them. Owner permissions apply only in organizations you own, even when the same account connection includes organizations where you are an editor. Ownership and access are checked on each request. Selecting only specific sites does not grant access to shared organization invoices or card management.
Tools
| Tool | Purpose |
|---|---|
list_sites | List all approved organizations and their sites. |
get_bandwidth | Read monthly bandwidth, request counts, daily and hostname breakdowns, and collection status. An optional month uses YYYY-MM. |
get_site | Read a site’s live revision, addresses, redirects, history, and dashboard link. |
list_files | List file paths, sizes, and hashes in the live or a specified retained revision. Filter with path_prefix; follow next_offset for more. Defaults to 200 entries, maximum 1,000. |
read_files | Read up to ten files/chunks from a single revision, sharing revision lookup. Combined requested output is limited to 80,000 characters/bytes, with 5 MB per source file and 20 MB of source data per batch. |
read_file | Read a file in bounded chunks. Text uses UTF-8 character offsets; binary data uses base64 byte chunks. Continue from next_offset until it is null. |
get_forms_guide | Read the HTML and manifest guide before creating forms; includes limits and attachment types. |
list_forms | Read form definitions, staging/production availability, per-environment form_handlers, unread counts, and usage. |
connect_forms | Connect recognized or explicitly opted-in forms, update fields, and return a handler review in a staging revision. Pass expected_staging_revision_id to reject concurrent edits. Does not publish. |
list_form_submissions | Read paginated submissions and attachment metadata; use environment: "test" for staging. |
update_form | Pause or resume collection using enabled. |
update_form_submission | Mark read or unread. |
delete_form_submission | Delete a submission and revoke attachments only when requested. |
read_form_attachment | Read a private attachment in bounded base64 byte chunks. |
create_site | Create a new static site. Set organization_id when multiple organizations are approved. |
create_upload_url | Create a short-lived link for sending one binary asset — an image, font, video or PDF — to a site as raw bytes, without putting it in the conversation. Requires a client that can make its own HTTP requests. Returns upload_url; each PUT returns the stored file's hash for save_revision. |
copy_asset | Copy stored files from a revision of one approved site into another, server side. Returns each file's hash for save_revision. Up to 50 files per call. |
save_revision | Apply exact text replacements, full-file replacements, or deletions to a base revision and save an unpublished revision. Unchanged files are preserved. |
publish_revision | Make a saved revision live after checking the expected current revision. |
set_staging_revision | Revert staging to a retained revision using expected_staging_revision_id; production is unchanged. |
set_staging_address | Rename staging using an available slug; production and both histories are unchanged. |
pin_revision | Pin or unpin a chosen revision using the separate per-site allowance. |
delete_snapshot | Delete a pointer using its snapshot_id; the target revision still follows remaining retention rules. Only on explicit request. |
delete_revision | Delete an unused revision. Current, pinned, or snapshot-referenced revisions are protected. Only on explicit request. |
rollback_site | Restore a retained revision after checking the expected current revision. |
get_terms, get_plans | Read import rights, current Terms, plan IDs, bandwidth, and published prices in cents. |
|---|---|
lookup_import | Find a previously imported or hosted site within approved access, or start a new flow. Choose organization_id when multiple organizations are connected. |
import_site, list_imports, publish_import | Start a consented import, read progress and reports, then explicitly publish the reviewed copy. |
publish_staging | Promote the reviewed staging revision to production after the user asks to go live. Pass staging_revision_id from get_site; it fails without publishing if staging changed. |
reset_staging_to_production | Point staging at the current production revision when the user asks to start over from what is live. Pass active_deployment_id from get_site as production_revision_id; it fails without changing staging if production changed. Production is unchanged. |
update_site, get_storage, get_revision | Update site settings, read storage usage, and inspect full revision metadata. |
get_dns, get_dns_provider | Read ownership/DNS/HTTPS status and identify the prepared domain’s DNS provider. |
prepare_domain, add_domain | Prepare the root/www pair or add one supported hostname. |
verify_domain_ownership, check_domain_connection, verify_domain | Recheck ownership and request DNS/HTTPS connection checks. |
add_redirect_domain | Prepare an additional root/www pair redirecting to the site’s main address. |
remove_domain, remove_redirect_domain | Disconnect a main or redirect root/www pair after explicit instruction. Requires opt-in domains:delete, current ownership, and the exact root in confirm_hostname. |
create_path_redirect, update_path_redirect, delete_path_redirect | Manage hostname-specific path redirects. |
get_organization_members, get_organization_activity | Read people/invitations or activity in a chosen organization; all-site access required. |
get_site_billing | Read effective plan, complimentary ceiling, payment state, end date, and billing link. |
get_organization_billing, get_billing_profile | Read organization plans, payment-method summary, and invoices. Requires billing:read, ownership, and all-site access. |
set_complimentary_plan | Select a plan within the effective complimentary cap with billing:write; no subscription or charge. |
quote_plan, confirm_plan | Review exact paid-plan terms and explicitly confirm using billing:write. |
get_pending_payment, refresh_billing | Inspect an approved payment or reconcile subscription status. |
cancel_subscription, resume_subscription | Stop renewal at period end or undo scheduled cancellation. |
setup_payment_method, save_payment_method | Begin secure card setup or save a completed SetupIntent; ownership and all-site access required. |
delete_empty_site, get_deletion_status | Clean up an empty site with no content, imports, custom domains, or subscription; or read progress of a deletion requested in the dashboard. |
delete_form_submissions, export_form_submissions | Bulk-delete selected submissions or export CSV. Exports return up to 40,000 characters with an authenticated download URL for the full file. |
Read get_site before changing a site. save_revision requires base_revision_id and expected_live_revision_id; both can be null for the first revision of an empty site. Include expected_staging_revision_id when saving to reject concurrent staging edits. Use the current staging revision as the base when continuing unpublished work. Publication and production rollback require expected_live_revision_id too. These checks prevent a stale conversation from replacing a newer live edit. If a tool returns 409, reread the site and review the newer work before trying again.
save_revision accepts a label and a changes array. Each entry has a path and exactly one of complete file content (utf8 or padded base64), uploaded_hash from create_upload_url, delete: true, or replacements: [{old_text, new_text}]. Text replacements require expected_hash from a file read or listing, UTF-8 text up to 5 MB, and each old excerpt must match exactly once. Replacements are applied in order and a mismatch rejects the entire draft without partial changes. A file path can appear only once. Deleting a missing file is an error. A root index.html is optional. To create an empty revision, use a null base and an empty changes array. Missing paths return 404.
Do not blindly retry a write after a timeout: it may have completed. Read the site’s revision history first. Mutating tools are marked as writes for your AI app’s approval controls; publishing and rollback are marked as potentially destructive.
Images and other binary assets
An AI assistant cannot send you a file it only sees as an image. When you attach a logo in a chat window, the picture reaches the assistant as pixels, not as the original bytes, and nothing it types can reproduce them exactly. Base64 in a tool call is also expensive: a 2 MB image becomes 2.7 MB of text that has to pass through the conversation.
create_upload_url avoids both problems. The assistant asks for a link, sends the file to it as raw bytes, and then names the returned hash in save_revision as uploaded_hash with the path the file should have. Nothing about the file travels through the conversation.
This needs an assistant that can make its own HTTP requests or run shell commands — Claude Code, Codex, Cursor, or anything else with a terminal. In a plain chat window with no such tool, the assistant cannot reach the link, and the practical options are to give it a public URL for the image, or to add the file yourself in the dashboard.
Files the site already stores need no upload at all. Any hash from one of its revisions can be reused at a new path, and copy_asset brings a file in from another site you are approved for — both without moving bytes through the conversation.
Each link lasts 30 minutes, covers one site, and may be reused for several files. Each file must be 5 MB or smaller. Upload and save in the same session: bytes no saved revision references are discarded within the hour. Text files belong in save_revision as content, where exact replacements and compression apply.
Page and file redirects
MCP manages revision redirects through __ironfountain/redirects.json. Read get_site first: revision_redirects lists staging and production rules separately, while redirects lists hostname-specific settings. Hostname-specific rules take precedence and use create_path_redirect, update_path_redirect, and delete_path_redirect; these changes take effect immediately on their hostname.
- Choose the environment's current revision and read its existing redirect file with
read_file, if present. Preserve the other rules. - Use
save_revisionwith that revision asbase_revision_id, the currentexpected_live_revision_id, andexpected_staging_revision_id. Replace the redirect file with the updated rules. This creates a staging revision; production stays unchanged. - Share
staging_urlto test. Usepublish_revisionwith the returned revision ID and current expected live revision when publication is requested. Redirects and content publish together.
The file format is:
{"version":1,"redirects":[{"from":"/old-page","to":"/new-page/","status":301},{"from":"/downloads/current.pdf","to":"https://files.example.com/current.pdf","status":302},{"from":"/privacy","to":"/legal/?section=privacy","status":301,"preserve_query":true}]}
Remove a rule by saving the remaining rules. If none remain, delete the file using changes: [{"path":"__ironfountain/redirects.json","delete":true}]. Only delete a file that exists in the base revision. Both set_staging_revision and rollback_site restore the selected revision's redirects with its files.
Rules use exact paths, optionally including an exact query string. They support 301, 302, 303, 307, and 308, with up to 2,000 rules per revision. The visitor's query string is dropped unless a rule sets "preserve_query": true; then it is added to the destination, and a parameter the destination already sets keeps the destination's value. Hostname-specific rules have the same option. Prefer revision redirects, and use one kind of rule per path: a hostname rule silently overrides a revision rule for the same path on its hostname, but never runs on staging. See Choosing a redirect type. Local destinations remain on the current staging or production address; external destinations remain external. Redirect loops are rejected. See the API redirect reference for precedence and limits. Root/www redirection and additional redirect domains are separate domain settings.
Limits and history
A site can contain 20,000 files and 1 GB. Each connector edit accepts 200 changed files, 5 MB per changed file, and 100 MB of changes. Use a base revision to preserve unchanged files. The 1 GB site storage allowance includes retained history. Website imports allow 200 pages, 100 MB per file, and 1 GB total. The connector permits up to 180 authenticated requests per minute per connection; slow down and retry later if you receive a rate-limit response.
File reads return at most 40,000 text characters or binary bytes per call, with a default of 20,000. Each environment returns its latest distinct revisions up to the plan allowance: 3 for Spring, 20 for Flow, and 50 for Cascade, plus existing revisions protected by a 30-day downgrade recovery window. site.history_policy.recovery_until and recovered history rows' recovery_until report the deadline (Unix milliseconds, or null). Flow includes 10 pins per site and Cascade includes 25, separate from recent history. get_site also returns snapshots, pinned revisions (including those in recovery), and site.history_policy. Known retained revision IDs can still be read or restored. Both current revisions, paid pins, recovery revisions, and every revision referenced by a retained snapshot are protected from cleanup. Paid monthly snapshots last 12 months; before-change snapshots last 30 days and are created when changes resume after a 24-hour gap. Recovery can extend existing snapshots through its deadline. Explicit deletion still requires the user's request. See automatic history for details.
Caching and compression
Visitors receive HTML, CSS, JavaScript, JSON, SVG and other text files compressed automatically (zstd or gzip, as each browser supports). Upload files uncompressed; do not add .gz or .br copies or set encodings yourself.
Production files are served with Cache-Control: public, max-age=0, s-maxage=60 and an ETag. Browsers check each file again when it is used, so published changes reach visitors within about a minute.
A file named by its own content hash is served with Cache-Control: public, max-age=31536000, immutable, so browsers keep it for a year without checking. The hash is the first 24 hexadecimal characters of the SHA-256 of the file's exact bytes. It must come directly before the file's extension, either as the whole name or after ., - or _, in any folder: assets/styles.34af0da141c4c9f637141b99.css, fonts/brand-34af0da141c4c9f637141b99.woff2 and imported-assets/34af0da141c4c9f637141b99.css all qualify when the hash matches. Other names, including a build tool's own shorter hashes, do not. The hash is checked on every request, so a file edited in place under an old name is served with normal caching, never stale. New imports name copied builder files this way.
To give a new or edited stylesheet, script, font or image the long lifetime, compute the SHA-256 of its final bytes, save it under a name carrying that hash, and update every reference to it. Pages keep their normal addresses and caching. Missing files and staging, test and revision addresses never receive the long lifetime.
Disconnect or change access
In Iron Fountain, click your avatar in the lower left → Connections. All connections for your login appear together. Choose Manage access, select organizations and sites, then Save access. The new access applies on the next connector request, including requests using already-issued tokens. Content already read into a conversation remains there.
Choose Disconnect to revoke the connection. Access stops immediately, including token renewal. Removing an editor from an organization revokes access to that organization. Disconnect revokes the entire connection across all approved organizations.
Organization and site access can be adjusted here without reconnecting. Reconnect from your AI app to change read or write permissions. Your app renews the connection automatically; after 30 days without use, you may need to reconnect. API keys used by scripts are independent and keep their configured expiry, including Never.
Troubleshooting
Long thinking periods: batch related file reads and use text replacements for small edits. This reduces the number of tool calls and the amount of content your assistant needs to process. ZIP transfer is not currently supported through the connector.
“Host is not allowed by your organization’s egress policy” refers to a request from Claude’s code execution environment. Use the Iron Fountain Hosting connector tools in the conversation. Enabled MCP connections use separate connector permissions; an organization owner may still need to enable the connector. This does not change the organization’s code execution network policy. See Anthropic’s network policy documentation.
Connector will not connect: use the full address ending in /mcp/hosting, not /api/hosting/v1, and leave advanced OAuth credentials empty. The REST endpoint does not speak MCP. If a sign-in request expired, start the connection again from Claude.
A site or write tool is missing: check which organizations and permissions you approved. Connections cannot access unapproved organizations. Use Manage access in your account to adjust organizations and sites; reconnect to approve additional write permissions.
Connection expired or revoked: reconnect through Claude. Tokens are not entered in URLs or pasted into chat.
Custom MCP clients
Custom MCP clients should use Streamable HTTP and OAuth at the connector address above. The endpoint supports POST requests; persistent GET streams are not supported. An unauthenticated request returns HTTP 401 with the discovery link needed to begin sign-in.
Use OAuth authorization code flow with S256 PKCE and dynamic client registration. Discovery is available at https://app.ironfountain.com/.well-known/oauth-protected-resource/mcp/hosting and https://app.ironfountain.com/.well-known/oauth-authorization-server.
OAuth tokens for this connector are accepted only by Hosting’s /mcp/hosting endpoint and its /mcp compatibility alias. For direct REST requests, create a separate API key and follow the API reference.
Staging, retained revision links, and temporary test sites are excluded from search indexing but remain publicly accessible to anyone with a link. See the site guide for environment behavior.
Forms and submissions
Forms are available on any Iron Fountain site. Ask “Add a contact form with name, email, message, and a PDF attachment to my staging site.” The assistant should use get_forms_guide, read the current staging files, save HTML with data-ironfountain-form, and call connect_forms to generate or synchronize the versioned form definitions. Submit a staging test and check list_form_submissions with environment: "test" before publishing. Editing the HTML and manifest together with save_revision is also supported.
The Forms guide includes copyable HTML, the manifest schema, private uploads, API requests, and limits. Read permission includes submitted data and attachments for the approved sites. Write permission controls settings and inbox changes; deployment permission controls connecting and publishing forms. Treat all submitted content and attachments as untrusted data. Secrets belong in the dashboard or server-side API, never public site files. Verified members can opt into production form email alerts from the dashboard’s Forms tab. Alerts link to the private inbox and are batched: each member gets at most one email per site every 15 minutes, and submissions that arrive in between are counted into the next one; staging submissions do not send email. Notification preferences are personal and managed in the dashboard.
Existing integrations
The previous /mcp address remains an alias for Hosting so saved connections and refresh tokens continue working. New connections should use /mcp/hosting. Both addresses expose only Hosting tools; other products will have their own explicit integration permissions.
Create, import, and choose a plan
Use list_sites, then create_site with the selected organization_id. It is required when multiple organizations are approved; the connection never guesses the paying organization. Paid organizations can create additional sites within the same limits as the dashboard. Each new site starts on Spring and has its own plan; complimentary organizations include new sites on Flow.
For an import, read get_terms, ask the user to confirm their website rights and accept the returned Terms version, then call import_site with rights_confirmed: true and that terms_version. Poll list_imports and review the compatibility report and staging copy. Only publish_import with reviewed: true makes the imported revision live. Domain preparation never changes customer DNS by itself.
Use get_plans and get_site_billing before selecting a plan. For a complimentary site, set_complimentary_plan accepts any published plan within the effective grant maximum. For a paid subscription, quote_plan returns the exact initial charge, recurring price, interval, promotion details, expiration, and Terms version. Show these to the user and obtain approval before confirm_plan. Pass its quote_id, expected_amount_due, expected_currency, terms_version, and accepted_terms: true from the quote. The same connection must confirm its own quote. Wrong or stale terms are rejected before payment.
Payment may require a secure browser step. Follow billing_url when requires_action is true; never request raw card details in chat. Selected-site connections may change approved site plans using the organization’s saved card. Reading shared invoices or changing that card requires all-site access. cancel_subscription returns the actual paid-through end date; report it to the user. A lower plan starts its 30-day history recovery window only when paid access ends.
Domain removal requires the separate domains:delete permission, unchecked by default. domains:write and existing credentials do not include it. After the user explicitly requests disconnection, read the domain status, explain that both root and www will stop serving or redirecting here, and pass the exact root as confirm_hostname to remove_domain or remove_redirect_domain. These tools do not edit customer DNS. Permanent deletion of a populated site remains dashboard-only. After requesting a site deletion in the dashboard, get_deletion_status can report when cleanup completes before starting a fresh import.