Skip to main content
Glama

browser_install

Install the required browser for Playwright MCP to interact with web pages through structured accessibility snapshots, resolving browser not installed errors.

Instructions

Install the browser specified in the config. Call this if you get an error about the browser not being installed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The handler function for the 'browser_install' tool that forks the Playwright CLI to install the specified browser channel, captures stdout/stderr, awaits completion, and handles errors by rejecting with output.
    handle: async (context, params, response) => { const channel = context.config.browser?.launchOptions?.channel ?? context.config.browser?.browserName ?? 'chrome'; const cliUrl = import.meta.resolve('playwright/package.json'); const cliPath = path.join(fileURLToPath(cliUrl), '..', 'cli.js'); const child = fork(cliPath, ['install', channel], { stdio: 'pipe', }); const output: string[] = []; child.stdout?.on('data', data => output.push(data.toString())); child.stderr?.on('data', data => output.push(data.toString())); await new Promise<void>((resolve, reject) => { child.on('close', code => { if (code === 0) resolve(); else reject(new Error(`Failed to install browser: ${output.join('')}`)); }); }); response.setIncludeTabs(); },
  • Tool schema defining name 'browser_install', description, empty input schema (no parameters), and destructive type.
    schema: { name: 'browser_install', title: 'Install the browser specified in the config', description: 'Install the browser specified in the config. Call this if you get an error about the browser not being installed.', inputSchema: z.object({}), type: 'destructive', },
  • src/tools.ts:36-52 (registration)
    Central registration of all tools by importing and spreading individual tool modules (including install) into the allTools array, which is filtered and used by the browser server backend.
    export const allTools: Tool<any>[] = [ ...common, ...console, ...dialogs, ...evaluate, ...files, ...install, ...keyboard, ...navigate, ...network, ...mouse, ...pdf, ...screenshot, ...snapshot, ...tabs, ...wait, ];
  • The browser server backend imports filteredTools from tools.ts and assigns filtered tools to this._tools during construction, providing tools() and callTool for MCP server integration.
    import { filteredTools } from './tools.js'; import { packageJSON } from './package.js'; import { defineTool } from './tools/tool.js'; import type { Tool } from './tools/tool.js'; import type { BrowserContextFactory } from './browserContextFactory.js'; import type * as mcpServer from './mcp/server.js'; import type { ServerBackend } from './mcp/server.js'; type NonEmptyArray<T> = [T, ...T[]]; export type FactoryList = NonEmptyArray<BrowserContextFactory>; export class BrowserServerBackend implements ServerBackend { name = 'Playwright'; version = packageJSON.version; private _tools: Tool[]; private _context: Context | undefined; private _sessionLog: SessionLog | undefined; private _config: FullConfig; private _browserContextFactory: BrowserContextFactory; constructor(config: FullConfig, factories: FactoryList) { this._config = config; this._browserContextFactory = factories[0]; this._tools = filteredTools(config);

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/maywzh/playwright-mcp'

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