PyPen MCP
Enables LLM-powered browser automation and security testing with features like browser management, network monitoring, DOM manipulation, and captcha handling.
README
PyPen MCP
Model Context Protocol server for browser-based penetration testing using PyDoll.
Overview
PyPen MCP provides a comprehensive set of tools for LLM-powered browser automation and security testing. It leverages PyDoll's Chrome DevTools Protocol integration for reliable, webdriver-free browser control.
Features
Browser Management
- Launch/close browser instances with configurable options
- Navigation control (navigate, back, forward, refresh)
- Headless mode, proxy support, custom user agents
- Incognito mode and resource blocking
Network Operations
- Monitoring: Capture all HTTP traffic, analyze requests/responses
- Interception: Block, modify, or mock requests in real-time
- Authenticated Requests: Make API calls that inherit browser session/cookies
DOM Manipulation
- Find elements by CSS selector, XPath, or attributes
- Click, type, scroll, and interact with elements
- Extract page source, element text, and HTML
- Human-like scrolling with physics simulation
JavaScript Execution
- Execute arbitrary JavaScript in browser context
- Access localStorage and sessionStorage
- Extract global variables, forms, and links
Session Management
- Cookie manipulation (get, set, delete, clear)
- Import/export cookies in multiple formats
- Session-aware HTTP requests
Captcha Handling
- Turnstile Bypass: Automatic Cloudflare Turnstile interaction
- Human Intervention: Request human help for unsolvable captchas (ReCAPTCHA v2, hCaptcha)
- Detection: Identify captcha types on the page
Debugging
- Screenshots (full page or elements)
- Viewport control
- Performance metrics
- Element highlighting
Installation
pip install pypen-mcp
Or install from source:
git clone https://github.com/your-repo/pypen-mcp
cd pypen-mcp
pip install -e .
Configuration
Add to your MCP client configuration:
{
"mcpServers": {
"pypen": {
"command": "pypen-mcp"
}
}
}
For development:
{
"mcpServers": {
"pypen": {
"command": "/path/to/pypen-mcp/.venv/bin/pypen-mcp"
}
}
}
Usage Examples
Basic Browser Automation
# Launch browser
browser_launch(headless=True)
# Navigate to target
browser_navigate(url="https://example.com")
# Extract page content
dom_get_source()
# Find and interact with elements
dom_find_element(css_selector="#username")
dom_type(selector="#username", text="admin")
dom_click(selector="button[type=submit]")
# Take screenshot for documentation
debug_screenshot(path="/tmp/screenshot.png")
# Close when done
browser_close()
Network Monitoring
# Enable traffic capture
network_enable_monitoring()
# Navigate and capture
browser_navigate(url="https://api.example.com")
# Get captured requests
network_get_logs(filter_url="/api/")
# Get response body for specific request
network_get_response_body(request_id="abc123")
# Disable when done
network_disable_monitoring()
Request Interception
# Set up interception rules
network_setup_handler(
block_patterns=["analytics", "tracking", "ads"],
modify_headers={"Authorization": "Bearer token123"},
mock_responses={"/api/config": {"status": 200, "body": {"debug": true}}}
)
# Navigate with interception active
browser_navigate(url="https://example.com")
Session-Based Requests
# Login via UI (handles complex auth)
browser_navigate(url="https://app.com/login")
dom_type(selector="#email", text="user@example.com")
dom_type(selector="#password", text="password123")
dom_click(selector="button[type=submit]")
# Make authenticated API calls
session_make_request(
url="https://app.com/api/user/profile",
method="GET"
)
Captcha Handling
# Enable automatic Turnstile bypass
captcha_enable_turnstile_bypass(time_to_wait_captcha=10.0)
# Navigate to protected site
browser_navigate(url="https://protected-site.com")
# Wait for captcha processing
# ... automation continues ...
# For unsolvable captchas, request human help
captcha_detect_type() # Check what's on page
captcha_request_human_intervention(
captcha_type="recaptcha_v2",
message="Please solve the ReCAPTCHA to continue"
)
# Wait for human to solve
captcha_wait_for_resolution(request_id="abc123", timeout=300)
Tool Reference
Browser Tools
| Tool | Description |
|---|---|
browser_launch |
Launch browser with options (headless, proxy, etc.) |
browser_close |
Close the browser instance |
browser_navigate |
Navigate to a URL |
browser_go_back |
Navigate back in history |
browser_go_forward |
Navigate forward in history |
browser_refresh |
Refresh current page |
browser_get_info |
Get current URL and title |
Network Tools
| Tool | Description |
|---|---|
network_enable_monitoring |
Start capturing HTTP traffic |
network_disable_monitoring |
Stop traffic capture |
network_get_logs |
Get captured requests (with optional filter) |
network_get_response_body |
Get response body for a request |
network_enable_interception |
Enable request interception |
network_disable_interception |
Disable interception |
network_setup_handler |
Configure auto interception rules |
DOM Tools
| Tool | Description |
|---|---|
dom_find_element |
Find element by selector |
dom_find_elements |
Find multiple elements |
dom_get_text |
Get element text content |
dom_get_html |
Get element HTML |
dom_click |
Click an element |
dom_type |
Type text into input |
dom_scroll |
Scroll the page |
dom_get_source |
Get full page HTML |
dom_wait_for |
Wait for element to appear |
JavaScript Tools
| Tool | Description |
|---|---|
js_execute |
Execute JavaScript code |
js_get_console_logs |
Get console logs |
js_get_global_vars |
Extract global variables |
js_get_local_storage |
Get localStorage data |
js_get_session_storage |
Get sessionStorage data |
js_set_local_storage |
Set localStorage value |
js_get_forms |
Get all forms with inputs |
js_get_links |
Get all links on page |
Session Tools
| Tool | Description |
|---|---|
session_get_cookies |
Get all cookies |
session_get_cookie |
Get specific cookie |
session_set_cookie |
Set a cookie |
session_delete_cookie |
Delete a cookie |
session_clear_cookies |
Clear all cookies |
session_export_cookies |
Export cookies (json/netscape/header) |
session_import_cookies |
Import cookies from JSON |
session_make_request |
Make session-authenticated HTTP request |
Captcha Tools
| Tool | Description |
|---|---|
captcha_enable_turnstile_bypass |
Enable auto Turnstile handling |
captcha_disable_turnstile_bypass |
Disable Turnstile handling |
captcha_detect_type |
Detect captcha type on page |
captcha_handle_auto |
Auto-handle detected captcha |
captcha_request_human_intervention |
Request human help |
captcha_get_pending_interventions |
Get unresolved requests |
captcha_resolve_intervention |
Mark intervention as resolved |
captcha_wait_for_resolution |
Wait for human to solve |
Debug Tools
| Tool | Description |
|---|---|
debug_screenshot |
Take page screenshot |
debug_get_viewport |
Get viewport size |
debug_set_viewport |
Set viewport size |
debug_get_performance |
Get performance metrics |
debug_highlight |
Highlight matching elements |
Important Notes
Browser Session Persistence
- The browser session persists until explicitly closed with
browser_close - All operations (DOM, JS, network) use the same active session
- Cookies and session state are maintained across navigations
Captcha Success Factors
Turnstile bypass success depends on:
- IP Reputation: Use residential proxies with good reputation
- Browser Fingerprint: Configure realistic browser options
- Behavioral Patterns: Add realistic delays and interactions
Human Intervention Workflow
- Detect captcha:
captcha_detect_type() - Try auto-handling:
captcha_handle_auto() - If fails, request help:
captcha_request_human_intervention() - Wait for resolution:
captcha_wait_for_resolution() - Continue automation
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.