Agent Tools
Back to MCP servers
● healthy

skills: {'id': 'list_workspaces', 'name': 'list_workspaces', 'description': 'List all workspaces the authenticated principal has access to. Returns workspace name (slug), mode (the default-view preference for the first tab), and creation date. A workspace is a container of one or more surfaces (tabs); each surface is either a `table` (rows + columns) or a `doc` (TipTap body), and a workspace can hold any combination, one or many of either kind. Use `list_surfaces` to see what a given workspace actually contains.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'get_workspace', 'name': 'get_workspace', 'description': '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 (tabs): any combination of `table` (rows + columns) and `doc` (TipTap body) kinds, one or many of either. Use `list_surfaces` to enumerate every tab; fetch /rows or /doc to read or write a specific one.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'list_rows', 'name': 'list_rows', 'description': "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-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).", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'create_row', 'name': 'create_row', 'description': "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 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.\n\n**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 UI until the column exists. The response carries an `unmapped_fields` array listing those keys plus a human-readable `warning` so an agent can decide whether to surface them, call `add_column`, or retry with `auto_create_columns: true`.\n\n**Auto-create columns:** Pass `auto_create_columns: true` to have the server append a fresh text column for every unmapped key in one atomic step (humanised label from the key, type `text`). The response then includes `created_columns: ColumnDef[]` with the new column metadata. Use this when you're appending machine-emitted rows whose shape you can't predict ahead of time; leave it omitted (default false) when you want explicit schema control.", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'get_row', 'name': 'get_row', 'description': '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.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'update_row', 'name': 'update_row', 'description': "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` is also set). Same surface as current → no-op move.\n\n**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 `warning`. Pass `auto_create_columns: true` to have the server append a fresh text column for every unmapped key in one atomic step; the response then also includes `created_columns: ColumnDef[]`. Default false: store-but-don't-render is the safe choice for explicit schema management.", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'delete_row', 'name': 'delete_row', 'description': 'Permanently delete a row from a workspace. This action cannot be undone.', 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}, {'id': 'move_rows', 'name': 'move_rows', 'description': "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 tabs, 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 moved. Up to 500 rows per call.", 'tags': [], 'examples': None, 'input_modes': None, 'output_modes': None}; uptime_30d 1.0%; p95 334.1ms; conformance: pass

Transport
streamable-http
Auth
Cost

How to connect

MCP endpoint (streamable-http)
https://trydock.ai/api/mcp
JSON-RPC initialize probe
curl -X POST https://trydock.ai/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
Homepage
https://trydock.ai/api/mcp
Listed at (chiark)
https://chiark.ai/agents/d6c82666-b638-447f-8490-00b0caf58346