{"openapi":"3.1.0","info":{"title":"Browser MCP Service","version":"1.0.0","description":"Remote isolated browser service.\n\nYou have access to a remote browser. You can control it like a real user: navigate to pages, click buttons, fill forms, read content, take screenshots, and more.\n\nQUICK START - How to use this browser:\n1. Call browser_navigate with a URL to open a page (returns a screenshot automatically)\n2. Use browser_click, browser_type, browser_select to interact with the page like a user would\n3. Use browser_extract to read text/data from the page, or browser_screenshot to see it visually\n4. The browser keeps its state between calls - cookies, sessions, and tabs all persist\n\nCOMMON WORKFLOWS:\n- Search: navigate to site -> type in search box (pressEnter: true) -> extract results\n- Fill a form: navigate -> type into fields -> select dropdowns -> click submit\n- Read content: navigate -> extract text with CSS selectors -> scroll down -> extract more\n- Test a flow: navigate -> interact step by step -> screenshot to verify each step\n- Monitor APIs: enable network logging -> navigate -> list captured XHR requests\n- Keyboard: browser_press_key for shortcuts (Ctrl+S, Cmd+K) and navigation (Enter, Tab, Escape)\n- Dropdowns/menus: browser_hover to reveal CSS :hover states, flyouts, and tooltips\n\nTIPS:\n- browser_navigate returns a screenshot automatically - look at it to understand the page layout\n- Use text= prefix to click by visible text: browser_click({selector: \"text=Sign In\"})\n- Use pressEnter: true with browser_type to submit search forms\n- Use browser_wait if a page needs time to load dynamic content\n- Use browser_evaluate to run any JavaScript for complex logic\n- Use browser_navigate_back / browser_navigate_forward for history navigation\n- Multiple tabs are supported via browser_tabs\n\nREALTIME / VISION-DRIVEN CONTROL (observe → drive → inspect):\nYou can drive the browser the way a human does — by LOOKING at the screen and\nacting at pixel coordinates, with no CSS selector. This is how vision-first\nagents operate:\n- OBSERVE: browser_observe({stream:true}) returns the latest frame of the page\n  PLUS a /sessions/:id/stream WebSocket URL that pushes live JPEG frames in real\n  time. Watch the page change as you act. Works headed OR headless (captured via\n  CDP, independent of any display).\n- DRIVE BY COORDINATES: browser_click_at({x,y}), browser_mouse_move({x,y}),\n  browser_mouse_button({action:\"down\"|\"up\"}), browser_type_at({x,y,text}).\n  Coordinates are in the same pixel space as the observe frame — see a button,\n  click its center. Enables Claude-computer-use / OmniParser-style flows.\n- INSPECT: browser_cdp({method:\"Performance.getMetrics\"}) runs ANY CDP method\n  (Page.captureSnapshot for full DOM, Tracing.start/stop for perf traces,\n  Network.*, Emulation.*) for deep inspection — always available, in-process.\n- EXTERNAL ATTACH: browser_cdp_endpoint({sessionId}) returns the CDP wsEndpoint\n  (ws://127.0.0.1:<port>/devtools/browser/<id>, localhost-bound on purpose — CDP\n  has no auth) so you can drive the browser with your own Playwright via\n  connectOverCDP. Reach it from another machine over an SSH tunnel\n  (ssh -i <key> -L <port>:127.0.0.1:<port> -N <host>), then connectOverCDP the\n  wsEndpoint as-is. Returns {enabled:false} when the host hasn't set EXPOSE_CDP=true.\n\nPARALLEL & ISOLATED SESSIONS:\n- By default all your calls share one \"default\" browser session per API key — fine for\n  sequential work, but two concurrent flows on it fight over the same tabs.\n- For PARALLEL or independent work, call browser_create_session to get a sessionId, then\n  pass that sessionId to every tool call for that flow. Each session is a fully isolated\n  BrowserContext (own cookies/login/tabs), and the server load-balances sessions across a\n  POOL of Chromium processes — so N independent scrapes/logins run concurrently without\n  sharing state or contending for one browser.\n- Persist logins per session: browser_session_save({key,sessionId}) /\n  browser_session_load({key,sessionId}). Call browser_close_session({sessionId}) when done.\n\nINFRASTRUCTURE:\n- docker_stats (admin-only) returns host CPU (% + cores), memory\n  (total/used/available), disk per mount, container counts, and cumulative\n  network byte totals. Useful to understand host capacity.\n\nADVANCED BROWSER TOOLS:\nFor operations not covered by the basic tools, use these:\n- browser_evaluate runs JavaScript inside the isolated page. Host-side\n  browser_run_code is disabled by default and is only exposed to admins when\n  ENABLE_UNSAFE_RUN_CODE=true.\n- browser_wait_response: Block until a network response matching a URL pattern\n  arrives (returns headers + body). Use after triggering a click/type that\n  fires an XHR you need to read.\n- browser_download: Capture files downloaded by the page. list/wait/get/clear.\n- browser_frame: Operate inside an iframe by url/name/index (click, type,\n  extract, evaluate, press_key, hover).\n- browser_console: Capture JS console messages (enable -> do actions -> list).\n- browser_accessibility: Get the page's ARIA/accessibility tree.\n- browser_get_text: Extract visible text as plain or markdown format.\n- browser_drag_and_drop: Drag from one element to another.\n- browser_file_upload: Set files on a <input type=\"file\"> element.\n- browser_handle_dialog: Accept/dismiss the next alert/confirm/prompt.\n- browser_get_cookies / browser_set_cookies: Read/write browser cookies.\n- browser_clear_session: Wipe cookies, localStorage, sessionStorage.\n\nPROXY ROTATION (anti-blocking):\nEach Decodo proxy port maps to a different residential IP. The server rotates\nports round-robin across the configured range (default 10001-10025) to avoid\nblocking. All callers may use browser_proxy({action:\"status\"}) to inspect the\ncurrent port. Only admin-scoped callers may rotate or update global settings.\n\nSESSION PERSISTENCE (cross-connection):\nCookies held in memory vanish when your MCP connection drops — including HttpOnly\nauth cookies that you can't read via JavaScript. To survive restarts, snapshot the\nbrowser state and reload it later.\n\n- browser_session_save({key}): Save the current browser context (cookies + localStorage +\n  sessionStorage, including HttpOnly cookies) under a label you choose. Keyed per\n  API key — other keys can't see your saved sessions.\n- browser_session_load({key}): Replace the current browser context with one\n  seeded from saved state. Use at the start of a new connection to skip login.\n  Closes your current pages; next tool call opens a fresh page already authenticated.\n- browser_session_list: List saved session keys with size and timestamp.\n- browser_session_delete({key}): Delete a saved session."},"servers":[{"url":"/","description":"This server"}],"paths":{"/tool/browser_restart":{"post":{"operationId":"browser_restart","summary":"Close this token's sessions and start a fresh isolated session.","description":"Close this token's sessions and start a fresh isolated session.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"device":{"type":"string","description":"Playwright device descriptor."},"proxyCountry":{"type":"string","description":"Proxy country code."},"viewport":{"type":"object","properties":{"width":{"type":"number"},"height":{"type":"number"}}},"userAgent":{"type":"string"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_navigate":{"post":{"operationId":"browser_navigate","summary":"Navigate to a URL and return title, final URL, status, and screenshot.","description":"Navigate to a URL and return title, final URL, status, and screenshot.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Absolute http:// or https:// URL."},"waitUntil":{"type":"string","enum":["load","domcontentloaded","networkidle","commit"]},"timeout":{"type":"number","description":"Bounded timeout in milliseconds."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["url"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_screenshot":{"post":{"operationId":"browser_screenshot","summary":"Capture the viewport, full page, or a selected element.","description":"Capture the viewport, full page, or a selected element.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string"},"fullPage":{"type":"boolean"},"format":{"type":"string","enum":["png","jpeg"]},"quality":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_click":{"post":{"operationId":"browser_click","summary":"Click an element selected by CSS, XPath, or visible text.","description":"Click an element selected by CSS, XPath, or visible text.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string"},"button":{"type":"string","enum":["left","right","middle"]},"clickCount":{"type":"number"},"timeout":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["selector"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_type":{"post":{"operationId":"browser_type","summary":"Type text into an input or textarea.","description":"Type text into an input or textarea.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string"},"text":{"type":"string"},"clearFirst":{"type":"boolean"},"pressEnter":{"type":"boolean"},"delay":{"type":"number"},"timeout":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["selector","text"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_select":{"post":{"operationId":"browser_select","summary":"Select option values in a select element.","description":"Select option values in a select element.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string"},"values":{"type":"array","items":{"type":"string"}},"timeout":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["selector","values"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_scroll":{"post":{"operationId":"browser_scroll","summary":"Scroll the page or a selected scrollable element.","description":"Scroll the page or a selected scrollable element.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"direction":{"type":"string","enum":["up","down","left","right"]},"amount":{"type":"number"},"selector":{"type":"string"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["direction"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_press_key":{"post":{"operationId":"browser_press_key","summary":"Press a keyboard key or shortcut.","description":"Press a keyboard key or shortcut.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"selector":{"type":"string"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["key"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_hover":{"post":{"operationId":"browser_hover","summary":"Hover over a selected element.","description":"Hover over a selected element.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string"},"timeout":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["selector"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_navigate_back":{"post":{"operationId":"browser_navigate_back","summary":"Go back in browser history.","description":"Go back in browser history.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_navigate_forward":{"post":{"operationId":"browser_navigate_forward","summary":"Go forward in browser history.","description":"Go forward in browser history.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_extract":{"post":{"operationId":"browser_extract","summary":"Extract text, HTML, attributes, or values from selected elements.","description":"Extract text, HTML, attributes, or values from selected elements.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string"},"type":{"type":"string","enum":["text","html","innerText","attribute","value","all"]},"attribute":{"type":"string"},"multiple":{"type":"boolean"},"limit":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["selector"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_observe":{"post":{"operationId":"browser_observe","summary":"Get a current page frame and optionally its live WebSocket stream URL.","description":"Get a current page frame and optionally its live WebSocket stream URL.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stream":{"type":"boolean"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_click_at":{"post":{"operationId":"browser_click_at","summary":"Click at an absolute screenshot coordinate.","description":"Click at an absolute screenshot coordinate.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"button":{"type":"string","enum":["left","right","middle"]},"clickCount":{"type":"number"},"delay":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["x","y"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_mouse_move":{"post":{"operationId":"browser_mouse_move","summary":"Move the mouse to an absolute screenshot coordinate.","description":"Move the mouse to an absolute screenshot coordinate.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"steps":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["x","y"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_mouse_button":{"post":{"operationId":"browser_mouse_button","summary":"Press or release a mouse button at the current position.","description":"Press or release a mouse button at the current position.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["down","up"]},"button":{"type":"string","enum":["left","right","middle"]},"clickCount":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["action"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_type_at":{"post":{"operationId":"browser_type_at","summary":"Click a screenshot coordinate, then type text.","description":"Click a screenshot coordinate, then type text.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"text":{"type":"string"},"clearFirst":{"type":"boolean"},"pressEnter":{"type":"boolean"},"delay":{"type":"number"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["x","y","text"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_cdp":{"post":{"operationId":"browser_cdp","summary":"Run an allowed Chrome DevTools Protocol method on the active page.","description":"Run an allowed Chrome DevTools Protocol method on the active page.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"method":{"type":"string"},"params":{"type":"object","additionalProperties":true},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["method"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_cdp_endpoint":{"post":{"operationId":"browser_cdp_endpoint","summary":"Return the localhost-only external CDP endpoint when explicitly enabled.","description":"Return the localhost-only external CDP endpoint when explicitly enabled.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_evaluate":{"post":{"operationId":"browser_evaluate","summary":"Execute bounded JavaScript inside the page; a timeout recycles the context.","description":"Execute bounded JavaScript inside the page; a timeout recycles the context.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"script":{"type":"string","description":"JavaScript function body."},"args":{"type":"array"},"timeoutMs":{"type":"number","description":"Bounded execution timeout."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["script"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_network":{"post":{"operationId":"browser_network","summary":"Capture and inspect network traffic (XHR, fetch, documents, etc.","description":"Capture and inspect network traffic (XHR, fetch, documents, etc.) — including request/response bodies and headers. Workflow: 1) action:'enable' BEFORE navigating, 2) navigate/interact, 3) action:'list' to browse (headers + metadata by default, add includeBodies:true for inline bodies), 4) action:'get' with an id to pull one entry's full body. Text bodies (JSON, HTML, text/*) are returned as UTF-8 strings; binary bodies come back base64 (responseBodyBase64:true). Each body is truncated at 128 KB per request and per response; the truncated flag tells you. Filter by URL literal substring, HTTP method, resource type, or status code.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["enable","disable","list","clear","get"],"description":"'enable' starts capturing, 'list' returns captured requests (headers + metadata; set includeBodies:true for bodies), 'get' fetches one entry by id with full body, 'clear' flushes logs, 'disable' stops capturing"},"filter":{"type":"object","properties":{"urlPattern":{"type":"string","description":"Case-insensitive literal substring to filter URLs (e.g. 'api/' or '.json')"},"method":{"type":"string","description":"HTTP method filter (e.g. 'POST', 'GET')"},"resourceType":{"type":"string","description":"Resource type: 'xhr', 'fetch', 'document', 'script', 'stylesheet', 'image', etc."},"statusCode":{"type":"number","description":"Filter by HTTP status code (e.g. 200, 404)"}},"description":"Filters applied when action='list'"},"limit":{"type":"number","description":"Max entries to return (for action='list'). Default: 50"},"includeBodies":{"type":"boolean","description":"For action='list': include request/response bodies inline (each truncated to 128 KB). Default: false — bodies are omitted so the list stays small. Use 'get' to fetch a single entry's full (still-truncated) body by id."},"id":{"type":"number","description":"For action='get': id of the entry to fetch (from a previous 'list' result)."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["action"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_wait":{"post":{"operationId":"browser_wait","summary":"Wait for a condition before proceeding.","description":"Wait for a condition before proceeding. Use this when a page loads content dynamically (SPAs, AJAX) and you need to wait before extracting/clicking. Types: 'selector' waits for an element to appear, 'networkidle' waits for all network requests to finish, 'navigation' waits for a page navigation, 'function' waits for custom JS to return true, 'timeout' is a simple delay. Example: {type: 'selector', value: '.results-loaded'}, {type: 'networkidle'}.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["selector","navigation","networkidle","timeout","function"],"description":"'selector' = wait for element, 'networkidle' = wait for network to settle, 'navigation' = wait for page nav, 'function' = custom JS condition, 'timeout' = static delay"},"value":{"type":"string","description":"Depends on type: CSS selector (for 'selector'), milliseconds (for 'timeout'), or JS expression returning boolean (for 'function'). Not needed for 'networkidle'/'navigation'."},"timeout":{"type":"number","description":"Max wait time in ms before giving up. Default: 30000"},"state":{"type":"string","enum":["attached","detached","visible","hidden"],"description":"For type='selector': what state to wait for. 'visible' (default) = element is visible, 'hidden' = element disappears, 'attached' = exists in DOM, 'detached' = removed from DOM."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["type"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_tabs":{"post":{"operationId":"browser_tabs","summary":"Manage multiple browser tabs.","description":"Manage multiple browser tabs. Use 'list' to see all open tabs, 'open' to open a new tab with a URL, 'switch' to change the active tab, 'close' to close a tab. Each tab has its own page state. Useful for comparing pages side by side or opening links without losing your place.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","open","switch","close"],"description":"'list' = show all tabs, 'open' = new tab (provide url), 'switch' = change active tab (provide tabId), 'close' = close tab (provide tabId, or closes active tab)"},"url":{"type":"string","description":"URL to open in new tab (only for action='open')"},"tabId":{"type":"string","description":"Tab ID from a previous 'list' result (for 'switch' and 'close')"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["action"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_pdf":{"post":{"operationId":"browser_pdf","summary":"Export the current page as a PDF document.","description":"Export the current page as a PDF document. Returns base64-encoded PDF and sizeBytes. Optionally save to a file path on disk. Supports paper sizes, orientation, margins, and background printing. Example: {format: 'A4', landscape: false, margin: {top: '2cm', bottom: '2cm'}}.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"path":{"type":"string","description":"File path to save PDF to disk (e.g. '/tmp/report.pdf'). If omitted, PDF is only returned as base64."},"format":{"type":"string","enum":["Letter","Legal","Tabloid","Ledger","A0","A1","A2","A3","A4","A5","A6"],"description":"Paper size. Default: A4"},"landscape":{"type":"boolean","description":"Landscape orientation. Default: false"},"printBackground":{"type":"boolean","description":"Include background colors/images. Default: true"},"margin":{"type":"object","properties":{"top":{"type":"string","description":"Top margin, e.g. '1cm', '0.5in'"},"right":{"type":"string","description":"Right margin"},"bottom":{"type":"string","description":"Bottom margin"},"left":{"type":"string","description":"Left margin"}},"description":"Page margins. Default: 1cm on all sides."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_console":{"post":{"operationId":"browser_console","summary":"Capture console messages from the page.","description":"Capture console messages from the page. Supports enable/disable/list/clear actions with optional filtering by type (log, warn, error, info, debug) or text pattern. Useful for debugging JS errors, logging, and SPA diagnostics.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["enable","disable","list","clear"],"description":"'enable' = start capturing, 'disable' = stop, 'list' = get buffered messages, 'clear' = flush buffer"},"filter":{"type":"object","properties":{"type":{"type":"string","description":"Filter by console message type"},"textPattern":{"type":"string","description":"Case-insensitive literal substring to match message text"}},"description":"Optional filter for list action"},"limit":{"type":"number","description":"Max messages to return. Default: 100"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["action"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_accessibility":{"post":{"operationId":"browser_accessibility","summary":"Get the browser's accessibility tree for the current page.","description":"Get the browser's accessibility tree for the current page. Returns the full ARIA tree with roles, names, values, and children. Useful for accessibility auditing or extracting content the way a screen reader sees it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_get_text":{"post":{"operationId":"browser_get_text","summary":"Extract readable text content from the page as plain text or markdown.","description":"Extract readable text content from the page as plain text or markdown. Skips hidden elements (display:none, visibility:hidden) and non-content tags (script, style, svg). Use format='markdown' for heading-aware extraction, or format='readable' to skip nav/footer/header noise.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string","description":"CSS selector to extract from. Default: 'body'"},"format":{"type":"string","enum":["plain","markdown","readable"],"description":"Output format. 'plain' = all visible text, 'markdown' = heading-aware, 'readable' = skip chrome. Default: plain"},"maxLength":{"type":"number","description":"Max characters to return. Default: 50000"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_drag_and_drop":{"post":{"operationId":"browser_drag_and_drop","summary":"Drag from a source element to a target element.","description":"Drag from a source element to a target element. Use for drag-and-drop file uploads, reordering lists, or kanban-style moves.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string","description":"CSS selector of the element to drag from"},"target":{"type":"string","description":"CSS selector of the element to drop onto"},"force":{"type":"boolean","description":"Bypass actionability checks. Default: false"},"timeout":{"type":"number","description":"Max time in ms. Default: 10000"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["source","target"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_file_upload":{"post":{"operationId":"browser_file_upload","summary":"Set files on a <input type='file'> element.","description":"Set files on a <input type='file'> element. Does NOT open the OS file picker — sets files directly on the input element. Provide absolute paths to files on the server filesystem.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"selector":{"type":"string","description":"CSS selector of the <input type='file'> element"},"paths":{"type":"array","items":{"type":"string"},"description":"Absolute file paths to upload"},"timeout":{"type":"number","description":"Max time in ms. Default: 10000"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["selector","paths"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_handle_dialog":{"post":{"operationId":"browser_handle_dialog","summary":"Handle the next browser dialog (alert, confirm, or prompt).","description":"Handle the next browser dialog (alert, confirm, or prompt). Must be called BEFORE the action that triggers the dialog. Waits for the dialog to appear, then accepts or dismisses it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["accept","dismiss"],"description":"Whether to accept or dismiss the dialog"},"promptText":{"type":"string","description":"Text to enter for prompt dialogs (only when action='accept')"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["action"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_get_cookies":{"post":{"operationId":"browser_get_cookies","summary":"Get cookies from the browser context.","description":"Get cookies from the browser context. Returns name, value, domain, path, expires, httpOnly, secure, and sameSite for each cookie. Optionally filter by URL(s).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"urls":{"type":"array","items":{"type":"string"},"description":"Filter cookies by URL(s). Omit to get all cookies."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_set_cookies":{"post":{"operationId":"browser_set_cookies","summary":"Add cookies to the browser context.","description":"Add cookies to the browser context. Cookies persist across pages and will be saved when the session closes. Use to inject auth tokens, session IDs, or bypass consent banners.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cookies":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"},"domain":{"type":"string"},"path":{"type":"string"},"expires":{"type":"number"},"httpOnly":{"type":"boolean"},"secure":{"type":"boolean"},"sameSite":{"type":"string","enum":["Strict","Lax","None"]}},"required":["name","value","domain"]}},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["cookies"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_create_session":{"post":{"operationId":"browser_create_session","summary":"Create a new isolated browser session — a separate BrowserContext (own cookies, localStorage, tabs) placed on its own Chromium process from a server-side POOL.","description":"Create a new isolated browser session — a separate BrowserContext (own cookies, localStorage, tabs) placed on its own Chromium process from a server-side POOL. Returns a sessionId to pass to every other browser tool via the 'sessionId' parameter. This is how you run TRULY PARALLEL browser work: each sessionId is fully isolated and load-balanced across the pool, so concurrent sessions don't share state or contend for one process. A crashed pool browser only affects its own sessions (they auto-recover on a healthy one). Sessions are scoped to your API key. Omit sessionId on calls to use a shared default session.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"networkMode":{"type":"string","enum":["configured","direct"],"default":"configured","description":"Explicit network transport: configured uses the managed residential proxy; direct uses server egress. This is never selected automatically as a fallback."},"device":{"type":"string","description":"Playwright device descriptor to emulate (e.g., 'iPhone 13', 'Pixel 5')."},"proxyCountry":{"type":"string","description":"Optional country code for proxy routing."},"proxyPort":{"type":"number","description":"Optional fixed proxy port. Use for provider profiles whose auth cookies require stable IP continuity."},"viewport":{"type":"object","properties":{"width":{"type":"number"},"height":{"type":"number"}},"description":"Custom viewport size."},"userAgent":{"type":"string","description":"Custom User-Agent string."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_close_session":{"post":{"operationId":"browser_close_session","summary":"Close an isolated browser session created with browser_create_session.","description":"Close an isolated browser session created with browser_create_session. Frees the BrowserContext and all its pages. Requires sessionId parameter.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"The session ID returned by browser_create_session."}},"required":["sessionId"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_clear_session":{"post":{"operationId":"browser_clear_session","summary":"Clear all session state: cookies, localStorage, and sessionStorage.","description":"Clear all session state: cookies, localStorage, and sessionStorage. Use to start fresh without closing the browser. Useful for testing logged-out states or clearing stale data.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"includeCookies":{"type":"boolean","description":"Clear cookies. Default: true"},"includeLocalStorage":{"type":"boolean","description":"Clear localStorage. Default: true"},"includeSessionStorage":{"type":"boolean","description":"Clear sessionStorage. Default: true"},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_wait_response":{"post":{"operationId":"browser_wait_response","summary":"Block until a network response whose URL contains the given literal substring arrives, then return it with headers and body.","description":"Block until a network response whose URL contains the given literal substring arrives, then return it with headers and body. Useful after an action triggers an XHR/fetch. Body is UTF-8 text for text/JSON/XML content types, otherwise base64. Truncates at 128 KB. Throws on timeout.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"urlPattern":{"type":"string","description":"Case-insensitive literal substring matched against response URL, e.g. '/api/users' or 'graphql'."},"method":{"type":"string","description":"Require this HTTP method (GET, POST, etc.)."},"statusCode":{"type":"number","description":"Require this HTTP status code."},"timeoutMs":{"type":"number","description":"Max wait time in ms before throwing. Default: 30000."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["urlPattern"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_download":{"post":{"operationId":"browser_download","summary":"Capture files downloaded by the page (Playwright 'download' events).","description":"Capture files downloaded by the page (Playwright 'download' events). Downloads are auto-captured as soon as they fire — call 'list' to see what's been captured, 'wait' to block for the next one, 'get' to retrieve a file's content (base64) by id, 'clear' to flush. Use after clicking a download link/button. Files are saved to disk on the server; 'get' reads them back.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get","wait","clear"],"description":"'list' → all captured downloads, 'wait' → block until next download (or return latest if any), 'get' → fetch file content by id, 'clear' → flush."},"id":{"type":"string","description":"For action='get': download id from a previous list/wait result."},"timeoutMs":{"type":"number","description":"For action='wait': max wait in ms. Default: 30000."},"maxBytes":{"type":"number","description":"For action='get': max bytes to return (default 4 MiB, max 16 MiB)."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["action"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_frame":{"post":{"operationId":"browser_frame","summary":"Operate inside an iframe.","description":"Operate inside an iframe. Select the frame by a literal URL substring, exact name, or zero-based index (main frame is 0). Then run click/type/extract/evaluate/press_key/hover inside that frame. Use 'list' first to discover frames.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","click","type","extract","evaluate","press_key","hover"],"description":"'list' → enumerate frames; other actions run inside a specific frame (provide 'frame')."},"frame":{"type":"object","properties":{"url":{"type":"string","description":"Case-insensitive literal substring matched against frame.url()."},"name":{"type":"string","description":"Exact frame name."},"index":{"type":"number","description":"Zero-based index into page.frames() (main frame is 0)."}},"description":"How to locate the frame. Provide one of url, name, or index."},"selector":{"type":"string","description":"CSS, xpath= or text= selector (for click/type/extract/press_key/hover)."},"text":{"type":"string","description":"Text to type (for action='type')."},"key":{"type":"string","description":"Key to press (for action='press_key')."},"clearFirst":{"type":"boolean","description":"For type: clear field first. Default false."},"pressEnter":{"type":"boolean","description":"For type: press Enter after. Default false."},"extractType":{"type":"string","enum":["text","html","innerText","attribute","value"],"description":"For extract: which property. Default 'text'."},"attribute":{"type":"string","description":"For extract with extractType='attribute': which attribute."},"multiple":{"type":"boolean","description":"For extract: return array of all matches. Default false."},"limit":{"type":"number","description":"For extract with multiple=true: max entries. Default 100."},"script":{"type":"string","description":"For evaluate: JavaScript body. Receive 'args' as first argument."},"args":{"type":"array","description":"For evaluate: values passed into the script as 'args'."},"timeout":{"type":"number","description":"Per-action timeout in ms. Default 10000."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["action"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_proxy":{"post":{"operationId":"browser_proxy","summary":"Inspect Decodo proxy status.","description":"Inspect Decodo proxy status. Admin-scoped callers may also rotate the global port or update global proxy settings. Ordinary callers cannot mutate proxy state.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["status","rotate","config"],"description":"'status' is read-only; 'rotate' and 'config' require an admin-scoped caller"},"settings":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable/disable proxy"},"host":{"type":"string","description":"Proxy host (default: isp.decodo.com)"},"portMin":{"type":"number","description":"Min port in rotation range (default: 10001)"},"portMax":{"type":"number","description":"Max port in rotation range (default: 10025)"},"country":{"type":"string","description":"Target country code (e.g. 'it', 'us')"},"user":{"type":"string","description":"Decodo proxy username"},"pass":{"type":"string","description":"Decodo proxy password"}},"description":"Required for action='config'. Only set fields you want to change."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["action"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_session_save":{"post":{"operationId":"browser_session_save","summary":"Snapshot the current browser context (cookies — including HttpOnly — plus localStorage, sessionStorage, IndexedDB origins, and the non-secret proxy-port pin) to persistent storage under a label you choose.","description":"Snapshot the current browser context (cookies — including HttpOnly — plus localStorage, sessionStorage, IndexedDB origins, and the non-secret proxy-port pin) to persistent storage under a label you choose. Restores preserve proxy IP continuity by default. Saved state is scoped to your API key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Label to save under. 1–128 chars of letters, digits, '.', '_' or '-'."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["key"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_session_load":{"post":{"operationId":"browser_session_load","summary":"Restore a previously saved browser context (from browser_session_save) into the current session.","description":"Restore a previously saved browser context (from browser_session_save) into the current session. Replaces the active BrowserContext and preserves the saved proxy port by default so IP-bound auth cookies remain valid. Set useCurrentProxy only for an intentional operator-directed IP change.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Label to load (as passed to browser_session_save)."},"useCurrentProxy":{"type":"boolean","description":"Ignore the saved proxy pin and intentionally use the rotator's current port. Default false."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["key"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_session_list":{"post":{"operationId":"browser_session_list","summary":"List saved session keys for the current API key.","description":"List saved session keys for the current API key. Returns each key's byte size and last-saved timestamp.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/browser_session_delete":{"post":{"operationId":"browser_session_delete","summary":"Delete a saved browser session by key.","description":"Delete a saved browser session by key. Returns deleted:true on success, deleted:false if no such key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"Label to delete."},"sessionId":{"type":"string","description":"Optional isolated session id from browser_create_session. Routes this call to that session's own BrowserContext (own cookies/tabs, pool-distributed across Chromium processes) for safe parallel work. Omit to use the shared default session."}},"required":["key"]}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/docker_stats":{"post":{"operationId":"docker_stats","summary":"Get Docker resource usage statistics.","description":"Get Docker resource usage statistics. Returns CPU, memory, and network usage for all running containers. Useful for monitoring system resources and debugging performance issues.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_open_session":{"post":{"operationId":"scrapling_open_session","summary":"[Scrapling sidecar] Open a persistent browser session that can be reused across multiple `session_fetch` calls.","description":"[Scrapling sidecar] Open a persistent browser session that can be reused across multiple `session_fetch` calls.\nThis avoids the overhead of launching a new browser for each request. Sessions hold the browser-level\nconfiguration only; per-request options are passed to `session_fetch` on each call.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"session_type":{"enum":["dynamic","stealthy"],"title":"Session Type","type":"string"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Session Id"},"headless":{"default":true,"title":"Headless","type":"boolean"},"real_chrome":{"default":false,"title":"Real Chrome","type":"boolean"},"timezone_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Timezone Id"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Locale"},"useragent":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Useragent"},"proxy":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Proxy"},"cdp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cdp Url"},"executable_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Executable Path"},"cookies":{"anyOf":[{"items":{"$ref":"#/$defs/SetCookieParam"},"type":"array"},{"type":"null"}],"default":null,"title":"Cookies"},"hide_canvas":{"default":false,"title":"Hide Canvas","type":"boolean"},"block_webrtc":{"default":false,"title":"Block Webrtc","type":"boolean"},"allow_webgl":{"default":true,"title":"Allow Webgl","type":"boolean"},"additional_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Additional Args"}},"required":["session_type"],"type":"object","$defs":{"SetCookieParam":{"properties":{"name":{"title":"Name","type":"string"},"value":{"title":"Value","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"expires":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expires"},"httpOnly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Httponly"},"secure":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Secure"},"sameSite":{"anyOf":[{"enum":["Lax","None","Strict"],"type":"string"},{"type":"null"}],"title":"Samesite"},"partitionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partitionkey"}},"title":"SetCookieParam","type":"object"}},"title":"open_sessionArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_open_request_session":{"post":{"operationId":"scrapling_open_request_session","summary":"[Scrapling sidecar] Open a persistent HTTP requests session (no browser) that can be reused across multiple\n`session_make_request` calls, keeping cookies, connections, and the browser fingerprint between requests.","description":"[Scrapling sidecar] Open a persistent HTTP requests session (no browser) that can be reused across multiple\n`session_make_request` calls, keeping cookies, connections, and the browser fingerprint between requests.\nThe session holds this configuration only; per-request options are passed to `session_make_request` on each call.\nIt shares `close_session`/`list_sessions` with the browser sessions and shows there as a 'static' session.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Session Id"},"impersonate":{"anyOf":[{"enum":["edge99","edge101","chrome99","chrome100","chrome101","chrome104","chrome107","chrome110","chrome116","chrome119","chrome120","chrome123","chrome124","chrome131","chrome133a","chrome136","chrome142","chrome145","chrome146","chrome150","chrome99_android","chrome131_android","safari153","safari155","safari170","safari172_ios","safari180","safari180_ios","safari184","safari184_ios","safari260","safari2601","safari260_ios","firefox133","firefox135","firefox144","firefox147","tor145","chrome","edge","safari","safari_ios","safari_beta","safari_ios_beta","chrome_android","firefox","safari15_3","safari15_5","safari17_0","safari17_2_ios","safari18_0","safari18_0_ios","safari18_4","safari18_4_ios"],"type":"string"},{"items":{"enum":["edge99","edge101","chrome99","chrome100","chrome101","chrome104","chrome107","chrome110","chrome116","chrome119","chrome120","chrome123","chrome124","chrome131","chrome133a","chrome136","chrome142","chrome145","chrome146","chrome150","chrome99_android","chrome131_android","safari153","safari155","safari170","safari172_ios","safari180","safari180_ios","safari184","safari184_ios","safari260","safari2601","safari260_ios","firefox133","firefox135","firefox144","firefox147","tor145","chrome","edge","safari","safari_ios","safari_beta","safari_ios_beta","chrome_android","firefox","safari15_3","safari15_5","safari17_0","safari17_2_ios","safari18_0","safari18_0_ios","safari18_4","safari18_4_ios"],"type":"string"},"type":"array"},{"type":"null"}],"default":"chrome","title":"Impersonate"},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Proxy"}},"type":"object","title":"open_request_sessionArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_close_session":{"post":{"operationId":"scrapling_close_session","summary":"[Scrapling sidecar] Close a persistent session and free its resources.","description":"[Scrapling sidecar] Close a persistent session and free its resources.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"session_id":{"title":"Session Id","type":"string"}},"required":["session_id"],"type":"object","title":"close_sessionArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_list_sessions":{"post":{"operationId":"scrapling_list_sessions","summary":"[Scrapling sidecar] List all active sessions with their details, including the effective settings each one was created with.","description":"[Scrapling sidecar] List all active sessions with their details, including the effective settings each one was created with.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"type":"object","title":"list_sessionsArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_make_request":{"post":{"operationId":"scrapling_make_request","summary":"[Scrapling sidecar] Make an HTTP request to a URL with any method (GET, POST, PUT, DELETE) and return a structured output of the result.","description":"[Scrapling sidecar] Make an HTTP request to a URL with any method (GET, POST, PUT, DELETE) and return a structured output of the result.\nOnly suitable for low-mid protection levels.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url":{"title":"Url","type":"string"},"method":{"default":"GET","enum":["GET","POST","PUT","DELETE"],"title":"Method","type":"string"},"impersonate":{"anyOf":[{"enum":["edge99","edge101","chrome99","chrome100","chrome101","chrome104","chrome107","chrome110","chrome116","chrome119","chrome120","chrome123","chrome124","chrome131","chrome133a","chrome136","chrome142","chrome145","chrome146","chrome150","chrome99_android","chrome131_android","safari153","safari155","safari170","safari172_ios","safari180","safari180_ios","safari184","safari184_ios","safari260","safari2601","safari260_ios","firefox133","firefox135","firefox144","firefox147","tor145","chrome","edge","safari","safari_ios","safari_beta","safari_ios_beta","chrome_android","firefox","safari15_3","safari15_5","safari17_0","safari17_2_ios","safari18_0","safari18_0_ios","safari18_4","safari18_4_ios"],"type":"string"},{"items":{"enum":["edge99","edge101","chrome99","chrome100","chrome101","chrome104","chrome107","chrome110","chrome116","chrome119","chrome120","chrome123","chrome124","chrome131","chrome133a","chrome136","chrome142","chrome145","chrome146","chrome150","chrome99_android","chrome131_android","safari153","safari155","safari170","safari172_ios","safari180","safari180_ios","safari184","safari184_ios","safari260","safari2601","safari260_ios","firefox133","firefox135","firefox144","firefox147","tor145","chrome","edge","safari","safari_ios","safari_beta","safari_ios_beta","chrome_android","firefox","safari15_3","safari15_5","safari17_0","safari17_2_ios","safari18_0","safari18_0_ios","safari18_4","safari18_4_ios"],"type":"string"},"type":"array"},{"type":"null"}],"default":"chrome","title":"Impersonate"},"extraction_type":{"default":"markdown","enum":["text","html","markdown"],"title":"Extraction Type","type":"string"},"css_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Css Selector"},"main_content_only":{"default":true,"title":"Main Content Only","type":"boolean"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Params"},"data":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Data"},"json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{},"type":"array"},{"type":"null"}],"default":null,"title":"Json"},"headers":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"},{"type":"null"}],"default":null,"title":"Headers"},"cookies":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Cookies"},"timeout":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"default":30,"title":"Timeout"},"follow_redirects":{"anyOf":[{"type":"boolean"},{"enum":["safe","all","obeycode","firstonly"],"type":"string"}],"default":"safe","title":"Follow Redirects"},"max_redirects":{"default":30,"title":"Max Redirects","type":"integer"},"retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":3,"title":"Retries"},"retry_delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Retry Delay"},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Proxy"},"proxy_auth":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Proxy Auth"},"auth":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Auth"},"verify":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Verify"},"http3":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"title":"Http3"},"stealthy_headers":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Stealthy Headers"}},"required":["url"],"type":"object","title":"make_requestArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_bulk_get":{"post":{"operationId":"scrapling_bulk_get","summary":"[Scrapling sidecar] Make GET HTTP request to a group of URLs and for each URL, return a structured output of the result.","description":"[Scrapling sidecar] Make GET HTTP request to a group of URLs and for each URL, return a structured output of the result.\nOnly suitable for low-mid protection levels.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"urls":{"items":{"type":"string"},"title":"Urls","type":"array"},"impersonate":{"anyOf":[{"enum":["edge99","edge101","chrome99","chrome100","chrome101","chrome104","chrome107","chrome110","chrome116","chrome119","chrome120","chrome123","chrome124","chrome131","chrome133a","chrome136","chrome142","chrome145","chrome146","chrome150","chrome99_android","chrome131_android","safari153","safari155","safari170","safari172_ios","safari180","safari180_ios","safari184","safari184_ios","safari260","safari2601","safari260_ios","firefox133","firefox135","firefox144","firefox147","tor145","chrome","edge","safari","safari_ios","safari_beta","safari_ios_beta","chrome_android","firefox","safari15_3","safari15_5","safari17_0","safari17_2_ios","safari18_0","safari18_0_ios","safari18_4","safari18_4_ios"],"type":"string"},{"items":{"enum":["edge99","edge101","chrome99","chrome100","chrome101","chrome104","chrome107","chrome110","chrome116","chrome119","chrome120","chrome123","chrome124","chrome131","chrome133a","chrome136","chrome142","chrome145","chrome146","chrome150","chrome99_android","chrome131_android","safari153","safari155","safari170","safari172_ios","safari180","safari180_ios","safari184","safari184_ios","safari260","safari2601","safari260_ios","firefox133","firefox135","firefox144","firefox147","tor145","chrome","edge","safari","safari_ios","safari_beta","safari_ios_beta","chrome_android","firefox","safari15_3","safari15_5","safari17_0","safari17_2_ios","safari18_0","safari18_0_ios","safari18_4","safari18_4_ios"],"type":"string"},"type":"array"},{"type":"null"}],"default":"chrome","title":"Impersonate"},"extraction_type":{"default":"markdown","enum":["text","html","markdown"],"title":"Extraction Type","type":"string"},"css_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Css Selector"},"main_content_only":{"default":true,"title":"Main Content Only","type":"boolean"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Params"},"headers":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"},{"type":"null"}],"default":null,"title":"Headers"},"cookies":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Cookies"},"timeout":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"default":30,"title":"Timeout"},"follow_redirects":{"anyOf":[{"type":"boolean"},{"enum":["safe","all","obeycode","firstonly"],"type":"string"}],"default":"safe","title":"Follow Redirects"},"max_redirects":{"default":30,"title":"Max Redirects","type":"integer"},"retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":3,"title":"Retries"},"retry_delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Retry Delay"},"proxy":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Proxy"},"proxy_auth":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Proxy Auth"},"auth":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Auth"},"verify":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Verify"},"http3":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"title":"Http3"},"stealthy_headers":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Stealthy Headers"}},"required":["urls"],"type":"object","title":"bulk_getArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_fetch":{"post":{"operationId":"scrapling_fetch","summary":"[Scrapling sidecar] Use playwright to open a browser to fetch a URL and return a structured output of the result.","description":"[Scrapling sidecar] Use playwright to open a browser to fetch a URL and return a structured output of the result.\nOnly suitable for low-mid protection levels.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url":{"title":"Url","type":"string"},"extraction_type":{"default":"markdown","enum":["text","html","markdown"],"title":"Extraction Type","type":"string"},"css_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Css Selector"},"main_content_only":{"default":true,"title":"Main Content Only","type":"boolean"},"headless":{"default":true,"title":"Headless","type":"boolean"},"google_search":{"default":true,"title":"Google Search","type":"boolean"},"real_chrome":{"default":false,"title":"Real Chrome","type":"boolean"},"wait":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":0,"title":"Wait"},"proxy":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Proxy"},"timezone_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Timezone Id"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Locale"},"extra_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Extra Headers"},"useragent":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Useragent"},"cdp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cdp Url"},"executable_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Executable Path"},"timeout":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":30000,"title":"Timeout"},"disable_resources":{"default":false,"title":"Disable Resources","type":"boolean"},"wait_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Wait Selector"},"cookies":{"anyOf":[{"items":{"$ref":"#/$defs/SetCookieParam"},"type":"array"},{"type":"null"}],"default":null,"title":"Cookies"},"network_idle":{"default":false,"title":"Network Idle","type":"boolean"},"wait_selector_state":{"default":"attached","enum":["attached","detached","hidden","visible"],"title":"Wait Selector State","type":"string"}},"required":["url"],"type":"object","$defs":{"SetCookieParam":{"properties":{"name":{"title":"Name","type":"string"},"value":{"title":"Value","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"expires":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expires"},"httpOnly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Httponly"},"secure":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Secure"},"sameSite":{"anyOf":[{"enum":["Lax","None","Strict"],"type":"string"},{"type":"null"}],"title":"Samesite"},"partitionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partitionkey"}},"title":"SetCookieParam","type":"object"}},"title":"fetchArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_bulk_fetch":{"post":{"operationId":"scrapling_bulk_fetch","summary":"[Scrapling sidecar] Use playwright to open a browser, then fetch a group of URLs at the same time, and for each page return a structured output of the result.","description":"[Scrapling sidecar] Use playwright to open a browser, then fetch a group of URLs at the same time, and for each page return a structured output of the result.\nOnly suitable for low-mid protection levels.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"urls":{"items":{"type":"string"},"title":"Urls","type":"array"},"extraction_type":{"default":"markdown","enum":["text","html","markdown"],"title":"Extraction Type","type":"string"},"css_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Css Selector"},"main_content_only":{"default":true,"title":"Main Content Only","type":"boolean"},"headless":{"default":true,"title":"Headless","type":"boolean"},"google_search":{"default":true,"title":"Google Search","type":"boolean"},"real_chrome":{"default":false,"title":"Real Chrome","type":"boolean"},"wait":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":0,"title":"Wait"},"proxy":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Proxy"},"timezone_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Timezone Id"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Locale"},"extra_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Extra Headers"},"useragent":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Useragent"},"cdp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cdp Url"},"executable_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Executable Path"},"timeout":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":30000,"title":"Timeout"},"disable_resources":{"default":false,"title":"Disable Resources","type":"boolean"},"wait_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Wait Selector"},"cookies":{"anyOf":[{"items":{"$ref":"#/$defs/SetCookieParam"},"type":"array"},{"type":"null"}],"default":null,"title":"Cookies"},"network_idle":{"default":false,"title":"Network Idle","type":"boolean"},"wait_selector_state":{"default":"attached","enum":["attached","detached","hidden","visible"],"title":"Wait Selector State","type":"string"}},"required":["urls"],"type":"object","$defs":{"SetCookieParam":{"properties":{"name":{"title":"Name","type":"string"},"value":{"title":"Value","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"expires":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expires"},"httpOnly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Httponly"},"secure":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Secure"},"sameSite":{"anyOf":[{"enum":["Lax","None","Strict"],"type":"string"},{"type":"null"}],"title":"Samesite"},"partitionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partitionkey"}},"title":"SetCookieParam","type":"object"}},"title":"bulk_fetchArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_stealthy_fetch":{"post":{"operationId":"scrapling_stealthy_fetch","summary":"[Scrapling sidecar] Use the stealthy fetcher to fetch a URL and return a structured output of the result.","description":"[Scrapling sidecar] Use the stealthy fetcher to fetch a URL and return a structured output of the result.\nThe only fetcher suitable for high-protection websites.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url":{"title":"Url","type":"string"},"extraction_type":{"default":"markdown","enum":["text","html","markdown"],"title":"Extraction Type","type":"string"},"css_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Css Selector"},"main_content_only":{"default":true,"title":"Main Content Only","type":"boolean"},"headless":{"default":true,"title":"Headless","type":"boolean"},"google_search":{"default":true,"title":"Google Search","type":"boolean"},"real_chrome":{"default":false,"title":"Real Chrome","type":"boolean"},"wait":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":0,"title":"Wait"},"proxy":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Proxy"},"timezone_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Timezone Id"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Locale"},"extra_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Extra Headers"},"useragent":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Useragent"},"hide_canvas":{"default":false,"title":"Hide Canvas","type":"boolean"},"cdp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cdp Url"},"executable_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Executable Path"},"timeout":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":30000,"title":"Timeout"},"disable_resources":{"default":false,"title":"Disable Resources","type":"boolean"},"wait_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Wait Selector"},"cookies":{"anyOf":[{"items":{"$ref":"#/$defs/SetCookieParam"},"type":"array"},{"type":"null"}],"default":null,"title":"Cookies"},"network_idle":{"default":false,"title":"Network Idle","type":"boolean"},"wait_selector_state":{"default":"attached","enum":["attached","detached","hidden","visible"],"title":"Wait Selector State","type":"string"},"block_webrtc":{"default":false,"title":"Block Webrtc","type":"boolean"},"allow_webgl":{"default":true,"title":"Allow Webgl","type":"boolean"},"solve_cloudflare":{"default":false,"title":"Solve Cloudflare","type":"boolean"},"additional_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Additional Args"}},"required":["url"],"type":"object","$defs":{"SetCookieParam":{"properties":{"name":{"title":"Name","type":"string"},"value":{"title":"Value","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"expires":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expires"},"httpOnly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Httponly"},"secure":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Secure"},"sameSite":{"anyOf":[{"enum":["Lax","None","Strict"],"type":"string"},{"type":"null"}],"title":"Samesite"},"partitionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partitionkey"}},"title":"SetCookieParam","type":"object"}},"title":"stealthy_fetchArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_bulk_stealthy_fetch":{"post":{"operationId":"scrapling_bulk_stealthy_fetch","summary":"[Scrapling sidecar] Use the stealthy fetcher to fetch a group of URLs at the same time, and for each page return a structured output of the result.","description":"[Scrapling sidecar] Use the stealthy fetcher to fetch a group of URLs at the same time, and for each page return a structured output of the result.\nThe only fetcher suitable for high-protection websites.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"urls":{"items":{"type":"string"},"title":"Urls","type":"array"},"extraction_type":{"default":"markdown","enum":["text","html","markdown"],"title":"Extraction Type","type":"string"},"css_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Css Selector"},"main_content_only":{"default":true,"title":"Main Content Only","type":"boolean"},"headless":{"default":true,"title":"Headless","type":"boolean"},"google_search":{"default":true,"title":"Google Search","type":"boolean"},"real_chrome":{"default":false,"title":"Real Chrome","type":"boolean"},"wait":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":0,"title":"Wait"},"proxy":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Proxy"},"timezone_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Timezone Id"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Locale"},"extra_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Extra Headers"},"useragent":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Useragent"},"hide_canvas":{"default":false,"title":"Hide Canvas","type":"boolean"},"cdp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Cdp Url"},"executable_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Executable Path"},"timeout":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":30000,"title":"Timeout"},"disable_resources":{"default":false,"title":"Disable Resources","type":"boolean"},"wait_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Wait Selector"},"cookies":{"anyOf":[{"items":{"$ref":"#/$defs/SetCookieParam"},"type":"array"},{"type":"null"}],"default":null,"title":"Cookies"},"network_idle":{"default":false,"title":"Network Idle","type":"boolean"},"wait_selector_state":{"default":"attached","enum":["attached","detached","hidden","visible"],"title":"Wait Selector State","type":"string"},"block_webrtc":{"default":false,"title":"Block Webrtc","type":"boolean"},"allow_webgl":{"default":true,"title":"Allow Webgl","type":"boolean"},"solve_cloudflare":{"default":false,"title":"Solve Cloudflare","type":"boolean"},"additional_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Additional Args"}},"required":["urls"],"type":"object","$defs":{"SetCookieParam":{"properties":{"name":{"title":"Name","type":"string"},"value":{"title":"Value","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"expires":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expires"},"httpOnly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Httponly"},"secure":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Secure"},"sameSite":{"anyOf":[{"enum":["Lax","None","Strict"],"type":"string"},{"type":"null"}],"title":"Samesite"},"partitionKey":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partitionkey"}},"title":"SetCookieParam","type":"object"}},"title":"bulk_stealthy_fetchArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_session_fetch":{"post":{"operationId":"scrapling_session_fetch","summary":"[Scrapling sidecar] Fetch a URL through a browser session previously opened with `open_session` and return a structured output of the result.","description":"[Scrapling sidecar] Fetch a URL through a browser session previously opened with `open_session` and return a structured output of the result.\nThe session (dynamic or stealthy) holds the browser-level configuration; every option here applies to this request only, with the defaults shown.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url":{"title":"Url","type":"string"},"session_id":{"title":"Session Id","type":"string"},"extraction_type":{"default":"markdown","enum":["text","html","markdown"],"title":"Extraction Type","type":"string"},"css_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Css Selector"},"main_content_only":{"default":true,"title":"Main Content Only","type":"boolean"},"wait":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":0,"title":"Wait"},"timeout":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":30000,"title":"Timeout"},"google_search":{"default":true,"title":"Google Search","type":"boolean"},"network_idle":{"default":false,"title":"Network Idle","type":"boolean"},"load_dom":{"default":true,"title":"Load Dom","type":"boolean"},"disable_resources":{"default":false,"title":"Disable Resources","type":"boolean"},"wait_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Wait Selector"},"wait_selector_state":{"default":"attached","enum":["attached","detached","hidden","visible"],"title":"Wait Selector State","type":"string"},"extra_headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Extra Headers"},"blocked_domains":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"default":null,"title":"Blocked Domains"},"solve_cloudflare":{"default":false,"title":"Solve Cloudflare","type":"boolean"}},"required":["url","session_id"],"type":"object","title":"session_fetchArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_session_make_request":{"post":{"operationId":"scrapling_session_make_request","summary":"[Scrapling sidecar] Make an HTTP request with any method (GET, POST, PUT, DELETE) through a requests session previously opened\nwith `open_request_session`, keeping its cookies, connections, and browser fingerprint across calls.","description":"[Scrapling sidecar] Make an HTTP request with any method (GET, POST, PUT, DELETE) through a requests session previously opened\nwith `open_request_session`, keeping its cookies, connections, and browser fingerprint across calls. The session\nholds the impersonation and proxy configuration; every option here applies to this request only, with the defaults shown.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url":{"title":"Url","type":"string"},"session_id":{"title":"Session Id","type":"string"},"method":{"default":"GET","enum":["GET","POST","PUT","DELETE"],"title":"Method","type":"string"},"extraction_type":{"default":"markdown","enum":["text","html","markdown"],"title":"Extraction Type","type":"string"},"css_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Css Selector"},"main_content_only":{"default":true,"title":"Main Content Only","type":"boolean"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Params"},"data":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Data"},"json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"items":{},"type":"array"},{"type":"null"}],"default":null,"title":"Json"},"headers":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"},{"type":"null"}],"default":null,"title":"Headers"},"cookies":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Cookies"},"timeout":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"default":30,"title":"Timeout"},"follow_redirects":{"anyOf":[{"type":"boolean"},{"enum":["safe","all","obeycode","firstonly"],"type":"string"}],"default":"safe","title":"Follow Redirects"},"max_redirects":{"default":30,"title":"Max Redirects","type":"integer"},"retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":3,"title":"Retries"},"retry_delay":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":1,"title":"Retry Delay"},"auth":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"title":"Auth"},"verify":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Verify"},"http3":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"title":"Http3"},"stealthy_headers":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"title":"Stealthy Headers"}},"required":["url","session_id"],"type":"object","title":"session_make_requestArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}},"/tool/scrapling_screenshot":{"post":{"operationId":"scrapling_screenshot","summary":"[Scrapling sidecar] Capture a screenshot of a web page using an existing browser session and return it as an image.","description":"[Scrapling sidecar] Capture a screenshot of a web page using an existing browser session and return it as an image.\nA browser session must be opened first with `open_session` (either `dynamic` or `stealthy`); the session ID is then passed here.","requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"url":{"title":"Url","type":"string"},"session_id":{"title":"Session Id","type":"string"},"image_type":{"default":"png","enum":["png","jpeg"],"title":"Image Type","type":"string"},"full_page":{"default":false,"title":"Full Page","type":"boolean"},"quality":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Quality"},"wait":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":0,"title":"Wait"},"wait_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Wait Selector"},"wait_selector_state":{"default":"attached","enum":["attached","detached","hidden","visible"],"title":"Wait Selector State","type":"string"},"network_idle":{"default":false,"title":"Network Idle","type":"boolean"},"timeout":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":30000,"title":"Timeout"}},"required":["url","session_id"],"type":"object","title":"screenshotArguments"}}}},"responses":{"200":{"description":"Tool result"}},"security":[{"bearerAuth":[]}]}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}}}