Browser Automation · MODEL CONTEXT PROTOCOL
MCP Web Browser Server
An advanced web browsing server for the Model Context Protocol (MCP) powered by Playwright, enabling headless browser interactions through a flexible, secure API.
WHAT IT CONNECTS
What MCP Web Browser Server gives an AI Agent
The source catalog does not include a structured feature list. Review the repository documentation before use.
SECURITY
An MCP listing is not a security review
An MCP server may receive model context, credentials, local files, or permission to call external systems. Review its code, requested environment variables, network behavior, package provenance, and maintenance status before connecting it to an agent.
README
Repository documentation
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
- Multi-Tab Support: Create, manage, and switch between multiple browser tabs
- Advanced Web Interaction Tools:
- Extract text content
- Click page elements
- Input text into form fields
- Capture screenshots
- Extract page links with filtering capabilities
- Scroll pages in any direction
- Execute JavaScript on pages
- Refresh pages
- Wait for navigation to complete
- Resource Management: Automatic cleanup of unused resources after inactivity
- Enhanced Page Information: Get detailed metadata about the current page
- Python 3.10+
- MCP SDK
- Playwright
# Install MCP and Playwright
pip install mcp playwright
# Install browser dependencies
playwright installAdd 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()
# Get links matching a pattern
filtered_links = get_page_links(filter_pattern="contact")# Create a new tab
tab_id = create_new_tab("https://example.com")
# Create another tab
another_tab_id = create_new_tab("https://example.org")
# List all open tabs
tabs = list_tabs()
# Switch between tabs
switch_tab(tab_id)
# Close a tab
close_tab(another_tab_id)# Scroll the page
scroll_page(direction="down", amount="page")
# Execute JavaScript on the page
result = execute_javascript("return document.title")
# Get detailed page information
page_info = get_page_info()
# Refresh the current page
refresh_page()
# Wait for navigation to complete
wait_for_navigation(timeout_ms=5000)- SSL certificate validation bypass
- Secure browser context management
- Custom user-agent configuration
- Error handling and comprehensive logging
- Configurable timeout settings
- CSP bypass control
- Protection against cookie stealing
- SSL Certificate Errors: Automatically bypassed
- Slow Page Load: Adjust timeout in
browse_to()method - Element Not Found: Verify selectors carefully
- Browser Resource Usage: Auto-cleanup after inactivity period
All significant events are logged with detailed information 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)
filter_pattern: Optional text pattern to filter linkscontext: Optional context object (currently unused)
selector: CSS selector of input elementtext: Text to inputcontext: Optional context object (currently unused)
url: Optional URL to navigate to in the new tabcontext: Optional context object (currently unused)
tab_id: ID of the tab to switch tocontext: Optional context object (currently unused)
context: Optional context object (currently unused)
tab_id: Optional ID of the tab to close (defaults to current tab)context: Optional context object (currently unused)
context: Optional context object (currently unused)
context: Optional context object (currently unused)
direction: Direction to scroll ('up', 'down', 'left', 'right')amount: Amount to scroll ('page', 'half', or a number)context: Optional context object (currently unused)
timeout_ms: Maximum time to wait in millisecondscontext: Optional context object (currently unused)
script: JavaScript code to executecontext: 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.
COMMUNITY