Skip to main content
Glama
nayakprashant

Selenium MCP Server

Selenium MCP Server

Python Selenium MCP Author

Model Context Protocol (MCP) server for Selenium WebDriver that enables AI agents and LLMs to control real browsers for automation

This project exposes Selenium WebDriver as an MCP (Model Context Protocol) server, allowing AI agents to control a real browser through structured tools.

It enables LLMs and autonomous agents to perform tasks like:

  • Opening browsers

  • Navigating websites

  • Discovering UI elements

  • Clicking buttons and links

  • Typing into inputs

  • Extracting page text

  • Taking screenshots

  • Many more future upgrades (in-progress)

This makes it possible to build AI-powered browser automation systems and autonomous QA agents.

Table of Contents

Related MCP server: Selenium MCP Server

WHY THIS PROJECT EXISTS

Modern AI agents need a way to interact with real applications.

While traditional automation tools like Selenium exist, they are not directly usable by LLM agents.

This project bridges that gap by exposing Selenium functionality through MCP tools so that agents can:

  • Understand web pages

  • Discover UI elements

  • Perform actions

  • Validate results

ARCHITECTURE

flowchart TD
    A[LLM Agent] --> B[MCP Protocol]
    B --> C[Selenium MCP Server]

    C --> D[Browser Tools]
    C --> E[Navigation Tools]
    C --> F[Interaction Tools]
    C --> G[Element Tools]
    C --> H[Debug Tools]

    D --> I[Selenium WebDriver]
    E --> I
    F --> I
    G --> I
    H --> I
    
    I --> J[Browser]

FEATURES

  • MCP-compatible Selenium automation server

  • Browser session management

  • Navigation controls

  • UI element discovery

  • Accessibility-aware interaction

  • Screenshot capture

  • Page text extraction

  • Headless browser support

  • Multi-tab browser management (open, switch, close, track active tab)

  • Improved interactive element detection for modern UI frameworks (React, Angular, dynamic DOM)

INSTALLATION

Run the following command

pip install selenium-mcp

RUNNING THE SERVER

Start the MCP server

You can start the Selenium MCP server using different transport modes depending on your use case.

Default (STDIO)
selenium-mcp run
  • Uses stdio transport

  • Best for local agent integrations

  • No network exposure

selenium-mcp run --transport http --host 127.0.0.1 --port 3345

Starts server at: http://127.0.0.1:3345

MCP endpoint: http://127.0.0.1:3345/mcp

Best for:

  • API integrations

  • Postman / curl testing

  • production-style usage

SSE Mode (Streaming)
selenium-mcp run --transport sse --host 127.0.0.1 --port 3345

Starts server at: http://127.0.0.1:3345/sse

Best for:

  • streaming-based agents

  • real-time interactions

Note: Note: SSE endpoints are streaming and may not show output directly in the browser.

Expose Server on Network:
selenium-mcp run --transport http --host 0.0.0.0 --port 3345

Makes server accessible from:

  • other devices on the same network

  • Docker / VM environments

Notes:

Default port: 3336 Supported transports:

stdio (default)
http
sse

Ensure port is within range: 1–65535

MCP SERVER VERSION

To check the current version of the selenium MCP server, run the following command:

selenium-mcp version

AVAILABLE MCP TOOLS

Run the following command to get the list of tools supported by MCP server:

selenium-mcp tools 

This returns the list of tools supported by MCP server.

BROWSER CONTROL

  1. open_browser – Launch a new browser session

  2. close_browser – Close the browser session

  3. maximize_browser – Maximize browser window

  4. fullscreen_browser – Switch browser to fullscreen

NAVIGATION

  1. open_url – Navigate to a specific URL

  2. navigate_back – Navigate back in browser history

  3. navigate_forward – Navigate forward in history

  4. refresh_page – Reload the page

  5. wait_for_page – Wait for page to load

  6. get_page_title – Get the current page title

TAB MANAGEMENT

  1. get_tabs – Retrieve all open tabs in the current session

  2. switch_tab – Switch to a specific tab using index

  3. open_new_tab – Open a new tab and optionally navigate to a URL

  4. close_tab – Close a specific tab by index

  5. get_current_tab – Retrieve the currently active tab

  6. name_tab – Assign a custom name to a tab for easier identification

These tools allow agents to manage multiple tabs within a single browser session.

ELEMENT DISCOVERY

  1. get_interactive_elements – Discover visible interactive elements on the page

  2. get_accessibility_tree – Retrieve simplified accessibility tree for the page

These tools allow agents to understand the UI structure before interacting with it.

Notes

  • Element detection is optimized for modern web applications (React, Angular, dynamic UI frameworks).

  • Elements are identified using interaction signals such as roles, click handlers, and focusability.

  • Only visible and meaningful elements are returned to reduce noise.

INTERACTION TOOLS

  1. click_element – Click an element by index

  2. type_into_element – Enter text into an input field

Elements must first be discovered using: get_interactive_elements

PAGE ANALYSIS

get_page_text – Extract visible text from the page

Useful for:

  • validation

  • reasoning

  • information extraction

VISUAL DEBUGGING

take_screenshot – Capture a screenshot of the current browser window

Screenshot Storage Location

When screenshots are captured, they are automatically saved in a hidden folder inside your home directory.

macOS / Linux

Screenshots are stored at:

~/.selenium-mcp/screenshot

Example full path:

/Users/<your-username>/.selenium-mcp/screenshot

You can open the folder using Terminal:

open ~/.selenium-mcp/screenshot
Windows

Screenshots are stored at:

C:\Users\<your-username>\.selenium-mcp\screenshot

Example:

C:\Users\John\.selenium-mcp\screenshot

You can open it from File Explorer by entering the following in the address bar:

%USERPROFILE%\.selenium-mcp\screenshot

Custom Screenshot Directory (Optional)

You can override the default screenshot location using the environment variable: SELENIUM_MCP_SCREENSHOT_DIR

macOS / Linux
export SELENIUM_MCP_SCREENSHOT_DIR=~/my-screenshots
Windows (PowerShell)
$env:SELENIUM_MCP_SCREENSHOT_DIR="C:\my-screenshots"

All screenshots will then be saved to the specified directory.

Notes
  • The folder is created automatically the first time a screenshot is taken.

  • The .selenium-mcp directory is hidden by default because it starts with a dot (.).

  • You can safely delete screenshots anytime.

BROWSER SESSION FLOW

Each browser session is identified by a session_id.

Typical workflow for agents:

  1. open_browser

  2. open_url

  3. wait_for_page

  4. get_interactive_elements

  5. (optional) get_tabs / switch_tab if multiple tabs are present

  6. click_element or type_into_element

MULTI-TAB WORKFLOW

Agents can work with multiple tabs within the same browser session.

Example workflow:

  1. open_browser

  2. open_url

  3. open_new_tab("https://example.com")

  4. get_tabs

  5. switch_tab(index)

  6. perform actions

  7. close_tab(index)

Notes

  • Each tab is tracked using an internal index.

  • The active tab is automatically managed and updated.

  • All actions are performed on the currently active tab.

EXAMPLE AGENT WORKFLOW

Example task:

  1. Open Chrome browser.

  2. Navigate to Google.com

  3. Type the text "Selenium MCP" in the search box.

  4. Press the search button

Agent steps:

open_browser
open_url("https://google.com")
wait_for_page
get_interactive_elements
type_into_element(index, "Selenium MCP")
click_element(index)
wait_for_page
get_page_text

SYSTEM PROMPT FOR AI AGENTS

This repository includes a production-grade system prompt designed specifically for browser automation agents that interact with this Selenium MCP server.

The prompt contains detailed operational guidelines that instruct the AI agent on how to:

  • initialize and control the browser

  • discover and interact with UI elements

  • analyze page structure using the accessibility tree

  • avoid hallucinating element indexes

  • handle navigation and page reloads

  • recover from stale elements

  • follow a deterministic execution loop (PLAN → ACT → OBSERVE → UPDATE PLAN)

  • enforce safety limits on tool usage

Prompt location

prompts/system_prompt.md

How to use

Whenever you build an AI agent that interacts with this MCP server, this prompt should be provided as the system prompt for the model.

Why this prompt

Browser automation agents can easily make incorrect decisions if not guided properly. This system prompt provides strict operational rules and guardrails that help the agent:

  • use MCP tools correctly

  • avoid incorrect element interactions

  • minimize hallucinations

  • perform reliable browser automation tasks

Using this prompt significantly improves the stability, accuracy, and reliability of AI-driven browser automation.

Recommendation

It is strongly recommended that all AI agents interacting with this Selenium MCP server use this system prompt to ensure consistent and reliable behavior.

PROMPT CUSTOMIZATION

You may modify or extend the system prompt depending on your use case. However, it is recommended to preserve the core operational rules related to:

  • MCP tool usage

  • element discovery

  • navigation handling

  • safety limits

LOGGING

All application logs are stored in a user-specific directory:

~/.selenium-mcp/logs/

This directory is automatically created when the server starts.

Log file

Logs are written to:

~/.selenium-mcp/logs/selenium_mcp.log

Features:

  • Daily log file rotation

  • Automatic cleanup of older log files

  • Logs written to both console and file

  • Persistent logs independent of the project directory

Logs are stored in the user's home directory so they remain available even if the package is installed globally via pip. This makes it easier to debug issues and monitor MCP server activity across different projects.

Example Log Entry

2026-03-15 19:00:07,444 [INFO] [selenium-mcp] Initializing Selenium MCP Server...

macOS / Linux

Logs are stored in:

/Users/<username>/.selenium-mcp/logs/

Example:

/Users/john/.selenium-mcp/logs/selenium_mcp.log

You can open it from the terminal:

cd ~/.selenium-mcp/logs
ls

View logs:

cat selenium_mcp.log

or

tail -f selenium_mcp.log

Windows

Logs are stored in:

C:\Users\<username>\.selenium-mcp\logs\

Example:

C:\Users\John\.selenium-mcp\logs\selenium_mcp.log

Open it in File Explorer:

C:\Users\%USERNAME%\.selenium-mcp\logs\

Or from Command Prompt:

cd %USERPROFILE%\.selenium-mcp\logs
dir

CONFIGURE YOUR MCP CLIENT

Add the Selenium MCP server to your MCP client configuration.

Example STDIO mode:

{
  "mcpServers": {
    "selenium-mcp": {
      "command": "selenium-mcp"
    }
  }
}

This tells the MCP client how to start the Selenium MCP server using stdio mode.

Example HTTP mode:

{
  "mcpServers": {
    "selenium-mcp": {
      "command": "selenium-mcp",
      "args": ["run", "--transport", "http", "host", "127.0.0.1",  "--port", "3345"]
    }
  }
}

Example SSE mode:

{
  "mcpServers": {
    "selenium-mcp": {
      "command": "selenium-mcp",
      "args": ["run", "--transport", "sse", "host", "127.0.0.1", "--port", "3345"]
    }
  }
}

Client Examples

Claude Desktop

Config file location:

macOS
~/Library/Application Support/Claude/claude_desktop_config.json
Windows
%APPDATA%\Claude\claude_desktop_config.json
STDIO – Works for Claude Desktop

Add

{
  "mcpServers": {
    "selenium-mcp": {
      "command": "selenium-mcp"
    }
  }
}

Restart Claude Desktop after updating the configuration.

  • Uses stdio transport

  • Works out of the box with Claude Desktop

  • No additional configuration required

Troubleshooting

If you encounter issues while setting up or running Selenium MCP, try the following solutions.

selenium-mcp: command not found

This usually means the CLI command is not available in your system PATH.

First verify the package is installed:

pip show selenium-mcp

Locate the installed command.

macOS / Linux
which selenium-mcp

Example output:

/Users/<username>/.local/bin/selenium-mcp

If the command is found, update your MCP client configuration to use the full path:

{
  "mcpServers": {
    "selenium-mcp": {
      "command": "/Users/<username>/.local/bin/selenium-mcp"
    }
  }
}
Windows

Run:

where selenium-mcp

Example output:

C:\Users\<username>\AppData\Roaming\Python\Python311\Scripts\selenium-mcp.exe

Update your MCP client configuration:

{
  "mcpServers": {
    "selenium-mcp": {
      "command": "C:\\Users\\<username>\\AppData\\Roaming\\Python\\Python311\\Scripts\\selenium-mcp.exe"
    }
  }
}

Note: Windows paths in JSON require double backslashes (\\).

REQUIREMENTS

  • Python 3.10+

  • Web browser

USE CASES

This project can be used to build:

  • AI test automation agents

  • Autonomous QA assistants

  • LLM-powered browser copilots

  • Self-healing test frameworks

  • AI web scraping agents

  • Intelligent UI testing systems

CONTRIBUTING

Contributions are welcome.

Steps:

  1. Fork the repository

  2. Create a feature branch

  3. Submit a pull request

LICENSE

MIT License

AUTHOR

Prashant Nayak

🔗 LinkedIn: https://www.linkedin.com/in/prashantjnayak

Built to help the QA and AI automation community build intelligent browser automation systems.

SUPPORT THE PROJECT

If this project helps you:

  • Star the repository

  • Share it with the QA community

Available Tools

22 tools
click_elementA

Click an interactive element on the current webpage using its index.

Purpose

This tool allows the agent to click buttons, links, or other interactive UI elements on the page. The element must first be discovered using get_interactive_elements, which returns a list of visible elements and assigns each one an index.

The index returned by get_interactive_elements must be used with this tool to select the correct element.

  1. Navigate to the desired page using open_url.

  2. Wait for the page to load using wait_for_page.

  3. Call get_interactive_elements to discover clickable elements.

  4. Review the returned elements and identify the correct one.

  5. Call click_element using the element's index.

  6. If navigation occurs after clicking, call wait_for_page again.

Parameters

session_id : str Active browser session identifier returned by open_browser.

index : int Index of the element to click. This index must correspond to an element returned by get_interactive_elements.

Returns

dict { "session_id": str "index": index of the element that was clicked, "status": str "message": str }

Error Conditions

  • If get_interactive_elements has not been called yet, the element cache will be empty and the tool will return an error.

  • If the provided index does not exist in the cached elements list, the tool will return an "Invalid element index" error.

Notes

The tool automatically scrolls the element into view before clicking to ensure it is visible and interactable.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes
session_idYes

TDQS

A5/5.0
Behavior5/5

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

Describes auto-scroll behavior, element caching mechanism, and error handling (empty cache, invalid index). Since no annotations are provided, the description fully covers behavioral traits.

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?

Well-organized with sections (Purpose, Workflow, Parameters, Returns, Errors, Notes). Every sentence adds value without redundancy.

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

Completeness5/5

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

Covers discovery requirement, return format as dict, error conditions, and auto-scroll. Despite no output schema, the description provides sufficient detail for correct invocation.

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

Parameters5/5

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

With 0% schema description coverage, the description compensates by explaining session_id (from open_browser) and index (must match get_interactive_elements output), adding essential meaning beyond the schema.

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 tool clicks interactive elements using an index, distinguishing it from type_into_element and get_interactive_elements. It specifies it works with buttons, links, and other interactive UI elements.

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

Usage Guidelines5/5

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

Provides a recommended 6-step workflow, explains prerequisite of calling get_interactive_elements, and lists error conditions. It implicitly contrasts with type_into_element for typing actions.

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

close_browserC

Close the browser session and free its resources.

Parameters

session_id : str Active browser session identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so the description must fully disclose behavior. It states it 'frees resources' but does not mention side effects (e.g., closing all tabs, losing unsaved data, or irreversible actions).

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

Conciseness3/5

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

The description is short (30 words) but includes a separate parameter section that repeats schema info. Could be more concise by integrating into a single sentence without the separate markdown headers.

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

Completeness2/5

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

For a simple tool with one parameter and no output schema, the description is minimal. It lacks details about the tool's impact on open tabs, unsaved data, or whether the session can be resumed. More context is needed for a destructive action.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It adds 'Active browser session identifier' for session_id, but this is largely redundant with the parameter name and does not provide deeper meaning or constraints.

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 'Close the browser session and free its resources,' which is a specific verb+resource combination. It distinguishes from sibling tools like close_tab (closes a tab) and open_browser (opens a session).

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?

No guidance on when to use this tool versus alternatives like close_tab or when it is appropriate to end the session. The description does not mention prerequisites or context.

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

close_tabA

Close a specific browser tab using its index.

Purpose

Allows the agent to close tabs that are no longer needed. After closing, focus automatically shifts to a valid remaining tab.

Parameters

session_id : str Active browser session identifier. index : int Index of the tab to close.

Returns

dict { "session_id": str, "status": str, "message": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes
session_idYes

TDQS

A4/5.0
Behavior4/5

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

Discloses that focus shifts to valid remaining tab after closing, and provides return structure. No annotations present, so description carries full burden, but could detail edge cases like closing last tab.

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?

Well-structured with clear sections (Purpose, Parameters, Returns), front-loaded, no unnecessary text.

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

Completeness4/5

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

Covers purpose, parameters, behavior, and return format. No output schema, so the return dict is helpful. Could include more on error handling or status values.

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?

Provides basic definitions for session_id ('Active browser session identifier') and index ('Index of the tab to close'), but lacks constraints or format details. Schema coverage 0% means description must compensate more.

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?

Clearly states it closes a specific browser tab using its index, distinguishing it from sibling tools like close_browser.

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

Usage Guidelines3/5

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

States when to use (close unneeded tabs) but lacks explicit when-not-to-use or comparison with alternatives like open_new_tab or close_browser.

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

fullscreen_browserC

Switch the browser to fullscreen mode.

Parameters

session_id : str Active browser session identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It fails to disclose behavioral traits such as whether fullscreen affects other windows, requires user confirmation, or changes any state beyond the visual mode.

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

Conciseness4/5

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

The description is concise with a clear title and a parameter list. It is structured but not overly verbose. Every sentence earns 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 the tool is simple with one parameter and no output schema, the description is minimally adequate. However, it lacks behavioral transparency and usage guidelines, which are important for safe invocation.

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?

The description includes a parameter section explaining session_id as 'Active browser session identifier,' which adds minimal meaning beyond the schema. However, the schema itself has no descriptions, so this is some value. No further semantic details are given.

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

Purpose4/5

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

The description clearly states the action: 'Switch the browser to fullscreen mode.' It specifies the resource (browser) and the action (fullscreen mode). However, it does not explicitly differentiate from sibling tools like maximize_browser, which has a similar but distinct purpose.

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?

No guidance is provided on when to use this tool versus alternatives like maximize_browser or when not to use it. The description simply states what it does, leaving the agent without context for decision-making.

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

get_accessibility_treeA

Retrieve a simplified accessibility tree of the current page.

Purpose

Returns interactive elements with semantic roles so AI agents can understand UI meaning (buttons, links, inputs, dropdowns). Returned index values map directly to click_element.

Parameters

session_id : str Active browser session identifier.

Returns

dict { "session_id": str, "count": int, "nodes": [{"index": int, "role": str, "name": str, "tag": str, "id": str, "name_attr": str, "placeholder": str, "aria_label": str}], "status": str, "message": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses the return structure and mapping to click_element, indicating a read-only operation. However, it does not explicitly state non-destructiveness or discuss performance implications.

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 well-structured with sections for purpose, parameters, and returns. It is concise yet informative, with no wasted sentences. Every part adds value.

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

Completeness5/5

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

The description completely covers the tool's inputs, outputs, and purpose. Despite lacking an output schema, it provides the full return format. The mapping to click_element adds contextual value for workflow integration.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by documenting the sole parameter session_id as 'Active browser session identifier', adding meaning beyond the schema type and title.

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 it retrieves a simplified accessibility tree, returning interactive elements with semantic roles. It distinguishes itself by specifying 'simplified' and noting that index values map to click_element, providing specific verb and resource.

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

Usage Guidelines3/5

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

The description implies usage for understanding UI meaning and interacting via click_element, but does not explicitly state when to use versus alternatives like get_interactive_elements. No when-not or exclusion criteria are given.

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

get_current_tabA

Retrieve the currently active browser tab.

Purpose

Allows the agent to confirm which tab is currently active without listing all tabs.

Parameters

session_id : str Active browser session identifier.

Returns

dict { "session_id": str, "status": str, "message": str, "tab": { "index": int, "name": str, "current": bool } }

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided. The description does not disclose side effects, auth needs, or rate limits, but since it is a simple retrieval operation, the provided return format is adequate. Basic transparency is present but minimal.

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 well-structured with clear sections (Purpose, Parameters, Returns) and is concise. Every sentence adds value, and the purpose is front-loaded.

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

Completeness4/5

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

Given the sibling tools and lack of annotations, the description provides sufficient context about usage and differentiation. However, it does not cover error conditions or session requirements, which would improve completeness.

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

Parameters4/5

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

The schema has 0% description coverage, but the description adds a parameter description ('Active browser session identifier') and full return structure, which adds significant meaning beyond the schema's raw type information.

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 tool retrieves the currently active tab, distinguishing it from siblings like get_tabs which lists all tabs. The verb 'retrieve' and resource 'current tab' are specific and unambiguous.

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

Usage Guidelines4/5

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

The description explains the tool's purpose (confirm current tab without listing all), implying when to use it over get_tabs. It does not explicitly state prerequisites or when not to use, but the context from sibling tools makes it clear.

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

get_interactive_elementsA

Retrieve visible interactive elements from the current web page.

Purpose

This tool scans the page for interactive elements using a performance-optimized selector that works across modern web applications (React, Angular, dynamic UIs).

It identifies elements based on interaction signals such as: - semantic HTML tags (button, input, link) - ARIA roles (button, link, tab, option) - click handlers (onclick) - focusable elements (tabindex)

The discovered elements are returned with an assigned index. This index must be used when interacting with elements using tools such as: - click_element - type_into_element

The function also stores the discovered Selenium elements in an internal session cache so that subsequent tools can safely interact with the exact same elements without re-querying the DOM.

  1. Navigate to a webpage using open_url.

  2. Wait for the page to fully load using wait_for_page.

  3. Call get_interactive_elements to discover UI elements.

  4. Review the returned list of elements and identify the correct element.

  5. Use the provided index with tools like:

    • click_element(index)

    • type_into_element(index, text)

Parameters

session_id : str Active browser session identifier.

Returns

dict { "session_id": str, "count": int, "elements": [ { "index": int, "role": str, "label": str } ], "status": str, "message": str }

Notes

  • The returned index is required for all interaction tools.

  • Only visible and meaningful elements are returned to reduce noise.

  • This tool is optimized for speed and avoids scanning the entire DOM.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

A4.9/5.0
Behavior5/5

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

Despite no annotations, the description details selection signals (semantic tags, ARIA roles, click handlers), caching behavior, and performance optimization. It discloses that only visible meaningful elements are returned and that the tool avoids full DOM scanning.

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 well-structured with clear sections (Purpose, Workflow, Parameters, Returns, Notes). It is front-loaded with the main purpose, and every sentence contributes value without redundancy.

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

Completeness5/5

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

Given the low complexity (1 param, no output schema) and many siblings, the description fully covers purpose, usage, parameter, return structure, and behavioral notes. It provides sufficient context for correct tool selection and invocation.

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

Parameters4/5

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

Schema coverage is 0%, but the description defines session_id as 'Active browser session identifier', adding meaning beyond the schema's title. While not exhaustive, it adequately explains the parameter's purpose.

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 tool retrieves visible interactive elements from a web page, using specific verb and resource. It distinguishes from siblings by explaining the index is used by interaction tools like click_element and type_into_element.

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

Usage Guidelines5/5

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

A 'Recommended Agent Workflow' explicitly outlines when to use the tool: after open_url and wait_for_page, and before click_element/type_into_element. It also emphasizes that the returned index is required for interaction.

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

get_page_textA

Retrieve visible text from the page body.

Purpose

Provides page text for reasoning, validation, or extraction. Text is truncated to max_chars characters; check the returned truncated flag to know whether content was cut.

Parameters

session_id : str Active browser session identifier. max_chars : int Maximum characters to return (default: 5000).

Returns

dict { "session_id": str, "page_text": str (Page text extract), truncated": bool (True, if the page_text is truncated. Else, False), "total_chars": int, "status": str, "message": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
max_charsNo
session_idYes

TDQS

A4.3/5.0
Behavior4/5

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

Discloses truncation behavior, max_chars parameter, and the truncated flag. No annotations provided, so description carries the burden. Lacks details on waiting for page load or error handling, but adequate for a read operation.

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

Conciseness4/5

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

Structured with Purpose, Parameters, Returns sections. Concise but includes all necessary details. Some redundancy (session_id repeated) but overall efficient.

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

Completeness5/5

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

No output schema, but description provides full return structure including truncated, status, message. Covers all relevant aspects for a two-parameter tool. Complete and self-contained.

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

Parameters5/5

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

Schema has 0% description coverage; the description fully compensates with clear explanations: 'Active browser session identifier' and 'Maximum characters to return (default: 5000)'. Adds meaning beyond schema.

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?

Explicitly states 'Retrieve visible text from the page body' with clear verb and resource. Sibling tools like get_page_title or get_interactive_elements have different purposes, so it is distinct.

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

Usage Guidelines3/5

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

Provides context ('reasoning, validation, or extraction') but does not explicitly contrast with sibling tools like get_accessibility_tree or get_interactive_elements. No when-not-to-use or alternative mentions.

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

get_page_titleB

Retrieve the title of the current web page.

Parameters

session_id : str Active browser session identifier.

Returns

dict { "session_id: str, "page_title": str (title of the page), "status": str, "message": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

B3/5.0
Behavior2/5

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

No annotations exist, so description carries full burden. It does not disclose side effects, error states, or prerequisites (e.g., page must be loaded, session validity). Minimal behavioral insight.

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

Conciseness3/5

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

Short but includes unnecessary docstring formatting (Parameters, Returns headlines) that could be omitted. Concision is acceptable but not optimal.

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?

Sufficient for a simple read tool: describes input, output, and basic function. Lacks error handling context (e.g., no page title, invalid session) but output description partially accounts for status/message.

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

Parameters4/5

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

Schema coverage is 0%, but description adds meaning: 'Active browser session identifier' for session_id and fully documents return structure (dict with session_id, page_title, status, message). Compensates well for missing schema descriptions.

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

Purpose4/5

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

Clearly states verb 'Retrieve' and resource 'title of the current web page'. Specific enough to differentiate from sibling tools like get_page_text or get_current_tab, though 'current' could be more explicit.

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?

No guidance on when to use this tool vs alternatives. Sibling tools like get_current_tab or get_page_text could be confused, but no distinction is provided.

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

get_tabsA

Retrieve all open browser tabs for the current session.

Purpose

Provides visibility into all tabs so the agent can decide which tab to switch to.

Each tab is identified by an index and optional name.

Parameters

session_id : str Active browser session identifier.

Returns

dict { "session_id": str, "status": str, "message": str, "tabs": [ { "index": int, "name": str, "current": bool } ] }

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It describes the return format (list of tabs with index, name, current) and implies no side effects. It could explicitly state idempotency or session validity, but is sufficient for a read operation.

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 well-structured with Purpose, Parameters, and Returns sections. It is concise, uses minimal words, and front-loads the main action. Every sentence adds value.

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

Completeness4/5

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

For a simple read tool with one parameter, the description covers the main purpose and return schema. However, it omits error handling (invalid session, empty tabs) and does not explain all fields in the return dict (e.g., status, message). Slightly incomplete.

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

Parameters4/5

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

Input schema has 0% coverage, but the description adds meaning: 'Active browser session identifier.' This compensates for the lack of schema description, providing necessary context for the single parameter.

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 'Retrieve all open browser tabs for the current session,' using a specific verb and resource. It distinguishes from siblings like get_current_tab (single tab) and switch_tab (action) by clarifying it returns all tabs.

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

Usage Guidelines4/5

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

The description says 'so the agent can decide which tab to switch to,' implying usage context. However, it does not explicitly mention alternatives or when not to use, missing the chance to differentiate from get_current_tab.

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

maximize_browserC

Maximize the browser window.

Parameters

session_id : str Active browser session identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

C2.5/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits, but it only states the action without any details on side effects, error conditions, or whether the window is already maximized.

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

Conciseness4/5

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

The description is very concise (one sentence) and well-structured, though it could be more informative without losing brevity.

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

Completeness2/5

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

Given the complexity of browser interactions and the existence of sibling tools, the description is insufficient. It does not mention prerequisites (e.g., browser must be open) or return behavior.

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

Parameters2/5

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

Schema description coverage is 0%, but the description adds no extra meaning beyond the parameter name and type already in the schema. No format, constraints, or examples are provided.

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

Purpose4/5

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

The description clearly states the action ('Maximize the browser window') with a specific verb and resource. However, it does not differentiate from the sibling tool 'fullscreen_browser', which might have a similar purpose.

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

Usage Guidelines1/5

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

No guidance is provided on when to use this tool versus alternatives like 'fullscreen_browser', or on prerequisites such as having an active browser session.

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

name_tabA

Assign a custom name to a browser tab.

Purpose

Helps the agent label tabs meaningfully for easier navigation across multiple tabs.

Parameters

session_id : str Active browser session identifier. index : int Index of the tab to name. name : str Custom name to assign to the tab.

Returns

dict { "session_id": str, "status": str, "message": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
indexYes
session_idYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must fully disclose behavior. It describes the action as assigning a name but does not mention whether it overwrites existing names, if it is reversible, or any side effects. For a simple naming operation, the description is adequate but not explicit.

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

Conciseness4/5

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

The description is well-structured with sections (Purpose, Parameters, Returns) and no redundant sentences. It is concise, though the 'Purpose' section repeats the first line. Overall, it is efficient and easy to parse.

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

Completeness4/5

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

Given the lack of output schema, the description provides a return value format. It covers purpose, parameters, and return details. However, it could mention that naming is only for identification and does not affect tab behavior. Still, it is largely complete for a simple tool.

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

Parameters5/5

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

Schema description coverage is 0%, requiring the description to compensate. The description explains all three parameters with clear semantics: 'Active browser session identifier', 'Index of the tab to name', and 'Custom name to assign to the tab'. This adds significant value beyond the bare schema.

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 'Assign a custom name to a browser tab' and explains the purpose of labeling tabs for easier navigation. This uses a specific verb and resource, and distinguishes the tool from siblings like 'switch_tab' or 'close_tab'.

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

Usage Guidelines3/5

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

The description implies usage for navigation but does not explicitly mention when to use this tool versus alternatives like 'switch_tab'. There is no 'when not to use' guidance or mention of alternative tools.

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

open_browserA

Launch a new browser session.

Purpose

Creates a Selenium WebDriver instance and registers it in the MCP session store. The returned session_id must be passed to all subsequent browser tool calls.

Typical Agent Workflow

  1. open_browser

  2. open_url

  3. wait_for_page

  4. interact with elements

Parameters

browser : str Browser type to launch (default: "chrome"). headless : bool Run without a visible window (default: False). Set True on servers, Docker containers, or CI environments.

Returns

dict {"session_id": str, "browser": str, "headless": bool, "status": str, "message": str}

Note

Only call this tool ONCE per workflow, unless explicitly instructed. Do not call it again unless the previous browser session was closed.

ParametersJSON Schema
NameRequiredDescriptionDefault
browserNochrome
headlessNo

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It mentions creating a WebDriver, registering it, and the need to pass session_id. However, it does not mention potential browser compatibility issues or resource usage.

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

Conciseness4/5

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

Well-structured with sections (Purpose, Typical Agent Workflow, Parameters, Returns, Note). Front-loaded with key information. Could be slightly more concise but overall efficient.

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

Completeness5/5

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

Input schema has 2 optional simple parameters, no output schema. Description explains parameters fully, provides return structure, and gives a clear workflow. Adequate for an agent to use this tool correctly.

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 coverage is 0%, so description compensates. It explains 'browser' as type to launch (default 'chrome') and 'headless' as running without visible window. However, it does not list possible browser values (e.g., 'firefox') or constraints.

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 it launches a new browser session, creates a Selenium WebDriver, and returns a session_id. This distinguishes it from sibling tools like close_browser or open_url.

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

Usage Guidelines5/5

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

Provides a typical workflow (1. open_browser, 2. open_url, ...) and a note to call only once per workflow unless previous session closed. Also advises setting headless True in headless environments.

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

open_new_tabA

Open a new browser tab and optionally navigate to a URL.

Purpose

Creates a new tab within the current browser session. The newly opened tab becomes the active tab.

Parameters

session_id : str Active browser session identifier. url : str, optional URL to open in the new tab. If not provided, a blank tab is opened.

Returns

dict { "session_id": str, "status": str, "message": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
session_idYes

TDQS

A3.8/5.0
Behavior3/5

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

Describes that the new tab becomes active and returns status/message. No annotations provided, so description carries disclosure burden, but lacks details on error behavior, permissions, or side effects.

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?

Well-structured with clear Purpose, Parameters, and Returns sections. Every sentence provides value, no redundancy.

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

Completeness4/5

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

Covers the essential behavior of opening a tab and optional navigation. Could benefit from error handling notes, but overall sufficient for a simple tool.

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

Parameters4/5

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

Adds meaning to the optional url parameter beyond the schema, noting the default behavior of opening a blank tab. However, session_id lacks extra description beyond its name.

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?

Clearly states it opens a new browser tab with optional URL navigation. Distinguishes itself from sibling tools like close_tab, switch_tab, and open_url.

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?

No guidance on when to use this tool versus alternatives like open_url (which navigates current tab) or switch_tab. Lacks scenario-based recommendations.

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

open_urlB

Navigate the browser to a specific URL.

Parameters

session_id : str Active browser session identifier. url : str Full URL to open (must include scheme, e.g. https://).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
session_idYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It does not disclose whether it waits for page load, handles errors, changes tab state, or requires authentication, leaving significant 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 minimal and front-loaded with the core action. Each line adds value, with no wasted words. It is appropriately sized for a simple tool.

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 or output schema and a simple tool, the description covers the basic function but lacks details on return values, error behavior, and side effects. It is adequate but not complete.

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?

The input schema has 0% description coverage, so the description's parameter explanations are essential. It adds meaning by noting that url must include scheme, but session_id lacks explanation and no constraints are given. It provides basic but incomplete semantic value.

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 'Navigate the browser to a specific URL,' specifying the verb 'navigate' and the resource 'browser to a URL.' This distinguishes it from siblings like navigate_back and open_browser.

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, no prerequisites, and no exclusions. It lacks context about required session state or when not to use it.

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

refresh_pageB

Reload the current web page.

Parameters

session_id : str Active browser session identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, and the description only states 'Reload the current web page.' It does not disclose behavioral traits like page state after reload, whether it waits for page load, or any side effects. The description carries the full burden but fails to add context.

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

Conciseness4/5

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

The description is concise with one sentence and a structured parameter list. It is front-loaded with the core action. However, it could be slightly more efficient if integrated into a single paragraph.

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?

For a simple tool with one parameter and no output schema, the description is adequate but missing details like whether the page reloads with cache or waits for load. Given sibling tools like wait_for_page, more behavioral context would improve completeness.

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

Parameters4/5

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

Schema description coverage is 0%, but the description includes a Parameters section that defines session_id as 'Active browser session identifier,' adding meaning beyond the schema (which only provides type). Though minimal, this compensates for the lack of schema descriptions.

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 states 'Reload the current web page,' which is a specific verb and resource. It clearly distinguishes from sibling tools like navigate_back, navigate_forward, or open_url, as none of those reload the page.

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?

No guidance is provided on when to use this tool versus alternatives, such as open_url or navigate_back. There is no mention of prerequisites or context for proper use.

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

switch_tabA

Switch to a specific browser tab using its index.

Purpose

Allows the agent to move between multiple open tabs in the same browser session.

Always call get_tabs first to understand available tab indexes.

Parameters

session_id : str Active browser session identifier. index : int Index of the tab to switch to.

Returns

dict { "session_id": str, "status": str, "message": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes
session_idYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only says 'switch to a specific tab' without disclosing behavioral traits like whether the action is reversible, permission requirements, or how invalid indexes are handled. Minimal safety context.

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

Conciseness4/5

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

The description is well-structured with sections but includes a full return format that might be redundant since there's no output schema. Still concise overall with only 7 lines of substantive content.

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?

For a simple switch tool, the description includes prerequisite (get_tabs) and return format, but lacks error handling details or what happens with out-of-bounds indices. Adequate but not comprehensive.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by defining both parameters: session_id as 'Active browser session identifier' and index as 'Index of the tab to switch to'. This adds essential meaning beyond the raw schema.

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 verb ('switch') and resource ('browser tab') with specificity about using index. It distinguishes from siblings like get_tabs (listing) and open_new_tab (creating) by focusing on moving between existing tabs.

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

Usage Guidelines4/5

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

The description explicitly advises calling get_tabs first to understand available indexes, providing clear when-to-use guidance. While it doesn't explicitly mention when not to use, this advice covers the main usage context.

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

take_screenshotA

Capture a screenshot of the current browser window.

Purpose

Useful for debugging, failure reporting, or visual analysis. Screenshots are saved to the directory set by the MCP_SCREENSHOT_DIR environment variable (default: system temp dir).

Parameters

session_id : str Active browser session identifier.

Returns

dict { "session_id": str, screenshot_path: str, "status": str, "message": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

A4.4/5.0
Behavior4/5

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

Discloses where screenshots are saved (MCP_SCREENSHOT_DIR env var, default system temp). No annotations provided, so description adequately covers behavioral aspects.

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

Conciseness4/5

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

Well-structured with Purpose, Parameters, Returns sections. Informative without verbosity, though could be slightly more concise.

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

Completeness5/5

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

Given one parameter and no output schema, description covers purpose, usage, parameter meaning, and return structure. Complete for the tool's simplicity.

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

Parameters4/5

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

Only parameter session_id is described as 'Active browser session identifier.' Schema has 0% coverage, so description adds crucial meaning beyond type and title.

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?

Explicitly states 'Capture a screenshot of the current browser window.' Clearly distinguishes from sibling tools like click_element or open_browser.

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

Usage Guidelines4/5

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

States 'Useful for debugging, failure reporting, or visual analysis.' Provides clear context for when to use, though no explicit exclusions or alternatives among siblings.

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

type_into_elementA

Enter text into an input field or textarea using an element index.

Purpose

This tool allows the agent to type text into editable elements such as input fields or textareas. The element must first be discovered using get_interactive_elements, which returns a list of visible UI elements along with their corresponding indexes.

The index returned by get_interactive_elements should be used directly with this tool to identify which element to type into.

  1. Call get_interactive_elements to retrieve all interactive elements.

  2. Identify the correct element by reviewing fields such as:

    • text

    • placeholder

    • aria_label

    • tag

  3. Use the provided index to call type_into_element.

  4. If the page changes after typing (e.g., search suggestions appear), consider calling get_interactive_elements again.

Parameters

session_id : str Active browser session identifier returned by open_browser.

index : int Index of the element to type into. This must correspond to the index returned by get_interactive_elements.

text : str The text to be entered into the selected element.

Returns

dict { "session_id": str, "index": index of the element used, "text_to_type": the text to enter, "status": str, "message": str }

Error Conditions

If get_interactive_elements has not been called previously, the element cache may be empty and the tool will return an error.

Notes

This tool automatically clears any existing text in the element before entering the new text.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
indexYes
session_idYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool clears existing text before entering new text (notes section) and mentions error conditions when cache is empty. However, it does not specify whether input/change events are triggered or if the tool waits for elements to be interactive.

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

Conciseness4/5

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

The description is well-structured with clear sections (Purpose, Recommended Agent Workflow, Parameters, Returns, Error Conditions, Notes). It is front-loaded with the most important information. While slightly verbose, every sentence adds value. A minor improvement would be to condense the workflow slightly.

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

Completeness4/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 covers prerequisites, workflow, return format (including dict structure), error conditions, and a behavioral note about clearing text. It lacks details on exact typing mechanism (e.g., keystroke simulation) and behavior with disabled elements, but overall it is sufficiently complete for a typing operation.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description fully compensates by explaining each parameter: index must come from get_interactive_elements, text is the string to type, session_id from open_browser. It also describes the return format (dict with relevant fields), adding significant value beyond the schema.

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 tool's purpose: 'Enter text into an input field or textarea using an element index.' It specifies the verb (type/enter), resource (input field/textarea), and distinguishes from sibling tool click_element by focusing on text entry. The prerequisite use of get_interactive_elements is also highlighted.

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

Usage Guidelines5/5

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

The description provides a detailed recommended workflow (steps 1-4), explicitly stating when to use the tool (after get_interactive_elements) and when to re-evaluate (if page changes after typing). It also includes an error condition (empty element cache) and implicitly sets expectations for not using it before discovering elements.

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

wait_for_pageA

Wait until the page body element is present in the DOM.

Purpose

Call after open_url or any navigation to give the page time to load before attempting interactions.

Parameters

session_id : str Active browser session identifier. timeout : int Maximum seconds to wait (default: 10).

Returns

dict { "session_id": str, "timeout_set": timeout that was passed as a parameter, "status": str, "message": str }

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNo
session_idYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It explains waiting until body is present, includes timeout, and describes return dict with status and message. However, it does not explicitly state behavior on timeout (e.g., returns error or times out).

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

Conciseness4/5

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

Well-structured with sections for purpose, parameters, returns. Efficiently conveys all necessary info without excessive verbosity. Could be slightly more concise but still good.

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

Completeness5/5

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

For a simple wait tool with 2 parameters and no output schema, the description covers what it does, parameters, and return format comprehensively. No gaps identified.

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

Parameters4/5

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

Schema has 0% description coverage, so the description adds needed meaning. It explains session_id as 'Active browser session identifier' and timeout with default. This compensates for the lack of schema descriptions.

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 verb 'Wait' and the resource 'page body element' as the condition for loading. It explicitly says to call after navigation, distinguishing it from sibling tools like click_element or type_into_element.

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

Usage Guidelines4/5

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

Explicitly says 'Call after open_url or any navigation to give the page time to load before attempting interactions.' This provides clear when-to-use context but does not name an alternative tool for cases where waiting is not needed.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 22 tool updatesv1.4.0
    • First observedclick_element
    • First observedclose_browser
    • First observedclose_tab
    • First observedfullscreen_browser
    • First observedget_accessibility_tree
    • First observedget_current_tab
    • First observedget_interactive_elements
    • First observedget_page_text
    • First observedget_page_title
    • First observedget_tabs
    • First observedmaximize_browser
    • First observedname_tab
    • First observednavigate_back
    • First observednavigate_forward
    • First observedopen_browser
    • First observedopen_new_tab
    • First observedopen_url
    • First observedrefresh_page
    • First observedswitch_tab
    • First observedtake_screenshot
    • First observedtype_into_element
    • First observedwait_for_page

TDQS

A3.6/5.0
Disambiguation4/5

Most tools have clear distinct purposes, but get_interactive_elements and get_accessibility_tree serve similar functions (retrieving element info) with different output formats, which could cause agent confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., open_browser, get_page_text, click_element), with no mixing of conventions.

Tool Count5/5

22 tools cover the essential browser automation lifecycle and interactive actions without being excessive; the count is well-scoped for the server's purpose.

Completeness4/5

Covers core browsing workflows (navigation, tab management, element interaction, screenshots). Missing utilities like JavaScript execution, alert handling, or advanced element actions, but these are minor gaps.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/nayakprashant/selenium-mcp-server'

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