# AI Assistant — full corpus > Every English page of the site as Markdown, in llms.txt order. Per-page twins: append `.md` to any page URL. --- title: "AI Assistant — Busy day? You’ve got a mate." description: "An AI assistant that learns from your website, answers questions, helps customers choose and closes deals while you sleep — under your own name, on your own web address, with a hand-off to your team." last_updated: "2026-09-17T12:02:28+03:00" --- # AI Assistant — Busy day? You’ve got a mate. Source: https://busymate.ai/ Last modified: 2026-09-17T12:02:28+03:00 An AI assistant that learns from your website, answers questions, helps customers choose and closes deals while you sleep — under your own name, on your own web address, with a hand-off to your team. ## On this page's section - [How the platform works | AI Assistant](https://busymate.ai/platform.md): How the platform works — everything is a setting you control - [WebMCP: make your website something an assistant can use | AI Assistant](https://busymate.ai/webmcp.md): WebMCP — your website tells assistants what it can do; what changes for customers and how to enable it - [Agent Ready v1: the web standard an AI agent reads | AI Assistant](https://busymate.ai/agent-ready.md): The {product} Agent Ready v1 standard — six scored sections, ten requirements, and the evidence each check records - [Try an assistant for any website | AI Assistant](https://busymate.ai/try.md): Shareable standalone assistant preview for any public website - [Security and protocols | AI Assistant](https://busymate.ai/security.md): How data is kept separate, how sign-in is checked, how changes are confirmed - [Who runs on AI Assistant](https://busymate.ai/customers.md): Businesses running on it today, with addresses you can open - [Pricing | AI Assistant](https://busymate.ai/pricing.md): Platform pricing per workspace; the Shopify app plans - [Contact | AI Assistant](https://busymate.ai/contact.md): Talk to the team - [Services — support, sales, help in your app, everyday tasks | AI Assistant](https://busymate.ai/solutions.md): Customer support, sales and onboarding, help inside your app, everyday tasks, what customers keep asking, agencies - [Documentation | AI Assistant](https://busymate.ai/docs.md): One AI assistant you brand as your own, for your own customers, connected to your own systems. - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md): Web embed, iOS, Android, desktop, sign-in contract, MCP client OAuth - [Changelog | AI Assistant](https://busymate.ai/changelog.md): What shipped, release by release - [Articles | AI Assistant](https://busymate.ai/articles.md): Researched reads on AI assistants, agents and your website - [Privacy policy | AI Assistant](https://busymate.ai/privacy.md): The {product} privacy policy. - [Terms of service | AI Assistant](https://busymate.ai/terms.md): The {product} terms of service. - [Data processing addendum | AI Assistant](https://busymate.ai/legal/dpa.md): The AI Assistant data processing addendum. - [App Store | AI Assistant](https://busymate.ai/store.md): Apps built for your mate - [Artifacts | AI Assistant](https://busymate.ai/artifact.md): Public pages made by businesses' assistants - [Free tools: check your website for AI assistants | AI Assistant](https://busymate.ai/tools.md): Free checker tools for any website owner — llms.txt, WebMCP readiness, MCP server - [Integrations: every place your mate can answer | AI Assistant](https://busymate.ai/integrations.md): Every channel and connection the assistant answers on, grouped by category — what is ready today and what is on the way ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "How the platform works | AI Assistant" description: "How AI Assistant works: one assistant that takes your brand, your content, your systems and your rules — from setup to human handoff. Change settings, not code." last_updated: "2026-09-15T02:15:46+03:00" --- # How the platform works | AI Assistant Source: https://busymate.ai/platform Last modified: 2026-09-15T02:15:46+03:00 How AI Assistant works: one assistant that takes your brand, your content, your systems and your rules — from setup to human handoff. Change settings, not code. ## On this page's section - [White-label AI assistant for agencies and SaaS | AI Assistant](https://busymate.ai/platform/white-label.md): An assistant under your own name, on your own domain - [Download AI Assistant Console | Desktop app](https://busymate.ai/desktop.md): Download the Console desktop app (macOS, Windows, Linux) — notifications, badge, deep links; machine manifest at /api/desktop/releases - [Playground: every way your page and the assistant talk | AI Assistant](https://busymate.ai/playground.md): Playground — the live widget plus one instrument per page↔assistant interaction (open/preset, ask, events, page tools, MCP, identity, prompts, channels) with the exact code; markdown twin carries every snippet ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "White-label AI assistant for agencies and SaaS | AI Assistant" description: "Launch an AI assistant under your own name and web address. Your brand, actions in your own systems, 14 languages and human handoff — included, not an add-on." last_updated: "2026-09-15T11:05:27+03:00" --- # White-label AI assistant for agencies and SaaS | AI Assistant Source: https://busymate.ai/platform/white-label Last modified: 2026-09-15T11:05:27+03:00 Launch an AI assistant under your own name and web address. Your brand, actions in your own systems, 14 languages and human handoff — included, not an add-on. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "WebMCP: make your website something an assistant can use | AI Assistant" description: "Your website tells assistants what it can do — book, order, check a status, answer. What changes for your customers, what AI Assistant does on a WebMCP site, and how to enable it in an afternoon." last_updated: "2026-09-16T15:05:41+03:00" --- # WebMCP: make your website something an assistant can use | AI Assistant Source: https://busymate.ai/webmcp Last modified: 2026-09-16T15:05:41+03:00 Your website tells assistants what it can do — book, order, check a status, answer. What changes for your customers, what AI Assistant does on a WebMCP site, and how to enable it in an afternoon. ## On this page's section - [Adopt WebMCP: a quick how-to and a copy-paste prompt for any assistant | AI Assistant](https://busymate.ai/webmcp/adopt.md): How to adopt WebMCP: four steps and a copy-paste prompt for any assistant - [WebMCP tool inspector: see what an assistant can do on any website | AI Assistant](https://busymate.ai/webmcp/inspect.md): WebMCP tool inspector — the tools a given website publishes, labelled by where each answer came from ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Playground: every way your page and the assistant talk | AI Assistant" description: "The real AI Assistant widget docked on the page and an instrument for every interaction — open and preset it, send prompts from the page, listen to its events, register page tools, call MCP tools, recognise visitors — with the exact code for each." last_updated: "2026-09-17T20:29:25+03:00" --- # Playground: every way your page and the assistant talk | AI Assistant Source: https://busymate.ai/playground Last modified: 2026-09-17T20:29:25+03:00 The real AI Assistant widget docked on the page and an instrument for every interaction — open and preset it, send prompts from the page, listen to its events, register page tools, call MCP tools, recognise visitors — with the exact code for each. The real assistant is docked on this page. Pick an instrument, press its controls, and watch the panel react — then copy the exact code that did it. No account, nothing to install. Reference: https://busymate.ai/docs/guides/widget-page-api ## 1. Open & preset Show, hide and flip the panel; pin its colour scheme and language before the visitor sees it. One tag mounts it; four calls drive it — no iframe of your own to size, no state of your own to keep. ### index.html ```html ``` ### panel.js ```javascript // The loader installs window.BusymateAI. Every call is safe before the frame // has loaded — commands queue and deliver on load. BusymateAI.open(); BusymateAI.close(); BusymateAI.toggle(); BusymateAI.isOpen(); // → true | false ``` ### preset.js ```javascript // Preset the panel from the page: colour scheme + language. // Neither is persisted by the frame — your page owns them while it embeds it. BusymateAI.setTheme("dark"); // "light" | "dark" | "system" BusymateAI.setLocale("de"); // any BCP 47 tag the platform serves BusymateAI.setLocale(null); // unpin — the frame follows the visitor again BusymateAI.open(); ``` Docs: https://busymate.ai/docs/guides/widget-page-api#open-and-preset ## 2. Page → chat Send a prompt from anywhere on the page — a button, a card, a form — or just fill the composer and let the visitor press send. The message takes the same path a typed one does, so nothing is faked and every guard still applies. ### ask.js ```javascript // Open the panel and send a prompt — the same append path a typed message takes. BusymateAI.ask("What can you do on this page?"); ``` ### prefill.js ```javascript // Fill the composer only; the visitor reads, edits and presses send. BusymateAI.ask("Book a table for two on Friday at 19:00", { submit: false }); ``` ### chips.html ```html ``` Docs: https://busymate.ai/docs/guides/widget-page-api#page-to-chat ## 3. Chat → page The panel talks back: it tells the page when a session is live, when the visitor closed it, and when they clicked a link that belongs to your site. A same-site link navigates your page in place — same tab, conversation intact — so the visitor never loses the thread. ### events.js ```javascript // The frame posts busymate.ai.v1.* messages to your page. The loader already // acts on every one of them; your page only listens to OBSERVE. window.addEventListener("message", (event) => { if (event.origin !== "https://busymate.ai") return; const { type, ...data } = event.data ?? {}; if (typeof type !== "string" || !type.startsWith("busymate.ai.v1.")) return; console.log(type, data); // busymate.ai.v1.ready { visitorKind, displayClaims } a session is live // busymate.ai.v1.close — ✕ pressed inside the frame // busymate.ai.v1.navigate { href } a same-origin link was clicked // busymate.ai.v1.open_url { url } any other link (new tab) // busymate.ai.v1.resize_to { w, h } resize_end resize_by { dw, dh } }); ``` ### navigate.js ```javascript // A same-origin link in the chat navigates YOUR page in place (same tab). // SPA routers already listening for popstate resync on their own; this // dedicated event needs no router at all. window.addEventListener("busymate:hostnavigate", (event) => { const { href } = event.detail; myRouter.push(new URL(href).pathname); }); ``` ### open-state.js ```javascript // The panel's open state lives on the launcher's DOM — observe it directly. const layer = document.querySelector("[data-support-chat]"); new MutationObserver(() => { const open = layer.hasAttribute("data-open"); document.body.classList.toggle("assistant-open", open); }).observe(layer, { attributes: true, attributeFilter: ["data-open"] }); ``` Docs: https://busymate.ai/docs/guides/widget-page-api#chat-to-page ## 4. Page tools Declare what this page can do and your mate can do it — through WebMCP where the browser has it, through its own bridge everywhere else. A tool that changes something asks the visitor first, inside the chat, before it runs. ### page-tools.js ```javascript // Declare what THIS page can do. One call, both transports: the browser's // own WebMCP where it exists, the assistant's bridge everywhere else. BusymateAI.registerPageTools([ { name: "set_page_theme", description: "Switch this page between light and dark.", inputSchema: { type: "object", properties: { theme: { type: "string", enum: ["light", "dark"], description: "The scheme to apply" } }, required: ["theme"], additionalProperties: false, }, annotations: { readOnlyHint: false, consequentialHint: true }, execute: async ({ theme }) => { // Flip through your OWN theme mechanism (whatever sets color-scheme / // your CSS variables) so every other themed control on the page agrees // with what this tool just did — never write the DOM attribute alone. const applied = theme === "light" || theme === "dark"; if (applied) myApplyTheme(theme); // Return the RESULTING state, not just "ok": a caller with no applied // flag to check against will report success it never confirmed. return { ok: applied, applied, theme }; }, }, { name: "get_cart", description: "Read what is in the visitor's cart right now.", inputSchema: { type: "object", properties: {}, additionalProperties: false }, annotations: { readOnlyHint: true }, execute: async () => ({ items: cart.items, total: cart.total }), }, ]); ``` ### standard-surface.js ```javascript // The same tools are on the STANDARD surface — any agent, not only ours. const tools = await document.modelContext.getTools(); tools.map((t) => t.name); // → ["set_page_theme", "get_cart", …] ``` Docs: https://busymate.ai/docs/guides/page-tools ## 5. MCP Behind the chat sits a Model Context Protocol server: the tools your mate can call and any other agent can discover, before any sign-in. Connect your own server in the Console and the same conversation reaches your orders, bookings and tickets. ### tools-list.js ```javascript // What the assistant on this page can call: the workspace's MCP server, // discoverable before any sign-in (JSON-RPC over HTTP). const res = await fetch("https://busymate.ai/mcp", { method: "POST", headers: { "content-type": "application/json", accept: "application/json" }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/list" }), }); const { result } = await res.json(); result.tools.map((t) => t.name); ``` ### ask-for-a-tool.js ```javascript // From the page, a prompt that makes the assistant call one of those tools. BusymateAI.ask("Is the platform up right now? Check the status."); ``` Docs: https://busymate.ai/docs/guides/connect-mcp-server ## 6. Identity A visitor signed in to your product is recognised in the chat automatically; one who is not can sign in without leaving it. Recognised visitors unlock the tools that touch their own data — orders, bookings, invoices — with nothing secret ever crossing the page. ### identity.js ```javascript // Auto-connect: when the visitor is signed in to YOUR product, the chat // knows who they are. Your backend mints a short-lived, one-time proof. // Add getIdentity ONTO the object — never assign a fresh one to // window.BusymateAI: the loader installs every call on THAT object, so // replacing it takes open(), ask() and refreshIdentity() with it. window.BusymateAI = window.BusymateAI || {}; window.BusymateAI.getIdentity = async () => { const r = await fetch("/api/assistant-identity", { method: "POST", credentials: "include" }); return r.status === 401 ? null : r.json(); // { token, nonce } or anonymous }; // Declaring it after the tag already loaded? Hand it over instead: BusymateAI.configure({ getIdentity: window.BusymateAI.getIdentity }); // After YOUR login / logout / account switch: BusymateAI.refreshIdentity(); ``` ### late-identity.js ```javascript // Auth that hydrates AFTER the chat launched anonymously — hand it over late. BusymateAI.identify({ token, nonce }); // remounts as an identified launch ``` ### ready.js ```javascript // The frame tells the page which kind of visitor the session is for. window.addEventListener("message", (event) => { if (event.origin !== "https://busymate.ai" || event.data?.type !== "busymate.ai.v1.ready") return; console.log(event.data.visitorKind, event.data.displayClaims); // "anonymous" | "identified", { name?, … } }); ``` Docs: https://busymate.ai/docs/guides/identified-visitors ## 7. Prompts A handful of prompts that show the range — grounded answers, a tool call, a hand-off, a page it makes for you. Press one; it runs. Each one is a single call from the page, so the same button works on any site that carries the tag. ### prompt.js ```javascript // Every example prompt on this page is one call — the same call your // own "try it" buttons make. BusymateAI.ask("Compare the plans and recommend one for a two-person shop."); ``` Docs: https://busymate.ai/docs/guides/widget-page-api#page-to-chat ## 8. Channels The same assistant answers on your website, in your apps, and on the messaging channels your customers already use. One workspace, one knowledge base, one hand-off inbox — every channel below is a live demo you can open now. ### full-page.js ```javascript // The same assistant as a full page. For an ANONYMOUS visitor that is a // plain link — the workspace address is public. window.open("https://your-workspace-slug.busymate.ai/", "_blank", "noopener,noreferrer"); // To carry an IDENTIFIED visitor across (a different top-level site cannot // read this page's storage), ask the loader to mint the hand-off. Both calls // REJECT unless the getIdentity provider above is configured. const url = await BusymateAI.hostedUrl("https://your-workspace-slug.busymate.ai/"); BusymateAI.openHosted("https://your-workspace-slug.busymate.ai/"); // new tab, same visitor ``` Docs: https://busymate.ai/integrations ## 9. Your site Paste one tag before and everything on this page works on yours. Start from a scan of your own site to see what your mate would already know — no account needed for the preview. ### index.html ```html ``` Docs: https://busymate.ai/docs/getting-started --- --- title: "Pricing | AI Assistant" description: "Platform pricing per workspace, based on what you use — your brand and domain included. AI Assistant for Shopify: Free, Starter, Growth and Scale plans." last_updated: "2026-09-17T04:23:44+03:00" --- # Pricing | AI Assistant Source: https://busymate.ai/pricing Last modified: 2026-09-17T04:23:44+03:00 Platform pricing per workspace, based on what you use — your brand and domain included. AI Assistant for Shopify: Free, Starter, Growth and Scale plans. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) --- --- title: "Services — support, sales, help in your app, everyday tasks | AI Assistant" description: "Every job, one assistant: customer support with hand-off, sales and onboarding, help inside your app, everyday tasks through your systems, customer insight and white-label for agencies — with voice, a team Inbox, integrations and site knowledge built in." last_updated: "2026-09-17T06:02:01+03:00" --- # Services — support, sales, help in your app, everyday tasks | AI Assistant Source: https://busymate.ai/solutions Last modified: 2026-09-17T06:02:01+03:00 Every job, one assistant: customer support with hand-off, sales and onboarding, help inside your app, everyday tasks through your systems, customer insight and white-label for agencies — with voice, a team Inbox, integrations and site knowledge built in. ## On this page's section - [AI customer support with human handoff | AI Assistant](https://busymate.ai/solutions/customer-support.md): Customer support that answers from your content and hands off to a person - [AI sales and onboarding assistant | AI Assistant](https://busymate.ai/solutions/sales-onboarding.md): Sales and onboarding answers from your own product - [Embed an AI assistant in your app | AI Assistant](https://busymate.ai/solutions/in-product-copilot.md): An assistant inside your app that acts for the signed-in user - [Everyday tasks through your systems, confirmed first | AI Assistant](https://busymate.ai/solutions/operations-automation.md): Everyday tasks through your systems, confirmed first - [Learn what customers keep asking | AI Assistant](https://busymate.ai/solutions/product-intelligence.md): Learn what customers keep asking, with the conversations as evidence - [White-label AI for agencies and resellers | AI Assistant](https://busymate.ai/solutions/agencies-white-label.md): White-label AI for agencies and resellers - [Voice support: customers talk to your assistant | AI Assistant](https://busymate.ai/solutions/voice-support.md): Voice support — customers speak to the assistant, same answers and rules as typing - [Human hand-off and a team Inbox | AI Assistant](https://busymate.ai/solutions/handoff-inbox.md): Human hand-off and the team Inbox — a person joins the same conversation - [An assistant that knows your website | AI Assistant](https://busymate.ai/solutions/site-knowledge.md): Site knowledge — answers from your own website and text, with sources ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "AI customer support with human handoff | AI Assistant" description: "Answers from your own content, real help with orders and accounts for signed-in customers, and a person who joins the same conversation — if you turn it on — in 14 languages." last_updated: "2026-09-17T06:02:01+03:00" --- # AI customer support with human handoff | AI Assistant Source: https://busymate.ai/solutions/customer-support Last modified: 2026-09-17T06:02:01+03:00 Answers from your own content, real help with orders and accounts for signed-in customers, and a person who joins the same conversation — if you turn it on — in 14 languages. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "AI sales and onboarding assistant | AI Assistant" description: "Answers for prospects and new customers from your own docs, suggested first questions taken from your content, and a handoff to your sales team when a person should step in." last_updated: "2026-09-17T06:02:01+03:00" --- # AI sales and onboarding assistant | AI Assistant Source: https://busymate.ai/solutions/sales-onboarding Last modified: 2026-09-17T06:02:01+03:00 Answers for prospects and new customers from your own docs, suggested first questions taken from your content, and a handoff to your sales team when a person should step in. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Embed an AI assistant in your app | AI Assistant" description: "An assistant inside your web, iOS, Android or desktop app that knows your docs, the user's own data and what they are allowed to do — and asks before it changes anything." last_updated: "2026-09-17T06:02:01+03:00" --- # Embed an AI assistant in your app | AI Assistant Source: https://busymate.ai/solutions/in-product-copilot Last modified: 2026-09-17T06:02:01+03:00 An assistant inside your web, iOS, Android or desktop app that knows your docs, the user's own data and what they are allowed to do — and asks before it changes anything. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "White-label AI for agencies and resellers | AI Assistant" description: "One Console, many clients. Each client gets its own workspace with its own brand, domain, systems, allowed models, limits and usage. Let an AI agent set up each client. Talk to us." last_updated: "2026-09-17T06:02:01+03:00" --- # White-label AI for agencies and resellers | AI Assistant Source: https://busymate.ai/solutions/agencies-white-label Last modified: 2026-09-17T06:02:01+03:00 One Console, many clients. Each client gets its own workspace with its own brand, domain, systems, allowed models, limits and usage. Let an AI agent set up each client. Talk to us. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Adopt WebMCP: a quick how-to and a copy-paste prompt for any assistant | AI Assistant" description: "Five reasons, four steps and one prompt: paste it into the assistant you already use and it audits your site, proposes the tools and writes the code — for Shopify, WordPress, Webflow and plain HTML." last_updated: "2026-09-15T11:29:56+03:00" --- # Adopt WebMCP: a quick how-to and a copy-paste prompt for any assistant | AI Assistant Source: https://busymate.ai/webmcp/adopt Last modified: 2026-09-15T11:29:56+03:00 Five reasons, four steps and one prompt: paste it into the assistant you already use and it audits your site, proposes the tools and writes the code — for Shopify, WordPress, Webflow and plain HTML. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Agent Ready v1: the web standard an AI agent reads | AI Assistant" description: "Can an AI find you, understand you, trust you and do useful work with you? The six sections, the ten requirements, the one-URL Markdown contract and the evidence behind every verdict." last_updated: "2026-09-17T13:17:31+03:00" --- # Agent Ready v1: the web standard an AI agent reads | AI Assistant Source: https://busymate.ai/agent-ready Last modified: 2026-09-17T13:17:31+03:00 Can an AI find you, understand you, trust you and do useful work with you? The six sections, the ten requirements, the one-URL Markdown contract and the evidence behind every verdict. Version 1.2. Published by AI Assistant as `AI Assistant Agent Ready v1`. ## Sections and weights The six sections share 100 points. Each one grades one layer of what an agent meets on a website. | Section | Layer | Points | What it asks | | --- | --- | --: | --- | | Discover | discovery | 15 | Can an AI agent find your content? | | Understand | semantics | 15 | Does an agent understand your business correctly? | | Read | content | 20 | Can an agent consume your content efficiently? | | Act | actions | 20 | Can an agent take actions on your website? | | Connect | connectivity | 20 | Can external agents call your systems? | | Trust | safety | 10 | Can an agent authenticate, confirm actions, and reach a human? | ## Requirements Ten clauses decide readiness. Everything else the catalogue carries is a diagnostic. - **R1** (content) — Important content is present in the initial HTML. Proven by: initial_html_content. - **R2** (content) — Pages can expose a Markdown representation of themselves. Proven by: markdown_representation. - **R3** (discovery) — The site publishes a sitemap. Proven by: sitemap. - **R4** (discovery) — The site publishes an llms.txt. Proven by: llms_txt. - **R5** (discovery) — The site publishes a machine-readable capability manifest. Proven by: capability_manifest. - **R6** (semantics) — Pages declare their language and their canonical URL. Proven by: language_canonical. - **R7** (semantics) — The site publishes structured business or product metadata. Proven by: business_metadata. - **R8** (actions) — Web actions are declared when the page offers any. Proven by: page_tools. - **R9** (actions) — Backend agent tools or an API are declared when the service offers any. Proven by: programmatic_api. - **R10** (safety) — Authentication, authorization and human hand-off are explicit. Proven by: human_handoff, auth_explicit. ## Checks 35 checks make up the catalogue; 8 of them carry no weight — an unsettled convention is reported when found and never deducted when absent. A check whose `appliesWhen` is false leaves the denominator instead of counting against the site. - `sitemap` (discover, R3, 3 pts) — A sitemap lists the pages an agent should read. Expects: An XML sitemap (or a sitemap index) with at least one . - `llms_txt` (discover, R4, 4 pts) — llms.txt points an agent at the content that matters. Expects: GET /llms.txt returns text with at least one link. - `capability_manifest` (discover, R5, 3 pts) — agents.json joins content, interfaces, authentication and contact in one card. Expects: A JSON manifest at /.well-known/agents.json or /agents.json. - `manifest_twin_parity` (discover, diagnostic, 1 pts) — When agents.json is published at both paths, the two copies agree. Expects: /.well-known/agents.json and /agents.json answer with byte-identical bodies when both exist. - `sitemap_xml_valid` (discover, diagnostic, 1 pts) — The sitemap is a real urlset or sitemapindex document whose loc entries point at the site's own origin. Expects: 200, a or root element, and at least one same-origin . A redirect to another path is reported with the target. - `robots_ai_crawlers` (discover, diagnostic, 2 pts) — robots.txt lets AI search and user-requested retrieval reach your pages. Expects: robots.txt does not block search/citation or user-requested AI agents from /. - `discovery_link_headers` (discover, diagnostic, 1 pts) — HTTP Link headers tell an agent the site MEANT to expose these documents. Expects: Link: ; rel="describedby" and ; rel="alternate". - `robots_training_policy` (discover, diagnostic, optional) — The site states, either way, whether its pages may be used for model training. Expects: Optional: robots.txt names model-training crawler tokens. Opting out is a valid answer and costs nothing. - `llms_full_txt` (discover, diagnostic, optional) — llms-full.txt carries the whole corpus in one file. Expects: Optional: GET /llms-full.txt returns text. - `sitemap_md` (discover, diagnostic, optional) — sitemap.md is a human- and agent-readable index. Expects: Optional: GET /sitemap.md returns markdown. - `agents_md` (discover, diagnostic, optional) — AGENTS.md is a prose companion to the manifest. Expects: Optional: GET /AGENTS.md returns markdown. - `language_canonical` (understand, R6, 5 pts) — The page states what language it is in and which URL is canonical. Expects: and (or a canonical Link header). - `business_metadata` (understand, R7, 6 pts) — JSON-LD says who you are and what you sell, in a vocabulary every agent already parses. Expects: JSON-LD with an identity type (Organization, LocalBusiness, WebSite, Store) or a Product/Offer. - `structured_data_fields` (understand, diagnostic, 3 pts) — The identity node carries real fields, not just a bare @type. Expects: An identity node (Organization, Product, …) with a name, a description and a url. - `open_graph` (understand, diagnostic, 1 pts) — Open Graph gives a title, a description and an image to anything that previews a link. Expects: og:title, og:description and og:image. - `content_freshness` (understand, diagnostic, optional) — Content nodes say when they last changed, so an agent can tell fresh from stale. Expects: Optional: CreativeWork / DataFeedItem nodes carry dateModified (or datePublished). - `initial_html_content` (read, R1, 14 pts) — The content is in the served HTML, not assembled later by a script. Expects: One

, a
landmark and real prose in the first response. - `markdown_representation` (read, R2, 4 pts) — The SAME URL serves Markdown to a client that asks for it. Expects: GET the page with Accept: text/markdown → text/markdown and Vary: Accept. - `markdown_frontmatter` (read, diagnostic, 1 pts) — The Markdown carries its own canonical URL, language and last-updated date. Expects: YAML frontmatter with canonical, language and updated (or title/description/last_updated). - `markdown_alternate_link` (read, diagnostic, 1 pts) — The page advertises its Markdown alternate so an agent does not have to guess. Expects: or the same as a Link header. - `page_tools` (act, R8, 13 pts) — The page registers its own actions as tools an agent can call in the browser. Expects: WebMCP tools on document.modelContext / navigator.modelContext, on the pages scanned. - `page_tool_catalog` (act, diagnostic, 4 pts) — A static catalogue lets an agent read the page's tools without executing it. Expects: A WebMCP catalog document linked from the page or at a well-known path. - `page_tools_policy` (act, diagnostic, 3 pts) — Permissions-Policy leaves the page's tools governed — by the default allowlist or by an explicit one. Expects: No tools= directive (the draft default is self), or an explicit tools= allowlist. A wildcard or a denial is the finding. - `programmatic_api` (connect, R9, 8 pts) — At least one programmatic description of the service exists — MCP, OpenAPI, GraphQL or another declared API. Expects: One of: a live MCP endpoint, an OpenAPI document, a GraphQL schema, or an API declared in the manifest. - `mcp_transport` (connect, diagnostic, 4 pts) — The MCP endpoint answers, negotiates a protocol revision and LISTS its tools. Expects: initialize and tools/list succeed over the transport the handshake actually ran on. Listing is not authorization to call. - `access_requirements` (connect, diagnostic, 3 pts) — The service documents which capabilities need a token and which do not. Expects: A manifest, a WWW-Authenticate challenge or protected-resource metadata that states the access requirements. - `oauth_metadata` (connect, diagnostic, 3 pts) — OAuth metadata discovery resolves, and advertises PKCE where a client must verify it. Expects: RFC 8414 / RFC 9728 metadata that resolves, with code_challenge_methods_supported. Dynamic client registration is optional. - `authenticated_execution` (connect, diagnostic, 2 pts) — An authenticated call actually succeeds — proof that a listed tool is a usable tool. Expects: An authenticated tools/call that returns a result. This scanner holds no token for your server and never calls a stranger's tool, so this stays UNVERIFIED — reported, never counted as a pass or as your failure. - `tool_annotation_coverage` (connect, diagnostic, optional) — Listed tools declare readOnlyHint, so a client can tell a read from a write before it calls. Expects: Optional: annotations on the listed tool definitions. Only meaningful from protocol revision 2025-03-26, which introduced them. - `openapi_spec` (connect, diagnostic, optional) — An OpenAPI document describes the HTTP API. Expects: Optional when MCP or another API already describes the interface. - `protocol_discovery_aliases` (connect, diagnostic, optional) — Optional well-known aliases (mcp.json, agent-card.json, api-catalog, …) are served cleanly or not at all. Expects: Optional: each alias is valid JSON or a clean non-200 — never the site's own HTML shell. - `human_handoff` (trust, R10, 4 pts) — An agent can hand a person off to a person. Expects: A contact email, phone or contact page an agent can quote. - `contact_signal_sources` (trust, diagnostic, 1 pts) — A machine-readable contact signal exists independent of any stored crawl. Expects: A mailto: link, a /contact link, a JSON-LD contactPoint, or a Contact: line in llms.txt — any one is enough. - `auth_explicit` (trust, R10, 3 pts) — The site states how an agent authenticates — or states that nothing needs authenticating. Expects: Authentication declared in the manifest, or OAuth metadata, or an explicit public posture. - `action_confirmation` (trust, diagnostic, 2 pts) — A consequential action is actually confirmed with the person before it runs. Expects: A client/workflow test that drives a write action and observes the confirmation. This scanner does not run one against a stranger's service, so it stays UNVERIFIED — never a pass, and never a deduction blamed on you. ## Verdicts - `pass` — what the clause expects came back. - `partial` — some of it is in place; the evidence names the half that is not. - `optional-found` / `optional-missing` — an unsettled convention, worth no points either way. - `fail` — asked for, and nothing was there. - `unverified` — the probe could not run. It keeps its weight and is listed apart; a refusal, a timeout or a redirect that never lands is never rounded up to a pass. ## Evidence Every check records the call it made, the answer this document expects and the answer it actually got. Only headers that change the answer are kept, and credentials never are. A count of tools behind sign-in reads as unknown rather than zero when nobody signed in to count it. ## Related - Grade a web address against this document: https://busymate.ai/try.md - What a site publishes for assistants to act on: https://busymate.ai/webmcp.md - The developer guide: https://busymate.ai/developers.md --- --- title: "Who runs on AI Assistant" description: "Businesses running a live assistant under their own brand, at their own web address, with their own systems. Open one and talk to it. No logo wall, no numbers we did not measure." last_updated: "2026-09-09T13:14:21+03:00" --- # Who runs on AI Assistant Source: https://busymate.ai/customers Last modified: 2026-09-09T13:14:21+03:00 Businesses running a live assistant under their own brand, at their own web address, with their own systems. Open one and talk to it. No logo wall, no numbers we did not measure. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Everyday tasks through your systems, confirmed first | AI Assistant" description: "Routine requests, scheduled checks and multi-step tasks through your own systems. Every change is confirmed first, every run leaves a record, and silence never counts as success." last_updated: "2026-09-17T06:02:01+03:00" --- # Everyday tasks through your systems, confirmed first | AI Assistant Source: https://busymate.ai/solutions/operations-automation Last modified: 2026-09-17T06:02:01+03:00 Routine requests, scheduled checks and multi-step tasks through your own systems. Every change is confirmed first, every run leaves a record, and silence never counts as success. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Learn what customers keep asking | AI Assistant" description: "See what customers ask again and again, where the assistant gets stuck and what your docs are missing — grouped by topic, with the conversations as evidence, and a suggested fix." last_updated: "2026-09-17T06:02:01+03:00" --- # Learn what customers keep asking | AI Assistant Source: https://busymate.ai/solutions/product-intelligence Last modified: 2026-09-17T06:02:01+03:00 See what customers ask again and again, where the assistant gets stuck and what your docs are missing — grouped by topic, with the conversations as evidence, and a suggested fix. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Voice support: customers talk to your assistant | AI Assistant" description: "Let customers speak to your assistant instead of typing — on your website or inside your app, in their own language — with the same answers, the same rules and the same way to reach a person." last_updated: "2026-09-17T06:02:01+03:00" --- # Voice support: customers talk to your assistant | AI Assistant Source: https://busymate.ai/solutions/voice-support Last modified: 2026-09-17T06:02:01+03:00 Let customers speak to your assistant instead of typing — on your website or inside your app, in their own language — with the same answers, the same rules and the same way to reach a person. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Human hand-off and a team Inbox | AI Assistant" description: "When a customer asks for a person, or one of your rules decides, a teammate picks the conversation up in the Inbox, replies in the same thread and hands it back — with alerts, assignment rules and ratings." last_updated: "2026-09-17T06:02:01+03:00" --- # Human hand-off and a team Inbox | AI Assistant Source: https://busymate.ai/solutions/handoff-inbox Last modified: 2026-09-17T06:02:01+03:00 When a customer asks for a person, or one of your rules decides, a teammate picks the conversation up in the Inbox, replies in the same thread and hands it back — with alerts, assignment rules and ratings. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "An assistant that knows your website | AI Assistant" description: "Point it at your website or paste in your own text. It answers only from that, shows its sources and says when it is not sure — try it on your own site before you sign up." last_updated: "2026-09-17T06:02:01+03:00" --- # An assistant that knows your website | AI Assistant Source: https://busymate.ai/solutions/site-knowledge Last modified: 2026-09-17T06:02:01+03:00 Point it at your website or paste in your own text. It answers only from that, shows its sources and says when it is not sure — try it on your own site before you sign up. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Integrations: every place your mate can answer | AI Assistant" description: "One assistant across the channels your customers use, the apps you ship, your store, your CRM, your knowledge and your own tools — grouped by category, with what is ready today and what is on the way honestly marked." last_updated: "2026-09-17T22:17:18+03:00" --- # Integrations: every place your mate can answer | AI Assistant Source: https://busymate.ai/integrations Last modified: 2026-09-17T22:17:18+03:00 One assistant across the channels your customers use, the apps you ship, your store, your CRM, your knowledge and your own tools — grouped by category, with what is ready today and what is on the way honestly marked. ## See it in place 13 live demos — each a connection from this catalog running on a real invented brand; open the site, then take the guide and the code home. - [Web chat widget](https://busymate.ai/demo/web.md): Northwind Coffee — the full-feature reference: grounded chat, page actions over WebMCP, an MCP server, a demo customer to sign in as, and hand-off to a person. — live at https://web.demo.busymate.ai — demonstrates Web chat - [Shopify store](https://busymate.ai/demo/shopify.md): Northline Outdoor — a full-feature Shopify reference: grounded chat, WebMCP store actions, an MCP server, and identified sign-in. — live at https://shopify.demo.busymate.ai — demonstrates Shopify - [Site-scan quick start](https://busymate.ai/demo/scan.md): Paste any address and meet the assistant it becomes — grounded chat, a live AI-readiness scorecard, no sign-up. — live at https://scan.demo.busymate.ai — demonstrates Website crawl + Web chat - [WhatsApp channel](https://busymate.ai/demo/whatsapp.md): Marlow's Kitchen — a faithful WhatsApp-style preview of your mate, grounded chat, an MCP server over the menu and floor plan, WebMCP booking actions, and identified-guest reservations. — live at https://whatsapp.demo.busymate.ai — demonstrates WhatsApp - [Telegram channel](https://busymate.ai/demo/telegram.md): Nomad Circuits — a faithful Telegram-style preview of your mate, grounded chat, an MCP server over the catalogue and repair bench, WebMCP shop actions, and identified-customer order/repair lookup. — live at https://telegram.demo.busymate.ai — demonstrates Telegram - [Slack channel](https://busymate.ai/demo/slack.md): Patchwell — an IT helpdesk for small teams, answered inside Slack: a live Slack-style view of your mate, grounded chat, an MCP server over the service catalogue and tickets, WebMCP helpdesk actions, and identified-customer ticket lookup. — live at https://slack.demo.busymate.ai — demonstrates Slack - [WooCommerce store](https://busymate.ai/demo/woo.md): Fernweh Supply Co. — a real WooCommerce shop with a live catalogue, a signed-in customer, real orders and an open REST API to drive it all. — live at https://woo.demo.busymate.ai — demonstrates WooCommerce - [Discord channel](https://busymate.ai/demo/discord.md): Pixelforge Games — an indie studio's player desk shown the way it reads in a Discord #support channel: grounded chat, an MCP server over the games and patch notes, WebMCP page actions, a bug-report card and identified-player library and re… — live at https://discord.demo.busymate.ai — demonstrates Discord - [Microsoft Teams channel](https://busymate.ai/demo/teams.md): Bramble & Co. — an HR and benefits desk answered in a Teams-style chat pane: grounded handbook answers, an MCP server over benefits and payroll, WebMCP page actions, and identified leave balances. — live at https://teams.demo.busymate.ai — demonstrates Microsoft Teams - [Messenger & Instagram channels](https://busymate.ai/demo/meta.md): Sol & Salt Swimwear — one assistant answering Messenger and Instagram DMs: faithful previews of both threads, a grounded collection and size guide, an MCP server over orders and returns, WebMCP page actions, and identified-customer order l… — live at https://meta.demo.busymate.ai — demonstrates Facebook Messenger + Instagram - [WordPress site](https://busymate.ai/demo/wordpress.md): Larkspur Studio — a branded WordPress business site running the real Busymate AI plugin: grounded chat, WebMCP page actions, an MCP server and an inline assistant block, not just a script tag. — live at https://wordpress.demo.busymate.ai — demonstrates WordPress - [Ghost site](https://busymate.ai/demo/ghost.md): The Meridian Line — a branded Ghost publication with a native Members sign-in and a genuinely live assistant: grounded chat, WebMCP page actions, its own MCP server. — live at https://ghost.demo.busymate.ai — demonstrates Ghost - [Squarespace site](https://busymate.ai/demo/squarespace.md): Quiet Pines Yoga — a real Squarespace trial site with a live grounded assistant, proven answering real class prices. — live at https://squarespace.demo.busymate.ai — demonstrates Squarespace ## Messaging channels Where a customer writes to you — your site, the messaging apps, mail and the phone. - [Web chat](https://busymate.ai/integrations/web.md) — ready today: Web chat — the embed launcher and full-page chat on your own website, ready today · live demo: https://busymate.ai/demo/web.md, https://busymate.ai/demo/scan.md - [Telegram](https://busymate.ai/integrations/telegram.md) — in beta: Telegram — your own bot answers customers in a direct message or a group, hand-off alerts to a linked account · live demo: https://busymate.ai/demo/telegram.md - [Slack](https://busymate.ai/integrations/slack.md) — in beta: Slack — answer your team and community in a workspace channel · live demo: https://busymate.ai/demo/slack.md - [Email](https://busymate.ai/integrations/email.md) — in beta: Email — a support inbox your mate reads and answers in-thread, with team hand-off - [Discord](https://busymate.ai/integrations/discord.md) — coming soon: Discord — answer members in a server channel or DM · live demo: https://busymate.ai/demo/discord.md - [Microsoft Teams](https://busymate.ai/integrations/teams.md) — coming soon: Microsoft Teams — answer staff and customers in the chat they use for work · live demo: https://busymate.ai/demo/teams.md - [WhatsApp](https://busymate.ai/integrations/whatsapp.md) — coming soon: WhatsApp — answer customers on your WhatsApp Business number · live demo: https://busymate.ai/demo/whatsapp.md - [Facebook Messenger](https://busymate.ai/integrations/messenger.md) — coming soon: Facebook Messenger — answer the messages your Facebook Page receives · live demo: https://busymate.ai/demo/meta.md - [Instagram](https://busymate.ai/integrations/instagram.md) — coming soon: Instagram — answer Instagram direct messages to your business account · live demo: https://busymate.ai/demo/meta.md - [SMS](https://busymate.ai/integrations/sms.md) — coming soon: SMS — answer plain text messages on a Twilio number - [Phone calls](https://busymate.ai/integrations/phone.md) — coming soon: Phone calls — a spoken conversation on your phone number, with transfer to a person - [Apple Messages for Business](https://busymate.ai/integrations/apple-messages.md) — coming soon: Apple Messages for Business — answer in the Messages app from Maps, Safari and Spotlight - [Viber](https://busymate.ai/integrations/viber.md) — coming soon: Viber — answer subscribers of your Viber bot - [LINE](https://busymate.ai/integrations/line.md) — coming soon: LINE — answer on a LINE Official Account - [WeChat](https://busymate.ai/integrations/wechat.md) — coming soon: WeChat — answer followers of a WeChat Official Account ## Apps and platforms The apps you ship and the desktop software your team works in. - [iOS app](https://busymate.ai/integrations/ios.md) — ready today: iOS app in-app support — the identity-bridged web chat inside your own iOS app, ready today - [Android app](https://busymate.ai/integrations/android.md) — ready today: Android app in-app support — the identity-bridged web chat inside your own Android app, ready today - [Desktop app](https://busymate.ai/integrations/desktop.md) — in beta: Desktop app — the Console in its own window with notifications; macOS in beta, Windows and Linux on the way ## Websites and site builders The web chat on the builder your site already runs on — one script, no plugin. - [WordPress](https://busymate.ai/integrations/wordpress.md) — ready today: WordPress — the web chat embed in your theme header, no plugin · live demo: https://busymate.ai/demo/wordpress.md - [Ghost](https://busymate.ai/integrations/ghost.md) — ready today: Ghost — the web chat embed via Code Injection, no plugin · live demo: https://busymate.ai/demo/ghost.md - [Wix](https://busymate.ai/integrations/wix.md) — in beta: Wix — the web chat embed via Custom Code - [Squarespace](https://busymate.ai/integrations/squarespace.md) — in beta: Squarespace — the web chat embed via Code Injection · live demo: https://busymate.ai/demo/squarespace.md - [Webflow](https://busymate.ai/integrations/webflow.md) — in beta: Webflow — the web chat embed via the site's custom code ## Commerce Stores and payments your mate reads from and, with a yes, acts in. - [Shopify](https://busymate.ai/integrations/shopify.md) — ready today: Shopify — the open-source storefront app: catalogue, policies, order help, hand-off · live demo: https://busymate.ai/demo/shopify.md - [WooCommerce](https://busymate.ai/integrations/woocommerce.md) — ready today: WooCommerce — catalogue answers and a signed-in customer's own order status on a WooCommerce store; returns are answered from your policy page and handed to a person · live demo: https://busymate.ai/demo/woo.md - [BigCommerce](https://busymate.ai/integrations/bigcommerce.md) — in beta: BigCommerce — catalogue answers and order help on a BigCommerce store - [Magento / Adobe Commerce](https://busymate.ai/integrations/magento.md) — coming soon: Magento — catalogue answers and order help on a Magento / Adobe Commerce store - [Stripe](https://busymate.ai/integrations/stripe.md) — coming soon: Stripe — read a customer's invoices and subscriptions; refunds go to a person ## CRM, helpdesk and sales The systems your team already keeps customers, tickets, leads and bookings in. - [HubSpot](https://busymate.ai/integrations/hubspot.md) — coming soon: HubSpot — contacts, timeline entries and tickets written from conversations - [Zendesk](https://busymate.ai/integrations/zendesk.md) — coming soon: Zendesk — hand-offs become tickets with the transcript - [Salesforce](https://busymate.ai/integrations/salesforce.md) — coming soon: Salesforce — leads and cases written from conversations - [Freshdesk](https://busymate.ai/integrations/freshdesk.md) — coming soon: Freshdesk — hand-offs become tickets with the transcript - [Intercom](https://busymate.ai/integrations/intercom.md) — coming soon: Intercom — import conversations and contacts, or hand off into Intercom - [Pipedrive](https://busymate.ai/integrations/pipedrive.md) — coming soon: Pipedrive — leads and deals written from sales conversations - [Zoho](https://busymate.ai/integrations/zoho.md) — coming soon: Zoho — contacts and leads in Zoho CRM, tickets in Zoho Desk - [Help Scout](https://busymate.ai/integrations/helpscout.md) — coming soon: Help Scout — hand-offs land in a Help Scout mailbox - [Mailchimp](https://busymate.ai/integrations/mailchimp.md) — coming soon: Mailchimp — opt-ins added to an audience with conversation tags - [Google Calendar](https://busymate.ai/integrations/google-calendar.md) — coming soon: Google Calendar — bookings written straight into a calendar - [Calendly](https://busymate.ai/integrations/calendly.md) — coming soon: Calendly — event types offered and booked in the chat ## Knowledge sources Where your mate reads your content from — every answer cites its source. - [Website crawl](https://busymate.ai/integrations/site-crawl.md) — ready today: Website crawl — a robots-aware same-origin crawl of your help site, every answer cited · live demo: https://busymate.ai/demo/scan.md - [Zendesk Help Center](https://busymate.ai/integrations/zendesk-help-center.md) — ready today: Zendesk Help Center — published Zendesk help articles as a knowledge source - [Notion](https://busymate.ai/integrations/notion.md) — coming soon: Notion — shared Notion pages as a knowledge source - [Files and PDFs](https://busymate.ai/integrations/files.md) — coming soon: Files and PDFs — PDF and document upload as a knowledge source - [Google Drive](https://busymate.ai/integrations/google-drive.md) — coming soon: Google Drive — a Drive folder of Docs, Sheets and PDFs as a knowledge source - [Confluence](https://busymate.ai/integrations/confluence.md) — coming soon: Confluence — Confluence spaces as a knowledge source - [GitHub](https://busymate.ai/integrations/github.md) — coming soon: GitHub — a repository's docs folder or README as a knowledge source ## Automation and developers Tools, workflows and the surfaces your own systems call — or are called from. - [Your tools, over MCP](https://busymate.ai/integrations/mcp.md) — ready today: Your tools over MCP — your mate calls your systems; any MCP client can reach it - [WebMCP page tools](https://busymate.ai/integrations/webmcp.md) — ready today: WebMCP page tools — a page's own actions as tools the assistant and any agentic browser can use - [Webhooks](https://busymate.ai/integrations/webhooks.md) — ready today: Webhooks — signed HTTP calls to your endpoint on chosen events - [REST API](https://busymate.ai/integrations/api.md) — ready today: REST API — a documented REST API with per-workspace keys - [Zapier](https://busymate.ai/integrations/zapier.md) — coming soon: Zapier — conversation events trigger Zaps; Zaps can message the assistant - [Make](https://busymate.ai/integrations/make.md) — coming soon: Make — conversation events start Make scenarios - [n8n](https://busymate.ai/integrations/n8n.md) — coming soon: n8n — conversation events start n8n workflows, self-hosted or cloud - [Google Sheets](https://busymate.ai/integrations/google-sheets.md) — coming soon: Google Sheets — a spreadsheet row per chosen event - [Airtable](https://busymate.ai/integrations/airtable.md) — coming soon: Airtable — a record per chosen event in an Airtable base - [Jira](https://busymate.ai/integrations/jira.md) — coming soon: Jira — hand-offs and reported bugs become Jira issues ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "WebMCP tool inspector: see what an assistant can do on any website | AI Assistant" description: "Put in a web address and see the actions a site publishes for assistants — each name, what it does, what it needs, and whether it only reads or changes something." last_updated: "2026-09-15T08:38:33+03:00" --- # WebMCP tool inspector: see what an assistant can do on any website | AI Assistant Source: https://busymate.ai/webmcp/inspect Last modified: 2026-09-15T08:38:33+03:00 Put in a web address and see the actions a site publishes for assistants — each name, what it does, what it needs, and whether it only reads or changes something. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Security and protocols | AI Assistant" description: "How AI Assistant keeps your data separate, checks who a customer is, asks before changing anything and never shows your keys again — with the exact standards named." last_updated: "2026-09-06T15:59:54+03:00" --- # Security and protocols | AI Assistant Source: https://busymate.ai/security Last modified: 2026-09-06T15:59:54+03:00 How AI Assistant keeps your data separate, checks who a customer is, asks before changing anything and never shows your keys again — with the exact standards named. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Download AI Assistant Console | Desktop app" description: "The desktop app for the people who answer: system notifications the moment a conversation needs a human, a badge for what is waiting, and links that open the exact conversation. Free, for macOS, Windows and Linux." last_updated: "2026-09-15T15:30:19+03:00" --- # Download AI Assistant Console | Desktop app Source: https://busymate.ai/desktop Last modified: 2026-09-15T15:30:19+03:00 The desktop app for the people who answer: system notifications the moment a conversation needs a human, a badge for what is waiting, and links that open the exact conversation. Free, for macOS, Windows and Linux. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Try an assistant for any website | AI Assistant" description: "Put in a web address and meet the assistant that site could have — built from its own public pages, live in seconds, on a link you can share." last_updated: "2026-09-17T13:30:01+03:00" --- # Try an assistant for any website | AI Assistant Source: https://busymate.ai/try Last modified: 2026-09-17T13:30:01+03:00 Put in a web address and meet the assistant that site could have — built from its own public pages, live in seconds, on a link you can share. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "Documentation | AI Assistant" description: "One AI assistant you brand as your own, for your own customers, connected to your own systems." last_updated: "2026-09-13T14:42:54+03:00" --- # Documentation | AI Assistant Source: https://busymate.ai/docs Last modified: 2026-09-13T14:42:54+03:00 **AI Assistant** is a white-label AI platform: you run **your mate** — an AI assistant that can use tools — as your own product, under your name, on your web address, for your customers, connected to your own systems (through MCP, an open standard). It answers everyone, acts for signed-in customers, and hands off to a person on your terms. AI Assistant brings the assistant; you bring the brand and the data. If you have customers who need help, answers, or actions taken on their behalf, AI Assistant gives you a production assistant without building one. ## What your mate is **Your mate** is the assistant. One shared assistant serves every business, but each workspace is fully separate and fully branded, so your customers only ever see *your* assistant. Your mate can: - **Answer** questions in natural language, with streaming responses and Markdown formatting. - **Act** by calling tools — your tools — to read and change your customers' data, always within permissions you control. - **Hand off** to a person when a conversation needs one. The same assistant, rendered as your brand. Nothing about your mate names our brand to your customers unless you want it to. ## What you get as a white-label Diagram: Your customers reach your branded assistant — your mate — which calls your tools and can hand off to your team - **Your own branded assistant.** A workspace with your name, logo, colors, welcome copy, and voice. See [Getting started](https://busymate.ai/docs/getting-started). - **Your customers.** Your customers reach the assistant on your web address — signed in with your own sign-in, or as visitors if you allow it. Their conversations, history, and data stay inside your workspace. - **Your tools.** Connect your own MCP server so your mate can act on your customers' data — look things up, make changes, run your workflows. See [Connecting your systems](https://busymate.ai/docs/connectors). - **Human handoff.** When the assistant reaches its limit, a teammate can step into the same conversation. See [Human handoff](https://busymate.ai/docs/human-handoff). - **Usage and analytics.** See how much your assistant is used, per AI provider and over time, against your plan's limit. See [Usage and analytics](https://busymate.ai/docs/usage). - **Governance.** Choose which features are on, whether customers pick a model or get one default, and where your limits sit. See [Governance and models](https://busymate.ai/docs/governance). ## How your customers reach it You choose the channel — often more than one: - **A hosted page** on a web address you control (for example `assistant.yourdomain.com`), pointed at your workspace. - **An embed** on your own site or app — your mate drops into a panel or a chat bubble, on your pages. Either way, your customers see your brand, not ours. Setup is covered in [Getting started](https://busymate.ai/docs/getting-started). ## Where AI Assistant fits AI Assistant is the same technology that powers our own assistant — and it already runs live for outside partners, not just for us. That is the point: **AI Assistant is universal.** There is no special-case code for any one business. Every white-label is just another workspace, configured, never hand-coded — which is exactly why your assistant is stable, upgradeable, and gets every improvement the platform ships. > **A note on honesty.** These docs describe what the product does now, plainly. Where a capability is still being switched on for white-labels, the page says so and points you to the changelog — you should never be surprised by a gap. ### What is your mate? The assistant every business runs, rendered as your brand. One shared assistant; each workspace fully separate, fully branded, so your customers only ever see your assistant. ### Do I need my own AI model? No. The platform runs the models. You choose which ones your workspace may use and whether customers pick one or get a single default — see [Governance and models](https://busymate.ai/docs/governance). ### What do my customers see? Your name, your colors, your web address or your embed, and answers from your content and your tools. Nothing names our brand unless you want it to. ### Where do I start? [Getting started](https://busymate.ai/docs/getting-started) walks through the five steps — workspace, web address, sign-in, systems, publish — and the [guides](https://busymate.ai/docs/guides) cover each job end to end. ## Explore the section - **[Getting started](https://busymate.ai/docs/getting-started)** — your workspace, your web address, your branding, embedding. - **[The assistant experience](https://busymate.ai/docs/assistant-experience)** — what your customers actually see. - **[Governance and models](https://busymate.ai/docs/governance)** — features, model choice, limits. - **[Usage and analytics](https://busymate.ai/docs/usage)** — how much it's used, and against what limit. - **[Human handoff](https://busymate.ai/docs/human-handoff)** — bringing a person into the chat. - **[Connecting your systems (MCP)](https://busymate.ai/docs/connectors)** — let your mate act on your customers' data. - **[Managing from chat](https://busymate.ai/docs/managing-from-chat)** — run your workspace conversationally. --- --- title: "Getting started | AI Assistant" description: "How to set up your assistant: your workspace, your web address, your branding, and adding the chat to your own site." last_updated: "2026-09-07T18:06:45+03:00" --- # Getting started | AI Assistant Source: https://busymate.ai/docs/getting-started Last modified: 2026-09-07T18:06:45+03:00 Getting your AI Assistant assistant live takes five steps — workspace, web address, sign-in, systems, publish — and you do them yourself in the Console. Open [Console → Integration](https://busymate.ai/console/integration) for your workspace and follow its live checklist. It is generated from your real settings, so its URLs, sign-in fields, code snippets and checks are always current. ## The five steps Diagram: Setup flow: workspace, web address, sign-in, systems, publish ### 1. Your workspace A **workspace** is your own space on the platform. It carries your name, a short slug, and your branding. Everything your customers do — conversations, history, connected accounts — stays inside your workspace and is never visible to any other. A platform owner can create the workspace in **Console → Platform → Tenants** or through the AI Assistant management MCP; the invited admin then completes the Integration checklist without anyone handing off. ### 2. Your web address Your assistant is served at a **web address you choose**, mapped to your workspace: - **To start**, every workspace gets its own `.busymate.ai` address. - **Your own domain** (for example `assistant.yourdomain.com`) once you point it at the platform and it’s verified. From then on, your customers only ever see your domain. Under the hood, an address resolves to exactly one workspace. An address we haven't mapped yet stays plain and unbranded — your branding appears only once your address is verified and switched on, so there's never a half-branded window in front of your customers. ### 3. Your customers' sign-in Decide how your customers are known to the assistant: - **Signed in as themselves** — you connect your own sign-in, and each customer reaches your mate as *them*, so your mate can act on *their* data (and only theirs). - **Visitors** — if you'd rather let anyone chat without signing in, you can allow guest access. Visitors get answers and guidance but not actions on a specific customer's private data. You can offer both: visitors at the front door, signed-in sessions for your customers. ### 4. Your systems (optional) If you want your mate to *do* things — not just answer — connect your own **MCP server**. That's how your mate reads and changes your customers' data through your API, under your rules. This is optional: an answers-only assistant needs no tools at all. See [Connecting your systems](https://busymate.ai/docs/connectors). ### 5. Publish When branding, web address, sign-in, and (optionally) systems are set, run the **checks** and **publish** from the Console. Publishing is versioned — a change you make is prepared, checked, then switched on, so what your customers see only ever moves forward to a complete setup. A missing sign-in setup, an unreachable connection, or an unsafe action rule blocks publishing with a clear reason. ## Embedding your mate on your own site Beyond a hosted page, you can **embed** your mate directly into your product — a side panel or a chat bubble on your own pages. The embed runs on your site's own address (which we add to your workspace's allowed list), so the assistant lives right where your customers already are, still fully your brand. It's one script tag: ```html ``` Hosted page, embed, or both — it's your call, and you can add the embed later without redoing anything. ## What to prepare - Your **product name** and brand assets (logo, colors, a short welcome message). - The **web address** you want (a subdomain to start, or your own domain to verify). - How your customers **sign in** — or whether you want guest access. - Optionally, your **MCP server** URL if you want your mate to take actions. ### Do I need my own domain to start? No. Every workspace answers at its `.busymate.ai` address immediately. Add your own domain when you are ready — see [Serve your assistant on your own domain](https://busymate.ai/docs/guides/custom-domain). ### Can I add the embed later? Yes. Hosted page, embed, or both; adding the embed later changes nothing about the workspace. ### What blocks publishing? A missing sign-in setup, an unreachable connection or an unsafe action rule. The checks name the blocker; the draft stays a draft. ### Who creates the workspace? A platform owner, in Console → Platform → Tenants or through the management MCP. The invited admin then completes the Integration checklist without anyone handing off. ## Next - **[The assistant experience](https://busymate.ai/docs/assistant-experience)** — what your customers see once you're live. - **[Governance and models](https://busymate.ai/docs/governance)** — turn features on and set your model rules. - **[Connecting your systems (MCP)](https://busymate.ai/docs/connectors)** — let your mate act on your customers' data. --- --- title: "The assistant experience | AI Assistant" description: "What your customers see — the full chat with history, projects, a model choice if you allow it, streaming answers, and a way to reach a person." last_updated: "2026-09-04T13:14:52+03:00" --- # The assistant experience | AI Assistant Source: https://busymate.ai/docs/assistant-experience Last modified: 2026-09-04T13:14:52+03:00 Your customers see a full chat under your brand: streaming answers, saved conversations and projects in a side rail, a model choice if you allow it, and a way to reach a person in the same conversation. Signed-in customers get their own history and account actions; visitors get answers and guidance. It works like the chat apps they already know, and nothing names our brand. ## The chat, end to end Diagram: The assistant layout: a left rail with projects and conversation history, a central conversation that streams answers, and a composer with a model choice and a way to reach a person - **Streaming, formatted answers.** Responses stream in live and render as rich text — headings, lists, tables, and code — not a wall of plain text. - **Conversation history.** Every chat is saved. Your customers switch between conversations from a sidebar, reopen any one right where they left off, and each is auto-titled from what they asked. They can rename or delete their own conversations. - **Projects.** Related conversations can be grouped into **projects** in the side rail, so a customer working on one topic keeps those chats together. - **A model choice.** Customers can pick which model answers — if your rules allow it. If you pin one model for your workspace, the assistant stays on it. See [Governance and models](https://busymate.ai/docs/governance). - **A way to reach a person.** When the assistant can't finish something, your customer can ask for a person, and a teammate steps into the same conversation. See [Human handoff](https://busymate.ai/docs/human-handoff). ## Signed in, or as a visitor How much a customer sees depends on how you set up sign-in (see [Getting started](https://busymate.ai/docs/getting-started)): - **Signed-in customers** get their own private history and — if you've connected your systems — actions taken on *their* account, scoped to just their data. - **Visitors** (if you allow guest access) can still chat and get answers and guidance, without signing in. Visitors don't get actions on a specific customer's private data. ## It's your brand, everywhere The name at the top, the colors, the welcome message, the avatar — all yours. The same assistant can run as a full page at your web address and as an embedded panel inside your product, and it looks and behaves the same in both. Your customers never see our brand; they see you. > **Consistent light and dark.** The assistant renders correctly in both light and dark themes automatically, following each person's system setting. ### Do my customers need an account? Not if you allow guest access. Visitors chat and get answers; signed-in customers also get private history and actions on their own account — see [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors). ### Can customers pick the model? Under a "customers pick" rule, from your allowed list. Under a one-default rule the assistant stays on the model you pinned. ### Does it follow dark mode? Yes. The assistant renders in light and dark automatically, following each person's system setting. ### Where does conversation history live? Inside your workspace, keyed to the customer. A visitor's history stays with that visitor; a signed-in customer's follows them across devices. ## Next - **[Governance and models](https://busymate.ai/docs/governance)** — decide which features are on and how models are chosen. - **[Human handoff](https://busymate.ai/docs/human-handoff)** — how a person joins the chat. - **[Connecting your systems (MCP)](https://busymate.ai/docs/connectors)** — let the assistant act, not just answer. --- --- title: "Governance and models | AI Assistant" description: "As a workspace admin: which features are on within your plan, whether customers pick a model or get one default, and your limits." last_updated: "2026-09-04T13:14:52+03:00" --- # Governance and models | AI Assistant Source: https://busymate.ai/docs/governance Last modified: 2026-09-04T13:14:52+03:00 Governance is where a workspace admin decides what the assistant may do within the plan. You switch features on or off — guest access, human handoff, actions, branding — choose whether customers pick a model or get one default from your allowed list, and set your limits. The controls live in your **Console** and apply to your workspace only. ## Features within your plan Your plan sets a ceiling; within it, you turn features on or off for your workspace: - **Guest access** — let anyone chat without signing in, or require sign-in. - **Human handoff** — let customers reach a person, and give your team the Inbox. Off by default until you turn it on. See [Human handoff](https://busymate.ai/docs/human-handoff). - **Actions** — whether the assistant can do things through your connected systems, and which. See [Connecting your systems](https://busymate.ai/docs/connectors). - **Branding** — your name, logo, colors, and welcome copy. Think of it as two layers: your **plan** is the ceiling the platform sets; your **settings** are where you land inside it. You can move freely up to the ceiling, never past it. Diagram: Your plan sets a ceiling; your settings sit inside it; customer choices sit inside your settings ## Model choice: who picks the model You control which model answers your customers, with two settings: | Setting | What your customers see | Use it when | |---|---|---| | **Customers pick** | A model choice in the composer; each customer picks from the models you allow. | You want to offer a range and let power users decide. | | **One default** | One model, pinned. The assistant stays on it and won't switch. | You want consistent cost and behavior for everyone. | You also set an **allowed list** — the models available under either setting — so "customers pick" still means *your* shortlist, never the entire catalog. The setting is **enforced end to end**: under **one default**, a request to switch models is refused, so a customer can't route around your choice. The picker only ever offers models on your allowed list. > **Rolling out.** Under a one-default setting the composer will show the pinned model as a plain label with no picker at all — a small visual refinement. The setting itself is already enforced today; the picker just doesn't offer other models to switch to. ## Limits Your plan carries a usage limit. You can see how close you are on the [Usage and analytics](https://busymate.ai/docs/usage) page, per AI provider and over time, so a busy month never surprises you. ## Where these live All of the above sit in your **Console** — a governance panel for model choice and limits, a branding panel, a connections panel, and a usage panel — each scoped to your workspace. Platform-wide settings (creating workspaces, verifying domains) stay with the platform team; your controls are your own workspace's. ### Can a customer switch models under one default? No. The setting is enforced end to end: a request to switch is refused, so nobody routes around your choice. ### What is the allowed list? Your shortlist of the catalog. Under "customers pick" the picker offers only those models; under one default the pinned model must be on it. ### Who can change these settings? Your workspace admins, for your workspace only. Platform-wide settings — creating workspaces, verifying domains — stay with the platform team. ### How do I turn on human handoff? Here, in Governance, then staff the Inbox — the steps are in [Set up human handoff](https://busymate.ai/docs/guides/human-handoff-setup). ## Next - **[Usage and analytics](https://busymate.ai/docs/usage)** — track usage against your limit. - **[The assistant experience](https://busymate.ai/docs/assistant-experience)** — what your rules look like to a customer. - **[Managing from chat](https://busymate.ai/docs/managing-from-chat)** — the same controls, conversationally. --- --- title: "Usage and analytics | AI Assistant" description: "See how much your assistant is used — per AI provider, for today, the last 7 and 30 days, and all time — against your limit." last_updated: "2026-09-04T13:14:52+03:00" --- # Usage and analytics | AI Assistant Source: https://busymate.ai/docs/usage Last modified: 2026-09-04T13:14:52+03:00 The usage panel in your **Console** shows how much your assistant is used, per AI provider, for four periods — today, the last 7 days, the last 30 days and all time — against your plan's limit, with a small trend chart. If a price is unknown, the row says so instead of showing zero. ## What you see The usage panel gives you, for your workspace: - **Usage per AI provider.** Each AI provider your assistant uses is listed with its own totals, so you can see where the volume actually goes. - **Four periods.** Every figure is shown for **today**, the **last 7 days**, the **last 30 days**, and **all time** — so a spike today reads differently from a steady month. - **Used vs limit.** Your usage against your plan's limit, so you always know the headroom you have left. - **A trend at a glance.** A small trend chart shows the shape of recent usage, so a change in pace is obvious without reading numbers. Diagram: Usage panel: per-provider cards each showing today, 7-day, 30-day and all-time totals, plus a used-versus-limit bar and a trend sparkline ## Why it's broken down this way Different providers cost and behave differently, and a single blended number hides the story. Splitting by provider and by window lets you answer the real questions: *Is today unusual? Are we trending toward the limit this month? Which provider drives the cost?* — at a glance, without exporting anything. Usage ties directly to your [Governance and models](https://busymate.ai/docs/governance) settings: the models you allow and the choice you make shape which providers show up here and how fast usage grows. ### Why is usage split by provider? Providers cost and behave differently. A single blended number hides which one drives the volume; the split answers it at a glance. ### What counts as usage? Model spend per provider, per window, against your plan's limit. A row the platform cannot price is shown as unpriced. ### Where do the limits come from? Your plan sets the ceiling; your [Governance and models](https://busymate.ai/docs/governance) settings shape how fast usage grows. ### Can I see usage from chat or MCP? Yes. Ask the signed-in assistant, or call the same workspace-scoped tools from any MCP client — see [Managing from chat](https://busymate.ai/docs/managing-from-chat). ## Next - **[Governance and models](https://busymate.ai/docs/governance)** — set the model choice and limits that drive these numbers. - **[The assistant experience](https://busymate.ai/docs/assistant-experience)** — what generates the usage in the first place. --- --- title: "Human handoff | AI Assistant" description: "How a teammate joins a conversation in the same chat, and how a customer asks to talk to a person." last_updated: "2026-09-07T18:06:45+03:00" --- # Human handoff | AI Assistant Source: https://busymate.ai/docs/human-handoff Last modified: 2026-09-07T18:06:45+03:00 Some conversations need a person. AI Assistant lets a customer ask for a human in the chat and lets a teammate step into the **same** conversation from the Inbox — no re-explaining, no new channel — then hand it back to the assistant. Handoff is opt-in, so your mate only offers a person you have actually staffed. ## How a customer asks for a person Your customer simply says so. When they ask to talk to a person — "can I speak to someone", "get me a human", "I need an agent" — the assistant recognizes the request and raises a handoff, rather than trying to muddle through. The customer stays right where they are; nothing sends them to a separate widget or email. ## How your team joins On your side, the **Inbox** collects conversations waiting for a person. A teammate opens one, sees the full history the customer and the assistant already built, and **takes over** — replying in the same conversation. To the customer it is seamless: the same conversation, now with a person answering. Diagram: A customer asks for a person in the assistant chat; the conversation appears in your Inbox; a teammate takes over and replies in the same conversation When the teammate is done, the conversation can return to the assistant — the handoff is a moment in the conversation, not a dead end. ## Assignment and alerts Choose **manual claim**, **round robin**, or **least active** in the Console. The automatic modes consider only teammates who are marked available and still have capacity. Every decision records how it was made, how many teammates were eligible, who was chosen, and their measured load — so an unexplained or fake assignment cannot appear successful. The Inbox in the app is where your team is told first. For an automatically assigned request, the alert goes only to that teammate, and also reaches their linked browser or phone push and personal Telegram. We only mark an alert as reaching someone once an endpoint confirms it; an in-app alert with no linked endpoint stays as accepted. Email, a workspace Telegram and webhooks are not switched on yet (Rolling out). We do not label them delivered just because they are set up: every attempt is recorded as accepted or suppressed, so a silent gap is visible. AI Assistant adds these routes as your deployment turns them on. ## Turning it on Human handoff is **opt-in**. It is off until you turn it on for your workspace, because it depends on your team being ready to answer. When you turn it on (in [Governance and models](https://busymate.ai/docs/governance)), the assistant starts offering a person and your Inbox goes live. Leave it off and the assistant simply never promises a person it cannot deliver. > **Honest by design.** With handoff off, the assistant will not tell a customer "I'll connect you to someone" — it offers a person only when you have actually staffed one. That keeps the promise real. ### How does a customer ask for a person? In their own words — "can I talk to someone". The assistant recognizes the request and raises it; the customer stays in the same conversation. ### What does the teammate see? The full conversation the customer and the assistant already built, before they claim it. Their reply goes into that same conversation. ### Which alerts are switched on? The Inbox in the app, plus each teammate's linked browser or phone push and personal Telegram. Email, a workspace Telegram and webhooks are Rolling out. ### How do I set it up? Turn it on in Governance, staff the Inbox, pick how conversations are assigned — step by step in [Set up human handoff](https://busymate.ai/docs/guides/human-handoff-setup). ## Next - **[Governance & model policy](https://busymate.ai/docs/governance)** — enable handoff and set who can answer. - **[The assistant experience](https://busymate.ai/docs/assistant-experience)** — where the user asks for a human. --- --- title: "Connecting your systems (MCP) | AI Assistant" description: "Connect your own MCP server so the assistant can act on your customers' data — each customer authorizing with their own account." last_updated: "2026-09-13T14:42:54+03:00" --- # Connecting your systems (MCP) | AI Assistant Source: https://busymate.ai/docs/connectors Last modified: 2026-09-13T14:42:54+03:00 MCP (the Model Context Protocol) is an open standard for giving an AI assistant tools. AI Assistant lets your mate use your tools through your own MCP server, on behalf of your customers, under rules you set. Each tool gets an access level — open to anyone, signed-in customers, or on the customer's behalf — and every change you mark waits for a confirmation card. Your server learns who the customer is from a signed token it verifies, and returns only that customer's data. If your systems already speak MCP, your mate connects to them the same way it connects to anyone's — no platform-specific glue. ## How your mate acts on your customers' data When your assistant needs to do something, it calls a tool on your MCP server. Two things make that safe: 1. **Your mate tells your server who the customer is** — as a short-lived, cryptographically **signed** token your server verifies. It can't be faked or replayed, so your server always knows exactly which of your customers a request is for. 2. **Your server enforces the scope.** Because your MCP server knows the customer, it returns and changes only *that* customer's data. Your mate never sees more than your server hands it. Diagram: A customer chats with your mate; your mate calls your MCP server carrying a signed token identifying the customer; your server verifies it and returns only that customer's data ## Access levels Every tool you expose gets an access level, so the assistant can only reach what's appropriate for who's asking: | Access level | Who it's for | What it allows | |---|---|---| | **Open to anyone** | Anyone, including visitors | Safe, non-personal look-ups — product info, general help. | | **Signed-in customers** | A signed-in customer | Look-ups and actions on **their own** data only. | | **On the customer's behalf** | A signed-in customer, for actions that need their say-so | The same, for actions you want the customer to authorize. | | **Confirmation step** | Any change you mark | The customer must confirm before it runs — the full action is shown first. | Changes that matter are held behind a **confirmation step**: Your mate shows exactly what it's about to do and waits for a yes. Nothing changes silently. ## Setting it up The **Integration** section in your AI Assistant Console is the source of truth for this setup. It is generated from the selected workspace's live settings, so its URLs, sign-in values, snippets, and release checklist stay current — there is no separate handoff document to keep in sync. 1. Open [Console → Integration](https://busymate.ai/console/integration) and select the workspace you are configuring. 2. Follow its MCP step to **Connections**, add your server URL and how it authenticates, then run the probe. 3. Review every tool it finds and set each one's access level and confirmation deliberately. 4. Run the checks and publish. A failed probe or an incomplete sign-in setup blocks publishing, instead of producing a half-connected assistant. The Integration section also gives you a copy-ready brief and the AI Assistant management MCP address for teams that want an AI agent to do the same setup. See [Getting started](https://busymate.ai/docs/getting-started). ### Connect Claude Code to the management MCP One command; the browser handles sign-in with your normal account (OAuth 2.1 — nothing is pasted): ```bash claude mcp add --transport http busymate-ai https://busymate.ai/mcp ``` Then run `/mcp` inside Claude Code and choose **busymate-ai → Authenticate**. Any other HTTP-MCP client (Claude Desktop, Cursor, …) connects with just the URL `https://busymate.ai/mcp` — sign-in is discovered automatically, so no other configuration is needed. ## Customers connecting their own accounts **Each customer can connect their own account** to a service you do not run. Use it when a customer must authorize their own account elsewhere. Set the connection's authorization details in **Connections**, then publish its on-the-customer's-behalf tools. There are two ways the assistant can act for a signed-in customer: - **Automatic (a signed action proof)** — recommended when your product has already verified the visitor. AI Assistant creates a short-lived, workspace-and-connection-bound proof for your MCP server, so account access is automatic and the customer does not see a second sign-in or consent prompt. - **Each customer signs in once (OAuth)** — use this when a separate consent is intentional. The assistant shows **Authorize account tools** once, uses OAuth 2.1 with PKCE, and binds the grant to the workspace, the connection, and the verified customer. Both fail closed. Your MCP server works out the customer only from the verified token, and never trusts an account id passed in a tool's arguments. OAuth grants can be revoked from the account menu; signed proofs expire in at most five minutes and are pinned to one connection. ### Does my server have to speak MCP? Yes — standard MCP over HTTPS, JSON-RPC 2.0, with schemas on `tools/list`. No platform-specific glue. ### How does my server know which customer is asking? From the verified token your mate sends: a short-lived signed proof, or a per-customer OAuth token. Never from an account id in a tool's arguments. ### Automatic proof or per-customer OAuth? The signed proof when your product already verified the visitor and you want no second consent. OAuth when a separate consent screen is intentional. ### Where do I set it up? Console → Connections, then run the checks and publish. The steps, the probe and a worked call are in [Connect your MCP server as assistant tools](https://busymate.ai/docs/guides/connect-mcp-server). ## Next - **[Getting started](https://busymate.ai/docs/getting-started)** — where your MCP server is connected. - **[Governance and models](https://busymate.ai/docs/governance)** — turn actions on and set confirmation rules. - **[The assistant experience](https://busymate.ai/docs/assistant-experience)** — how actions appear to a customer. --- --- title: "Managing from chat | AI Assistant" description: "Manage your workspace by chatting — ask the assistant to change branding, features and limits, within your role." last_updated: "2026-09-04T13:14:52+03:00" --- # Managing from chat | AI Assistant Source: https://busymate.ai/docs/managing-from-chat Last modified: 2026-09-04T13:14:52+03:00 You can manage your AI Assistant workspace in the Console, or ask the signed-in assistant to do the same work in chat. Both use the same AI Assistant management tools (MCP at `https://busymate.ai/mcp`). Look-ups run right away; changes show you exactly what will change and wait for your yes; and every call stays within the workspaces your account may manage. ## Use the Console Every control this section describes lives in the visual **Console** scoped to your workspace: - **Branding** — your name, logo, colors, and welcome copy. - **Governance** — model choice (customers pick, or one default), your allowed models, and limits. See [Governance and models](https://busymate.ai/docs/governance). - **Connections** — the tools your assistant can use. See [Connecting your systems](https://busymate.ai/docs/connectors). - **Usage** — how much your assistant is used, per AI provider and over time. See [Usage and analytics](https://busymate.ai/docs/usage). - **Handoff** — turn human support on and manage the Inbox. See [Human handoff](https://busymate.ai/docs/human-handoff). Each panel is point-and-click, changes are reviewed before they publish, and everything you can touch is your workspace's — never anyone else's. ## Scoped by who you are Management is always **role-scoped**, whether from the Console or from chat: Diagram: Three levels: the platform team manages all workspaces; a workspace admin manages only their own workspace; a guest gets guidance only, no management - A **workspace admin** (you) manages your own workspace — your branding, your rules, your usage. A change to anyone else's workspace is structurally impossible for you. - The **platform team** (us) manages workspaces across the platform — creating one, verifying a domain. - A **guest** gets no management at all — just help understanding what the assistant does. Your role comes from your verified sign-in, never from anything typed in a chat, so the boundary holds no matter what's asked. ## Manage by chatting Conversational management is shipped. Ask things such as *"Show this workspace's integration status,"* *"List the content, skills, and plugins I can publish,"* *"Add this MCP connection,"* or *"Review the last 30 days of conversations."* The assistant uses the same workspace-scoped management tools the Console uses. Inside AI Assistant, a verified workspace admin or a member of the platform team gets the first-party `platform-management` connector automatically. There is no second MCP setup step in the Console and no shared application token: every call rides the signed-in person's own grant to the management address above. The contract is deliberately simple: - **Look-ups run right away.** For example, `get_tenant_integration`, `list_tenant_resources`, `list_tenant_conversations`, and `list_tenant_insights` return current workspace state. - **Changes show their payload and wait for approval.** For example, `upsert_tenant_connector` and `publish_tenant_runtime` do nothing until the signed-in admin confirms the exact action. - **A workspace admin is held to their active workspace.** A workspace id put in a prompt cannot cross that boundary, and membership is checked again when the tool runs. - **The platform team uses its verified role.** Guests get guidance only and are never given management tools. Older integrations may still call support-era names such as `upsert_tenant_support_connector` and `list_support_insights`. They still work as compatibility names, but new clients should use the product-neutral names. ## Connect from another MCP client External MCP clients connect directly to `https://busymate.ai/mcp` with OAuth 2.1 (Claude Code: `claude mcp add --transport http busymate-ai https://busymate.ai/mcp`, then `/mcp` → Authenticate). The account you connect with decides which workspaces and actions are available; putting a workspace id in a prompt or a tool argument never grants access. Keep confirmation on for changes. ### Can a workspace admin change another workspace? No. A workspace admin is held to their active workspace; a workspace id in a prompt or a tool argument never crosses that boundary. ### Are changes confirmed? Yes. A change shows its exact payload and does nothing until the signed-in admin confirms it. Look-ups run right away. ### Which MCP clients work? Any HTTP-MCP client — Claude Code, Claude Desktop, Cursor — with the URL `https://busymate.ai/mcp`. Sign-in is discovered at the address, so no extra configuration is needed. ### Is the developer-tools MCP the same server? No. The management MCP serves this product only; the developer-tools product has its own server, and neither borrows tools or credentials from the other. ## Next - **[Governance and models](https://busymate.ai/docs/governance)** — inspect or change the same rules from the Console or chat. - **[Usage and analytics](https://busymate.ai/docs/usage)** — inspect workspace usage in the Console or ask for it. - **[Getting started](https://busymate.ai/docs/getting-started)** — set up your workspace first. --- --- title: "Glossary | AI Assistant" description: "The AI Assistant vocabulary — each term in plain words first, then its technical name, linked to the guide that uses it." last_updated: "2026-09-07T18:06:45+03:00" --- # Glossary | AI Assistant Source: https://busymate.ai/docs/glossary Last modified: 2026-09-07T18:06:45+03:00 The words these docs use, defined once. Each entry gives the plain phrase first and the technical name in parentheses, then links to the guide that uses it. Generic standards get one line and a link to the specification. Every developer page follows the same convention at the first mention of a term. ## Workspace (tenant) Your own space on the platform, kept separate from everyone else's: name, slug, branding, web addresses, sign-in provider, connections, content, model rules and limits. Everything your customers do stays inside it. In the API and tool names it is called a tenant. See: [Getting started](https://busymate.ai/docs/getting-started) ## Your address on our domain (default host) The `.busymate.ai` address every workspace answers at from the moment it exists, before any DNS work. See: [Serve your assistant on your own domain](https://busymate.ai/docs/guides/custom-domain) ## Your own domain (white-label host) Your own web address, mapped to your workspace after you prove you own it (a TXT record) and point it at us (a CNAME). Your customers see your domain only. See: [Serve your assistant on your own domain](https://busymate.ai/docs/guides/custom-domain) ## Signed-in customer (identified launch) Opening the assistant as a known customer: the widget or app hands over a proof your product signed, and your mate serves that customer's history and account tools. See: [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors) ## Sign-in proof (launch token) A short-lived signed proof (a JWT, ES256 by default, at most 120 seconds) your API creates for one signed-in customer: issuer, audience busymate-ai, workspace claim, unchanging subject, nonce, one-time jti. See: [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors) ## One-time values (nonce and jti) The two values on a sign-in proof that can be used once. The widget generates the nonce and your endpoint echoes it; the jti is the proof's own id. Each pair is consumed exactly once, so a replay is refused. See: [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors) ## Your sign-in provider (identity provider) What the platform checks sign-in proofs against: your issuer, public-key URL (JWKS), audience, workspace and subject claims, allowed algorithms, maximum proof age and the endpoint that creates proofs. See: [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors) ## Access levels (tool tiers) The three levels a tool can have: open to anyone (public — non-personal look-ups), signed-in customers (identified — their own data), on the customer's behalf (delegated — for changes you want explicitly authorized). See: [Connect your MCP server as assistant tools](https://busymate.ai/docs/guides/connect-mcp-server) ## Confirmation step (confirm gate) The per-tool flag that stops a change at a card showing the exact action; it runs only after the customer says yes. Not a fourth level — a step on any level's tool. See: [Connect your MCP server as assistant tools](https://busymate.ai/docs/guides/connect-mcp-server) ## Action proof (signed actor token) The pass your mate sends your MCP server when your product already verified the visitor: signed by the platform, valid at most five minutes, issuer https://busymate.ai, audience your origin, workspace and connection pinned. No second consent prompt. See: [Connect your MCP server as assistant tools](https://busymate.ai/docs/guides/connect-mcp-server) ## Each customer connects their own account (per-user OAuth) The alternative: each customer authorizes their own account with your authorization server through OAuth 2.1 with PKCE. Use it when a separate consent screen is intentional. See: [Connect your MCP server as assistant tools](https://busymate.ai/docs/guides/connect-mcp-server) ## Connection (connector) A registered MCP server on your workspace: address, transport, how it authenticates, how it learns who the customer is, and the access level and confirmation flag of every tool it exposes. See: [Connect your MCP server as assistant tools](https://busymate.ai/docs/guides/connect-mcp-server) ## Published version (revision) One frozen, published set of your settings. Draft, then checks (preflight), then publish, then live. A failed check leaves the draft a draft. "Live" (projection) is the copy the assistant serves; published and live are reported separately. See: [Getting started](https://busymate.ai/docs/getting-started) ## Handoff (intervention) A conversation moving from the assistant to your team, with the whole chat attached. Raised when a customer asks for a person, when a connected system requires it (a refund above your limit), or when one of your rules decides. In tool names it is an intervention. See: [Set up human handoff](https://busymate.ai/docs/guides/human-handoff-setup) ## Who can open a shared page (artifact visibility) Only you (private), your team (internal), or anyone with the link (public — listed in the gallery and the sitemap). See: [Share pages the assistant makes](https://busymate.ai/docs/guides/artifacts) ## Allowed websites (embed origin and launch origin) An embed origin is a website allowed to show the chat launcher; a launch origin is a website allowed to open the full-page chat with a sign-in proof. Both are settings on your workspace. See: [Serve your assistant on your own domain](https://busymate.ai/docs/guides/custom-domain) ## Resolution (Shopify plans) A shopper conversation the assistant handled on its own, without your team. The unit the Shopify plans count. See: [AI support assistant for your Shopify store](https://busymate.ai/docs/guides/shopify) ## MCP (Model Context Protocol) The open standard for giving an AI assistant tools over HTTPS. Specification: modelcontextprotocol.io. ## JSON-RPC 2.0 The request-and-response format MCP uses. Specification: jsonrpc.org/specification. ## OAuth 2.1 with PKCE The sign-in flow the management MCP and per-customer connections use; PKCE is the check that ties the returned code to the app that started the flow. Specification: the OAuth 2.1 draft and RFC 7636. ## JWT and JWKS A JWT is the signed set of claims a sign-in proof is; JWKS is the public keys it is checked against. Specifications: RFC 7519 and RFC 7517. --- --- title: "Guides | AI Assistant" description: "Step-by-step guides for AI Assistant: Shopify, connecting your systems, human handoff, in-app support for iOS and Android, your own domain, your content, signed-in customers and shared pages." last_updated: "2026-09-17T22:17:18+03:00" --- # Guides | AI Assistant Source: https://busymate.ai/docs/guides Last modified: 2026-09-17T22:17:18+03:00 Step-by-step guides for AI Assistant: Shopify, connecting your systems, human handoff, in-app support for iOS and Android, your own domain, your content, signed-in customers and shared pages. ## On this page's section - [AI support assistant for your Shopify store | AI Assistant](https://busymate.ai/docs/guides/shopify.md): Add {product} to your storefront with no theme edit, let it learn your products and policies, and give signed-in shoppers answers about their orders. - [AI support assistant for your WooCommerce store | AI Assistant](https://busymate.ai/docs/guides/woocommerce.md): Create a read key in your store admin, let your mate learn the catalogue and policies, and give a signed-in customer answers about their own orders. - [Install the real WordPress plugin (not just a script tag) | AI Assistant](https://busymate.ai/docs/guides/wordpress.md): Install the {product} plugin, add the floating widget or an inline [bmai_assistant] block, publish your knowledge, and recognize signed-in visitors. - [Add your mate to a Ghost publication | AI Assistant](https://busymate.ai/docs/guides/ghost.md): Wire the embed through Ghost's own Code Injection, let it learn your posts and pages, register a member as your identified reader, and add an inline placement. - [Add the assistant to your Webflow site | AI Assistant](https://busymate.ai/docs/guides/webflow.md): Paste the embed script where your plan allows it, or use the Designer Extension to insert it as a real page element — then teach it your content and recognize signed-in visitors. - [Add your mate to a BigCommerce store | AI Assistant](https://busymate.ai/docs/guides/bigcommerce.md): Add the universal Script Manager embed or the native single-click app, connect an MCP server to your live catalogue and orders, and recognize signed-in customers via the Customer Login API. - [Add your mate to a Wix site | AI Assistant](https://busymate.ai/docs/guides/wix.md): Add the embed via Custom Code on Premium or an Embed HTML element on the free plan, let it learn your pages, and recognize signed-in Members. - [Add your mate to a Squarespace site | AI Assistant](https://busymate.ai/docs/guides/squarespace.md): Wire the embed through a Code Block/Embed Block (or Code Injection on Business+), let it learn your pages, register a member as your identified visitor, and add page actions with WebMCP. - [Connect your MCP server as assistant tools | AI Assistant](https://busymate.ai/docs/guides/connect-mcp-server.md): Register your MCP server as your assistant's tools, give each tool an access level, mark the changes that need a confirmation card, then publish. - [Set up human handoff | AI Assistant](https://busymate.ai/docs/guides/human-handoff-setup.md): Turn on handoff, staff the Inbox, choose how conversations are assigned, set how your team is alerted, and measure with ratings and response targets. - [In-app AI support for iOS and Android | AI Assistant](https://busymate.ai/docs/guides/mobile-in-app-support.md): Show your assistant's chat inside your iOS or Android app, pass sign-in through your own API, and verify on a real device. - [Serve your assistant on your own domain | AI Assistant](https://busymate.ai/docs/guides/custom-domain.md): Claim your address, prove you own it with one DNS record, point it at us with another, verify, and get a certificate automatically. - [Teach your assistant your own content | AI Assistant](https://busymate.ai/docs/guides/knowledge.md): Let it read your help site or paste in text, publish, test what it finds, and keep every answer sourced — it says when it is not sure. - [Recognize signed-in customers | AI Assistant](https://busymate.ai/docs/guides/identified-visitors.md): Let the assistant trust who is signed in: publish your public key, have your API sign a short-lived proof, and wire getIdentity and refreshIdentity. - [Follow a visitor across workspaces | AI Assistant](https://busymate.ai/docs/guides/visitor-journey.md): Platform operators: open one visitor's route across every workspace as stops, read each stop's honest identity state, and erase the visitor everywhere on request. - [See which website tries became customers | AI Assistant](https://busymate.ai/docs/guides/preview-funnel.md): Platform operators: read every website try with its instruments, the six-stage conversion funnel, and an honest outcome per try — converted, probable, or where it left. - [Share pages the assistant makes | AI Assistant](https://busymate.ai/docs/guides/artifacts.md): Ask your mate for a report, diagram or how-to and get a self-contained page at your address; choose who can open it, comment inline, manage it from chat. - [Let the assistant use your page | AI Assistant](https://busymate.ai/docs/guides/page-tools.md): Publish what your page already does — look up an order, book a slot, start a return — as actions the assistant runs, asking first before changing anything. - [Forms and sign-in inside the chat | AI Assistant](https://busymate.ai/docs/guides/form-cards.md): Ask for missing details as a card with real fields instead of a list to type, and let visitors sign in to your site without leaving the conversation. - [Let your users sign in from the chat | AI Assistant](https://busymate.ai/docs/guides/in-chat-sign-in.md): Give customers a sign-in card inside the chat, using the accounts you already run: what they get, how to switch it on, and what stays with you. - [How your page and the widget talk to each other | AI Assistant](https://busymate.ai/docs/guides/widget-page-api.md): The complete host ↔ widget contract: open, preset, ask and identify from the page; the events the widget posts back; page tools both ways; navigation, theming, security and a cookbook. - [Ask without signing in: the public tools | AI Assistant](https://busymate.ai/docs/guides/public-tools.md): What anyone can ask the site assistant or the MCP server without an account — pricing, overview, docs search, status, contact — and what stays private. - [Connect Telegram for team alerts | AI Assistant](https://busymate.ai/docs/guides/telegram.md): Create a bot, give the platform its token and webhook secret, link your own account, and get hand-off alerts you can reply to from Telegram. - [Email channel: your support address and your own mailbox | AI Assistant](https://busymate.ai/docs/guides/email.md): Use the support address every workspace gets, or connect your own mailbox through a hosted sign-in, and let your mate answer threaded, draft, summarize, translate, forward and send invites from the Inbox. - [Get a signed webhook on every event | AI Assistant](https://busymate.ai/docs/guides/webhooks.md): Register an endpoint, verify the signature and timestamp on every call, choose your events, and handle retries and the dead-letter state. - [Read and reply over the REST API | AI Assistant](https://busymate.ai/docs/guides/api.md): Create a workspace API key, call the REST endpoints or the MCP server with it, list and read conversations, post an operator reply, and rotate the key. - [Keep HubSpot current from every conversation | AI Assistant](https://busymate.ai/docs/guides/hubspot.md): Create a private app token, connect it in the Console, and let hand-offs open tickets while resolved conversations keep each customer's record up to date. - [Turn a hand-off into a Zendesk ticket | AI Assistant](https://busymate.ai/docs/guides/zendesk.md): Give the Console your subdomain, agent email and API token, and each request for a person arrives in your queue with the thread, page and requester. ## Related - [Getting started | AI Assistant](https://busymate.ai/docs/getting-started.md) - [Developer guide: MCP, SDKs and sign-in | AI Assistant](https://busymate.ai/developers.md) - [Pricing | AI Assistant](https://busymate.ai/pricing.md) --- --- title: "AI support assistant for your Shopify store | AI Assistant" description: "Add AI Assistant to your storefront with no theme edit, let it learn your products and policies, and give signed-in shoppers answers about their orders." last_updated: "2026-09-11T20:45:14+03:00" --- # AI support assistant for your Shopify store | AI Assistant Source: https://busymate.ai/docs/guides/shopify Last modified: 2026-09-11T20:45:14+03:00 AI Assistant for Shopify is an open-source app that adds your mate, your store's own support assistant, to your storefront — no theme edit. It learns your products, policies and pages, answers shoppers in their own language, and looks up a signed-in shopper's orders. It is listed on our own App Store. ## Before you start - The **Online Store** channel and a theme that supports app embeds (Theme editor → App embeds). - Access to the store's admin to install apps and edit the theme. - The app is open source (MIT); the repository is linked from its listing at [/store/apps/busymate-ai-shopify](https://busymate.ai/store/apps/busymate-ai-shopify). Plans are on the listing and on [/pricing](https://busymate.ai/pricing). ## 1. Install 1. Open the listing and install the app. Shopify asks you to approve the permissions it uses. 2. The app creates your assistant and connects it to your store — nobody on our side has to do anything. 3. It sets your name and colors, lets your storefront show the chat, connects your store's orders, learns your catalog and policies, and switches the assistant on. 4. Your assistant runs at an address of its own on our domain. No DNS work; the storefront loads it through the app embed. ## 2. Turn it on 1. In the app's Home, use the theme-editor link — it opens **Online Store → Themes → Customize → App embeds** with the **AI Assistant assistant** embed ready. 2. Switch it on and click **Save**. The **Ask us** launcher appears on every storefront page. 3. Home confirms the embed is on by reading your public storefront. We can't confirm it on a password-protected store — switch it on above and the check passes once the store opens. ## 3. Check what it learned At install — and on every reinstall, product change, or when you press **Re-train** under Store connection — the app reads your products, shop policies and pages and gives them to the assistant as its content. Home shows what it learned and when. - Only sellable products count; draft and archived products are left out (and counted separately). - Answers cite the page they came from. When the answer is not in your content, your mate says so instead of guessing. ## 4. Name and brand it Open **Assistant settings** in the app. The assistant's name, colors and welcome message are yours — change them and the storefront launcher follows. Nothing here names our brand to your shoppers. ## 5. Signed-in shoppers When a shopper is signed in, the assistant knows who they are and can check their orders. It can look up order status and tracking, and — with the shopper's confirmation — update an address, start a return, or cancel or refund an order. Larger refunds go to you: a refund above your limit is handed to your team with the request attached, never run by the assistant. Nothing changes silently — every change shows the full action first and waits for a yes. ## 6. Billing - **No plan selected yet** — choose the $0 Free plan or a paid plan on Shopify's pricing page; Free-plan limits apply until you do. - Plans include a monthly number of AI **resolutions** (a shopper conversation the assistant handled on its own); paid plans charge per extra resolution up to a monthly cap. The assistant is never switched off for billing. - All charges are billed through Shopify App Pricing on your Shopify invoice. Plans and caps are on the listing and on [/pricing](https://busymate.ai/pricing). ## What the app can and can't touch - **Permissions it asks for, and why:** your products, pages and shop policies (to learn your store), and your orders, customers, fulfilments and returns (to answer signed-in shoppers and, on confirmation, act on an order). - **What it does not ask for:** access to your theme code; orders older than 60 days (requested separately if you need them). - **Live vs learned:** order look-ups read Shopify live at the moment you ask; products and policies are learned at install and on re-train. - AI answers can be wrong — the assistant answers from your content, cites its source, and says when it is not sure. ## Verify 1. Open the storefront. The launcher is visible. Ask a policy question — the reply cites the policy page. 2. Sign in as a test customer and ask "where is my order". The reply names that shopper's order only. 3. Ask for a refund above your limit. The assistant hands the conversation to your team; it appears in the Inbox. 4. Switch the storefront language. The reply follows the shopper's language. ## Technical details For developers — the merchant flow above needs none of this. At install the app provisions one workspace per store through the AI Assistant MCP (`provision_partner_tenant`), authorized by a proof-of-shop signature, so no operator is involved. It sets branding, allows your storefront origins, registers the store's Admin API as the assistant's connection, trains on the catalog, and publishes one version. Signed-in identity rides Shopify's App Proxy: Shopify signs the request and the app mints a short-lived ES256 launch token for that shopper. The connection's tools have access levels — open to anyone (products, policies), signed-in shoppers (their orders, shipments, returns), and on the shopper's behalf with a confirmation card (update an address, start a return, cancel or refund, up to your refund limit). Content limits are the platform's: at most 40 sources, 20,000 characters each, 40,000 total; large catalogs are trimmed and Home says so. ### Does the app edit my theme? No. It adds an app embed you switch on in the Theme editor. Uninstalling the app removes it. ### Where does the assistant run? At an address of its own on our domain, created at install. The storefront only loads the chat. You can later serve it at your own domain — see [Serve your assistant on your own domain](https://busymate.ai/docs/guides/custom-domain). ### Can it refund an order? Up to the refund limit you set, and only after the shopper confirms the exact action. Above that limit it hands the conversation to your team. ### What does it cost? Plans are on the listing and on [/pricing](https://busymate.ai/pricing). Until you pick one on Shopify, the app shows "No plan selected" and the Free-plan limits apply. ## Next - **[Teach your assistant your own content](https://busymate.ai/docs/guides/knowledge)** — what the app learns, and how to add more. - **[Set up human handoff](https://busymate.ai/docs/guides/human-handoff-setup)** — staff the Inbox before shoppers ask for a person. - **[Serve your assistant on your own domain](https://busymate.ai/docs/guides/custom-domain)** — move from the default address to yours. --- --- title: "AI support assistant for your WooCommerce store | AI Assistant" description: "Create a read key in your store admin, let your mate learn the catalogue and policies, and give a signed-in customer answers about their own orders." last_updated: "2026-09-17T12:58:30+03:00" --- # AI support assistant for your WooCommerce store | AI Assistant Source: https://busymate.ai/docs/guides/woocommerce Last modified: 2026-09-17T12:58:30+03:00 AI Assistant reaches a WooCommerce store through the store's own REST API: the catalogue, categories, shipping zones and policy pages become content your mate answers from, and a signed-in customer can ask where their order is. Nothing is installed inside WooCommerce for that — the connection is a read key you create in the store admin. Every step below is proven against a real WooCommerce store, end to end, by a shopper in the widget. ## Before you start - A WooCommerce store on HTTPS with **Settings → Permalinks** set to anything but **Plain**: the REST routes live under `/wp-json/wc/v3/`, and plain permalinks do not serve them. - An admin account on the store, to create the key. - Your workspace open in the Console. ## 1. Create a read key 1. In the store admin, open **WooCommerce → Settings → Advanced → REST API** and choose **Add key**. 2. Describe it so you recognize it later, pick the user it acts as, and set **Permissions** to **Read**. 3. Generate it. The consumer key (`ck_…`) and consumer secret (`cs_…`) are shown once — copy both before leaving that page. Read is enough for everything here: a write key would let the assistant change orders and move money, so the connection does not ask for one. ## 2. Connect the store Open [Console → Knowledge base](https://busymate.ai/console/knowledge) and add the store with three values: the store address, the consumer key and the consumer secret. The secret is stored value-blind — afterwards the Console shows a hint, never the value. It is verified before anything is saved: one call to `GET /wp-json/wc/v3/system_status` proves the site really runs WooCommerce, the credential authenticates, and the key reads more than a public resource. A failure is reported as a sentence, never saved as a row claiming to be connected. Over MCP: `connect_commerce`, `get_commerce_status` and `sync_commerce`, each taking a `kind` of `woocommerce`. ## 3. Choose what it reads Four corpora, and you pick the set: - **Products** — name, price, stock state and description, each cited to its own permalink. - **Categories** — the category archive a shopper can open. - **Shipping** — the store's shipping zones. - **Policies** — your WordPress pages for shipping, returns, refunds, privacy and terms, so the answer and the page a customer is pointed at stay the same text. Products are bounded by a page limit you set, 1 to 50, default 20. It is the same knowledge pipeline as a website source or pasted text — see [Teach your assistant your own content](https://busymate.ai/docs/guides/knowledge). ## 4. Let it re-read the store The store is re-synced on a schedule you set — daily by default, hourly at most. A sync compares the newest edit time across products and pages against the last one seen; when nothing changed it is skipped and not one memory is rewritten. **Sync now** in the Console, or `sync_commerce`, forces a pass. ## 5. Order lookup for a signed-in customer Order lookup is identity-gated: it answers only with the signed-in customer's own orders, and has no anonymous arm. The match is made on **your store's own customer id**. The plugin signs the WordPress user id into the proof — exactly the customer a WooCommerce order carries — so the store filters on it directly, and no email or phone number crosses the browser. A storefront that signs customers in another way falls back to a verified email. Ownership is checked **again** on every order returned: a filter you asked for is not a filter that was applied. An order number alone is a guessable integer, never sufficient. What comes back: order number, status, the dates placed, paid and completed, the total, the shipping method, the items, and a tracking number when the store recorded one. ## 6. Put the chat on the storefront One WordPress plugin does both jobs: it loads the chat on every storefront page and signs a short-lived proof of who is logged in, so order lookup needs no second sign-in. Your customer database is never shared. 1. Download the plugin from the store connection card in your Console; the zip is built for your workspace, so there is nothing to type into it. 2. In wp-admin, open **Plugins → Add New → Upload Plugin**, upload the zip and activate it. 3. Its status screen lists the values for **Console → Identity** and has a **Test identity** button that proves the signing endpoint answers. Without the plugin the chat still works — add the embed script to your theme — but the storefront must then sign identity itself: [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors). ## Returns are answered, not started The connection deliberately offers no `start_return` action. WooCommerce core has no customer-initiated return resource in its REST API, and `POST /orders//refunds` is an admin refund that moves a merchant's money — not something to run on a visitor's say-so. Returns are a plugin choice that differs per store. So the assistant answers the returns **policy** from your own returns page, with a citation, and hands the conversation to a person for the rest. ## Manage from any MCP client Every step above is available from any MCP client on your own account: {{snippet:claude-code}} ## Troubleshooting - **401** — the key was refused: check the consumer key and secret, and that the key has **Read** permission. - **404** — the address answers but the REST API is not there: WooCommerce is not active, or **Settings → Permalinks** is still **Plain**. - **Unreachable** — the address is wrong or the store is down. The connect reports the status it saw. ## Verify 1. The Console card shows the store name, the WooCommerce version and the currency read at connect. 2. Ask about a product only your catalogue knows. The reply cites the product's own page. 3. Ask about your returns policy. The reply cites the returns page and offers a person rather than starting a return. 4. Sign a test customer in and ask where their order is: the reply names that customer's orders only. Ask signed out and the assistant asks them to sign in. ### Does the key need Write permission? No. Read covers the catalogue, the policies and order lookup. Write access is never asked for, because everything it would unlock moves a merchant's money. ### Can a shopper see somebody else's order? No. The lookup runs only for a signed-in customer, is scoped to that customer's own key, and re-checks ownership on every row before showing it. There is no search-all-orders path. ### How often does it re-read my catalogue? On the schedule you set — daily by default, hourly at most. An unchanged store is skipped, so re-syncing a quiet catalogue costs nothing. ### Do I need the plugin? Only to hand over who is signed in. The chat can go on the site with the embed script; the plugin saves you signing the proof by hand. ## Next - **[Teach your assistant your own content](https://busymate.ai/docs/guides/knowledge)** — help pages beside the catalogue. - **[Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors)** — the proof order lookup relies on. - **[Set up human handoff](https://busymate.ai/docs/guides/human-handoff-setup)** — staff the Inbox before the returns questions. --- --- title: "Install the real WordPress plugin (not just a script tag) | AI Assistant" description: "Install the AI Assistant plugin, add the floating widget or an inline [bmai_assistant] block, publish your knowledge, and recognize signed-in visitors." last_updated: "2026-09-15T19:42:00+03:00" --- # Install the real WordPress plugin (not just a script tag) | AI Assistant Source: https://busymate.ai/docs/guides/wordpress Last modified: 2026-09-15T19:42:00+03:00 AI Assistant reaches WordPress through a real, installable plugin — not a copy-pasted script tag. The plugin loads the floating widget on every front-end page and signs a short-lived proof of who is logged in, so a returning signed-in visitor never has to sign in twice. This is the WordPress-specific path. Wix, Squarespace and Webflow don't yet have a native app of their own — on those builders you still add the one script tag from [Add AI Assistant to WordPress, Wix or Squarespace](https://busymate.ai/articles/add-ai-assistant-wordpress-wix-squarespace). ## Before you start - A self-hosted WordPress site (wordpress.org). The widget works on any PHP build; signed-in visitor recognition additionally needs the OpenSSL PHP extension (ES256) — without it the widget still loads, and the settings screen names exactly what your host is missing. - An admin account on the site. - Your workspace open in the Console. ## 1. Download your plugin Every workspace's plugin is generated for that workspace — your workspace id and the embed origin are baked in at download time, so there is nothing to type into it. 1. In your [Console](https://busymate.ai/console), open your connection settings and choose **Download WordPress plugin**. 2. In wp-admin, open **Plugins → Add New → Upload Plugin**, upload the zip and activate it. 3. Activation generates the site's own ES256 signing key. Its settings screen shows the values a signed-in-visitor identity provider needs (issuer, JWKS URL, the launch endpoint) and a **Test identity** button that proves the signing endpoint answers. The plugin's own copy, look and available tools all come from AI Assistant at chat time — updating any of that never means updating the plugin. ## 2. Put the chat where you want it Out of the box the plugin adds the floating widget to every page — nothing else to do. To put a button inside a specific page (a contact page, a pricing page) that opens the same assistant — optionally with a starting question — use the **Busymate AI trigger** block in the block editor, or the `[bmai_assistant]` shortcode anywhere shortcodes work: ``` [bmai_assistant label="Ask about sizing" prompt="What sizes do you have?"] ``` Both ship directly in the plugin you downloaded — no separate install, no iframe to hand-place. See the live example at [wordpress.demo.busymate.ai](https://wordpress.demo.busymate.ai) (Larkspur Studio), where both the floating widget and an inline block are visible. ## 3. Teach it your content Point a [website source](https://busymate.ai/docs/guides/knowledge) at your site, or paste in your own pages and policies — the same knowledge pipeline every connection uses, with citations back to the page an answer came from. ## 4. Recognize signed-in visitors The plugin signs the WordPress user id into its proof, so a signed-in visitor is recognized automatically once you register it as an identity provider — see [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors) for the exact fields (issuer, JWKS URL, the launch endpoint the plugin's settings screen shows) and how to verify the wiring end to end before trusting it with real customer data. ## Agent-ready out of the box The plugin makes your site readable, understandable and operable by AI agents and answer engines — not just by people — with nothing to configure: - **`/llms.txt`** — a short, standards-shaped index of your site (name, key pages, latest content, contact) that an AI assistant reads before answering a question about you. - **`/agents.json`** — the one machine-readable capability card an agent looks for first: your content index, the MCP interface your connected workspace exposes (once you've connected one — see [Manage from any MCP client](#manage-from-any-mcp-client) below), and a human contact. - **Markdown on request, on the SAME page** — request any published page or post with `Accept: text/markdown` and you get that exact page back as clean Markdown with a small frontmatter (title, description, canonical URL, last-updated date, language) instead of HTML — never a separate `/…/md` URL to keep in sync. Ordinary visitors and search engines keep seeing HTML. - **Structured data + discovery headers** — JSON-LD on every page, and `Link:` headers pointing at `/llms.txt` and `/agents.json` on every response, so a crawler that only reads headers still finds them. - **Your site's own WordPress abilities become browser tools automatically** — if your WordPress install exposes the core Abilities API (WordPress 6.9+), a signed-in visitor's own abilities are bridged into the same browser-native tool surface (WebMCP) the plugin's page tools already use — no second list to maintain, nothing to turn on. Every one of these is *generated* from your site's own published content and connected workspace — there is no template to fall out of date, and each updates automatically the moment you save a post. See the live example at [wordpress.demo.busymate.ai/llms.txt](https://wordpress.demo.busymate.ai/llms.txt) and [/agents.json](https://wordpress.demo.busymate.ai/agents.json). ## Manage from any MCP client Every step above is available from any MCP client on your own account: {{snippet:claude-code}} ## Troubleshooting - **Settings screen warns about openssl** — the site's PHP build is missing the OpenSSL extension with EC (prime256v1) support; ask your host to enable it. The widget itself still works; only signed-in visitor recognition is unavailable until then. - **The widget never appears** — check the browser console for a blocked or 404'd request to `/embed/v1.js`; a caching plugin that strips query-string-free ` ``` 3. Save. The floating widget now appears on every page and post — nothing else to configure for that part. See the live example at [ghost.demo.busymate.ai](https://ghost.demo.busymate.ai) (The Meridian Line). ## 2. Put the chat inline on a page Out of the box you get the floating widget. For an inline placement on a specific page (an About or Contact page), add an **HTML card** in Ghost's editor with the same frame the widget opens, placed in the page flow instead of a corner button: ```html ``` The live demo shows both placements at once — the floating widget and an inline card on its About page. ## 3. Teach it your content Point a [website source](https://busymate.ai/docs/guides/knowledge) at your own Ghost URL — the same crawler every connection uses, reading your published pages and posts and citing back to the page an answer came from. ## 4. Recognize signed-in members Ghost's native **Members** feature is the identified-visitor layer: register your own site (or a small backend you control) as an identity provider — see [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors) for the exact fields (issuer, JWKS URL, the launch endpoint) — then define `window.BusymateAI.getIdentity` in Code Injection **before** the embed ` ``` 3. Set it to load on the storefront, footer placement. The floating widget now appears on every storefront page — nothing else to configure for that part. This same script can also be created through the Admin API's Content Scripts resource (`POST /v3/content/scripts`) if you are scripting the install. See the reference build at [bigcommerce.demo.busymate.ai](https://bigcommerce.demo.busymate.ai) (Copperfield Kitchen Co.) — a real trial store's live catalogue and order book, read straight from the Admin API. ## 2. Or install the native app (single-click) For a one-click install instead of a pasted script, a BigCommerce app (registered on the [developer portal](https://devtools.bigcommerce.com)) can install the same loader via the Scripts API on install, and add a "Chat with your mate" widget through the Widgets API in Page Builder. This is the same OAuth single-click pattern every BigCommerce app uses — see [Connect an MCP server](https://busymate.ai/docs/guides/connect-mcp-server) for the credential shape once installed. ## 3. Teach it your catalogue Connect an MCP server reading your store's own Admin API v3 (products, categories) and orders — see [Connect an MCP server](https://busymate.ai/docs/guides/connect-mcp-server). A store-level API account (Products + Orders read scope is enough for grounded answers) is all it needs; nothing is hardcoded, every answer reflects your live stock and prices. ## 4. Recognize signed-in customers BigCommerce's **Customer Login API** identifies who is shopping. Register your own storefront (or a small backend you control) as an identity provider — see [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors) for the exact fields (issuer, JWKS URL, the launch endpoint) — then define `window.BusymateAI.getIdentity` in your Script Manager script **before** the embed ` ``` 3. Set it to load on **All pages**, placement **Body — end**. Save, then **Publish**. 4. Open the **published** page (not the Editor preview) in a private window and confirm the chat bubble appears. **On a free Wix site**, link to your hosted chat page instead — `https://.busymate.ai/chat` — from a button or the site menu. It is the same assistant, the same knowledge and the same Inbox; it opens as its own page rather than as a bubble on yours. Upgrading the site to Premium later turns the paste above on with no other change. ## 2. Teach it your content Point a [website source](https://busymate.ai/docs/guides/knowledge) at your own Wix URL — the same crawler every connection uses, reading your published pages and citing back to the page an answer came from. ## 3. Recognize signed-in visitors Wix's **Members Area** is a client-side feature (Velo's `wix-members` API), so identity has to be bridged from your site's own code rather than a server-side plugin: define `window.BusymateAI.getIdentity` (see [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors) for the exact shape) inside a Velo page/site code file, **before** the embed script runs, reading the signed-in member from `wix-members` client-side. ## Manage from any MCP client Every step above is available from any MCP client on your own account: {{snippet:claude-code}} ## Troubleshooting - **The widget never appears on a free site** — this is expected and not fixable from your side. Confirm it the same way we did: open the published page, run `performance.getEntriesByType('resource').filter(r => r.name.includes('busymate'))` in the console (empty on a free site, however the embed was added) and search the page source for `shouldLoadAllExternalScripts` — a free site reports `false`. Premium's Custom Code loads unconditionally. - **It works in the Editor preview but not on the published page** — always verify on the actual published URL; the Editor's preview runtime can differ from what a real visitor's browser does with a lazy-loaded element. - **A signed-in member is still treated as a guest** — `getIdentity` must be defined and resolved before the embed script tag runs; test it with `window.BusymateAI.getIdentity()` in the browser console. ## Verify 1. Open your published site in a private window: the chat bubble appears and answers from your own pages, with citations. 2. If you wired identity, sign in as a Wix Member and ask something only a signed-in visitor should see — the reply recognizes that visitor. 3. Ask it to hand off to a person — the conversation reaches your Inbox. ### Do I need Wix Premium? For the on-page chat bubble, yes. Wix disables third-party scripts on free `wixsite.com` sites (its own renderer flag `shouldLoadAllExternalScripts: false`), so no embed method runs there — Embed HTML, Custom Element and Velo alike. On a free site, link to your hosted chat page instead; on Premium, the Custom Code paste works on every page. ### Why does the widget sometimes take a moment to appear? The loader is `async` and the widget mounts after the page settles, so give a published page a second before deciding it isn't there. On a free plan it will never appear — see above. ### Can I recognize a signed-in Wix Member? Yes, by bridging `wix-members` to `window.BusymateAI.getIdentity` in your site's Velo code — see [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors). ## Next - **[Teach your assistant your own content](https://busymate.ai/docs/guides/knowledge)** — your Wix pages, crawled and cited. - **[Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors)** — the `getIdentity` bridge for Wix Members. - **[Set up human handoff](https://busymate.ai/docs/guides/human-handoff-setup)** — staff the Inbox before visitors start asking to talk to someone. --- --- title: "Add your mate to a Squarespace site | AI Assistant" description: "Wire the embed through a Code Block/Embed Block (or Code Injection on Business+), let it learn your pages, register a member as your identified visitor, and add page actions with WebMCP." last_updated: "2026-09-17T19:01:17+03:00" --- # Add your mate to a Squarespace site | AI Assistant Source: https://busymate.ai/docs/guides/squarespace Last modified: 2026-09-17T19:01:17+03:00 Squarespace has no plugin runtime, so AI Assistant reaches a Squarespace site through the universal embed — one script tag placed via a **Code Block** or **Embed Block** inside a page. Squarespace's own **Code Injection** (a site-wide header/footer script, the simplest path on WordPress/Ghost/BigCommerce) is a **paid-plan feature on Squarespace** — it is greyed out behind an upgrade prompt on the free trial and on the entry Personal plan, so start with the block-based path below if you're not sure which plan you're on. ## Before you start - A Squarespace site with editor access. - Know your plan: **Business plan or higher** unlocks Code Injection (Settings → Advanced → Code Injection). Below that, a Code Block or Embed Block on each page is the free-tier path. - Your site's **Site Availability** (Settings → Advanced → Developer Tools → Website Protection, or Settings → Website → Site Availability) must be Public for the embed to render for visitors — Password Protected or Private sites keep the whole page (and the embed with it) behind a gate. **On a 14-day trial, "Public" is itself paid-plan-gated** ("Upgrade to publish") — only Password Protected, Private, or (Enterprise) SSO Protected are selectable until the site is on a paid plan, independent of whether Code Injection is unlocked. Building the demo/knowledge/connector pieces below does not require publishing; a real visitor reaching the widget does. - Your workspace open in the [Console](https://busymate.ai/console). ## 1. Add the embed **If your plan has Code Injection (Business or higher):** 1. Open **Settings → Advanced → Code Injection**. 2. Paste the one script tag from your Console connection settings into **Header**: ```html ``` 3. Save. The floating widget now appears on every page — nothing else to configure for that part. **On a plan without Code Injection:** 1. Open the page you want the widget on (or repeat this on every page) in the Squarespace editor. 2. Add a **Code Block** (or an **Embed Block**, which wraps the same idea) and paste the same script tag. 3. Save and **publish the page** — a block's script only runs on the published site, not in the editor preview. Either way, the widget needs your site to be **Public** to render for a real visitor — see "Before you start" above. ## 2. Register the page's own actions (WebMCP) Alongside the embed script, a second small script can register the page's own actions — "view the class schedule," "book a session" — through the standard `document.modelContext` WebMCP surface, so the assistant can act instead of only answering. Drop it in the same Code Block/Embed Block or Code Injection panel, after the embed script tag. See [Add page actions with WebMCP](https://busymate.ai/docs/guides/page-tools) for the shape. ## 3. Teach it your content Point a [website source](https://busymate.ai/docs/guides/knowledge) at your own Squarespace site URL — the same crawler every connection uses, reading your published pages and citing back to the page an answer came from. ## 4. Recognize signed-in customers Squarespace's native **Member Areas** feature (on Business/Commerce plans) is the identified-visitor layer: register your own site (or a small backend you control) as an identity provider — see [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors) for the exact fields (issuer, JWKS URL, the launch endpoint) — then define `window.BusymateAI.getIdentity` **before** the embed ` ``` The tag is `async`: nothing on your page waits for it. Every call below is safe to make before it has loaded — commands queue and deliver once the frame is up. ## Open and preset Four calls drive the panel; two more preset what the visitor sees. Nothing is persisted by the frame: your page owns the panel's theme and language only while it embeds it. ```javascript // The loader installs window.BusymateAI. Every call is safe before the frame // has loaded — commands queue and deliver on load. BusymateAI.open(); BusymateAI.close(); BusymateAI.toggle(); BusymateAI.isOpen(); // → true | false ``` ```javascript // Preset the panel from the page: colour scheme + language. // Neither is persisted by the frame — your page owns them while it embeds it. BusymateAI.setTheme("dark"); // "light" | "dark" | "system" BusymateAI.setLocale("de"); // any BCP 47 tag the platform serves BusymateAI.setLocale(null); // unpin — the frame follows the visitor again BusymateAI.open(); ``` | Call | Does | Returns | | --- | --- | --- | | `open()` / `close()` / `toggle()` | show, hide, flip the panel | — | | `isOpen()` | the current state | `boolean` | | `setTheme(theme)` | `"light"`, `"dark"` or `"system"` (hands the choice back to the visitor's browser) | `false` on any other value | | `setLocale(tag)` | a BCP 47 tag the platform serves; `setLocale(null)` unpins it — the frame follows the visitor again | `false` on a malformed tag | ## Page to chat `ask(text)` opens the panel and delivers the prompt to the frame's own composer path — the same append a typed message takes, never a synthetic key press — so every guard the frame applies to a typed message applies here too. Add `{ submit: false }` to fill the composer and let the visitor press send. ```javascript // Open the panel and send a prompt — the same append path a typed message takes. BusymateAI.ask("What can you do on this page?"); ``` ```javascript // Fill the composer only; the visitor reads, edits and presses send. BusymateAI.ask("Book a table for two on Friday at 19:00", { submit: false }); ``` ```html ``` `ask` returns `false` for empty text and `true` otherwise. Calls made before the frame loads queue, eight at most, oldest dropped first. A curated "try this" prompt is the same call — the playground's example prompts are nothing more: ```javascript // Every example prompt on this page is one call — the same call your // own "try it" buttons make. BusymateAI.ask("Compare the plans and recommend one for a two-person shop."); ``` ## Chat to page The frame posts messages to your page. The launcher already acts on every one of them — collapses the panel, opens a new tab, navigates in place — so your page listens only to observe. Check `event.origin` against the assistant's origin, then read `type`. ```javascript // The frame posts busymate.ai.v1.* messages to your page. The loader already // acts on every one of them; your page only listens to OBSERVE. window.addEventListener("message", (event) => { if (event.origin !== "https://busymate.ai") return; const { type, ...data } = event.data ?? {}; if (typeof type !== "string" || !type.startsWith("busymate.ai.v1.")) return; console.log(type, data); // busymate.ai.v1.ready { visitorKind, displayClaims } a session is live // busymate.ai.v1.close — ✕ pressed inside the frame // busymate.ai.v1.navigate { href } a same-origin link was clicked // busymate.ai.v1.open_url { url } any other link (new tab) // busymate.ai.v1.resize_to { w, h } resize_end resize_by { dw, dh } }); ``` | `type` | Payload | When | | --- | --- | --- | | `busymate.ai.v1.ready` | `visitorKind`, `displayClaims` | a session is live — anonymous or recognised | | `busymate.ai.v1.close` | — | the ✕ inside the frame was pressed | | `busymate.ai.v1.navigate` | `href` | a link on your own origin was clicked in a reply | | `busymate.ai.v1.open_url` | `url` | any other link (the launcher opens a new tab) | | `busymate.ai.v1.resize_to` / `resize_end` / `resize_by` | `w, h` / — / `dw, dh` | the visitor is resizing the panel by its corner | | `busymate.ai.v1.identity_request` / `auth_request` | — / `url` | the identity handshake (Identity, below) | ### Same-site navigation A link in a reply that points at your own origin navigates your page in place — same tab, the conversation intact. The launcher pushes the new URL, dispatches `popstate` for any router built on the History API, and dispatches a dedicated `busymate:hostnavigate` event for a page that has no router at all. A page that changes nothing within a short window is treated as static and reloaded normally; the panel's open state and the conversation both survive that. ```javascript // A same-origin link in the chat navigates YOUR page in place (same tab). // SPA routers already listening for popstate resync on their own; this // dedicated event needs no router at all. window.addEventListener("busymate:hostnavigate", (event) => { const { href } = event.detail; myRouter.push(new URL(href).pathname); }); ``` ### Open state The panel's state lives on the launcher's DOM — `[data-support-chat][data-open]` on the layer and `aria-expanded` on the button — so a page can react to it without any message at all. ```javascript // The panel's open state lives on the launcher's DOM — observe it directly. const layer = document.querySelector("[data-support-chat]"); new MutationObserver(() => { const open = layer.hasAttribute("data-open"); document.body.classList.toggle("assistant-open", open); }).observe(layer, { attributes: true, attributeFilter: ["data-open"] }); ``` ## Page tools, both ways Your page declares what it can do; the assistant does it in the visitor's own session. One registration reaches both transports — the browser's WebMCP where the engine has it, the assistant's own bridge in every other browser and in apps — and the same tools appear on the **standard surface**, `document.modelContext`, where any agent can find them. ```javascript // Declare what THIS page can do. One call, both transports: the browser's // own WebMCP where it exists, the assistant's bridge everywhere else. BusymateAI.registerPageTools([ { name: "set_page_theme", description: "Switch this page between light and dark.", inputSchema: { type: "object", properties: { theme: { type: "string", enum: ["light", "dark"], description: "The scheme to apply" } }, required: ["theme"], additionalProperties: false, }, annotations: { readOnlyHint: false, consequentialHint: true }, execute: async ({ theme }) => { // Flip through your OWN theme mechanism (whatever sets color-scheme / // your CSS variables) so every other themed control on the page agrees // with what this tool just did — never write the DOM attribute alone. const applied = theme === "light" || theme === "dark"; if (applied) myApplyTheme(theme); // Return the RESULTING state, not just "ok": a caller with no applied // flag to check against will report success it never confirmed. return { ok: applied, applied, theme }; }, }, { name: "get_cart", description: "Read what is in the visitor's cart right now.", inputSchema: { type: "object", properties: {}, additionalProperties: false }, annotations: { readOnlyHint: true }, execute: async () => ({ items: cart.items, total: cart.total }), }, ]); ``` ```javascript // The same tools are on the STANDARD surface — any agent, not only ours. const tools = await document.modelContext.getTools(); tools.map((t) => t.name); // → ["set_page_theme", "get_cart", …] ``` A tool marked `readOnlyHint: true` runs when the assistant needs it. Anything else asks the visitor first, as a card inside the chat, before the page changes — your `execute` is not called until they agree. Tools are visible only to the origins you name in `exposedTo`; the default is the assistant's origin. The full guide is [Let the assistant use your page](https://busymate.ai/docs/guides/page-tools); forms you already have can be declared without any JavaScript, and a tool can answer with a [form card](https://busymate.ai/docs/guides/form-cards) instead of a sentence. ## The MCP server behind the chat Behind the assistant sits your workspace's Model Context Protocol server: the tools it calls to answer, and any other agent can discover, over JSON-RPC — its `tools/list` is open before any sign-in. ```javascript // What the assistant on this page can call: the workspace's MCP server, // discoverable before any sign-in (JSON-RPC over HTTP). const res = await fetch("https://busymate.ai/mcp", { method: "POST", headers: { "content-type": "application/json", accept: "application/json" }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/list" }), }); const { result } = await res.json(); result.tools.map((t) => t.name); ``` A prompt from the page that needs one of those tools makes the assistant call it; nothing on the page speaks MCP itself. ```javascript // From the page, a prompt that makes the assistant call one of those tools. BusymateAI.ask("Is the platform up right now? Check the status."); ``` Your own systems join the same server through the Console — [Connect your MCP server](https://busymate.ai/docs/guides/connect-mcp-server) — and every tool you add there is reachable from the widget, the full page and every channel alike. ## Identity A visitor signed in to your product is recognised in the chat automatically. Your backend mints a short-lived, one-time `{ token, nonce }` proof; the launcher asks for it through `getIdentity` when the frame launches, and again on `refreshIdentity()` after your login, logout or account switch. Nothing secret crosses the page: the proof is single-use and the private key never leaves your server. ```javascript // Auto-connect: when the visitor is signed in to YOUR product, the chat // knows who they are. Your backend mints a short-lived, one-time proof. // Add getIdentity ONTO the object — never assign a fresh one to // window.BusymateAI: the loader installs every call on THAT object, so // replacing it takes open(), ask() and refreshIdentity() with it. window.BusymateAI = window.BusymateAI || {}; window.BusymateAI.getIdentity = async () => { const r = await fetch("/api/assistant-identity", { method: "POST", credentials: "include" }); return r.status === 401 ? null : r.json(); // { token, nonce } or anonymous }; // Declaring it after the tag already loaded? Hand it over instead: BusymateAI.configure({ getIdentity: window.BusymateAI.getIdentity }); // After YOUR login / logout / account switch: BusymateAI.refreshIdentity(); ``` ```javascript // Auth that hydrates AFTER the chat launched anonymously — hand it over late. BusymateAI.identify({ token, nonce }); // remounts as an identified launch ``` ```javascript // The frame tells the page which kind of visitor the session is for. window.addEventListener("message", (event) => { if (event.origin !== "https://busymate.ai" || event.data?.type !== "busymate.ai.v1.ready") return; console.log(event.data.visitorKind, event.data.displayClaims); // "anonymous" | "identified", { name?, … } }); ``` `hostedUrl(base)` and `openHosted(base)` carry the same proof into the full-page experience. Keys, the mint endpoint and the acceptance checklist are in [Recognize signed-in customers](https://busymate.ai/docs/guides/identified-visitors). A visitor who is not signed in can sign in inside the chat, on your own accounts, through the `sign_in` widget tool — [Let your users sign in from the chat](https://busymate.ai/docs/guides/in-chat-sign-in) describes that contract; nothing here duplicates it. ## The full page and the apps Every workspace has its own address for the same conversation without the panel — the launcher builds it with the visitor's identity attached. ```javascript // The same assistant as a full page. For an ANONYMOUS visitor that is a // plain link — the workspace address is public. window.open("https://your-workspace-slug.busymate.ai/", "_blank", "noopener,noreferrer"); // To carry an IDENTIFIED visitor across (a different top-level site cannot // read this page's storage), ask the loader to mint the hand-off. Both calls // REJECT unless the getIdentity provider above is configured. const url = await BusymateAI.hostedUrl("https://your-workspace-slug.busymate.ai/"); BusymateAI.openHosted("https://your-workspace-slug.busymate.ai/"); // new tab, same visitor ``` iOS and Android load that hosted page in a WebView and bridge identity, theme and language over the same message names, through a native handler instead of `postMessage` — [Mobile in-app support](https://busymate.ai/docs/guides/mobile-in-app-support). ## Security - **Origins.** The frame launches only on the origins your workspace allows; a page on any other origin gets a refused launch, not a wrongly branded panel. Every message between launcher and frame is pinned to the frame's window and the assistant's exact origin — never `*`. - **Framing.** The launcher's `