DrissionPage BetterMCP

DrissionPage BetterMCP

An MCP server that wraps DrissionPage to provide comprehensive browser automation tools, including tab management, element interaction, network capture, and more, with AI-friendly tool descriptions and 255 unit tests.

Category
Visit Server

README

DrissionPage BetterMCP

A better DrissionPage MCP server — covers most capabilities of the original library, 255 unit tests, 100% service coverage, AI-optimized tool calls and descriptions.

English | 中文


Why BetterMCP

BetterMCP Note
55 Tools Covers browser, tabs, navigation, elements, forms, screenshots, network, cookies, storage, iframes, files, and more Most capabilities of the original library, ready out of the box
255 Unit Tests 17 test modules + 6 integration test suites 100% service coverage, verifiable on every commit
AI-Friendly Clear tool descriptions, explicit parameter semantics, unified response structure LLMs understand on first call — fewer retries, less token waste
Element Cache element_find returns an element_id for direct reuse in subsequent calls No repeated lookups, more efficient interactions
Native Locator Syntax #id .class @attr text: css: xpath: @@AND @|OR Full DrissionPage syntax support
Dual Transport stdio + streamable-http Works with all major AI coding tools

Quick Start

Prerequisites

  • Python >= 3.10
  • uv
  • Chrome / Chromium browser

Install

git clone https://github.com/pureTrue/DrissionPage-BetterMCP.git
cd DrissionPage-BetterMCP
uv sync

Configure Your AI Tool

<!-- tabs:start -->

Claude Code

Project root .mcp.json:

{
  "mcpServers": {
    "drissionpage": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/DrissionPage-BetterMCP", "dp-mcp"]
    }
  }
}

Or via CLI:

claude mcp add drissionpage -- uv run --directory /path/to/DrissionPage-BetterMCP dp-mcp

Cursor

.cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "drissionpage": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/DrissionPage-BetterMCP", "dp-mcp"]
    }
  }
}

VS Code (Copilot)

.vscode/mcp.json:

{
  "servers": {
    "drissionpage": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/DrissionPage-BetterMCP", "dp-mcp"]
    }
  }
}

Note: VS Code uses servers as the top-level key, not mcpServers.

Codex

.codex/config.toml (project-level) or ~/.codex/config.toml (global):

[mcp_servers.drissionpage]
command = "uv"
args = ["run", "--directory", "/path/to/DrissionPage-BetterMCP", "dp-mcp"]

Or via CLI:

codex mcp add drissionpage -- uv run --directory /path/to/DrissionPage-BetterMCP dp-mcp

<!-- tabs:end -->

Replace /path/to/DrissionPage-BetterMCP with the actual project path.

Environment Variables

Optional, prefixed with DP_MCP_:

Variable Default Description
DP_MCP_DEFAULT_TIMEOUT 15.0 Default tool timeout (seconds)
DP_MCP_LOG_LEVEL INFO Logging level
DP_MCP_NETWORK_CAPTURE_SIZE 200 Max network packets to capture

Copy .env.example to .env and customize as needed.

Tool List

Browser Management

Tool Description
browser_connect Connect to an existing Chrome or launch a new instance; supports headless, proxy, user_agent
browser_info Get browser status: address, tab count, process ID
browser_quit Close the browser and release all resources

Tab Management

Tool Description
tab_new Open a new tab, optionally navigate to a URL
tab_close Close a tab; defaults to the current tab
tab_switch Switch to a specific tab
tab_list List all open tabs
tab_find Search tabs by title and/or URL
tab_info Get tab details

Page Navigation

Tool Description
page_navigate Navigate to a URL; returns final URL and page title
page_back / page_forward Go back or forward in history
page_refresh Refresh the page; optionally ignore cache
page_stop Stop page loading

Element Interaction

