MCP App Store
by KeenEthics

Overview

Mondovo is a website design and creation tool for business owners, creators and agencies. Turn a description of your business into three distinct website designs, compare visual previews and choose the direction you prefer. Build a landing page or a business website without writing code. Refine your chosen design in plain language: change colors, typography, images, copy and page layout, or add new pages. Interactive cards show your designs, previews and progress in the conversation. When you are ready, ask Mondovo to publish the chosen website and share its live link. Your projects and revision history are saved in your Mondovo account. To support work on your website, you can also browse saved Creative Studio images and videos, review social post drafts, check video project progress and view contacts collected by your website. A Mondovo account is required. Access is limited to the workspace and permissions you approve when connecting.

Tools

add_collection_item

ChatGPT
Add ONE item to an existing collection: write a blog post, add a dish, a product, a listing. It is saved as a DRAFT by default and stays hidden from visitors. Set status "published" only when the user explicitly asked for it to go live; a published item is sent to the public site by collection auto-publish, so confirm that public change before calling. Does not create the collection — use create_collection for that. For several items at once use add_collection_items.

add_collection_items

ChatGPT
Save up to 50 items into one existing collection in a single step — typically the drafts from draft_collection_items that the user kept. They are saved as DRAFTS by default and stay hidden from visitors. Set status to "published" only after the user explicitly asks for it; each published item is sent to the public site by collection auto-publish, so confirm that public change before calling. Each item is saved on its own, so one bad item never blocks the rest; the result lists any that failed.

add_page

ChatGPT
Add ONE new inner page to an existing site that already has a design (create_site / create_site_from_design first). Two modes, chosen by whether you pass code: • MONDOVO WRITES IT (no code): Mondovo's AI generates the page to match the site's theme, header and footer. Give a description of what the page is for. Optional nav_placement ("main" header menu — the default, "footer", or "none") and nav_label: only this page's link is added; existing menu items are never changed. Returns a job_id immediately; poll get_job every ~10s until "completed" (~45-90s). Runs server-side even if this conversation ends. Counts as an AI refinement. • YOU WROTE IT (pass code): the page you authored is added as-is — no AI, no credits, no job. Send the COMPLETE TSX (same authoring contract as update_variation_file). Nothing wraps your page in the site's chrome, so build it the way this design's existing pages are built — read_design and copy an existing page's imports (usually <ThemeStyles />, <Header /> and <Footer /> from './ThemeStyles', './Header', './Footer'). Put the page's own text in content under NEW top-level keys, conventionally one key page_<slug> (e.g. { "page_marketing": {...} } for /marketing); the code reads them as content.page_marketing. Your code may also read keys the site already has, but content may not redefine them. Optional seo (title, description), nav_placement ("main" header menu — the default, "footer", or "none") and nav_label. variation_id picks the design (from list_variations); omit it for the site's chosen design. The page is validated with the same checks update_variation_file runs (content first, then code); a refusal writes NOTHING and returns the issues. A slug, file name or content key the design already has is refused — to change an EXISTING page use update_variation_file / patch_variation_content instead. On success it returns the page's slug, file and content key plus how_to_edit, and lands as one entry in version history (version; history_warning means it saved but was not recorded). Nothing is live until publish_site. To try an alternative version of an EXISTING page without touching the live one, use create_page_draft, not this tool.

add_pages

ChatGPT
Add multiple inner pages to an existing site in one call (up to 10). Each page is generated to match the site's existing theme. Use this to stand up a full set of pages (About, Services, Contact, etc.) at once. The site must already have a design. Returns a job_id immediately; poll get_job every ~10s until its status is "completed". Pages are generated with bounded parallelism, so a batch of 10 takes minutes, not 10x one page. Per-page failures are reported individually in the job's failed array — one bad page does not abort the rest, so a "completed" job can still carry failures worth reporting to the user. These pages are NOT added to the site's menu — to link them, patch_variation_content navigation with the full edited array (or use add_page per page with nav_placement).

answer_studio_video_look_sheet

ChatGPT
When get_studio_video shows look_sheet with approved: false, show the user the picture at look_sheet.url (the people, place and style every scene is filmed to) and send their answer: approved: true when it is right, or notes saying what to change (it is drawn again with everything said so far). Free — the film is priced and bought later, as always.

apply_theme

ChatGPT
Change the look across EVERY page of one design at once: colours, fonts, corner radius, or a complete ready-made preset. Send only what should change. For a change to one section or page use refine_site instead. Publish for visitors to see it.

approve_studio_video_plan

ChatGPT
Approve the plan the director put up — the only step that makes anything. Send pending_plan.proposal_id and its quoted_credits as expected_credit_cost; a mismatch is refused. Plans quoted at 0 (captions, end cards, trims, library music) are free; drawn beats, a custom music track, text behind the speaker and re-voicing are priced on the plan. A paid plan spends Creative Credits against this connection's daily cap: NEVER approve one without the user's explicit go-ahead on that price. Optional resolution picks one of pending_plan.alternatives — then send that alternative's credits. A plan with pack: true is separate shots: optional shots (its shots[].shot_id values) approves only those, and expected_credit_cost is then the sum of their credits; unchosen shots are not made or charged. If the plan cannot be applied (request_failed), its message says why, anything it charged is refunded, and the plan stays waiting to be approved again. Afterwards poll get_studio_video until ready.

attach_video_to_post

ChatGPT
Attach a finished Video Studio film to a planned post, replacing its media. Takes the film's project id (create_motion_project / get_studio_video). Prepares the film file first when needed (free); if it is still being put together nothing is attached and the result says pending — try again later. Attaching clears any cover already set, so call set_post_cover afterwards.

attach_visual_to_post

ChatGPT
Put a finished visual (the job_id create_visual returned, once get_job says completed) on a planned post from get_calendar. A carousel attaches all its slides. Free.

cancel_queued_post

ChatGPT
Take a post back out of the publishing queue, cancelling every send that has not gone out. Anything already published stays published. The post stays on the calendar and can be queued again.

capture_design_screenshot

ChatGPT
Render one design variation NOW and attach its screenshot, so you can check a design you just imported or edited before showing it to anyone. Takes about 30-40 seconds; a design that already has a render answers at once (send force: true after an edit to render it again). Use this instead of waiting when list_variations says thumbnails are pending or get_render_diagnostics has no screenshot. Omit index for the active design.

claim_domain

ChatGPT
Start connecting a domain the user owns (e.g. "example.com") to a site. Returns the DNS records the owner must add at their domain provider; the domain is NOT live until those records exist and verify_domain succeeds. Custom domains need a paid plan — a free plan is refused with an upgrade message. Replaces any domain the site already had. A domain already connected to another site is refused.

clone_site

ChatGPT
Make a full copy of a site — code, design, content and every design — as a NEW draft site in the same account. The copy is unpublished and has no address or custom domain; the original is untouched. Counts toward the plan's draft-site limit. Returns the new site's id.

create_collection

ChatGPT
Create a new catalog collection on a site that has a design — products, courses, events, jobs, properties, rooms, portfolio pieces. Mondovo sets up its fields, generates a detail-page template in every design plus a listing page, and seeds starter items. Takes up to a few minutes and costs no credits. If the collection already exists nothing is created (already_existed) — add items to it instead. Publish the site for its pages to go live.

create_content_pack

ChatGPT
Write the pack quote_content_pack priced. Spends 1 Creative Credit. REQUIRED: send that credits as expected_credit_cost, plus a stable idempotency_key. This connection also has a daily spend cap. Blocks until the drafts land (about two minutes) — do not poll get_job. Ads are create_visual, not this.

create_motion_project

