Skip to main content
Glama
yashpreetbathla

MCP Accessibility Bridge

Navigate to URL

browser_navigate

Navigate a browser to a specified URL for accessibility testing, returning page title and status code upon completion.

Instructions

Navigate the connected browser to a URL. Returns the page title and HTTP status code when complete.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesURL to navigate to
waitUntilNoWhen to consider navigation complete. Default: loadload
timeoutNoNavigation timeout in milliseconds. Default: 30000

Implementation Reference

  • The main handler function that executes the browser navigation logic. It connects to the browser, navigates to the specified URL, waits for the page to load, and returns success information including the page title, final URL, and HTTP status.
    export async function browserNavigateHandler(args: {
      url: string;
      waitUntil?: 'load' | 'domcontentloaded' | 'networkidle0' | 'networkidle2';
      timeout?: number;
    }): Promise<ReturnType<typeof toolSuccess | typeof toolError>> {
      try {
        const { page } = browserManager.requireConnection();
    
        const response = await page.goto(args.url, {
          waitUntil: args.waitUntil ?? 'load',
          timeout: args.timeout ?? 30000,
        });
    
        const title = await page.title().catch(() => '');
        const finalUrl = page.url();
        const status = response?.status() ?? null;
    
        return toolSuccess({
          navigated: true,
          url: args.url,
          finalUrl,
          title,
          status,
          message: `Navigated to "${title || finalUrl}" (HTTP ${status})`,
        });
      } catch (error) {
        return toolError(error);
      }
    }
  • Zod schema defining the input parameters for the browser_navigate tool, including url (required), waitUntil (optional, enum), and timeout (optional, number) with default values and descriptions.
    export const browserNavigateSchema = {
      url: z.string().url().describe('URL to navigate to'),
      waitUntil: z
        .enum(['load', 'domcontentloaded', 'networkidle0', 'networkidle2'])
        .optional()
        .default('load')
        .describe('When to consider navigation complete. Default: load'),
      timeout: z
        .number()
        .int()
        .positive()
        .optional()
        .default(30000)
        .describe('Navigation timeout in milliseconds. Default: 30000'),
    };
  • src/index.ts:34-45 (registration)
    Tool registration in the MCP server, registering 'browser_navigate' with its title, description, input schema, and handler function.
    // ── browser_navigate ─────────────────────────────────────────────────────────
    server.registerTool(
      'browser_navigate',
      {
        title: 'Navigate to URL',
        description:
          'Navigate the connected browser to a URL. ' +
          'Returns the page title and HTTP status code when complete.',
        inputSchema: browserNavigateSchema,
      },
      browserNavigateHandler
    );
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses the return values (page title and HTTP status code) and implies navigation completion, which is useful. However, it lacks details on error handling (e.g., timeouts, invalid URLs), side effects (e.g., page reload, history changes), or performance considerations, leaving behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero waste: the first states the action and resource, the second specifies return values. It's front-loaded with the core purpose and efficiently structured, making every sentence earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description partially compensates by stating return values. However, for a navigation tool with 3 parameters and potential side effects, it lacks details on prerequisites, error scenarios, and behavioral nuances, making it minimally adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters (url, waitUntil, timeout). The description adds no parameter-specific information beyond what the schema provides, such as explaining waitUntil options or timeout implications. Baseline 3 is appropriate as the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Navigate') and resource ('connected browser to a URL'), distinguishing it from siblings like browser_connect/disconnect (connection management) or get_element_properties (element inspection). It precisely communicates the core function without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., browser must be connected via browser_connect), exclusions (e.g., not for interacting with page elements), or comparisons to sibling tools like get_interactive_elements for post-navigation actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/yashpreetbathla/mcp-accessibility-bridge'

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