ワンクリックで
browser-mcp-control
Control Chrome browser tabs via MCP for AI-assisted web automation using the Browser MCP server and extension
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Control Chrome browser tabs via MCP for AI-assisted web automation using the Browser MCP server and extension
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | browser-mcp-control |
| description | Control Chrome browser tabs via MCP for AI-assisted web automation using the Browser MCP server and extension |
| triggers | ["navigate to a website using browser mcp","take a screenshot of the current page","click an element in the browser","get page content snapshot","interact with browser extension","automate browser actions through mcp","fill out web form using browser","extract data from web page"] |
Skill by ara.so — MCP Skills collection.
Browser MCP is a Model Context Protocol server that bridges AI assistants to your local Chrome browser through a Chrome extension. Unlike headless automation tools, it operates on your existing browser profile, preserving login sessions and cookies, reducing CAPTCHA triggers and bot detection.
The architecture uses:
git clone https://github.com/BrowserMCP/mcp.git
cd mcp
npm install
npm run build
Add to your MCP settings (Cursor, Claude Desktop, VS Code, etc.):
Cursor/Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"browsermcp": {
"command": "node",
"args": ["/absolute/path/to/mcp/dist/index.js"]
}
}
}
VS Code (.vscode/settings.json):
{
"mcp.servers": {
"browsermcp": {
"command": "node",
"args": ["/absolute/path/to/mcp/dist/index.js"]
}
}
}
Install the Browser MCP extension from browsermcp.io or the Chrome Web Store.
Create .env in the project root:
# WebSocket port for Chrome extension
WS_PORT=9009
# Logging
LOG_LEVEL=info
# Redis (optional session persistence)
REDIS_ENABLED=false
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
REDIS_KEY_PREFIX=browsermcp:
REDIS_SESSION_TTL_SECONDS=86400
Navigate to a URL:
// Tool call from AI
{
"tool": "browser_navigate",
"arguments": {
"url": "https://github.com/trending",
"waitUntil": "networkidle"
}
}
Parameters:
url (required): Target URLwaitUntil (optional): load, domcontentloaded, networkidle{
"tool": "browser_go_back"
}
{
"tool": "browser_go_forward"
}
Wait for page state or timeout:
{
"tool": "browser_wait",
"arguments": {
"seconds": 3
}
}
Click an element by selector or coordinates:
// Click by CSS selector
{
"tool": "browser_click",
"arguments": {
"selector": "button.submit-btn"
}
}
// Click by coordinates
{
"tool": "browser_click",
"arguments": {
"x": 250,
"y": 400
}
}
Parameters:
selector (optional): CSS selectorx, y (optional): Pixel coordinatesbutton (optional): left, right, middleclickCount (optional): Single/double/triple clickType text into an input:
{
"tool": "browser_type",
"arguments": {
"selector": "input[name='email']",
"text": "user@example.com",
"pressEnter": false
}
}
Parameters:
selector (required): CSS selector for inputtext (required): Text to typepressEnter (optional): Submit after typingSelect dropdown option:
{
"tool": "browser_select_option",
"arguments": {
"selector": "select#country",
"value": "USA"
}
}
Hover over element:
{
"tool": "browser_hover",
"arguments": {
"selector": ".tooltip-trigger"
}
}
Press keyboard keys:
{
"tool": "browser_press_key",
"arguments": {
"key": "Enter"
}
}
Common keys: Enter, Escape, Tab, Backspace, ArrowDown, ArrowUp
Get ARIA accessibility tree as YAML:
{
"tool": "browser_snapshot"
}
Returns structured page content for AI analysis:
- role: navigation
name: Main navigation
- role: link
name: Home
- role: link
name: About
- role: main
- role: heading
name: Welcome
level: 1
- role: article
- role: heading
name: Getting Started
level: 2
Capture page screenshot:
{
"tool": "browser_screenshot",
"arguments": {
"quality": 90,
"fullPage": false
}
}
Parameters:
quality (optional): JPEG quality 0-100fullPage (optional): Capture entire scrollable pageReturns base64-encoded image.
Retrieve browser console messages:
{
"tool": "browser_get_console_logs"
}
Returns array of log entries with type, message, timestamp.
// 1. Navigate to login page
await useTool("browser_navigate", {
url: "https://app.example.com/login"
});
// 2. Fill credentials
await useTool("browser_type", {
selector: "input[name='username']",
text: process.env.USERNAME
});
await useTool("browser_type", {
selector: "input[name='password']",
text: process.env.PASSWORD
});
// 3. Submit
await useTool("browser_click", {
selector: "button[type='submit']"
});
// 4. Wait for redirect
await useTool("browser_wait", {
seconds: 2
});
// Navigate to form
await useTool("browser_navigate", {
url: "https://example.com/contact"
});
// Fill text fields
await useTool("browser_type", {
selector: "#name",
text: "John Doe"
});
await useTool("browser_type", {
selector: "#email",
text: "john@example.com"
});
// Select dropdown
await useTool("browser_select_option", {
selector: "#topic",
value: "sales"
});
// Fill textarea
await useTool("browser_type", {
selector: "textarea#message",
text: "I'd like to discuss..."
});
// Submit
await useTool("browser_click", {
selector: "button.submit"
});
// Navigate to target page
await useTool("browser_navigate", {
url: "https://news.ycombinator.com"
});
// Get structured content
const snapshot = await useTool("browser_snapshot");
// Parse YAML snapshot to extract:
// - Headlines (role: link)
// - Scores (role: text)
// - Comment counts
// Or take screenshot for visual verification
const screenshot = await useTool("browser_screenshot", {
fullPage: true
});
// 1. Search
await useTool("browser_navigate", {
url: "https://github.com/search"
});
await useTool("browser_type", {
selector: "input[name='q']",
text: "mcp server",
pressEnter: true
});
await useTool("browser_wait", { seconds: 2 });
// 2. Filter results
await useTool("browser_click", {
selector: "button[data-filter='repositories']"
});
await useTool("browser_wait", { seconds: 1 });
// 3. Extract data
const content = await useTool("browser_snapshot");
// 4. Navigate to first result
await useTool("browser_click", {
selector: ".repo-list-item:first-child a"
});
// 5. Capture repo details
const repoSnapshot = await useTool("browser_snapshot");
try {
await useTool("browser_navigate", {
url: "https://example.com"
});
} catch (error) {
if (error.message.includes("No connection")) {
console.error("Chrome extension not connected. Open extension popup and click Connect.");
}
}
// Increase wait time for slow pages
await useTool("browser_navigate", {
url: "https://slow-site.com",
waitUntil: "networkidle"
});
await useTool("browser_wait", {
seconds: 5
});
// Wait before interaction
await useTool("browser_wait", { seconds: 2 });
await useTool("browser_click", {
selector: ".dynamic-content button"
});
// Or use snapshot to verify element exists
const snapshot = await useTool("browser_snapshot");
// Parse to check for expected elements
npm run dev
npm run typecheck
npm test
npm run test:watch
Debug tools interactively:
npm run build
npm run inspector
LOG_LEVEL=debug node dist/index.js
Symptom: Tools fail with "No connection to browser extension"
Solutions:
chrome://extensionsSymptom: Error: listen EADDRINUSE: address already in use :::9009
Solutions:
# Find process using port 9009
lsof -i :9009
kill -9 <PID>
# Or use different port
WS_PORT=9010 node dist/index.js
Update MCP config with new port.
Symptom: Operations timeout after 30 seconds
Solutions:
browser_wait before interactionsSymptom: AI client doesn't show browser tools
Solutions:
npm run build completed successfullySymptom: Redis errors in logs (when enabled)
Solutions:
# Verify Redis running
redis-cli ping
# Expected: PONG
# Or disable Redis
REDIS_ENABLED=false
Server continues without persistence if Redis unavailable.
Policy-centered context budget layer that turns sprawling codebases into compact, high-signal context for AI coding agents using symbol graphs and precision tools
Control and automate Slay the Spire 2 gameplay through REST API or MCP server for AI agents
MCP server for browser automation using natural language through kogiQA, enabling AI agents to interact with web pages without selectors
Professional browser automation for Claude Code, Codex, and MCP clients powered by DrissionPage MCP Server
MCP server for Yuque (语雀) knowledge base - search, create, and manage documents through AI assistants
MCP server connecting AI assistants to Shopify Admin GraphQL API for products, orders, customers, inventory, and metafields management