browse
Allows importing cookies from Safari browser on macOS, requiring Full Disk Access.
Click on "Install 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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/saiden-dev/browse'
If you have feedback or need assistance with the MCP directory API, please join our Discord server