sa2web-mcp
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., "@sa2web-mcpNavigate to google.com and search for 'MCP servers'"
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.
# SA2WEB MCP
Languages: English | 中文 | 日本語 | Français | Español | Русский
This project exposes a DOM-based remote browser as MCP tools through Playwright.
The remote browser shell renders the target website inside iframe#rbi-frame. browser_snapshot
always starts from that iframe and recursively includes descendant iframe nodes. DOM tools such as
browser_extract_text, browser_click, browser_type, and browser_wait operate inside that
iframe tree by default.
For agents, the recommended path is intentionally small:
sa2_help
-> sa2_list_available_targets # only when opening saved SaaS/workspace/inner sites
-> sa2_open_target
-> browser_snapshot or browser_extract_text
-> browser_click / browser_type / browser_press / browser_waitUse sa2_open_target directly for arbitrary public websites:
{
"type": "cloud",
"url": "https://example.com"
}Use sa2_list_available_targets first for saved SaaS, workspace, and inner-site entries. It
returns stable targetId values such as saas:12, workspace:34, and inner:56; pass one of
those to sa2_open_target.
The lower-level browser_* list/enter/navigate tools are still available for compatibility and
advanced control, but normal agents should prefer the sa2_* tools above.
browser_navigate opens target URLs through cloud browsing. The remote browser origin is inferred
from SA2_LOGIN_URL.
So browser_navigate({ "url": "https://example.com" }) opens:
https://www.test7878.com/?surf=direct&_d=https%3A%2F%2Fexample.comInstall
After the package is published to npm, normal users can install it globally so sa2, sa2-browser, and sa2-mcp are available on PATH:
npm install -g @sa2web/mcp
npx playwright install chromium --with-depsIf you are installing from a local checkout instead of npm, build first and then install the current folder globally:
npm install
npx playwright install chromium --with-deps
npm run build
npm install -g .Plain npm install only installs dependencies for the current checkout; it does not put this package's own commands on your global PATH. For development, npm link is also fine after npm run build.
Related MCP server: Playwright MCP
Run
npm startDevelopment mode:
npm run devCLI:
npm run build
npm run cli -- help
npm run cli -- shell
npm run cli -- targets
npm run cli -- open https://example.com
npm run cli -- open --target-id workspace:123
npm run cli -- open workspace 123
npm run cli -- saas GitHub
npm run cli -- inner 7
npm run cli -- snapshot --url https://example.com --headless true
npm run cli -- snapshot --url https://example.com --filter 'main article'
npm run cli -- click --url https://example.com --ref e3
npm run cli -- type --url https://example.com --selector '#email' --text hello@example.comAfter global install or link, the package exposes sa2 and sa2-browser CLI commands, plus sa2-mcp for MCP clients. The CLI starts the MCP server over stdio internally and supports shell, open, targets, saved-target shortcuts (workspace, saas, inner), snapshot, text, click, type, paste, scroll, device, press, wait, screenshot, back, forward, reload, close, and raw tool commands.
Use sa2 shell for a persistent browser session. Single-command invocations still start their own server process and close it when the command finishes, so pass --url, --target-id, or another target selector for commands that need page state. If no target is provided, the CLI opens SA2_LOGIN_URL.
Inside sa2 shell, refs from snapshot stay available for later commands:
sa2> open https://example.com
sa2> targets
sa2> open --target-id workspace:123
sa2> open saas GitHub
sa2> inner 7
sa2> snapshot
sa2> click --ref e3
sa2> type --selector '#email' --text hello@example.com
sa2> screenshot --output page.png
sa2> exitMCP Client Config
The repository includes .mcp.json for local development. MCP clients can run sa2-mcp only after the package is globally installed or linked:
npm install
npm run build
npm install -g .Use npm link instead of npm install -g . if you want changes in the checkout to be reflected immediately during development.
The important values are:
{
"SA2_LOGIN_URL": "https://www.test7878.com/agent/login?clientId=...&clientSecret=...",
"SA2_LOGIN_REDIRECT_PATH": "/app/login",
"SA2_LOGIN_REDIRECT_WAIT_MS": "8000",
"SA2_RBI_FRAME_SELECTOR": "#rbi-frame",
"SA2_RBI_FRAME_WAIT_MS": "5000",
"SA2_RBI_FRAME_CONTENT_WAIT_MS": "15000",
"SA2_AUTO_LOGIN_BEFORE_NAVIGATE": "true",
"SA2_LOGIN_SETTLE_MS": "1500",
"SA2_IGNORE_HTTPS_ERRORS": "true",
"SA2_LOG_LEVEL": "info",
"SA2_LOG_STDERR": "true",
"SA2_LOG_FILE": "/tmp/sa2-browser.log"
}Logging uses a log4js-style timestamp, level, and category layout. Levels are trace, debug, info, warn,
error, fatal, and off. Logs go to stderr by default because stdout is reserved for the MCP stdio protocol;
SA2_LOG_FILE optionally appends the same redacted logs to a file. URL secrets, tokens, passwords, cookies, and
authorization values are redacted.
For real use, keep clientSecret outside source control and inject it through your MCP client's
environment configuration.
Different AI clients use different MCP config shapes. Ready-to-copy templates are available in configs/README.md, including Claude Desktop, Claude Code, Cursor, Windsurf, VS Code Copilot, Cline, Roo Code, opencode, Gemini CLI, and Zed.
Tools
Recommended high-level tools:
sa2_help: return the intended agent workflow and examples.sa2_list_available_targets: list proxy options plus all saved SaaS, workspace, and inner-site targets with stabletargetIdvalues.sa2_open_target: open any target. Use{ "type": "cloud", "url": "https://example.com" }for public websites, or{ "targetId": "workspace:34" }for saved targets.
Page inspection and interaction tools:
browser_snapshot: return a flat semantic snapshot for models with interactable refs, readable text ids, media elements, descendant iframes, hidden raw URLs, and compactcontext=[t1,t2]references for controls. Optionalfilteraccepts a CSS selector; omit it for the default full snapshot. Useref=eNvalues for actions.id=tNandcontext=[tN]are snapshot-only text references, not DOM ids, CSS selectors, or actionable refs.browser_extract_text: return visible page text from the iframe tree. Its optionalselectormust be a real CSS selector; do not pass snapshot text ids such ast7,#t7, ortext[id='t7'].browser_click: click by snapshot ref, selector, role/name, text, or x/y coordinates.browser_type: type/fill by snapshot ref, selector, role/name, or currently focused element, preserving multiline textarea and contenteditable input.browser_press/browser_press_key: press a keyboard key.browser_wait: wait for milliseconds, text, selector, or URL substring.browser_hover/browser_drag: mouse hover and drag.browser_fill_form/browser_select_option/browser_check/browser_uncheck: form operations.browser_file_upload: upload files through file inputs.browser_paste: paste plain text, HTML, RTF, and local files (including images) through clipboard data; file inputs usesetInputFilesdirectly.browser_scroll: scroll the root page or an element by direction/distance, to coordinates or edges, or bring a ref/selector target into view.browser_list_devices: list every Playwright device preset accepted by device emulation.browser_toggle_device: toggle desktop/mobile emulation using Playwright device presets and Chromium CDP without recreating the browser context.browser_handle_dialog: accept or dismiss alert/confirm/prompt dialogs.browser_navigate_back/browser_navigate_forward/browser_reload: click the shell buttons#btn-back,#btn-forward, and#btn-reload.browser_screenshot/browser_take_screenshot: return a PNG screenshot.browser_resize: resize the viewport.browser_evaluate/browser_run_code: run debugging code againstiframe#rbi-frame.browser_close: close the browser session.
Advanced compatibility tools:
browser_open_login: openSA2_LOGIN_URL.browser_list_proxies: list cloud browsing proxy options from/api/v1/home/freebrowse.browser_navigate: open a target URL through cloud browsing; optionalsurfis validated against/api/v1/home/freebrowse.browser_list_saas_sites/browser_enter_saas_site: list and enter SaaS sites.browser_list_workspaces/browser_enter_workspace: list workspace accounts and enter an account-level workspace.browser_list_inner_sites/browser_enter_inner_site: list and enter internal sites.
Agent usage
See docs/AGENT_USAGE.md for detailed instructions on connecting this MCP server to an AI agent, recommended tool workflows, publishing safeguards, and troubleshooting.
For opencode-specific setup notes, see docs/OPENCODE_USAGE.md.
Manual test
npm run build
npm run manual-test -- https://example.comKeep the browser open while debugging:
npm run manual-test -- https://example.com --keep-openAvailable Tools
19 toolsbrowser_checkB
Check a checkbox or radio by ref, selector, role/name, or text.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| name | No | ||
| role | No | ||
| text | No | ||
| selector | No |
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 only states the action, omitting details like whether it waits for the element, scrolls into view, toggles vs ensures checked, or handles errors.
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 a single concise sentence, front-loading the action and target. However, it lacks structure (e.g., separating parameter explanations) that would improve clarity without added length.
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 tool with 5 parameters, no output schema, and no annotations, the description is incomplete. It does not address return values, error messages, or behavior when no parameter is provided.
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 should explain the five parameters. It barely lists them by name but provides no details on usage, defaults, or interactions (e.g., whether multiple can be used together). The enum for 'role' is in the schema but not mentioned.
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 (check) and the target resource (checkbox or radio), and lists multiple identification methods (ref, selector, role/name, text). This distinguishes it from sibling tools like browser_uncheck or browser_select_option.
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 checking checkbox/radio elements, but provides no explicit guidance on when to use this tool versus alternatives (e.g., browser_uncheck) 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.
browser_closeB
Close the current Playwright browser session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely states 'close' without detailing implications (e.g., whether the browser process exits, if unsaved work is discarded, or prerequisites). With no annotations, the description carries the full burden but fails to disclose side effects or required 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?
The description is extremely concise with a single sentence. It earns its place, but could include more nuance without becoming verbose.
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 tool is simple with no parameters and no output schema, so the description is adequate for basic understanding. However, it lacks behavioral details and usage context, feeling incomplete for a tool that terminates a session.
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, so no parameter documentation is needed. The description adds no extra information beyond the schema, but the baseline for zero parameters is 4.
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 ('close') and the resource ('current Playwright browser session'), using a specific verb+noun pair that distinguishes it from sibling tools which perform other browser actions.
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 (e.g., closing a specific page vs. the whole session). The description does not provide context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_file_uploadC
Upload files through a file input by ref or selector.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| path | No | ||
| paths | No | ||
| selector | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It only states what the tool does, but omits critical details such as file size limits, permissions needed, side effects (e.g., overwriting existing files), or return behavior. This leaves the agent guessing.
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 extremely concise at one sentence with no extraneous words. It is front-loaded with the verb and resource. However, it could include more information without losing conciseness, such as parameter roles.
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 has 4 parameters, no output schema, and 0% schema coverage, the description is insufficient. It does not explain parameter interactions, required fields (none are required but that is only in schema), or any constraints. The agent lacks enough context to use this tool reliably.
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%, so the description must compensate. It mentions 'ref or selector' but does not explain the 'path' and 'paths' parameters, nor does it clarify how these parameters relate to each other (e.g., mutual exclusivity, required combinations). The agent cannot infer proper usage beyond the names.
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 ('Upload files') and the target ('a file input'), and mentions two methods ('by ref or selector'). It distinguishes itself from sibling tools like browser_fill_form and browser_paste, which handle different operations. However, it lacks specificity on what 'ref' and 'selector' mean exactly.
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, nor does it mention any prerequisites or constraints. Sibling tools like browser_fill_form or browser_check could be confused for similar actions, but no differentiation is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_fill_formB
Fill multiple form fields at once.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure. It fails to mention key traits like whether existing field values are cleared, if missing fields cause errors, or if form submission occurs. This leaves significant uncertainty.
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 extremely concise (one sentence) and front-loaded with the core action. However, it sacrifices essential details, making it too brief for practical use. A little more structure (e.g., brief parameter hints) would improve clarity.
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's complexity (nested array parameter, no annotations, no output schema), the description is insufficient. It provides no information on success/failure behavior, error handling, or return format, leaving the agent without critical context for robust 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 input schema defines a complex 'fields' array with multiple identification properties (ref, name, role, text, selector) and required 'value'. The description offers no explanations for these fields, leaving the agent to infer how to target form elements despite 0% schema description coverage.
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 'Fill multiple form fields at once' clearly states the action (fill) and resource (form fields), specifying it handles multiple fields simultaneously. This distinguishes it from sibling tools like browser_check (single checkbox) or browser_select_option (single dropdown).
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 use for batch form filling, and sibling tool names suggest alternatives for individual interactions. However, no explicit guidance on when to use or avoid this tool is provided, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_handle_dialogC
Accept or dismiss the current JavaScript dialog.
| Name | Required | Description | Default |
|---|---|---|---|
| accept | No | ||
| timeoutMs | No | ||
| promptText | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully explain behavior. It only says 'accept or dismiss' without detailing how each parameter (accept, timeoutMs, promptText) affects behavior, what happens on timeout, or error conditions.
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 extremely concise (one sentence), which is efficient, but it is underspecified. A slightly longer description with parameter details would improve usability without sacrificing conciseness.
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 tool with three optional parameters and no output schema, the description should explain each parameter's role and the tool's overall behavior. It fails to do so, leaving significant gaps for the agent.
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%, and the description adds no information about the three parameters. The agent must infer meaning solely from parameter names (accept, timeoutMs, promptText), which is insufficient for correct invocation.
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 handles JavaScript dialogs with accept or dismiss actions, distinguishing it from other browser tools like navigate or fill form. However, it could specify dialog types (alert, confirm, prompt) for greater precision.
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 usage guidance is provided. The description does not indicate when to use this tool versus other sibling tools, nor does it mention prerequisites like ensuring a dialog is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_list_devicesA
List all Playwright device presets available to browser_toggle_device. Returns each preset's viewport, screen, device scale factor, touch/mobile flags, and default browser type. Desktop is included as the restore target.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return content and mentions desktop as restore target, but no annotations exist and description is minimal on 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?
Two focused sentences, front-loaded with primary action, no wasted words.
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?
Fully covers the tool's purpose and outputs with no parameters, no output schema needed given 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?
No parameters; baseline 4 is appropriate as description adds no param info beyond empty 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?
Clearly states it lists Playwright device presets, specifies what each preset returns, and distinguishes from sibling browser_toggle_device.
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?
Implies usage as companion to browser_toggle_device but lacks explicit when-to-use or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_open_loginA
Advanced compatibility tool. Open the configured remote browser login URL from SA2_LOGIN_URL; most agents should prefer sa2_open_target, which logs in automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| waitUntil | No | domcontentloaded |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description mentions it's an 'advanced compatibility tool' and opens a URL, but does not disclose potential side effects, state changes, or prerequisites beyond the env variable.
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 concise sentences that efficiently convey purpose and usage guidance without wasted words.
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 simple nature (open a URL) and no output schema, the description covers the core intent and alternative, though it omits explicit mention of return value or confirmation that the action is safe.
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 only parameter (waitUntil) is documented in the schema with enum and default but the description adds no explanation of its meaning or impact, and schema coverage is 0%.
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 the remote browser login URL and distinguishes from the preferred alternative sa2_open_target.
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 advises most agents to use sa2_open_target instead, reserving this tool for advanced compatibility scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_pasteA
Paste clipboard-style text and/or files into a target by snapshot ref, selector, or role/name. Supports text/plain, text/html, text/rtf, and local file paths such as images. If no target is provided, the focused editable element is used, then the root document body.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| rtf | No | Optional text/rtf clipboard content. | |
| html | No | Optional text/html clipboard content. | |
| name | No | ||
| path | No | Single local file path convenience alias. | |
| role | No | ||
| text | No | Optional text/plain clipboard content. | |
| paths | No | Optional local file paths to add to clipboardData.files. | |
| selector | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It covers targeting logic and supported content types, but does not explain whether pasting replaces or appends content, error behavior, or permission requirements. This is sufficient but not thorough.
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 two sentences, front-loaded with the core action and supported content types, followed by fallback behavior. No redundant words; 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 no output schema and moderate complexity (9 parameters), the description covers main use cases and fallback but omits return value, error handling, and clarification of whether pasting appends or replaces content. It is adequate but not fully 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?
The description explains the role of key parameters (ref, selector, role, name as targeting mechanisms) and lists supported content types, adding meaning beyond the input schema. Schema coverage is 56%, so the description compensates for undocumented parameters like ref and selector.
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 pastes clipboard-style text and/or files into a target, specifying supported content types. It is distinct from sibling tools like browser_file_upload or browser_fill_form, but does not explicitly differentiate itself, which keeps it from 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?
The description explains fallback target behavior (focused element then document body), providing some usage context. However, it lacks explicit guidance on when not to use this tool or mention of alternatives among siblings, such as browser_file_upload for file inputs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_reloadA
Reload by clicking the remote browser toolbar button #btn-reload.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description only mentions clicking a button without disclosing side effects (e.g., data loss on forms). Minimal transparency.
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?
Single sentence with no unnecessary words; efficiently communicates the action and mechanism.
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 action but lacks details on resulting page state or potential post-action wait. Minimal but adequate given no 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?
No parameters exist; schema coverage is 100% by absence. Baseline score of 4 applies for zero-parameter tools.
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 ('Reload') and the resource ('remote browser'), and distinguishes from sibling navigation tools like browser_navigate_forward and browser_navigate_back.
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 guidance on when to use this tool versus alternatives. Usage is implied but not described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_resizeC
Resize the browser viewport.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | ||
| height | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose any behavioral traits or side effects (e.g., triggers resize event, may affect layout).
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 that states the core action, but could be enhanced with additional context without significant bloat.
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 and no description of return value or behavior after resize. For a tool with no annotations, this is insufficient.
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 does not explain the meaning of width and height parameters (units, pixel interpretation), despite 0% schema coverage. Relies entirely on schema's implicit integer 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 uses a specific verb ('Resize') and resource ('browser viewport'), clearly distinguishing it from sibling tools like browser_screenshot or browser_navigate.
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 (e.g., when to resize vs take screenshot). The description is purely functional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_run_codeC
Run an async JavaScript snippet with Playwright page and iframe#rbi-frame helpers.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description must fully disclose behavioral traits. It mentions the snippet is async and uses page and iframe helpers but omits critical details: return values, error propagation, timeouts, side effects on page state, and security implications. This is insufficient for a powerful code execution 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?
The description is a single concise sentence that front-loads the core purpose. Every word adds value: 'Run', 'async JavaScript snippet', 'with Playwright page and iframe#rbi-frame helpers'. No redundant or 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?
For a tool that executes arbitrary code, the description is too brief. It fails to explain important aspects like what the snippet can access, whether there is a return value, how errors are handled, or any limitations. With no output schema and no annotations, the agent lacks essential information to use the tool correctly and safely.
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 coverage, the description adds some meaning by specifying the code is an 'async JavaScript snippet'. However, it does not clarify whether the code expects specific variables (e.g., page), any constraints (e.g., not to use require), or how to reference the helpers. The description partially compensates but lacks depth.
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 runs an async JavaScript snippet with Playwright page and helpers, distinguishing it from sibling browser tools focused on navigation, selection, and other interactions. It uses a specific verb and resource, though 'helpers' could be elaborated.
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. For instance, there is no mention of scenarios where executing JavaScript is preferable to using other browser tools like fill_form or click. This lack of context limits effective tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotC
Take a PNG screenshot of the current page.
| Name | Required | Description | Default |
|---|---|---|---|
| fullPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states a read operation is performed, but does not disclose any behavioral traits such as side effects, permissions, or limitations.
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?
Single sentence is concise but fails to provide necessary information. It could earn its place by including parameter or usage details.
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?
With only one parameter, no output schema, no annotations, and a confusing sibling name, the description is insufficient. It does not explain what happens with the screenshot or how 'fullPage' affects 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?
Parameter 'fullPage' has 0% schema description coverage and is not mentioned in the description. The description adds no 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?
Description states verb 'Take' and resource 'PNG screenshot of current page', but is ambiguous due to sibling tool 'browser_take_screenshot' with nearly identical name. Does not differentiate between them.
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 'browser_take_screenshot'. Lacks any usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_select_optionC
Select dropdown option values by ref or selector.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| index | No | ||
| label | No | ||
| value | No | ||
| values | No | ||
| selector | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should fully disclose behavioral traits. It only states that the tool selects dropdown options, but does not mention behavior for multi-select, error handling (e.g., missing option), or whether it has side effects like custom events. Significant gaps remain.
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?
While extremely short, the description is underspecified for a tool with six parameters. Conciseness is not a virtue here as critical information is omitted. A more structured description with parameter hints or usage patterns would be appropriate.
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 (six parameters, no output schema, no annotations), the description is severely incomplete. It does not explain parameter interactions, multiple ways to specify the option, or what the tool returns or fails on. It leaves the agent guessing.
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%, so the description must add meaning to the six parameters. It only mentions 'ref' and 'selector', leaving 'index', 'label', 'value', and 'values' unexplained. The agent cannot infer how to properly combine or prioritize these parameters.
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 ('Select') and resource ('dropdown option values'), and mentions the methods 'by ref or selector'. It distinguishes the tool from siblings like browser_fill_form which handles input fields. However, it does not explicitly call out when to prefer this over other tools.
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 about when to use this tool versus alternatives like browser_fill_form or browser_check. The description lacks any context about specific use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_take_screenshotC
Take a PNG screenshot of the current page.
| Name | Required | Description | Default |
|---|---|---|---|
| fullPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry behavioral disclosure. It fails to mention default behavior (fullPage true), output format, or any side effects. The agent cannot infer what happens beyond taking a screenshot.
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 but sacrifices necessary details. It should at least mention the parameter's effect and output type.
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?
Without output schema or annotations, the description should explain return value and behavior. The current text is insufficient for an agent to use the tool reliably.
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 sole parameter 'fullPage' has no schema description (0% coverage) and the tool description does not explain its meaning. Agents must guess that it controls whether to capture the full page or viewport.
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 takes a PNG screenshot of the current page. However, it does not distinguish itself from sibling 'browser_screenshot', which may cause confusion.
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 'browser_screenshot' or other tools. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_toggle_deviceA
Toggle the current browser page between desktop and mobile device emulation without recreating the browser context. Uses Playwright device descriptors and Chromium CDP for dynamic mobile metrics, touch, device scale factor, orientation, and user agent. On Firefox/WebKit only viewport resizing is available. Omit enabled to toggle the current state.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | ||
| device | No | Playwright device name such as Pixel 7, iPhone 13, or iPad Mini. Desktop disables emulation. | |
| height | No | ||
| reload | No | Reload after applying emulation so subsequent requests use the new user agent. | |
| enabled | No | Enable mobile emulation when true, restore desktop mode when false. Omit to toggle. | |
| hasTouch | No | ||
| userAgent | No | ||
| orientation | No | ||
| deviceScaleFactor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides good transparency by explaining that the tool preserves the browser context, uses Playwright device descriptors and CDP on Chromium, and has limited functionality (viewport only) on Firefox/WebKit.
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 three front-loaded sentences, each providing essential information 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?
While the description covers core functionality and limitations, it does not explain the interplay between parameters (e.g., when custom width/height override device presets) or the return value, leaving some gaps given the tool's complexity.
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 adds meaning to many parameters not covered by the schema descriptions (e.g., device, hasTouch, orientation, userAgent, and the behavior of omitting 'enabled'), compensating for the low 33% schema description coverage.
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 ('Toggle') and the resource ('device emulation'), differentiating it from sibling tools like browser_resize by emphasizing that it toggles between desktop and mobile without recreating the context.
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 switching emulation modes and notes browser-specific limitations, but does not explicitly state when to use this tool versus alternatives like browser_resize or browser_list_devices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_uncheckB
Uncheck a checkbox by ref, selector, role/name, or text.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| name | No | ||
| role | No | ||
| text | No | ||
| selector | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears the full burden. It fails to disclose behavior when the checkbox is already unchecked, error conditions, or required page state. This is a significant gap for a 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?
The description is a single sentence that front-loads the verb and resource, and lists all locator strategies concisely with no wasted words.
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 checkbox uncheck operation, the description is adequate but lacks details on error handling, side effects, or prerequisites. No output schema exists, so the agent has no information on return 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?
With 0% schema description coverage, the description adds some meaning by listing the locator strategies, but it doesn't explain how they work together, if they are exclusive, or the specifics of each (e.g., that 'role' only allows 'checkbox').
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 'uncheck' and the resource 'checkbox', and lists multiple locator strategies (ref, selector, role/name, text), making the purpose unambiguous and distinguishing it from sibling tools like browser_check.
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 browser_check, nor any prerequisites or context for using the different locator strategies.
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.
19 tool updates
v1.0.3- First observed
browser_check - First observed
browser_close - First observed
browser_file_upload - First observed
browser_fill_form - First observed
browser_handle_dialog - First observed
browser_list_devices - First observed
browser_navigate - First observed
browser_navigate_back - First observed
browser_navigate_forward - First observed
browser_open_login - First observed
browser_paste - First observed
browser_reload - First observed
browser_resize - First observed
browser_run_code - First observed
browser_screenshot - First observed
browser_select_option - First observed
browser_take_screenshot - First observed
browser_toggle_device - First observed
browser_uncheck
TDQS
Multiple tools have overlapping purposes: browser_screenshot and browser_take_screenshot are identical. browser_navigate and browser_open_login both navigate but with inconsistent descriptions. Additionally, browser_open_login references sa2_open_target which is not a tool, causing confusion.
All tools start with 'browser_', which is consistent, but the verb patterns vary: some are verb_noun (e.g., browser_navigate_back), some are just verbs (browser_check), and there is inconsistency with browser_screenshot vs browser_take_screenshot.
19 tools is on the higher side but still reasonable for a browser automation server. The set covers a wide range of actions, though some duplication could be eliminated.
The tool surface lacks fundamental browser actions such as clicking an element or typing text. The reliance on a non-existent sa2_open_target tool for login creates a gap. While many actions are covered, critical ones are missing.
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
Live browser debugging for AI assistants — DOM, console, network via MCP.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
61Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…
Related MCP Servers
- FlicenseBqualityDmaintenancePlaywright wrapper for MCP that enables LLM-powered clients to control a browser for automation tasks.101-
- AlicenseNot gradedqualityDmaintenanceEnables browser automation and web scraping by exposing Playwright tools through an HTTP-based MCP server. Users can navigate pages, interact with web elements, capture screenshots, and extract structured content using a persistent Chromium instance.MIT
- FlicenseNot gradedqualityDmaintenanceExposes Playwright browser automation as MCP tools, enabling AI assistants to control a real browser tab-by-tab for form filling, navigation, and more, while preserving the user's active session.-
- AlicenseNot gradedqualityBmaintenanceEnables autonomous web QA by exposing Playwright browser control as MCP tools for navigation, accessibility snapshotting, interaction, and bug detection.2MIT
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/sa2web/sa2web-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server