Skip to main content
Glama
KvFxKaido

Browser Instrumentation MCP Server

by KvFxKaido

Browser Instrumentation MCP Server

Tests

A Model Context Protocol (MCP) server for browser instrumentation using Playwright. Prioritizes observation over action.

This server does not attempt to make browser automation reliable. Browsers are non-deterministic systems. This server prioritizes visibility over convenience.

Philosophy

This server is designed around one principle: observation first, action second.

  • INSPECT tools (7 tools) - Safe, encouraged, no side effects

  • ACT tools (3 tools) - Dangerous, require escalation and justification, logged

Actions don't return success/failure. They return what was observed with a confidence level.

When NOT to Use This

  • Form filling

  • Login automation

  • Payment flows

  • Anything you wouldn't trust a flaky intern to do

  • Any scenario requiring reliable, repeatable automation

If you need reliable automation, use Playwright directly with proper test infrastructure.

Installation

Prerequisites

  • Python 3.11 or later

  • Playwright browsers installed

Install from source

git clone https://github.com/yourusername/browser-instrumentation-mcp.git cd browser-instrumentation-mcp pip install -e . playwright install chromium

Configuration

Claude Desktop

Add to your Claude Desktop configuration:

Windows: %APPDATA%\Claude\claude_desktop_config.json macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{ "mcpServers": { "browser": { "command": "python", "args": ["-m", "browser_instrumentation_mcp.server"] } } }

Claude Code

claude mcp add browser -- python -m browser_instrumentation_mcp.server

Available Tools

Session Management

Tool

Description

browser_session_create

Create a new session (observation-only mode)

browser_session_list

List sessions with status and event count

browser_session_destroy

Clean up session

browser_session_escalate

Enable actions (requires reason)

INSPECT Tools (Safe)

Tool

Description

browser_inspect_navigate

Navigate to URL

browser_inspect_screenshot

Capture page screenshot

browser_inspect_dom

Get HTML content

browser_inspect_text

Get text content (no HTML)

browser_inspect_console

Get console log messages

browser_inspect_network

Get network requests

browser_inspect_events

Get session event log

ACT Tools (Require Escalation)

Tool

Description

browser_act_click

Click element (requires reason)

browser_act_type

Type into input (requires reason)

browser_act_execute

Execute JavaScript (requires reason)

Usage Examples

Observation workflow (typical)

1. browser_session_create(name="research") 2. browser_inspect_navigate(session="research", url="example.com") 3. browser_inspect_screenshot(session="research") 4. browser_inspect_text(session="research") 5. browser_inspect_events(session="research") # audit what happened 6. browser_session_destroy(name="research")

Action workflow (when observation isn't enough)

1. browser_session_create(name="test") 2. browser_inspect_navigate(session="test", url="example.com") 3. browser_session_escalate(name="test", reason="need to test form submission") 4. browser_act_click(session="test", selector="button", reason="testing submit button") # Returns observed changes, NOT success/failure 5. browser_inspect_events(session="test") # see what was logged 6. browser_session_destroy(name="test")

Action result format

ACT tools return observed changes, not success/failure:

Action: click Confidence: medium Observed Changes: URL changed: true Network requests: 3 Console messages: 0 New URL: https://example.com/submitted State: Before: https://example.com/form After: https://example.com/submitted

Event Log

Every session maintains an append-only event log. Use browser_inspect_events to audit what happened:

[ {"event_type": "session_created", "timestamp": "...", "details": {...}}, {"event_type": "navigate", "timestamp": "...", "details": {"url": "..."}}, {"event_type": "session_escalated", "reason": "testing form", ...}, {"event_type": "click", "reason": "submit button", "details": {...}} ]

Architecture

browser_instrumentation_mcp/ ├── server.py # FastMCP server with INSPECT/ACT tools ├── browser_manager.py # Session lifecycle management ├── models.py # Pydantic models (EventLog, ActionResult, etc.) ├── backends/ │ ├── base.py # Abstract backend interface │ └── playwright_backend.py # Playwright implementation

Development Setup

git clone https://github.com/yourusername/browser-instrumentation-mcp.git cd browser-instrumentation-mcp pip install -e .[dev] playwright install chromium # Run directly python -m browser_instrumentation_mcp.server

Testing

# Unit tests only (fast, no browser required) pytest -m "not integration" # All tests (includes real browser and CDP integration tests) pytest

Integration tests are marked with @pytest.mark.integration and may require:

  • Playwright browsers installed (playwright install chromium)

  • Network access for real navigation

  • A running CDP-enabled browser for CDP tests

To run CDP integration tests, start a Chromium instance with a remote debugging port and set BIMCP_CDP_URL, for example:

set BIMCP_CDP_URL=http://localhost:9222 pytest -m integration -k cdp

License

MIT

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/KvFxKaido/browser-instrumentation-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server