An advanced web browsing server for the Model Context Protocol (MCP) powered by Playwright, enabling headless browser interactions through a flexible, secure API.
- Headless Web Browsing: Navigate to any website with SSL certificate validation bypass
- Full Page Content Extraction: Retrieve complete HTML content, including dynamically loaded JavaScript
- Advanced Web Interaction Tools:
- Extract text content
- Click page elements
- Input text into form fields
- Capture screenshots
- Extract page links
- Python 3.10+
- MCP SDK
- Playwright
# Install MCP and Playwright
pip install mcp playwright
# Install browser dependencies
playwright install
Add to your claude_desktop_config.json
:
{
"mcpServers": {
"web-browser": {
"command": "python",
"args": [
"/path/to/your/server.py"
]
}
}
}
# Browse to a website
page_content = browse_to("https://example.com")
# Extract page text
text_content = extract_text_content()
# Extract text from a specific element
title_text = extract_text_content("h1.title")
# Navigate to a page
browse_to("https://example.com/login")
# Input text into a form
input_text("#username", "your_username")
input_text("#password", "your_password")
# Click a login button
click_element("#login-button")
# Capture full page screenshot
full_page_screenshot = get_page_screenshots(full_page=True)
# Capture specific element screenshot
element_screenshot = get_page_screenshots(selector="#main-content")
# Get all links on the page
page_links = get_page_links()
- SSL certificate validation bypass
- Secure browser context management
- Error handling and logging
- Configurable timeout settings
- SSL Certificate Errors: Automatically bypassed
- Slow Page Load: Adjust timeout in
browse_to()
method - Element Not Found: Verify selectors carefully
All significant events are logged to stderr for easy debugging.
url
: Website to navigate tocontext
: Optional context object (currently unused)
selector
: Optional CSS selector to extract specific contentcontext
: Optional context object (currently unused)
selector
: CSS selector of the element to clickcontext
: Optional context object (currently unused)
get_page_screenshots(full_page: bool = False, selector: Optional[str] = None, context: Optional[Any] = None)
full_page
: Capture entire page screenshotselector
: Optional element to screenshotcontext
: Optional context object (currently unused)
context
: Optional context object (currently unused)
selector
: CSS selector of input elementtext
: Text to inputcontext
: Optional context object (currently unused)
Contributions are welcome! Please feel free to submit a Pull Request.
# Clone the repository
git clone https://github.com/random-robbie/mcp-web-browser.git
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows use `venv\Scripts\activate`
# Install dependencies
pip install -e .[dev]
MIT License
For issues and questions, please open an issue on GitHub.