Skip to main content
Glama

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
NameRequiredDescriptionDefault
urlYesThe URL to navigate to

Implementation Reference

  • 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}`, }, ], }; }
  • Input schema for init-browser tool: requires a valid URL string.
    url: z.string().url().describe('The URL to navigate to') },
  • 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}`, }, ], }; } )

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Ashish-Bansal/playwright-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server