Tool Description
element_find Find an element; returns a cached element_id
element_find_all Find all matching elements
element_wait Wait for an element state (present / visible / hidden / deleted)
element_click Click an element; supports left / right / middle / double click
element_input Type text into an input; optionally clear first
element_clear Clear an input field
element_hover Hover over an element
element_drag Drag to a target element or pixel offset
element_get_text Get visible text content
element_get_attr Get an HTML attribute value
element_get_info Get full details: tag, text, rect, attrs, HTML, states
element_select Select an option in a <select> element
element_get_options Get all options of a <select> element
element_scroll_into_view Scroll until the element is visible

Screenshots

Tool Description
page_screenshot Screenshot the page; supports full-page capture
element_screenshot Screenshot a specific element

Page Content

Tool Description
page_get_text Get the page's plain text
page_get_html Get the HTML source
page_wait_load Wait for page load / URL change / title change
page_scroll Scroll the page in a direction

Iframes

Tool Description
frame_list List all iframes
frame_switch Switch into an iframe
frame_parent Return to the parent frame
frame_main Return to the top-level page

Network Capture

Tool Description
network_listen_start Start listening for requests matching a URL pattern
network_listen_wait Wait for and retrieve captured network packets

Cookies & Storage

Tool Description
cookie_get_all Get all cookies; optionally filter by domain
cookie_set Set a cookie
cookie_remove Remove a cookie or clear all
storage_get Read from localStorage / sessionStorage
storage_set Write to localStorage / sessionStorage

Keyboard & Dialogs

Tool Description
keyboard_press Press a key or combination (Enter, Ctrl+A, etc.)
keyboard_type Type text continuously
dialog_handle Handle an alert / confirm / prompt dialog
dialog_auto Enable or disable automatic dialog handling

Advanced

Tool Description
action_chain Execute an action sequence: move, click, drag, type, wait
js_execute Execute JavaScript on the page
cdp_execute Execute a raw Chrome DevTools Protocol command

File Operations

Tool Description
file_upload Upload a file; supports hidden inputs
file_download Download a file via URL or click trigger
page_save Save the page as PDF or MHTML

Developer Guide

Project Structure

src/dp_mcp/
├── server.py              # MCP server — 55 tool definitions
├── config.py              # Settings (pydantic-settings)
├── models.py              # ToolResult, BrowserInfo, TabInfo, etc.
├── core/                  # Core services
│   ├── browser.py         # Browser lifecycle
│   ├── tab.py             # Multi-tab management
│   ├── navigation.py      # Page navigation
│   └── element.py         # Element finding & interaction
├── services/              # Domain services
│   ├── screenshot.py      # Screenshots
│   ├── frame.py           # Iframes
│   ├── scroll.py          # Scrolling
│   ├── network.py         # Network capture
│   ├── cookie.py          # Cookies
│   ├── action.py          # Action chains
│   ├── dialog.py          # Dialogs
│   ├── cdp.py             # CDP
│   └── file.py            # File operations
└── utils/
    └── locator.py         # Locator parser + element cache

Running Tests

# Unit tests (no browser needed)
uv run pytest tests/unit -v

# Integration tests (requires Chrome)
uv run pytest tests/integration -v -m integration

# All tests
uv run pytest -v

Locator Syntax

Full DrissionPage locator syntax is supported:

Syntax Example Description
#id #login-btn By ID
.class .submit By class name
@attr=val @name=email By attribute
text:str text:Login By visible text
tag:name tag:input By tag name
css:selector css:div.card>h2 CSS selector
xpath:expr xpath://div[@id='app'] XPath
@@a@@b @@class=btn@@text()=OK AND condition
@|a@|b @|class=btn@|class=link OR condition

Use the optional by parameter to disambiguate: css, xpath, text, id, class, attr.

Contributing

Pull requests and issues are welcome.

  1. Fork this repository
  2. Create a feature branch: git checkout -b feature/my-feature
  3. Commit your changes: git commit -m "feat: add my feature"
  4. Push the branch: git push origin feature/my-feature
  5. Open a Pull Request

Please make sure all tests pass before submitting:

uv run pytest tests/unit -v

License

This project's code is licensed under BSD 3-Clause.

Note: This project depends on DrissionPage, which uses a custom non-commercial license that prohibits unauthorized commercial use. Users must independently comply with DrissionPage's license terms.

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured