browser_open
Open a browser
Open `main` or `support`, or reopen one as somebody else.
`support` is yours to manage: open it when the task needs a second
identity, and close it with browser_close as soon as the task no longer
needs it, before you answer. It is not saved.
Called on a browser that is already up, this REOPENS it with the settings
given, and what it held is gone.
seed the identity; same seed, same fingerprint. Left out, one is drawn.
profile a directory keeping cookies, logins and the seed between opens;
"" means none. It keeps the SEED too, so a login does not come
back on different hardware every visit.
proxy the exit, `http://user:pass@host:port` or `socks5://host:port`;
"" means this machine's own address; left out for `support`, it
shares the exit `main` has. A profile does NOT pin its exit, and
a login arriving from a new country is as visible as one arriving
on new hardware.
輸入參數seedproxybrowserprofile
browser_close
Close a browser
Close one browser and free what it was holding.
The page it had is gone with it. The other browser is not touched.
Who it was is kept: browser_open with no arguments brings the same person
back. To be somebody else, pass a seed, a proxy or a profile.
輸入參數browser
browser_list
List the browsers
Which of the two browsers are open, where each one is, and which one
you are working in.
Answers JSON: `focus`, the browser your last command acted in, or "" when
none is open; `note`, which says how many are open and that a command
naming no browser goes to `main`; and `browsers` - each row `id`, `url`
(the page it is on) and `urls` (every page it holds, which is more than
one only when a site opened one). Only open browsers are listed, so every
row is one you can act on.
Starts nothing: it reports what is open, so asking is free.
無需輸入參數。
browser_status
Who is browsing
Who is browsing right now: the identity, the exit, the profile and the page.
Ask whenever you need to know which person the browser currently is, or
from where its traffic leaves. The seed is what you would pass to
`browser_open` to become this person again, so this is also how you
record an identity worth repeating.
It starts nothing: a browser that is not open, or gone, is answered with
the sentence that says which.
輸入參數browser
browser_navigate
Go to a URL
Go to a url in this browser's page, opening it if none exists.
Answers with the HTTP status the server gave and the url actually landed
on, which is not always the one asked for: a redirect to a login wall or a
regional domain shows up here. Read the status before trusting the page -
a 404 or a 403 still has a document, and reading it as content is the
mistake this reply exists to prevent.
If the page you were on navigates itself at that moment (a redirect on a
timer), Firefox can follow it instead, and the answer is an error saying
"interrupted by another navigation to" a url. The browser is on that url,
and you can navigate again from there.
wait_until is "domcontentloaded" by default, which returns as soon as the
markup is parsed. Use "load" when the page needs its images and stylesheets,
or "networkidle" for a single-page app that fetches its content after
load.
輸入參數url必填browserwait_until
browser_read_text
Read the page text
The visible text of an element, with the markup gone, whole.
The cheapest way to read a page. Narrow the selector when you know where the
answer is; use browser_read_html instead when the structure matters, or
browser_snapshot when you need something to click.
輸入參數browserselector
browser_snapshot
Snapshot the page
Title, url, and the interactive elements that are actually visible.
Each element carries a `selector` when one can reach it: pass that string to
browser_click or browser_type VERBATIM rather than writing your own. It is
built to match exactly ONE element, which the obvious selector often does
not, and the driver acts on the first match - so a caller aiming at the
third of five identical links would silently hit the first and be told it
succeeded.
Elements with no `selector` carry `at`, the centre coordinates, for
browser_click_at.
It lists what a caller can act on, and it is not the accessibility tree:
one country `<select>` would otherwise fill the answer with its options
before the form you were looking for appears.
輸入參數browser
browser_read_html
Read the page HTML
The page's HTML, cleaned down to what is worth reading.
Use this when the STRUCTURE matters - a form and its labels, a table, what
a control is wired to. `browser_snapshot` gives a flat inventory of things
to click; this keeps the markup and the relationships inside it.
mode="form" keeps the interactive surface and the text explaining it,
mode="text" returns the prose alone, mode="full" keeps the structure with
the noise and the attribute soup removed.
Unlike browser_read_text this is NOT capped: it returns the whole reduced
page, tens of thousands of characters on a large one. Cutting markup in the
middle leaves tags that mean nothing, so it is not cut - but the answer can
be long. Reach for browser_snapshot when you only need something to click.
輸入參數modebrowser
browser_take_screenshot
Take a screenshot
One screenshot of this browser's page, on demand.
輸入參數browser
browser_watch
Watch the browser window
The whole browser window as a person at the machine sees it: tab strip,
address bar, the page and the pointer, from a live capture kept running on
that page. For watching the work, not for acting on it: the picture
is window pixels, so do not feed its coordinates to browser_click_at; use
browser_take_screenshot for that.
Starts nothing. A browser that is not open has no window, so this answers
the sentence that says so, and the live panes - which call this many times
a second - read that sentence as the idle pane.
輸入參數browser
browser_click
Click an element
Click the first element matching a CSS selector.
Scrolls it into view and waits for it to be clickable. When no selector can
describe the target, use browser_click_at with coordinates from
browser_snapshot.
輸入參數browserselector必填
browser_click_at
Click at a point
Click (or press-and-hold) a raw viewport coordinate instead of a
selector - for targets a selector cannot reliably reach: a slider track, a
canvas-drawn captcha, a precise point inside a wider element. Moves the
pointer there first (no teleport), then down, then up, holding first if
hold_seconds is set. Returns a screenshot taken right after release.
Coordinates are relative to the VIEWPORT, not to the page, so the ones in a
snapshot go stale the moment anything scrolls. Nothing raises when that
happens: the click lands on whatever is at that spot now. Take a fresh
snapshot after anything that could have moved the page, and prefer
browser_click with the element's `selector` whenever it has one.
輸入參數x必填y必填browserhold_seconds
browser_type
Type into a field
Type into a field, replacing what it holds, key by key at a human pace.
The answer says what the field kept: all of it, a maxlength's cut, the
page's reformatting, nothing (the page took it out), or one box of a code
the page spreads over several. Nothing is retyped on its own. Text too long
to finish within one answer goes on in the background; until it ends,
actions on that browser are refused with its progress, and reads work.
輸入參數text必填browserselector必填
browser_select_option
Choose a dropdown option
Choose an option in a dropdown (`<select>`), by its visible label or by
its value.
Use this rather than clicking the dropdown and pressing arrow keys: a click
plus arrows cannot tell you which row it landed on, and setting the value
through browser_evaluate changes it without the page seeing a real
interaction.
輸入參數value必填browserselector必填
browser_upload_files
Upload files
Attach local files to a file input, the way a person picks them.
`selector` is the `<input type=file>` itself, or the button or label that
opens its chooser: that is clicked with the real pointer and the chooser
answered with `paths`. A hidden input is opened through its label; with
none, pass the button that opens it. Several files need an input that
takes several; otherwise upload them one call at a time.
Each path is absolute and names a regular file inside a directory listed
in INVISIBLE_MCP_UPLOAD_DIRS, through no hidden directory; with none
listed, uploads are off. Never use browser_evaluate to set `files`.
輸入參數paths必填browserselector必填
browser_press_key
Press a key
Press a key on whatever has focus: "Enter", "Tab", "Escape",
"ArrowDown", "Control+a", or a single character.
輸入參數key必填browser
browser_evaluate
Read the page with JavaScript
READ from the page with JavaScript and get the result as JSON.
Last, for what other tools cannot see: a computed style, a value held
in a framework's state, the length of a list. Text, a heading or a price is
browser_read_text's, markup browser_read_html's, a control
browser_snapshot's: a script runs in the page, and they do not.
Acting on the page is refused, and the refusal names the tool to use.
Assigning to `value`, `checked` or `selected`, or calling `click()`,
`dispatchEvent()`, `submit()` or `requestSubmit()`, changes the page without
a real keystroke or pointer, and a page can tell. Use browser_click,
browser_type or browser_select_option instead; they do the same thing
through the pointer and the keyboard. Reading any of those properties is
fine.
The refusal catches the obvious spellings, not every possible one. A script
that slips past it is still the wrong way to do the thing: report it in your
answer rather than using it.
輸入參數browserexpression必填