Before We Begin
Gather the following information about the MCP server you built in Xano — you’ll need it regardless of client. Connecting to the instance-level Xano MCP Server instead? Its URL and token come from a different place; grab them there, then pick your client below.1
Name
This is just a name you want to give your MCP server. Make sure it is unique to other MCP servers you’re using, and is human readable so you can easily keep track of what each server does.
2
URL
Every MCP server in the workspace is listed in one place. Click Connect this backend at the top left of the page, choose MCP Server URLs, and click the icon next to the server you want. Expand the row to see its URLs — use the streaming one.Working inside the MCP servers area already? From the sidebar, Agents & MCP → MCP Servers, then click Connection URL on the server’s card and copy the one under Streaming. The same panel offers an SSE URL, marked Deprecated — don’t use it.
SSE as a connection method has entered deprecation as of release 2.5 and will be fully sunset in the upcoming release 2.6. Per the official MCP SDK, you should be using streaming exclusively going forward.
3
Token
The token for your MCP server is generated the same way your other auth tokens are generated, usually as part of your
signup and login API logic.Most clients authenticate to Xano MCP servers with a Bearer token sent in an
Authorization header. Clients that can’t send one — Claude Web, Claude mobile, ChatGPT, and Microsoft 365 Copilot MCP plugins — need a real OAuth layer in front of your server. See Add OAuth to a Xano MCP server.Every setup on this page uses one shared token, so Xano sees a single identity no matter who is asking. It’s a fine basic gate for you or your team. If each user needs to arrive as themselves — so your tools can scope data to whoever is actually calling — you want OAuth too, whatever your client is capable of sending.Claude Code
Claude Desktop
Claude Web / Mobile
Cursor
Windsurf
Antigravity
VS Code
Raycast
Warp
Claude Code
In your terminal, run the following command, replacing<name>, <url>, and <token> with your server’s details:
Claude Desktop
Claude Desktop’s Add custom connector dialog takes a name and a URL but has no field for anAuthorization header. The desktop app also reads a local config file, though, and that route does support headers — you bridge the remote server to stdio with mcp-remote, which injects the header for you. Requires Node.js.
1
Open your config file
Go to Settings > Developer and click Edit Config, or open it directly:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
2
Add an entry for your MCP server
Put the token in
env rather than inline in args. On Windows, spaces inside args aren’t escaped when Claude Desktop invokes npx, which mangles Authorization: Bearer … — writing the header as Authorization:${AUTH_HEADER} with no space around the colon avoids it, and works on macOS too.3
Restart Claude Desktop
Quit the app completely and reopen it. Your tools appear under Connectors. If the server doesn’t show up, check
~/Library/Logs/Claude/mcp*.log (macOS) or %APPDATA%\Claude\logs (Windows).This is one shared token for whoever is sitting at that machine, the same as every other client on this page. If you want each user to arrive as themselves, use the connector dialog with OAuth instead — that’s also the only option on Claude Web and mobile.
Claude Web and Mobile
These have no config file — Add custom connector is the only way in, and it takes a name and a URL with no field for anAuthorization header. Putting the token in the URL doesn’t work either: Claude runs an OAuth handshake for every custom connector, and a Xano MCP server has no authorization server to hand it off to, so you land on a consent page that can’t complete.
What these clients need is a small OAuth layer in front of your server. That’s a separate guide, and it’s mostly agent-driven — you supply two URLs and a couple of clicks in Xano.
Add OAuth to a Xano MCP server
Front your MCP server with a Cloudflare Worker that speaks OAuth 2.1. You get a plain
/mcp URL, no token anywhere in it, and every request carrying the signed-in user’s own identity in $auth.Cursor
Cursor supports one-click MCP server installation via install links, with your token sent as anAuthorization header. Use the generator below to create yours.
Windsurf
1
Access your Windsurf settings
Head to Windsurf Settings > Cascade and click MCP Marketplace.Click the icon to access your
mcp_config.json file directly.2
Add an entry for your MCP server
Use the generator below to get the correct JSON.
Antigravity
1
Access your Antigravity MCP settings
- Open the MCP store via the ”…” dropdown at the top of the editor’s agent panel.
- Click on “Manage MCP Servers”
- Click on “View raw config”
- Modify the mcp_config.json with your custom MCP server configuration.
2
Add an entry for your MCP server
Use the generator below to get the correct JSON.
VS Code
These instructions may work for other VS Code-based IDEs, but we recommend consulting that client’s official documentation for more specific instructions. Per-project: Create or open.vscode/mcp.json in your workspace and add the configuration generated below.
Across multiple projects:
- Run the MCP: Open User Configuration command, which opens the
mcp.jsonfile for your user profile. Add the configuration generated below.
Raycast
Raycast connects to remote MCP servers through its built-in Install MCP Server form, which supports custom HTTP headers. Native MCP support requires Raycast 1.98 or later.- Run the Install MCP Server command, or run Manage MCP Servers and choose Install New Server.
- Set Transport to HTTP and enter your MCP server’s URL.
- Under HTTP Headers, add a header with the key
Authorizationand the valueBearer <token>. Leave the OAuth fields empty — Xano MCP servers authenticate with a static bearer token, not OAuth. - Press ⌘ + Enter to install. Raycast connects to the server and loads its tools, which you can then @-mention in AI Chat.
Warp
- Access Warp Drive and click MCP Servers in your Personal settings.
- Click + Add and add the configuration generated below.
Other header-capable clients
These clients all accept a Bearer token in anAuthorization header — they just configure it differently. Point them at your streaming connection URL and set the header where the table says.
Windsurf has been renamed Devin Desktop, and its config key is
serverUrl, not url — the Windsurf instructions above still apply.
Validating a token in the URL
If you control the client, you can skip headers entirely: put a token in the URL and validate it yourself with an MCP server trigger. This gives you a shared gate on the connection rather than per-user identity.1
Get your server's streaming connection URL
Retrieve the streaming connection URL for your MCP server (see Before We Begin). It looks like this, with
mcp appearing twice:https://your-instance.xano.io/x2/mcp/{server-id}/mcp/streaming2
Put your token in the URL
Replace the second
mcp with your token:https://your-instance.xano.io/x2/mcp/{server-id}/{token}/streamingThis is the value you paste into the client’s Add custom connector URL field. Server-side, the token is exposed as the token variable.3
Do not enable native authentication on your tools in Xano
Native MCP authentication expects an
Authorization header, which is exactly what this approach avoids sending. Leave Authentication turned off on the tools — you can enforce access with middleware or a trigger instead, so an unauthenticated client can’t reach your tools without a valid URL token.4
Validate the token with an MCP server trigger or middleware
Add an MCP server trigger that runs on connection and rejects anyone whose URL token isn’t valid. The token arrives on the trigger’s special
toolset object as toolset.token. If the trigger throws an accessdenied error, the connection is refused and no tools run.On a valid token, the trigger must return the toolset and tools objects — that’s what hands the available tools back to the client — so pass them through unchanged once the check passes.You can also use middleware for more precise control over the user experience, but triggers are a better option if you have a mix of tools that do and do not require auth.Please note that if a tool is not using native authentication, it will appear in the list of tools when connected to the MCP server (unless modified via a trigger). We recommend if at all possible, use headers instead.