# Playwright MCP Server - NixOS Flake A comprehensive NixOS Flake development environment for the Playwright MCP (Model Context Protocol) server with full Chrome and Firefox support, including persistent browser profiles. ## Features - ✅ **Complete Playwright MCP Server Setup**: Based on Microsoft's official implementation - ✅ **Multi-Browser Support**: Both Chrome/Chromium and Firefox browsers included - ✅ **Profile Persistence**: Maintains browser profiles between sessions - ✅ **Desktop Profile Integration**: Can import existing Chrome/Firefox profiles from your desktop - ✅ **NixOS Integration**: Properly configured for NixOS with all dependencies - ✅ **Development Environment**: Ready-to-use development shell with all tools - ✅ **AI Agent Compatible**: Can be added as a URL to development environments for AI agents ## Quick Start ### Using with direnv (Recommended) 1. Clone this repository or copy the `flake.nix` to your project 2. Enable direnv: `direnv allow` 3. The environment will automatically activate when you enter the directory ### Manual activation ```bash # Enter the development shell nix develop # Or run the MCP server directly nix run ``` ## Usage ### Running the MCP Server ```bash # Basic usage (headed mode, persistent profiles) playwright-mcp-wrapped # Headless mode playwright-mcp-wrapped --headless # Specify browser playwright-mcp-wrapped --browser firefox # With custom configuration playwright-mcp-wrapped --config /path/to/config.json # Server mode (for remote connections) playwright-mcp-wrapped --port 8931 ``` ### Setting Up Browser Profiles To use your existing desktop browser profiles: ```bash # Run the profile setup script nix run .#setup-profiles ``` This will copy your existing Chrome/Chromium and Firefox profiles to the Playwright MCP directories: - Chrome: `~/.local/share/playwright-mcp/chrome-profile` - Firefox: `~/.local/share/playwright-mcp/firefox-profile` ### Configuration The flake includes a default configuration file that can be customized. Key features: - **Browser Support**: Both Chromium and Firefox - **Profile Persistence**: Profiles are saved between sessions - **Headed Mode**: Browser windows are visible by default - **Full Capabilities**: All MCP capabilities enabled (tabs, PDF, history, wait, files, install, testing) ### Using in AI Development Environments Add this flake as a development environment URL: ```json { "devEnvironments": { "playwright-mcp": { "url": "github:benjaminkitt/playwright-mcp-nix" } } } ``` Or for Claude Desktop MCP configuration: ```json { "mcpServers": { "playwright": { "command": "nix", "args": ["run", "github:benjaminkitt/playwright-mcp-nix"] } } } ``` ## Architecture This flake provides: 1. **Custom Playwright MCP Package**: Wraps Microsoft's Playwright MCP server with NixOS-specific configurations 2. **Browser Integration**: Properly configured Chromium and Firefox with Playwright support 3. **Profile Management**: Scripts to handle browser profile persistence and desktop integration 4. **Development Environment**: Complete shell with all dependencies and helpful environment variables ## Browser Profile Locations ### Default Locations - **Chrome/Chromium Profile**: `~/.local/share/playwright-mcp/chrome-profile` - **Firefox Profile**: `~/.local/share/playwright-mcp/firefox-profile` ### Desktop Profile Sources The setup script will look for existing profiles in: - **Chrome**: `~/.config/google-chrome` - **Chromium**: `~/.config/chromium` - **Firefox**: `~/.mozilla/firefox` (default profile) ## Configuration Options The MCP server supports extensive configuration through command-line arguments: ```bash --allowed-origins # Semicolon-separated allowed origins --blocked-origins # Semicolon-separated blocked origins --browser # Browser to use: chrome, firefox, webkit, msedge --headless # Run in headless mode --user-data-dir # Custom profile directory --viewport-size # Browser viewport size (e.g., "1920,1080") --device # Device to emulate (e.g., "iPhone 15") --proxy-server # Proxy server configuration --storage-state # Path to storage state file --isolated # Use isolated (non-persistent) profiles --vision # Use screenshot mode instead of accessibility snapshots --config # Path to JSON configuration file ``` ## Troubleshooting ### Browser Not Found If you get browser not found errors: ```bash nix run .#playwright-mcp -- --browser chromium # or export PLAYWRIGHT_BROWSERS_PATH=$(nix-build '' -A playwright-driver.browsers --no-out-link) ``` ### Profile Issues If browser profiles aren't working: ```bash # Reset profiles rm -rf ~/.local/share/playwright-mcp/ nix run .#setup-profiles ``` ### Permission Issues Ensure the profile directories are writable: ```bash chmod -R u+w ~/.local/share/playwright-mcp/ ``` ## Contributing This flake is designed to be easily extensible. Key areas for contribution: 1. **Browser Support**: Additional browser configurations 2. **Profile Management**: Enhanced profile import/export capabilities 3. **Configuration**: More sophisticated configuration management 4. **Integration**: Better integration with various AI development environments ## License This project follows the same license as the underlying Playwright MCP server (Apache 2.0). ## Related Projects - [Microsoft Playwright MCP](https://github.com/microsoft/playwright-mcp) - The upstream MCP server - [natsukium/mcp-servers-nix](https://github.com/natsukium/mcp-servers-nix) - Nix framework for MCP servers - [akirak/nix-playwright-mcp](https://github.com/akirak/nix-playwright-mcp) - Alternative Nix wrapper for Playwright MCP