Skip to main content
Glama
759,132 tools. Updated 2026-11-08 06:17

"A server for finding information and resources related to UX (User Experience) design" matching MCP tools:

  • Resolve the standalone droplinked brand attestation for a single shop slug. Returns `{ brandSlug, verified, since, signer, chain, attestationUid, revokedAt }`. Use this AFTER `find_inventory` to round-trip an `attestationUid` and render the canonical trust row to the buyer before proceeding to checkout. Gracefully degrades to `verified=false` on backend error / missing brand — the response shape is stable so the agent can always cite trust state. Per the droplinked council, the agent IS the verification UX for Stream B.
    ConnectorNo auth
  • Returns the plain-language meaning and step-by-step fix for one Malinois finding. Use it while helping the user fix an issue reported by scan_app, or when they ask what a finding means. Pass the rule_id exactly as scan_app returned it. Read-only, no network, instant.
    ConnectorNo auth
  • Pro/Teams: first-pass surface-craft review of a FRONTEND artefact (component, screen, or flow) against the 8 laws of the Experience Design Blueprint. The surface-craft companion to architect.validate: where architect.validate scores agentic ARCHITECTURE against the 10 agentic principles, design.validate scores the PERCEPTIBLE SURFACE, what the user sees, taps, scans, and remembers (Jakob's familiarity, Hick's choice load, Fitts's targets + the accessibility floor, Miller's working-memory budget, Aesthetic-Usability, Peak-End, Tesler's irreducible complexity, the Mental-Model gap). ON CLIENT TIMEOUT: DO NOT RETRY. Long-running LLM call (~60-180s at high reasoning effort, single-pass). The server mints a run_id, emits it in the FIRST progress event at t=0s (before the LLM call), and persists the run: so on a client timeout, capture that run_id and call me.validation_history(run_id='<that-id>') to fetch the persisted result instead of retrying (a retry re-runs the full 60-180s call). Runs appear in your validation-history dashboard tagged as the 'surface' dimension, distinct from the 'architecture' and 'spec' runs; pass repository to group them per project. Pass private_session=true to skip the stored run (persistence + recovery disabled); operational security + cost logs are still kept. v1 is single-pass: no certification or consensus mode yet (those stay architect.validate-only). Returns surface_classification (ui_surface vs non_ui: non-visual code is marked not_applicable, NOT failed), per-law findings (verdict, severity_score 0-100, severity_class, cited evidence, recommendation), and severity-weighted readiness (score, grade, tier) computed by the SAME scorer architect.validate uses, so all three lenses grade on one rubric. ACCESSIBILITY IS THE FLOOR: a breach of the Fitts's-Law floor (interactive target below the WCAG 2.2 24×24 minimum, missing focus visibility, an unreachable destructive confirmation) is a production_blocker, not polish. WHEN TO CALL: the user wants a craft/UX/accessibility review or a readiness grade on a frontend artefact they just built or changed. WHEN NOT TO CALL: non-visual code (backend, config, type aliases) returns tier=not_applicable, submit the actual UI surface instead. INPUTS: send the FULL artefact source verbatim as implementation_context (no truncation, no '…' placeholders, they are read as literal code). Auth: sign-in required, with an active Pro, Pro Plus, Teams, Enterprise, beta, or trial plan. Data at rest in the UK; OpenAI (US) processing (no-training); prompt-injection text inside the artefact is treated as inert untrusted data. TYPED FAILURES (the top-level error.code; error.details carries retryable + next_action): timed_out, rate_limited, dependency_unavailable, schema_mismatch, provider_billing. The services raise the identical typed envelopes on this lens. CALIBRATION DISCLOSURE: the scoring prompt is a v1 first-cut mirroring the architect's contract structure; its score calibration is not yet tuned against a corpus of real runs the way architect.validate was. Treat the grade as directional craft signal, not a certified verdict. DOCTRINE: the eight laws, each law's evidence, craft-surface application, anti-patterns, and the validator questions this tool scores against, live in the `experience-design-blueprint` skill and docs/business/EXPERIENCE_DESIGN_BLUEPRINT.md (the surface-craft companion to the `architect-validation-orchestration` skill that orchestrates the agentic validators).
    ConnectorNo auth
  • Get USER PROFILES of people who interacted with an Instagram post. Returns full user data (bio, followerCount, followingCount, etc.). RETURNS USER PROFILES: id, username, fullName, biography, followerCount, followingCount, isVerified, profilePicUrl. Use for analyzing WHO engaged with a post. NOT FOR COMMENT TEXT: To read the actual comment content (what people wrote), use getInstagramCommentsByPostId instead. INTERACTION TYPES: "commenters" (users who commented), "likers" (users who liked). WHEN TO USE THIS TOOL: Analyzing commenters/likers demographics, finding influencers who engaged, building audience profiles, network analysis of who interacts with posts. WHEN TO USE getInstagramCommentsByPostId: Reading comment text, sentiment analysis of what was said, analyzing discussion content. FAST (default, omit responseType or responseType="fast"): Returns up to 300 results directly (use limit param to reduce, e.g. limit=5). Auto API fallback for commenters when stale. PAGING (responseType="paging"): Async paginated results (1000 users per page with default fields), returns operationId - IMMEDIATELY call checkOperationStatus to get results. CSV export included via dataDumpExportOperationId. Supports pageNumber/tableName for subsequent pages. Optional fields (default: ["id", "username", "fullName"]). Available: biography, isPrivate, isVerified, followerCount, followingCount, mediaCount, profilePicUrl. This is a safe, read-only tool for analyzing searchable information.
    ConnectorOAuth
  • Returns instructions for migrating from an existing auth provider to PropelAuth in a fullstack Nextjs App Router or Nextjs Pages Router application. If the user is using Next.js as just a frontend (e.g. client-side rendered with or without server routes), use the migrate_to_propelauth_frontend tool. Guidance includes installation and configuration, retrieving user or org information, logging users out, redirecting users to login, and more. Make sure to use the 'Installation' guidance first. It is important to call every guidance to ensure a successful integration. Do not update a component/hook/etc from the auth provider until you receive guidance about that component/hook/etc
    ConnectorNo auth
  • Fetch full details for one skill by slug. Call AFTER search_skills or popular_skills when a user selects a specific result — do NOT batch-call for every item. Returns: name, description, category, tags, version, author, downloads, stars, install_command, homepage_url, repo_url. Error lifecycle: slug not found → {error: "Skill not found"} → fall back to search_skills with related keyword. Never guess slugs; only use slugs from prior tool results.
    ConnectorNo auth

Matching MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to persistently recall, apply, and reinforce solutions to previously solved problems across different models and tools, so mistakes are not repeated.
    14
    20 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a cross-session experience knowledge base for AI agents, enabling retrieval of past problem-solution experiences via MCP tools. It helps agents reuse solutions without retraining, with zero-LLM runtime retrieval.
    MIT

Matching MCP Connectors

  • Real-user Core Web Vitals for any website with enough traffic, from Google's Chrome UX Report…

  • [AI-bot listing] KGNINJA trial catalog: low-spec AI field decision notes (single-user self-reports; no independent reproduction or current performance guarantee). Free sample OMARCHY-03 via get_experience_case or GET /cases/OMARCHY-03. Four paid cases @ 0.01 USDC on Base via x402 MCP. payTo 0x4D7d842536De9Eb491AE2300126B3CDdE7B0aDE3. Sales: https://ai-experience-catalog-20261001.fuwafuwow.workers.dev/ . No fabricated purchase stats. Browser alone cannot buy via MCP URL.

  • Pro/Teams: first-pass surface-craft review of a FRONTEND artefact (component, screen, or flow) against the 8 laws of the Experience Design Blueprint. The surface-craft companion to architect.validate: where architect.validate scores agentic ARCHITECTURE against the 10 agentic principles, design.validate scores the PERCEPTIBLE SURFACE, what the user sees, taps, scans, and remembers (Jakob's familiarity, Hick's choice load, Fitts's targets + the accessibility floor, Miller's working-memory budget, Aesthetic-Usability, Peak-End, Tesler's irreducible complexity, the Mental-Model gap). ON CLIENT TIMEOUT: DO NOT RETRY. Long-running LLM call (~60-180s at high reasoning effort, single-pass). The server mints a run_id, emits it in the FIRST progress event at t=0s (before the LLM call), and persists the run: so on a client timeout, capture that run_id and call me.validation_history(run_id='<that-id>') to fetch the persisted result instead of retrying (a retry re-runs the full 60-180s call). Runs appear in your validation-history dashboard tagged as the 'surface' dimension, distinct from the 'architecture' and 'spec' runs; pass repository to group them per project. Pass private_session=true to skip the stored run (persistence + recovery disabled); operational security + cost logs are still kept. v1 is single-pass: no certification or consensus mode yet (those stay architect.validate-only). Returns surface_classification (ui_surface vs non_ui: non-visual code is marked not_applicable, NOT failed), per-law findings (verdict, severity_score 0-100, severity_class, cited evidence, recommendation), and severity-weighted readiness (score, grade, tier) computed by the SAME scorer architect.validate uses, so all three lenses grade on one rubric. ACCESSIBILITY IS THE FLOOR: a breach of the Fitts's-Law floor (interactive target below the WCAG 2.2 24×24 minimum, missing focus visibility, an unreachable destructive confirmation) is a production_blocker, not polish. WHEN TO CALL: the user wants a craft/UX/accessibility review or a readiness grade on a frontend artefact they just built or changed. WHEN NOT TO CALL: non-visual code (backend, config, type aliases) returns tier=not_applicable, submit the actual UI surface instead. INPUTS: send the FULL artefact source verbatim as implementation_context (no truncation, no '…' placeholders, they are read as literal code). Auth: sign-in required, with an active Pro, Pro Plus, Teams, Enterprise, beta, or trial plan. Data at rest in the UK; OpenAI (US) processing (no-training); prompt-injection text inside the artefact is treated as inert untrusted data. TYPED FAILURES (the top-level error.code; error.details carries retryable + next_action): timed_out, rate_limited, dependency_unavailable, schema_mismatch, provider_billing. The services raise the identical typed envelopes on this lens. CALIBRATION DISCLOSURE: the scoring prompt is a v1 first-cut mirroring the architect's contract structure; its score calibration is not yet tuned against a corpus of real runs the way architect.validate was. Treat the grade as directional craft signal, not a certified verdict. DOCTRINE: the eight laws, each law's evidence, craft-surface application, anti-patterns, and the validator questions this tool scores against, live in the `experience-design-blueprint` skill and docs/business/EXPERIENCE_DESIGN_BLUEPRINT.md (the surface-craft companion to the `architect-validation-orchestration` skill that orchestrates the agentic validators).
    ConnectorNo auth
  • Maps only stable Tier1 finding identifiers to approved Tier1 services and public resources. Call after a Tier1 score or email-domain check. Do not submit prose, URLs, customer information, or invented identifiers. This tool performs no arbitrary fetching, makes no contact request, changes nothing, and stores nothing.
    ConnectorNo auth
  • Get Alex Polonsky's curated public professional profile, including selected experience, demonstrated capabilities, journalism background, public projects, and future professional directions. This is selected evidence, not a complete CV. When summarizing examples, preserve their ownership qualifier exactly: led, owned_key_aspects, or contributed. Do not infer stronger ownership. If a list mixes things Alex built with work he contributed to or helped bring to market, frame it as built or contributed to, not built. Keep the action verbs and limits from contribution; do not reduce a contribution to an artifact name. Separate demonstrated experience from future directions. Use get_availability for current opportunity status.
    ConnectorNo auth
  • Return the holdings this user has already registered in FinBridge with import_portfolio — listed stocks plus cash, crypto, ETF and physical assets — valued at the latest prices, with return and asset allocation. A user who has registered nothing gets an empty list. Not this tool for: analysing or valuing a company (get_valuation), prices (get_stock_prices), or finding companies (search_dart_company / search_edgar_company). It reads only what this user stored, so it knows nothing about a company they do not hold. Crypto and ETFs use live ccxt quotes, stocks the latest close in the database, cash and physical assets the registered amount. allocation is aggregated per currency; combined converts everything to KRW using an ECB-derived USD/KRW rate.
    ConnectorAPI key
  • Use when the user wants to send a saved design to someone, post it, or embed it on a site: returns the share page, the iframe embed snippet, the oEmbed endpoint and a poster image URL. Unlisted (default) works for anyone holding the link without making the project public; public makes the page indexable. Reuses the project's active link of the same visibility, so calling twice is safe. The project must have been opened and saved once. Owner only. Do not use to let someone edit; create_invite_link does that.
    ConnectorOAuth
  • Generate a document as a PDF and store it in the workspace. It never emails or sends anything, so a request to email or send a document is not a request to generate one. Pass exactly one source: - `params`: values you provide, with a `document_slug`. Call well_list_generative_documents first: it gives each design's document_slug and the JSON Schema its params must satisfy. Values that do not match are refused with the path and reason of each problem, so fix them and call again. The design prints light unless `params.theme` is "dark". Each call prints and stores a new document, unless you pass `document_id`. - `document_id` (with `params` only): when the user asks to change, fix or redo a document you already generated in this conversation, pass its document_id so it is replaced in place instead of adding a new file. Its document_id and links keep working and serve the new PDF. Only a document this tool generated from values can be replaced. - `invoice_id`: an invoice already in Well. The PDF prints that invoice, in its own chosen ink, and is attached to it as its document. Pass a `document_slug` to choose the design; without one, the invoice's own chosen design prints. Refused when the invoice already carries a file a user or connector supplied: a generated PDF never replaces one. Generating again updates that same document in place, so its document_id and links keep working. - `design` (with `invoice_id` only): the options the invoice-design card returned, passed exactly as the card gave them. `layout`, `theme` and `locale` choose the design, the ink and the language of this print, on an issued invoice too. `payment_terms_note_id`, `tax_rate_id`, `legal_mentions_note_id` and `payment_means_id` must equal what is saved on the invoice, or be null when nothing is saved: an id that differs is refused, so save a change with well_update_invoice_design first. Each option is optional, and every option left out keeps the value the invoice already holds. `theme` is a key of `design`, not a top-level input. Do not pass `design.layout` together with a different `document_slug`, or `design.locale` together with a different `locale`: the call is refused. Totals are never supplied: every sum is computed from the lines, so a printed total cannot disagree with the lines above it. The tool returns the stored PDF's document_id. `file` carries the PDF's name and size plus the links to fetch it. The result renders as a card with Download and View in Well; when no card is shown, hand the user `download_url`. - `download_url` saves the PDF and `signed_url` opens it in a browser. Both work with a plain HTTP GET and no auth header, and stop working at `expires_at`. - `preview_url` is a PNG image of the first page, for showing the document; add `page=N` for page N, up to `page_count`. Same token and expiry as the other links. - `sheet_url` is the document's HTML sheet, which the card draws with zoom and pan. Same token and expiry. - When the user wants to do more with a PDF already generated (attach it to an email, upload it elsewhere, read or analyse it, pass it to another tool), fetch `download_url` with a plain HTTP GET to get the bytes. - If the links have expired, call this tool again: with `params` it prints a new document with fresh links; with `invoice_id` it refreshes the same document and its links. - `app_url` opens the document in Well and never expires. - The links grant access to the file on their own: share them only with the user, never in a public place. With `invoice_id` of an issued invoice, the PDF is the issued invoice and `portal_url` is its customer page, the page its QR code opens, for the owner to forward to the customer. It is null when the invoice has no customer page.
    ConnectorNo auth
  • Get resolved preference values for the caller in this workspace. Each key resolves to the caller's own override when they have set one, otherwise the workspace-wide default, otherwise it is absent from the result. Known keys: connector_write_trust, invoice_default_layout, invoice_design, action_trust, preferred_name, form_of_address, mail_sender_choice, timezone, bank_account_offer, invoice_payment_account, invoice_card_payment_link, payment_link_reconnect_offer, sunday_routines, message_policy, proactive_messages, touchbase_afternoon, touchbase_eod, touchbase_afternoon_workspace, touchbase_eod_workspace, customer_facts_note_id, extension_install_offer, cash_scope, missing_invoice_duplicate_verdicts, todo_kind_mutes, customer_answers_alone_topics, pre_meeting_note, bank_connect_offer, email_weekly_digest, email_connection_updates, email_well_notifications, brief_section_header, brief_section_cash, brief_section_carousel, brief_section_agenda, brief_section_todos, brief_section_tomorrow-meetings, brief_section_business-watch, brief_section_detail, brief_section_main-button, brief_email, unassigned_task_default. Pass `keys` to limit the read to specific keys; omit it to get every preference currently set. A key with no value set anywhere is simply absent from `preferences`, never returned as null or an empty string. `invoice_design` comes back as the invoice design options object `{ layout, theme, locale, payment_terms_note_id, tax_rate_id, legal_mentions_note_id, payment_means_id }`, the same object `well_generate_document` takes as `design`. To save it on an invoice with `well_update_invoice_design`, convert each key to its `design_*` attribute (`layout` → `design_layout`, `payment_means_id` → `design_payment_means_id`, …). Pass `namespace` to read the values saved for one subject, e.g. `"customer:<company_id or person_id>"` for one customer's invoice design. A namespaced read returns only that namespace's values and never falls back to the un-namespaced ones; read without `namespace` too when the house default should apply. The pre-meeting note is off until the member's `pre_meeting_note` is "on", whatever the schedule list shows; an un-namespaced read always returns it as "on" or "off". `mail_sender_choice` is a member-private key read one sender at a time: pass `namespace` set to the `namespace` that `well_list_mail_senders` returns for that sender, and it comes back as `{ choice, sender }` from the caller's own saved row only. No other member's choice and no workspace default is returned for it. To read the choices of many senders at once, call `well_get_mail_sender_choices`. A read without `namespace` also returns `invoice_layouts`: every invoice design, as `{ layout, name, description: { fr, en } }`, the default design first. Name a design to the user only with its `name` and its `description` in the conversation's language, and save the `layout` of the one they pick. When the token authorizes one workspace, call this directly — no workspace call is needed first. When it authorizes several, this read will not guess which one you mean: pass `workspace_id` on the call.
    ConnectorNo auth
  • THE DEFAULT TOOL FOR QUESTION-SHAPED QUERIES ("wie/warum/was hilft bei X?", "how do I…?"): retrieves the best-matching fulltext passages from the corpus and returns them with citations (source resource, page, heading, source URL) — answer the user FROM the passages and cite each source. (For discovery intent — "finde/empfiehl Materialien" — use search_content instead, or afterwards to offer browsable links.) Keep `question` topic-only. Ranking is hybrid keyword+vector, so phrase the question as a topical statement that names the subject and the target group ("Friedenserziehung in der Grundschule: Einstieg in das Thema Frieden mit Kindern"), not as the user's literal sentence ("Wie kann ich …?"). Results are capped at two passages per document; a passage with only a snippet and no text has no fulltext yet — say so instead of guessing. Passages come from learning resources under Creative Commons, Public Domain and free software/documentation licenses, and DINI-AG-KIM license types that resolve to one of these and from articles, wikis, publications and the other content kinds. Other matching learning resources appear in `metadataOnlyMatches` (naddr, title, license, creator/publisher, sourcePage) without text, because their license does not permit quoting — point the user to them by title, license and link, never quote or paraphrase them as content. Cite the license and the creator/publisher with every learning-resource passage. licenseFilter narrows learning resources: "open" = CC0, Public Domain, CC BY, CC BY-SA, their DINI-AG-KIM license-type equivalents, and free software/documentation licenses (GPL, LGPL, AGPL, GFDL, MIT, Apache 2.0, BSD); "cc-any" = all of "open" plus every other Creative Commons license, incl. KIM non-commercial/no-derivatives (normally no metadataOnlyMatches); "any" = also unlicensed and all-rights-reserved resources, as metadataOnlyMatches. Scope is required but simple: with no source restriction from the user, pass the content kinds (e.g. kinds:[30142] for educational resources, [30040,30041] for publications, [30023] for articles). Route source restrictions ("nur Content von X") into the scope parameters: a metadata publisher (most organisations — resolve_publisher finds the exact spelling) goes into `search` as a QUOTED field filter, e.g. search:'publisher.name:"LEHRE LADEN"' (unquoted multi-word names match nothing); a Nostr signing account (resolve_author → pubkey) goes into `authors`. A published grimoire spell (kind 777, nevent or event id) can replace inline scope entirely; the response carries the canonical spell for whatever scope was used — publish it (e.g. via grimoire) to make the scope reusable. Spells may use $me/$contacts; they resolve to the calling user (pass `me` if the transport is anonymous). Fails rather than widening scope: an empty scope, unreachable relay (relay_unreachable — tell the user to retry), or unreachable index is a typed error, never a silently unscoped search.
    ConnectorNo auth
  • Planning-time statistical power from a design's REAL model matrix — no data needed. Builds the design and takes `ncp = effect_size² / (X'X)⁻¹_jj`, so it is correct for centre points, axial points and unbalanced designs — unlike `covadoe_power_analysis`, which assumes orthogonality and overstates power on a CCD, Box-Behnken or DSD. Use this when planning an experiment; use `covadoe_post_hoc_power` only once you have measured responses. `design_type` + `n_factors` builds the design (same generator as `covadoe_create_design`, so the answer describes the design you would actually get). Common aliases resolve ("full_factorial", "ccd", "dsd"). Alternatively pass `design`, an explicit coded run matrix, to score a design you already hold — D/I-optimal, mixture, split-plot or hand-built. `n_runs` / `model_terms` are forwarded to the generator for the optimal designs. `model`: "linear" | "interaction" | "quadratic" | "quadratic_no_interaction" (a DSD supports only the last). `term` names the coefficient — "x1", "x1^2", "x1*x2"; omit it to get power for every term and group, which differ sharply on the same design. `alpha` is the significance level; the CCD axial distance is `axial_alpha`, and the two are easy to confuse. CCD variant: `axial_alpha` defaults to ROTATABLE, (2**n_factors)**0.25 — the design JMP, Design-Expert and Minitab hand you. Pass a number, or "orthogonal" for the α where Σx² = n_runs (at 3 factors: main-effect power 0.9400 against the rotatable 0.8846 on the same 17 runs; the orthogonal α is also the premise of `covadoe_power_analysis`, so on that design the two agree for a main effect and disagree for every other term). `face` — "circumscribed" (default), "faced" (star points on the faces, α = 1) or "inscribed"; a bool works, and an unknown value is rejected rather than quietly treated as circumscribed. Returns power, power_by_term, power_by_group, df_error, relative_variance ((X'X)⁻¹_jj), the resolved design_summary (the α and factorial level actually built — read both, an inscribed CCD always reports α = 1), and `orthogonal_shortcut_power` — what `covadoe_power_analysis` would have claimed — with its signed error (signed: the shortcut does not always overstate). Returns `estimable: false` plus a reason when the model cannot be fitted on the design.
    ConnectorAPI key
  • Use for upcoming games (next 1-30 days, default 7) with the median line across posted sportsbooks: moneylines, run line and total. For every book's line use get_odds. Costs 2 credits. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
    ConnectorNo auth
  • Lints one DESIGN.md file with the official @google/design.md 0.4.0 linter, the same check as `npx @google/design.md lint DESIGN.md`. Best for: checking a DESIGN.md file the user pasted before it goes to a coding agent. Pass the whole file contents in text, including the YAML front matter between the --- lines; a file path or URL will not work, so ask the user to paste the file. Returns: each finding with its severity, rule and token path (broken token references, low text contrast, missing primary color, unused colors, section order, unknown keys), the error, warning and note counts, the sections found and the token counts. The file is valid when it has no errors. Front matter that is not valid YAML comes back as a finding, not an error. Do not use for: comparing two versions (use diff_design_md) or reading a website (use extract_design_md).
    ConnectorNo auth
  • Upload the released board (Gerbers, BOM, placement) to a manufacturer and return the page where the user pays. This publishes the design to a third party: call it only when the user has explicitly asked to order from that provider, and set user_confirmed only then. Some providers need a shipping address.
    Connector
    Destructive
    No auth
  • Upload the released board (Gerbers, BOM, placement) to a manufacturer and return the page where the user pays. This publishes the design to a third party: call it only when the user has explicitly asked to order from that provider, and set user_confirmed only then. Some providers need a shipping address.
    Connector
    Destructive
    No auth
  • 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. `variation_id` selects the design to edit. On a design site with several alternatives it is REQUIRED: show the choices from list_variations and let the user choose, rather than assuming the active or first design. On a built or single-design site, omit it for the chosen design. A page draft that lives in a different design is edited with patch_variation_content / update_variation_file instead.
    ConnectorOAuth
  • 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`, its `reason` says why: "placeholders" means contact details that look AI-invented (listed in `placeholders`) — refine them to the real values first, or (if they are already correct) call again with `confirm_contact_info: true`; "missing_details" means nothing was invented but the email or phone in `missing_fields` is absent — ask the user for it, or call again with `confirm_contact_info: true` if the site should go live without it. Never make up a contact detail. 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.
    ConnectorOAuth