Skip to main content
Glama

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.

Related MCP server: nodriver-proxy-mcp

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:

  1. IP Reputation: Use residential proxies with good reputation

  2. Browser Fingerprint: Configure realistic browser options

  3. Behavioral Patterns: Add realistic delays and interactions

Human Intervention Workflow

  1. Detect captcha: captcha_detect_type()

  2. Try auto-handling: captcha_handle_auto()

  3. If fails, request help: captcha_request_human_intervention()

  4. Wait for resolution: captcha_wait_for_resolution()

  5. Continue automation

License

MIT

Available Tools

52 tools
browser_closeA

Close the browser instance

Inputs: no named parameters.

browser_get_infoA

Get information about the current page (URL, title)

Inputs: no named parameters.

browser_go_backA

Navigate back in browser history

Inputs: no named parameters.

browser_go_forwardA

Navigate forward in browser history

Inputs: no named parameters.

browser_launchB

Launch a new browser instance with optional configuration (headless, proxy, user agent, etc.)

Inputs: headless, proxy, user_agent, binary_location, +4 more.

browser_navigateB

Navigate to a URL

Inputs: url (required).

browser_refreshA

Refresh the current page

Inputs: no named parameters.

captcha_detect_typeB

Detect what type of captcha is present on the current page. Scans for Cloudflare Turnstile, reCAPTCHA, hCaptcha, and image challenge indicators.

Inputs: no named parameters.

captcha_disable_turnstile_bypassA

Disable automatic Turnstile bypass

Inputs: no named parameters.

captcha_enable_turnstile_bypassA

Enable automatic Cloudflare Turnstile bypass. Uses PyDoll's built-in mechanism to detect and click the Turnstile checkbox. Success depends on IP reputation and browser fingerprint - this is NOT a magic bypass. Use residential proxies for best results.

Inputs: time_to_wait_captcha.

captcha_get_pending_interventionsA

Get all pending human intervention requests that have not been resolved

Inputs: no named parameters.

captcha_handle_autoA

Attempt to automatically handle any detected captcha. For Turnstile: uses built-in bypass. For others (ReCAPTCHA v2, hCaptcha, image challenges): returns need for human intervention.

Inputs: timeout.

captcha_request_human_interventionA

Request human intervention for an unsolvable captcha (e.g., ReCAPTCHA v2 image challenges, hCaptcha puzzles). Creates an intervention request with screenshot. The automation should wait for human to solve.

Inputs: captcha_type (required), message (required), take_screenshot.

captcha_resolve_interventionA

Mark an intervention request as resolved after human has solved the captcha. This allows the automation to continue.

Inputs: request_id (required), resolution.

captcha_wait_for_resolutionA

Block until a human intervention is resolved or timeout expires. Use this to pause automation while waiting for human to solve captcha.

Inputs: request_id (required), timeout, poll_interval.

debug_get_performanceB

Get performance metrics from the page

Inputs: no named parameters.

debug_get_viewportA

Get the current viewport size

Inputs: no named parameters.

debug_highlightB

Highlight all elements matching a selector

Inputs: selector (required), color.

debug_screenshotA

Take a screenshot of the current page. Returns the image directly. MUST be called after every dom_click to observe the result.

Inputs: no named parameters.

debug_set_viewportB

Set the viewport size

Inputs: width (required), height (required).

dom_clickB

Click on an element. IMPORTANT: You SHOULD either call debug_screenshot or view the source after every click to observe the result of the interaction.

Inputs: selector (required), timeout.

dom_find_elementC

Find an element on the page using various selectors

Inputs: tag_name, id, class_name, name, +4 more.

dom_find_elementsC

Find multiple elements on the page

Inputs: tag_name, class_name, css_selector, xpath, +1 more.

dom_get_htmlB

Get the outer HTML of an element

Inputs: selector (required), timeout.

dom_get_sourceB

Get the full page HTML source

Inputs: no named parameters.

dom_get_textB

Get the text content of an element

Inputs: selector (required), timeout.

dom_scrollB

Scroll the page

Inputs: direction, amount.

dom_typeC

Type text into an input element

Inputs: selector (required), text (required), clear_first, timeout.

dom_wait_forB

Wait for an element to appear on the page

Inputs: selector (required), timeout.

js_executeB

Execute JavaScript in the browser context

Inputs: script (required).

js_get_console_logsB

Get console logs from the browser

Inputs: no named parameters.

js_get_formsA

Get all forms on the page with their inputs

Inputs: no named parameters.

js_get_global_varsA

Extract global JavaScript variables

Inputs: no named parameters.

js_get_local_storageA

Get all localStorage data

Inputs: no named parameters.

js_get_session_storageA

Get all sessionStorage data

Inputs: no named parameters.

js_set_local_storageC

Set a localStorage value

Inputs: key (required), value (required).

network_disable_interceptionB

Disable request interception

Inputs: no named parameters.

network_disable_monitoringB

Disable network event monitoring

Inputs: no named parameters.

network_enable_interceptionB

Enable request/response interception

Inputs: resource_type, request_stage.

network_enable_monitoringB

Enable network event monitoring to capture all HTTP traffic

Inputs: no named parameters.

network_get_logsA

Get captured network logs, optionally filtered by URL pattern

Inputs: filter_url.

network_get_response_bodyB

Get the response body for a specific request ID

Inputs: request_id (required).

network_setup_handlerB

Set up automatic interception handler with blocking, modification, and mocking rules

Inputs: block_patterns, modify_headers, mock_responses.

session_clear_cookiesC

Clear all cookies

Inputs: no named parameters.

session_export_cookiesB

Export cookies in various formats (json, netscape, header)

Inputs: format.

session_get_cookiesB

Get all cookies from the browser

Inputs: no named parameters.

session_import_cookiesB

Import cookies from JSON string

Inputs: cookies_json (required).

session_make_requestC

Make an HTTP request using the browser's session (inherits cookies/auth)

Inputs: url (required), method, headers, body, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 52 tools

    Disambiguation5/5

    Each tool has a clear, distinct purpose, with prefixes like browser_, captcha_, debug_, dom_, js_, network_, session_ grouping related functionality. No two tools perform the same action, and even within groups, tools are well-differentiated.

    Naming Consistency5/5

    All tool names follow a consistent snake_case convention with a prefix indicating the functional domain. This makes it easy for an agent to predict tool names and understand their roles.

    Tool Count4/5

    52 tools is on the high side, but the server covers a broad scope of browser automation features (browser control, DOM, JS, network, sessions, captchas). The count is appropriate for the comprehensive capability set, though slightly above the ideal range.

    Completeness5/5

    The tool surface is remarkably complete: browser lifecycle, navigation, DOM interactions, debugging, JavaScript execution, network monitoring/interception, cookie/session management, and captcha handling all have dedicated tools. No obvious gaps for the intended domain.

    Related MCP Connectors

    Related MCP Servers