b3808686c49523c2327c8bc61a16a4b9682e8393
📁 Files changed: 1 📝 Lines changed: 9 • .mcp.json
@saiden/browse
Headless browser automation for Claude Code using Playwright WebKit.
Installation
npm install @saiden/browse
npx playwright install webkit
CLI Usage
# Take a screenshot
claude-browse https://example.com
# Custom viewport and output
claude-browse -o page.png -w 1920 -h 1080 https://example.com
# Query elements
claude-browse -q "a[href]" https://example.com
claude-browse -q "img" -j https://example.com # JSON output
# Click and interact
claude-browse -c "button.submit" https://example.com
claude-browse -t "input[name=q]=hello" -c "button[type=submit]" https://google.com
# Chain actions
claude-browse -c ".cookie-accept" -c "a.nav-link" -q "h1" https://example.com
# Interactive mode (visible browser)
claude-browse -i --headed https://example.com
Server Mode
Start a persistent browser server that accepts commands via HTTP:
claude-browse -s 3000 # headless
claude-browse -s 3000 --headed # visible browser
Send commands:
# Navigate
curl -X POST localhost:3000 -d '{"cmd":"goto","url":"https://example.com"}'
# Click
curl -X POST localhost:3000 -d '{"cmd":"click","selector":"button.submit"}'
# Type
curl -X POST localhost:3000 -d '{"cmd":"type","selector":"#search","text":"hello"}'
# Query elements
curl -X POST localhost:3000 -d '{"cmd":"query","selector":"a[href]"}'
# Screenshot
curl -X POST localhost:3000 -d '{"cmd":"screenshot","path":"page.png"}'
# Get current URL
curl -X POST localhost:3000 -d '{"cmd":"url"}'
# Get page HTML
curl -X POST localhost:3000 -d '{"cmd":"html"}'
# Navigation
curl -X POST localhost:3000 -d '{"cmd":"back"}'
curl -X POST localhost:3000 -d '{"cmd":"forward"}'
curl -X POST localhost:3000 -d '{"cmd":"reload"}'
# Wait
curl -X POST localhost:3000 -d '{"cmd":"wait","ms":2000}'
# Close server
curl -X POST localhost:3000 -d '{"cmd":"close"}'
Claude Code Plugin (Recommended)
Install as a Claude Code plugin for the best integration:
# Via marketplace (recommended)
claude plugin marketplace add https://github.com/saiden-dev/claude-plugins
claude plugin install browse
# Or direct from GitHub
claude plugin install github:saiden-dev/browse
Prerequisites: Node.js 18+ (the MCP server runs via npx)
Plugin Features
Slash Commands:
| Command | Description |
|---|---|
/browse:start |
Start an interactive browsing session |
/browse:goto <url> |
Navigate to URL and describe findings |
/browse:screenshot |
Take a screenshot of the current page |
/browse:scrape <url> |
Scrape content from a webpage |
/browse:analyze |
Analyze current page content and structure |
/browse:extract [selector] |
Extract structured data from page |
/browse:fill [data] |
Help fill out forms |
/browse:compare [action] |
Compare page states before/after action |
/browse:save |
Save current session state to file |
/browse:restore |
Restore a previously saved session |
/browse:end |
End the browsing session and close browser |
MCP Resources (@ mentions):
| Resource | Description |
|---|---|
@browse:browser://state |
Browser state (URL, title, launched) |
@browse:browser://html |
Page HTML (truncated to 10KB) |
@browse:browser://html/full |
Complete page HTML |
@browse:browser://screenshot |
Page screenshot as base64 PNG |
MCP Server (Standalone)
Use with any MCP-compatible client:
# Run the MCP server
browse-mcp
Add to Claude Code's MCP config (~/.claude/settings.json):
{
"mcpServers": {
"browser": {
"command": "browse-mcp"
}
}
}
Available Tools: goto, click, type, query, screenshot, url, html, back, forward, reload, wait, eval
Image Processing Tools: favicon, convert, resize, crop, compress, thumbnail
Programmatic Usage
import { ClaudeBrowser, startServer } from '@saiden/browse';
// Direct browser control
const browser = new ClaudeBrowser({
headless: true,
width: 1280,
height: 800,
});
await browser.launch();
await browser.goto('https://example.com');
const elements = await browser.query('a[href]');
console.log(elements);
await browser.click('button.submit');
await browser.type('#input', 'hello');
await browser.screenshot('page.png');
await browser.close();
// Or start a server
const server = await startServer({ port: 3000, headless: false });
// Server runs until closed via HTTP or SIGINT
API
ClaudeBrowser
launch()- Launch the browserclose()- Close the browsergoto(url)- Navigate to URLclick(selector)- Click elementtype(selector, text)- Type into inputquery(selector)- Query elements, returns attributesscreenshot(path?, fullPage?)- Take screenshotgetUrl()- Get current URL and titlegetHtml(full?)- Get page HTMLback()/forward()/reload()- Navigationwait(ms)- Wait for timeoutnewPage()- Open new pageexecuteCommand(cmd)- Execute a command object
BrowserServer
start()- Start HTTP serverstop()- Stop server and close browsergetPort()- Get server port
License
MIT
Description
Browser automation MCP server that gives AI agents full control of a Playwright session.
Languages
TypeScript
67.6%
JavaScript
31.4%
Just
1%