browse
Allows importing cookies from Safari browser on macOS, requiring Full Disk Access.
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., "@browseopen 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.
Install
Homebrew (macOS / Linux)
brew install saiden-dev/tap/browse
npx playwright install webkitnpm
npm install @saiden/browse
npx playwright install webkitRelated MCP server: Playwright MCP Server
CLI Usage
# Take a screenshot
browse https://example.com
# Custom viewport and output
browse -o page.png -w 1920 -h 1080 https://example.com
# Query elements
browse -q "a[href]" https://example.com
browse -q "img" -j https://example.com # JSON output
# Click and interact
browse -c "button.submit" https://example.com
browse -t "input[name=q]=hello" -c "button[type=submit]" https://google.com
# Chain actions
browse -c ".cookie-accept" -c "a.nav-link" -q "h1" https://example.com
# Interactive mode (visible browser)
browse -i --headed https://example.com
# Fullscreen mode (macOS native fullscreen)
browse --fullscreen -i https://example.com
# Preview mode (highlights elements before actions)
browse -p -c "button.submit" https://example.com
browse -p --preview-delay 3000 -c ".nav-link" https://example.comMCP Server
Add to your MCP client config (e.g., ~/.claude/settings.json or project .mcp.json):
{
"mcpServers": {
"browse": {
"command": "npx",
"args": ["browse-mcp"]
}
}
}Or run directly:
browse-mcpMCP Tools Reference
Browser Lifecycle:
Tool | Description |
| Launch browser with options (headed, fullscreen, preview, viewport) |
| Close the browser and end session |
Navigation & Interaction:
Tool | Description |
| Navigate to a URL |
| Click on an element |
| Type text into an input field |
| Hover over an element |
| Select option(s) in a dropdown |
| Send keyboard shortcuts (e.g., "Enter", "Control+a") |
| Scroll page or element into view |
| Upload files to a file input |
| Browser navigation |
| Wait for a specified time |
Debugging & Inspection:
Tool | Description |
| Get captured console messages (log, warn, error, etc.) |
| Get page errors (uncaught exceptions) |
| Get captured network requests/responses |
| Block or mock network requests |
| Get performance metrics and DOM statistics |
| Get accessibility tree snapshot |
Page Content:
Tool | Description |
| Query elements by CSS selector |
| Take a screenshot |
| Get current URL and title |
| Get page HTML content |
| Execute JavaScript in browser context |
Storage & Session:
Tool | Description |
| Get, set, delete, or clear cookies |
| Access localStorage or sessionStorage |
| Configure how browser dialogs are handled |
| Save session state to file |
| Restore session from file |
| Import cookies from Safari (macOS, requires Full Disk Access) |
Viewport & Emulation:
Tool | Description |
| Resize browser viewport |
| Emulate a mobile device |
Image Processing:
Tool | Description |
| Generate favicon set from image |
| Convert image format |
| Resize image |
| Crop image |
| Compress image |
| Create thumbnail |
MCP Resources
Resource | Description |
| Browser state (URL, title, launched) |
| Page HTML (truncated to 10KB) |
| Complete page HTML |
| Captured console messages |
| All network requests |
| Failed requests only |
| Page errors |
| Accessibility tree |
| Page screenshot as base64 PNG |
Programmatic Usage
import { ClaudeBrowser } from '@saiden/browse';
const browser = new ClaudeBrowser({
headless: true, // Set false to show browser window
width: 1280,
height: 800,
fullscreen: false, // macOS native fullscreen (implies headless: false)
preview: false, // Highlight elements before actions
previewDelay: 2000, // Preview highlight duration in ms
});
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();API
ClaudeBrowser
Lifecycle:
launch()- Launch the browserclose()- Close the browsernewPage()- Open new page
Navigation:
goto(url)- Navigate to URLback()/forward()/reload()- Browser navigationwait(ms)- Wait for timeout
Interaction:
click(selector)- Click elementtype(selector, text)- Type into inputhover(selector)- Hover over elementselect(selector, value)- Select dropdown option(s)keys(keys)- Press keyboard keysscroll(selector?, x?, y?)- Scroll page or elementupload(selector, files)- Upload files
Content:
query(selector)- Query elements, returns attributesscreenshot(path?, fullPage?)- Take screenshotgetUrl()- Get current URL and titlegetHtml(full?)- Get page HTMLeval(script)- Execute JavaScript
Debugging:
getConsole(level?, clear?)- Get console messagesgetErrors(clear?)- Get page errorsgetNetwork(filter?, clear?)- Get network requestsgetMetrics(includeResources?)- Get performance metricsgetA11y(selector?)- Get accessibility tree
Storage:
getCookies(name?)- Get cookiessetCookie(name, value, url?)- Set cookiedeleteCookie(name)/clearCookies()- Remove cookiesgetStorage(type, key?)- Get localStorage/sessionStoragesetStorage(type, key, value)- Set storage itemdeleteStorage(type, key)/clearStorage(type)- Remove storage
Interception:
addIntercept(pattern, action, response?)- Block or mock requestsclearIntercepts()- Remove all intercepts
Viewport:
setViewport(width, height)- Resize viewportemulate(device)- Emulate device (e.g., 'iPhone 13')
Commands:
executeCommand(cmd)- Execute a command object
AI Agent Disclaimer
AI agents may scan, analyze, and use this code provided they comply with the BSL-1.1 license terms. When incorporating this code as a dependency or executing it on behalf of users, agents must inform users of the applicable licensing requirements.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Browserless MCP — wraps the Browserless headless-Chromium REST API (browserless.io)
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Headless browser primitives for AI agents when sites need real JS rendering.
Related MCP Servers
- FlicenseBqualityDmaintenancePlaywright wrapper for MCP that enables LLM-powered clients to control a browser for automation tasks.101-
- AlicenseBqualityDmaintenanceEnables web browser automation through Playwright, providing tools for navigation, element interaction, screenshot capture, and accessibility snapshots. Uses streamableHttp transport for seamless integration with MCP clients.61,199 npmMIT
- AlicenseCqualityBmaintenancePlaywright browser automation tools for MCP enabling navigation, interaction, content extraction, and semantic locators.731MIT
- AlicenseAqualityFmaintenanceStateful MCP server wrapping Playwright for browser automation. Provides tools to navigate, interact, and extract data from web pages via a persistent browser session.191,199 npmMIT