Provides containerization support for running BrowserLoop in isolated environments with Docker, ensuring consistent execution across different systems.
Integrates with GitHub Actions for CI/CD pipeline execution, as indicated by the CI/CD Pipeline badge.
Enables capturing screenshots of GraphQL Playground interfaces during development for documentation and testing purposes.
Supports taking screenshots of Swagger API documentation tools during development for verification and testing.
BrowserLoop
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.
Features
- 📸 High-quality screenshot capture using Playwright
- 📝 Console log monitoring and collection from web pages
- 🌐 Support for localhost and remote URLs
- 🍪 Cookie-based authentication for protected pages
- 🐳 Docker containerization for consistent environments
- ⚡ PNG, JPEG, and WebP format support with configurable quality
- 🛡️ Secure non-root container execution
- 🤖 Full MCP protocol integration with AI development tools
- 🔧 Configurable viewport sizes and capture options
- 📱 Full page and element-specific screenshot capture
- ⚠️ Browser warning and error capture (Permissions-Policy, security warnings)
- ⚡ TypeScript with Biome for fast development
- 🧪 Comprehensive testing with Node.js built-in test runner
Quick Start
📦 NPX Usage (Recommended)
The easiest way to get started - no installation required!
That's it! The latest version of BrowserLoop will be downloaded and executed automatically. Perfect for MCP users who want zero-maintenance screenshots.
MCP Configuration
Add BrowserLoop to your MCP configuration file (e.g. ~/.cursor/mcp.json
):
💡 Using @latest
ensures you always get the newest features and bug fixes automatically.
🚀 One-Click Install for Cursor
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:
Browser Installation Requirements
🚨 Critical: BrowserLoop requires Chromium to be installed via Playwright before it can take screenshots.
First-Time Setup (All Users)
Install Chromium browser:
Verify installation:
🐳 Docker Alternative
For containerized environments:
💻 Development Installation
For contributors or advanced users who want to build from source:
MCP Configuration for Development
Replace /absolute/path/to/browserloop/
with your actual project path.
Basic Usage
Once configured, you can use natural language commands in your AI tool:
Screenshots
Console Log Reading
🔐 Cookie Authentication
BrowserLoop supports cookie-based authentication for capturing screenshots of login-protected pages during development:
📖 For cookie extraction methods and development workflows, see:
Common development use cases:
- Local development servers with authentication
- Staging environment testing
- API documentation tools (Swagger, GraphQL Playground)
- Custom web applications during development
- Admin panels and protected routes
Documentation
- 🔐 Cookie Authentication Guide - Complete guide for authenticated screenshots
- 📚 Complete API Reference - Detailed parameter documentation, examples, and response formats
Key API Parameters
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.
Configuration
BrowserLoop can be configured using environment variables:
Basic Configuration
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 |
Authentication Configuration
Variable | Default | Description |
---|---|---|
BROWSERLOOP_DEFAULT_COOKIES | - | Default cookies as file path or JSON string (see Cookie Authentication Guide) |
Console Log Configuration
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.
Log Sanitization
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):
Note: Sanitization preserves log structure while masking sensitive content, making logs safe for sharing and analysis.
Performance & Reliability
Variable | Default | Description |
---|---|---|
BROWSERLOOP_RETRY_COUNT | 3 | Number of retry attempts for failed operations |
BROWSERLOOP_RETRY_DELAY | 1000 | Delay between retries in milliseconds |
Logging & Debugging
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 |
Debug Logging
When BROWSERLOOP_DEBUG=true
, detailed logs are written to /tmp/browserloop.log
including:
- Cookie file loading and automatic refresh events
- File watching status and recreation events
- Screenshot operation details
- Configuration changes and errors
Monitor logs in real-time:
Note: Logs are written to a file (not console) to maintain compatibility with MCP's stdio protocol.
Example MCP Configuration with Default Cookies
Method 1: JSON File (Recommended)
Create a cookies file:
Reference in MCP config:
Method 2: JSON String (Legacy)
Console Log Configuration Examples
Troubleshooting
Common Issues
"Executable doesn't exist" Error
MCP Server Not Starting
- Test manually:
npx browserloop@latest --version
- Verify requirements:
- Node.js 20+:
node --version
- npm:
npm --version
- npx:
npx --version
- Node.js 20+:
- Check MCP config JSON syntax
Screenshots Show Login Pages
- Use cookie authentication (see Cookie Authentication Guide)
- Check cookie expiration and domain settings
Console Logs Are Empty
- Some production websites have no console output (this is normal)
- Test with development sites that have console activity
- Enable debug logging:
BROWSERLOOP_DEBUG=true
and check/tmp/browserloop.log
- Check log level filtering:
BROWSERLOOP_CONSOLE_LOG_LEVELS=log,info,warn,error,debug
Console Log Collection Timing
- Collection always waits exactly 3 seconds after page load
BROWSERLOOP_CONSOLE_TIMEOUT
controls page loading timeout, not log collection time- Fast sites will still take ~3-4 seconds total (load + 3s collection + processing)
Network/Connection Issues
- Test with external URLs first:
https://example.com
- For localhost: ensure your dev server is running
- Check firewall settings
Updating BrowserLoop
- NPX: Automatically uses latest version with
@latest
- no manual updates needed! - Check current version:
npx browserloop@latest --version
Quick Diagnosis
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.
License
BrowserLoop is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).
What this means:
- ✅ Free to use - Personal and commercial use allowed
- ✅ Free to modify - You can adapt the code to your needs
- ✅ Free to distribute - Share copies with others
- ✅ Patent protection - Contributors provide patent grants
- ⚠️ Copyleft - Derivative works must also be open source under AGPL-3.0
- ⚠️ Network clause - If you run a modified version on a server, you must provide source code to users
For Network Services
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:
- Offer the complete source code to all users of your service
- Include a prominent notice about how users can access the source
- Use a compatible license for the entire service
License Files
- LICENSE - Full license text
Commercial Use
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:
- Using BrowserLoop without modifications
- Contributing improvements back to the community
- Contacting the maintainers about potential alternative licensing arrangements
For questions about licensing, please open an issue or contact the maintainers.
This server cannot be installed
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
A Model Context Protocol (MCP) server for taking screenshots of web pages using Playwright, allowing AI agents to automatically capture and analyze screenshots for UI verification or other tasks.
Related MCP Servers
- AsecurityAlicenseAqualityA Model Context Protocol server that provides browser automation capabilities using Playwright. This server enables LLMs to interact with web pages, take screenshots, and execute JavaScript in a real browser environment.Last updated -139,4573,642TypeScriptMIT License
- -securityAlicense-qualityA Model Context Protocol server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages, take screenshots, and execute JavaScript in a real browser environment.Last updated -3PythonApache 2.0
- -securityAlicense-qualityA MCP server that provides browser automation tools, allowing users to navigate websites, take screenshots, click elements, fill forms, and execute JavaScript through Playwright.Last updated -PythonApache 2.0
- -securityFlicense-qualityA lightweight Model Context Protocol (MCP) server that enables your LLM to capture screenshots of any specified URL and return only the access URL for the captured image. This tool simplifies the process of generating and sharing webpage snapshots, making it perfect for integrating visual capture caLast updated -1Python