open
Open URL as numbered page text; act by #number.
url必填
io.github.perzianhq由 GitHub 帳號 perzianhq 發布v0.1.13更新於 Nov 6, 2026
The web as short, numbered text for AI agents: a lean browser interface over Playwright.
Mantis 是本地執行的 Playwright 瀏覽器 MCP 伺服器,讓助理以簡短編號文字而非截圖的方式瀏覽網頁。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
Lets AI agents browse the web as short, numbered text instead of screenshots.
perzian.dev/mantis · by Perzian
It works with Claude Code, Codex, Cursor or your own agent as an MCP server. Install in two commands.
Windows, Linux servers and other agents: SETUP.
One real task (Luna, each tool’s median run of 5 by input tokens, replayed): about half the time, over 3.5x fewer input tokens, less than half the calls. Across all 5 runs: 3-5x fewer tokens, about half the time, 11-12 calls vs 21-29. This is a selected example from 16 long tasks; medians across all 16 are in Results. Full video.
Security and threat model: SECURITY.md.
Mantis vs the accessibility tree (Playwright MCP) on public sites, gpt-6-luna and claude-haiku-5-5. Every cell is a per-run median; time is end-to-end wall time per run:
0.1.11: headline numbers are 0.1.9's; later builds checked on Dickens (Luna, Haiku) and the capability-v1 local set.
Long tasks (correct: 14 keyed tasks, 42 runs per cell; medians: all 16 tasks, 48 runs per cell; both approaches run in the same session):
Short tasks (30 tasks, 90 runs per cell; tree and screenshot columns are the earlier 20261026 run):
Versus the accessibility tree:
Versus screenshots:
Caveats:
ask_human, which needs a display.MIT
來源:README.md,提交 74f61b0
Open URL as numbered page text; act by #number.
url必填Numbered text; act by #number. ~"x" names are guesses. "Same as before" retains #numbers; region/full/fresh expands it; full is paged with offset. Verify the entity identity before editing. Before finishing, re-read and visibly verify every task constraint (filters, sort, size, quantity, date range). After an action confirms completion, stop and report it rather than re-inspecting. If #number is stale, read() and retry; if on the wrong page, back() and keep searching. open(url) returns to an earlier results page; back() can lose its query string.
fullfreshoffsetregionCase-insensitive whole-page text search, including trimmed content; returns #numbers, actionable row neighbours, and bounded local context. Give a list of up to 6 texts to search them all in one call. Use context_chars to expand just that local context; a matched heading is not a region label. With no match it scrolls virtualized lists and loads more of an infinite feed to look, and says so.
text必填context_charsClear region memory; next read shows everything.
無需輸入參數。
Click element #id.
id必填Replace input #id text; submit presses Enter.
id必填text必填submitChoose option text in select or combobox #id. A <select multiple> takes a list and its selection becomes exactly that list. Matching ignores case, accents and punctuation.
id必填option必填Prefer one mixed call for related text, dropdown, and checkbox fields; unrelated fields stay unchanged. Verify entity identity before editing. On failure or rerender it stops and reports partial completion; after confirmed completion, report it rather than re-inspecting.
fields必填Press a key, e.g. Enter. For bottom-loaded feeds, try End (Control+End if no movement) to load more; a scroll key or scroll reports when the page grew; repeat only while new items appear.
key必填Scroll up/down/left/right (default down). id alone brings #id into view; id + direction scrolls its containing list/panel/table. For wide tables use right; without id, a scrollable container is used when the page cannot scroll.
iddirectionBack one page in history.
無需輸入參數。
Wait up to 10s: text states are present (or appears) / disappears; #id states are present / enabled. On timeout, inspect the returned current observation.
idtextstatetimeout_secondsHover element #id and show changes.
id必填Select local file path(s) on #id; this selects files but does not submit a form.
id必填pathfilespathsList tabs, or switch/close tab #id.
idactionOnly if read is insufficient: media → data (prefer) → ocr → look (last resort) → ask_human. Numbered images/canvases/charts.
無需輸入參數。
Prefer; text only. Extract image/SVG/chart alt, caption, text or Chart.js/ECharts/Highcharts values; a table gives its rows. id from read()/media(), or CSS selector (#N refs work too).
idselectorText-only OCR for image/canvas. Use if data found nothing. id or CSS selector.
idselectorLAST RESORT; only image-returning tool (PNG, max 800px). Only after read/data/ocr failed. id or CSS selector.
idselectorHuman handoff for CAPTCHA, 2FA, payment or login; never solves CAPTCHAs. Waits for a page change, then returns the page.
untilreason必填timeout_seconds已滿足適用檢查項的 90%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
npx -y -p mantis-browser mantis installclaude mcp add mantis -- npx -y -p mantis-browser mantis-mcpnpx -y -p mantis-browser mantis read https://example.com # try it without an agent