neko-browser
Drive a persistent, headed Playwright browser through 22 MCP tools covering navigation, tab management, page inspection, input, file upload, JS execution, and dialog/wait control.
Navigate: open a URL, optionally in a new tab; go back in browser history.
Tabs & session: list, switch, and close tabs; close the browser while keeping cookies and login state.
Inspect: get URL, title, and indexed interactive elements (with
max_elementscap) plus an optional screenshot; get page or element HTML; read one or all element attributes.Screenshots: capture the viewport or full page and optionally save it as a PNG.
Act: click or double-click by element index or by x/y coordinates, hover, check/uncheck checkboxes and radios, scroll up/down, and select dropdown options by value, label, or option index.
Input text: type via keyboard events, fill via DOM (
textContentorinnerHTMLfor contentEditable/rich text), and press keys (Enter, Tab, arrows, shortcuts).Files: upload one or more files to an
<input type=file>directly, or via a button that opens a chooser.Scripting: evaluate arbitrary JavaScript in the page context with an optional argument, for handlers that clicking cannot trigger.
Timing & dialogs: wait for a CSS selector state or the next navigation, and auto accept/dismiss alert, confirm, and prompt dialogs (with prompt text), returning info on the last dialog.
Note: this schema exposes 22 tools, a subset of the README's stated 40; no Power Platform blocking or PII masking details appear here.
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., "@neko-browser go to https://example.com and take a screenshot"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
neko-browser
Dedicated browser MCP server for neko-gundan agents. Headed Playwright with persistent profile, fully isolated from daily-use Chrome.
Features
Persistent profile: Sessions survive restarts (cookies, localStorage, login state preserved)
Headed mode: GUI visible by default for debugging and human oversight
40 MCP tools: Full browser automation toolkit with Power Platform UI support
PII masking: Sensitive data (credit cards, SSNs, emails) auto-masked in responses
Process isolation: Runs its own Chromium instance with dedicated profile directory
Custom favicon: Shigoto-neko icon injected for easy identification
Related MCP server: browser-mcp-server
Tools
Tool | Description |
| Navigate to URL, optionally in new tab |
| Click element by index or coordinates |
| Type text into element (keyboard events) |
| Set element text: uses Playwright's |
| Clear and replace input/contentEditable text, optionally committing with a key |
| Re-find one target by semantic conditions (including id/css), click it, and optionally wait for expected text |
| Re-find one editable target by semantic conditions (including id/css) and replace its text |
| Prepare a click target (including id/css conditions) and issue a short-lived one-time confirmation token without clicking |
| Send keyboard key (Enter, Tab, etc.) |
| Get page URL, title, interactive elements. |
| Find refreshed elements by text, role, automationid, id, css (main frame only), placeholder, or tag. Adds |
| Capture page, element (by index), or clip-region screenshot, with optional mask for indexes/selectors ( |
| Scroll page, or a specific element's scroll container (by index/selector), in up/down/left/right directions |
| Scroll an element into view by index |
| Navigate back in history |
| Get HTML of page or element |
| List all open tabs |
| Switch to tab by ID |
| Close tab by ID |
| Close the browser |
| Upload files (direct input or dialog mode) |
| Execute JavaScript in page context. A JavaScript exception thrown inside the page returns text starting with |
| Select dropdown option (by value/label/index) |
| Wait for selector, text across frames, navigation, URL match, load state, a JS condition, or |
| Configure alert/confirm/prompt handling, optionally for the next dialog only ( |
| Hover over element (tooltips, menus) |
| Check/uncheck checkbox or radio |
| Double-click element |
| Drag element from one index to another (blocked by default on Power Platform). Element indexing also matches plain |
| Get element attribute(s) |
| Read the actual value of an input/select/checkbox/contentEditable element (blocked by default on Power Platform) |
| Collect alert/status/live-region text from all frames, including off-screen elements (not blocked on Power Platform) |
| Get a compact indexed snapshot of interactive elements (or structure), with optional selector scope and diff from previous snapshot. Adds a |
| Get readable page text (innerText) by selector, index, or full page |
| List, inspect, or clear recorded network requests (read-only, headers masked) |
| List or clear recorded console messages and page errors |
| Reload the current page |
| Navigate forward in history |
| List or clear recorded downloads (saved with original filenames, not GUIDs) |
| Write (overwrites the current OS clipboard content), paste (Control+V), or read clipboard content ( |
Power Apps / Power Automate
Power Platformの式エディタやFluent UIでは、要素がiframe内にあり、入力欄に前回の値が残ったままになることがあります。
neko_find_elementsでrole、automation_id、textを使って対象を絞り込む返されたインデックスを直ちに
neko_replace_textへ渡す必要な場合だけ
commit_key: "Enter"を指定するneko_wait_forにtextを渡して保存完了・エラー表示などの動的状態を待つ
DOM再描画が頻繁な画面では、検索結果のindexを別の呼び出しで保持せず、neko_click_targetまたはneko_replace_targetを使う。これらは条件から対象を再同定し、複数一致を拒否し、SPAの再描画競合を再試行する。保存・送信などの操作ではexpected_textを指定して期待結果まで確認する。neko_click_targetは誤クリック防止のため常に、neko_arm_destructiveで対象を確認してから一回限りのconfirmation_tokenを渡す。
要素インデックスはDOM更新で変わるため、保存や画面遷移の後は再検索する。自動保存・公開・削除などの不可逆操作は、既存のダイアログdismiss既定値と人手確認を維持する。
neko_find_elements・neko_click_target・neko_replace_target・neko_arm_destructiveのid条件は大小区別ありの完全一致、css条件はメインフレームのみに適用され、現在の要素インデックスに載っている要素にしか一致しない。
Power Platformホストではneko_get_value(要素の実値取得)とneko_drag(ドラッグ操作)を既定でブロックする。neko_get_alerts(アラート・通知文言の取得)はUI通知文言のみを対象とするためPower Platformでもブロックしない。
neko_clipboardのreadはホストに関わらず既定で無効。OSクリップボードは総司令のデスクトップと共有される資源のため、NEKO_BROWSER_ENABLE_EVALUATE=trueを設定した監督下でのみ許可する。write(現在のOSクリップボード内容を上書きする)とpasteは入力支援のため常に許可する。
Installation
npm install
npm run buildConfiguration
Environment variables:
Variable | Default | Description |
|
| Profile directory path |
|
| Set to |
|
| Allow legacy index/coordinate actions, raw page text export ( |
|
| Enable arbitrary page JavaScript and clipboard read ( |
|
| Enable raw HTML export only during supervised debugging |
|
| Download directory; absolute path only (relative paths fall back to default). Directory is created automatically if missing |
Power Apps、Power Automate、Dynamics 365、Power Pages(商用・政府クラウドを含む)の主要ホスト、またはそれらをiframeに埋め込むTeams・SharePointなどのページでは、旧来のindex・座標・ファイルアップロード操作を既定で停止する。通常は条件指定APIを使い、旧フローの保守時だけNEKO_BROWSER_ALLOW_RAW_POWER_PLATFORM_ACTIONS=trueを明示する。
マルチプロファイル運用(複数アカウント同時起動)
SharePointなどで複数ロール(教育委員会/学校管理者/教員/システム管理者等)を並行して実機確認する場合、単一プロファイルのCookieを使い回すとアカウントを取り違える事故につながる。スロットごとにプロファイルとラベルを分けたMCPサーバ定義を用意することで、アカウントごとに独立したブラウザ窓を同時に起動できる。
スロット一覧
スロット | 用途 |
| 既定(既存プロファイルをそのまま使用) |
| 追加スロットA |
| 追加スロットB |
| 追加スロットC |
| 追加スロットD |
各スロットはMCP設定に個別のサーバエントリとして追加し、NEKO_BROWSER_PROFILEでプロファイルディレクトリを分け、NEKO_BROWSER_LABELで識別ラベルを付ける。
{
"mcpServers": {
"neko-browser-a": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/neko-browser",
"env": {
"NEKO_BROWSER_PROFILE": "~/.neko-browser/profile-a",
"NEKO_BROWSER_LABEL": "A"
}
}
}
}b/c/dも同様に、NEKO_BROWSER_PROFILEを~/.neko-browser/profile-bのようにスロットごとへ変えて追加する。
ラベルの反映箇所
NEKO_BROWSER_LABELで設定したラベルは以下の4箇所に反映され、人間とエージェントの双方がどの窓を操作しているか識別できる。
起動時のstderrログ(
label=として表示)neko_get_stateのレスポンスJSON先頭(profile_label/profile_dir)タブのfavicon(アイコン右下にラベルの丸バッジを重畳表示)
ウィンドウタイトルの先頭(
猫ブラウザA |形式のプレフィックス)
NEKO_BROWSER_LABELを設定しない場合は、これら4箇所とも既存プロファイル(neko-browserスロット)と同じ表示・挙動になる。
ウィンドウの初期配置
複数スロットを同時に起動すると、NEKO_BROWSER_LABELで設定したラベル(A/B/C/D)に応じてウィンドウの初期位置がカスケード状にずれる。同じ位置に4つの窓が重なって見分けがつかなくなる事故を防ぐための機能。
基準サイズ: 幅1280px × 高さ760px
カスケードのオフセット: 1段あたり80px(A→B→C→Dの順に右下へずれる)
既定値は1920×1080ディスプレイのタスクバーを除く作業領域(1920×1032、2026-08-21実測)にD窓まで収まるよう選定している。異なる解像度の環境では画面外にはみ出す可能性がある
ラベルがA/B/C/D以外の場合は位置指定を行わない(サイズのみ既定値を適用し、位置はOS任せになる)
環境変数で上書きできる。画面解像度が既定の配置と合わない場合に調整する用途。
環境変数 | 書式 | 内容 |
|
| ウィンドウの初期表示位置を上書き |
|
| ウィンドウの初期サイズを上書き |
不正な書式(数値2つのカンマ区切り以外)を指定した場合は既定値にフォールバックする。
重要: Chromiumは永続プロファイルにウィンドウ位置を記憶する。この起動引数はあくまで初回の初期配置として機能するものであり、一度ウィンドウを人手で並べ替えると、次回以降の起動ではこの起動引数より記憶された配置が優先され、その並びが維持される。
NEKO_BROWSER_LABELを設定しない既定のneko-browserスロットには、この初期配置は適用されない(起動引数自体が付与されない)。
ウィンドウタイトルのプレフィックス
ラベル設定時は、ページのウィンドウタイトル先頭に猫ブラウザA | 形式のプレフィックスが付く。SPAがタイトルを書き換えても追従する。
NEKO_BROWSER_TITLE_PREFIXにfalseを設定すると無効化できる(既定は有効)。顧客提出用スクリーンショットにラベルを写したくない場合に使うNEKO_BROWSER_LABELを設定しない既定のneko-browserスロットには適用されない既知の制約:
about:blankではプレフィックスが付かない(実害なし)
ロックとスロット間の並行動作
ロックはサーバプロセスごとに管理されるため、異なるスロット同士は並行して動作できる。同一スロットへの同時操作は従来通りブロックされる。
注意事項
新規スロットはCookieが空の状態で起動するため、初回はログインが必要
MCPサーバ設定を追加・変更した後は、反映のためにClaude Codeの再起動が必要
Usage (MCP)
Add to your Claude Code MCP settings:
{
"mcpServers": {
"neko-browser": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/neko-browser"
}
}
}License
MIT
Available Tools
23 toolsneko_checkA
Check or uncheck a checkbox or radio button element.
Inputs: index (required), checked.
neko_clickB
Click an element by index (from neko_get_state) or by coordinates.
Inputs: x, y, index.
neko_closeA
Close the neko-browser. Session data (cookies, login state) is preserved.
Inputs: no named parameters.
neko_close_tabA
Close a specific tab by tab_id.
Inputs: tab_id (required).
neko_double_clickB
Double-click an element by index or coordinates.
Inputs: x, y, index.
neko_evaluateA
Execute arbitrary JavaScript in the page context (page.evaluate()). Use this when neko_click cannot trigger a client-side handler, such as ASP.NET PostBack (WebForm_DoPostBackWithOptions). Returns the evaluation result as JSON.
Inputs: expression (required), arg.
neko_fillA
Set text content of an element directly via DOM (bypasses keyboard events). Use this instead of neko_type for contentEditable elements or when text contains HTML special characters like < > &.
Inputs: text (required), index (required), html.
neko_get_attributeA
Get attribute value(s) of an element. Returns all attributes if no name is specified.
Inputs: index (required), name.
neko_get_htmlB
Get the HTML content of the page or a specific element.
Inputs: selector.
neko_get_stateA
Get the current browser state including URL, title, interactive elements, and optionally a screenshot.
Inputs: max_elements, include_screenshot.
neko_go_backA
Navigate back in browser history.
Inputs: no named parameters.
neko_handle_dialogA
Configure automatic browser dialog handling (alert/confirm/prompt). Dialogs are auto-accepted by default. Also returns info about the last dialog that appeared.
Inputs: action, prompt_text.
neko_hoverA
Hover over an element by index. Triggers mouseover events (for tooltips, dropdown menus, etc.).
Inputs: index (required).
neko_list_tabsA
List all open tabs in the neko-browser.
Inputs: no named parameters.
neko_press_keyA
Press a keyboard key (Enter, Tab, Escape, Backspace, ArrowDown, etc.). Uses Playwright key names.
Inputs: key (required).
neko_screenshotB
Take a screenshot of the current page.
Inputs: full_page, save_path.
neko_scrollB
Scroll the page up or down.
Inputs: direction (required).
neko_selectA
Select option(s) from a select element. Specify one of: value, label, or option_index.
Inputs: index (required), label, value, option_index.
neko_switch_tabA
Switch to a specific tab by tab_id.
Inputs: tab_id (required).
neko_typeB
Type text into an element identified by index. Sensitive data is masked in the response.
Inputs: text (required), index (required).
neko_upload_fileA
Upload file(s) to a file input element. Two modes: (1) Specify "index" for a direct element, or (2) Specify "trigger_index" for a button that opens a file chooser dialog. If both are given, "index" takes priority.
Inputs: file_paths (required), index, trigger_index.
neko_wait_forB
Wait for a CSS selector to reach a state, or wait for navigation to complete.
Inputs: state, timeout, selector, navigation.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 23 tools
Each tool has a distinct purpose clearly differentiated by verb and object (e.g., neko_click vs neko_double_click, neko_type vs neko_fill). Even similar actions like typing and filling are explicitly distinguished in descriptions.
All tools follow the 'neko_' prefix + lower_snake_case verb or verb_noun pattern. The naming is uniform and predictable, aiding intuitive selection.
23 tools is on the higher side but justifiable for a full browser automation suite. Each tool serves a specific, warranted function without redundancy.
Covers nearly all browser interaction needs: navigation, clicking, typing, form handling, file upload, screenshots, scrolling, JavaScript execution, dialog handling, tab management, and state retrieval. The inclusion of neko_evaluate fills any edge cases.
Maintenance
Related MCP Connectors
Official Browserless MCP server: browser automation, scraping, screenshots and PDFs for AI agents.
Hosted MCP catalog with 30 tenant-isolated browser, RAG, AI, mail and media tools.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Related MCP Servers
- AlicenseBqualityDmaintenanceA browser automation server providing Playwright capabilities for controlling web browsers, capturing screenshots, extracting content, and performing complex interactions through an MCP interface.6Apache 2.0
- AlicenseBqualityDmaintenanceA universal browser automation MCP server using Playwright, enabling programmatic control of Chrome with 63 tools for navigation, interaction, media control, and CDP-based diagnostics.6328 npm3MIT
- AlicenseNot gradedqualityDmaintenanceA comprehensive browser automation MCP server using Playwright, offering 50+ tools for page control, element interaction, content extraction, and more across multiple browser engines.35 npm1MIT
- AlicenseBqualityDmaintenanceAn MCP server for generic browser automation using Playwright. Enables MCP clients to navigate pages, inspect elements, execute JavaScript, capture screenshots, and monitor console logs and network traffic via a headless Chromium instance.727 npmISC