ChatGPT
Start a film (does not spend credits). Returns project.id. Optional, as on the Video tool's start screen: kind (ad, reel, explainer, talking_head, polish) brings that kind's usual length, shape, voice and captions; format is a ready format's slug and recipe_id one of the brand's saved recipes, both from list_studio_video_templates (a recipe carries its own kind, so do not send both); look is what the film is made of — filmed (generated footage), photo (the photos of the brand moving in 3D), motion (motion graphics — the director decides from the brief whether to draw it scene by scene or cut it to the music as one film, and can show the product in use), kinetic (motion graphics cut to the music, chosen outright), website (the real site of the brand on screen) or auto (decided per scene, the default). Next, describe the film with studio_video_message: the director writes its storyboard, edits to it are free and undoable, and get_studio_video shows it with the price of making it; make_studio_video makes it once the user agrees to that price. Poll get_studio_video until ready. The same film is visible to the owner in Creative Studio. THEIR OWN VIDEO (a talking head, a recording, clips to cut together): send from instead of kind/format/recipe/look — one of video_url (an https link to an MP4, WebM or MOV up to 80 MB; it is stored in the brand's Library first), asset_id (a video from list_brand_assets), asset_ids (several, in order: a rough cut, joined with join_studio_video_cut — a finished film's project_id counts as a clip too, its export joined as it is, so two finished films are joined without re-opening either), post_id (a calendar post's video) or cut_of (a joined cut's project id). Free: the clip is read and put on the timeline; then studio_video_message says what to do with it (clean the voice, captions, motion graphics cut to what they say, a new background, presenter or voice, or NEW SCENES before or after their clip — drawn motion-graphics beats on the same timeline, joined into one export, never a separate film) and the director prices it — nothing is charged until approve_studio_video_plan. title names the film (otherwise it is named after the clip).

create_page_draft

ChatGPT
Make a private copy of ONE page — any page, including the home page ("/") — to experiment on without changing the live page. THIS is the tool for "try a different version of the homepage/about page", "show me an alternative hero", "let's experiment before we change it": create a draft, edit the draft, and call promote_page_draft only when the user approves. Do NOT use import_design_variation for that — it adds a whole-site design, which drops every inner-page edit made meanwhile when it is switched in. The draft gets its own copy of the page's text (content_key), so editing it never changes what visitors see. Shared blocks — header, footer, theme — stay shared: editing those changes every page. Returns the draft's slug and the exact calls that edit it (how_to_edit): patch_variation_content under content_key for copy, update_variation_file with file = the draft slug for code, or refine_site with page = the draft slug. Up to 4 drafts per page. If Mondovo cannot keep a copy separate from the live page it refuses and says why in message — pass that sentence to the user as it is. Recorded in version history.

create_site

ChatGPT
Create a professional website — Mondovo generates the design (do NOT write HTML/React yourself). ONE call produces THREE competing designs (D1/D2/D3) for the user to choose between: see them with list_variations, make one live with switch_variation. Output quality scales with how RICH and OPINIONATED your brief is about the BUSINESS, so do not send a thin brief: business name (required), industry, location, services/offerings, target_audience, unique_selling_points, business.tone_of_voice (put the voice spec here, not in the description — it drives the copy voice directly); and a goal — the site's primary conversion objective ("free trial signups from agencies", "book a consultation") which drives the conversion narrative, section flow, and CTAs. All of that helps all three designs equally. The DESIGN inputs are a deliberate TRADEOFF, because they bind all three lanes to the same look: a stated design.color_palette fixes the colors for every design, a heavily-specified mood/creative direction fixes the whole aesthetic, and content you supply (headline, tagline, per-section copy) is used as written in all three — so the three come back differing only in layout and typography. Send them when the user wants ONE look executed well; leave color_palette and mood open, and omit sections/pages/per-section content, when the user wants genuinely different alternatives to compare (Mondovo's strategist then plans the section arc and page architecture around your goal, and each design picks its own palette and voice). Whatever you do send should be concrete, never generic placeholder text — reference real design styles if the user has a taste (e.g. "editorial serif, warm cream + terracotta, generous whitespace, Aesop-like"). To CLONE or closely reference a live site, set design.source_url to its HTTPS URL — Mondovo scrapes the page (screenshot + structure) and adopts its visual design (use design.source_copy: "preserve" to also keep its wording, default "rewrite"); this is stronger than describing it in design.references text. When source_url is set, do NOT send design.color_palette — the scraped design drives the colors and an explicit palette is ignored. To recreate from a design SCREENSHOT you already have (not a live URL), pass its HTTPS image URL(s) in design.reference_images and set design.reference_fidelity: "replicate" reproduces the reference faithfully (its section structure/order and imagery), "inspire" (default) honors its palette/typography/mood while adapting the structure to your business. Returns a site_id; poll get_site every 10s — it reports "generating" for the whole round (typically 3-15 min) and "ready" only when every design has landed. Then call list_variations to see the three. (For a design YOU author end-to-end, use create_site_from_design instead.) To set up a READY-MADE BUSINESS rather than generate a site — a directory, for instance, that arrives with its listings, its submission and claim flows and its pages already working — call list_packs, then pass that pack's pack_slug here with its questions answered in pack_intake. That path COPIES a curated design instead of generating one, so it costs no generation credits, finishes in about two minutes, and ignores business/design/content/pages/goal entirely.

create_site_from_design

ChatGPT
Create a NEW site whose active design is a layout YOU author: pass business (name + industry + description), content (structured, keyed by section), files (self-contained TSX components; exactly one page with slug "/"), and optional collections (catalog types like menu/products with sampleItems). Mondovo validates, rehosts images to its CDN, and stands the site up in the design-selection phase — the user compares/confirms designs there (add alternatives via import_design_variation or generate_design_variation) before the site is forked to build. Returns a site_id; poll get_site until status is "ready". For a normal brief-based site, use create_site instead. AUTHORING CONTRACT (see files[].code): author brand colors as var(--color-) CSS variables so the design is theme-swappable, and prefer @/components/Runtime platform components (forms, catalog, gallery) over hand-built equivalents — workflow components (portal/funnel/cart/payment/booking) need owner activation, so add those via refine_site rather than authoring them here.

create_support_ticket

ChatGPT
File a ticket with the platform's support team in the signed-in person's name — for a bug, a billing question, a feature request, or anything the user wants a human to look at. Write a one-line subject and a description with the relevant detail from the conversation (what they tried, what happened, which page); put anything else useful in context. Use "urgent" only for a site that is down or data that is lost. Pass site_id when it is about one site. The team replies in Settings → Support.

create_visual

ChatGPT
Start an image generation job. Spends Creative Credits. REQUIRED: call plan_visual first — with the same creative_kind, tier, visual_type and references_count (the length of references) — and send its credits as expected_credit_cost, plus a stable idempotency_key so a retry cannot double-charge. This connection also has a daily spend cap set at consent — if you hit it, wait until UTC midnight or tell the user to reconnect with a higher cap. SETS, as Creative Studio makes them — ONE job, ONE generation's price, cut into separate pictures (output_urls): by default you get 4 versions of your prompt (3 for a thumbnail) to choose from, as the Studio shows; batch changes how many (1-4). options (2-4 directions, each its own prompt and optionally its own words) gives competing alternatives instead. Never call this repeatedly for more choices. CAROUSELS: creative_kind "carousel" with slides (2-8, in swipe order: the first is the cover — headline + optional subhead; the last is the ask — cta + optional headline; the ones between are content frames — title, a frame_type and its fields) and optional preset (portrait 4:5, the default, or square). The whole deck is drawn as ONE picture and cut into its slides, at one flat price; the words on each slide are the words you send. Keep slides SHORT — big type renders cleanly, small dense type does not: a few words per line, list bullets of one short line. One call = one deck; do NOT make a carousel slide by slide. The answer (or get_job, while it runs) carries slides: the slide URLs in order. Look at them: a slide whose words came out wrong is fixed with redo_carousel_slides (one free redo per slide), not by remaking the deck. WORDS ON THE PICTURE: put the exact words to render in exact_copy (headline, offer = the sub-headline or supporting line, cta, brand_name); when you leave it out, the words the prompt quotes for the picture are lifted from it, and a prompt with none renders no text. ART DIRECTION, as the Studio's brief sets it: typography (how the words are set: weight, case, style), layout (where the copy sits), goal, objective, awareness_stage; thumbnail_surface for a thumbnail. REAL PHOTOS, LOGOS, PEOPLE: pass brand Library asset ids (list_brand_assets, or upload_brand_asset for a file at a URL) as references, with reference_roles saying what each is for. BRAND CONTEXT — decide it every time: by default the brand workspace's own business description, colours and logo are written into the brief, so the picture is ABOUT that business. When the piece is about anything else — a topic, an opinion, a how-to, an industry point, or another company — send brand_context: "prompt_only" so only your prompt (and exact_copy) is used, or the output reads as an advert for the workspace. For another company's work, use ITS brand (get_site_brand for its website, or create_brand). Output URLs are public CDN links.

