Metadata-Version: 2.4
Name: zenlink-mcp
Version: 2.0.0
Summary: MCP server for browser automation via ZenLink - gives Claude Desktop and other MCP clients native browser control.
Project-URL: Homepage, https://github.com/JayQuan-McCleary/ZenLink-MCP
Project-URL: Repository, https://github.com/JayQuan-McCleary/ZenLink-MCP
Project-URL: Issues, https://github.com/JayQuan-McCleary/ZenLink-MCP/issues
Project-URL: ZenLink Bridge, https://github.com/JayQuan-McCleary/ZenLink
Author-email: Jay-Quan <jayquanmccleary@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: automation,browser,claude,firefox,mcp,zen-browser,zenlink
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
Classifier: Topic :: Software Development :: Testing
Requires-Python: >=3.10
Requires-Dist: httpx>=0.27.0
Requires-Dist: mcp[cli]>=1.2.0
Description-Content-Type: text/markdown

# ZenLink MCP

MCP server for browser automation via ZenLink — gives Claude Desktop and other MCP clients native browser control through Zen Browser (Firefox-based).

**v2.0.0** ships ~50 new tools for parallel agentic work: real multi-tab parallelism, tab unloader defense, session save/restore, Readability + Markdown extraction, request interception, cookies/storage, and orchestration primitives (broadcast, sync barriers, tab pools, named tags). See [CHANGELOG.md](CHANGELOG.md) for the full list.

## Installation

```bash
pip install zenlink-mcp
```

## Requirements

- [ZenLink browser extension](https://github.com/JayQuan-McCleary/ZenLink) **v2.0.0+** installed in Zen Browser
- ZenLink bridge running (`python native/bridge.py`)

## Tool surface (75+ tools)

Every tab-aware tool below accepts an optional `tab_id` parameter — pass it to drive a specific tab without stealing focus, the foundation for parallel multi-tab work.

### Core
`zen_status`, `zen_health`, `zen_tabs`, `zen_new_tab`, `zen_close_tab`, `zen_switch_tab`, `zen_navigate`, `zen_screenshot`

### Content extraction (read once, work cheaply)
`zen_page_text`, `zen_page_info`, `zen_readability`, `zen_markdown`, `zen_query`, `zen_html`, `zen_links`, `zen_images`, `zen_meta`, `zen_structured_data`, `zen_bounds`, `zen_computed_style`, `zen_dom`, `zen_forms`, `zen_iframes`, `zen_explain_selector`, `zen_full_page_metrics`

### Interaction
`zen_click`, `zen_trusted_click`, `zen_double_click`, `zen_type`, `zen_fill`, `zen_form_fill`, `zen_set_editable_content`, `zen_select_option`, `zen_check`, `zen_focus`, `zen_blur`, `zen_keypress`, `zen_submit_form`, `zen_drag`, `zen_hover`, `zen_scroll`, `zen_find`, `zen_highlight`, `zen_click_and_wait_navigation`

### Visual
`zen_screenshot`, `zen_element_screenshot`, `zen_full_page_screenshot`

### Tab and window management
`zen_pin_tab`, `zen_mute_tab`, `zen_duplicate_tab`, `zen_reload_tab`, `zen_back`, `zen_forward`, `zen_get_zoom`, `zen_set_zoom`, `zen_windows`, `zen_create_window`, `zen_close_window`, `zen_focus_window`, `zen_move_tab`, `zen_detach_tab`

### Network, cookies, state
`zen_cookies`, `zen_storage` (local/session), `zen_clipboard`, `zen_downloads`, `zen_clear_browsing_data`, `zen_intercept`, `zen_capture_network`, `zen_wait_for_network_idle`, `zen_wait_for_url`, `zen_wait_for_title`, `zen_watch_console`, `zen_console_logs`

### Sessions (auth-once-use-many)
`zen_save_session`, `zen_load_session`, `zen_list_sessions`, `zen_delete_session`

### Orchestration (parallel multi-tab)
`zen_keep_alive`, `zen_keep_alive_stop`, `zen_wake_tab`, `zen_broadcast`, `zen_sync_barrier`, `zen_tag_tab`, `zen_resolve_tag`, `zen_list_tags`, `zen_untag_tab`, `zen_tab_pool`, `zen_pool_acquire`, `zen_pool_release`, `zen_parallel`

### Batch / scripting
`zen_batch` (with `parallel`, `if`, `while`, `try`, `sequence`, `retry`, `${$N.field}` variable substitution)

### Observability / policy
`zen_logs`, `zen_audit`, `zen_set_policy`, `zen_get_policy`, `zen_retry`, `zen_reload_extension`

### Wait primitives
`zen_wait_for_element`, `zen_wait_for_result`, `zen_wait_for_url`, `zen_wait_for_title`, `zen_wait_for_network_idle`

### Workflow
`zen_workflows`, `zen_workflow`, `zen_cache`, `zen_wp_html`

### `zen_wait_for_element`

Waits for a CSS selector to appear and become visible on the page. Returns immediately when found rather than sleeping a fixed duration — use this instead of `sleep` when waiting for dynamic/JS-rendered content.

```json
{"action": "waitForElement", "selector": ".tracking-events", "timeout": 10000}
```

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `selector` | string | required | CSS selector to wait for |
| `timeout` | int | 10000 | Max wait time in milliseconds |
| `poll_interval` | int | 200 | How often to check in milliseconds |

Returns `{ ok: true, found: true, elapsed: 342, ref: "r12", tag: "div" }` on success, or `{ ok: false, found: false, error: "Timed out after 10000ms" }` on timeout.

### `zen_batch`

Run multiple commands in one request. Supports all actions including `waitForElement`, `trustedClick`, and `sleep`:

```json
[
  {"action": "navigate", "url": "https://example.com"},
  {"action": "waitForElement", "selector": ".results", "timeout": 8000},
  {"action": "pageText"}
]
```

## Claude Desktop Setup

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "zenlink": {
      "command": "zenlink-mcp"
    }
  }
}
```

## Changelog

See [CHANGELOG.md](CHANGELOG.md) for the full history. Highlights of v2.0.0:

- ~50 new MCP tools across content extraction, interaction, network, sessions, orchestration
- Real parallel multi-tab work via `zen_parallel` + `zen_keep_alive`
- Session save/restore for auth-once-use-many flows
- `zen_intercept` to block analytics/ads (3–10× page speedup in agent runs)
- `zen_readability` + `zen_markdown` for token-efficient page extraction
- Hot reload via `zen_reload_extension`

## Links

- [ZenLink Bridge & Extension](https://github.com/JayQuan-McCleary/ZenLink)
- [MCP Registry](https://registry.modelcontextprotocol.io)
