browser-mcp
Integrates with arXiv to browse and summarize research papers from cs.AI, cs.SE, cs.LG, cs.CV, and cs.ML categories.
Provides bookmark management for Brave browser, including listing, adding, editing, deleting, and searching bookmarks.
Offers comprehensive bookmark management for Firefox, including CRUD, full-text search, deduplication, tag management, age analysis, broken link detection, and JSON/CSV export.
Integrates with GitHub to browse trending repositories and issues, enabling AI agents to review repository pages and summarize content.
Integrates with Lobsters to browse and summarize trending tech news articles as part of morning briefing routines.
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., "@browser-mcplist my Chrome bookmarks"
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.
browser-mcp
Browser automation + bookmark management — over MCP. A unified MCP server for controlling Chrome, Firefox, Edge, and Brave: browse pages, click elements, take screenshots, and manage bookmarks across all major browsers. Ships with a React webapp dashboard.
Features
Browser Automation (Playwright + CDP + CLI)
Tool | Description |
| Navigate and extract visible text |
| Click elements by CSS selector |
| Extract text from any element |
| Type into input fields |
| Press keyboard keys |
| Viewport PNG screenshot |
| Headless CLI mode (no Playwright overhead) |
| Detect installed browsers and profiles |
Bookmark Management (4 Browsers)
17 operations across Chrome, Firefox, Edge, and Brave:
CRUD: list, get, add, edit, delete bookmarks
Search: full-text search by title/URL
Cross-browser sync: migrate bookmarks between any two browsers
Deduplication: find duplicate URLs (Firefox)
Tag management: list, find similar, merge, clean up tags (Firefox)
Age analysis: find old or forgotten bookmarks, get stats (Firefox)
Link checking: detect broken links (Firefox)
Export: bookmarks to JSON/CSV (Firefox)
Bookmarks are read/written directly to the browser's native storage:
Firefox: SQLite (
places.sqlite) with brute-force unlock for read-while-runningChrome/Edge/Brave: Chromium
BookmarksJSON file
Webapp Dashboard (React + Vite)
A full React SPA on port 10781 with:
Dashboard: health status, installed browser detection
Bookmarks panel: list bookmarks by browser with live search
Related MCP server: browser-mcp-server
Quick Start
git clone https://github.com/The-Syntax-Slayer/browser-mcp
cd browser-mcp
justOpens an interactive recipe dashboard. Otherwise:
# Install dependencies
uv sync
# Install Playwright browsers
playwright install chromium
# Start backend (port 10780)
uv run browser-mcp --serve
# Start frontend (port 10781) — separate terminal
cd webapp && npm install && npm run devFor more details: INSTALL.md
Tools Reference
Browser Automation
# Navigate and extract
await browse_page("https://example.com")
# → {"title": "...", "text": "...", "url": "...", "status": 200}
# Click and interact
await click_element("button#submit")
await fill_input("#search", "hello world")
await press_key("Enter")
# Screenshot
await screenshot()
# → {"screenshot_b64": "iVBORw0KGgo..."}
# CLI mode (no Playwright session needed)
await browse_url_cli("https://example.com", browser="chrome")
# Detect installed browsers
await list_browsers()
# → {"browsers": {"chrome": {"installed": true, "path": "..."}, ...}}Bookmark Management
# List bookmarks from Chrome
await browser_bookmarks(operation="list_bookmarks", browser="chrome")
# List from Firefox
await browser_bookmarks(operation="list_bookmarks", browser="firefox")
# Add a bookmark
await browser_bookmarks(
operation="add_bookmark",
browser="chrome",
url="https://example.com",
title="Example",
)
# Search
await browser_bookmarks(operation="search", browser="firefox", search_query="python")
# Find duplicates (Firefox only)
await browser_bookmarks(operation="find_duplicates", browser="firefox")
# Sync bookmarks from Firefox to Chrome
await browser_bookmarks(
operation="sync_bookmarks",
browser="firefox",
target_browser="chrome",
)
# Export Firefox bookmarks
await browser_bookmarks(operation="export_bookmarks", browser="firefox", export_format="json")
# Find forgotten bookmarks (not visited in 1 year)
await browser_bookmarks(
operation="find_forgotten_bookmarks",
browser="firefox",
age_days=365,
)Workflow Tools
Tool | Description |
| Configurable daily page routine with 4 built-in profiles |
| Browse a list of links (from aiwatcher/arxiv/gitops) with summaries |
| Multi-step agentic browsing from natural language task |
Morning briefing profiles (defined in conf/morning_pages.json):
Profile | Pages | Integrations |
| HN + GitHub Trending | AIWatcher, GitHub repos |
| HN + Python Trending + Lobsters | AIWatcher, arXiv cs.AI/cs.SE |
| arXiv cs.AI + r/MachineLearning | AIWatcher, arXiv cs.AI/LG/CV/ML |
| Sandra's repos | AIWatcher, 6 fleet repos |
Chaining with fleet MCP servers:
# 1. Get top items from aiwatcher-mcp
items = await aiwatcher.get_top_items(hours=24, limit=5)
# 2. Browse them
await browse_items(items_json=items, task="What's interesting?")
# 1. Get GitHub issues
issues = await gitops.issue_list(owner="The-Syntax-Slayer", repo="browser-mcp")
# 2. Browse the issue pages
await browse_items(items_json=issues)Full Operation List
Operation | Chrome | Firefox | Edge | Brave |
list_bookmarks | ✓ | ✓ | ✓ | ✓ |
get_bookmark | ✓ | ✓ | ✓ | ✓ |
add_bookmark | ✓ | ✓ | ✓ | ✓ |
edit_bookmark | ✓ | ✓ | ✓ | ✓ |
delete_bookmark | ✓ | ✓ | ✓ | ✓ |
search / search_bookmarks | ✓ | ✓ | ✓ | ✓ |
sync_bookmarks | ✓ | ✓ | ✓ | ✓ |
find_duplicates | — | ✓ | — | — |
export_bookmarks | — | ✓ | — | — |
list_tags | — | ✓ | — | — |
find_similar_tags | — | ✓ | — | — |
merge_tags | — | ✓ | — | — |
clean_up_tags | — | ✓ | — | — |
find_old_bookmarks | — | ✓ | — | — |
find_forgotten_bookmarks | — | ✓ | — | — |
get_bookmark_stats | — | ✓ | — | — |
find_broken_links | — | ✓ | — | — |
refresh_bookmarks | — | ✓ | — | — |
Architecture
Browser Control Layers
Layer | Chrome/Chromium | Firefox |
Bookmark read/write | Direct JSON file | Direct SQLite |
Headless automation | Playwright (primary) + CDP WebSocket | Playwright (primary) + geckodriver |
CLI quick ops |
|
|
Ports
Port | Service |
10780 | Backend (FastAPI + MCP HTTP) |
10781 | Frontend (Vite React dev server) |
Project Structure
browser-mcp/
├── src/browser_mcp/
│ ├── server.py # MCP tools + browser lifecycle
│ ├── app.py # FastAPI app with /health + MCP mount
│ ├── config.py # Environment-based settings
│ ├── __main__.py # CLI entry point (stdio / HTTP)
│ └── bookmarks/ # Bookmark management backend
│ ├── portmanteau.py # Main browser_bookmarks MCP tool
│ ├── firefox_bookmarks.py # Firefox SQLite backend
│ ├── chromium_common.py # Chrome/Edge/Brave JSON backend
│ ├── sync.py # Cross-browser sync
│ └── firefox/ # 13 submodules (db, status, utils, etc.)
├── webapp/ # React + Vite dashboard (port 10781)
│ ├── src/
│ │ ├── pages/Dashboard.tsx
│ │ └── pages/Bookmarks.tsx
│ └── package.json
└── justfileConfig
Env Var | Default | Description |
| 127.0.0.1 | HTTP bind address |
| 10780 | HTTP backend port |
| 10781 | Vite frontend port |
| true | Run Playwright headless |
| — | Set to |
Running
# stdio mode (Claude Desktop, MCP clients)
uv run browser-mcp --stdio
# HTTP mode (web dashboard + API)
uv run browser-mcp --serve
# Debug mode
uv run browser-mcp --serve --debugChangelog
See CHANGELOG.md.
License
MIT
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
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/The-Syntax-Slayer/browser-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server