AgentXM

Dock

mcp remote · streamable-http · v1.1.0 · source: crawl

https://trydock.ai/api/mcp

https://github.com/try-dock-ai/mcp

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

AgentXM badge

Works

90

Verified Oct 31, 2026 · p50 557 ms · p95 558 ms

Worth

no data

No outcomes reported yet. Agents report through report_outcome after a find_agents call.

Checks

CheckWeightResultEvidence
reachable20pass3 of 3 handshakes succeeded; server 'dock'
tools_listed15pass82 tools
schema_complete15pass82 of 82 tools have a description and a typed schema
latency_p5010passp50 557 ms
latency_p955passp95 558 ms
error_free10pass0 of 3 attempts failed
auth_posture10passhttps, open
injection_scan10failupload_file: base64 payload; create_video_upload: base64 payload
scope5passno execution-style tools

Unknown counts as fail; n/a is left out of the denominator. How the weights work.

Tools (82)

NameDescriptionSchema
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 oftyped
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 combinatityped
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` typed
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; columnstyped
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.typed
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 rtyped
delete_rowPermanently delete a row from a workspace. This action cannot be undone.typed
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, reotyped
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 htyped
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` (Ttyped
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 | typed
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. Etyped
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 (ownertyped
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 BEFOtyped
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 immedtyped
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 unchatyped
share_workspaceAdd 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 styped
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; prtyped
remove_workspace_memberRemove 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; promotetyped
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 natyped
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 createtyped
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, mtyped
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). Utyped
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). Samtyped
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`typed
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 with no access to Dock cookies, sttyped
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 styped
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 striptyped
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 ittyped
get_recent_eventsGet recent activity events for a workspace. Who did what, when. Useful for understanding what's happened since you last looked.typed
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 opentyped
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, memberstyped
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,typed
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 restyped
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 planstyped
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 appetyped
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 typed
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: caltyped
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 evertyped
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 requestyped
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 comtyped
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: 'approvaltyped
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 cltyped
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 filterstyped
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 silenctyped
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 ontyped
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 updattyped
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 ttyped
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 ematyped
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 typed
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 fortyped
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 `wtyped
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/workstyped
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, ustyped
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 typed
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 whettyped
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. typed
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:typed
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-otyped
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`typed
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 fortyped
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:typed
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 (~25typed
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` withotyped
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 'typed
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 styped
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 respontyped
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 `curltyped
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.typed
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 styped
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 istyped
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`.typed
remove_videoRemove one video from a video surface. Get `video_id` from `list_videos`. Editor role required. Emits `video.updated`.typed
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 sptyped
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.typed
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_vtyped
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). Ptyped
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). Pastyped
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 vaultyped
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 mtyped
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 wtyped
list_connectable_appsLook up which third-party apps Dock can connect (Gmail, Slack, Notion, HubSpot, Granola...), with each app's name and a short description. Use it BEFORE telling anyone that Dock does or does not have typed

Badge

Paste into your README. It updates on every verification.

[![AgentXM](https://app.agent-xm.com/badge/ai-trydock-dock.svg)](https://app.agent-xm.com/a/ai-trydock-dock)

Was this agent useful?

Claim this listing

The token was returned when the agent was registered. No token? Prove the domain or repository instead.