browser_evaluate
Execute JavaScript code directly in the browser to manipulate DOM, retrieve data, or test functionality. Provides dynamic interaction with web pages through script execution.
Instructions
Execute JavaScript in the browser context
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | JavaScript code to execute |
Implementation Reference
- src/executor.ts:456-510 (handler)The handler function `handleBrowserEvaluate` that executes JavaScript in the browser context via Playwright's `page.evaluate()`. It intercepts console.log/info/warn/error, runs `eval(script)` in the page, and returns both the script result (JSON-stringified) and any console output.
async function handleBrowserEvaluate(page: Page, args: any): Promise<{ toolResult: CallToolResult }> { try { const result = await page.evaluate((script) => { const logs: string[] = []; const originalConsole = { ...console }; ['log', 'info', 'warn', 'error'].forEach(method => { (console as any)[method] = (...args: any[]) => { logs.push(`[${method}] ${args.join(' ')}`); (originalConsole as any)[method](...args); }; }); try { const result = eval(script); Object.assign(console, originalConsole); return { result, logs }; } catch (error) { Object.assign(console, originalConsole); throw error; } }, args.script); return { toolResult: { content: [ { type: "text", text: `Script result: ${JSON.stringify(result.result, null, 2)}`, }, { type: "text", text: `Console output:\n${result.logs.join('\n')}`, } ], isError: false, }, }; } catch (error) { return { toolResult: { content: [{ type: "text", text: `Script execution failed: ${(error as Error).message}`, }], isError: true, }, }; } } - src/tools.ts:119-129 (schema)The input schema definition for 'browser_evaluate' tool, requiring a 'script' string property (JavaScript code to execute).
{ name: "browser_evaluate", description: "Execute JavaScript in the browser context", inputSchema: { type: "object", properties: { script: { type: "string", description: "JavaScript code to execute" } }, required: ["script"] } }, - src/tools.ts:3-12 (registration)The tool string 'browser_evaluate' is registered in the BROWSER_TOOLS array which is used by the executor to route tool calls to the browser.
export const BROWSER_TOOLS = [ "browser_navigate", "browser_screenshot", "browser_click", "browser_fill", "browser_select", "browser_hover", "browser_evaluate", "browser_set_viewport" ]; - src/executor.ts:206-207 (registration)The switch-case dispatcher in `executeToolCall` that routes the 'browser_evaluate' tool name to the `handleBrowserEvaluate` handler function.
case "browser_evaluate": return await handleBrowserEvaluate(activePage!, args);