{
  "name": "Browz MCP tools",
  "description": "Every tool the Browz MCP servers offer. The local server ships in the Browz app and drives profiles on this computer; the remote server relays a cloud agent's calls to a computer with Remote control on. Both use the same tool names.",
  "documentation": "https://gobrowz.com/docs/ai-agents",
  "servers": {
    "local": {
      "transports": [
        "stdio",
        "streamable-http (loopback only)"
      ],
      "install": [
        "npx -y @browz/mcp",
        "claude mcp add browz -- npx -y @browz/mcp",
        "/Applications/Browz.app/Contents/Resources/browz-mcp"
      ],
      "http": {
        "url": "http://127.0.0.1:50334/mcp",
        "start": "npx -y @browz/mcp --http",
        "auth": "Authorization: Bearer <contents of <data dir>/mcp-http-token>"
      },
      "auth": "stdio needs no token: the server reads the app's own credentials from the data folder.",
      "protocolVersions": [
        "2025-06-18",
        "2025-03-26",
        "2024-11-05"
      ]
    },
    "remote": {
      "url": "https://mcp.gobrowz.com/mcp",
      "transports": [
        "streamable-http"
      ],
      "auth": "OAuth 2.1 (the client signs in with a Browz account), or a Browz agent token as a bearer token.",
      "commonArguments": {
        "deviceId": "Which computer to use (from browz_devices_list). Needed only when more than one is online.",
        "workspaceId": "Workspace id. Needed only for tokens of people in more than one workspace."
      },
      "arguments": "Each tool's inputSchema is the local server's. Where the remote server differs, remoteOnlyArguments lists what only it accepts (browz_request_human's handoffId and cancel, for its one-minute calls) and localOnlyArguments what it does not accept.",
      "note": "Remote tools leave out cookies, JavaScript and downloads, and browz_act has no upload. Their input limits can be tighter than the local ones.",
      "protocolVersions": [
        "2025-06-18",
        "2025-03-26"
      ]
    }
  },
  "loop": [
    "browz_profile_list or browz_profile_create",
    "browz_profile_start",
    "browz_navigate",
    "browz_snapshot",
    "browz_act",
    "browz_wait",
    "browz_screenshot",
    "browz_session_end"
  ],
  "tools": [
    {
      "name": "browz_profile_list",
      "title": "List profiles",
      "description": "List all browser profiles with their id, name, group, tags and last-used time. Start here to find a profile's id.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "title": "List profiles",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:profiles:read"
    },
    {
      "name": "browz_profile_create",
      "title": "Create profile",
      "description": "Create a profile. Each profile gets its own consistent, isolated fingerprint. Pass proxyId (from browz_proxy_list) to give it a proxy exit; without one it uses this machine's IP, which links it to every other unproxied profile.",
      "inputSchema": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Profile name"
          },
          "proxyId": {
            "type": "string",
            "description": "Pool id from browz_proxy_list. Strongly recommended."
          },
          "groupId": {
            "type": "string",
            "description": "Group id from browz_group_list"
          },
          "archetype": {
            "type": "string",
            "description": "macos | windows | linux — the platform the fingerprint imitates"
          },
          "engine": {
            "type": "string",
            "description": "chromium (default, the Browz engine) | signed-chrome (the user's installed Google Chrome; needs proxyId, timezone and languages)"
          },
          "timezone": {
            "type": "string",
            "description": "IANA timezone, e.g. Europe/Paris. Default: follows the proxy exit"
          },
          "languages": {
            "type": "string",
            "description": "Accept-Language list, e.g. fr-FR,fr,en. Default: follows the proxy exit"
          },
          "tags": {
            "type": "string",
            "description": "Comma-separated tags"
          }
        }
      },
      "annotations": {
        "title": "Create profile",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:profiles:write",
      "localOnlyArguments": [
        "timezone",
        "languages",
        "tags"
      ]
    },
    {
      "name": "browz_profile_start",
      "title": "Start profile browser",
      "description": "Launch a profile's browser. Required before any page tool (navigate, snapshot, act, wait, screenshot). Next: browz_navigate. Returns the CDP debug port, cdpEndpoint and wsEndpoint.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "headless": {
            "type": "boolean",
            "description": "Override the agent's headless default for this launch (Browz engine only)"
          }
        }
      },
      "annotations": {
        "title": "Start profile browser",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser"
    },
    {
      "name": "browz_profile_stop",
      "title": "Stop profile browser",
      "description": "Close a profile's browser cleanly, preserving its session.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          }
        }
      },
      "annotations": {
        "title": "Stop profile browser",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser"
    },
    {
      "name": "browz_profile_delete",
      "title": "Move profile to trash",
      "description": "Move a profile to trash. Reversible — its proxy and browser data are kept until purged.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          }
        }
      },
      "annotations": {
        "title": "Move profile to trash",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:profiles:write"
    },
    {
      "name": "browz_navigate",
      "title": "Navigate tab",
      "description": "Navigate a tab of a running profile to a URL and wait for load. http/https only. Next: browz_snapshot to see the page and get element refs.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "url": {
            "type": "string",
            "description": "http:// or https:// URL"
          },
          "targetId": {
            "type": "string",
            "description": "Tab to use: a targetId from browz_tabs_list. Default: the first tab"
          }
        }
      },
      "annotations": {
        "title": "Navigate tab",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser",
      "remoteOnlyArguments": {
        "timeoutMs": {
          "type": "integer",
          "description": "Default 30000"
        }
      }
    },
    {
      "name": "browz_evaluate",
      "title": "Evaluate JavaScript",
      "description": "Run a JavaScript expression in a running profile's page and return its value. A last resort: prefer browz_snapshot + browz_act, which send real input and leave no script trace.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id",
          "expression"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "expression": {
            "type": "string",
            "description": "JavaScript expression; awaited if it returns a promise"
          },
          "targetId": {
            "type": "string",
            "description": "Tab to use: a targetId from browz_tabs_list. Default: the first tab"
          }
        }
      },
      "annotations": {
        "title": "Evaluate JavaScript",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_screenshot",
      "title": "Screenshot tab",
      "description": "PNG screenshot of a tab of a running profile, returned as an image. Use it to check what browz_snapshot cannot show (layout, images, canvas).",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "fullPage": {
            "type": "boolean",
            "description": "Capture beyond the viewport"
          },
          "targetId": {
            "type": "string",
            "description": "Tab to use: a targetId from browz_tabs_list. Default: the first tab"
          }
        }
      },
      "annotations": {
        "title": "Screenshot tab",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser"
    },
    {
      "name": "browz_pages",
      "title": "List tabs",
      "description": "List the open tabs of a running profile (same as browz_tabs_list).",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          }
        }
      },
      "annotations": {
        "title": "List tabs",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_cookies_export",
      "title": "Export cookies",
      "description": "Export a running profile's cookies.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          }
        }
      },
      "annotations": {
        "title": "Export cookies",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_profile_clone",
      "title": "Clone profile",
      "description": "Copy a profile into a new one with a fresh, consistent fingerprint. The proxy is NOT copied: two profiles on one exit are linked. Returns the new profile.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id to copy"
          },
          "name": {
            "type": "string",
            "description": "Name for the copy"
          }
        }
      },
      "annotations": {
        "title": "Clone profile",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:profiles:write"
    },
    {
      "name": "browz_tabs_list",
      "title": "List tabs",
      "description": "List the open tabs of a running profile with their targetId, title and url. Pass a targetId to the page tools to work in that tab.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          }
        }
      },
      "annotations": {
        "title": "List tabs",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser"
    },
    {
      "name": "browz_tab_open",
      "title": "Open tab",
      "description": "Open a new tab in a running profile at an http(s) URL. Returns its targetId.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id",
          "url"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "url": {
            "type": "string",
            "description": "http:// or https:// URL"
          }
        }
      },
      "annotations": {
        "title": "Open tab",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser"
    },
    {
      "name": "browz_tab_close",
      "title": "Close tab",
      "description": "Close one tab of a running profile. The last tab cannot be closed; use browz_session_end.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id",
          "targetId"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "targetId": {
            "type": "string",
            "description": "targetId from browz_tabs_list"
          }
        }
      },
      "annotations": {
        "title": "Close tab",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser"
    },
    {
      "name": "browz_snapshot",
      "title": "Snapshot page",
      "description": "Read a tab as an accessibility tree: roles, names, values and states, one element per line, plus the visible text. Interactive elements carry a ref like [e12] (pass \"e12\" to browz_act); a run of sibling links shares one line, `- links: \"Home\" [e5], \"About\" [e6]`, each link with its own ref. A ref stays valid while its element stays on the page; take a new snapshot after a navigation. The result reports its mode and estimated tokens; if the page does not fit maxTokens it falls back to a smaller mode and then truncates.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "targetId": {
            "type": "string",
            "description": "Tab to use: a targetId from browz_tabs_list. Default: the first tab"
          },
          "mode": {
            "type": "string",
            "enum": [
              "compact",
              "interactive",
              "full"
            ],
            "description": "compact (default): controls, headings, alerts and visible text. interactive: controls and headings only. full: every accessibility node"
          },
          "maxTokens": {
            "type": "integer",
            "minimum": 200,
            "maximum": 37500,
            "description": "Token budget for the snapshot (about 4 characters a token). Default 10000"
          }
        }
      },
      "annotations": {
        "title": "Snapshot page",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser"
    },
    {
      "name": "browz_act",
      "title": "Act on element",
      "description": "Act on an element from the latest browz_snapshot with real input events: click, dblclick, hover, fill (replace a field's text), type (append), press (a key or chord such as Enter or Control+a), select (an option by value or label), check, uncheck, scroll, upload (set files on a file input, or on the input a button opens). Input is paced like a person: the pointer moves to the element, keys are typed one by one; human false sends it at once. Then browz_wait or browz_snapshot to see the result.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id",
          "action"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "action": {
            "type": "string",
            "enum": [
              "click",
              "dblclick",
              "hover",
              "fill",
              "type",
              "press",
              "select",
              "check",
              "uncheck",
              "scroll",
              "upload"
            ]
          },
          "ref": {
            "type": "string",
            "description": "Element ref from browz_snapshot, e.g. e12"
          },
          "text": {
            "type": "string",
            "description": "Text for fill or type"
          },
          "key": {
            "type": "string",
            "description": "Key or chord for press, e.g. Enter, Tab, Control+a"
          },
          "value": {
            "type": "string",
            "description": "Option value or label for select"
          },
          "x": {
            "type": "number",
            "description": "click/hover without a ref: viewport x. scroll without a ref: horizontal pixels"
          },
          "y": {
            "type": "number",
            "description": "click/hover without a ref: viewport y. scroll without a ref: vertical pixels"
          },
          "files": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "description": "upload: the files. Each is a name in the Browz data folder's agent-uploads folder, or a name plus its content as base64 in data (25 MiB in all)",
            "items": {
              "type": "object",
              "required": [
                "name"
              ],
              "additionalProperties": false,
              "properties": {
                "name": {
                  "type": "string",
                  "description": "File name (no folders)"
                },
                "data": {
                  "type": "string",
                  "description": "The file's content, base64"
                }
              }
            }
          },
          "human": {
            "type": "boolean",
            "description": "Default true: pointer movement and typing paced like the profile's user. false: instant input"
          },
          "targetId": {
            "type": "string",
            "description": "Tab to use: a targetId from browz_tabs_list. Default: the first tab"
          }
        }
      },
      "annotations": {
        "title": "Act on element",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser",
      "localOnlyArguments": [
        "x",
        "y",
        "files"
      ]
    },
    {
      "name": "browz_wait",
      "title": "Wait for page",
      "description": "Wait until text appears, text disappears or the URL contains a string (or just wait timeMs). Returns matched=false on timeout rather than failing.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "text": {
            "type": "string",
            "description": "Wait until this text is on the page"
          },
          "textGone": {
            "type": "string",
            "description": "Wait until this text is no longer on the page"
          },
          "urlContains": {
            "type": "string",
            "description": "Wait until the URL contains this"
          },
          "timeMs": {
            "type": "integer",
            "minimum": 0,
            "maximum": 60000,
            "description": "Fixed wait, when no condition is given"
          },
          "timeoutMs": {
            "type": "integer",
            "minimum": 1,
            "maximum": 60000,
            "description": "Default 10000"
          },
          "targetId": {
            "type": "string",
            "description": "Tab to use: a targetId from browz_tabs_list. Default: the first tab"
          }
        }
      },
      "annotations": {
        "title": "Wait for page",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser",
      "localOnlyArguments": [
        "timeMs"
      ]
    },
    {
      "name": "browz_cookies_get",
      "title": "Get cookies",
      "description": "Read a running profile's cookies, optionally only those for one domain (and its subdomains).",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "domain": {
            "type": "string",
            "description": "e.g. example.com"
          }
        }
      },
      "annotations": {
        "title": "Get cookies",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_cookies_set",
      "title": "Set cookies",
      "description": "Set cookies in a running profile. Each cookie needs name, value and domain (or url); path, expires, secure, httpOnly and sameSite are optional.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id",
          "cookies"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "cookies": {
            "type": "array",
            "minItems": 1,
            "maxItems": 5000,
            "items": {
              "type": "object"
            }
          }
        }
      },
      "annotations": {
        "title": "Set cookies",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_session_end",
      "title": "End session",
      "description": "End the session: close the profile's browser cleanly (its cookies and tabs are saved). With delete=true the profile is also moved to trash, where the person can restore it. With purge=true it is moved to trash and then deleted for good: use that for throwaway profiles you created for this task (an agent key may purge only profiles it created). For a throwaway task, browz_session_open (ephemeral) and browz_session_close wipe the profile for you.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "delete": {
            "type": "boolean",
            "description": "Also move the profile to trash (restorable)"
          },
          "purge": {
            "type": "boolean",
            "description": "Also delete the profile for good: trash, then purge. Cannot be undone. An agent key may purge only profiles it created"
          }
        }
      },
      "annotations": {
        "title": "End session",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser",
      "localOnlyArguments": [
        "purge"
      ]
    },
    {
      "name": "browz_group_list",
      "title": "List groups",
      "description": "List profile groups.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "title": "List groups",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_proxy_list",
      "title": "List proxies",
      "description": "List the proxy pool. Passwords are never returned; use the returned id as proxyId when creating a profile.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "title": "List proxies",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_running",
      "title": "List running profiles",
      "description": "List profiles whose browser is currently running.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "title": "List running profiles",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_download_list",
      "title": "List downloads",
      "description": "List completed regular files in a profile's dedicated Downloads directory. Works while stopped or running; refresh if a running download changes identity.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          }
        }
      },
      "annotations": {
        "title": "List downloads",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_download_read",
      "title": "Read download",
      "description": "Read one bounded chunk of a listed download by opaque artifact id. Returns at most 65536 bytes as base64; use nextOffset until complete.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id",
          "artifactId"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id"
          },
          "artifactId": {
            "type": "string",
            "description": "64-character artifact id from browz_download_list"
          },
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 65536
          }
        }
      },
      "annotations": {
        "title": "Read download",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_automation_read",
      "title": "Read automation state",
      "description": "Read metadata-only durable automation operator state. Never exposes plans, secret values, worker claims, grants or effects.",
      "inputSchema": {
        "type": "object",
        "required": [
          "action"
        ],
        "additionalProperties": false,
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "status",
              "schedules",
              "jobs",
              "queue",
              "secrets",
              "metrics",
              "audit"
            ]
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000
          },
          "stream": {
            "type": "string",
            "enum": [
              "queue",
              "vault"
            ]
          }
        }
      },
      "annotations": {
        "title": "Read automation state",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_automation_mutate",
      "title": "Change automation state",
      "description": "Perform an allowlisted automation operator mutation. operationKey must be reused when retrying the same action.",
      "inputSchema": {
        "type": "object",
        "required": [
          "action",
          "operationKey"
        ],
        "additionalProperties": false,
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "schedule-enable",
              "job-cancel",
              "job-redrive",
              "secret-disable"
            ]
          },
          "operationKey": {
            "type": "string",
            "description": "Stable caller idempotency key"
          },
          "scheduleId": {
            "type": "string",
            "description": "Schedule id"
          },
          "jobId": {
            "type": "string",
            "description": "Job id"
          },
          "secretId": {
            "type": "string",
            "description": "Secret metadata id"
          },
          "enabled": {
            "type": "boolean"
          },
          "fromCheckpoint": {
            "type": "boolean"
          },
          "confirmUnsafe": {
            "type": "boolean"
          }
        }
      },
      "annotations": {
        "title": "Change automation state",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_bulk_read",
      "title": "Read bulk jobs",
      "description": "List/status/report metadata for durable profile metadata jobs.",
      "inputSchema": {
        "type": "object",
        "required": [
          "action"
        ],
        "additionalProperties": false,
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "list",
              "status",
              "report-metadata",
              "clone-capabilities"
            ]
          },
          "jobId": {
            "type": "string",
            "description": "Durable job id"
          }
        }
      },
      "annotations": {
        "title": "Read bulk jobs",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_bulk_submit",
      "title": "Submit bulk job",
      "description": "Submit an allowlisted durable profile job with a stable idempotency key.",
      "inputSchema": {
        "type": "object",
        "required": [
          "operation",
          "idempotencyKey"
        ],
        "additionalProperties": false,
        "properties": {
          "operation": {
            "type": "string",
            "enum": [
              "organization",
              "tags",
              "tag-set",
              "start-page",
              "proxy",
              "screen",
              "template",
              "extensions",
              "fingerprint-policy",
              "clone"
            ]
          },
          "idempotencyKey": {
            "type": "string",
            "description": "Stable caller idempotency key"
          },
          "profileIds": {
            "type": "array",
            "minItems": 1,
            "maxItems": 5000,
            "items": {
              "type": "string"
            }
          },
          "materializationId": {
            "type": "string",
            "description": "Verified materialization id"
          },
          "patch": {
            "type": "object"
          },
          "tags": {
            "type": "array",
            "minItems": 0,
            "maxItems": 64,
            "items": {
              "type": "string"
            }
          },
          "settings": {
            "type": "object",
            "description": "Exact startupUrl/startupUrls assignment; empty clears profile-specific start pages"
          },
          "screen": {
            "type": "object",
            "description": "Exact screen assignment: {mode:custom,value:{width,height}}, {mode:real} or {mode:auto} to clear"
          },
          "templateId": {
            "type": "string",
            "description": "Template id (operation template)"
          },
          "revision": {
            "type": "integer",
            "minimum": 1,
            "description": "Template revision the profiles are assigned to"
          },
          "mode": {
            "type": "string",
            "enum": [
              "pinned",
              "following"
            ],
            "description": "Template assignment mode"
          },
          "extensionIds": {
            "type": "string",
            "description": "Exact set1:/ext1: extension selectors, comma-separated, in precedence order; empty clears"
          },
          "fingerprintAutoPolicy": {
            "type": "string",
            "enum": [
              "legacy",
              "population-safe",
              "distinct"
            ]
          },
          "proxyId": {
            "type": "string",
            "description": "Opaque proxy-pool id; credentials are resolved only by the agent at dispatch"
          },
          "executions": {
            "type": "array",
            "minItems": 1,
            "maxItems": 5000,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "schemaVersion",
                "idempotencyKey",
                "planId",
                "actorId",
                "acknowledgedWarningCodes"
              ],
              "properties": {
                "schemaVersion": {
                  "const": 1
                },
                "idempotencyKey": {
                  "type": "string",
                  "description": "Stable single-clone execute key"
                },
                "planId": {
                  "type": "string",
                  "description": "Durable clone plan id"
                },
                "actorId": {
                  "type": "string",
                  "description": "Plan actor id"
                },
                "acknowledgedWarningCodes": {
                  "type": "array",
                  "maxItems": 16,
                  "items": {
                    "type": "string"
                  }
                },
                "exactAcknowledgement": {
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "renewalGeneration": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          }
        }
      },
      "annotations": {
        "title": "Submit bulk job",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_bulk_mutate",
      "title": "Run or cancel bulk job",
      "description": "Run one fenced durable batch or cancel a job. Reuse operationKey on retry.",
      "inputSchema": {
        "type": "object",
        "required": [
          "action",
          "jobId",
          "operationKey"
        ],
        "additionalProperties": false,
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "run-tick",
              "clone-run",
              "cancel"
            ]
          },
          "jobId": {
            "type": "string",
            "description": "Durable job id"
          },
          "operationKey": {
            "type": "string",
            "description": "Stable caller operation key"
          },
          "batchSize": {
            "type": "integer",
            "minimum": 1,
            "maximum": 250
          }
        }
      },
      "annotations": {
        "title": "Run or cancel bulk job",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_bulk_report_prepare",
      "title": "Prepare bulk report",
      "description": "Prepare an immutable, restart-safe JSON or CSV artifact for a terminal durable profile job. Reuse operationKey for the exact request.",
      "inputSchema": {
        "type": "object",
        "required": [
          "jobId",
          "format",
          "operationKey"
        ],
        "additionalProperties": false,
        "properties": {
          "jobId": {
            "type": "string",
            "description": "Terminal durable job id"
          },
          "format": {
            "type": "string",
            "enum": [
              "json",
              "csv"
            ]
          },
          "operationKey": {
            "type": "string",
            "description": "Stable caller operation key"
          }
        }
      },
      "annotations": {
        "title": "Prepare bulk report",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_bulk_report_read",
      "title": "Read bulk report",
      "description": "Read one bounded path-free chunk from a prepared bulk report artifact. Returns at most 65536 bytes as base64; follow nextOffset until complete and verify digests.",
      "inputSchema": {
        "type": "object",
        "required": [
          "jobId",
          "artifactId"
        ],
        "additionalProperties": false,
        "properties": {
          "jobId": {
            "type": "string",
            "description": "Terminal durable job id"
          },
          "artifactId": {
            "type": "string",
            "description": "Opaque artifact id from browz_bulk_report_prepare"
          },
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "maxBytes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 65536
          }
        }
      },
      "annotations": {
        "title": "Read bulk report",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_session_open",
      "title": "Open agent session",
      "description": "Open an agent session: an isolated profile of this task's own, with a consistent fingerprint, launched and ready for browz_navigate (use the returned profileId as id in page tools). mode ephemeral (default) gets a fresh profile that browz_session_close wipes (files, cookies, rows); mode persistent with an identity returns to that identity's profile, cookies and proxy. Parallel sessions never share storage. Refused with a clear message when the plan's concurrent-session limit is reached.",
      "inputSchema": {
        "type": "object",
        "required": [
          "task"
        ],
        "additionalProperties": false,
        "properties": {
          "task": {
            "type": "string",
            "description": "What this agent is doing (1-200 characters); shown in browz_session_list"
          },
          "mode": {
            "type": "string",
            "enum": [
              "ephemeral",
              "persistent"
            ],
            "description": "ephemeral (default): wiped on close; persistent: kept for a returning identity"
          },
          "identity": {
            "type": "string",
            "description": "Persistent only: a stable name for the returning persona, e.g. shop-a/buyer-3 (letters, digits, - _ . : @ /)"
          },
          "proxy": {
            "description": "none, pool (least-used pool proxy; a returning identity keeps its own), or {proxyId} from browz_proxy_list. Default: a returning identity's proxy, otherwise none",
            "oneOf": [
              {
                "type": "string",
                "enum": [
                  "none",
                  "pool"
                ]
              },
              {
                "type": "object",
                "required": [
                  "proxyId"
                ],
                "additionalProperties": false,
                "properties": {
                  "proxyId": {
                    "type": "string"
                  }
                }
              }
            ]
          },
          "ttlMinutes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10080,
            "description": "Ephemeral only: wipe the profile after this long even if never closed (default 1440)"
          },
          "launch": {
            "type": "boolean",
            "description": "Launch the browser now (default true); false reserves the session and profile only"
          },
          "headless": {
            "type": "boolean",
            "description": "Override the agent's headless default for this launch"
          },
          "archetype": {
            "type": "string",
            "description": "New profiles only: macos | windows | linux"
          },
          "engine": {
            "type": "string",
            "description": "New profiles only: chromium (default) | signed-chrome"
          }
        }
      },
      "annotations": {
        "title": "Open agent session",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_session_resume",
      "title": "Resume agent session",
      "description": "Resume an open agent session after its browser stopped or was killed: relaunches the same profile with its cookies and storage, or attaches if it is still running. Returns the launch endpoints.",
      "inputSchema": {
        "type": "object",
        "required": [
          "sessionId"
        ],
        "additionalProperties": false,
        "properties": {
          "sessionId": {
            "type": "string",
            "description": "Session id from browz_session_open"
          },
          "headless": {
            "type": "boolean",
            "description": "Override the agent's headless default for this launch"
          }
        }
      },
      "annotations": {
        "title": "Resume agent session",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_session_close",
      "title": "Close agent session",
      "description": "Close an agent session and free its slot. Ephemeral: stops the browser and wipes the profile (no files or cookies left). Persistent: stops the browser and keeps the identity's profile for next time. Closing twice is harmless.",
      "inputSchema": {
        "type": "object",
        "required": [
          "sessionId"
        ],
        "additionalProperties": false,
        "properties": {
          "sessionId": {
            "type": "string",
            "description": "Session id from browz_session_open"
          }
        }
      },
      "annotations": {
        "title": "Close agent session",
        "readOnlyHint": false,
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_session_list",
      "title": "List agent sessions",
      "description": "List open agent sessions (state open or stopped, i.e. resumable) and the plan's concurrent-session limit.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {}
      },
      "annotations": {
        "title": "List agent sessions",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_request_human",
      "title": "Hand to a person",
      "description": "Hand the live profile to the person at the computer for a sign-in, 2FA code, CAPTCHA or other step you must not do yourself. Browz pauses automation, raises the profile window and notifies them; this call waits (with progress) until they click I'm done, cancel, or timeoutSec passes, then you continue in the same session. Never ask the person for passwords or codes and never use CAPTCHA-solving services. After it returns, take a new browz_snapshot.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id",
          "reason"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id (a running, headed profile)"
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "maxLength": 300,
            "description": "What the person should do, shown to them, e.g. 'Sign in to example.com'"
          },
          "kind": {
            "type": "string",
            "enum": [
              "login",
              "two_factor",
              "captcha",
              "other"
            ],
            "description": "Detected from the page when omitted"
          },
          "timeoutSec": {
            "type": "integer",
            "minimum": 10,
            "maximum": 1800,
            "description": "How long to wait for the person. Default 300"
          },
          "doneWhenUrlContains": {
            "type": "string",
            "maxLength": 512,
            "description": "Also finish as soon as a tab's URL contains this (e.g. /dashboard)"
          },
          "targetId": {
            "type": "string",
            "description": "Tab to use: a targetId from browz_tabs_list. Default: the first tab"
          }
        }
      },
      "annotations": {
        "title": "Hand to a person",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": true
      },
      "remoteScope": "browz:browser",
      "remoteOnlyArguments": {
        "handoffId": {
          "type": "string",
          "description": "Keep waiting on this handoff (from an earlier browz_request_human that returned waiting)"
        },
        "cancel": {
          "type": "boolean",
          "description": "With handoffId: stop waiting and take control back"
        }
      }
    },
    {
      "name": "browz_credential_list",
      "title": "List stored credentials",
      "description": "List the sign-ins the person stored for agents: id, label, a masked username hint, the sites each may be used on, whether a TOTP code is available, and extra field names. Never returns a password, code or seed. Pass id to see only those this profile may use.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id: only credentials this profile may use. Omit for all"
          }
        }
      },
      "annotations": {
        "title": "List stored credentials",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_credential_fill",
      "title": "Fill a stored credential",
      "description": "Type one value of a stored credential (username, password, a fresh TOTP code, or a named extra field) into a field you found with browz_snapshot. Browz types it itself, paced like a person; the result says only that it was filled. Refused unless the tab (and any frame around the field) is on one of the credential's sites over https, and a password or code goes only into a password field (a code also into an autocomplete=one-time-code field). After a password or code is filled, browz_evaluate and browz_screenshot are refused on this profile until that tab loads another page; browz_snapshot keeps working and hides the value.",
      "inputSchema": {
        "type": "object",
        "required": [
          "id",
          "credentialId",
          "ref",
          "field"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "description": "Profile id (a running profile)"
          },
          "credentialId": {
            "type": "string",
            "description": "A credential id from browz_credential_list"
          },
          "ref": {
            "type": "string",
            "description": "The field's ref from browz_snapshot, e.g. e12"
          },
          "field": {
            "type": "string",
            "description": "username, password, totp, or the name of one of the credential's extra fields"
          },
          "submit": {
            "type": "boolean",
            "description": "Press Enter in the field after filling it. Default false"
          },
          "human": {
            "type": "boolean",
            "description": "Type with the profile's human pacing (default true); false types at once"
          },
          "targetId": {
            "type": "string",
            "description": "Tab to use: a targetId from browz_tabs_list. Default: the first tab"
          }
        }
      },
      "annotations": {
        "title": "Fill a stored credential",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      },
      "availability": {
        "local": true,
        "remote": false
      }
    },
    {
      "name": "browz_devices_list",
      "title": "List connected computers",
      "description": "List the computers (Browz apps) connected to this account with Remote control, and whether each is online. Pass a deviceId to other tools when more than one is online.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "title": "List connected computers",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
      },
      "availability": {
        "local": false,
        "remote": true
      },
      "remoteScope": "browz:profiles:read"
    }
  ]
}
