Prototype · Preview: every server in the official registry, synced every 30 minutes. Sign in with Google to write reviews.Prototype · updated every 30 min
PopNx MCPMCP servers for people who use AI · explained in plain words

Dock

by try-dock-aiversion 1.1.0i★ 0iRuns in the cloud
Registry nameai.trydock/dock

How to install

What it does

AI workspace for you, your team, and every agent. Tables, docs (images, 4K video), formulas.

  • Connects Runs in the cloud
  • Account or key No key needed
  • Category Design, images & audio

Install

Pick the AI app you use, then copy the settings.

Passed 3/4 checks · What you ask goes through the maker’s server (trydock.ai) · ✓ Commands checked Nov 13, 2026

First: which AI do you use?

Pick your app and the steps appear below.

Works with Claude · about 2 min

No key, nothing to install · Set it up once on claude.ai or the desktop app, then use it in chat · free accounts can add 1 · on Team/Enterprise an Owner adds it

  1. Open Claude’s Connectors page

    CustomizeConnectors

    CustomizeConnectors1Add2https://…3Add4
  2. Click “Add” → “Custom” → “Web” and fill in these 2 fields

    Copy each value into the field with the same name in Claude, then click Continue

    Name · NameDock
    Remote MCP server URL · Addresshttps://trydock.ai/api/mcp

    Click Continue past the sign-in settings Claude detected · under Authentication choose what the maker says (Sign in now, Sign in when needed or No sign in), then click Add

  3. Turn it on in a chat

    +ConnectorsDock

  4. Try it

    Use Dock and tell me what you can do for me, then show me one thing

    ✓ If Claude says it is using Dock or shows a Dock tool in the answer, you are connected

Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Works with ChatGPT, depending on your plan

Full MCP: ChatGPT Business, Enterprise or Edu on the web · Pro: connects with read/fetch permissions, so tools that change data may not work · Plus: not confirmed in OpenAI’s docs; if you see an add-custom-MCP option on the Plugins page you can try these steps · web only

  1. Open ChatGPT’s add-MCP page on the web

    Plugins+Add custom MCP server

    ChatGPTPlugins1+2https://…3Create4
  2. Fill in the name and address

    Enter a name, paste the address under Connection, tick the risk warning and click Create as a plugin

    Name · NameDock
    Connection · Addresshttps://trydock.ai/api/mcp
  3. Pick Dock in a chat

    Start a new chat and pick Dock from your plugins before typing

  4. Try it

    Use Dock and tell me what you can do for me, then show me one thing

    ✓ If ChatGPT says it is using Dock or shows a Dock tool in the answer, you are connected

Menu names checked against OpenAI’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Works with Claude Code · about 2 min

No key, nothing to install

  1. Open Terminal

    Mac: press Command+Space and type Terminal · Windows: open PowerShell

  2. Paste this command and press Enter

    claude mcp add --transport http --scope user dock https://trydock.ai/api/mcp
  3. Type /mcp in Claude Code

    You should see Dock listed as connected

  4. Try it

    Use Dock and tell me what you can do for me, then show me one thing

    ✓ If Claude Code says it is using Dock or shows a Dock tool in the answer, you are connected

Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Works with Cursor · about 2 min

No key, nothing to install

  1. Click this button to open Cursor

    Open in Cursor

    Cursor asks you to confirm; click Install

  2. Open the AI chat in Cursor in Agent mode

  3. Try it

    Use Dock and tell me what you can do for me, then show me one thing

    ✓ If Cursor says it is using Dock or shows a Dock tool in the answer, you are connected

Menu names checked against Cursor’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Works with VS Code · about 2 min

No key, nothing to install

  1. Click this button to open VS Code

    Open in VS Code

    VS Code asks you to confirm; click Install

  2. Open the AI chat in VS Code in Agent mode

  3. Try it

    Use Dock and tell me what you can do for me, then show me one thing

    ✓ If VS Code says it is using Dock or shows a Dock tool in the answer, you are connected

Menu names checked against VS Code’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Other apps that use MCP, such as Windsurf, Zed or Gemini CLI, each add servers differently. See how in the app list.

See every app that uses MCP →

Address for apps that connect over the web

Addresshttps://trydock.ai/api/mcp

JSON settings are under “For developers” below

Stuck? Ask people who use Dock💬 Discussion →
For developers: Terminal commands and JSON settings

Over the web

Claude Code

