init-browser
Launch a browser and navigate to a specified URL for web page interaction and element inspection in Playwright test automation.
Instructions
Initialize a browser with a URL
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to navigate to |
Implementation Reference
- src/mcp/index.ts:64-140 (handler)Executes the init-browser tool: logs event, closes existing browser/context if any, launches new Chromium browser (headless false), creates context with specific options, new page, exposes multiple functions (picking, screenshot, executeCode), initializes state and recording, injects toolbox script, navigates to URL, returns success message.async ({ url }) => { posthogServer.capture({ distinctId: getUserId(), event: 'init_browser', properties: { url, }, }); if (context) { await context.close(); } if (browser) { await browser.close(); } browser = await chromium.launch({ headless: false, }); context = await browser.newContext({ viewport: null, userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36', bypassCSP: true, }); page = await context.newPage(); await page.exposeFunction('triggerMcpStartPicking', (pickingType: 'DOM' | 'Image') => { page.evaluate((pickingType: 'DOM' | 'Image') => { window.mcpStartPicking(pickingType); }, pickingType); }); await page.exposeFunction('triggerMcpStopPicking', () => { page.evaluate(() => { window.mcpStopPicking(); }); }); await page.exposeFunction('onElementPicked', (message: Message) => { const state = getState(); state.messages.push(message); state.pickingType = null; updateState(page, state); }); await page.exposeFunction('takeScreenshot', async (selector: string) => { try { const screenshot = await page.locator(selector).screenshot({ timeout: 5000 }); return screenshot.toString('base64'); } catch (error) { console.error('Error taking screenshot', error); return null; } }); await page.exposeFunction('executeCode', async (code: string) => { const result = await secureEvalAsync(page, code); return result; }); await initState(page); await initRecording(page, handleBrowserEvent(page)); await page.addInitScript(injectToolbox); await page.goto(url); return { content: [ { type: "text", text: `Browser has been initialized and navigated to ${url}`, }, ], }; }
- src/mcp/index.ts:62-63 (schema)Input schema for init-browser tool: requires a valid URL string.url: z.string().url().describe('The URL to navigate to') },
- src/mcp/index.ts:58-141 (registration)Registers the 'init-browser' tool with McpServer using server.tool(), providing name, description, Zod input schema, and inline handler function.server.tool( 'init-browser', 'Initialize a browser with a URL', { url: z.string().url().describe('The URL to navigate to') }, async ({ url }) => { posthogServer.capture({ distinctId: getUserId(), event: 'init_browser', properties: { url, }, }); if (context) { await context.close(); } if (browser) { await browser.close(); } browser = await chromium.launch({ headless: false, }); context = await browser.newContext({ viewport: null, userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36', bypassCSP: true, }); page = await context.newPage(); await page.exposeFunction('triggerMcpStartPicking', (pickingType: 'DOM' | 'Image') => { page.evaluate((pickingType: 'DOM' | 'Image') => { window.mcpStartPicking(pickingType); }, pickingType); }); await page.exposeFunction('triggerMcpStopPicking', () => { page.evaluate(() => { window.mcpStopPicking(); }); }); await page.exposeFunction('onElementPicked', (message: Message) => { const state = getState(); state.messages.push(message); state.pickingType = null; updateState(page, state); }); await page.exposeFunction('takeScreenshot', async (selector: string) => { try { const screenshot = await page.locator(selector).screenshot({ timeout: 5000 }); return screenshot.toString('base64'); } catch (error) { console.error('Error taking screenshot', error); return null; } }); await page.exposeFunction('executeCode', async (code: string) => { const result = await secureEvalAsync(page, code); return result; }); await initState(page); await initRecording(page, handleBrowserEvent(page)); await page.addInitScript(injectToolbox); await page.goto(url); return { content: [ { type: "text", text: `Browser has been initialized and navigated to ${url}`, }, ], }; } )