Skip to main content
Glama

Validate a design before import

validate_design
Read-onlyIdempotent

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.

Input Schema

NameRequiredDescriptionDefault
filesYes
contentNo
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.

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.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and idempotentHint=true, so the safety profile is covered. The description still adds genuine value beyond that: 'No writes, no cost' confirms no billing side effects, and 'returns the list of issues to fix' plus the ok:true loop describes the iteration contract. Minor gap: no note on whether validation is fast enough to call repeatedly or how many issues are returned.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what it does, then the workflow, then the cost/write guarantee. Zero filler.

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

Completeness4/5

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

With no output schema, the description correctly discloses the return contract (issue list plus ok:true) and the write/cost profile, which is what an agent needs to place it in the build loop. Slightly short of 5 because it doesn't characterize the issues returned or failure modes.

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

Parameters3/5

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

Schema coverage is only 33%, but the nested field descriptions for files[].code and files[].type are extremely detailed and carry most of the semantic load. The description names the payload shape (content + files[]) but says nothing about the user_goal parameter and adds no format guidance beyond the schema.

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 (pre-flight / validate) against a named resource (design payload: content + files[]) and enumerates the gates checked (compile, content-key, page-graph, import-allowlist). The 'WITHOUT creating anything' clause cleanly distinguishes it from create_site_from_design and import_design_variation.

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?

Explicitly says to call it while iterating until it returns ok:true, THEN call create_site_from_design or import_design_variation. Names the alternatives and the exact condition that gates the transition, leaving nothing to inference.

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