add_language
ChatGPTAdds a language to the site and copies the existing content into it as a starting point. The copy is not a translation: follow it with get_translatable_text and apply_translation for each page.
add_product_image
ChatGPTAttaches an image to a product by URL. Use generate_image or list_images to get one.
add_redirect
ChatGPTSends one path somewhere else. Use it when a page or product is removed or renamed and the old address is already out in the world.
add_section
ChatGPTAdds a section to a page (draft only, publish is separate). Starts from the demo payload; anything passed in content/style is merged on top. It never writes a badge, the demo's or yours: add one afterwards with update_section, and only when the person asks for it. The payload is validated against the section schema and rejected with field paths if it does not fit. Structured data is automatic: FAQ sections emit FAQPage JSON-LD, posts Article, product pages Product, and the site Organization and BreadcrumbList; there is nothing to set.
apply_look
ChatGPTDresses the whole site in one look from list_looks: type scale, buttons, badges, card borders and motion, written in one batch and applied to every section already on the site. On a new site call it once the pages have their sections, never before the first section: the preview stays empty until content arrives. Call it again whenever the person picks a different look. Color stays with the theme: set_theme separately, and the answer suggests themes that suit the look. Writes to the draft only, and undo_batch with the returned batchId puts every rewritten section back as it was.
apply_translation
ChatGPTWrites translated strings back, keyed by the ids from get_translatable_text. The original language is untouched: a translation is an extra language on the same section, never a replacement.
create_author
ChatGPTAdds a post author. Posts reference an author by id.
create_form
ChatGPTCreates a form. Where the submissions are emailed is set in the dashboard, not here.
create_page
ChatGPTCreates an empty page. The navbar and footer of an existing page are reused by default, so the new page is not headless. A first build stops at three pages; a later session has no limit.
create_post
ChatGPTWrites a blog post, body and all. A post is not an ordinary page: it carries a summary, author, tags and a publish date, it appears in blog list sections, and it stays off the live site until its status is published. Not during a first build: a site being built for the first time is not ready for articles.
create_product
ChatGPTAdds a product to the catalog. Starts as a draft unless status is set, so nothing appears on the live site by accident.
create_website
ChatGPTCreates a new empty site owned by this account: one blank home page, default theme, no sections, and opens its live preview next to the chat in clients that show MCP Apps. When the person asks for a site, that is the go-ahead: call it straight away, without asking again or offering choices first.
delete_form
ChatGPTDeletes a form. Refuses while a section still points at it, unless force is set.
delete_page
ChatGPTDeletes a page and its sections. The home page cannot be deleted.
delete_post
ChatGPTDeletes a blog post: the page, its sections and the article itself, out of the database. Nothing else on the site holds a copy, so this is not recoverable from the draft. It refuses on the first call and tells you what would be lost; the second call has to carry the post's own slug in confirm, and that is for the person to approve, never for you to decide.
delete_redirect
ChatGPTRemoves one redirect, so the path answers normally again.
delete_section
ChatGPTRemoves a section from its page (draft only).
delete_shared_component
ChatGPTRemoves a shared component. Refuses while a page still uses it, so the only thing it can delete is something nothing renders.
generate_image
ChatGPTGenerates an image with AI and stores it in the site media library. It is refused while any page has no sections: place sections first, then generate, because generating is slow and the preview would sit empty. Spends credits, so only when the person asked for generated images, and never as a question during a build: build with the placeholders and offer images in the hand-over. Reuse list_images when something suitable already exists. Generated images arrive around 2 MB, so before calling, in one message, say what it costs in credits (image_credits) and ask the user whether to optimize them (resize to 1920px, WebP at 80%) and remove the original, and whether to go ahead at that cost; suggest optimizing and removing the original. Call it only after they say yes.
get_analytics_setup
ChatGPTWhat this site can track: which of GA4, Meta Pixel and PostHog are connected, the event names GA4 recommends, and how a funnel is written. Read this before set_link_events — an event sent to a sink the site has not connected fires into nothing, and an invented event name arrives in GA4 with no report built for it.
get_animations
ChatGPTThe entrance animation on every section, and the settings the builder offers. Read this before changing anything: it tells you what the site does now, and it carries the exact type and speed choices to put to the person. Never invent an animation name or a duration; both come from here.
get_page_markdown
ChatGPTEverything a page says, as text: every section in order with its id and its copy. This is how you check your own work before publishing, and how you find the section you want to edit.
get_piece
ChatGPTOne piece with its demo payload: every prop it takes and the value it ships with. Rewrite those values in the customer's words; a piece left on its demo text is as generic as demo copy anywhere else.
get_product
ChatGPTOne product with its variants, options and media.
get_product_settings
ChatGPTHow the catalog is set up: the URL prefix product pages live under per language, the default buy button and quote form, currency and price format, sort options, storefront filters, product type links and catalog translations, plus the terms the catalog actually uses. Read it before changing any of these.
get_section
ChatGPTThe stored content and style of one section, for the given language. Read this before update_section so a patch does not fight what is already there.
get_section_defaults
ChatGPTThe starting payload of a section type: { style, content }. content is NOT language-keyed here; add_section wraps it per language.
get_section_schema
ChatGPTThe allowed shape of a section payload: fields, types, enums and which ones are required. Ask for this when a write was rejected or when writing content by hand.
get_site
ChatGPTSummary of one website: theme (with its colour, radius and shadow tokens when the theme is custom), fonts, favicon, languages, the site look and its pages. Does not return section content — use list_pages and get_section for that.
get_translatable_text
ChatGPTEvery string on a page that should be translated, with an id for each. You translate them yourself and send them back with apply_translation. Fields the renderer switches on (link types, variants) and URLs are left out, so you cannot break the page by translating a token.
image_credits
ChatGPTCredit balance for AI image generation, plus the models this site may use and what each costs.
link_post_translations
ChatGPTMarks two or more posts as the same article in different languages. The live site turns the group into hreflang alternates and the language switcher jumps between them instead of re-prefixing the URL.
list_fonts
ChatGPTThe typefaces a site can be set in: the catalogue by category (sans-serif for body, serif for headings, monospace for code), the curated pairings set_fonts takes by id, and, with a websiteId, the families that site added itself.
list_forms
ChatGPTForms defined on the site, with their ids and every field's name, label, type, placeholder and whether it is required. Form sections reference a form by id rather than carrying fields of their own.
list_images
ChatGPTThe site's media library, newest first: addresses and what each file is. Every row already carries everything known about its file, and a library runs to hundreds. Reuse one of these before generating a new image.
list_languages
ChatGPTLanguages a Beste site can be built in, exactly the list the dashboard offers. Show the user a handful and let them name any other from this list.
list_links
ChatGPTEvery link on the site, with the tracking each one already carries. This is how you see the whole picture before building a funnel: what pages exist, what leads where, and which clicks are already measured. Each link comes back with a path that addresses it exactly; pass that path to set_link_events.
list_looks
ChatGPTThe looks: each studio set as one site-wide setting. A look is the type scale, the button style, the badge look, card borders and motion, written to the site with apply_look so every section, from any set, arrives dressed the same. Color is the theme's, chosen separately.
list_pages
ChatGPTPages of a website with the section list of each page (ids, types, order). Pass a slug to get a single page.
list_posts
ChatGPTBlog posts on the site, with their status, summary, meta description, tags, cover image and table-of-contents flag. Posts are pages with post metadata, and drafts never reach the live site.
list_products
ChatGPTProducts in the site catalog, newest first. Prices come from the first variant.
list_redirects
ChatGPTThe site's redirects: where each one sends a visitor, and whether it is permanent.
list_themes
ChatGPTThemes set_theme accepts, each with its character read off its own colors (monochrome, blue accent, light or dark). Pick the one that suits the brief yourself; do not offer them as a choice unless the person asks to choose colors.
list_websites
ChatGPTLists the websites this token can edit, and names the account it belongs to. Always call this first: every other tool needs a websiteId, and the person watching needs to know whose sites these are.
move_section
ChatGPTMoves a section to another position on its page (0 is the top).
open_preview
ChatGPTOpens a live preview of the site's draft next to the chat, in clients that show MCP Apps. It follows every change as it is saved. Call it before the first change to an existing site, every time, so the person watches the edit land; a new site needs no call, create_website opens it. Once per conversation per site. Without a websiteId it asks the person which site to show.
optimize_images
ChatGPTOptimizes the large library images a site's pages use, in bulk: each becomes a 1920px WebP at 80% (the dashboard's Optimize for SEO), and every section on those pages is repointed to the optimized copy. Images under 500 KB and already optimized copies are left alone. Ask the user whether to remove the original images before calling; suggest removing them. Run with dryRun first to show what would change.
preview_url
ChatGPTWhere to look at the site: the live URL and the builder URL for the draft. The live URL is the only place the layout can be seen, which get_page_markdown cannot show. There is no public URL for unpublished changes.
publish
ChatGPTPuts the draft on the live site, where the public sees it. Everything else writes to the draft only. This is the person's decision and never yours: on an existing site it needs asked, quoting what they said when they asked for it. Finished work is not a reason to publish. Looking right is not a reason to publish. Being sure they would want it is not a reason to publish. The one reason is that they said so.
remove_language
ChatGPTRemoves a language and deletes its content everywhere: sections, navbar and footer, page SEO, per-language URLs and catalog terms. Critical and not undoable with undo_batch. Removing the default language needs newDefaultLanguage, which only the user may choose: if they have not named it, ask them, never pick one. Two steps: call without confirm to get the impact and a confirmation code, tell the user, and call again with confirm set to that code only after they agree.
search_pieces
ChatGPTSearches the piece catalog. A piece is a small live UI component - a chat thread, a booking card, a chart, a phone frame - that sits in a section's media slot instead of a photo. 315 of them, in plain language ("a booking confirmation", "revenue chart"). get_piece for the one you pick.
search_sections
ChatGPTSearches the section catalog in plain language ("customer quotes", "three column pricing"). Returns at most 10 candidates with capacity hints. Pass websiteId and the ones already on the site sink to the bottom, marked, so a site is not built out of one section repeated. Use get_section_defaults on the one you pick.
set_animations
ChatGPTSets the entrance animation across a page, several pages or the whole site in one call. This is the tool for "turn the animations off everywhere" and "make them all slide right, very fast". Omit slugs and sectionIds to mean the whole site. Pass enabled false to switch them off; the rest of the settings are kept, so switching back on restores what was there.
set_appearance
ChatGPTChanges one or more parts of the site's look, site-wide, in one call: the type scale (typography), buttons, badges, card borders, section motion, image motion, base font size. Every existing section and shared component still wearing the old value is rewritten, and every section added later takes the new one. This is the tool for "make the headings smaller", "seal buttons everywhere", "no card borders", "calmer animations". Pass only the fields to change. On typography, cardBorder, sectionAnimation and mediaAnimation, null or "auto" means per block: the setting is cleared and each section keeps its own. Buttons and badges have no per-block mode: a site has one button style and one badge look, applied to every section on the way in. Writes to the draft only, and undo_batch with the returned batchId puts every rewritten section back as it was.
set_buy_button
ChatGPTWhat the main button on a product does by default: open the product's own external link (link), open a quote request form (quote), or add the product to a quote list that submits in one go (cart). Also the button text and the form quotes go to. Each product can override the button in the dashboard.
set_catalog_translations
ChatGPTTranslates the catalog's shared terms once for every product: product types, tags, vendors, variant option names and option values. Product data stays in the default language; the storefront shows these in the other languages. Merged into what is already set. Writes to the draft only; the answer carries what it replaced as previous, and sending that back undoes it.
set_default_language
ChatGPTMakes a language already on the site the default: served without a language prefix, and the one new content is written in. Every page and product URL moves with it. Two steps: call without confirm to get the impact and a confirmation code, tell the user, and call again with confirm set to that code only after they agree.
set_fonts
ChatGPTSets the site's typefaces: a curated pairing by id from list_fonts, or any of sans (body), serif (headings) and mono (code) by font name. Slots left out keep what they have. Fonts are CSS-driven: nothing is rewritten, and the theme's colors stay.
set_link_events
ChatGPTSets what a link fires when it is clicked, addressed by the path from list_links. Replaces whatever that link carried, so pass every event it should have; an empty list removes tracking. Takes several links at once, which is how a funnel is written: one call, one step per link. Only the link is touched, never the rest of the section. Writes to the draft only, and undo_batch with the returned batchId puts back what it replaced.
set_navbar
ChatGPTSets the navbar as a shared component used by every page. Call it once per site: editing it later changes all pages at once. It is written not sticky; that is the reader's call to make in the builder.
set_price_display
ChatGPTThe currency new products default to, and how prices read on the storefront: with the symbol ($) or the code (USD), and an optional wording template per language.
set_product_buy_button
ChatGPTWhat the main button on one product does, overriding the site default from set_buy_button: open its own link (link), open a quote form (quote), add to the quote list (cart), or inherit to follow the site default again. Also the button text, the quote form, and for link the URL the button opens.
set_product_filters
ChatGPTThe filters shoppers get on product grids, in this order, replacing the current list. Every filter reads the products' own data, so nothing extra has to be tagged: a variant option (Size, Colour), tags, vendor, product type, price or a search box. Read get_product_settings first, and pass the whole list, so a change keeps what is already there. Writes to the draft only; the answer carries what it replaced as previous, and sending that back undoes it.
set_product_price
ChatGPTSets the price, and optionally the compare-at price, of a product. A product with one variant needs nothing more; one with a size, level or colour matrix takes the variantId of the variant to price, from get_product.
set_product_sorting
ChatGPTWhich sort orders the product grid offers, in this order, and what they are called. The values are fixed (featured, newest, price-asc, price-desc, name-asc, name-desc); a value left out is not offered. Replaces the current list. Writes to the draft only; the answer carries what it replaced as previous, and sending that back undoes it.
set_product_type_links
ChatGPTWhere a product's type name links to when it is shown on a product page, e.g. Chairs to /chairs. A type without a link shows as plain text. Merged into what is already set. Writes to the draft only; the answer carries what it replaced as previous, and sending that back undoes it.
set_product_url
ChatGPTSets the URL prefix product pages live under: /{basePath}/{handle} in the default language, and a prefix of its own in any other language, e.g. /de/produkte/blaue-tasse. Custom product pages move with it, and the old prefix redirects to the new one, following the site setting.
set_site_search
ChatGPTTurns visitor search on or off. When on, every navbar shows a search button that opens a dialog searching the published pages, posts and products by their text. Every string in the dialog can be set per language with copy.
set_site_seo
ChatGPTSets the site-wide SEO title and description that search engines and link previews show, per language. Page-level SEO is update_page.
set_theme
ChatGPTSwitches the site theme. Colors come from the theme, which is why sections carry almost no color of their own.
share_section
ChatGPTTurns a section that already exists into a shared component, and optionally puts it on other pages. Use it the moment the same block belongs on more than one page: a contact strip, a CTA band, an announcement.
undo_batch
ChatGPTReverts a write batch by its batchId. Only operations that carry a previous value can be reverted; an added section has to be removed explicitly.
unlink_post_translation
ChatGPTTakes a post out of its translation group. The other posts in the group stay linked to each other.
update_form
ChatGPTChanges a form. Fields are replaced as a whole, so send the complete list. Recipient emails are never touched from here. Writes to the draft only, and undo_batch with the returned batchId puts back what it replaced.
update_page
ChatGPTRenames a page, changes its slug, gives it a slug of its own in another language, or sets its SEO title/description. For a blog post use update_post: post SEO is flat, not language-keyed, and lives with the post's other metadata.
update_post
ChatGPTChanges a post's metadata: title, summary, meta description, tags, author, cover, read time, publish date, table of contents, and whether it is published. Post SEO is set here, not with update_page.
update_product
ChatGPTChanges a product: title, description, handle, tags, status, meta title/description. Price lives on variants, use set_product_price for that. A live product whose handle changes gets a redirect from its old address, following the site setting.
update_section
ChatGPTPatches an existing section. content is merged per language. style is merged field by field at every depth: send only the fields you change and the rest stays as it is; changing colors.invertColor also clears the section's theme color. Send a field as null to remove it: emptying a badge's label leaves the badge behind, null takes it away. hide sets where the section shows (per device and per language), e.g. only on mobile or hidden on mobile; it works on navbars, footers and shared components too, and stays per page. Writes to the draft only, and undo_batch with the returned batchId puts back what it replaced.
write_post_body
ChatGPTReplaces the body of a post with Markdown. The title, author, date and cover come from the post itself, so the Markdown is just the article. An image is : the alt becomes the image alt attribute, the quoted title the visible caption. Writes to the draft only, and undo_batch with the returned batchId puts back what it replaced.