API & MCP
Monti Browser serves a local automation API and an MCP server, so Claude, Codex, or any client can drive real browser sessions. The same 39 capabilities are reachable as MCP tools or over HTTP.
Base URL & auth
Served on loopback by the desktop app (never reachable off the machine). Every request needs an API key from Monti Browser (Settings → API), sent as a bearer token.
curl -s -X POST "http://127.0.0.1:39219/v1/profiles/launch-automation" \
-H "Authorization: Bearer $MONTI_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"profileId":"<id>"}'Connect Claude or Codex (MCP)
Register the monti MCP server; its tools mirror the HTTP API plus live page control.
{ "mcpServers": { "monti": { "command": "monti-gate", "args": ["mcp"] } } }All 39 tools
Profiles
monti_list_profilesGET /v1/profilesList profiles (optional ?folder=<id>).
monti_get_profilePOST /v1/profiles/getRead one profile: proxy, status, tags, folder, fingerprint.
monti_create_profilePOST /v1/profiles/createCreate a profile.
monti_update_profilePOST /v1/profiles/updateUpdate name, status, tags, colour, avatar, folder, proxy mode, start URL or launch automation.
monti_update_fingerprintPOST /v1/profiles/update-fingerprintRe-roll or override a profile's fingerprint.
monti_delete_profilePOST /v1/profiles/deleteMove a profile to Trash (permanent:true to purge).
monti_profile_notesPOST /v1/profiles/notesRead a profile's notes, newest first.
monti_add_profile_notePOST /v1/profiles/notes/addAppend a note to a profile.
monti_launch_profilePOST /v1/profiles/launch-automationOpen a profile for automation; returns its CDP url. Reuses a running session unless relaunch is set.
monti_profile_sessionPOST /v1/profiles/cdpWhere a running profile's CDP endpoint is, without launching it.
monti_close_profilePOST /v1/profiles/close-automationClose a session this key opened.
Proxies
monti_list_proxiesGET /v1/proxiesList the proxies in the account's library.
monti_assign_proxyPOST /v1/profiles/assign-proxyPut a profile on a proxy from the library.
monti_check_proxyPOST /v1/proxies/checkCheck a proxy's reachability and egress IP.
Driving a page
MCP tools that drive an open session over CDP — they resolve a port through /v1/profiles/cdp, so they have no REST route of their own.
monti_list_tabsMCP toolList the open pages in a running profile.
monti_navigateMCP toolPoint the active page at a URL and wait for it to settle.
monti_read_pageMCP toolRead a page's visible text — whole body or by CSS selector.
monti_screenshotMCP toolCapture a screenshot of a running page.
monti_evalMCP toolEvaluate JavaScript in the context of a running page.
Automations
monti_list_automationsGET /v1/automationsList the org's automations, with step counts.
monti_automation_schemaGET /v1/automations/schemaThe step catalogue: every step type, its fields, and how they validate. Read this before authoring one.
monti_get_automationPOST /v1/automations/getRead one automation, including its full step tree.
monti_create_automationPOST /v1/automations/createCreate an automation. Steps are validated before anything is stored.
monti_update_automationPOST /v1/automations/updateChange an automation's name, description, steps or wiring.
monti_delete_automationPOST /v1/automations/deleteMove an automation to Trash.
monti_run_automationPOST /v1/automations/runRun an automation against a profile, launching it if needed.
monti_automation_runsPOST /v1/automations/runsRecent runs of one automation, with status and errors.
Connectors
monti_list_connectorsGET /v1/connectorsThe workspace's connectors, and the field list of every kind.
monti_create_connectorPOST /v1/connectors/createAdd a connector (owner-only).
monti_update_connectorPOST /v1/connectors/updateRename a connector, change its config, or make it the default.
monti_delete_connectorPOST /v1/connectors/deleteDelete a connector.
monti_test_connectorPOST /v1/connectors/testSend a real test message, or a one-word AI completion.
Workspace & notifications
monti_list_foldersGET /v1/foldersThe folders profiles, proxies, cookie sets and automations are filed in.
monti_list_statusesGET /v1/statusesEvery status label a profile, proxy or cookie set can carry.
monti_table_columnsGET /v1/tables/columnsWhat each table shows, and every column it could show.
monti_set_table_columnsPOST /v1/tables/columnsShow or hide columns on a table.
monti_telegram_statusGET /v1/telegramWhether the notification bot is set up, and who is subscribed.
monti_set_telegram_prefPOST /v1/telegram/prefSubscribe the signed-in user to one automation's outcomes.
monti_set_telegram_botPOST /v1/telegram/botSet the workspace's notification bot (owner-only).
Example: create and run an automation
#!/usr/bin/env node
// Monti Browser automation API example. Keep Monti Browser open and signed in.
const BASE_URL = "http://127.0.0.1:39219";
const TOKEN = process.env.MONTI_API_TOKEN; // create in Settings -> API
async function monti(method, path, body) {
const res = await fetch(BASE_URL + path, {
method,
headers: { Authorization: "Bearer " + TOKEN, "Content-Type": "application/json" },
body: body ? JSON.stringify(body) : undefined,
});
const text = await res.text();
if (!res.ok) throw new Error(method + " " + path + " -> " + res.status + " " + text);
return text ? JSON.parse(text) : null;
}
async function main() {
const { profiles } = await monti("GET", "/v1/profiles");
const profile = profiles[0];
if (!profile) throw new Error("Create a profile in Monti Browser first.");
// Learn the step vocabulary, then create + run an automation.
await monti("GET", "/v1/automations/schema");
const { automation } = await monti("POST", "/v1/automations/create", {
name: "Read a heading",
steps: [
{ id: "s1", type: "goto", url: "https://example.com" },
{ id: "s2", type: "waitFor", for: "selector", selector: "h1" },
{ id: "s3", type: "extract", selector: "h1", what: "text", into: "heading" },
],
});
const run = await monti("POST", "/v1/automations/run", {
automationId: automation.id,
profileId: profile.id,
});
console.log("Run started:", run.runId);
}
main().catch((e) => { console.error(e); process.exit(1); });Notes for agents
- Read
GET /v1/automations/schemabefore authoring a step tree — field names aren't guessable and the server rejects an invalid tree, naming the exact path that failed. - Every step needs a unique
idyou supply; don't reuse one. - A key may be scoped to folders. A
403means the key can't see that profile (or can't write org-wide automations) — don't retry. - Read the token from
MONTI_API_TOKEN; never hardcode it. Launched profiles are anonymous — never pass them credentials. - Profile ids are also on-disk directory names — treat them as immutable.
API access is included on the Team and Enterprise plans. Download Monti Browser to create a key.