init-browser
Launch a browser session and navigate to a specified URL for web automation and testing with Playwright MCP server.
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:58-141 (handler)Full implementation of the 'init-browser' tool, including registration, input schema (URL), and the handler function that closes existing browser if any, launches a new Chromium browser in non-headless mode, sets up context with custom user agent and bypassCSP, creates page, exposes several MCP utility functions (picking, screenshot, executeCode), initializes state and recording, injects toolbox script, navigates to the URL, and returns a text message.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}`, }, ], }; } )