Skip to main content
Glama

Create a site from a design you authored

create_site_from_design

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.

Input Schema

NameRequiredDescriptionDefault
filesYesSelf-contained component files; one page with slug "/"
contentYesStructured content keyed by section; code reads content.X by exact key
businessNoBusiness context — REQUIRED for good catalog detail-page copy
user_goalNoOptional: the user's goal behind this call, in one short sentence of plain words (e.g. "add a page so customers can book tables"). No names, emails or other personal details.
collectionsNoDeclared catalog collections (menu/products/etc.) with sampleItems
idempotency_keyNoStable key for this creation attempt. Pass the same value when retrying after a timeout or network error and you get the ORIGINAL site back instead of a duplicate. Use a fresh key for a genuinely new site.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / user_goal
      Added value: +{
      +  "description": "Optional: the user's goal behind this call, in one short sentence of plain words (e.g. \"add a page so customers can book tables\"). No names, emails or other personal details.",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / files / items / properties / code / description
      Previous value: -"Complete self-contained TSX. Sections receive { content }. Allowed imports: react, react-dom, lucide-react, framer-motion, clsx, tailwind-merge, embla-carousel-react; relative chrome (pages only); AND platform components via \"@/components/Runtime*\" (see PLATFORM COMPONENTS). Anything else fails validation. COLORS (so the design is theme-swappable in the editor): define your brand palette as CSS variables in a theme block (\":root { --color-primary; --color-secondary; --color-accent; + shades }\") and reference them as var(--color-primary) everywhere brand color appears. Neutrals (white/black/greys) may be literal Tailwind classes. Do NOT hardcode brand hues as bg-indigo-600 or #hex — they will not be recolorable and defeat the palette switcher. PLATFORM COMPONENTS: prefer \"@/components/Runtime*\" over hand-building. Self-wiring (safe to use directly in an authored import): RuntimeOwnedVideo (Owned video with required src, poster and title; mode=\"hero\" for a muted loop, mode=\"testimonial\" for click-to-play. Respects reduced motion.), RuntimeForm (Site form; write its field config to content.forms[]), RuntimeInquiryForm (Enquiry form; field config in content.forms[]), RuntimeQuoteForm (Quote-request form; field config in content.forms[]), RuntimeDataView (renders rows a section is bound to; pass items={content.<section>?.items} — it makes no requests of its own), RuntimeCategoryListing (category listing over the site catalog), RuntimeQuiz (multi-step quiz), RuntimeDirectorySearch (hero search that takes visitors to the directory, filtered), RuntimeDirectoryListingDetail (the page for one business in a directory), RuntimeDirectoryRankedPage (a \"Best {niche} in {area}\" page, ranked from the directory), RuntimeAreaLinks (links to the \"Best in <area>\" pages a directory publishes), RuntimeFacetedCatalog (faceted catalog browse + filter), RuntimeGallery (image gallery + optional screenshot tour + lightbox), RuntimeAccordion (accordion / FAQ), RuntimeCarousel (carousel / slider), RuntimeTabs (tabbed panels), RuntimeMap (embedded map). Owner-setup-required (these render but stay INERT on import until the owner activates the feature — do NOT rely on them in authored code; add them through refine_site instead, which runs the activation pipeline): RuntimeBookingWidget, RuntimeBookingDirectory (Team or branches cards from Appointments, each with a Book button), RuntimePaymentButton, RuntimeCart, RuntimeProductDetail, RuntimeCheckout, RuntimeFunnelCheckout, RuntimeFunnelOptin, RuntimeFunnelUpsell, RuntimeListingClaim (\"is this your business?\" claim + report form for a directory listing), RuntimeListingUpgrade (paid placement picker for a directory listing), RuntimeListingSubmit (public \"add your business\" form for a directory), RuntimeCustomerPortal, RuntimePortalCollection."New value: +"Complete self-contained TSX. Sections receive { content }. Allowed imports: react, react-dom, lucide-react, framer-motion, clsx, tailwind-merge, embla-carousel-react; relative chrome (pages only); AND platform components via \"@/components/Runtime*\" (see PLATFORM COMPONENTS). Anything else fails validation. COLORS (so the design is theme-swappable in the editor): define your brand palette as CSS variables in a theme block (\":root { --color-primary; --color-secondary; --color-accent; + shades }\") and reference them as var(--color-primary) everywhere brand color appears. Neutrals (white/black/greys) may be literal Tailwind classes. Do NOT hardcode brand hues as bg-indigo-600 or #hex — they will not be recolorable and defeat the palette switcher. PLATFORM COMPONENTS: prefer \"@/components/Runtime*\" over hand-building. Self-wiring (safe to use directly in an authored import): RuntimeOwnedVideo (Owned video with required src, poster and title; mode=\"hero\" for a muted loop, mode=\"testimonial\" for click-to-play. Respects reduced motion.), RuntimeForm (Site form; write its field config to content.forms[]), RuntimeInquiryForm (Enquiry form; field config in content.forms[]), RuntimeQuoteForm (Quote-request form; field config in content.forms[]), RuntimeDataView (renders rows a section is bound to; pass items={content.<section>?.items} — it makes no requests of its own), RuntimeCategoryListing (category listing over the site catalog), RuntimeQuiz (multi-step quiz), RuntimeDirectorySearch (hero search that takes visitors to the directory, filtered), RuntimeDirectoryListingDetail (the page for one business in a directory), RuntimeDirectoryRankedPage (a \"Best {niche} in {area}\" page, ranked from the directory), RuntimeAreaLinks (links to the \"Best in <area>\" pages a directory publishes), RuntimeFacetedCatalog (faceted catalog browse + filter), RuntimeGallery (image gallery + optional screenshot tour + lightbox), RuntimeAccordion (accordion / FAQ), RuntimeCarousel (carousel / slider), RuntimeTabs (tabbed panels), RuntimeMap (embedded map), RuntimeBrandIcon (Brand logos in brand colours (Instagram, Facebook, X, LinkedIn, TikTok, Pinterest, WhatsApp, YouTube, Google, Yelp…): <RuntimeBrandIcon brand=\"pinterest\" className=\"h-5 w-5\" />.). Owner-setup-required (these render but stay INERT on import until the owner activates the feature — do NOT rely on them in authored code; add them through refine_site instead, which runs the activation pipeline): RuntimeBookingWidget, RuntimeBookingDirectory (Team or branches cards from Appointments, each with a Book button), RuntimePaymentButton, RuntimeCart, RuntimeProductDetail, RuntimeCheckout, RuntimeFunnelCheckout, RuntimeFunnelOptin, RuntimeFunnelUpsell, RuntimeListingClaim (\"is this your business?\" claim + report form for a directory listing), RuntimeListingUpgrade (paid placement picker for a directory listing), RuntimeListingSubmit (public \"add your business\" form for a directory), RuntimeCustomerPortal, RuntimePortalCollection."
  3. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say it is a non-destructive, open-world write. The description adds what actually happens beyond that: Mondovo validates and rehosts images to its CDN, the site lands in the design-selection phase for user comparison, and the caller must poll get_site until status is 'ready'. That lifecycle and async behavior is not recoverable from the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening is well front-loaded: payload shape, then lifecycle, then the sibling alternative. But the closing 'AUTHORING CONTRACT' sentence re-states guidance already spelled out at length in the files[].code schema description (CSS variables, prefer Runtime* components, owner-activation components belong in refine_site), so it adds bulk without adding information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must say what comes back — it does ('Returns a site_id; poll get_site until status is "ready"'). Combined with the design-selection lifecycle, the sibling routing, and the per-parameter expectations, an agent has everything needed to invoke this correctly and handle the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description still earns credit by compressing the contract into a callable checklist — 'business (name + industry + description)', 'content keyed by section', 'files ... exactly one page with slug "/"', 'collections ... with sampleItems' — which tells the agent what each required group must contain rather than just naming it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a NEW site whose active design is a layout YOU author') and enumerates the exact payload shape. It explicitly contrasts itself with create_site ('For a normal brief-based site, use create_site instead'), so an agent can distinguish it from the sibling without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both directions: use this when the agent authors the design, use create_site for brief-based sites. It also routes follow-on work precisely — import_design_variation / generate_design_variation to add alternatives, refine_site for owner-activation workflow components — which is exactly the when/when-not guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources