Selenium MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Selenium MCP ServerNavigate to example.com and take a screenshot"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Selenium MCP Server
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-mcpRUNNING 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 runUses stdio transport
Best for local agent integrations
No network exposure
HTTP Mode (Recommended)
selenium-mcp run --transport http --host 127.0.0.1 --port 3345Starts 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 3345Starts 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 3345Makes server accessible from:
other devices on the same network
Docker / VM environments
Notes:
Default port: 3336
Supported transports:
stdio (default)
http
sseEnsure 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 versionAVAILABLE 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
open_browser– Launch a new browser sessionclose_browser– Close the browser sessionmaximize_browser– Maximize browser windowfullscreen_browser– Switch browser to fullscreen
NAVIGATION
open_url– Navigate to a specific URLnavigate_back– Navigate back in browser historynavigate_forward– Navigate forward in historyrefresh_page– Reload the pagewait_for_page– Wait for page to loadget_page_title– Get the current page title
TAB MANAGEMENT
get_tabs– Retrieve all open tabs in the current sessionswitch_tab– Switch to a specific tab using indexopen_new_tab– Open a new tab and optionally navigate to a URLclose_tab– Close a specific tab by indexget_current_tab– Retrieve the currently active tabname_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
get_interactive_elements– Discover visible interactive elements on the pageget_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
click_element– Click an element by indextype_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/screenshotExample full path:
/Users/<your-username>/.selenium-mcp/screenshotYou can open the folder using Terminal:
open ~/.selenium-mcp/screenshotWindows
Screenshots are stored at:
C:\Users\<your-username>\.selenium-mcp\screenshotExample:
C:\Users\John\.selenium-mcp\screenshotYou can open it from File Explorer by entering the following in the address bar:
%USERPROFILE%\.selenium-mcp\screenshotCustom 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-screenshotsWindows (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-mcpdirectory 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:
open_browser
open_url
wait_for_page
get_interactive_elements
(optional) get_tabs / switch_tab if multiple tabs are present
click_element or type_into_element
MULTI-TAB WORKFLOW
Agents can work with multiple tabs within the same browser session.
Example workflow:
open_browser
open_url
open_new_tab("https://example.com")
get_tabs
switch_tab(index)
perform actions
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:
Open Chrome browser.
Navigate to Google.com
Type the text "Selenium MCP" in the search box.
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_textSYSTEM 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.mdHow 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.logFeatures:
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.logYou can open it from the terminal:
cd ~/.selenium-mcp/logs
lsView logs:
cat selenium_mcp.logor
tail -f selenium_mcp.logWindows
Logs are stored in:
C:\Users\<username>\.selenium-mcp\logs\Example:
C:\Users\John\.selenium-mcp\logs\selenium_mcp.logOpen it in File Explorer:
C:\Users\%USERNAME%\.selenium-mcp\logs\Or from Command Prompt:
cd %USERPROFILE%\.selenium-mcp\logs
dirCONFIGURE 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"]
}
}
}Runs MCP server over HTTP
Endpoint: http://127.0.0.1:3345/mcp
Example SSE mode:
{
"mcpServers": {
"selenium-mcp": {
"command": "selenium-mcp",
"args": ["run", "--transport", "sse", "host", "127.0.0.1", "--port", "3345"]
}
}
}Runs MCP server with streaming (SSE) transport
Useful for real-time agent interactions
Endpoint: http://127.0.0.1:3345/sse
Client Examples
Claude Desktop
Config file location:
macOS
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows
%APPDATA%\Claude\claude_desktop_config.jsonSTDIO – 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-mcpLocate the installed command.
macOS / Linux
which selenium-mcpExample output:
/Users/<username>/.local/bin/selenium-mcpIf 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-mcpExample output:
C:\Users\<username>\AppData\Roaming\Python\Python311\Scripts\selenium-mcp.exeUpdate 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:
Fork the repository
Create a feature branch
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 toolsclick_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.
Recommended Agent Workflow
Navigate to the desired page using
open_url.Wait for the page to load using
wait_for_page.Call
get_interactive_elementsto discover clickable elements.Review the returned elements and identify the correct one.
Call
click_elementusing the element's index.If navigation occurs after clicking, call
wait_for_pageagain.
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_elementshas 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.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 } }
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
Recommended Agent Workflow
Navigate to a webpage using
open_url.Wait for the page to fully load using
wait_for_page.Call
get_interactive_elementsto discover UI elements.Review the returned list of elements and identify the correct element.
Use the provided
indexwith 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
indexis 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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| max_chars | No | ||
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 } ] }
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| index | Yes | ||
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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
open_browser
open_url
wait_for_page
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.
| Name | Required | Description | Default |
|---|---|---|---|
| browser | No | chrome | |
| headless | No |
TDQS
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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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://).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
Recommended Agent Workflow
Call
get_interactive_elementsto retrieve all interactive elements.Identify the correct element by reviewing fields such as:
text
placeholder
aria_label
tag
Use the provided
indexto calltype_into_element.If the page changes after typing (e.g., search suggestions appear), consider calling
get_interactive_elementsagain.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| index | Yes | ||
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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 }
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| session_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
22 tool updates
v1.4.0- First observed
click_element - First observed
close_browser - First observed
close_tab - First observed
fullscreen_browser - First observed
get_accessibility_tree - First observed
get_current_tab - First observed
get_interactive_elements - First observed
get_page_text - First observed
get_page_title - First observed
get_tabs - First observed
maximize_browser - First observed
name_tab - First observed
navigate_back - First observed
navigate_forward - First observed
open_browser - First observed
open_new_tab - First observed
open_url - First observed
refresh_page - First observed
switch_tab - First observed
take_screenshot - First observed
type_into_element - First observed
wait_for_page
TDQS
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.
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.
22 tools cover the essential browser automation lifecycle and interactive actions without being excessive; the count is well-scoped for the server's purpose.
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
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
Scrape, crawl and search the web for AI agents via MCP.
MCP server exposing the Backtest360 engine API as tools for AI agents.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for Mint — AI-powered QA that runs your app in a real browser on every PR.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server for browser automation using Selenium WebDriver, enabling LLMs and teams to automate browsers with multi-browser support and a standard MCP API.32MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server for web automation using Selenium WebDriver, enabling AI assistants to navigate, interact with elements, take screenshots, and manage browser storage.11MIT
- AlicenseBqualityCmaintenanceA production-ready MCP server that exposes Selenium 4 browser automation as MCP tools.27MIT
- AlicenseNot gradedqualityDmaintenanceA Selenium-based MCP server that exposes browser automation tools for navigation, interaction, form filling, and assertions, enabling AI agents to control web browsers through natural language.GPL 3.0
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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