by mattiasw
Capture high‑quality screenshots and retrieve browser console logs from any web page using Playwright, exposed via an MCP server for AI agents.
Browser Loop provides an MCP‑compatible server that automates screenshot capture and console‑log extraction from web pages. Leveraging Playwright, it can render pages, handle authentication via cookies, and output images in WebP, PNG, or JPEG formats while also collecting logs of configurable severity.
npx playwright install chromium
.npx browserloop@latest --version
to verify installation.~/.cursor/mcp.json
):
{
"mcpServers": {
"browserloop": {
"command": "npx",
"args": ["-y", "browserloop@latest"],
"description": "Screenshot and console log capture server for web pages using Playwright"
}
}
}
Take a screenshot of https://example.com with width 1920 and height 1080
Read console logs from http://localhost:3000
Q: Do I need to install a browser manually?
A: Yes, install Chromium via Playwright (npx playwright install chromium
).
Q: Can I run Browser Loop inside Docker?
A: Absolutely. Use the provided Docker image or docker-compose
configuration.
Q: How are sensitive details handled in console logs?
A: By default, logs are sanitized (API keys, JWTs, emails, etc.). Set BROWSERLOOP_SANITIZE_LOGS=false
to disable.
Q: Where are debug logs written?
A: When BROWSERLOOP_DEBUG=true
, detailed logs are saved to /tmp/browserloop.log
.
Q: What Node version is required? A: Node.js 20+ is recommended.
Q: How do I provide cookies for authenticated screenshots?
A: Use the BROWSERLOOP_DEFAULT_COOKIES
env variable (file path or JSON string) or include cookies directly in the request payload.
A Model Context Protocol (MCP) server for taking screenshots and reading console logs from web pages using Playwright. This tool allows AI agents to automatically capture screenshots and monitor browser console output for debugging, testing, and development tasks.
NOTE: Almost all of the code in this repository has been auto-generated. That means you should probably not trust it too much. That being said, it does work and I'm using it myself.
NOTE: If the documentation is incorrect, please let me know or send a PR. If you too want to use a code generation tool to update the code for this project, PROJECT_CONTEXT.md
has been used as context to give a good overview of the various parts of the project. It might be a bit messy now but it's a good starting point and you're welcome to update it.
The easiest way to get started - no installation required!
# Install Chromium browser (one-time setup)
npx playwright install chromium
# Test that BrowserLoop works
npx browserloop@latest --version
That's it! The latest version of BrowserLoop will be downloaded and executed automatically. Perfect for MCP users who want zero-maintenance screenshots.
Add BrowserLoop to your MCP configuration file (e.g. ~/.cursor/mcp.json
):
{
"mcpServers": {
"browserloop": {
"command": "npx",
"args": ["-y", "browserloop@latest"],
"description": "Screenshot and console log capture server for web pages using Playwright"
}
}
}
💡 Using @latest
ensures you always get the newest features and bug fixes automatically.
Add BrowserLoop to Cursor with a single click using this deeplink:
This deeplink will automatically configure BrowserLoop in your Cursor MCP settings with the optimal configuration using npx and the latest version.
Prerequisites: Make sure you have Chromium installed first:
npx playwright install chromium
🚨 Critical: BrowserLoop requires Chromium to be installed via Playwright before it can take screenshots.
Install Chromium browser:
npx playwright install chromium
Verify installation:
# Check Playwright installation
npx playwright --version
# Test BrowserLoop (if using NPX)
npx browserloop@latest --version
For containerized environments:
# Pull and run with Docker
docker run --rm --network host browserloop
# Or use docker-compose for development
git clone <repository-url>
cd browserloop
docker-compose -f docker/docker-compose.yml up
For contributors or advanced users who want to build from source:
# Clone the repository
git clone <repository-url>
cd browserloop
# Install dependencies
npm install
# Install Playwright browsers (required for screenshots)
npx playwright install chromium
# OR use the convenient script:
npm run install-browsers
# Build the project
npm run build
{
"mcpServers": {
"browserloop": {
"command": "node",
"args": [
"/absolute/path/to/browserloop/dist/src/index.js"
],
"description": "Screenshot and console log capture server for web pages using Playwright"
}
}
}
Replace /absolute/path/to/browserloop/
with your actual project path.
Once configured, you can use natural language commands in your AI tool:
Take a screenshot of https://example.com
Take a screenshot of https://example.com with width 1920 and height 1080
Take a screenshot of https://example.com in JPEG format with 95% quality
Take a full page screenshot of https://example.com
Take a screenshot of http://localhost:3000 to verify the UI changes
Read console logs from https://example.com
Check for console errors on https://example.com
Monitor console warnings from http://localhost:3000
Read only error and warning logs from https://example.com
Capture console output from https://example.com for debugging
BrowserLoop supports cookie-based authentication for capturing screenshots of login-protected pages during development:
Take a screenshot of http://localhost:3000/admin/dashboard using these cookies: [{"name":"connect.sid","value":"s:session-id.signature","domain":"localhost"}]
📖 For cookie extraction methods and development workflows, see:
Common development use cases:
Parameter | Type | Description | Default |
---|---|---|---|
url |
string | Target URL to capture (required) | - |
width |
number | Viewport width (200-4000) | 1280 |
height |
number | Viewport height (200-4000) | 720 |
format |
string | Image format (webp, png, jpeg) | webp |
quality |
number | Image quality (1-100) | 80 |
fullPage |
boolean | Capture full page | false |
selector |
string | CSS selector for element capture | - |
📖 See docs/API.md for complete parameter details, usage examples, and configuration options.
BrowserLoop can be configured using environment variables:
Variable | Default | Description |
---|---|---|
BROWSERLOOP_DEFAULT_WIDTH |
1280 |
Default viewport width (200-4000) |
BROWSERLOOP_DEFAULT_HEIGHT |
720 |
Default viewport height (200-4000) |
BROWSERLOOP_DEFAULT_FORMAT |
webp |
Default image format (webp , png , jpeg ) |
BROWSERLOOP_DEFAULT_QUALITY |
80 |
Default image quality (0-100) |
BROWSERLOOP_DEFAULT_TIMEOUT |
30000 |
Default timeout in milliseconds |
BROWSERLOOP_USER_AGENT |
- | Custom user agent string |
Variable | Default | Description |
---|---|---|
BROWSERLOOP_DEFAULT_COOKIES |
- | Default cookies as file path or JSON string (see Cookie Authentication Guide) |
Variable | Default | Description |
---|---|---|
BROWSERLOOP_CONSOLE_LOG_LEVELS |
log,info,warn,error,debug |
Comma-separated list of log levels to capture |
BROWSERLOOP_CONSOLE_TIMEOUT |
30000 |
Page navigation timeout in milliseconds (not log collection time) |
BROWSERLOOP_SANITIZE_LOGS |
true |
Enable/disable sensitive data sanitization in logs |
BROWSERLOOP_CONSOLE_WAIT_NETWORK_IDLE |
true |
Wait for network idle before finishing collection |
BROWSERLOOP_MAX_LOG_SIZE |
1048576 |
Maximum total log size in bytes (1MB) |
Note: Console log collection always waits exactly 3 seconds after page load to capture console messages. The timeout setting only affects how long the page has to initially load.
Console log sanitization is enabled by default (BROWSERLOOP_SANITIZE_LOGS=true
) to protect sensitive information. When enabled, the following patterns are automatically masked:
Pattern Type | Example Input | Masked Output |
---|---|---|
API Keys | sk_live_1234567890abcdef... |
[API_KEY_MASKED] |
Email Addresses | user@example.com |
[EMAIL_MASKED] |
JWT Tokens | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... |
[JWT_TOKEN_MASKED] |
Auth Headers | Bearer abc123token... |
[AUTH_HEADER_MASKED] |
URLs with Auth | https://api.com/data?token=secret123 |
[URL_WITH_AUTH_MASKED] |
Secret Variables | password: mySecretPass |
password: [VALUE_MASKED] |
To disable sanitization (for debugging):
BROWSERLOOP_SANITIZE_LOGS=false
Note: Sanitization preserves log structure while masking sensitive content, making logs safe for sharing and analysis.
Variable | Default | Description |
---|---|---|
BROWSERLOOP_RETRY_COUNT |
3 |
Number of retry attempts for failed operations |
BROWSERLOOP_RETRY_DELAY |
1000 |
Delay between retries in milliseconds |
Variable | Default | Description |
---|---|---|
BROWSERLOOP_DEBUG |
false |
Enable debug logging to /tmp/browserloop.log |
BROWSERLOOP_ENABLE_METRICS |
true |
Enable error metrics collection |
BROWSERLOOP_DISABLE_FILE_WATCHING |
false |
Disable automatic cookie file monitoring |
When BROWSERLOOP_DEBUG=true
, detailed logs are written to /tmp/browserloop.log
including:
Monitor logs in real-time:
tail -f /tmp/browserloop.log
Note: Logs are written to a file (not console) to maintain compatibility with MCP's stdio protocol.
Create a cookies file:
// ~/.config/browserloop/cookies.json
[
{
"name": "connect.sid",
"value": "s:your-dev-session.signature",
"domain": "localhost"
}
]
Reference in MCP config:
{
"mcpServers": {
"browserloop": {
"command": "node",
"args": ["dist/src/mcp-server.js"],
"env": {
"BROWSERLOOP_DEFAULT_COOKIES": "/home/username/.config/browserloop/cookies.json",
"BROWSERLOOP_DEFAULT_FORMAT": "webp",
"BROWSERLOOP_DEFAULT_QUALITY": "85"
}
}
}
}
{
"mcpServers": {
"browserloop": {
"command": "node",
"args": ["dist/src/mcp-server.js"],
"env": {
"BROWSERLOOP_DEFAULT_COOKIES": "[{\"name\":\"session_id\",\"value\":\"your_session_value\",\"domain\":\"example.com\"},{\"name\":\"auth_token\",\"value\":\"your_auth_token\"}]",
"BROWSERLOOP_DEFAULT_FORMAT": "webp",
"BROWSERLOOP_DEFAULT_QUALITY": "85"
}
}
}
}
# Only capture warnings and errors
BROWSERLOOP_CONSOLE_LOG_LEVELS="warn,error"
# Debug mode with all logs, no sanitization
BROWSERLOOP_DEBUG="true"
BROWSERLOOP_SANITIZE_LOGS="false"
BROWSERLOOP_CONSOLE_LOG_LEVELS="log,info,warn,error,debug"
"Executable doesn't exist" Error
# Install Chromium browser (most common fix)
npx playwright install chromium
MCP Server Not Starting
npx browserloop@latest --version
node --version
npm --version
npx --version
Screenshots Show Login Pages
Console Logs Are Empty
BROWSERLOOP_DEBUG=true
and check /tmp/browserloop.log
BROWSERLOOP_CONSOLE_LOG_LEVELS=log,info,warn,error,debug
Console Log Collection Timing
BROWSERLOOP_CONSOLE_TIMEOUT
controls page loading timeout, not log collection timeNetwork/Connection Issues
https://example.com
Updating BrowserLoop
@latest
- no manual updates needed!npx browserloop@latest --version
# Test complete setup
node --version && npm --version
npx playwright --version
# Test BrowserLoop
npx browserloop@latest --version
Enable debug logging:
Set BROWSERLOOP_DEBUG=true
in your MCP config and monitor /tmp/browserloop.log
📖 See docs/API.md#error-handling for detailed troubleshooting.
BrowserLoop is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).
Important: If you modify BrowserLoop and run it as a network service (e.g., web app, API server, or cloud service), the AGPL requires you to:
Organizations can use BrowserLoop under the AGPL for commercial purposes, but must comply with the copyleft requirements. If you need to keep modifications private, consider:
For questions about licensing, please open an issue or contact the maintainers.
Please log in to share your review and rating for this MCP.
{ "mcpServers": { "browserloop": { "command": "npx", "args": [ "-y", "browserloop@latest" ], "env": {} } } }
Explore related MCPs that share similar capabilities and solve comparable challenges
by zed-industries
A high‑performance, multiplayer code editor designed for speed and collaboration.
by modelcontextprotocol
Model Context Protocol Servers
by modelcontextprotocol
A Model Context Protocol server for Git repository interaction and automation.
by modelcontextprotocol
A Model Context Protocol server that provides time and timezone conversion capabilities.
by cline
An autonomous coding assistant that can create and edit files, execute terminal commands, and interact with a browser directly from your IDE, operating step‑by‑step with explicit user permission.
by continuedev
Enables faster shipping of code by integrating continuous AI agents across IDEs, terminals, and CI pipelines, offering chat, edit, autocomplete, and customizable agent workflows.
by upstash
Provides up-to-date, version‑specific library documentation and code examples directly inside LLM prompts, eliminating outdated information and hallucinated APIs.
by github
Connects AI tools directly to GitHub, enabling natural‑language interactions for repository browsing, issue and pull‑request management, CI/CD monitoring, code‑security analysis, and team collaboration.
by daytonaio
Provides a secure, elastic infrastructure that creates isolated sandboxes for running AI‑generated code with sub‑90 ms startup, unlimited persistence, and OCI/Docker compatibility.