chrome-automation-mcp
Allows controlling Google Chrome browser for automation tasks such as navigation, clicking, typing, screenshotting, and script execution.
Click on "Deploy 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., "@chrome-automation-mcptake a screenshot of this page"
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.
Chrome Automation MCP
中文版文档:docs/README-zh.md
A Model Context Protocol (MCP) server for browser automation using Playwright to control Chrome browsers.
Installation
npm install -g chrome-automation-mcp@1.2.0Requirements:
Node.js 18.0.0 or higher
Google Chrome browser
Related MCP server: Puppeteer MCP Server
MCP Configuration
Claude Desktop Setup
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"chrome-automation": {
"command": "chrome-automation-mcp-full"
}
}
}Lite Mode (Essential Tools Only)
{
"mcpServers": {
"chrome-automation": {
"command": "chrome-automation-mcp"
}
}
}Available Tools
🚀 Browser Management
launch_browser- Launch Chrome browser with session managementconnect_browser- Connect to existing Chrome instanceclose_browser- Close browser connection
📍 Navigation & Interaction
navigate_to- Navigate to URLclick- Click on elements with smart visibility detectiontype_text- Type text into input fieldsscroll- Scroll page to find hidden elementswait_for- Wait for elements (auto-switches to new tabs)
📊 Information Gathering
read_text- Read text content from page/elementsget_elements- Get element information and attributesscreenshot- Take page screenshotsget_page_info- Get current page information
🖥️ Tab Management
switch_to_tab- Switch between tabsget_tabs- Get information about all open tabs
💻 Code Execution
run_script- Execute external JavaScript files with browser accessevaluate- Execute JavaScript in browser contextset_storage- Set browser storage (cookies, localStorage, etc.)
⚙️ Session Management
list_sessions- List active browser sessionspress_key- Press keyboard keys with modifiersgo_back- Navigate back in browser history
Quick Start
Launch Browser
{"tool": "launch_browser", "arguments": {}}Navigate to Website
{"tool": "navigate_to", "arguments": {"url": "https://google.com"}}Take Screenshot
{"tool": "screenshot", "arguments": {"fullPage": true}}Script Development
Create custom automation scripts:
// my-automation-script.js
const searchQuery = args.query || 'MCP servers';
// Navigate to Google
await page.goto('https://google.com');
// Search
await page.fill('input[name="q"]', searchQuery);
await page.press('input[name="q"]', 'Enter');
// Wait for results
await page.waitForSelector('h3');
// Get all results
const results = await page.$$eval('h3', els =>
els.map(el => el.textContent)
);
return {
query: searchQuery,
searchResults: results,
count: results.length
};Use the script:
{
"tool": "run_script",
"arguments": {
"scriptPath": "./my-automation-script.js",
"args": {"query": "playwright automation"}
}
}Available in scripts:
browser- Playwright browser instancepage- Current page objectargs- Passed arguments
Lite Mode Features
Lite mode includes only essential tools for basic automation:
Browser management (
launch_browser,close_browser)Script execution (
run_script)Storage management (
set_storage)
Perfect for lightweight integrations and custom script-based workflows.
Links
Built with ❤️ for the MCP ecosystem
Available Tools
10 toolscleanup_sessionsA
Clean up inactive/orphaned browser sessions and directories without affecting active sessions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the affected scope and the active-session safety guarantee, but does not state whether cleanup is irreversible, what permissions are required, or what happens to the cleaned directories.
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?
A single front-loaded sentence with no wasted words. The scope and the key exclusion are both stated efficiently.
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 zero-parameter cleanup tool, the description covers purpose, scope, and the active-session exclusion adequately. Minor gaps remain around destructive semantics, permissions, and output behavior, especially since there are no annotations or output schema.
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 tool has zero parameters and an empty input schema. Per the rubric, zero-parameter tools receive a baseline of 4, and there are no parameters whose semantics need additional explanation.
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?
States a specific verb and resource: 'Clean up inactive/orphaned browser sessions and directories.' The clause 'without affecting active sessions' distinguishes it from close_browser and close_all_browsers.
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?
Clearly implies when to use it: for inactive/orphaned sessions and directories, while excluding active sessions. It does not explicitly name alternatives such as list_sessions or close_browser, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_all_browsersA
Gracefully close all active browser sessions (tries to close browsers properly first, then force kill if needed)
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Skip graceful close and immediately force kill all processes and clean directories |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the two-phase close (graceful first, force-kill fallback), which is real behavioral context. However, it omits what actually gets destroyed, whether session data/directories are cleaned, permission requirements, and return behavior, which matters for a destructive process-killing tool.
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?
A single front-loaded sentence with no filler; the core action and the fallback behavior are stated compactly. Every clause 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?
For a destructive, no-annotation mutation tool with no output schema, the graceful/force behavior is covered but the blast radius is not: it doesn't say what data is removed, whether directories are cleaned, or what the result looks like. Adequate but incomplete for its risk profile.
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 single 'force' param is fully documented in the schema (100% coverage), so the baseline is 3. The description adds modest value by explaining the default non-force path ('tries to close properly first'), which contextualizes what force=true skips, but adds no syntax or format detail 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?
States a specific verb ('close') plus resource ('all active browser sessions'), and the 'all' scope cleanly distinguishes it from the sibling close_browser and from cleanup_sessions. An agent can tell what it does and that it targets every session, not one.
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 explicit when-to-use, when-not-to-use, or alternative routing (e.g. close_browser for a single session, cleanup_sessions for leftovers). Usage is only implied by the tool name; the description offers no selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_browserA
Gracefully close the browser connection and clean up session data
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | No | Session ID to close (optional, closes current session if not specified) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose two meaningful traits: the close is 'graceful' and it destroys session data, which is useful. However, it omits whether cleanup is reversible, what happens with an invalid or already-closed session, and whether other sessions are unaffected.
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?
One sentence, front-loaded with the action and resource, with no filler. Every clause ('gracefully', 'clean up session data') carries information.
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 zero-required-param teardown tool with no output schema, the description covers purpose, scope, and the cleanup side effect adequately. It could go further on sibling disambiguation and post-close state, but nothing essential to a correct call is missing.
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 100% and the single optional sessionId already documents its default behavior. The description adds no syntax or semantics beyond the schema, so the baseline 3 applies.
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?
States a specific verb ('close') and resource ('browser connection'), plus the side effect of cleaning up session data. It is distinguishable from close_all_browsers by scope ('the browser connection' vs. all), but the description never explicitly contrasts the two siblings.
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?
Usage is only implied by the name and scope. There is no explicit guidance on when to use this versus close_all_browsers or cleanup_sessions, nor any note about calling it at end of a workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_loginA
🔐 INTERACTIVE LOGIN: Opens browser to specified URL, waits for manual login, then captures authentication data. A floating 'Finish Connect' button appears for you to click when login is complete. Button persists through page redirects during login flow.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to navigate to for login (e.g., 'https://google.com') | |
| autoClose | No | Automatically close browser after capturing login data (default: true). When true, clicking 'Finish Connect' will close the browser immediately after data capture. | |
| saveToFile | No | Save authentication data to a JSON file in /tmp directory (default: false). When true, returns file path for easy script integration. | |
| waitMessage | No | Custom message to display while waiting for login | Please complete your login, then click 'Finish Connect' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the non-obvious mechanics: a floating 'Finish Connect' button, that it persists across redirects, and that capture happens only after manual click. It still omits timeout/failure behavior and whether the call blocks indefinitely while waiting.
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?
Three front-loaded sentences, the interaction model first and the button detail after; little waste beyond the leading emoji. Every sentence conveys usable behavior.
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 exists, yet the description never says what 'authentication data' is captured or in what form (cookies, tokens), leaving the return value underspecified. Combined with the silent timeout/failure behavior, a call-blocking interactive tool is only partially covered.
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 100%, so the schema already fully documents url, autoClose, saveToFile, and waitMessage. The description adds no parameter-level detail beyond what the schema provides, so the baseline of 3 applies.
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?
States specific verbs and resource: opens a browser to a URL, waits for manual login, then captures authentication data. The 'INTERACTIVE LOGIN' framing clearly separates it from siblings like launch_browser and navigate_to, which do not perform credential capture.
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?
Usage is implied by the description – you use this when a site requires manual authentication and you want the resulting session data. However, it never states when NOT to use it or points to alternatives such as set_storage (when cookies already exist) or launch_browser for unauthenticated browsing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_browserB
Launch Chrome browser with session management. Each instance gets a unique session ID, port, and user data directory for isolation.
| Name | Required | Description | Default |
|---|---|---|---|
| debugPort | No | Remote debugging port (auto-assigned per session if not provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose real behavioral facts: per-instance session IDs, ports, and isolated user data directories. However, it says nothing about failure modes, whether the call blocks until the browser is ready, lifetimes, or the need to clean up sessions.
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?
Two tightly written sentences with the main action front-loaded and no filler. The second sentence adds isolation context that 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?
Adequate for a zero-required-parameter launcher with a fully documented schema, and the mention of session IDs implicitly covers the return value. It is still incomplete on lifecycle: how long the session lives and when to invoke close_browser or cleanup_sessions is left unstated.
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 100% and there is only one optional parameter, so the schema fully documents debugPort including auto-assignment. The description adds no syntax or format detail beyond that, making the baseline 3 appropriate.
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?
States a specific verb and resource ('Launch Chrome browser') plus a distinguishing scope ('with session management'), which separates it from siblings like close_browser and list_sessions. It does not explicitly name an alternative, so it stops short of a 5.
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?
There is no explicit guidance on when to launch versus reuse an existing session, nor any note about the relationship to cleanup_sessions or close_browser. Usage is only implied by the tool name and the mention of session IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsB
List all active browser automation sessions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but 'List' strongly implies a safe read-only operation and 'active' scopes the result set. It still says nothing about return format, pagination, or what counts as a session (e.g. whether background scripts count).
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?
A single tight sentence with the resource and scope front-loaded and no filler. Nothing could be trimmed without losing meaning.
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 zero-parameter read tool with no output schema, a one-line description is close to sufficient, but it leaves 'active session' undefined and gives no hint about what the result contains. Adequate but with a clear gap.
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 tool takes zero parameters, so the schema cannot carry any parameter meaning and the description has nothing to compensate for. Baseline 4 applies.
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?
States a specific verb and resource ('List all active browser automation sessions'), which clearly reads as a non-mutating inspection tool. It does not explicitly differentiate itself from siblings like cleanup_sessions or close_all_browsers, though the verb does most of that work.
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 versus alternatives such as cleanup_sessions or close_all_browsers, and no stated prerequisites. The agent must infer the use case entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_scriptB
📁 Execute a JavaScript file from local disk path or remote URL with access to browser automation. Use for complex automation scripts or reusable workflows. Must provide either scriptPath OR scriptUrl (not both).
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments to pass to the script. Common: {query: 'search term', url: 'target.com'} | |
| scriptUrl | No | Remote URL to the JavaScript file (e.g., 'https://example.com/scripts/automation.js'). Cannot be used with scriptPath. | |
| sessionId | No | Session ID to use for script execution. If not provided, uses current session. If provided, will connect to the specified session's browser. | |
| screenshot | No | Take a screenshot after script execution. Default: false | |
| scriptPath | No | Local disk path to the JavaScript file (e.g., 'scripts/login-workflow.js'). Cannot be used with scriptUrl. | |
| autoCloseTab | No | Automatically close the tab after script completes (only works when createNewTab is true). Helps prevent tab accumulation. | |
| createNewTab | No | Create a new tab for this script execution. Each script runs in isolation with its own tab. Useful for running multiple scripts in parallel without interference. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses only that the script gets browser-automation access. It says nothing about the fact that a remote URL means executing arbitrary third-party code, what happens on failure, timeout limits, or whether the script can mutate browser/session state.
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?
Three short sentences, front-loaded with the action and resource, with the critical mutual-exclusivity constraint placed last for emphasis. The leading emoji is noise but does not materially bloat the 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?
For a 7-parameter tool that executes arbitrary code with no annotations and no output schema, the description should explain how results surface (return value, logs, screenshots) and any sandboxing or session implications. It leaves the agent guessing about the execution model beyond the source-of-script rule.
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 100%, so all seven parameters are already documented, including the scriptPath/scriptUrl conflict and the nested args object. The description's "either scriptPath OR scriptUrl (not both)" restates the schema's own constraint rather than adding new meaning, so the baseline 3 applies.
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?
States a specific verb (Execute) and resource (a JavaScript file) plus the two accepted sources (local path or remote URL), which is concrete and unambiguous. It does not, however, differentiate itself from the obvious sibling run_script_background, which an agent must choose between.
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?
"Use for complex automation scripts or reusable workflows" gives a rough sense of when this tool fits, but offers no exclusions and never names the alternative (run_script_background for non-blocking execution, or navigate_to for simple navigation). The mutual-exclusivity rule is invocation guidance rather than when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_script_backgroundB
📁 Execute a JavaScript file in the background with browser automation. Returns immediately with task info while script runs in background. Output is saved to files. Must provide either scriptPath OR scriptUrl (not both).
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments to pass to the script. Common: {query: 'search term', url: 'target.com'} | |
| scriptUrl | No | Remote URL to the JavaScript file (e.g., 'https://example.com/scripts/automation.js'). Cannot be used with scriptPath. | |
| sessionId | No | Session ID to use for script execution. If not provided, uses current session. If provided, will connect to the specified session's browser. | |
| screenshot | No | Take a screenshot after script execution. Default: false | |
| scriptPath | No | Local disk path to the JavaScript file (e.g., 'scripts/login-workflow.js'). Cannot be used with scriptUrl. | |
| autoCloseTab | No | Automatically close the tab after script completes (only works when createNewTab is true). Helps prevent tab accumulation. | |
| createNewTab | No | Create a new tab for this script execution. Each script runs in isolation with its own tab. Useful for running multiple scripts in parallel without interference. | |
| projectFolder | No | output folder: Set this to specify where output files (.json and .log) will be saved. If not provided, defaults to system temp directory /tmp/{session_id}. Example: '/Users/username/my-project/outputs' | |
| autoCloseBrowser | No | Automatically close the browser after script execution completes. Default: true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden. It does disclose two important traits — that it returns immediately while work continues, and that output is persisted to files — which is real value. But it omits failure behavior, concurrency limits, and whether it requires an existing browser/session, which matters for a 9-parameter automation tool.
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?
Three short sentences, front-loaded with what the tool does before the constraint. The leading emoji is noise, but the prose itself is tight and wastes little.
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 9-parameter tool with nested args and no output schema, the description covers execution semantics and the output-file behavior reasonably. It does not address session/tab lifecycle implications (createNewTab, autoCloseBrowser) or what the returned 'task info' contains, which the absent output schema leaves unexplained.
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 100%, so every parameter is already fully documented, setting the baseline at 3. The description only reinforces the scriptPath/scriptUrl exclusivity that the schema already states, adding no meaning beyond it.
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?
States a specific verb (Execute) and resource (a JavaScript file) plus the distinguishing mode ('in the background') and the immediate-return behavior. It does not, however, contrast itself with the sibling run_script, so an agent must infer the foreground/background split on its own.
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 gives one hard usage rule ('Must provide either scriptPath OR scriptUrl (not both)'), which is genuinely helpful for invocation. It offers no guidance on when a background run is preferable to run_script or when to pass a sessionId, leaving the primary use-case decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_storageA
🔐 PREFERRED TOOL for setting login state and authentication data. Use this instead of evaluate() to set cookies, localStorage, and sessionStorage to maintain user login sessions across browser automation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | 🔗 Optional URL to navigate to in a background tab before setting storage. If provided, opens a new tab (without switching focus), navigates to this URL, and sets storage there. Useful for setting cookies/storage for a specific domain. | |
| domain | No | 🌐 Default website domain for cookies when not specified individually. Example: 'localhost:3001', 'app.example.com' | |
| cookies | No | 🍪 Array of cookie objects for authentication tokens, session IDs, etc. | |
| filePath | No | Path to JSON file containing storage data to import | |
| sessionId | Yes | Session ID to operate on | default |
| cookieString | No | 🍪 EASY WAY: Raw cookie string copied from browser (document.cookie). Example: 'session_id=abc123; user_token=xyz789; theme=dark' | |
| localStorage | No | 💾 Persistent browser storage that survives page reloads. Used for user preferences, auth tokens, app state. Example: {'auth_token': 'bearer_xyz', 'user_id': '12345'} | |
| sessionStorage | No | 🔄 Temporary storage that clears when tab closes. Used for session-specific data. Example: {'temp_data': 'value', 'session_state': 'active'} |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It never says whether existing cookies/storage are overwritten or merged, whether the operation is reversible, what permissions or session state are required, or how errors surface for an 8-parameter mutation tool.
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?
Two tight sentences, front-loaded with the tool's purpose and the preference over evaluate(). No filler or redundant restatement of the name.
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?
Parameters are fully documented in the schema, but for a no-annotation mutation tool the description omits overwrite semantics, scope across tabs/sessions, and failure behavior. Adequate but with clear gaps for a tool this complex.
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 100%, with rich per-field documentation including examples and defaults, so the schema already does the heavy lifting. The description adds no syntax, precedence, or interaction detail (e.g., cookieString vs cookies vs filePath) beyond what the schema states.
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?
States a specific verb and resource set (set cookies, localStorage, sessionStorage) and explicitly frames itself as the tool for login/auth state. It differentiates from evaluate(), though that alternative is not among the listed siblings, so differentiation from tools like run_script or get_login is left implicit.
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 to prefer this over evaluate() for setting login state, which is actionable when-to-use guidance. It stops short of stating when NOT to use it or how it relates to siblings such as get_login or run_script.
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.
10 tool updates
v1.3.8- First observed
cleanup_sessions - First observed
close_all_browsers - First observed
close_browser - First observed
get_login - First observed
launch_browser - First observed
list_sessions - First observed
navigate_to - First observed
run_script - First observed
run_script_background - First observed
set_storage
TDQS
Scored across 10 tools
Most tools have clearly distinct purposes (launch, navigate, script execution, storage, session management). Some potential overlap exists between cleanup_sessions and close_all_browsers, and get_login vs set_storage both touch auth data, but descriptions distinguish them adequately.
Names follow a mostly consistent snake_case verb_noun pattern (launch_browser, run_script, close_browser, list_sessions). Minor deviations like navigate_to (verb only) and get_login (get is odd for an interactive capture tool) slightly break the pattern but remain readable.
10 tools is well-scoped for a browser automation server, with each tool earning its place across launch, control, scripting, and cleanup concerns. No redundant or filler tools.
Covers the full lifecycle: launch, navigate, script execution, storage/auth, session listing, and cleanup/closing. Missing explicit page-interaction primitives (screenshot, click, get content) which agents must reach for scripts to accomplish, but core workflows are covered.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Browserless MCP — wraps the Browserless headless-Chromium REST API (browserless.io)
MCP server for Mint — AI-powered QA that runs your app in a real browser on every PR.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that provides browser automation capabilities using Playwright. This server enables LLMs to interact with web pages, take screenshots, and execute JavaScript in a real browser environment.3211,239 npm5,644MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages, take screenshots, and execute JavaScript in a real browser environment.18Apache 2.0
- AlicenseBqualityDmaintenanceA Model Context Protocol server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages, take screenshots, generate test code, scrape web content, and execute JavaScript in a real browser environment.3211,239 npmMIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server for web automation that enables browser control, element interaction, content extraction, and monitoring using Playwright.76 npmISC