delete_page

ChatGPT
Delete ONE page from a site's design. Links to it are removed from the other pages and it leaves the navigation. It goes to the site's trash and is recorded in version history, so it can be restored. The home page cannot be deleted. Publish for visitors to stop seeing it.

delete_page_draft

ChatGPT
Delete a page draft and its copy of the text. The live page is not touched. Recorded in version history, so restore_version can bring it back. Confirm with the user before deleting a draft they made. page_slug is optional — it is worked out from the draft.

delete_social_post

ChatGPT
Remove one planned post from the calendar. Cannot be undone. Anything already published stays published.

describe_brand_kit

ChatGPT
Summarise colours, fonts and voices for a brand so you can write on-brand prompts. Does not spend credits.

disable_chat_widget

ChatGPT
Switch a site's chat widget off so visitors stop seeing it after the next publish. Its settings, knowledge and conversation history are kept, so enable_chat_widget brings it back as it was.

draft_collection_items

ChatGPT
Write up to 12 new items for an existing collection from a short brief ("8 help articles about returns", "6 autumn menu dishes"), shaped by the collection's own fields. NOTHING IS SAVED: show the drafts to the user, then save the ones they keep with add_collection_items. Free to the user; limited per hour.

duplicate_social_post

ChatGPT
Copy one planned post on the calendar. The copy is not queued anywhere. Free.

edit_studio_video_script

ChatGPT
Change the script card the director put up (pending_plan.kind "script"): the words on screen, what is seen, the voice line or the seconds of any scene, by its scene_id — and answer the card's open questions (pending_plan.questions: words in the owner's own script the brand facts do not back) with keep or remove; editing that scene's field is the "change". FREE — nothing is recorded or drawn; the card is put up again. Approve it with approve_studio_video_plan at expected_credit_cost 0 once no question is open.

edit_studio_video_storyboard

ChatGPT
Change the film's storyboard directly — FREE, applied at once, and undoable; nothing is made or charged (what a change costs shows on get_studio_video button, and only make_studio_video spends). Send ONE of: ops with the storyboard version you read as expected_version; undo: true with expected_version to take back the latest edit; or revert_turn: { turn_id, keep? } to take back what one studio_video_message turn changed (keep lists that turn's change ids to leave in place). Ops: edit_scene (scene_id + see / say / on_screen / seconds; on a filmed scene with somebody on camera, say is their line as the storyboard shows it, "Riley: …", and replaces it — it is never narration there; fit on a scene showing their clip: frame|pan|split|crop — a device frame, a pan across it, under the presenter, or cropped to its subject), remove_scene, reorder (scene_ids in the new order), set_music (off, track_id, energy upbeat|steady|calm, mood, volume 0–1, level quieter|louder), set_captions (on, style), set_caption_tier (scene_id + tier heading|body: that scene's spoken words emphasised in the captions, scene 1's also as the title at the top, or ordinary captions; filmed or photo scenes only), set_follow_stretch (scene_id + from + to: a scene that copies a video's moves follows another part of it — exactly one of that scene's follow.choices; the scene then reads changed and is made again on the button), redraw_storyboard (scene_id + optional note, e.g. "she holds the laptop lower": a filmed scene's storyboard — its storyboard_sheet_url — drawn again, free; the scene is then made from the new one), set_voice (source library|own + id, or voice_name; source none turns the narrating voice off — lines said on camera stay), set_voiceover (on: true|false), set_style (bold|elegant|playful|minimal — a feel; it never changes colours), set_colours (mode brand|designer|custom, and for custom hex as #rrggbb, most important first: the film's own colours, which every drawn scene and caption uses), trim_to (seconds, on its own), set_thing (thing_id + confirm or asset_id), add_scene_action (scene_id, action remake|change_person|change_thing|bring_to_life|cutaway|longer|language|redraw, note, asset_ids, language as a BCP-47 tag) — a paid change that goes on the button — and remove_scene_action, pick_script_option (option_id from storyboard.script_options), place_media (scene_id + asset_id: that scene shows one of THEIR files — a media[].id from add_studio_video_media or one already on the film — free; for a clip, optional from + to in seconds pick the stretch shown, else its first usable part as long as the scene), clear_media (scene_id + as filmed|drawn: the reverse — a scene showing their file becomes a filmed or drawn scene again, its words kept), insert_media_scene (after_scene_id, null for first, + asset_id: a new scene of their file), and set_format (aspect 9:16|4:5|1:1|16:9 and/or resolution 720p|1080p; before anything is made only the price moves, after it drawn scenes are redrawn and filmed scenes reframed, for free where the shot covers the new frame). If the storyboard changed since version, nothing is applied and the answer carries the current storyboard to try again against. Returns changes ({ id, summary }), the new version, and the storyboard and button.

enable_chat_widget

ChatGPT
Turn on a site's chat widget — the AI assistant that answers visitors, captures leads and can take booking requests. Creates it when the site has none (with a brief drafted from the site), switches it on, and installs it on the site, all in one call. If switching on works but installing fails, the result says so (code: "embed_install_failed") and the widget stays on: tell the owner it is not yet on the site. Visitors see it after the next publish. Appearance, chat flows and knowledge are set in the editor.

find_creation

ChatGPT
Search one brand's library by title words. Prefer list_creations when you want a page of recent work.

find_images_at_url

ChatGPT
Read the images on a public web page — e.g. the business's old website — optionally keeping only those matching intent ("team headshots"). Writes nothing. Show the user the candidates, then import the ones they pick with import_images_from_url. Only use pages the user has the right to take images from.

generate_design_variation

ChatGPT
Ask MONDOVO to generate an ADDITIONAL design variation for an existing site — an alternative layout the user can compare and switch to. This APPENDS a new variation (never overwrites the current design). Use this when the user wants "another option" but does NOT want you to author it; to author the alternative yourself instead, use import_design_variation. It is a WHOLE-SITE design — to try another version of ONE page (the home page included), use create_page_draft instead. TWO MODES. Omit clone_index and Mondovo generates a design deliberately DIFFERENT from every existing one (the user is collecting options to compare). Pass clone_index and Mondovo builds a SIBLING of that specific design instead — same style personality, palette and type, varying layout and composition. THIS IS THE RIGHT TOOL FOR "make another one like design N" or "same look, different layout". You do not need to read a design's source to build on it: name its index here and Mondovo generates from it server-side. Call get_render_diagnostics first if you want to SEE the design you are building on. Returns 202; poll get_site until status is "ready".

generate_favicon_options

ChatGPT
Design up to four icon ideas for the site's browser tab, bookmarks and search results, from its brand name, colours and heading font, plus the plain letter icon ("monogram"). One AI image; options are cached per site, so calling again returns the same set unless regenerate is true. Ideas whose lettering does not match the brand are dropped. Returns preview URLs — show them, then call set_favicon with the chosen id.

get_appointments_status

ChatGPT
Whether a site takes appointments and, if not, the one next step — on/off, "pick a free time" or "ask for a time" mode, the weekly hours, the default appointment, where people can book (website, chat, voice — with why each is or is not working), how many are upcoming, waiting for confirmation, or waiting for the owner to pick a time. Pass include_setup_defaults: true before set_up_appointments: it adds the defaults a first setup would use for this business (appointment name and length, mode, weekly hours, time zone, channels). Changes nothing.

get_brand

ChatGPT
Fetch one brand workspace by id from list_brands.

get_calendar

ChatGPT
List planned social posts between from and to (YYYY-MM-DD, inclusive). Max 400 days.

get_chat_widget_status

ChatGPT
Whether a site has its chat widget — the AI assistant that answers the site's VISITORS, captures leads and can take booking requests — whether it is switched on, whether it is actually installed on the site, and whether voice is on. Not the same as site add-ons (popups, announcement bar, WhatsApp button): those are list_site_addons.

