{
  "markdown": "# ZenLink MCP\n\nMCP server for browser automation via ZenLink — gives Claude Desktop and other MCP clients native browser control through Zen Browser (Firefox-based).\n\n**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.\n\n## Installation\n\n```bash\npip install zenlink-mcp\n```\n\n## Requirements\n\n- [ZenLink browser extension](https://github.com/JayQuan-McCleary/ZenLink) **v2.0.0+** installed in Zen Browser\n- ZenLink bridge running (`python native/bridge.py`)\n\n## Tool surface (75+ tools)\n\nEvery 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.\n\n### Core\n`zen_status`, `zen_health`, `zen_tabs`, `zen_new_tab`, `zen_close_tab`, `zen_switch_tab`, `zen_navigate`, `zen_screenshot`\n\n### Content extraction (read once, work cheaply)\n`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`\n\n### Interaction\n`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`\n\n### Visual\n`zen_screenshot`, `zen_element_screenshot`, `zen_full_page_screenshot`\n\n### Tab and window management\n`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`\n\n### Network, cookies, state\n`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`\n\n### Sessions (auth-once-use-many)\n`zen_save_session`, `zen_load_session`, `zen_list_sessions`, `zen_delete_session`\n\n### Orchestration (parallel multi-tab)\n`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`\n\n### Batch / scripting\n`zen_batch` (with `parallel`, `if`, `while`, `try`, `sequence`, `retry`, `${$N.field}` variable substitution)\n\n### Observability / policy\n`zen_logs`, `zen_audit`, `zen_set_policy`, `zen_get_policy`, `zen_retry`, `zen_reload_extension`\n\n### Wait primitives\n`zen_wait_for_element`, `zen_wait_for_result`, `zen_wait_for_url`, `zen_wait_for_title`, `zen_wait_for_network_idle`\n\n### Workflow\n`zen_workflows`, `zen_workflow`, `zen_cache`, `zen_wp_html`\n\n### `zen_wait_for_element`\n\nWaits 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.\n\n```json\n{\"action\": \"waitForElement\", \"selector\": \".tracking-events\", \"timeout\": 10000}\n```\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `selector` | string | required | CSS selector to wait for |\n| `timeout` | int | 10000 | Max wait time in milliseconds |\n| `poll_interval` | int | 200 | How often to check in milliseconds |\n\nReturns `{ ok: true, found: true, elapsed: 342, ref: \"r12\", tag: \"div\" }` on success, or `{ ok: false, found: false, error: \"Timed out after 10000ms\" }` on timeout.\n\n### `zen_batch`\n\nRun multiple commands in one request. Supports all actions including `waitForElement`, `trustedClick`, and `sleep`:\n\n```json\n[\n  {\"action\": \"navigate\", \"url\": \"https://example.com\"},\n  {\"action\": \"waitForElement\", \"selector\": \".results\", \"timeout\": 8000},\n  {\"action\": \"pageText\"}\n]\n```\n\n## Claude Desktop Setup\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"zenlink\": {\n      \"command\": \"zenlink-mcp\"\n    }\n  }\n}\n```\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for the full history. Highlights of v2.0.0:\n\n- ~50 new MCP tools across content extraction, interaction, network, sessions, orchestration\n- Real parallel multi-tab work via `zen_parallel` + `zen_keep_alive`\n- Session save/restore for auth-once-use-many flows\n- `zen_intercept` to block analytics/ads (3–10× page speedup in agent runs)\n- `zen_readability` + `zen_markdown` for token-efficient page extraction\n- Hot reload via `zen_reload_extension`\n\n## Links\n\n- [ZenLink Bridge & Extension](https://github.com/JayQuan-McCleary/ZenLink)\n- [MCP Registry](https://registry.modelcontextprotocol.io)\n\n<sub>mcp-name: io.github.JayQuan-McCleary/zenlink-mcp</sub>\n",
  "bytes": 5183,
  "sha": "b10d2a958f7f90f98553d4ef1cfa8c9c23a3f4e58d7ed6023db9c598dc6f0a84",
  "repo_slug": "jayquan-mccleary/zenlink-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_jayquan_mccleary_zenlink_mcp_a5a3b219/readme"
}