Give any AI agent a real browser.
Every browser automation tool launches a new, blank browser — no logins, no cookies, no extensions. Your agent has to re-authenticate everywhere, fight captchas, and gets flagged as a bot.
BrowserHand takes a different approach: it controls the browser you're already using.
| BrowserHand | Manus AI | Playwright / Puppeteer | Browser MCP | |
|---|---|---|---|---|
| Browser | Your real browser | Your real browser | New blank browser | New blank |
| Login state | Preserved | Preserved | None | None |
| Bot detection | Much harder to detect | Much harder to detect | Often flagged | Often flagged |
| Open source | Yes (MIT) | No | Yes | Yes |
| Self-hosted | Yes | No (SaaS only) | Yes | Yes |
| API access | HTTP + JSON + MCP | None | Library API | MCP only |
| Build your own agent | Yes | No | Yes | Yes |
| Framework lock-in | None — curl works | Manus platform | Playwright SDK | MCP clients |
Install the Chrome extension, connect via MCP, and let AI control your browser directly. No coding required.
What you can do:
- Ask Claude to post on Twitter, reply to mentions, schedule threads
- Automate LinkedIn engagement — publish articles, send connection requests
- Monitor competitor websites for changes
- Fill forms, scrape data, take screenshots — all from natural language
Setup:
- Install the BrowserHand Chrome Extension
- Add to your Claude Desktop / Claude Code config:
{
"mcpServers": {
"browserhand": {
"command": "npx",
"args": ["browserhand-mcp"]
}
}
}- Say "Open Twitter and post: Hello World" — done.
You're building an AI agent that needs to operate a browser? BrowserHand gives your agent the same real-browser capabilities as Manus AI — open source, fully controllable, deployed on your own platform.
What you can build:
- A social media agent that auto-posts and replies across Reddit, Twitter, LinkedIn
- A customer support agent that navigates your internal tools
- A monitoring service that checks pages and alerts on changes
- Any agent that needs to interact with websites that don't have APIs
Integration via HTTP:
import requests
def cmd(action, **params):
return requests.post("http://127.0.0.1:29981/command",
json={"action": action, "params": params}).json()
# Your agent logic decides what to do
cmd("navigate", url="https://twitter.com")
cmd("extract") # get all interactive elements
cmd("click", index=5) # click "New post" button
cmd("type", index=8, text="Hello from my agent!")
cmd("click", index=12) # click "Post"Works with any language and any agent framework — Mastra, LangChain, CrewAI, OpenAI Assistants, or your own. Just HTTP POST. Also supports MCP integration.
See the full Developer Integration Guide for local development, cloud deployment (multi-user), all 25 actions, and response format.
chrome://extensions→ Developer mode ON → Load unpacked → selectextension/
cd relay && npm install && npx tsx index.tscurl -X POST http://127.0.0.1:29981/command \
-H "Content-Type: application/json" \
-d '{"action": "navigate", "params": {"url": "https://example.com"}}'Claude Desktop / Cursor Your code / Agent framework
↓ MCP (stdio) ↓ HTTP POST /command
↓ ↓
MCP Server (browserhand-mcp) ────┤
↓ HTTP POST /command ↓
Relay Server (localhost:29981)
↓ WebSocket
Chrome Extension
↓ Chrome DevTools Protocol
Your Browser (logged in, cookies intact)
Two entry points, one core. The MCP server translates MCP tool calls to HTTP. The relay bridges HTTP to WebSocket. The extension executes commands via Chrome's debugger API.
- Localhost only — relay binds to
127.0.0.1, unreachable from the network - Origin verification — WebSocket requires an exact
chrome-extension://<32-char-id>origin (a spoofed prefix is rejected); optionally pin the allowed extension id viaBROWSERHAND_EXTENSION_ID - Sensitive page blocklist — a single gate auto-refuses every page-operating action on banking & password-manager sites and on sensitive paths (/login, /signin, /password, /payment, /checkout, /billing, /account/security)
- Request guards on
/command(even in local mode) — theHostheader must be a loopback name (blocks DNS-rebinding), a cross-site browserOriginis rejected, and the body must beContent-Type: application/json(blocks the CSRF simple-request bypass). Non-browser clients likecurland the MCP server are unaffected as long as they sendapplication/json. - Optional local auth — set
BROWSERHAND_REQUIRE_AUTH=1to also requireAuthorization: Bearer <token>on/commandin local mode. See the Integration Guide for all env vars. - Visual transparency — agent-operated tabs are grouped and highlighted
- Developer Integration Guide — local dev, cloud deployment, all 25 actions, response format