get_contact

ChatGPT
Fetch a single contact by id, with every stored attribute: name, email, phone, company, address, pipeline stage, tags, custom fields, lead score and owner. Get the id from list_contacts. PERSONAL DATA — same handling rules as list_contacts.

get_credit_balance

ChatGPT
Return the organization Creative Credit wallet for this brand, plus this connection's remaining daily spend cap when the caller is a machine.

get_form

ChatGPT
One form's fields (name, label, type, required, options), submit button text and full submission settings. Take the slug from list_forms.

get_intake_questions

ChatGPT
BEFORE creating a site, call this to get Mondovo's structured intake questions (goal, audience, visual lane, tone, density, color direction, sections, must-haves, references, etc.) AND the design-method choice (you design it vs Mondovo generates it). Pre-fill every answer you can already infer from the conversation/context, then ask the user ONLY the genuine gaps (conversationally, not a wall of text) and show your assumptions for confirmation. Collect answers, THEN call create_site / create_site_from_design. Running this interview first is what turns a generic site into a tailored one. Read-only.

get_job

ChatGPT
Poll a queued operation started by refine_site, add_page, add_pages, or create_visual (a finished visual comes back with the image attached, so check it before showing the user). Call every ~10s with the job_id those tools returned until status is "completed" or "failed". IMPORTANT: a "completed" job can still carry per-item failures — check the failed array and tell the user about anything in it, because one failed page never aborts the rest of the batch. Use get_site (not this tool) to poll create_site and publish_site — those run a design generation round, which is tracked separately. Creative jobs require creative:read; site build jobs require sites:read.

get_site

ChatGPT
Get the current status and details of a site. Use to poll for generation/refinement completion (every ~10s) and to get the preview/deployment URL. status is one of: generating (a round is running — this covers every phase, and is also what you get while the state is momentarily unknown, so keep polling) | ready | publishing | published | publish_held | error. "publish_held" means the last publish crashed or loaded blank in a browser check before going live, so it was NOT made live (any earlier version is still what visitors see) — tell the user publish_message, fix the page it names, then publish again. Only "ready"/"published" mean the work is finished; generation_progress is informational and is NOT a completion signal on its own.

get_site_settings

ChatGPT
Read every site-level setting that is not code: the default page title, the meta description, the social sharing (Open Graph) image, the favicon, which AI and search crawlers may read the site, the llms.txt content, and any custom robots.txt rules. None of these are part of the site's code — they are baked into every published page's head, or served as /robots.txt and /llms.txt — so read them here rather than looking for them in the design source. favicon_url is the RESOLVED value, i.e. what a publish would actually ship, including one inherited from the brand kit. A crawler absent from ai_crawlers/search_crawlers has never been decided about and is allowed by default.

get_studio_video

ChatGPT
Where a film is. storyboard: its version (send it to edit_studio_video_storyboard), scenes (each id, n, type, seconds, what we see, what is say-d, the on_screen words, status made / changed / making / failed / new, a picture_url, on a filmed scene its storyboard_sheet_url (the sheet of its key moments the scene is made from — show it; redraw it free with edit_studio_video_storyboard redraw_storyboard), and on a scene that copies a video's moves follow: the part it copies (from/to), its line and the other parts it may follow (choices)), things (people, places, products, style), layers (music, voice — with voice.take { url, seconds, stale } once the voiceover is recorded, to play to the user — captions, and the film's pace, punchy or calm), script_options (other versions of the script; pick one with edit_studio_video_storyboard pick_script_option), still_missing (what the director will choose if nobody does) and undo. button: the film's one button — its label and hint exactly as the user sees them, its price in credits with the lines it is made of, the quote_hash, step (a narrated film is made in TWO presses: voice = this press records only the voiceover — the film after it costs about film_after_voice_credits — then film = the film, cut to that recorded read; voice_after = an ad or reel shot picture-first: its picture is done and this press records the voiceover fitted to it and puts it on the film, with any lines_too_long to shorten first), nothing_to_make, the allowance for fixes (budget) and making.stoppable while a press is making. Before make_studio_video the user must see that price: in a chat with approval cards, propose make_studio_video and the card shows it (never write the label as text); otherwise show them the label and the lines first. Also: status, the timeline (each clip's kind, duration, status, its file as url and a file_name to save it under; for a transparent drawn graphic transparent.mov_url / transparent.webm_url; a separate-clips shot is delivered trimmed to its planned length and usually without sound, so url is that delivered file only once it is ready, full_take_url/full_take_file_name the take as generated, and delivery.state one of finishing, finishing_late, delivered, as_generated), an older film's plan waiting for approval (pending_plan with proposal_id, quoted_credits and its price_lines), drawn_on_film (motion_graphics: playing = a motion-graphics edit plays with its captions and closing card in the picture, kept = taken off and kept to put back, null = none; layers: each overlay layer — captions, end_card, hook_title, lower_third, logo, drawing — with what it shows; put_back_available: what the last removal took off. To change any of it, ask in studio_video_message — "remove the motion graphics", "put the graphics back", "remove the extra captions" — free, at once), the director's last reply (last_reply, written at last_reply_at) and question, a rough_cut (several of their clips: joined or not, and what next), and export.url once the film is put together (ready: true). On a connection with a daily Creative Credit cap, daily_cap shows remaining_today and whether it covers_button / covers_pending_plan, and max_budget_credits — the largest make_studio_video budget_credits it can hold (a press reserves the larger of its price and that allowance) — check it before asking the user to agree to a price. Poll about every 30 seconds while making. Does not spend.

import_design_variation

ChatGPT
Append a design YOU author as a NEW variation on an existing site — for offering an alternative layout alongside the current one. WHETHER IT BECOMES ACTIVE: on a site still choosing between designs it is made the active design (pass make_active: false to only add it); on a BUILT site it is only added — the site keeps its chosen design, because that is what publish ships — unless you pass make_active: true, which you should do only when the user has explicitly asked to switch to it. The response says which happened (made_active). This is a WHOLE-SITE design: to try a different version of ONE page (the home page included) without touching the live page, use create_page_draft instead. Same payload shape as create_site_from_design, plus site_id. The site must already have a design. Same authoring contract: brand colors as var(--color-) CSS variables (theme-swappable), and prefer @/components/Runtime components over hand-built ones (workflow components need owner activation — add those via refine_site). To change ONE file of an existing design, use update_variation_file instead, and to add ONE new page you wrote, use add_page with code — this tool burns a variation slot. The import is recorded in version history and the previous active design stays intact, so it can be undone with restore_version or switch_variation. To instead have MONDOVO generate an alternative variation, use generate_design_variation.

import_images_from_url

ChatGPT
Copy images the user picked (from find_images_at_url) into the site's media library as permanent files. Importing the same image again reuses it. They are NOT placed on a page — place one with apply_hero_pattern, apply_image_replacements or refine_site.

join_studio_video_cut

ChatGPT
Join a ROUGH CUT — a film made from several of their clips (create_motion_project from.asset_ids; get_studio_video shows rough_cut) — into one film, as the Video tool's Join does. Also PUTS A FINISHED STORYBOARD FILM TOGETHER AGAIN (nothing being made), so a change to its captions or overlays that needs no new scene reaches its file. Free: nothing is generated or charged, the clips are joined as they are, in order, and an unchanged film answers with the file it already has. Answers joined: true with export_url, or joining: true (poll get_studio_video until ready with export.url). A cut is not a film the director edits: to change the joined film (captions, motion graphics, a voice, new scenes), open it as one film with create_motion_project from: { cut_of: <this project_id> } and talk to that film with studio_video_message.

list_appointments

