An MCP (Model Context Protocol) server that lets you control a full Chromium browser running inside a Daytona cloud sandbox. Use it with Claude Code, Claude Desktop, or any MCP-compatible client to browse the web, take screenshots, fill forms, and more.
https://github.com/user-attachments/assets/23b13e1f-4ed3-4204-ad0d-b2fdb1f77d0d
pipx install git+https://github.com/jamesmurdza/playwright-daytona-mcp-server.git
Add to your MCP settings:
{
"mcpServers": {
"daytona-playwright": {
"command": "daytona-playwright-mcp",
"env": {
"DAYTONA_API_KEY": "your-api-key-here"
}
}
}
}
Once configured, you can ask Claude to browse the web:
"Start a browser and go to https://news.ycombinator.com"
"Take a screenshot of the page"
"Click on the first article link"
"Search for 'AI news' on Google and show me the results"
"Fill out the contact form on example.com with test data"
browser_start to create a Daytona sandbox with Chromiumbrowser_screenshotbrowser_stop when done to delete the sandbox| Tool | Description |
|---|---|
browser_start |
Start a new browser session in a Daytona sandbox |
browser_stop |
Stop the browser and clean up the sandbox |
browser_status |
Check if the browser is running |
| Tool | Description |
|---|---|
browser_navigate |
Navigate to a URL |
browser_back |
Go back in history |
browser_forward |
Go forward in history |
browser_refresh |
Refresh the current page |
| Tool | Description |
|---|---|
browser_click |
Click on an element (CSS, XPath, or text selector) |
browser_type |
Type text into an input field |
browser_press |
Press keyboard keys (Enter, Tab, etc.) |
browser_hover |
Hover over an element |
browser_select |
Select from a dropdown |
browser_scroll |
Scroll the page or an element |
| Tool | Description |
|---|---|
browser_screenshot |
Take a screenshot (full page or element) |
browser_get_text |
Get text content from the page |
browser_get_html |
Get HTML content |
browser_get_attribute |
Get an element’s attribute |
browser_evaluate |
Run JavaScript and get results |
| Tool | Description |
|---|---|
browser_wait_for_selector |
Wait for an element to appear/disappear |
browser_wait_for_navigation |
Wait for navigation to complete |
| Tool | Description |
|---|---|
browser_new_tab |
Open a new tab |
browser_list_tabs |
List all open tabs |
browser_switch_tab |
Switch to a different tab |
browser_close_tab |
Close a tab |
| Tool | Description |
|---|---|
browser_upload_file |
Upload a file to a file input |
daytona-playwright-mcp
daytona-playwright-mcp --transport http --host 0.0.0.0 --port 8765
Then connect via: http://localhost:8765/mcp
daytona-playwright-mcp --transport sse --host 0.0.0.0 --port 8765
| Variable | Description | Default |
|---|---|---|
DAYTONA_API_KEY |
Your Daytona API key (required) | - |
DAYTONA_API_URL |
Daytona API server URL | https://app.daytona.io/api |
# Clone the repository
git clone https://github.com/jamesmurdza/playwright-daytona-mcp-server.git
cd playwright-daytona-mcp-server
# Install dependencies
uv sync
# Run the server
uv run daytona-playwright-mcp
When developing locally, use this MCP configuration:
{
"mcpServers": {
"daytona-playwright": {
"command": "uv",
"args": ["run", "--directory", "/path/to/playwright-daytona-mcp-server", "daytona-playwright-mcp"],
"env": {
"DAYTONA_API_KEY": "your-api-key-here"
}
}
}
}
uv run pytest
When you call browser_start, the server:
All browser commands are executed through the Playwright API connected to the remote browser
Screenshots are captured as PNG images and returned via MCP’s image content type
When you call browser_stop, the sandbox is deleted and all resources are freed
Make sure your API key is configured in the MCP server settings, not just in your shell.
timeout parameter if neededbrowser_screenshot tool returns an Image type that should render automaticallyThe default timeout is 60 seconds. For slower connections or first-time image builds, increase it:
"Start a browser with a 120 second timeout"
MIT - James Murdza, Harsh Verma