MetaDock
Officialby metadockapp
README.md
# MetaDock MCP
Control the [MetaDock](https://metadock.app) desktop workspace over the **Model Context Protocol**.
MetaDock is a Windows power-user workspace that docks browsers and native apps side by side. Its
built-in MCP server exposes everything you can do by hand as tools, so Claude — or any MCP client —
can open and drive browsers, arrange layouts, manage bookmarks and downloads, search, and more.
Listed in the official MCP registry as **`app.metadock/metadock`**.
## What you can do
The server exposes **178 tools** across 11 groups — the full surface of what you can do in
MetaDock by hand:
| Group | Tools | Examples |
|---|---|---|
| **Browser** | 93 | navigate, execute JavaScript, click, type, screenshot, cookies, zoom, device emulation, fingerprint |
| **Layout & Profiles** | 25 | arrange/save/switch multi-browser layouts, per-profile proxy & settings |
| **Workspace** | 11 | manage and switch whole workspaces |
| **Native Apps** | 7 | mount/dismount and control docked native apps |
| **Ad-block** | 9 | toggle lists and per-site overrides |
| **Bookmarks** | 6 | read/write bookmarks and categories |
| **History** | 5 | query and manage browsing history |
| **Downloads** | 9 | start and manage downloads |
| **Search & Aliases** | 5 | search + custom aliases |
| **Permissions** | 4 | site permission control |
| **Settings** | 4 | app settings |
### Full tool list
<details>
<summary><b>Browser</b> (93 tools)</summary>
- `browser_batch` — Execute multiple browser operations in sequence on one or multiple browsers (100 operations per browser max)
- `browser_clear_cache` — Clear this browser's HTTP cache (CDP Network.clearBrowserCache)
- `browser_clear_console` — Clear console messages for the browser
- `browser_clear_cookies` — Clear all cookies for the browser
- `browser_clear_device_emulation` — Clear device emulation for the browser
- `browser_clear_fingerprint` — Disable all fingerprint spoofing for a browser
- `browser_clear_geolocation` — Clear geolocation override for the browser
- `browser_clear_input` — Clear an input field
- `browser_clear_storage` — Clear the page's localStorage or sessionStorage
- `browser_click` — Click an element by CSS selector
- `browser_click_at` — Click at raw viewport pixel coordinates using a real (trusted) mouse event
- `browser_close` — Close a browser instance
- `browser_close_devtools` — Close developer tools for the browser
- `browser_create` — Create a new browser instance
- `browser_delete_cookie` — Delete a specific cookie from the browser
- `browser_drag` — Drag from one element to another using real (trusted) mouse events: press at the source center, move in steps to the tar…
- `browser_emulate_device` — Enable device emulation for the browser
- `browser_enable_devtools` — Enable or disable developer tools for the browser
- `browser_execute_js` — Execute JavaScript code in browser
- `browser_extract` — Structured, schema-driven extraction
- `browser_find` — Find visible interactive elements whose role or accessible name matches a text query
- `browser_get_all_cookies` — Get all cookies for the browser
- `browser_get_console` — Get console messages from the browser
- `browser_get_cookie` — Get a cookie value from the browser
- `browser_get_element_attribute` — Get an attribute value of an element by CSS selector
- `browser_get_element_box` — Get an element's bounding box (x/y/width/height/top/left/bottom/right) and key computed styles (display, visibility, opa…
- `browser_get_element_text` — Get the text content of an element by CSS selector
- `browser_get_fingerprint` — Get current fingerprint spoofing configuration for a browser
- `browser_get_forms` — Enumerate forms and their fields {name, id, type, label, placeholder, required, options, selector}
- `browser_get_last_dialog` — Get the most recent JavaScript dialog captured for this browser (only captured while a non-default dialog policy is acti…
- `browser_get_links` — Extract all hyperlinks on the page as a compact list of {text, href, rel}
- `browser_get_metadata` — Get page metadata: title, description, canonical URL, author, published/modified dates, language, favicon, Open Graph + …
- `browser_get_network` — List the network requests the page has made (from the Resource Timing API): url, type, protocol, size, and duration, plu…
- `browser_get_screenshot` — Retrieve a saved screenshot by UUID
- `browser_get_source` — Get raw page source HTML
- `browser_get_state` — Get comprehensive browser state
- `browser_get_storage` — Read the page's localStorage or sessionStorage
- `browser_get_tables` — Extract HTML tables as markdown (default), CSV, or JSON rows
- `browser_get_title` — Get current page title
- `browser_get_url` — Get current URL of a browser
- `browser_get_zoom` — Get current zoom factor for the browser
- `browser_go_back` — Navigate browser back in history
- `browser_go_forward` — Navigate browser forward in history
- `browser_history_go` — Move within the browser's session history by a relative delta (e.g
- `browser_hover` — Hover the pointer over an element (dispatches pointer/mouse enter+over+move events), triggering hover menus and tooltips
- `browser_inject_css` — Inject CSS into the page
- `browser_inject_script` — Inject a script URL into the page
- `browser_is_element_visible` — Check if an element is visible on the page
- `browser_navigate` — Navigate a browser to a specific URL
- `browser_open_devtools` — Open developer tools for the browser
- `browser_press_key` — Send a real (trusted) key press to the focused element via native input
- `browser_print_pdf` — Print page to PDF
- `browser_read` — Read the page as clean, LLM-friendly content instead of raw HTML
- `browser_reload` — Reload the current page
- `browser_remove_header` — Remove a previously-set custom request header from this browser
- `browser_right_click` — Right-click (context-menu) an element by dispatching mousedown/mouseup/contextmenu with the secondary button
- `browser_screenshot` — Take a screenshot of the page - returns base64-encoded PNG image data
- `browser_screenshot_element` — Screenshot a single element (scrolls it into view, captures just its bounding box)
- `browser_scroll_by` — Scroll by offset amount
- `browser_scroll_to` — Scroll to specific coordinates
- `browser_set_cookie` — Set a cookie for the browser
- `browser_set_dialog_policy` — Control how this browser handles JavaScript dialogs (alert/confirm/prompt/beforeunload)
- `browser_set_fingerprint` — Set fingerprint spoofing config for a browser
- `browser_set_fingerprint_audio` — Configure audio fingerprint spoofing for a browser
- `browser_set_fingerprint_canvas` — Configure canvas fingerprint spoofing for a browser
- `browser_set_fingerprint_webgl` — Configure WebGL fingerprint spoofing for a browser
- `browser_set_geolocation` — Set geolocation for the browser
- `browser_set_header` — Add or override a custom HTTP request header sent by this browser on subsequent requests (e.g
- `browser_set_headless` — Toggle headless mode for a browser
- `browser_set_muted` — Mute or unmute a single browser's audio
- `browser_set_offline` — Set offline mode for the browser
- `browser_set_storage` — Set a key in the page's localStorage or sessionStorage
- `browser_set_user_agent` — Set user agent for the browser
- `browser_set_value` — Set value of an input element
- `browser_set_viewport` — Set viewport size for the browser
- `browser_set_zoom` — Set zoom factor for the browser
- `browser_snapshot` — Token-efficient interactive snapshot: a compact list of visible interactive elements (links, buttons, inputs, selects) e…
- `browser_stop` — Stop loading the current page
- `browser_submit_form` — Submit a form
- `browser_type` — Type text at current cursor position
- `browser_upload_file` — Attach files to a file <input> element
- `browser_wait_for_element` — Wait for an element to appear on the page
- `browser_wait_for_load` — Wait for page to finish loading
- `browser_wait_for_network_idle` — Wait until the page has finished loading and no new network requests have started for a quiet period
- `browsers_close_all` — Close all browsers
- `browsers_close_others` — Close all browsers except one
- `browsers_close_others_in_layout` — Close all browsers in a layout except one
- `browsers_create_multiple` — Create multiple browsers with different configurations
- `browsers_execute_all` — Execute JavaScript on all browsers and return each browser's result
- `browsers_get_urls` — Get every open browser's uuid, url and title (copy all URLs)
- `browsers_list` — List all browsers
- `browsers_navigate_all` — Navigate all browsers to a URL
- `browsers_reload_all` — Reload all browsers
</details>
<details>
<summary><b>Layout & Profiles</b> (25 tools)</summary>
- `layout_close_all` — Close all dock widgets of specified types
- `layout_create` — Create a new layout/dock
- `layout_delete` — Delete a layout/dock
- `layout_equalize` — Equalize the dock splitters so the tiled docks share space evenly (tidy up the layout)
- `layout_get_apps` — Get applications in a layout
- `layout_get_browsers` — Get browsers in a layout
- `layout_get_info` — Get information about a layout
- `layout_list` — List all available layouts/docks
- `layout_open_dock` — Open a non-browser dock in the layout: a downloads panel, history panel, or new-window panel
- `layout_rename` — Rename a layout/dock
- `layout_reset_resolution` — Clear a custom layout resolution and return the window to free/auto sizing
- `layout_screenshot` — Take a screenshot of the entire layout window at its exact dimensions
- `layout_set_locked` — Lock or unlock a layout
- `layout_set_mute_all` — Mute or unmute all browsers in the layout at once
- `layout_set_resolution` — Set a fixed pixel resolution for the layout window (useful for consistent screenshots or device-size testing)
- `layout_toggle_fullscreen` — Toggle fullscreen mode for the layout window
- `profile_create` — Create a new browser profile
- `profile_create_temporary` — Create a temporary browser profile
- `profile_delete` — Delete a browser profile
- `profile_get_default` — Get default browser profile
- `profile_get_proxy` — Get the proxy address stored for a browser profile
- `profile_list` — List all browser profiles
- `profile_rename` — Rename a browser profile (automatically handles both regular and temporary profiles)
- `profile_set_default` — Set default browser profile
- `profile_set_proxy` — Set the proxy address for a browser profile
</details>
<details>
<summary><b>Workspace</b> (11 tools)</summary>
- `workspace_create` — Create a new workspace
- `workspace_delete` — Delete a workspace
- `workspace_get_current` — Get the currently active workspace
- `workspace_get_info` — Get information about a workspace
- `workspace_get_layouts` — Get all layouts associated with a workspace
- `workspace_get_startup` — Get the startup workspace information
- `workspace_list` — List all available workspaces
- `workspace_rename` — Rename a workspace
- `workspace_set_homepage` — Set workspace homepage URL
- `workspace_set_startup` — Set workspace as startup workspace
- `workspace_switch` — Switch to a different workspace
</details>
<details>
<summary><b>Native Apps</b> (7 tools)</summary>
- `app_dismount` — Dismount (unembed) a native app dock by UUID
- `app_info` — Get full info for a mounted native app by UUID
- `app_list` — List native app docks mounted in a layout (full JSON)
- `app_list_processes` — List running OS windows/processes that can be mounted as native app docks
- `app_lock` — Lock or unlock a native app dock
- `app_mount` — Mount a running native window as a dock in a layout
- `app_set_title` — Set the custom title of a native app dock
</details>
<details>
<summary><b>Ad-block</b> (9 tools)</summary>
- `adblock_add` — Add a new adblock filter list by URL
- `adblock_enable` — Enable or disable an adblock filter list by id
- `adblock_get_override` — Get a profile's adblock override (on/off/inherit) and the effective enabled state
- `adblock_list` — List all adblock filter lists (id, name, url, enabled, rule_count, last_updated)
- `adblock_remove` — Remove an adblock filter list by id
- `adblock_set_auto_update` — Configure periodic auto-update of filter lists
- `adblock_set_override` — Set a profile's adblock override
- `adblock_update` — Trigger a refresh/download of a single filter list by id
- `adblock_update_all` — Trigger a refresh/download of all enabled filter lists
</details>
<details>
<summary><b>Bookmarks</b> (6 tools)</summary>
- `bookmark_create` — Create a bookmark
- `bookmark_delete` — Delete a bookmark by id
- `bookmark_list` — List bookmarks (id, name, url, category_id, tags)
- `bookmark_list_categories` — List bookmark categories (id, name, parent_id, color, path, depth)
- `bookmark_open` — Open a bookmark in a new browser
- `bookmark_update` — Update a bookmark's title, url, and/or category by id (unspecified fields keep their current value)
</details>
<details>
<summary><b>History</b> (5 tools)</summary>
- `history_clear` — Clear all browsing history across every profile
- `history_delete_visit` — Delete a single history visit by visit_id
- `history_list` — List/search browsing history visits (visit_id, uri, title, host, profile, visit_time, counts)
- `history_profiles` — List distinct profiles that have history visits
- `history_remove_uri` — Remove all history for a specific URL
</details>
<details>
<summary><b>Downloads</b> (9 tools)</summary>
- `download_cancel` — Cancel an in-flight download
- `download_clear_all` — Remove every download (cancels in-flight first)
- `download_clear_completed` — Remove all completed/cancelled/failed downloads
- `download_get` — Get one download by uuid
- `download_list` — List active/recent downloads (uuid, filename, url, status, bytes, speed)
- `download_pause` — Pause an in-flight download
- `download_remove` — Remove a download from the list (cancels first if active)
- `download_resume` — Resume a paused download
- `download_start` — Download a URL directly to the app's configured download directory
</details>
<details>
<summary><b>Search & Aliases</b> (5 tools)</summary>
- `alias_delete` — Delete a website alias
- `alias_list` — List website aliases (short keyword -> URL shortcuts used in the omnibox)
- `alias_resolve` — Resolve a website alias to its URL
- `alias_set` — Create or update a website alias
- `search` — Run a search query in a new browser using the default (or specified) search engine
</details>
<details>
<summary><b>Permissions</b> (4 tools)</summary>
- `permission_clear` — Forget every remembered permission decision for all hosts
- `permission_list` — List all remembered site permission decisions (host, permission_type, label, allowed)
- `permission_remove` — Forget one remembered permission decision for a host
- `permission_remove_host` — Forget every remembered permission decision for a host
</details>
<details>
<summary><b>Settings</b> (4 tools)</summary>
- `settings_get` — Get current values of application settings (the readable counterpart to settings_set) - behaviour/features, appearance, …
- `settings_list_search_engines` — List configured search engines (id, name, url)
- `settings_list_themes` — List available themes (id, name, is_dark, is_core)
- `settings_set` — Set an application setting by key
</details>
## Requirements
- The **MetaDock desktop app** installed and running (Windows). Get it at **[metadock.app](https://metadock.app)**.
- The MCP server enabled in **MetaDock → Settings → API & Automation**.
The server runs **locally** on your machine — stdio (`metadock mcp`) or loopback HTTP — so your data
never leaves your computer.
## Install
### Option A — from inside MetaDock (recommended)
**Settings → API & Automation → Install to desktop tools**, then pick your client (Claude Desktop,
Claude Code, Cursor, VS Code, Codex, …). MetaDock writes the correct config and enables the endpoint
for you.
### Option B — Claude Desktop (.mcpb)
Download the latest `metadock-<version>.mcpb` from [Releases](../../releases), open it with Claude
Desktop, and confirm the path to `metadock.exe` when prompted.
### Option C — manual (any stdio MCP client)
Add this to your client's MCP config, adjusting the path to where MetaDock is installed
(default `%LOCALAPPDATA%\MetaDock\bin\metadock.exe`):
```json
{
"mcpServers": {
"metadock": {
"command": "C:\\Users\\YOU\\AppData\\Local\\MetaDock\\bin\\metadock.exe",
"args": ["mcp"]
}
}
}
```
### Option D — official MCP registry
Any registry-aware client can discover the server by name: **`app.metadock/metadock`**.
## Privacy & safety
Everything runs on your machine. By design, the following are **not** reachable over MCP (or any
automation surface): the Password Vault, the AI assistant, profile-bundle import/export, and the
system clipboard.
## Links
- Website — https://metadock.app
- MCP setup docs — https://metadock.app/docs/mcp
- Support — https://metadock.app/support
- Privacy policy — https://metadock.app/privacy
## Notes
- The `.mcpb` in Releases is currently **unsigned**; Claude Desktop will note this on install.
- This bundle references your installed `metadock.exe` and launches `metadock mcp` — the app itself
is not bundled.
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues