MCP server for AI assistants

Incogniton runs a hosted Model Context Protocol (MCP) server. Connect an AI assistant to it, such as Claude Code, Claude Desktop, Cursor, VS Code or Windsurf, and the assistant can search, create and edit your profiles, proxies, groups and tags, and launch and stop profiles in your Incogniton desktop app.

Unlike the local automation API, the MCP server runs in the cloud and works with your Incogniton account through a personal token. When the assistant launches a profile, the request goes to your desktop app, which must be running and logged in.

MCP manages and launches profiles, but it doesn't browse: there are no tools to open pages, click or read content. To work inside a page, attach Playwright or Puppeteer to the cdp_url that a launch returns, as shown in Launch a profile and attach Playwright.

Get a token

In the Incogniton app, go to My Account → Settings → MCP Token and click Generate Token. The token starts with mcp_live_.

Treat the token like a password: anyone who has it can create, change, delete and launch your profiles. Keep it in your MCP client's config, never in code or chat. If it leaks, generate a new one in the app; the old one stops working.

Connect your AI client

Every client runs the stdio bridge @incogniton/mcp through npx (Node.js 18 or later). The bridge forwards requests to https://v5api.incogniton.com/mcp. Replace mcp_live_YOUR_TOKEN with your token.

Add the Incogniton MCP server

claude mcp add incogniton --scope user --env INCOGNITON_MCP_TOKEN=mcp_live_YOUR_TOKEN -- npx -y @incogniton/mcp

For Claude Desktop, Cursor and Windsurf, add the JSON to the client's MCP config file, for example claude_desktop_config.json for Claude Desktop or ~/.cursor/mcp.json for Cursor. For VS Code, add it to .vscode/mcp.json in your workspace. The Incogniton app can also generate these snippets with your token already filled in, under Settings → Automation → MCP.

To check that the bridge can reach the server, run:

Terminal

npx -y @incogniton/mcp --health

Then restart your AI client. The Incogniton tools appear in its tool list.

Tools

The server provides 19 tools:

AreaToolsNotes
Profilessearch_profiles, create_profiles, edit_profile, clone_profilecreate_profiles needs only profile_names; proxy, fingerprint, group and tags are optional
Proxiessearch_proxies, create_proxiescreate_proxies needs proxy_urls and proxy_schemes
Organisationsearch_profile_groups, create_profile_groups, search_proxy_groups, create_proxy_groups, search_tags, create_tags, search_team_members
Helpersget_all_creation_info, get_profile_languagesList the groups, tags, proxies and language codes you can use when creating profiles
Launchingget_eligible_sessions, launch_profile, get_launch_status, stop_profileSee Launch a profile and attach Playwright

Tool results are written for the model: usually a sentence followed by a JSON block. If you call the tools from your own code, parse the JSON block. The automation examples repository has a helper for this, extractJson.

Launch a profile and attach Playwright

  1. Launch. Call launch_profile with the profile's profile_browser_ID. This creates a launch request, which your desktop app picks up within seconds. The request expires after timeout_seconds (30 to 300, default 300).
  2. Get the DevTools URL. Call get_launch_status with the same profile_browser_ID. When your request is LAUNCHED and the browser is still running, its entry has a cdp_url, for example http://127.0.0.1:55923. If it doesn't, cdp_unavailable_reason says why (for example, the browser was closed). Query by profile, not by request_id: by request id, the tool returns a text summary without cdp_url.
  3. Attach Playwright or Puppeteer to the cdp_url. In Playwright, use the profile's own context, browser.contexts()[0], so its cookies and storage are there.
  4. Stop. Close the browser over CDP with Browser.close, as in the snippet below. Alternatively, call stop_profile, which works only for profiles launched through MCP. It returns a stop request id; poll get_launch_status with include_stop_requests until that stop request is STOPPED, and match on the stop request's own id rather than the launch's.

Attach to a profile launched through MCP

import { chromium } from 'playwright'

// cdpUrl: the cdp_url from get_launch_status
const browser = await chromium.connectOverCDP(cdpUrl)

// The profile's own context, with its cookies and storage.
// browser.newContext() would start an empty one.
const context = browser.contexts()[0]
const page = await context.newPage()
await page.goto('https://example.com')

// Close the browser itself; browser.close() would only disconnect.
const cdp = await browser.newBrowserCDPSession()
await cdp.send('Browser.close')

Closing over CDP is the safer way to stop: current app versions terminate the browser on stop_profile, which can lose cookies and localStorage written in the last few seconds. A normal close doesn't.

If your account has more than one logged-in desktop session, launch_profile doesn't launch. It asks for a target_session_id instead. List the sessions with get_eligible_sessions. Device names can show as "Unknown Device", and a launch sent to another session opens the profile on that device. This computer's session id is in the Incogniton app log, on the line authenticated successfully (session_id=...).

cdp_url is a loopback address on the computer that runs the Incogniton app, and its port changes on every launch. Only code running on that same computer can connect to it: Claude Code or a script in a terminal there works, Claude Desktop on another computer doesn't. Returning cdp_url also needs a desktop app version that reports the DevTools port for MCP launches. With older versions, launching and stopping work, but get_launch_status returns only cdp_unavailable_reason.

A complete, runnable version of this flow is the launch-with-mcp-and-attach-playwright example in the automation examples repository. For how profiles keep cookies and storage between runs, see Lifecycle and persistence.

Example prompts

These work in any MCP client. The tools in brackets are the ones the assistant is expected to call.

  • "Create 3 profiles called shop-1 to shop-3 in the group Shops, Windows, latest browser." [search_profile_groups → create_profiles]
  • "Which profiles use the proxy at 203.0.113.10?" [search_proxies → search_profiles]
  • "Clone the profile shop-1 twice." [search_profiles → clone_profile]
  • "Launch shop-1 on this computer and give me its DevTools URL." [search_profiles → launch_profile → get_launch_status]
  • "Stop shop-1." [stop_profile → get_launch_status]

For work inside pages, a coding agent on the same computer, such as Claude Code, can take the cdp_url and run Playwright, as in the snippet above.

Troubleshooting

SymptomCauseFix
The tools don't appear in the clientThe bridge didn't start, or the token is missingRun npx -y @incogniton/mcp --health, check INCOGNITON_MCP_TOKEN in the client config, and restart the client
401 or 403 from the serverThe token was revoked or mistypedGenerate a new token in the app
The launch stays PENDING, then EXPIREDThe target session's app isn't running or logged in, or the session is on another deviceStart the app on that computer, or target this computer's session
LAUNCHED, but no cdp_urlThe browser is already closed, or the app exposes no DevTools port for itRead cdp_unavailable_reason, allow browser remote control in the app, or update the app
Connection refused on cdp_urlThe connecting code runs on a different computer, or the browser closedRun the code on the computer with the Incogniton app, and check get_launch_status again
stop_profile says the profile wasn't launched through MCPIt was opened from the app or the local APIClose it in the app, or stop it with the local API

Next Steps

Was this page helpful?