xinbs

openclawd-browser-server

"Calls the Windows Browser Server HTTP API to control a persistent browser session. Invoke when OpenClawd needs to navigate, evaluate JS, screenshot, or reuse logged-in cookies."

xinbs 0 Updated 2mo ago
GitHub

Install

npx skillscat add xinbs/browser-server

Install via the SkillsCat registry.

SKILL.md

OpenClawd Browser Server

Use this skill when OpenClawd must control a Windows browser via HTTP API and reuse a logged-in session.

Preconditions

  • Browser Server is running on Windows
  • Base URL is reachable on the LAN
  • A persistent user_data_dir was used for login reuse

Notes

  • Default channel is chrome unless BROWSER_CHANNEL is set
  • For Gmail reuse, keep the same user_data_dir across UI and headless
  • Complete login in visible mode before switching to headless

Base URL

Use the environment variable in OpenClawd:

export BROWSER_SERVER_URL="http://192.168.31.118:3456"

Common API Calls

Start browser with persistent profile

user_data_dir can be omitted to use the project default (./user_data). Use a custom path only when you need to share profiles across machines.

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/start",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "headless": false,
      "channel": "chrome"
    }
  }
}

Stop browser

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/stop",
    "method": "POST"
  }
}

Start MCP (Chrome DevTools MCP server)

If omitted, MCP resolves a local wsEndpoint automatically from DevToolsActivePort.

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/mcp/start",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {}
  }
}

Open page via MCP (auto-start)

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/mcp/open",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "url": "https://example.com",
      "timeout_ms": 30000
    }
  }
}

Read page text via MCP (auto-start)

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/mcp/read",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "selector": "body",
      "timeout_ms": 30000
    }
  }
}

Navigate

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/navigate",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "url": "https://example.com",
      "wait_until": "networkidle",
      "extra_wait_ms": 3000
    }
  }
}

Evaluate JavaScript

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/evaluate",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "script": "() => document.title"
    }
  }
}

DevTools (CDP) version

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/cdp/version",
    "method": "GET"
  }
}

DevTools (CDP) command

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/cdp/send",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "method": "Performance.getMetrics"
    }
  }
}

CDP DOM text/HTML/attributes

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/cdp/dom/text",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "selector": "h1" }
  }
}

Dialog wait/accept/dismiss

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/dialog/await",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "timeout": 10000, "action": "accept" }
  }
}
{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/dialog/accept",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "prompt_text": "ok" }
  }
}
{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/dialog/dismiss",
    "method": "POST"
  }
}

Download directory and last download

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/download/dir",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "path": "./downloads" }
  }
}
{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/downloads/last",
    "method": "GET"
  }
}
{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/download/await",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "timeout": 30000 }
  }
}

Element box and point click

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/element/box",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "selector": "#captcha" }
  }
}
{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/click/point",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "x": 520, "y": 360 }
  }
}
{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/cdp/dom/html",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "selector": "h1" }
  }
}
{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/cdp/dom/attributes",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "selector": "h1" }
  }
}

Wait for selector or text

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/wait",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "selector": "button[type='submit']",
      "timeout": 10000
    }
  }
}

Click element

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/click",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "selector": "button[type='submit']",
      "timeout": 10000
    }
  }
}

Type text

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/type",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "selector": "input[name='q']",
      "text": "openclawd",
      "clear_first": true
    }
  }
}

Upload file(s)

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/upload",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "selector": "input[type='file']",
      "paths": ["C:/path/to/file.txt"]
    }
  }
}

Scroll

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/scroll",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": {
      "direction": "down",
      "to_bottom": false,
      "amount": 600
    }
  }
}

Get page text

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/text",
    "method": "GET"
  }
}

Get current page info

Use include_html/include_text and optional selector to control content size.

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/current?include_text=true",
    "method": "GET"
  }
}

List tabs

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/pages",
    "method": "GET"
  }
}

New tab

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/page/new",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "url": "https://example.com" }
  }
}

Switch tab

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/page/switch",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "index": 0 }
  }
}

Close other tabs

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/page/close_others",
    "method": "POST"
  }
}

Close current tab

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/page/close",
    "method": "POST"
  }
}

Export storage state

{
  "tool": "fetch",
  "params": {
    "url": "${BROWSER_SERVER_URL}/storage/export",
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": { "include_json": true }
  }
}