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
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 prefixedxanots_:
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 injectswindow.XANO_HOST the way Xano’s own static hosting does. Set the backend URL as a build-time variable instead — on a Vite frontend:
url addresses the instance host without the tenant segment. Build file URLs from the file’s path and the same HOST — fileUrl(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.