Agent360 Browser MCP
io.github.Agent360dk由 GitHub 帳號 Agent360dk 發布v1.31.0更新於 Nov 6, 2026
Drive your real, logged-in Chrome from any AI agent - 40 tools. Needs our Chrome extension too.
概覽
透過配套的 Chrome 擴充功能操控你已登入的真實 Chrome,讓 AI 助理用 40 個工具瀏覽、點擊、填寫、讀取頁面,並在需要時請你輸入 2FA 驗證碼。
- 可以做什麼
- 瀏覽分頁、讀取頁面文字或 HTML、截圖、執行腳本、捲動擷取長列表
- 點擊、填寫、按鍵、捲動、懸停、選擇下拉選項與日期、批次關閉浮層、處理原生對話框
- 列出、切換、關閉分頁,並在 iframe 內操作
- 讀寫 Cookie 與 localStorage、擷取主控台日誌、上傳檔案、發出繞過 CORS 的請求、等待 API 呼叫完成
- 偵測並逐步處理驗證碼,需要人工時請你操作或輸入驗證碼
- 執行自我檢查與回饋報告,並開啟各服務商的 API 頁面提供尋找權杖的指引
- 適用情境
- 適合讓助理操作需要登入、2FA 或反機器人攔阻的網站,或沒有 API 的平台,並沿用你已登入的 Chrome 工作階段。也適合對自家網站做端對端測試,以及在儀表板、社群網站上操作時由你確認敏感步驟。
- 執行需求
- 以 stdio 在本機執行 npm 套件,需要 Node.js 與 npx。還必須安裝配套的 Chrome 擴充功能(以開發人員模式載入或從 Chrome 線上應用程式商店安裝);只裝伺服器時擴充功能會一直顯示未連線。僅支援桌面版 Chrome,Windows 尚未驗證。可選環境變數 BROWSER_MCP_CHECK_NPM、BROWSER_MCP_EXTENSION_ID、BROWSER_MCP_PROFILE 可調整行為。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Agent360 Browser MCP,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Browser MCP by Agent360
The browser tool that can stop and ask you. A 2FA code, a CAPTCHA, a choice only you can make: it asks on your own screen, then carries on in the same signed-in Chrome.
It drives the Chrome you are already signed into: no login step to fail, no API key to wire up, no fresh profile that is a stranger to every account you have. Up to 20 agents at once, each in its own colour-coded tab group. 40 tools, MIT, runs on your machine.
→ What it can and cannot get past - every wall, marked measured, by design, not yet, or won't. Including the ones we have not fixed.
[npm version] [npm downloads] [GitHub stars] [License: MIT] [MCP] [Chrome Web Store]
[Add to Cursor] [Add to VS Code] [Glama quality]
[Four agents, each in its own tab group. One reaches a 2FA code, asks you, and carries on]
Browser MCP gives Claude Code (and MCP clients that run local servers, such as Cursor and VS Code agent mode) control of your actual Chrome: your cookies, your sessions, your 2FA. So it works on CAPTCHA, 2FA and anti-bot sites where Playwright and Puppeteer get blocked - because it's you browsing.
The killer move: it hits a login wall, opens your Gmail, reads the verification code, and continues the sign-in. There is no email API to set up. Operate platforms with no API, QA your own web app end-to-end, or work dashboards, LinkedIn and Reddit at human pace - with you approving the sensitive steps.
40 tools. Auto-clicks the reCAPTCHA v2 checkbox, with a human fallback for the rest. Multi-session color-coded tab groups. MIT, free, and it runs on your machine - no account, no telemetry, nothing sent to us.
The whole thing, in four steps
Rather not do it by hand? Paste this to your AI assistant - Claude Code, Cursor, Codex, VS Code, Windsurf, Cline - and it sets itself up:
Set up Browser MCP for me. Read https://browsermcp.dev/llms-install.md and follow it for whichever AI client you are running in. One step only I can do - tell me which one, and wait for me. When I confirm, call
browser_list_tabsto prove both halves are talking.If you cannot open URLs:
npx @agent360/browser-mcp install
It reads the same guide the four steps below spell out by hand. One step stays yours either way: Chrome will not let an extension install itself, so you load it once.
1 - Install the Chrome extension. One click from the Chrome Web Store; Chrome keeps it updated. No store? See the unpacked install below.
2 - Add the MCP server. Paste this in a terminal. Required - the extension does nothing on its own:
3 - Restart Claude Code. That is what starts the server. The extension shows no badge until step 4 - the server only takes a port the first time your agent actually uses the browser. A green badge with the number of connected agents appears then; nothing on the icon before that is normal. (The icon itself never changes colour - it is the badge that turns green.)
4 - Say this, to check it worked. Paste it to Claude Code:
Open example.com and take a screenshot.
You get an image back instead of "I don't have browser access". That's it - you're running. → What else to say
Using Cursor, VS Code, Codex or Windsurf? Same server, that client's own config - the prompt at the top handles it, or see browsermcp.dev/docs. Everything below is the long version.
The long version - install, step by step
Browser MCP is two halves and you need both: a Chrome extension (drives the browser) and a local MCP server (what your agent actually talks to). Installing only the extension - e.g. straight from the Chrome Web Store - leaves it stuck on "Not connected", because there is no server for it to reach. Chrome cannot install the server, and npm cannot install the extension. Hence two steps.
Step 1: Register the MCP server with Claude Code
That is Claude Code's own MCP command, so the entry lands in the config Claude Code actually reads. --scope user makes it available in every project.
Want the extension files on disk for the unpacked install in Step 2? Also run:
It copies the extension to ~/.browser-mcp/extension/ and prints that path in the terminal - copy it. (It also registers the server with Claude Code, Codex, VS Code and Cursor if it finds them.)
Step 2: Load the extension in Chrome
Chrome won't let extensions install themselves from npm - you load it manually one time. To update later, re-run the install command and reload it (see Keeping it updated). Prefer the Chrome Web Store install if you'd rather have the extension auto-update.
- Open Chrome and type
chrome://extensionsin the address bar - Toggle "Developer mode" ON (top right corner)
- Click "Load unpacked" (top left, next to "Pack extension")
- Navigate to
~/.browser-mcp/extension/and click "Select"- On Mac: Press
Cmd+Shift+Gin the file picker, paste~/.browser-mcp/extension/, press Enter - On Windows: Paste
%USERPROFILE%\.browser-mcp\extension\in the address bar (Windows is not yet verified: our automated tests do not pass there) - On Linux: Type
~/.browser-mcp/extension/in the path field
- On Mac: Press
- Restart Claude Code so it picks up the new MCP server
That's it. The Browser MCP icon will appear in your toolbar, and 40 browser tools are now available in Claude Code.
Alternative: Manual zip download (no npm)
If you don't want to use npm, download the extension directly:
- Download the extension zip (
agent360-browser-mcp-<version>.zip) from the latest GitHub release - Unzip the file (anywhere - e.g.
~/Downloads/browser-mcp-extension/) - Follow Step 2 above, but select the unzipped folder instead of
~/.browser-mcp/extension/ - Register the server - run
claude mcp add --scope user browser-mcp -- npx @agent360/browser-mcp@latest, or add this to~/.claude.jsonby hand:
Chrome Web Store (no Developer mode, auto-updating extension)
This replaces Step 2 only - you still need Step 1.
- Install the extension from the Chrome Web Store → - no Developer mode toggle, and Chrome keeps it updated for you.
- Register the MCP server: (For Cursor / VS Code / Codex, use that client's own MCP config instead - see browsermcp.dev/docs.)
- Restart Claude Code.
Skip step 2 and the extension icon will sit on "Not connected" forever - that is the symptom of a missing MCP server, not a broken extension.
You're in. Now what?
Nothing happens until you ask, and the hardest part of a new tool is knowing what to ask for. Paste one of these to your agent (where it says example.com, put your own site):
The pattern: many of the browser tasks you would do yourself, on sites you are already signed into. It is strongest where there is no API - internal dashboards, admin panels, portals, LinkedIn. Built something good? Add it to the gallery.
Why This Over Playwright MCP / BrowserMCP?
The pages that defeat everything else
The reason this works where headless dies is not that it slips past anything. It is that there is nothing to slip past: it is your Chrome, your session, your consent. What is left is the hard part - pages that fight any automation because of how they are built.
Every release is gated on a flow test against a real Chrome that has to survive exactly those: all 40 tools are exercised, and the gate also checks that the extension Chrome is running is the one being released - not another copy with the same version number. The failures that do show up are honest ones: mouse events are not delivered to a tab that is not in front, and the tools say so instead of reporting success. What the test covers
- strict CSP - navigate, read, execute, wait and click all still work (scripts run through the Chrome Debugger API, and the rest falls back to it when script injection is blocked)
- cross-origin iframes - seen into and reached inside
- shadow DOM - selectors reach through it
- controlled inputs -
fillsticks in a React-style controlled field - honesty checks -
clickrefuses a 0×0 element instead of hitting (0,0), and says so when the page never took the event
Known limitation: working in a tab you are not looking at
In a tab you are not looking at, the agent can navigate, read, screenshot, run scripts, click,
and fill a field it finds by CSS selector. Chrome does not deliver mouse and keyboard events to a
tab that is not the visible one in its window, so key presses, hover, double-click, right-click,
coordinate clicks, combobox typing, and filling a field found by its text all fail with an error
that says so. The agent can then call browser_switch_tab, which makes that tab the active one in
its window, but since 1.30.2 it does not bring Chrome in front of you. Input that needs Chrome in
front can then still fail, and the
agent asks you first: only with bring_to_front: true does Chrome come forward. A screenshot of a
window covered by other windows likewise answers window-covered instead of raising Chrome.
Those tools measure whether the page actually received the event rather than trusting Chrome's acknowledgement, so a background tab produces an honest failure instead of a silent one. (Introduced in 1.29.2 - see CHANGELOG.md for which release you are on.)
Fully hands-off background input is not part of 1.30, and it is not something we can fix: Chrome
delivers no mouse or keyboard input to a tab that is not the visible one in its window (measured).
Whether it does to the active tab of a window without the operating system's focus is unmeasured in
desktop Chrome, so the tools' landed answer decides. Some of it cannot be solved at all: CSS
:hover is a state the renderer owns and no script can fake it, a script-dispatched event is
never isTrusted, elementFromPoint stops at a cross-origin iframe, and the text selection a
real double-click makes is browser behaviour rather than an event.
That last group matters most. A tool that quietly reports success is worse than one that fails, because you build on the answer. Where we still fall short of it, it is written down: see #19.
Corrected 2026-09-07, and again 2026-09-19. This table used to say Playwright MCP was headless and made you log in every time. That was wrong. The row we then called "the one that survives" - concurrent clients conflicting on one profile - was wrong too: that limitation belongs to their persistent-profile mode, and their Chrome extension explicitly gives each connected client its own coloured tab group, which is the same mechanism we describe on our own row. We had corrected one page and not the pattern. The row that actually survives is human-in-the-loop, and it is the one we measured: the Playwright MCP README lists 72 documented tools (counted 2026-09-19) and none of them can stop and ask the person for a code.
On the name: the similarly-named
browsermcp.io(@browsermcp/mcp) is a different, unaffiliated project with no commits since April 2025. This is Browser MCP by Agent360 (@agent360/browser-mcp) - actively maintained. Full side-by-side →
Environment variables
All four are optional. None is needed for normal use.
40 Tools
Navigation & Content
Interaction
Tabs & Frames
Data & Network
CAPTCHA Solving
Human-in-the-Loop
Data
Diagnostics & feedback
Multi-Session Support
Each Claude Code conversation gets its own MCP server on a unique port (9876-9895). The Chrome extension connects to all active servers simultaneously.
Need more than 20 at once? The range is a setting, not a hard limit, but both halves have to agree.
Set BROWSER_MCP_MAX_PORT in every chat's MCP config, set bmcpPorte to the same range in the
extension's storage, then reload the extension: it reads the range only when it starts. Change only the
server side and chat 21 binds a port the extension never looks at, so the browser goes quiet in that chat
with nothing to explain it. 100 is plenty; the hard cap is 200. Every extra port costs your browser one
refused connection every two seconds, whether you use it or not, so do not widen it for fun.
- Session isolation - each session gets a color-coded Chrome Tab Group
- Tab ownership - sessions can only see and control their own tabs
- Auto-cleanup - processes exit when Claude Code closes the conversation
- Ports are taken on demand - a server binds its port on the first browser call, not at startup, and releases it 5 minutes after its last tab closes. A chat that never touches the browser never occupies a slot.
Several Chrome profiles
The Chrome Web Store extension has the same id in every Chrome profile, so before 1.31 the server could not tell your
profiles apart: with the extension enabled in two of them, commands went to one, and which one could change. From 1.31
each installation (one per Chrome profile) reports an installation id, and you can give it a name in the extension popup
under "This Chrome profile". Set BROWSER_MCP_PROFILE=<name> in a client's MCP config, and that client drives that profile.
A chat's first browser call waits until the port has been open for about 2.5 seconds before it chooses, so every Chrome
profile has had one scan (every 2 seconds) to connect; without that, the profile that happened to connect first could be
chosen without a word. The margin is about half a second on an idle machine: a profile whose scan comes later than that,
for instance on a heavily loaded machine, can still be missed by the first choice, and the chat then stays with the
profile that did connect. In all of these error answers nothing was sent to Chrome (sent: false), and the server never moves to another
profile on its own: a call that was already waiting when the chat's installation went away gets profile-disconnected too. browser_about lists what is connected. Renaming in the popup does not drop any connection or running call; a
chat that is already driving the installation keeps driving it. The name is a choice, not a key: the extension's greeting
is not signed, and another program on your machine can claim any name (see Security below).
Running the agent on another machine
The extension only connects to 127.0.0.1, deliberately - it will not talk to a remote
WebSocket. If your MCP gateway runs on a different box than your browser, forward the port
range over SSH.
Recipe below contributed by @bkuri,
who ran into exactly this and solved it. Linux + systemd; needs autossh locally and your
public key already on the server:
Replace server-name, then systemctl --user enable --now browser-mcp-tunnel.service.
The original recipe listed ports 9876-9885 by hand - the range was ten back then. It is twenty now, so the loop above generates them instead of hard-coding a list that goes stale the next time the range changes.
Built-in Provider Integrations
browser_extract_token opens the provider's API page and returns instructions for finding or creating the credentials. It reads nothing itself, and for HubSpot, Slack, Shopify and LinkedIn the page is a settings or app list on the way to the token, not the token page itself. Any other provider answers Unknown provider.
Architecture
How It Works
- Claude Code starts → spawns MCP server via stdio
- MCP server binds the first free port (9876-9895) the first time a tool needs the browser
- Extension's offscreen document scans ports every 2s
- WebSocket connection established
- Commands flow: Claude Code → MCP → Extension → Chrome APIs
- Process auto-exits when Claude Code closes (stdin detection)
Keeping it updated
Browser MCP has two parts, and they update independently - how the extension updates depends on how you installed it:
Not sure which you have? Open chrome://extensions and find Browser MCP. If it shows a "Loaded from /path/…" line, it's unpacked (manual updates). If there's no such line, it came from the Chrome Web Store (auto-updates).
Want zero-maintenance updates? Install the extension from the Chrome Web Store, then run claude mcp add --scope user browser-mcp -- npx @agent360/browser-mcp@latest to register the server. After that, both parts stay current on their own - as long as your config uses @agent360/browser-mcp@latest.
Troubleshooting
"Chrome extension not connected"
- Check extension is loaded in
chrome://extensions - Click the extension popup → "Reconnect"
- Wait 2-3 seconds for port scan
Screenshot fails
- Uses the Chrome Debugger API for your session's own tab (works even when the tab isn't focused)
- From 1.29.1 there is no fallback that captures whichever tab happens to be visible: if the debugger can't produce a frame, the call fails. (1.29.0 and earlier could fall back to the visible tab.) Run
browser_reattach_debuggerand try again
Click doesn't work on SPA
- Try text selector:
browser_click("text=Submit") - Uses real mouse events via Chrome Debugger API automatically
Upload fails with "Not allowed"
- Chrome only hands a file to the page when "Allow access to file URLs" is on for the Agent360 Browser MCP extension (chrome://extensions, Agent360 Browser MCP, Details). It is off by default for Chrome Web Store installs
- The switch also lets the extension open any local file as a page, so turning it on is your call; otherwise attach the file yourself
- From 1.30.2 a "Not allowed" error from the handoff is reported as
file-access-offunless Chrome confirms that file access is on
Stale processes
- Processes auto-exit when Claude Code closes (stdin detection)
- Idle timeout: 4 hours without commands → auto-exit
- Manual cleanup:
lsof -i :9876-9895 | grep LISTEN
💡 Help Shape Browser MCP
Browser MCP is built in the open and shaped by the people using it.
Browse what others want / built
- 💡 Wishlist → - features people are asking for
- 🎯 Use-cases → - what others have built (LinkedIn ICP scraping, vendor research, daily ops, …)
Contribute in 30 seconds
Or just ask Claude - it knows about the browser_about tool and will draft the report and hand you a link to review and submit when you say things like "I wish browser-mcp could …" or "share my browser-mcp use-case".
If it works for you
The Chrome Web Store ranks on ratings, and we have none - so a sentence from you moves this further than anything we can write. Leave a review if it earned one, and say so honestly if it did not. No signup, no reward, nothing gated behind it - we just have no signal at all right now.
The same idea, for the rest of your Mac
This drives your browser. Computer MCP drives everything else on macOS - menus, windows, the Dock, any app's accessibility tree - with the same stance: password fields are blacked out in memory before a screenshot is written, writes go through a consent gate, and every action lands in an append-only log. It runs in the background by default: the tools that could take over your screen are not offered unless you ask for them.
npx @agent360/computer-mcp · MIT · macOS.
Privacy
The point of this tool is that your browsing stays in your browser. There is no account and no server of ours between you and the page.
- Page content - what a tool reads from a tab goes to the MCP client you configured, and nowhere else. We never see it.
- Cookies, local storage and tokens are not copied anywhere by default, and
the server keeps no copy of them - but they are reachable. Three tools read
them directly (
browser_get_cookies,browser_get_local_storage,browser_extract_token), two more write them (browser_set_cookies,browser_set_local_storage), and three more can get to the same data another way:browser_execute_scriptruns in the page and can readdocument.cookie, andbrowser_get_page_contentandbrowser_extract_listwill carry a token that the page itself puts in the DOM. When any of them runs, that value goes to your MCP client like any other tool result. Nowhere else, and never to us. - We collect nothing. No identifiers, no usage counts, no crash reports, no analytics in the extension or the server.
- Your agent's own reports.
browser_provide_feedbackreturns its report to your AI client like any other tool result, and it tries to add one line per new report to~/.browser-mcp/feedback.jsonlon your machine: the time, the kind, the tool, what the agent says happened, what it tried and what worked in the end, the page's origin and path, version numbers, a short diagnosis, the number of connected extensions and a fingerprint used to skip repeats. In the three things the agent wrote (what happened, what it tried, what worked), email addresses and numbers of six or more characters are replaced with[email]and[number]first, in the file and in the pre-filled issue link it returns; the page address is only cut to origin and path. The server does not submit the report. Opening the link sends its contents to GitHub; an issue is created only when you submit it. Delete the file to clear it. - The bridge between the extension and the MCP client runs on
localhost, on the same machine; the server reaches the network only for the npm version check you can turn on withBROWSER_MCP_CHECK_NPM=1. That bridge is local and unauthenticated: another program running as you on the same machine can connect to it. Browser MCP does not protect you from software you already run. - JavaScript your agent sends (
browser_execute_script,browser_select_frame) runs only through Chrome's Debugger API (1.31), in a tab of the agent's session; it is not part of the extension, and Chrome shows its notice that the extension is debugging the browser.browser_list_tabsreturns the addresses and titles of the session's tabs to your MCP client; Browser MCP does not read Chrome's history. - The profile name you set in the extension popup (1.31) and the installation id
are labels for choosing a Chrome profile, not credentials. The extension sends
them unsigned to every Browser MCP server on the port range, and another
program on the machine can claim the same name. The id is random, created once
per Chrome profile and kept in the extension's local storage. Both appear in
browser_aboutand in theprofile-*error answers, so they go to your agent like any other tool answer - and from there to the model provider your agent uses.
Full policy: https://browsermcp.dev/privacy
License
MIT - Agent360
來源:README.md,提交 b99362d
工具
0版本歷史
7- v1.31.0最新Oct 29, 2026
- v1.30.3Oct 15, 2026
- v1.30.2Oct 14, 2026
- v1.30.1Oct 7, 2026
- v1.30.0Sep 20, 2026
- v1.29.2Sep 18, 2026
- v1.29.1Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