ChatGPT
A site's appointments, with times already written on the business's clock (and the visitor's own clock when it differs). view: "upcoming" (default), "pending" (waiting for the owner to confirm), "needs_time" (people who asked for an appointment and are waiting for the owner to pick a time — returned as requests), "past", "cancelled", or "registrations" / "enrolments" (event registrations / course enrolments, each with a claim_id, status, places and payment). Or pass week_of (any YYYY-MM-DD in the week) for a Monday–Sunday calendar: each day's open hours, time off and appointments. Personal data: never copy it into a site or anywhere the user did not ask.

list_boards

ChatGPT
List the boards in your Mondovo organization. Boards is an organization-level area: a board can contain designs from sites belonging to different clients in the same organization. With no filters (recommended), returns every board across the organization, including each board's owning client. Pass site_id or client_id only when you want to focus the list on one client. Returns each board's name, design count, public share link status/link, and whether a design has been chosen. Returns metadata only. Read-only.

list_brand_assets

ChatGPT
The files uploaded to a brand's library — photos, logos, videos, documents — newest first, with ids and urls. Generated visuals, logos and films are list_creations.

list_brands

ChatGPT
List the Creative Studio brand workspaces this connection can see, one short row each (get_brand or describe_brand_kit for a brand's full kit; query filters by name). Use a returned id as brand_id on every other creative tool. Restricted members only see brands for sites they were granted. With creative:generate, also returns websites_without_brand: websites (e.g. one you just built) whose brand is made on first use — call get_site_brand with one's site_id to open it. For a client or pitch with no website here, create_brand. Make a client's work under THEIR brand, never another client's.

list_collection_items

ChatGPT
Read the items in one collection — posts, dishes, products, listings — drafts included, with their fields. Call it before writing new items the user relates to existing ones ("more like these", "fix my articles") so you match them and avoid duplicate titles. Long text fields are shortened. Customer-owned portal records are not listed here; use list_owned_records.

list_collections

ChatGPT
List the catalog collections a site has — blog, menu, products, listings, help articles, events — with each one's fields (name, label, type, required) and item count. Call this before adding or editing items so you use the collection's real slug and field names.

list_contact_fields

ChatGPT
Return the custom attributes defined on this site's contacts (key, label, type, select options) AND the pipeline stage keys status will accept. Call this BEFORE upsert_contacts when importing: it tells you which custom-field keys already exist, so you map a spreadsheet onto the site's own vocabulary instead of inventing a second key for something it already tracks.

list_contacts

ChatGPT
List the people in a site's CRM — leads and customers captured from forms, chat and imports. Filter by pipeline status, tags (a contact must carry EVERY tag listed), free-text search across name/email/company, acquisition source or campaign, and a created-at window. Returns full contact records including tags and custom fields, so this is PERSONAL DATA: use it to answer the owner's question and do not copy it into site content or anywhere else. Paginated — check total against limit/offset before concluding you have seen everyone.

list_content_drafts

ChatGPT
List waiting social-copy drafts for a brand (Content tab). Does not spend. Use quote_content_pack to price a new set. Ads and paid-media copy are plan_visual, not this.

list_creations

ChatGPT
List recent images and videos for a brand. Optional search filters by title.

list_events

ChatGPT
Return what has happened across this workspace's sites since a given moment — designs generated, a client selecting a direction, sites published, generations failing. Call this at the START of a session to pick up where you left off, then pass the returned next_since on your next call to continue from there. Defaults to the last 7 days. This is how you stay current across conversations: events accumulate while nobody is connected, and you collect them when you reconnect.

list_forms

ChatGPT
Every form on one design of a site — forms on pages and form components — with their fields and submission settings: webhook URL, success message, redirect, CRM contact creation, notification emails and the auto-acknowledgement email, plus how many submissions each has received. popup_forms lists the popup forms buttons can open; pass one's id as link_cta's form_id, and its slug to get_form / update_form_settings like any other form slug.

list_packs

ChatGPT
List the ready-made businesses available to set up — a whole working site for a kind of business (a local directory, for instance) rather than a design to fill in. Each one arrives with its listings or catalogue, the flows visitors and owners use, and its pages already working. Returns each pack's slug and the intake_questions it asks (with which are required); pass those to create_site as pack_slug and pack_intake (or to spin_up_pack) to set one up. Prefer this over create_site whenever the user describes a business shape we already ship — it copies a curated design instead of generating one, so it costs no generation credits and finishes in about two minutes.

list_page_drafts

ChatGPT
List the drafts of a page — private copies someone is trying out before making them live — or, with no page_slug, every page in the design that has drafts. Each draft comes back with its slug (what update_variation_file / refine_site target), its name, the live page_slug it belongs to, and its content_key (the draft's own text, for patch_variation_content). design.variation_index is the index to pass to those edit tools. Read-only.

list_review_queue

ChatGPT
Read-only. A brand's social posts that are in team review: where each stands (needs review, changes requested, waiting on the client, approved, scheduled, published), who it is waiting on, who approved or asked for changes, and how many notes are open. Filter with state and due. Approving, commenting and scheduling are done by a person in the review screen, not here. A brand that requires approval only lets approved posts be queued.

list_site_assets

ChatGPT
The images, videos and files uploaded or imported to a site's media library, newest first, each with its permanent url. Use it to find an uploaded photo or clip to place (e.g. a hero video for apply_hero_pattern). Files in the library are not necessarily on a page; to see the images a design actually shows use plan_image_regeneration.

list_sites

ChatGPT
List the sites in the user's Mondovo account, newest first, one page at a time. Use this to find an existing site before creating a new one; pass query to match a site by name instead of paging through everything. Each row is a compact summary (site_id, name, status, page_count, variation_count, preview/live links, thumbnail) — call get_site for a site's pages and list_variations for its designs and per-design preview links. total is the number of matching sites; when has_more is true, call again with offset = next_offset. Source design rows represented by accessible builds are folded by default; set include_design_sources to true when you need to choose or inspect those designs. Reuse the site_id of a matching site already returned. Do not repeat list_sites or expand source designs when that site is already identified; each call opens another gallery in interactive hosts.

list_social_accounts

ChatGPT
The social accounts a brand's posts can be published to, each with the connection_id queueing takes and whether it can publish now. Pass post_id to get exactly the accounts that post may go to. Call this before queueing, and ask the user which accounts when it is not clear — a platform name is not an account.

list_studio_video_templates

ChatGPT
What a film can start from, as on the Video tool's start screen: each kind (ad, reel, explainer, talking_head, polish) with its ready formats (slug, name, one line on what the film says), and — with brand_id — the brand's own saved recipes ("make another like this one": id, title, kind, scenes, seconds). Pass the choice to create_motion_project. Does not spend.

list_submissions

ChatGPT
List what visitors submitted through a site's forms (the Inbox), newest first, with every answer they gave — message, budget, custom questions — alongside name, email and phone. Use it to read, triage, summarise or judge leads ("which look genuine?", "what is this person asking for?"). Filter by Inbox status, form slug, free-text search on email/name, a submitted-at window, or arrival source. Test-mode submissions are left out unless include_test is true. PERSONAL DATA: answer the owner's question with it; do not copy it into site content or anywhere the user did not ask for. Paginated — compare total with limit/offset before concluding you have seen everyone.

list_variations

ChatGPT
List the design variations that exist for a site — each with its index, a short label/style name, whether it is the active (live) design, and lightweight metadata (file count, size, summary). Returns metadata ONLY (no code), and ATTACHES a thumbnail of each design that HAS a stored render, in index order, so you can actually see the options rather than guessing from labels. Renders are captured in the background, so a design listed moments after generation may not have one yet: the thumbnails field in the response says exactly what to expect (ready | partial | pending | unavailable) and whether a capture run was queued — when it says pending/partial, show the available preview links and explain that screenshots are still rendering. In hosts with an interactive design card, that card refreshes screenshots itself: do not call list_variations again just to poll thumbnails or reopen the same card. Without an interactive card, a later metadata refresh is appropriate. Each design carries a variation_id — the stable UUID, and the ONLY identifier safe to store or pass to another call, because index/slot/variation_number renumber or gap when a design is deleted. Pass it to publish_site to say which design to publish. Use this to compare the alternatives before re-activating one with switch_variation or building on one with generate_design_variation.

list_versions

ChatGPT
Return the version history of a site — what changed, when, and what kind of change it was (generation, refinement, content edit, restore). Use it to find a point to roll back to, or to explain to a user what has happened to their site. Pair with restore_version.

make_studio_video

ChatGPT
Press the film's one button: make everything its storyboard asks for that is not made yet (new or changed scenes, paid scene changes). A FILM WITH A VOICEOVER TO RECORD IS TWO PRESSES: when get_studio_video button.step is "voice", this press records ONLY the voiceover and makes no picture (voice_only: true) — tell the user, poll until storyboard.layers.voice.take.url is set, let them listen to the read and its pacing, then (with their go-ahead on the new button price, step "film") press again to make the film cut to that read. If they change a spoken line after it, the take goes stale and the button re-reads it first. An ad or reel shot picture-first gets its voiceover LAST: once the picture is done the button's step is "voice_after" — this press records the voiceover fitted to the finished scenes and puts it on the film by itself (poll until storyboard.layers.voice.take is set and ready again). This is the ONLY way a storyboard film spends Creative Credits, against this connection's daily cap. NEVER call it without the user's explicit go-ahead on that price: in a chat with approval cards, proposing it puts that price on the card and the Approve is the go-ahead (do not also write the label as text); elsewhere, first show them get_studio_video button.label and button.lines. Send button.quote_hash and button.credits as expected_credit_cost. If the storyboard changed since, nothing is made or charged and the answer carries the new button to confirm again; a cost that is not the button's is refused. Optional budget_credits allows up to that many credits IN TOTAL (this press included) for retakes of scenes that fail, without asking again — only set it when the user chose an amount; omitted, every fix comes back to the user. It answers within about 40 seconds: started: true (with credits_charged: null) means the press is under way and did not finish answering in time — do NOT press again; poll get_studio_video. Afterwards poll get_studio_video until ready.

manage_appointments

ChatGPT
Change how a site takes appointments. Name only what changes: enabled false pauses bookings (nothing is deleted) and true resumes; mode; the default appointment title / duration_minutes; hours (the whole weekly schedule); timezone; where people can book (website, chat, voice — voice needs the voice add-on); limits (max_per_slot, min_notice_minutes, max_advance_days, buffer_minutes); days off (time_off_add, time_off_remove); emails (remind_day_before / remind_hour_before — reminders to the visitor before a confirmed appointment, on by default; morning_agenda_email — the owner's morning email of the day's appointments). Provided hours replace the whole weekly schedule, time_off_remove deletes selected time-off rows, and supplied settings/reminder switches overwrite those values. Confirm before changing existing schedules or notifications. The result lists what changed in plain words.

patch_variation_content

ChatGPT
Merge a JSON patch into a design variation's content — headlines, prices, FAQ answers, image URLs, link targets. Because content and code are separate, most refinements are pure content edits and need no code change at all. Merge semantics: objects recurse (so patching content.hero.headline keeps hero.subhead), null deletes a key, everything else replaces. Validated against the code's references before writing — removing a key the code reads is rejected rather than silently blanking a section. Prefer this over refine_site for any copy change: it is instant and needs no AI round-trip. The edit is recorded in version history (version in the response) and can be undone with restore_version; a history_warning means it saved but was not recorded. Omit index to patch the active design. NOTE: form definitions (forms, modalForms) are site-global — a form id the site already defines is ONE definition shared by every design, so editing it applies site-wide regardless of index, and the response echoes the key in site_global_keys so you can say so rather than reporting a per-design change. Send the full edited form entry (same id); new form ids stay with this design. PAGE DRAFTS: a draft's text lives under its own content_key (from create_page_draft / list_page_drafts) — patch ONLY that key, with the draft's design index, to change the draft without touching the live page. Patching the live page's keys (hero, page_about, …) changes the live site.

pin_design_to_board

ChatGPT
Pin one of a site's design variations onto a board so it can be presented and compared alongside other options. Boards are organization-owned and may already contain designs from other clients in the same organization. If the target board already has a public share link, the design becomes visible at that link immediately. Identify the design by variation_index (from list_variations) — or variation_id if you already have it. By default the design lands on the source site's client's main board; pass board_name to add it to a named board for that client (matched if one with that name exists, created if not), or board_id to target any specific existing board in your organization, including a board owned by another client. Optional display_label sets the client-facing name shown for the design on the board (e.g. "Bold & Dark"). Pinning the same design twice is a harmless no-op. Returns the board id/name, the pinned item id, and the board's public share link when it has one.

plan_video

ChatGPT
Rough price of a film from its length in seconds, for budgeting before you start. Does not spend. The price you actually agree to is the film's button (get_studio_video button.credits), not this number: make the film with create_motion_project → studio_video_message → make_studio_video.

plan_visual

ChatGPT
Price an image job without spending. Submit the returned credits as expected_credit_cost on create_visual. A mismatch is refused. Send the same creative_kind, tier, batch, visual_type and references_count you will send to create_visual. A set (batch 2-4, or 2-4 options) costs the same as one picture; a carousel (creative_kind "carousel") is one flat price for the whole deck, however many slides.

promote_page_draft

ChatGPT
Make a draft the page: its layout and text replace the live page's, in place — the address, name, SEO, menu entry and links do not change. Call this ONLY once the user has approved the draft. By default (keep_previous: true) the version it replaces is kept as a draft called "Previous version", so putting it back is one more promote; the swap is also one entry in the page's version history, undoable with restore_version (file_slug = the page). Like every edit this changes the site's design, not what visitors see: publish_site ships it. warnings lists images the new version dropped or links that match no page — tell the user.

publish_site

ChatGPT
Publish a site to make it live on the web at its platform address (the deployment_url in the response is the exact live URL — report that, never guess a host). Choose a subdomain matching the business name (lowercase, hyphens). IF THE SITE STILL HOLDS SEVERAL DESIGNS you MUST pass variation_id — the design to publish, taken from list_variations (a UUID, not an index). Do not choose for the user: list_variations attaches a thumbnail of each design, so show them and let the user pick. Publishing a design turns it into its own site: Mondovo builds the chosen design into a new site and publishes THAT, so the response carries a different site_id — use that id from then on (the original id stays the design draft, and get_site on it will keep saying unpublished). Calling publish twice reuses the same built site rather than creating another. Sites that already have one design ignore variation_id. A design only has its home page, but its menu links to the rest of the site: when it does, publish_site first BUILDS those pages and then publishes automatically — it returns status "building" with pages_being_built, a job_id and the new site_id. Before publishing a design, tell the user which pages its menu links to and that they will be built. On "building", tell the user which pages are being built, poll get_job with the job_id until "completed" (failed lists pages that could not be built — their menu links are removed; publish says whether the site went live), then poll get_site until "published". Do not call publish_site again meanwhile. If a response carries missing_pages, those menu links have no page and 404 on the live site: tell the user and offer add_pages for them. This tool RETURNS IMMEDIATELY with status "publishing" once the site is accepted for deployment — it does NOT wait for the deploy. Compiling and deploying takes 1-3 minutes and continues server-side even if this conversation ends. Poll get_site (with the returned site_id) every ~15s until status is "published" to get the live URL — or "publish_held", which means the new build crashed in a browser check before going live and was not published (tell the user its publish_message). NEVER call publish_site a second time to check on or hurry along a publish you already started: while one is in flight the publish lock rejects the call, and a transport timeout on this tool does NOT mean the publish failed — it is almost always still running, so poll get_site before concluding anything. If the response is contact_info_needs_confirmation, the site still has AI-invented placeholder contact details — either refine them to the real values first, or (if they are already correct) call again with confirm_contact_info: true to proceed. Retrying with the same arguments will NOT clear that warning. Success responses carry after_publish (plan, custom domain, editor link): once get_site reports "published", relay its tell_user to the user.

queue_post_for_publishing

ChatGPT
PUBLISHES a planned post PUBLICLY to the named social accounts at its scheduled time (or scheduled_at). Name every account by its connection_id from list_social_accounts — there is no default and it never goes to all connected accounts. Moving a date or marking a post ready does not publish; this does. Free (no Creative Credits). Queueing the same post again re-arms it and never posts twice; cancel_queued_post stops it before it goes out.

queue_week_for_publishing

ChatGPT
PUBLISHES several planned posts PUBLICLY to the same named social accounts, each at its own scheduled time (up to 14). Nothing is moved. Name every account by its connection_id from list_social_accounts — there is no default and it never goes to all connected accounts. Free (no Creative Credits). One post that cannot go does not stop the others; the result lists queued and refused posts, and skips (lists as skipped, never publishes) any post whose time has already passed.

quote_content_pack

ChatGPT
Price a pack of posts for one network without writing them. Always a pack: five LinkedIn or Facebook posts, or eight Instagram, X, TikTok or Shorts — always 1 Creative Credit, even if they asked for one. Omit platform to use the network this brand actually posts on (never invent LinkedIn). Submit the returned credits as expected_credit_cost on create_content_pack.

read_design

ChatGPT
Read a design variation in two steps, so you only pull the code you will edit. (1) Call it WITHOUT files: you get the design's file manifest — each file's name, slug, type and size in bytes — and its content keys with their sizes, but no code. Page drafts are left out unless include_drafts is true. (2) Call it again with files set to the name(s) or slug(s) you need (the same names update_variation_file accepts, e.g. "Header", "/" for the homepage): you get exactly those files' current code, plus the content keys those files read (or the ones you list in content_keys). One response carries at most ~200 KB; anything that did not fit is named in truncated_files / truncated_content_keys — request those in another call. ALWAYS do step 2 before update_variation_file: edit the real current file rather than reconstructing it, or you will drop sections, props and content keys the page depends on. Code is only returned when this connection has been granted the source:read scope; without it you get structure only (pages, blocks, content keys), which is enough to reason about a site — use refine_site for changes in that case. Omit index for the active design.

refine_site

ChatGPT
Have Mondovo's AI make changes to an existing site from a natural-language instruction (e.g. "make the hero bigger with a dark background", "change the primary color to navy", "add a testimonials section"). This is the right tool for open-ended design work, or when you cannot see the source. For copy-only changes prefer patch_variation_content, and when this connection holds source:read and you can author the exact change yourself, prefer read_design → update_variation_file — both are instant, deterministic, and land in the same version history as a refinement. Pass image_urls to attach REFERENCE images the change should be modelled on — a screenshot of a layout to match, a mockup, a competitor's section — and say what to do with them in the instruction ("make the hero section match this layout"). They are shown to the model as pictures, so use them whenever the target is easier to show than to describe; a described layout is reproduced far less faithfully than one the model can see. The images are a REFERENCE for the design, not content to insert — to place an actual photo on the page, describe where it goes and pass its url in the instruction. URLs must be on Mondovo storage: call upload_asset first and pass the permanent url it returns. For retry safety, reuse the same optional idempotency_key for one refinement attempt. Returns a job_id immediately; poll get_job every ~10s until its status is "completed" (a refinement typically takes 30-120s). The work runs server-side and completes even if this conversation ends, so a lost connection is not a failed refinement. If the site already has another operation running you get site_busy with that operation's job_id — poll it, then retry. page targets one page by slug — including a PAGE DRAFT's slug (from create_page_draft), which edits the draft and leaves the live page alone. refine_site always edits the site's chosen (active) design, so a draft that lives in a different design is edited with patch_variation_content / update_variation_file instead.

remember_preference

ChatGPT
Save a standing instruction the user gives about how they want their site handled ("always use British English", "no stock photos of people") so it applies in later conversations about this site. It belongs to this person and this site, changes nothing on the site, and saving the same key again replaces it. Use a short key naming the preference and the user's own words as the value.

rename_page

ChatGPT
Rename a page (new_name) and/or move its URL (new_slug). Supply either or both — omitting new_slug derives it from the new name. Every internal link across the site is rewritten to the new URL, the navigation is re-synced, and link TEXT naming the old page is updated too, so this is the ONLY safe way to move a page: editing the file's name through update_variation_file leaves every link pointing at a URL that no longer exists. The homepage's URL cannot be changed. The page's content survives the move — its content namespace is deliberately not recomputed. Publish the site for the change to reach visitors; until then the live site keeps the old URL.

rename_page_draft

ChatGPT
Rename a page draft (the label the user sees in the editor's drafts bar). Changes nothing else. page_slug is optional — it is worked out from the draft.

rename_site

ChatGPT
Rename the site and the business it presents: the name in the site switcher, the header and the SEO defaults. Recorded in version history. To rename one PAGE use rename_page; to change the browser-tab title use update_site_settings.

reschedule_social_post

ChatGPT
Move an existing planned post to another day, or mark it draft or ready. Takes the post id from get_calendar. Marking a post ready does NOT publish it (queue_post_for_publishing does); a post that is already queued keeps its accounts and goes out on the new day. Free. To add a new post use schedule_social_post.

restore_version

ChatGPT
Restore a site to a previous version from list_versions. NON-DESTRUCTIVE: the restore is written as a NEW version on top of the history rather than deleting anything, so nothing is lost and the restore itself can be undone by restoring the version that preceded it. Optionally scope to one page (file_slug) or one design variation (variation_index). Tell the user which version you are rolling back to and why before calling this.

rewrite_content_draft

ChatGPT
Rewrite and replace one draft from list_content_drafts. Free — does not spend Creative Credits. Takes the draft id and what to change, in their words.

schedule_social_post

ChatGPT
Add one social post to a brand's content calendar on a date: platform, format, and whatever copy you have (hook, caption, call to action, hashtags, a direction for the visual). WITHOUT publish_to it is only a plan (a draft the owner sees in Creative Studio) — nothing is published. WITH publish_to (connection ids from list_social_accounts) the post is added AND scheduled to publish publicly on those accounts at that day and time, in one step, exactly as queue_post_for_publishing would. Name the time as scheduled_date + scheduled_time (the owner's wall-clock time; the brand's time zone is applied), or scheduled_at. A day or time already passed is refused. Free. To give it a picture, make one with create_visual and then attach_visual_to_post. Use get_calendar to see what is already planned.

set_collection_item_display

ChatGPT
Choose how a visitor opens ONE item of a collection when they click it in a list or grid: "page" (its own full page — the default) or "modal" (a quick-view pop-up over the list, with photo, description, price, add to cart and a link to the full page). Works for any collection. Each item keeps its own page either way, so links and search are unaffected. The response carries tradeoffs — relay them to the owner. The preview shows the change at once; the live site updates on the next publish_site. list_collections reports each collection's current item_display.

set_favicon

ChatGPT
Set the site's favicon to one of the options from generate_favicon_options (by id, or "monogram"), or to an https image URL. Replaces the current icon, including one the owner set, and this tool has no restore snapshot; ask the owner to confirm before replacing it. Takes effect on the next publish.

set_post_cover

ChatGPT
The frame a reel opens on: either a cover picture (the https url of a visual that has already been made) or a moment in the clip in milliseconds — one, not both; the other is cleared. Without one the platform opens on the first frame. Free. Set it after attaching the clip, because attaching clears the cover.

set_studio_video_intent

ChatGPT
film (the default): one edited film. pack: separate shots they can use one by one (an asset pack) — the plan then lists shots and approve_studio_video_plan can buy only the ones they tick (shots). A film made from their own video stays one film. Set it before the director plans. Free.

set_up_appointments

ChatGPT
Turn on appointments for a business. First call get_appointments_status with include_setup_defaults: true and show the owner those defaults (appointment name and length, instant or request mode, weekly hours, time zone, where people can book) in ONE message, asking only what you cannot know — usually just "does this look right?". Then call this, passing only the fields they changed; anything omitted takes the proposed default. Provided hours replace the whole weekly schedule and supplied settings overwrite those values. Chat and voice take appointments at once; the website's booking form goes live on the next publish. Confirm the owner wants these changes before calling. Never creates items in the Services list.

share_board

ChatGPT
Make a client's board publicly viewable and get back a shareable link you can hand the client — no Mondovo login needed. This is how you turn sharing ON from here (list_boards only reports whether a link already exists). Identify the board by board_id, or by site_id/client_id (uses that client's main board, or a named board via board_name). Set enabled: false to turn sharing off, or rotate: true to issue a fresh link that invalidates the old one. Optionally allow the client to vote (allow_votes) or comment (allow_comments) on options. Returns the public share_url (on the agency's own branded domain when configured) and whether sharing is on. The board must already exist — pin a design first if it doesn't.

spin_up_pack

ChatGPT
Set up one of the ready-made businesses from list_packs — a whole working site for a kind of business (a local directory, for instance) that arrives with its listings, flows and pages already working. The design is copied, not generated: it costs no generation credits, uses one draft-site slot under the plan, and is ready in about two minutes. Send the pack's slug, the business name, and answers to the questions list_packs returns for that pack (keyed by question id; the required ones must be answered). To generate a new site from a brief instead, that is a different flow.

stop_studio_video

ChatGPT
Stop a film while it is being made (get_studio_video button.making.stoppable). Scenes that have not started are called off and their credits refunded; scenes already being made finish, and the film is put together from what is made. Does not spend.

studio_video_message

ChatGPT
One turn of the film's conversation with its director. FREE: a turn never spends Creative Credits. Say what the film should be, or what to change, in the user's words: the scenes, their words, the music, the voice, captions, the style, the length, a scene made again or with a new person in it. The director writes and edits the film's storyboard straight away — except that a bare idea with no storyboard yet ("a reel for my bakery") may be talked through first: up to three short replies, one question each, before it writes; "just make it" or "decide for me" skips that. Every change is free and can be undone (edit_studio_video_storyboard undo, or revert_turn with the turn_id this returns). Nothing is made or charged here: what costs money collects on the film's one button, which get_studio_video shows with its price, and only make_studio_video presses it. If the user says "make it" in chat: where approval cards exist, propose make_studio_video with the button's quote_hash and credits so the price is shown ON the card; otherwise confirm the price with them in words first, then call it. On a film made from their own video, ask here for new scenes before or after their clip (e.g. "a 14-second motion-graphics ending after my clip"): the director adds them to the same film at their price, joined into one export — never a second film to join. On their own talking footage, ask here for words on screen too — e.g. "split the big words around me, behind me": one phrase they say, set huge in two halves that frame them and pass behind them (the cut-out behind them is the one priced part of that plan). Returns the director's reply, changes (the edits it applied, each { id, summary }), turn_id when it changed anything, and ask when it has a question: answer with answer: { question_id, option_id }. ask.ideas offers three ideas (pick one by its option_id, or ignore them and keep talking); ask.scope asks whether a change is for one scene or all like it (scope:this / scope:all); ask.intake_form asks everything still missing at once (see its how_to_answer). Answers within about 40 seconds: a turn that takes longer answers still_working: true with asked_at — do NOT send the message again; poll get_studio_video until last_reply_at is later than asked_at, and read the reply, question, storyboard and button there.

suggest_keywords

ChatGPT
Suggest target search keywords for one page (page_slug) or every page, drawn from the site's own content: six to ten typed options per page (branded, service, long-tail, location, intent), a primary keyword, and the search intent, avoiding the same primary keyword on two pages. Results are cached for 24 hours; force_refresh generates new ones. Changes no page — apply the ones the user picks with update_page_seo.

switch_variation

ChatGPT
Make a previously-generated design variation the ACTIVE (live) design for a site, by its index (from list_variations). Refinements and publishing target the active design, so use this to switch which design is live. The other variations are preserved and can be switched back to. After calling, the change is immediate (no polling needed).

update_collection_item

ChatGPT
Change ONE existing item — a post's body, a product's price, a dish's name — or publish/unpublish it. Name it by item_id, or by collection_type plus its slug or exact title in item. Only the fields you send change, and there is no restore snapshot in this tool. Publishing a visible item sends the change to the public site by collection auto-publish; drafting hides it, so confirm public visibility changes before calling. Never creates an item. Blog posts show up to three related posts, picked automatically: to choose them send fields {"related_mode":"manual","related_ids":[item ids]}, to hide them on that post {"related_mode":"off"}.

update_page_seo

ChatGPT
Set the SEO metadata for a SINGLE page: its title (the browser-tab text and search headline for that page), description, target keywords, social image, canonical URL, and the noindex/nofollow flags. Only the fields you supply change. This is the PER-PAGE half of SEO and it WINS over the site-wide default — use update_site_settings for the site-wide title/description that pages fall back to. Like the site settings, none of this is in the site's code: Mondovo writes it into the page's head at publish, so refine_site cannot set it. Call get_site first if you need the list of page slugs; a wrong slug comes back with the real ones attached. Publish the site for the change to reach visitors.

update_site_settings

ChatGPT
Set any site-level setting that is not code: the default page title, the meta description, the social sharing image (og_image_url), the browser-tab icon (favicon_url), which AI crawlers (ai_crawlers) and search engines (search_crawlers) may read the site, the llms_txt content, and custom robots.txt rules (robots_txt_rules, robots_txt_custom). Only the fields you supply change; pass null to clear one. USE THIS RATHER THAN refine_site FOR ALL OF THEM. They live outside the site's code — Mondovo writes them straight into every published page's head, or serves them as /robots.txt and /llms.txt — so a refinement cannot set them, and asking one to try costs an AI round-trip and may put a stray tag in a component where it does nothing. This tool is instant and deterministic. favicon_url should be a square PNG, SVG or ICO under 500KB (32x32 or 64x64 is ideal); Mondovo downloads it and stores it permanently, so a temporary, generated or third-party URL is fine — you do not need to call upload_asset first. Crawler fields are per-crawler and independent: sending one leaves the others as they were. Blocking search_crawlers.googlebot removes the site from Google — confirm that with the user before doing it. Nothing here reaches visitors until the site is published: call publish_site afterwards for a live site.

update_social_post

ChatGPT
Change a planned post's copy (hook, caption, call to action, hashtags), pillar, goal, visual direction, platform, format, day or draft/ready status. Only the fields you pass change. Free; this does not publish immediately. Changing the day of an already queued post also changes its external publishing schedule.

update_variation_file

ChatGPT
Replace the code of a SINGLE file that already exists in a design variation, leaving every other file and all content untouched. It never creates a file: to add a NEW page you wrote, use add_page with code. Use this for targeted code edits — a colour, a layout tweak, one section — instead of resending the whole design through import_design_variation, which burns a variation slot and re-uploads everything. Start from the current code returned by read_design (requires source:read) — send the COMPLETE file, not a fragment. The patched file is run through the same validation a full import gets; if it fails, NOTHING is written and the issues come back. On success the edit is recorded in version history (version in the response) so it shows in list_versions and can be undone with restore_version; a history_warning means it saved but was not recorded. Omit index to patch the site's active design. PAGE DRAFTS: pass the draft's slug (from create_page_draft / list_page_drafts) as file and its design's index to edit the draft instead of the live page. A draft must keep reading its own text (content.<content_key>); code that reads the live page's key is refused, because the draft would then edit the live page.

upload_asset

ChatGPT
Store an image or video permanently in a site's media library and get back a stable, non-expiring URL you can use in the design. (For Creative Studio — visuals and films — use upload_brand_asset instead: it reads a brand's Library, not a site's.) Give a site_id and an HTTPS url pointing at the media (a generated image/video, a stock URL, or a temporary/expiring signed URL) — Mondovo downloads it, stores it permanently, and returns the permanent url. Use this when you have media at a link that might expire, or that you generated elsewhere, and you want it to live with the site. Supported: images (JPG, PNG, WebP, GIF) and video (MP4, WebM, MOV, up to 80 MB). Returns the permanent url plus an asset_id; reference the url in a subsequent refine_site instruction to place the asset.

validate_design

ChatGPT
Pre-flight a design payload (content + files[]) against Mondovo's real compile / content-key / page-graph / import-allowlist gates WITHOUT creating anything. Returns the list of issues to fix. Call this while iterating on a design until it returns ok:true, THEN call create_site_from_design or import_design_variation. No writes, no cost.

verify_domain

ChatGPT
Check the DNS records for the domain claimed with claim_domain and, when they are in place, make the domain live on the site. When the records are not found yet the result is verified: false with what was found — DNS changes can take up to 48 hours, so tell the user to try again later rather than re-claiming.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

App Stats

115

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily