Skip to main content
Glama
devskido

Playwright MCP Server

by devskido

playwright_navigate

Navigate to specified URLs in a browser for web automation tasks like content scraping, testing, or page interaction.

Instructions

Navigate to a URL

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesURL to navigate to the website specified
browserTypeNoBrowser type to use (chromium, firefox, webkit). Defaults to chromium
widthNoViewport width in pixels (default: 1280)
heightNoViewport height in pixels (default: 720)
timeoutNoNavigation timeout in milliseconds
waitUntilNoNavigation wait condition
headlessNoRun browser in headless mode (default: false)

Implementation Reference

  • The `execute` method of `NavigationTool` class implements the `playwright_navigate` tool by performing `page.goto()` navigation with error handling for browser connection issues.
    async execute(args: any, context: ToolContext): Promise<ToolResponse> {
      // Check if browser is available
      if (!context.browser || !context.browser.isConnected()) {
        // If browser is not connected, we need to reset the state to force recreation
        resetBrowserState();
        return createErrorResponse(
          "Browser is not connected. The connection has been reset - please retry your navigation."
        );
      }
    
      // Check if page is available and not closed
      if (!context.page || context.page.isClosed()) {
        return createErrorResponse(
          "Page is not available or has been closed. Please retry your navigation."
        );
      }
    
      return this.safeExecute(context, async (page) => {
        try {
          await page.goto(args.url, {
            timeout: args.timeout || 30000,
            waitUntil: args.waitUntil || "load"
          });
          
          return createSuccessResponse(`Navigated to ${args.url}`);
        } catch (error) {
          const errorMessage = (error as Error).message;
          
          // Check for common disconnection errors
          if (
            errorMessage.includes("Target page, context or browser has been closed") ||
            errorMessage.includes("Target closed") ||
            errorMessage.includes("Browser has been disconnected")
          ) {
            // Reset browser state to force recreation on next attempt
            resetBrowserState();
            return createErrorResponse(
              `Browser connection issue: ${errorMessage}. Connection has been reset - please retry your navigation.`
            );
          }
          
          // For other errors, return the standard error
          throw error;
        }
      });
    }
  • The tool definition object including name, description, and inputSchema for `playwright_navigate`.
    {
      name: "playwright_navigate",
      description: "Navigate to a URL",
      inputSchema: {
        type: "object",
        properties: {
          url: { type: "string", description: "URL to navigate to the website specified" },
          browserType: { type: "string", description: "Browser type to use (chromium, firefox, webkit). Defaults to chromium", enum: ["chromium", "firefox", "webkit"] },
          width: { type: "number", description: "Viewport width in pixels (default: 1280)" },
          height: { type: "number", description: "Viewport height in pixels (default: 720)" },
          timeout: { type: "number", description: "Navigation timeout in milliseconds" },
          waitUntil: { type: "string", description: "Navigation wait condition" },
          headless: { type: "boolean", description: "Run browser in headless mode (default: false)" }
        },
        required: ["url"],
      },
    },
  • Switch case in `handleToolCall` that registers and routes `playwright_navigate` calls to the NavigationTool handler.
    case "playwright_navigate":
      return await navigationTool.execute(args, context);
  • src/tools.ts:450-452 (registration)
    `playwright_navigate` is listed in the BROWSER_TOOLS array, used for conditional browser launch and tool categorization.
    export const BROWSER_TOOLS = [
      "playwright_navigate",
      "playwright_screenshot",
  • Code generation helper in PlaywrightGenerator that converts `playwright_navigate` actions into test code steps.
    case 'playwright_navigate':
      return this.generateNavigateStep(parameters);
    case 'playwright_fill':

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/devskido/customed-playwright'

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