Skip to main content
Glama
saiden-dev

browse

by saiden-dev

Install

Homebrew (macOS / Linux)

brew install saiden-dev/tap/browse
npx playwright install webkit

npm

npm install @saiden/browse
npx playwright install webkit

Related 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.com

MCP 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-mcp

MCP Tools Reference

Browser Lifecycle:

Tool

Description

launch

Launch browser with options (headed, fullscreen, preview, viewport)

close

Close the browser and end session

Navigation & Interaction:

Tool

Description

goto

Navigate to a URL

click

Click on an element

type

Type text into an input field

hover

Hover over an element

select

Select option(s) in a dropdown

keys

Send keyboard shortcuts (e.g., "Enter", "Control+a")

scroll

Scroll page or element into view

upload

Upload files to a file input

back, forward, reload

Browser navigation

wait

Wait for a specified time

Debugging & Inspection:

Tool

Description

console

Get captured console messages (log, warn, error, etc.)

errors

Get page errors (uncaught exceptions)

network

Get captured network requests/responses

intercept

Block or mock network requests

metrics

Get performance metrics and DOM statistics

a11y

Get accessibility tree snapshot

Page Content:

Tool

Description

query

Query elements by CSS selector

screenshot

Take a screenshot

url

Get current URL and title

html

Get page HTML content

eval

Execute JavaScript in browser context

Storage & Session:

Tool

Description

cookies

Get, set, delete, or clear cookies

storage

Access localStorage or sessionStorage

dialog

Configure how browser dialogs are handled

session_save

Save session state to file

session_restore

Restore session from file

import

Import cookies from Safari (macOS, requires Full Disk Access)

Viewport & Emulation:

Tool

Description

viewport

Resize browser viewport

emulate

Emulate a mobile device

Image Processing:

Tool

Description

favicon

Generate favicon set from image

convert

Convert image format

resize

Resize image

crop

Crop image

compress

Compress image

thumbnail

Create thumbnail

MCP Resources

Resource

Description

browser://state

Browser state (URL, title, launched)

browser://html

Page HTML (truncated to 10KB)

browser://html/full

Complete page HTML

browser://console

Captured console messages

browser://network

All network requests

browser://network/failed

Failed requests only

browser://errors

Page errors

browser://a11y

Accessibility tree

browser://screenshot

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 browser

  • close() - Close the browser

  • newPage() - Open new page

Navigation:

  • goto(url) - Navigate to URL

  • back() / forward() / reload() - Browser navigation

  • wait(ms) - Wait for timeout

Interaction:

  • click(selector) - Click element

  • type(selector, text) - Type into input

  • hover(selector) - Hover over element

  • select(selector, value) - Select dropdown option(s)

  • keys(keys) - Press keyboard keys

  • scroll(selector?, x?, y?) - Scroll page or element

  • upload(selector, files) - Upload files

Content:

  • query(selector) - Query elements, returns attributes

  • screenshot(path?, fullPage?) - Take screenshot

  • getUrl() - Get current URL and title

  • getHtml(full?) - Get page HTML

  • eval(script) - Execute JavaScript

Debugging:

  • getConsole(level?, clear?) - Get console messages

  • getErrors(clear?) - Get page errors

  • getNetwork(filter?, clear?) - Get network requests

  • getMetrics(includeResources?) - Get performance metrics

  • getA11y(selector?) - Get accessibility tree

Storage:

  • getCookies(name?) - Get cookies

  • setCookie(name, value, url?) - Set cookie

  • deleteCookie(name) / clearCookies() - Remove cookies

  • getStorage(type, key?) - Get localStorage/sessionStorage

  • setStorage(type, key, value) - Set storage item

  • deleteStorage(type, key) / clearStorage(type) - Remove storage

Interception:

  • addIntercept(pattern, action, response?) - Block or mock requests

  • clearIntercepts() - Remove all intercepts

Viewport:

  • setViewport(width, height) - Resize viewport

  • emulate(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

BSL-1.1

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
1wRelease cycle
13Releases (12mo)
Commit activity

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

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