claude mcp add --transport http --scope user dock https://trydock.ai/api/mcp

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "dock": {
      "url": "https://trydock.ai/api/mcp"
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "dock": {
      "type": "http",
      "url": "https://trydock.ai/api/mcp"
    }
  }
}

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

At a glance

Downloads per weeki
Not on npm/PyPI
Verified domain
✓ trydock.ai
Connection
Runs in the cloud
Transport
streamable-http
Latest versioni
1.1.0
Published to registryi
May 15, 2026
Code last changedi
Apr 21, 2026
Maker
try-dock-ai
Website
trydock.ai
Registry status
Active

Which apps can use it

Based on how this server connects and on each app’s own docs, checked Nov 10, 2026.

Connect over the internet in

ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast

All apps, with pros and cons →

Related guides

What it can do

Tool names and descriptions exactly as the server reported them on Nov 10, 2026. The maker wrote them, not us; we show them as plain text.

  • list_workspaces

    List all workspaces the authenticated principal has access to. Returns workspace name (slug), mode (the default-view preference for the first surface), and creation date. A workspace is a container of one or more surfaces of any kind (see `create_surface`), in any combination, on

  • get_workspace

    Get details about a specific workspace by its slug, including columns of its primary table surface, member count, and row count. A workspace contains one or more surfaces of any kind, in any combination. Use `list_surfaces` to enumerate every surface, then that surface's own tool

  • list_rows

    List rows in a workspace's table surface. Returns rows with their data (a JSON object of column-name to value), creation time, the principal who created/updated each row, AND the row's `surface_slug` (the sheet it lives on). Empty array if no rows have been added yet. Multi-surfa

  • create_row

    Append a new row to a workspace's table surface. The data field is a JSON object with column-name keys. Status column accepts: drafted, queued, sealed, active, blocked. Works on any workspace; columns auto-seed on the first row if the table surface is empty. Multi-surface workspa

  • get_row

    Fetch a single row by id without listing the full table. Useful when a cue payload carries a row id and the agent only needs that one record. Returns the same row shape as list_rows.

  • update_row

    Update specific fields of an existing row. Only the fields provided in `data` are updated; others are preserved. Setting `surface_slug` to a different sheet than the row currently lives on MOVES the row to that sheet (position recomputes to the new sheet's tail unless `position`

  • delete_row

    Permanently delete a row from a workspace. This action cannot be undone.

  • move_rows

    Atomically move N rows from their current sheet(s) to a target sheet inside the same workspace. Use for programmatic data migration: dropping a batch of agent-produced drafts onto the right sheet, reorganizing content across LinkedIn / Twitter / Substack sheets, etc. All-or-nothi

  • get_doc

    Read a workspace's doc (TipTap rich-text) body. Format is negotiable via `format`: `markdown` (default — CommonMark + GFM, ready to feed to an LLM or render in a non-ProseMirror surface), `content` (TipTap JSON, round-trippable into update_doc for structural edits), `text` (plain

  • get_workspace_schema

    Return a table surface's column definitions so an agent knows what keys create_row/update_row will accept. Each column has `key` (the field name in row.data), `label` (human-readable), `type` (text | longtext | number | status | person | date | url | checkbox | select), `position

  • add_column

    Append a single column to a workspace's table schema. Position is auto-computed as next-after-max so the contiguity invariant holds. Key collision (409) if a column with the same key already exists. Editor role required. Use this for per-column additions; use get_workspace_schema

  • list_workspace_members

    List principals with explicit access to a workspace. Returns users (id, name, email; email visible only when the caller is in the same org) and agents (id, name, brandKey) along with their role (owner | editor | commenter | viewer). Used by agents to verify a workspace is actuall

  • check_workspace_private

    Check, on the server, whether a workspace is private to your owner right now: private, every member is your owner or one of your owner's agents, no open invite, no active file share link. Call it BEFORE writing anything owner-private (Voice profile, Second Brain, personal notes)

  • delete_workspace

    Archive a workspace. Soft-delete: rows, doc body, and activity history are preserved, and the workspace can be restored from the Archived filter on the Workspaces page. Every member loses access immediately. Idempotent: calling on an already-archived workspace returns its current

  • update_workspace

    Rename a workspace, change its slug, switch its default-view mode, or change its visibility (private | org). Pass any subset of `name`, `new_slug`, `mode`, `visibility`; fields you omit are left unchanged. Slug renames preserve old URLs via WorkspaceSlugAlias so previously-shared

  • share_workspace

    Add someone to a workspace at a specified role: a human by `email`, or an agent by `agent_id`. For an email that already belongs to a Dock user, they're added immediately and a notification email is sent; otherwise a 7-day invite token is minted that auto-accepts on magic-link si

  • update_workspace_member

    Change an existing workspace member's role. Editor role required to caller. Owner-tier transitions (promoting to or demoting from owner) require an owner caller. Demoting the sole owner is blocked; promote someone else to owner first. No-op when the role is unchanged. Emits `memb

  • remove_workspace_member

    Remove a workspace member, or revoke a pending invite by passing its invite id as `member_id`. Editor role required; owner-tier removals require an owner caller. Sole-owner removal is blocked; promote someone else first. Note: if the workspace visibility is `org`, removing an exp

  • update_doc

    Replace a workspace's doc body. Takes EITHER TipTap JSON (`content`) OR Markdown (`markdown`): pass markdown when you're producing prose from scratch (CommonMark + GFM is the format every LLM emits natively), pass TipTap JSON when you need structural edits to an existing doc (rou

  • validate_doc_markdown

    Pre-flight check on markdown BEFORE writing it via update_doc / append_doc_section. Returns { ok, errors, warnings, parsed } with parsed counts per format type (imageCount, videoCount, mermaidCount, mathCount, svgCount, calloutCount, crossRefCount, mentionCount, embedCount, detai

  • update_doc_section

    Replace a single section of a workspace's doc body, identified by its heading text. The targeted edit complement to `update_doc` (full replacement) and `append_doc_section` (append-only at the end). Use this when the agent maintains a recurring section (e.g., a 'Status' block in

  • append_doc_section

    Append a chunk of Markdown to the END of a workspace's doc body. Designed for crons + ingest agents that produce content in timestamped chunks (changelog updates, daily standups, batch summaries). Same markdown surface as update_doc: supports CommonMark, GFM, **`![alt](url)` inli

  • get_html

    Read an HTML surface's body. HTML surfaces (Surface.kind="html") store mockup or full-page content as three text fields (html, css, js) rendered together inside a sandboxed iframe. Use `list_surfaces` to enumerate html surfaces in a workspace. Omit `surface_slug` to read the prim

  • update_html

    Write an HTML surface's body. Pass any of `html` / `css` / `js`; omitted fields stay unchanged. Pass empty string to clear. The surface renders in a sandboxed iframe with no access to Dock cookies, storage, or parent DOM, and scripts do not run there today: inline ` ` and the `js

  • validate_html

    Pre-flight check on html / css / js BEFORE writing via update_html. Returns { ok, errors, warnings, parsed } where parsed has byte counts per field and `htmlDropped` (true if the sanitizer would strip anything from `html`) plus `htmlRemoved`, the list of tags (`{ tag, count }`) a

  • create_workspace

    Create a new workspace in the caller's org. Works for both user and agent callers; agent-created workspaces attribute to the agent and enroll the agent's owning user as a co-owner so the human sees it in their dashboard. The new workspace is seeded with one primary surface matchi

  • get_recent_events

    Get recent activity events for a workspace. Who did what, when. Useful for understanding what's happened since you last looked.

  • search

    Search across everything the caller can already touch: workspace names, row cell values, and doc sections/paragraphs. Returns ranked hits (score 0-1) with a navigable URL per hit so the agent can open the exact row or doc section. Access-gated; never returns hits from workspaces

  • get_billing

    When your human's access stops (`yourAccess`: their trial end or plan state; the ONLY date to quote for that), plus the caller's org resource caps and usage: active counts and caps for agents, members, workspaces, rows per workspace, API calls, webhooks, and the message bundle, p

  • upgrade_plan

    ⛔ RETIRED PLAN SYSTEM — do not offer this as Dock's pricing. Moves the caller's org between the retired org plans, which buy resource CAPS only and are not what Dock sells: Pro (10 agents, 20 members, 200 workspaces, 5k rows per workspace) or Scale (30 agents, 60 members, 1,000 w

  • downgrade_plan

    ⛔ RETIRED PLAN SYSTEM — not Dock's pricing, and it does not change your human's per-person plan or credits. Schedules the caller's ORG to drop from a retired org plan (Pro or Scale, which only set resource caps) to Free at the end of the current billing period; the org keeps thos

  • request_limit_increase

    Ask Dock to raise an org limit (agents, workspaces, rows, or other). We record the signal on the admin side; there's no reply loop. Use this whenever you hit one of those caps. The Pro/Scale org plans are retired: never offer one as the fix, even when a cap error names it.

  • list_surfaces

    List the surfaces inside a workspace. A workspace can hold surfaces of any kind (see `create_surface`), in any combination, one or many of each; this tool tells you exactly what it has. Each surface has its own slug used in surface-scoped tool calls. Order matches the on-screen s

  • create_surface

    Create a new surface inside a workspace. `kind` picks `table`, `doc`, `html`, `files`, or `video`. Optional `slug` (lowercase kebab-case, 3-64 chars); when omitted the server slugifies `name` and appends a numeric suffix on collision. Optional `columns` sets a `table`'s starting

  • update_surface

    Rename, reslug, reorder, restore, OR replace the column schema of a surface. Pass any subset of `name`, `new_surface_slug`, `position`, `columns`, `archived`. **Restore**: pass `archived: false` with the archived surface's `surface_slug` (find it with `list_surfaces archived: tru

  • delete_surface

    Archive a surface (soft-delete). Rows + doc body are preserved: restore it with `update_surface` and `archived: false` (archived surfaces are listed by `list_surfaces archived: true`). Idempotent: calling on an already-archived surface returns its current archivedAt unchanged. Ca

  • list_api_keys

    List API keys. Agent callers see only the key they're authenticated with (a one-row response: id, prefix, lastUsedAt, the workspace it's bound to). User callers (cookie session) see every key for every agent they own. Plaintext is never returned; the key body is shown only once a

  • rotate_api_key

    Atomically mint a new API key with the same agent / workspace / scopes / name and revoke the old one. Returns the new plaintext (`key`) once; store it before discarding the response. Subsequent requests with the OLD key return 401, so swap creds before retrying. Agents may rotate

  • revoke_api_key

    Revoke an API key (soft-delete via `revokedAt`). Subsequent requests with the key return 401. Agents may revoke ONLY their own key; calling this is effectively a self-destruct, the response itself completes but the very next request will fail. Users may revoke any key they own. T

  • request_revoke_agent_key

    Ask the human owner to revoke ANOTHER agent's active API key (sibling agent). The MCP `revoke_api_key` tool is self-only by design; this is the cross-agent escalation path. Returns { status: 'approval_required', approval_url, polling_url, expires_in }: print approval_url in chat

  • request_rotate_agent_key

    Ask the human owner to rotate ANOTHER agent's active API key (mint a new one + revoke the old). Same shape as request_revoke_agent_key: returns an approval_url, requires the target agent's owner to click. On approval the old key stops working at once. The new key's plaintext is I

  • list_webhooks

    List webhook endpoints registered on an org. Returns each webhook's id, url, subscribed events, active flag, and an 8-char `secretPreview` of the signing secret (full secret is only returned at create / rotate-secret time). Any org member (user or agent) can list. Use to audit wh

  • create_webhook

    Register a new webhook endpoint on an org. The URL must be public (loopback / private ranges / cloud metadata are blocked at create-time AND re-validated by DNS at delivery-time). Events array filters which event kinds the endpoint receives: pick from row.* / comment.* / member.*

  • update_webhook

    Toggle a webhook's `active` flag on or off. Inactive webhooks are skipped at delivery time (no retry queue, no log row) but the endpoint config is preserved so flipping back is one call. Use to silence a noisy receiver during maintenance without losing its URL + secret + event su

  • rotate_webhook_secret

    Mint a fresh signing secret for a webhook. The new `secret` is returned exactly once; copy it to the receiver before the next event lands. After this call, deliveries are signed with the new secret only; receivers still validating against the old one will reject (401) until updat

  • delete_webhook

    Permanently delete a webhook endpoint. The URL stops receiving events immediately and the secret is destroyed; recreate from scratch if you need to re-add it. To pause without losing config, use update_webhook with active:false instead.

  • send_message

    Send a direct message to another agent or human in the messaging substrate. Wires through cue.dock.svc, the same path the /live UI uses, so the recipient sees this message in their drawer (and, once they have a Dock-connected agent worker running, their agent harness's inbox). Ad

  • create_support_ticket

    File a support ticket. For agents on the Dock team only: any other caller is refused. If you are not on the Dock team, email agent-support@trydock.ai with the problem yourself if you have your own email address (send_email on cloud, email_owner on desktop); otherwise ask your hum

  • list_my_support_tickets

    List the support tickets YOU filed (READ-ONLY) — the same tickets `create_support_ticket` creates, so you can check on one after filing it. Scoped exactly like the dashboard at /settings/support: you see tickets you filed yourself, and — if you are a human caller — tickets filed

  • list_sheet_functions

    List the Dock Sheets formula functions an agent can use in a cell carrier. Returns the canonical name, signature, one-sentence description, category (Math/Logic/Text/Date/Lookup/Predicates), rollout slice (v1/v2/v3/v4), and at least one worked example per function. Use this befor

  • validate_formula

    Parse-check a formula expression server-side without writing anything. Returns { ok, error?, rewrittenFormula?, referencedFunctions, unknownFunctions }. Use BEFORE update_row / create_row when the formula references functions or syntax you're not 100% sure of: a `=SUMIFS(...)` wi

  • evaluate_formula

    Evaluate a formula expression against an actual Dock workspace's columns + rows, server-side, returning the same display value the UI's HyperFormula engine would render. Two modes: STANDALONE (omit `workspace_slug`) — evaluates against an empty grid; useful for `=SUM(1, 2, 3)` or

  • add_comment

    Post a new comment on any target in a workspace: a row, a cell, a doc text range, an html element, an entire surface, or the workspace itself. Polymorphic target shape mirrors the REST POST /api/workspaces/:slug/comments. For threading, pass `parentId` to hang the new comment as

  • list_comments

    List comments in a workspace. Filter by `target_type` (row, cell, doc_range, html_element, surface, workspace), `target_id`, `surface` (returns every comment anchored to any element of one surface, useful for 'open threads on this surface'), `status` (open | resolved | all, defau

  • get_comment_thread

    Fetch a single comment with its replies + reactions in one round trip. Pass any comment id in the thread (root or reply). Returns `{ comment, replies }` where each entry includes aggregated reactions (`emoji`, `count`, `mine`). Use this when an agent receives a `comment.added` we

  • reply_to_comment

    Convenience wrapper around `add_comment` for the common reply case. Pass the parent comment id and the body; the handler reconstructs the target from the parent (no need for the agent to remember whether the parent was a row, cell, doc_range, html_element, surface, or workspace c

  • resolve_comment

    Mark a comment thread resolved. Idempotent: calling on an already-resolved thread returns the existing `resolvedAt` unchanged. Fires `comment.resolved`. Pair with `unresolve_comment` for the reverse. Used by agents to close a feedback thread once they've iterated on the change th

  • unresolve_comment

    Re-open a previously-resolved comment thread. Idempotent on already-unresolved comments. Fires `comment.unresolved` with `reason: 'manual'`. (Auto-unresolve on reply fires the same event with `reason: 'reply'` and is handled by `add_comment` / `reply_to_comment`.)

  • react_to_comment

    Add or remove an emoji reaction to a comment. Reactions are per-principal: each (commentId, principalId, emoji) combination is unique. `action: 'add'` is idempotent (re-adding the same emoji is a no-op); `action: 'remove'` deletes the row if present. Fires `comment.reaction_added

  • list_files

    List the folder + file children of a Files surface (kind='files'). Folders sorted first by position then name; files sorted by name. Returns folders[], files[] with cuids agents can pass to `get_file` / `delete_file`. `parent_folder_id` defaults to null (= root of the surface); p

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 15, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified against the domain trydock.ai (the registry checks domain ownership)

  • ! Caution

    Still maintained

    Code last changed 7 months ago, more than 6 months ago

  • – Not applicable

    Has a licence

    Not applicable: a cloud server run by the owner of trydock.ai; you don't run code from the repo

  • ✓ Pass

    Endpoint responds

    Responded in 160 ms (HTTP 200)

  • – Not applicable

    Sign-in with OAuth

    No sign-in needed

  • ✓ Pass

    No hidden instructions in tool descriptions

    Read 60 tool descriptions and found no hidden instructions to the AI

Discussion

Ask, share a tip or report that it does not work. Sorted by what people marked helpful.

No posts yet. Be the first to ask or share.

Posts here are written by users, not the PopNx team.

Sign in with Google to post

User reviews

No reviews yet

Sign in with Google to write a review

Compared with others in Design, images & audioi

  • More stars than 0% of the other 3064 servers in this category
  • Published to the registry more recently than 7% of the other 3064 servers in this category
  • Basic checks equal to or better than 51% of the other 3064 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Dock safe?

It passed 3 of 4 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

The registry does not list a required key, though some servers ask you to sign in on first use.

Does it run on my computer or in the cloud?

It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.

Is it still maintained?

The GitHub repo last changed 7 months ago, and the latest version (1.1.0) reached the registry 6 months ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT on the web (full MCP on Business and above; Pro read-only).

What can I use instead?

In the same category: Figma Context MCP, AutoClip, Next AI Draw.io

Others in the same category

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Figma Context MCP

Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.

by GLipsWidely used↓ 152.1K/wk★ 16.2KUpdated 5 months ago

Runs on your computer

AutoClip

Clip long videos into short clips with covers and captions. Local CLI and MCP.

by zhouxiaokaWidely used↓ 205/wk★ 10.4KUpdated 18 days ago

Runs on your computer

Next AI Draw.io

draw.io diagrams your AI agent draws on a live browser canvas that you can also edit by hand

by DayuanJiangWidely used↓ 21.7K/wk★ 36.9K Stars for the whole repoUpdated yesterday

Runs on your computer

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

@trydock/mcp

Local stdio bridge to the Dock MCP server. Point any MCP-capable agent (Claude Desktop, Cursor, Windsurf, Zed, Cline, Continue) at your Dock workspaces in one config change.

Do you need this package?

If your agent supports remote MCP connectors (Claude.ai web,

Claude.ai Projects), you don't need this — add

https://trydock.ai/api/mcp as a custom connector and follow the OAuth

flow. See the MCP reference.

This package is for agents that only speak local stdio MCP — the

dominant pattern for Claude Desktop and most code-editor agents today.

Quickstart

  1. Get an API key in Dock's Settings → API keys (trydock.ai).
  2. Add the config for your agent below.
  3. Restart the agent. You'll see Dock's 8 tools appear.

Configs

All clients follow the same pattern: run npx -y @trydock/mcp, pass DOCK_API_KEY in env. Per-client JSON snippets are in configs/:

ClientFileTypical config path
Claude Desktopconfigs/claude-desktop.json~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
Cursorconfigs/cursor.json~/.cursor/mcp.json
Windsurfconfigs/windsurf.json~/.codeium/windsurf/mcp_config.json
Zedconfigs/zed.json~/.config/zed/settings.json (under context_servers)
Cline (VS Code)configs/cline.jsonVS Code settings → cline.mcpServers
Continueconfigs/continue.json~/.continue/config.json

Example (Claude Desktop):

{

"mcpServers": { "dock": { "command": "npx", "args": ["-y", "@trydock/mcp"], "env": { "DOCK_API_KEY": "dk_..." } } } }

Tools

All 8 tools are forwarded to the hosted Dock server. JSON schemas live in schemas/.

ToolPurpose
list_workspacesEnumerate workspaces you can access
get_workspaceFetch a workspace by slug
list_rowsRead rows from a table-mode workspace
create_rowAppend a row
update_rowPartial-merge update
delete_rowRemove a row
create_workspaceCreate a new workspace
get_recent_eventsRead the activity log

Full reference with examples: trydock.ai/docs/mcp.

How the bridge works

The bridge is a ~100-line Node process (src/bridge.js). Every JSON-RPC message your agent writes on stdin is forwarded over HTTPS to https://trydock.ai/api/mcp with your DOCK_API_KEY as Bearer auth. The hosted server owns authentication, rate limits, audit, and tool execution. The bridge stores no state and logs no request bodies.

Environment variables:

VariableRequired?Purpose
DOCK_API_KEYyesBearer token (get one from Settings → API keys)
DOCK_MCP_URLnoOverride the upstream endpoint (staging / self-host). Default: https://trydock.ai/api/mcp

Security

  • Your API key is only held in the agent's environment and passed on each HTTPS call. It's never logged, never written to disk by this bridge.
  • Rotate keys any time in Dock's Settings → API keys. Old keys return 401 immediately on revocation.
  • Keys are stored as SHA-256 hashes on Dock's side, not plaintext. A Dock DB leak wouldn't expose usable credentials.
  • See the full security doc for the threat model, the revocation runbook, and what data is audited.

License

MIT. Copyright © 2026 Vector Apps, Inc.