Docs · Connect an agent

Cursor, Windsurf, Cline

These take one block of JSON. Same endpoint, same token, same shape in all three.

The block

Mint a token on the dashboard's Tokens page and put it where tt_live_… is:

mcp.json
{
  "mcpServers": {
    "browser": {
      "type": "http",
      "url": "https://tabtunnel.dev/v1/mcp",
      "headers": { "Authorization": "Bearer tt_live_…" }
    }
  }
}

browser is the name the editor will show; call it what you like. Some builds spell the transport key "transport" rather than "type", and some accept both — if the editor rejects the block, that is the field to try.

Where the file goes

Each editor keeps its own, and most offer both a global one and a per-project one. Look for MCP in the editor's settings — there is usually a button that opens the file for you, which is more reliable than a path, because the paths move between versions and platforms.

Choose the per-project file only if you mean it. The block above contains a working credential, so a per-project mcp.json that gets committed puts your token in the repository. Add it to .gitignore first, or use the global file.

Check it worked

Reload the editor's MCP servers — most need it, and a stale config is the most common reason a correct block appears not to work. Then ask the assistant to list your browsers; your machine should come back by the name you gave it during setup. The first command against an idle browser waits a few seconds while it is pulled up.

A 401 means the token is wrong, revoked or expired — those are one answer on purpose. An empty list means no browser is enrolled in that token's organization.

Next: what it can do.

Is something here wrong, or missing? Tell us.