Skip to main content
Bolt builds your frontend in a browser WebContainer. Connect it to Xano’s MCP server and the same agent also authors your backend as XanoTS — tables, APIs, functions, triggers — and ships it with npx xanots deploy, without you pasting an API key. The MCP server never runs the CLI. It hands the agent the exact command to run and mints a short-lived credential to run it with; Bolt runs the command in its own WebContainer.
Using Lovable instead? It has its own Xano connector, which handles OAuth through Lovable’s gateway and preloads the knowledge files rather than serving them as tools — see Lovable.

Add the connector

1

Open Bolt's connector settings

Add a custom connector.
2

Point it at the XanoTS mount

The path matters. https://mcp.xano.com (no path) serves Xano’s general developer tooling — XanoScript validation, the Meta API, observability. The XanoTS release tools live on /xanots.
3

Authorize

There is no key to paste. Bolt discovers Xano’s authorization server from /.well-known/oauth-protected-resource, opens Xano’s consent screen, and you sign in.At the consent screen you pick an instance and a workspace. That choice is baked into the token — every credential the connector mints later is bound to it, and the agent cannot deploy anywhere else. Pick a different workspace by reconnecting.
4

Check the tools are live

Bolt discovers the tools automatically and enables them all by default. Ask the agent to run xanots_whoami; it reports the workspace you are acting on and confirms Xano is reachable.

What the agent gets

Six tools, all prefixed xanots_: These cover reaching Xano and deploying — deliberately not authoring. The authoring documentation ships inside the installed package, and the agent reads it from node_modules/@xanots/sdk/llms.txt. See Coverage & agent grounding.

How a deploy runs

The agent asks for the command first and the credential second. That order is deliberate: the credential’s lifetime is measured in minutes and building the command spends none of it. xanots_cli_token returns three values, which the agent passes to the CLI process only:
XANO_META_TOKEN is the secret. It is short-lived by design — it is never written to .env, project source, or Git, and it is discarded when the command finishes. If a run fails on authentication, the fix is minting a fresh credential, not a longer-lived one. XANO_INSTANCE_URL and XANO_WORKSPACE_ID are not secrets and are safe to write into project configuration.
Mints are rate-limited per user. An agent that loops on minting will be told to wait rather than served a stream of credentials.

Ephemeral by default

A deploy goes to an ephemeral environment unless you say otherwise — a disposable tenant with its own URL and its own database, expiring on its own. Nothing that already exists is touched, so a mistake costs a redeploy. A release merges into your real workspace and overwrites what is live there. Because of that, the connector may have releases disabled — xanots_deploy_command then refuses to produce a release command and says so. The agent is told not to work around that refusal by assembling the command by hand or running a package.json script that performs one.

Pointing the frontend at the backend

Bolt serves the frontend itself, so nothing injects window.XANO_HOST the way Xano’s own static hosting does. Set the backend URL as a build-time variable instead — on a Vite frontend:
XanoTS frontends resolve the host in this order, so the variable is used when the injected global is absent:
An ephemeral environment answers only at its tenant-scoped URL — https://<instance>.xano.io/tenant/<name>, including the /tenant/<name> segment. Take it verbatim from what the CLI printed for that deploy, not from instance_url; the bare instance URL reaches a different environment or 404s. Ephemeral URLs change, so re-read it after any deploy that may have created a new environment.
Stored files have the same trap: a file column’s own url addresses the instance host without the tenant segment. Build file URLs from the file’s path and the same HOSTfileUrl(row.avatar, HOST) from @xanots/sdk. See The typed frontend surface.

When something fails

Tool names are a public interface and Bolt remembers which tools you enabled, so they are added to, never renamed.