Dock
AI workspace for you, your team, and every agent.
Connector by trydock.ai · Domain verified by the MCP Registry
Install
Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install connector/trydock-ai-dock
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Remote endpoint
https://trydock.ai/api/mcpRemote (HTTP)
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.
- Tools
- 33 read · 35 write · 11 delete · 2 not yet classified
- Secrets
- None asked for
- Install scripts
- Nothing to install (hosted)
- Runs as
- Hosted (remote endpoint)
Tools by what they do 81
From the running server's own tool list (tools/list) on Oct 25, 2026.
Read 33 · Look things up without changing anything.
check_workspace_privateevaluate_formulaget_billingget_comment_threadget_docget_fileget_htmlget_recent_eventsget_rowget_video_transcriptget_workspaceget_workspace_schema
Show 21 more tools
list_api_keyslist_capabilitieslist_commentslist_fileslist_my_support_ticketslist_recent_fileslist_rowslist_sheet_functionslist_surfaceslist_videoslist_webhookslist_workspace_memberslist_workspacesrequest_connectionrequest_limit_increaserequest_rotate_agent_keysearchvalidate_doc_markdownvalidate_formulavalidate_htmlwatch_video
Write 35 · Create, change, send or run things.
add_columnadd_commentadd_videoaddress_bookappend_doc_sectionbulk_create_rowsbulk_update_rowscreate_file_uploadcreate_rowcreate_support_ticketcreate_surfacecreate_video_upload
Show 23 more tools
create_webhookcreate_workspacedowngrade_planedit_videomove_rowsreply_to_commentresolve_commentrotate_webhook_secretsend_messageshare_fileshare_workspaceunresolve_commentupdate_docupdate_doc_sectionupdate_htmlupdate_rowupdate_surfaceupdate_videoupdate_webhookupdate_workspaceupdate_workspace_memberupgrade_planupload_file
Delete 11 · Delete, drop, revoke or wipe things.
delete_filedelete_rowdelete_surfacedelete_webhookdelete_workspacereact_to_commentremove_videoremove_workspace_memberrequest_revoke_agent_keyrevoke_api_keyrevoke_file_share
Not yet classified 2 · We could not tell from the name and description.
pull_capabilityrotate_api_key
Network hosts it talks to 1
trydock.ai· found in remote endpoint, install command
Files it touches
- Any path the agent passes to its tools
Tools (81)
As the server listed them on Oct 25, 2026. Descriptions are the server’s own words; hidden characters are shown as [U+…].
add_columnAppend 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 + update_surface with `columns` for full schema replacement or reordering. Multi-surface workspaces accept `surface_slug` to target a specific table sheet (use `list_surfaces` to enumerate); omit to fall through to the workspace's primary table surface.
add_commentPost 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 a reply (the server flattens nested replies to single depth and auto-unresolves a resolved parent). Mentions are an array of `{ kind: 'user'|'agent', id, label }` triples; the server validates each mention's access to the workspace before accepting. Fires `comment.added` (and `comment.unresolved` when a reply reopens a…
add_videoAdd a video to the end of a video surface, from an https URL to an mp4, webm, mov or m4v file. A surface holds several videos (variants, cuts, a short playlist) that people flip through; give each a short `label` like "Variant B" so they can tell them apart. Create the surface first with `create_surface` and `kind: "video"`. Pass `content_type` when the URL has no file extension. For a file on your own machine, get a link with `create_video_upload` first. Dock downloads the file and keeps its OWN copy, so a provider's expiring link (e.g. a generated Seedance/Kling video) keeps playing; pass th…
address_bookLists the agents you can reach — your own agents AND agents shared to you from other owners. To MESSAGE any of them, use the `message_teammate` tool (it delivers AND wakes the recipient). Do NOT use send_message for an agent — that path does not wake them and the message can strand. Each entry has three identity fields, and it matters which you use: • `name` — the agent's DISPLAY NAME, for reading only. Never address by it (names are not unique and change). • `address` (`<name>@<owner>.<org>`) — a human-readable 3-part address showing the agent's OWNER and ORGANIZATION. It can change (renames)…
append_doc_sectionAppend 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, **`` inline images** (an HTTPS URL; for a local file get one with `create_file_upload`), **lone video URLs** (`.mp4`/`.webm`/`.mov`/`.mkv`/`.m4v` → native `<video>` player; for a local video get one with `create_video_upload`, up to 100 MB), ```mermaid diagrams, $math$/$$math$$ KaTeX, > [!NOTE]/[!TIP]/[!IMPORTANT]/[!WARNING]/[!…
bulk_create_rowsAppend many rows to a workspace's table surface in ONE call — the bulk version of create_row. Use this instead of looping create_row when ingesting more than a few rows (lower latency + token cost). Pass `rows` as an array of `{ data: {...} }` objects, each `data` a column-name → value map (same shape create_row takes). Up to 500 rows per call. WRITE AS YOU GO on long jobs (scraping, enrichment, any list you build over many steps): send each batch of about 25-50 rows as soon as it is ready, never one call at the end, so a hang, timeout or restart loses one batch at most. ALL-OR-NOTHING: if any…
bulk_update_rowsUpdate many existing rows in ONE call — the bulk version of update_row. Use this instead of looping update_row when changing more than a few rows (much lower latency + token cost for sheet edits). Pass `updates` as an array of `{ id, data }`: `id` is the row id (from list_rows / get_row), `data` is a column-name → value map of just the cells to change. Each row's data is MERGED into the existing row (last-write-wins per field), so you only send the cells you're changing. Up to 500 rows per call. ALL-OR-NOTHING: if any id is missing or in another workspace the whole batch is rejected and nothin…
check_workspace_privateCheck, 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) and before every such write session. Returns { ok, reasons, private, member_count, non_owner_members, pending_invites, active_file_shares }, counts only. If ok is not true, or the call errors, times out or is unavailable, write NOTHING owner-private there and tell your owner.
create_file_uploadGet a one-time upload link for a file that is on YOUR machine (a PDF, image, spreadsheet, audio, archive, anything over ~3 MB), so you can put it into Dock without a public host. Returns a ready `curl` command: run it with your file path in place of `<path to your file>`; its JSON response has a `url`. Then call `upload_file` with that `url` (plus `surface_slug` and `filename`). The link accepts ONE upload of an allowed file type, up to your plan's per-file cap: 5 MB on a trial or Starter, and 100 MB per link on Standard and Scale. The `max_bytes` in the response is the limit that applies, so …
create_rowAppend 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 workspaces accept `surface_slug` to target a specific sheet (use `list_surfaces` to enumerate); omit it to fall through to the workspace's primary table surface. **Unmapped data fields:** Keys in `data` that don't match any existing column are still STORED on the row (nothing is dropped), but they won't render in the table U…
create_support_ticketFile 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 human to (they can also file from Settings → Support). Prefer request_limit_increase when the user is simply hitting a plan cap.
create_surfaceCreate 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 columns; without it the table starts EMPTY and your first row write creates the columns its data needs. Ignored for other kinds. `html` surfaces start with an empty body — write content via `update_html`. `files` surfaces start empty; browse them with `list_files` / `get_file` / `list_recent_files`, and add files with …
create_video_uploadGet a one-time upload link for a video file that is on YOUR machine (one you rendered, edited or downloaded), so you can put it on a video surface. `add_video` needs an https URL, and inline base64 is unreliable for video, so use this instead. Returns a ready `curl` command: run it with your file path in place of `<path to your file>`; its JSON response has a `url`. Pass that `url` to `add_video`. The link accepts ONE upload of an mp4, webm, mov or m4v file up to 100 MB and expires in 15 minutes. Editor role required.
create_webhookRegister 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.* / workspace.* / doc.*; an empty array means "none" so always pass at least one. Returns the signing `secret` exactly once (whsec_… prefixed); store it on the receiver to verify HMAC signatures on incoming requests.
create_workspaceCreate 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 matching `mode`: `doc` → a Notes surface (for prose), `table` → a Sheet surface (for records), `html` → a Mockup surface (sandboxed HTML preview). Decide the surface before you create: prose (briefs, notes, summaries, drafts) → `doc`; records with shared columns (tasks, leads, rows) → `table`; a deliverable that IS html (a p…
Show 66 more tools
delete_fileDelete a file by id. It moves to a 30-day trash, and its old link stops working immediately. Restorable during those 30 days via the REST PATCH endpoint (`PATCH /api/workspaces/{slug}/files/{id} body: {restore:true}`); after that the cleanup deletes it for good and refunds the storage quota. If the delete can't complete, the file is left as it was and the call fails, so retry. Editor role required.
delete_rowPermanently delete a row from a workspace. This action cannot be undone.
delete_surfaceArchive 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. Cannot archive the only live surface in a workspace; create another first. Editor role required. Emits `surface.archived`.
delete_webhookPermanently 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.
delete_workspaceArchive 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 archivedAt without changing anything. Requires the owner role on the workspace. Pass `mode: "web"` to surface a click-to-approve URL for the human (recommended for any non-trivial workspace); the first call returns { status: 'approval_required', approval_url, polling_url }; print approval_url in chat, user clicks + ap…
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 those caps until then. No-op when already on Free. Consent-gated. Two consent surfaces, you pick via `mode`: (1) `chat` (default): FIRST call returns { status: 'confirmation_required', confirm_token, message, expires_in }; surface to your user and re-call within 60s with `confirm_token` set. (2) `web`: FIRST call returns {…
edit_videoMake a new version of a video in a video surface. Combine any of: `remove` to take ranges OUT and keep everything else ("cut that bit", "lose the radio shot": find the exact start and end with watch_video first); `keep` to keep ONLY one span and drop the rest ("just give me 0:10 to 0:20"); `format` mp4, mov or webm; `width`/`height` to resize (give one to keep the shape); `aspect` to center-crop to 16:9, 9:16, 1:1, 4:5, 4:3 or 3:4; `fps`; `speed` 0.25 to 4; `mute`. All times are in the ORIGINAL video's timeline. The reply's `summary` says in words what was done ("Original 0:30.08, result 0:28.…
evaluate_formulaEvaluate 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 any formula with no cell references. IN-WORKSPACE (pass `workspace_slug`, optionally `at`) — loads the workspace's grid, evaluates the formula as if pasted into the `at` cell (or A1 if omitted), resolves real refs against actual data. Returns { ok, displayValue, error? }. Workspace mode requires read access; standalon…
get_billingWhen 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, plus card-on-file and next invoice date. The org caps are not your human's plan or trial. These caps are live and enforced — use them. This tool does NOT price anything: Dock sells Dock Tokens, per user. Any price-shaped field in the response is a retired plan and must never be quoted — read `currentPlans.tiers` for wha…
get_comment_threadFetch 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` webhook with a `parentId` and needs full context before composing a reply.
get_docRead 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 text, best for search, summarisation, word-count heuristics), or `all` for the legacy three-in-one shape. Default is `markdown` because it's the slice agents need 95% of the time and the JSON form on a long doc can blow past the agent harness's tool-result token cap. Pass `format: "content"` only when you're round-tri…
get_fileFetch metadata + a download URL for a single file by id. The `download_url` field is a Dock URL (not a storage URL): GET it with your Dock API key and access is re-checked on every request. Useful for an agent reading file contents server-side (HTTP GET the URL) or surfacing a download link in a reply.
get_htmlRead 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 primary html surface; pass it to target a specific html surface. Empty (never-written) html surfaces return { html:"", css:"", js:"" }. 404 when `surface_slug` doesn't match a live html surface. Requires viewer role.
get_recent_eventsGet recent activity events for a workspace. Who did what, when. Useful for understanding what's happened since you last looked.
get_rowFetch 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.
get_video_transcriptWhat is said in a video in a video surface, as timestamped segments. Transcribed on first use, then cached on the video until its file changes. Pass `start`/`end` for a span. Viewer role required.
get_workspaceGet 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 tools (`list_rows`, `get_doc`, `get_html`, ...) to read or write it.
get_workspace_schemaReturn 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`, and, for status/select columns, the allowed `options`. Empty array on doc-only workspaces; callers should still be able to write rows (columns auto-seed on first write). Multi-surface workspaces accept `surface_slug` to scope to a specific table sheet (use `list_surfaces` to enumerate); omit to fall through to the w…
list_api_keysList 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 at create/rotate time.
list_capabilitiesList the provider API keys your owner has stored in their Vault (e.g. Gemini, ElevenLabs, OpenAI) so you can use them in a task. Returns `capabilities`: the exact NAMES of the keys your owner has vaulted. Pass one of these names verbatim to `pull_capability` — do NOT guess or normalize it (a key may be vaulted as "Gemini", not "GEMINI_API_KEY"). Names only, never secrets, so this is safe to call freely. IMPORTANT: this lists what EXISTS in the Vault — it is discovery, NOT authorization to use a key. Only pull and use a key when your OWNER directs you to in this thread. Takes no arguments.
list_commentsList 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, default open), `mentioning_me: true` for comments that @-mention the caller, or `author: <principalId>` for comments by a specific user/agent. Returns up to 200 comments per call ordered by `createdAt` asc, with `surfaceSlug` denormalized for doc_range/html_element/surface targets so reply paths work even across archive bou…
list_filesList 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); pass a folder id to descend into a sub-folder.
list_my_support_ticketsList 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 by agents you own. You never see another person's tickets, and never another org's. Results are for your CURRENT org: a ticket you filed in a different org shows up when you are in that org, not here. Newest first, capped at 100. Filter with `status` ('open' | 'in_progress' | 'closed'; omit for all). Each entry has id,…
list_recent_filesList the 50 most recently updated files in a Files surface, sorted by `updatedAt` descending. Flat surface-wide list; ignores folder structure. Useful for an agent answering 'what changed lately' or 'show me yesterday's uploads' without paging through the folder tree. Folders are omitted from this view.
list_rowsList 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-surface workspaces: pass `surface_slug` to scope to one sheet; omit to return rows from every surface in the workspace (back-compat: pre-multi-surface clients keep working).
list_sheet_functionsList 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 before writing a formula via update_row / create_row so you only reference functions that actually exist (no #NAME? errors). Also returns the alias map (e.g. CONCAT → CONCATENATE) so you can pick the canonical name even when writing the alias the UI accepts. Optional filters: `category` narrows to one category, `slice` narr…
list_surfacesList 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 surface order. Archived surfaces are hidden by default; pass `archived: true` to include them.
list_videosList the videos in a video surface, in play order: id, position, label, name, url, content type, size and duration. Omit `surface_slug` for the workspace's first video surface. Viewer role required.
list_webhooksList 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 what's subscribed before adding or removing endpoints.
list_workspace_membersList 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 actually shared before writing output the team is expected to see. It cannot tell you whether a workspace is private to your owner (it does not show whose agent each agent is, open invites or file share links): use check_workspace_private for that. On a private workspace that is not private to your owner, the result includes …
list_workspacesList 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, one or many of each. Use `list_surfaces` to see what a given workspace actually contains.
move_rowsAtomically 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-nothing: if any rowId doesn't belong to this workspace, the entire batch fails before any write fires. Idempotent: rows already on the target sheet are skipped (returns `skipped` count). Rows land at the destination sheet's tail in the order rowIds was supplied. Emits one `row.moved_surface` event per row that actually move…
pull_capabilityPull one provider API key your owner has vaulted, so you can use it for the task at hand (e.g. call the Gemini or ElevenLabs API). Pass `name` = the EXACT capability name from `list_capabilities` (a mismatched name fails the same way a missing key does — re-check the list first if it fails). The secret is returned to you directly and securely; USE it in the API call, and NEVER echo, log, quote, or paste the key value into a message, a doc, a comment, or any tool output. AUTHORIZATION — read before calling: only pull a key when your OWNER directs you to in THIS thread, in their own voice, for T…
react_to_commentAdd 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` / `comment.reaction_removed`. Use this for lightweight agent acknowledgement (👍 on a request before reading, 👀 to mark in-progress, ✅ when done), cheaper than a full reply.
remove_videoRemove one video from a video surface. Get `video_id` from `list_videos`. Editor role required. Emits `video.updated`.
remove_workspace_memberRemove a workspace member. 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 explicit member of the same org leaves them with virtual editor access via the org-membership branch. Consent-gated for agents: the FIRST call returns { status: 'confirmation_required', confirm_token, message, expires_in }. Surface the message to your user and, if they say yes, re-call this tool within 60s with `confirm_token` set to the same token. User callers (cookie session) skip the …
reply_to_commentConvenience 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 comment). Re-opens a resolved parent. Same threading rules as add_comment: nested replies flatten to single depth, so reply-to-reply re-points at the root.
request_connectionAsk your owner to connect a third-party app (Gmail, Slack, Notion, Linear...) so you can use its tools. It does NOT connect anything and does NOT give you access — it reports the state and tells you what to ask for. Call it when a task needs an app you cannot currently reach, then tell the user plainly that you have asked. Do not call it repeatedly for the same app in one conversation; one ask is enough, and the answer is theirs to give. If your owner says no to an app, call it once with owner_declined: true so the no is remembered; asks for an app they declined are refused for 30 days, unless…
request_limit_increaseAsk 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.
request_revoke_agent_keyAsk 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 for the target agent's owner to click; poll polling_url for the result. Approval gate: the approving user must be the target agent's owner (Agent.ownerUserId match). Use this when you've spotted credential leakage, misbehaviour, or a stuck sibling that needs a clean kill; surface a useful `reason` so the human knows wh…
request_rotate_agent_keyAsk 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 INTENTIONALLY not returned to you: it is shown once to the approving owner on the approval page, and they hand it to the target agent out of band, so expect the target agent to be offline until they do. Use when you've spotted leakage.
resolve_commentMark 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 the reviewer asked for.
revoke_api_keyRevoke 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. To swap creds without going dark in the gap, use `rotate_api_key` instead.
revoke_file_shareSoft-revoke a share token minted via `share_file`. The public `/share/files/<token>` URL stops resolving immediately. Idempotent: revoking an already-revoked token returns `alreadyRevoked: true` without error. Editor role required.
rotate_api_keyAtomically 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 ONLY their own key (omit `id` to default to it); users may rotate any key they own. Use this for routine credential hygiene or after a suspected leak.
rotate_webhook_secretMint 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 updated. Use after a suspected leak or as part of routine rotation hygiene.
searchSearch 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 the caller can't open. Use when the user references something by keyword ("find my launch-plan workspace", "which row mentions Redis?"). Faster than listing workspaces and iterating.
send_messageSend 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). Address format is `<agent_slug>@<user_slug>`: `flint@socrates` targets the `flint` agent owned by user `socrates`; `self@<user_slug>` targets a human's synthetic self-agent (use this to message a human directly when you don't know which of their agents to ping). Use this to message a HUMAN (`self@<user_slug>`); to reach …
share_fileMint a public share token for a file. Returns a `url` of the form `https://trydock.ai/share/files/<token>` that anyone (no auth) can open to view + download the file. The token is 32 random bytes (~256 bits of entropy) so guessing is infeasible. Revoke later with `revoke_file_share`. Editor role required. Use when a workflow needs to hand the file off to an external system that can't authenticate.
share_workspaceInvite a human (by email) to a workspace at a specified role. If the email already belongs to a Dock user they're added immediately and a notification email is sent; if not, a 7-day invite token is minted that auto-accepts on magic-link sign-in. Editor role required on the workspace. Emits `member.joined` (existing user) or `member.invited` (new user). Use update_workspace_member to change a role afterwards, remove_workspace_member to revoke.
unresolve_commentRe-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`.)
update_docReplace 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 (round-trip from get_doc, mutate, write back). Beyond CommonMark + GFM, the markdown layer recognizes: - **** → inline image. Use an HTTPS URL (HTTP fires browser mixed-content warnings; data: URIs are rejected by `allowBase64: false`). For an image on your own machine, call `create_file_upload`, run…
update_doc_sectionReplace 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 a launch-prep doc, an 'Outcomes' block in a meeting note) and only needs to refresh that one piece. Without it, agents are forced into 'GET → splice → PUT' which costs tokens, costs latency, and races against any concurrent human edit elsewhere in the doc (last-write-wins clobbers). Section semantics: the FIRST heading…
update_htmlWrite 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 on a separate origin (`render.trydock.ai`) with no access to Dock cookies, storage, or parent DOM — you have free rein inside that boundary. Use any web technology the browser supports: external CDN fonts and CSS (Google Fonts, Tailwind CDN, Fontsource), JS libraries (three.js, GSAP, Chart.js, anime.js), inline `<script>`, Web Workers, WebGL, video, audio, canvas, dynamic DOM, complex CSS animations. Per-field caps: html 256 KB, c…
update_rowUpdate 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` is also set). Same surface as current → no-op move. **Unmapped data fields:** Keys in `data` that don't match any existing column on the row's surface are still STORED on the row, but they won't render in the table UI until the column exists. The response carries an `unmapped_fields` array plus a human-readable `warni…
update_surfaceRename, 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: true`) to unarchive it; its rows and doc body come back, it is placed last among the workspace's surfaces, and it emits `surface.unarchived`. Refused if another live surface now owns that slug. To archive, use `delete_surface`. Position is 0-based and is normalised across siblings so positions stay contiguous. Editor role…
update_videoChange one video in a video surface: swap its file (`url`), rename it or relabel it. Get `video_id` from `list_videos`. Omitted fields stay as they are. Editor role required. Emits `video.updated`.
update_webhookToggle 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 subscription.
update_workspaceRename 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 links keep resolving. Visibility flips disconnect every live SSE subscriber so reconnects re-authenticate against the new visibility. Editor role required; only the workspace owner can change visibility. Emits `workspace.renamed` and/or `workspace.visibility_changed`. Visibility WIDENING (private → org) is consent-gat…
update_workspace_memberChange 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 `member.role_changed` with from/to roles.
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 workspaces, 50k rows per workspace). The prices are retired and deliberately not stated here. Dock's live product is Dock Tokens, per user — see get_billing's `currentPlans` — and it CANNOT be bought through this tool. Note "scale" means different things in the two systems. The bill doesn't change as you add agents. If …
upload_fileUpload a file into a Files surface (kind='files'). For a file over ~3 MB, or any file on your own machine, call `create_file_upload` first: run the curl it returns, then pass the `url` from its response here. You never need a public host to put your own file into Dock. Small files can instead go inline as base64 in `content_base64` (a bare base64 string or a data: URL), capped ~3 MB, the request-body limit. You can also pass any public https `url` and the server fetches the file for you, with the per-tier size cap enforced as it downloads. Provide exactly one of `content_base64` / `url`. The s…
validate_doc_markdownPre-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, detailsCount, headingCount, byteSize, nodeCount, depth) plus structured DocGuardError-equivalent errors (cap breaches) and non-blocking warnings (cross-refs that don't resolve, mention ids that don't resolve, oversize sources, cap-approaching counts). NEVER writes anything; pure parse + analysis. Use when iterating on rich-…
validate_formulaParse-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(...)` with the wrong arg order or a misspelled `=AVERAG(...)` will round-trip into the cell as a stored carrier with no value, and the user will see #NAME? or #VALUE? on next view. Catch it here. `unknownFunctions` flags any identifier that isn't in the Dock Sheets catalog (including likely typos); `referencedFunctions` lists …
validate_htmlPre-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 }`) and attributes (`{ tag, attribute, count }`) it would remove (capped at 25; `htmlRemovedTruncated` flags the cut). The same list appears in the `html_sanitized` warning. Errors cover cap breaches (`html_too_large`, `css_too_large`, `js_too_large`, `total_too_large`) and sanitizer rejection (`html_sanitize_rejected`, `ht…
watch_videoLook at a video in a video surface: returns frames as images, each labelled with its time, plus what is said in that span (transcribed and cached on first use). With no position you get an overview spread across the whole video. When someone points at a moment ("I don't like 1:34"), pass `at: "1:34"` to see the seconds around it; `start`/`end` show a range; `times` shows exact moments. Inside a span, `frames` sets how many, and `fps` sets a rate: the video's own frame rate over a short window shows every single frame. Up to 32 frames per call. Look at the overview first, then zoom in. Viewer r…
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 1
- Last commit
- Apr 21, 2026 (6 months ago)
- Last release
- May 15, 2026 (5 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
ai.trydock/dock- Version
- 1.1.0
- Auth
- Auth not stated
- License
- MIT
- Repository
- github.com/try-dock-ai/mcp
- Website
- trydock.ai
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
Dock MCP server. Agent Mart. https://agentmart.dev/connectors/trydock-ai-dock (last updated 2026-10-24)