Dock
Qué hace este MCP
Provides collaborative workspaces with tables, documents, HTML surfaces, files, formulas, comments, activity tracking, agent messaging, and webhooks.
Herramientas
Esquema de entrada
{'type': 'object', 'required': ['slug', 'key', 'label', 'type'], 'properties': {'key': {'type': 'string', 'description': 'Field name in row.data. Lowercase + underscores recommended; 1-64 chars.'}, 'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'type': {'enum': ['text', 'longtext', 'number', 'status', 'person', 'date', 'url', 'checkbox', 'select'], 'type': 'string', 'description': 'Column type. See get_workspace_schema for examples.'}, 'label': {'type': 'string', 'description': 'Human-readable header shown in the sheet.'}, 'width': {'type': 'number', 'description': 'Optional. Initial column width in px.'}, 'options': {'type': 'array', 'items': {'type': 'object', 'properties': {'color': {'type': 'string'}, 'label': {'type': 'string'}, 'value': {'type': 'string'}}}, 'description': 'Required for `status` + `select` types. The allowed values shown in the dropdown.'}, 'description': {'type': 'string', 'description': 'Optional. Human-readable tooltip shown in the column header.'}, 'surface_slug': {'type': 'string', 'description': "Optional. The slug of the specific table surface to add the column to. Omit on single-table workspaces; required on multi-table workspaces if you don't want the primary table surface (lowest position)."}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'target', 'body'], 'properties': {'body': {'type': 'string', 'description': 'Comment body (plain text or markdown). 1-5000 chars.'}, 'slug': {'type': 'string', 'description': "The workspace slug ('my-workspace' or 'my-org/my-workspace')."}, 'target': {'type': 'object', 'description': "Polymorphic target. Shapes:\n { type: 'row', rowId: '<cuid>' }\n { type: 'cell', rowId: '<cuid>', columnKey: '<key>' }\n { type: 'doc_range', surfaceSlug: '<slug>', anchor: { from: <number>, to: <number>, text: '<plain>' } }\n { type: 'html_element', surfaceSlug: '<slug>', anchor: { selector: '<css>', text?: '<plain>' } }\n { type: 'surface', surfaceSlug: '<slug>' }\n { type: 'workspace' }", 'additionalProperties': True}, 'mentions': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': "Optional `[{ kind, id, label }]` mentions. Each mention's principal must have workspace access. Fires inbox + email + webhook fan-out for newly-mentioned recipients only."}, 'parentId': {'type': 'string', 'description': 'Optional parent comment id. When passed, this comment becomes a reply in the thread. Nested replies flatten to single-depth (reply-to-reply re-points at the root). Re-opens a resolved parent.'}}}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'markdown'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'markdown': {'type': 'string', 'description': 'Markdown chunk to append (CommonMark + GFM). Becomes one or more new blocks at the end of the existing doc.'}, 'surface_slug': {'type': 'string', 'description': 'Optional doc surface slug for multi-doc workspaces. Omit to append to the primary doc surface.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'rows'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Rows to create. Each item is an object with a `data` field: `{ "data": { "title": "...", "status": "drafted" } }`. 1-500 items.'}, 'slug': {'type': 'string', 'description': 'The workspace slug (bare or org-prefixed).'}, 'surface_slug': {'type': 'string', 'description': "Optional target table surface slug (use list_surfaces). Omit to use the workspace's primary table surface. The whole batch lands on this one surface."}, 'auto_create_columns': {'type': 'boolean', 'description': "When true, append a text column for every key (across all rows) that doesn't map to an existing column, in one schema extension. Default false."}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'updates'], 'properties': {'slug': {'type': 'string', 'description': 'The workspace slug (bare or org-prefixed).'}, 'updates': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Rows to update. Each item is `{ "id": "<row id>", "data": { "status": "done" } }` — `data` holds only the cells to change (merged into the existing row). 1-500 items.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'data'], 'properties': {'data': {'type': 'object', 'description': 'Row data as a JSON object (e.g. {"title": "My post", "status": "drafted", "notes": "Initial draft"})', 'additionalProperties': True}, 'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'surface_slug': {'type': 'string', 'description': "Optional table surface slug for multi-surface workspaces. Omit to write to the workspace's primary table surface. 400 if the slug is a doc surface, archived, or doesn't exist."}, 'auto_create_columns': {'type': 'boolean', 'description': "When true, the server auto-creates a text column for every key in `data` that doesn't already exist on the surface, then writes the row in the same call. Returns `created_columns` in the response listing the new column defs. Default false: unmapped keys are still stored on the row but won't render in the UI until you `add_column` them yourself."}}}
Esquema de entrada
{'type': 'object', 'required': ['kind', 'title', 'body'], 'properties': {'body': {'type': 'string', 'description': 'Detailed description (5-10000 chars). For bugs: include what you did, what happened, what you expected. For feature requests: the use case.'}, 'kind': {'enum': ['bug', 'feature', 'billing', 'question', 'other'], 'type': 'string', 'description': 'Ticket category.'}, 'title': {'type': 'string', 'description': "Short headline (3-200 chars). Be specific: 'Table view loses focus on cell edit' beats 'broken'."}, 'context': {'type': 'object', 'description': 'Optional structured metadata echoed into the GitHub issue (workspace slug, URL, error trace, etc).'}, 'attachmentUrls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional list of screenshot/attachment URLs to embed in the issue. URLs must be hosted on the Dock blob store; mint them via POST /api/support/upload first. Max 4.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'kind', 'name'], 'properties': {'kind': {'enum': ['table', 'doc', 'html', 'files'], 'type': 'string', 'description': 'Surface kind. `table` for rows + columns, `doc` for TipTap body, `html` for a sandboxed HTML mockup tab, `files` for uploaded files + folders.'}, 'name': {'type': 'string', 'description': 'Display name shown on the tab. 1-64 chars.'}, 'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'columns': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Optional initial columns for `table` kind. Same shape as get_workspace_schema returns. Defaults to Title/Status/Notes when omitted.'}, 'surface_slug': {'type': 'string', 'description': 'Optional URL-friendly slug for the surface (lowercase kebab-case, 3-64 chars). Auto-derived from `name` when omitted.'}}}
Esquema de entrada
{'type': 'object', 'required': ['org_slug', 'url', 'events'], 'properties': {'url': {'type': 'string', 'description': 'Public HTTPS URL to POST events to. Loopback (127.0.0.0/8, ::1), RFC1918 private ranges, link-local, and cloud-metadata addresses (169.254.169.254, etc.) are rejected. Max 2048 chars.'}, 'events': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Event kinds to subscribe to. Pick from: row.created, row.updated, row.deleted, row.sealed, comment.added, comment.deleted, member.invited, member.joined, member.removed, member.role_changed, workspace.created, workspace.renamed, workspace.columns_updated, workspace.visibility_changed, workspace.archived, doc.created, doc.updated, doc.heading_added, doc.mention_added.'}, 'org_slug': {'type': 'string', 'description': 'Org slug'}}}
Esquema de entrada
{'type': 'object', 'required': ['name'], 'properties': {'mode': {'enum': ['table', 'doc', 'html'], 'type': 'string', 'description': "Kind of the seeded primary surface — choose by what you're about to write. `doc` mints a Notes tab: use it for PROSE (briefs, notes, summaries, drafts, status reports). `table` mints a Sheet tab: use it for RECORDS (tasks, leads, rows, anything with shared columns). `html` mints a Mockup tab (sandboxed HTML preview): opt in by passing it explicitly whenever the deliverable IS html — a landing-page mockup, a dashboard, a design preview, any page meant to be looked at — and write it with `update_html`; it is never inferred for ambiguous content. Pass this explicitly: when omitted, `initial_markdown` resolves the surface to a `doc`; with neither, an agent caller gets a guided error asking it to choose (no silent default to a Sheet, which would be the wrong surface if you meant prose). Add more tabs of any kind via `create_surface` later."}, 'name': {'type': 'string', 'description': "The workspace name. Required. Used to derive a slug if you don't pass one."}, 'slug': {'type': 'string', 'description': 'Optional URL-friendly slug (lowercase, kebab-case, 3-64 chars). Auto-derived from `name` if omitted; if the derived slug collides within your org, a -N suffix is appended.'}, 'initial_markdown': {'type': 'string', 'description': "Optional Markdown body to seed the workspace's doc surface on create. CommonMark + GFM (tables, task lists, strikethrough). When provided AND mode is omitted, mode defaults to 'doc'. Skips the empty default-column scaffolding too. Ignored when mode='html' (no markdown equivalent for HTML surfaces — use `update_html` after create). Use this for any prose-shaped output (briefs, summaries, status updates, changelog entries) instead of create + update_doc with hand-built JSON."}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'file_id'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL."}, 'file_id': {'type': 'string', 'description': 'The file cuid (from list_files).'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'rowId'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'rowId': {'type': 'string', 'description': 'The row ID to delete'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'surface_slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'surface_slug': {'type': 'string', 'description': 'The slug of the surface to archive.'}}}
Esquema de entrada
{'type': 'object', 'required': ['org_slug', 'webhook_id'], 'properties': {'org_slug': {'type': 'string', 'description': 'Org slug'}, 'webhook_id': {'type': 'string', 'description': 'Webhook id (from list_webhooks)'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'mode': {'enum': ['immediate', 'web'], 'type': 'string', 'description': "Consent surface. 'immediate' (default) executes on the agent's role. 'web' returns an approval_url the user clicks in a browser; recommended for any workspace your user might miss."}, 'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}}}
Esquema de entrada
{'type': 'object', 'properties': {'mode': {'enum': ['chat', 'web'], 'type': 'string', 'description': "Consent surface. 'chat' (default) uses the in-chat confirm_token round-trip. 'web' returns an approval_url the user clicks in a browser."}, 'confirm_token': {'type': 'string', 'description': 'Chat-mode only. The token returned by the first call as `confirm_token`. Omit on the first call; include on the second call to execute the scheduled downgrade. Single-use, 60s TTL.'}}}
Esquema de entrada
{'type': 'object', 'required': ['formula'], 'properties': {'at': {'type': 'object', 'required': ['rowId', 'colKey'], 'properties': {'rowId': {'type': 'string'}, 'colKey': {'type': 'string'}}, 'description': "Optional anchor cell (only used with workspace_slug). The formula evaluates as if pasted into this cell; relative references resolve against it. Omit to anchor at the workspace's first cell."}, 'formula': {'type': 'string', 'description': "Formula expression including '='. Max 4000 chars."}, 'workspace_slug': {'type': 'string', 'description': "Optional workspace slug. Pass to evaluate against the workspace's actual rows + columns. Accepts bare or org-prefixed form."}}}
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de entrada
{'type': 'object', 'required': ['comment_id'], 'properties': {'comment_id': {'type': 'string', 'description': 'Comment id (any node in the thread).'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'format': {'enum': ['markdown', 'content', 'text', 'all'], 'type': 'string', 'description': 'Which serialization to return. Default `markdown`. Use `content` to round-trip TipTap JSON back into update_doc for structural edits. Use `all` for the legacy three-in-one shape (heavier; only do this when you genuinely need every form in the same call).'}, 'surface_slug': {'type': 'string', 'description': 'Optional doc surface slug for multi-doc workspaces. Omit to read the primary doc surface. Use list_surfaces to see available slugs.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'file_id'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL."}, 'file_id': {'type': 'string', 'description': 'The file cuid (from list_files). Surface + workspace are derived from the file row, so no surface_slug arg is needed.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The workspace slug. Accepts bare or org-prefixed form.'}, 'surface_slug': {'type': 'string', 'description': 'Optional html surface slug. Omit to read the primary html surface.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'limit': {'type': 'number', 'description': 'Max events to return (default 20)'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'rowId'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'rowId': {'type': 'string', 'description': 'The row id'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug, e.g. 'reddit-tracker'. Accepts either the bare slug or the org-prefixed form ('my-org/reddit-tracker') as shown in the dashboard URL."}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'surface_slug': {'type': 'string', 'description': "Optional. The slug of the specific table surface to read columns from. Omit on single-table workspaces; required on multi-table workspaces if you don't want the primary table surface (lowest position)."}}}
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The workspace slug.'}, 'limit': {'type': 'number', 'description': 'Max results (1-200, default 50).'}, 'author': {'type': 'string', 'description': "Filter by author principal id. Useful for 'comments by Argus on this workspace' agent loops."}, 'offset': {'type': 'number', 'description': 'Number of comments to skip for pagination.'}, 'status': {'enum': ['open', 'resolved', 'all'], 'type': 'string', 'description': 'Resolution state filter. Default `open`.'}, 'surface': {'type': 'string', 'description': 'Surface slug filter. Returns every comment anchored anywhere inside this surface (doc_range / html_element / surface scope, plus row + cell comments on rows that live on the surface). 404 silently if the surface is archived (returns empty list).'}, 'target_id': {'type': 'string', 'description': "Filter by exact target id. For cells the id is `<rowId>:<columnKey>`; for doc_range/html_element/surface it's the Surface cuid. Combine with target_type for unambiguous filtering."}, 'target_type': {'enum': ['row', 'cell', 'doc_range', 'html_element', 'surface', 'workspace'], 'type': 'string', 'description': 'Filter by comment target type.'}, 'mentioning_me': {'type': 'boolean', 'description': 'When true, only return comments that @-mention the calling principal. Equivalent to REST `?mentioning=me`.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'surface_slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL."}, 'surface_slug': {'type': 'string', 'description': "Files-kind surface slug within the workspace. Use list_surfaces to enumerate; the Files surface kind is 'files'."}, 'parent_folder_id': {'type': 'string', 'nullable': True, 'description': 'Folder id to descend into. Omit (or pass null) for the surface root.'}}}
Esquema de entrada
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': 'Max tickets to return, 1-100. Default 30.'}, 'status': {'enum': ['open', 'in_progress', 'closed'], 'type': 'string', 'description': 'Optional. Only return tickets in this lifecycle state. Omit to return every state.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'surface_slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL."}, 'surface_slug': {'type': 'string', 'description': 'Files-kind surface slug within the workspace.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'limit': {'type': 'number', 'description': 'Max rows to return (default 100, max 1000)'}, 'offset': {'type': 'number', 'description': 'Number of rows to skip (for pagination)'}, 'surface_slug': {'type': 'string', 'description': "Optional table surface slug for multi-surface workspaces. Filter rows to one sheet. Omit to return rows from every surface (legacy single-sheet clients see no change). 400 if the slug is a doc surface, archived, or doesn't exist."}}}
Esquema de entrada
{'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Optional case-insensitive substring filter; matches function name, description, and signature.'}, 'slice': {'enum': ['v1', 'v2', 'v3', 'v4'], 'type': 'string', 'description': 'Optional rollout-slice filter.'}, 'category': {'enum': ['Math', 'Logic', 'Text', 'Date', 'Lookup', 'Predicates', 'Other'], 'type': 'string', 'description': 'Optional category filter.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'archived': {'type': 'boolean', 'description': 'Include archived surfaces too. Default false (live tabs only).'}}}
Esquema de entrada
{'type': 'object', 'required': ['org_slug'], 'properties': {'org_slug': {'type': 'string', 'description': 'Org slug. The webhook collection is org-scoped, not workspace-scoped; one URL receives events from every workspace in the org.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}}}
Esquema de entrada
{'type': 'object', 'properties': {}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'rowIds', 'target_surface_slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'rowIds': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 500, 'minItems': 1, 'description': 'Row IDs to move (1-500). Order is preserved at the destination: first id lands at the lowest position, last id at the highest.'}, 'target_surface_slug': {'type': 'string', 'description': 'Slug of the destination table surface. Use list_surfaces to enumerate. 400 if the slug is a doc surface, archived, or not in this workspace.'}}}
Esquema de entrada
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'The exact capability name as shown by list_capabilities (e.g. "Gemini"). 2–64 chars, letters/digits/._:- only.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['comment_id', 'emoji'], 'properties': {'emoji': {'type': 'string', 'description': "Emoji character (e.g. '👍', '✅', '🚀')."}, 'action': {'enum': ['add', 'remove'], 'type': 'string', 'description': 'Whether to add or remove the reaction. Default `add`.'}, 'comment_id': {'type': 'string', 'description': 'Comment to react to.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'member_id'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'member_id': {'type': 'string', 'description': 'The WorkspaceMember id to remove. Get this from list_workspace_members.'}, 'confirm_token': {'type': 'string', 'description': "The token returned by the first call as `confirm_token`. Omit on the first call; include on the second call to execute the removal. Single-use, 60s TTL. Agents only; user callers don't need this."}}}
Esquema de entrada
{'type': 'object', 'required': ['comment_id', 'body'], 'properties': {'body': {'type': 'string', 'description': 'Reply body (1-5000 chars).'}, 'mentions': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Optional `[{ kind, id, label }]` mentions on the reply. Same validation + fan-out rules as add_comment.'}, 'comment_id': {'type': 'string', 'description': 'Parent comment id. Reply is posted as a child of this thread; if the parent itself is a reply, the new comment re-points to the thread root.'}}}
Esquema de entrada
{'type': 'object', 'required': ['toolkit_slug'], 'properties': {'reason': {'type': 'string', 'description': "One short sentence on why you need it, shown to the user on the card. Be concrete: 'to read the thread you asked me to summarise' beats 'to help you'."}, 'toolkit_slug': {'type': 'string', 'description': "The app to request, e.g. 'gmail', 'slack', 'notion', 'linear'. Must be one Dock offers; anything else is refused."}}}
Esquema de entrada
{'type': 'object', 'required': ['kind'], 'properties': {'kind': {'enum': ['agents', 'workspaces', 'rows', 'other'], 'type': 'string', 'description': 'Which limit to raise'}, 'reason': {'type': 'string', 'description': 'Optional: 1-2 sentences on the use case'}, 'desiredValue': {'type': 'number', 'description': "Optional: the specific limit you'd like"}}}
Esquema de entrada
{'type': 'object', 'required': ['target_agent_id'], 'properties': {'reason': {'type': 'string', 'description': "1-2 sentences on why you're asking. Surfaces verbatim on the consent card so the owner knows what they're saying yes to. Capped at 500 chars."}, 'target_agent_id': {'type': 'string', 'description': 'The id of the sibling agent whose key should be revoked. Get from list_workspace_members or list_workspaces; every member row carries the agent id.'}}}
Esquema de entrada
{'type': 'object', 'required': ['target_agent_id'], 'properties': {'reason': {'type': 'string', 'description': '1-2 sentences on why. Surfaces on the consent card. Capped at 500 chars.'}, 'target_agent_id': {'type': 'string', 'description': 'The id of the sibling agent whose key should be rotated.'}}}
Esquema de entrada
{'type': 'object', 'required': ['comment_id'], 'properties': {'comment_id': {'type': 'string', 'description': 'Comment id to resolve (use the thread root, resolving a reply targets the reply itself, not the thread).'}}}
Esquema de entrada
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': "API key id to revoke. Omit when called by an agent; defaults to the agent's own current key."}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'file_id', 'token_id'], 'properties': {'slug': {'type': 'string', 'description': 'The workspace slug.'}, 'file_id': {'type': 'string', 'description': 'The file cuid.'}, 'token_id': {'type': 'string', 'description': 'The share token id returned by `share_file` (NOT the `url` token). Same id appears in the `list_file_shares` response.'}}}
Esquema de entrada
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': "API key id to rotate. Omit when called by an agent; defaults to the agent's own current key. Required for user callers to disambiguate when more than one key exists."}}}
Esquema de entrada
{'type': 'object', 'required': ['org_slug', 'webhook_id'], 'properties': {'org_slug': {'type': 'string', 'description': 'Org slug'}, 'webhook_id': {'type': 'string', 'description': 'Webhook id (from list_webhooks)'}}}
Esquema de entrada
{'type': 'object', 'required': ['q'], 'properties': {'q': {'type': 'string', 'description': 'Search query. Case-insensitive substring match.'}, 'kind': {'enum': ['all', 'workspace', 'row', 'doc-section'], 'type': 'string', 'description': "Narrow to one surface. 'all' (default) searches workspace names + row cells + doc sections. 'workspace' is fastest when the user is naming something, 'row' targets table data, 'doc-section' targets headings and paragraphs in doc-mode."}, 'limit': {'type': 'number', 'description': 'Max hits to return (default 20, max 100).'}, 'offset': {'type': 'number', 'description': 'Hits to skip for pagination (default 0).'}}}
Esquema de entrada
{'type': 'object', 'required': ['to', 'body'], 'properties': {'to': {'type': 'string', 'description': "Recipient address in the form `<agent_slug>@<user_slug>`. Examples: `flint@socrates` (agent), `self@govind` (human's self-agent — use to DM a person directly). You may also pass an agent's stable id (`agt_...`) exactly as returned in `address_book`'s `agentId`. PREFER the id: an address is derived from the agent's slug, which does not follow a rename, so an address built from a teammate's current display name can fail to resolve. The id never changes."}, 'body': {'type': 'string', 'description': 'Message text. Plain string, 1-32000 chars. `@<slug>` mentions inside the body CC the named agent on the message.'}, 'replyTo': {'type': 'string', 'description': "Optional cue message id to thread under. When set, the recipient's drawer renders this as a reply with an inline parent-preview. Get the id from a prior `send_message` response or from the recipient's inbox listing."}, 'send_at': {'type': 'string', 'description': 'Optional ISO-8601 UTC timestamp to schedule the message for future delivery (e.g. `2026-06-04T15:00:00Z`). Omit to send now. A past timestamp is treated as send-now. Honored only where scheduled send is enabled; otherwise ignored. `scheduled_at` is accepted as an alias.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'file_id'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL."}, 'file_id': {'type': 'string', 'description': 'The file cuid (from list_files).'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'email'], 'properties': {'role': {'enum': ['owner', 'editor', 'commenter', 'viewer'], 'type': 'string', 'description': 'Role to grant. Defaults to `editor`. Owner-tier transitions require an owner caller.'}, 'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'email': {'type': 'string', 'description': 'Email address of the human to invite.'}}}
Esquema de entrada
{'type': 'object', 'required': ['comment_id'], 'properties': {'comment_id': {'type': 'string', 'description': 'Comment id to re-open.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'content': {'type': 'object', 'description': "TipTap document JSON: `{ type: 'doc', content: [ ... ] }`. Use this when round-tripping from get_doc to preserve formatting. Mutually exclusive with `markdown` (content wins if both are passed).", 'additionalProperties': True}, 'markdown': {'type': 'string', 'description': 'Markdown body (CommonMark + GFM). Converted server-side to TipTap JSON via the same converter that powers PUT /api/workspaces/:slug/doc. Use this when authoring prose from scratch; no need to hand-build ProseMirror nodes.'}, 'surface_slug': {'type': 'string', 'description': 'Optional doc surface slug for multi-doc workspaces. Omit to write the primary doc surface. Use list_surfaces to see available slugs.'}, 'if_unmodified_since': {'type': 'string', 'description': "Optional precondition. ISO 8601 timestamp (typically the `updatedAt` you read via `get_doc`). When set and the doc has changed since this cutoff, the write is rejected with `code: -32602`, message describing the conflict, and `data: { conflict: true, currentUpdatedAt, precondition }` so your agent can refetch + merge instead of silently clobbering a concurrent write. Without this, two agents PUTting near-simultaneously will both succeed and the last write wins (the previous content vanishes). Use this in multi-agent co-authoring flows; skip it for greenfield writes where you know you're the only writer."}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'heading', 'markdown'], 'properties': {'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace')."}, 'heading': {'type': 'string', 'description': 'Plain text of the heading to find (case-sensitive, trimmed). For `## Outcomes`, pass `Outcomes`. Hash marks and surrounding whitespace are stripped from the comparison automatically by the markdown converter. Use `get_doc` first if you need to enumerate the headings actually present.'}, 'markdown': {'type': 'string', 'description': 'FULL replacement markdown for the section, including the heading line if you want to keep / rename / restructure it. Empty string deletes the section.'}, 'surface_slug': {'type': 'string', 'description': 'Optional doc surface slug for multi-doc workspaces. Omit to target the primary doc surface.'}, 'allowBlockLoss': {'type': 'boolean', 'description': 'Confirm a replacement that removes most of the document. Omit it normally: the call is refused (with the previous and new block counts) when it would destroy the bulk of the doc, which is what a trailing-heading target does. Set true only when the deletion is what you intend.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'js': {'type': 'string', 'description': "JS source. Stored alongside html/css; at v2 you'll typically inline `<script>` in the html field instead (same execution context, fewer round-trips). 200 KB cap (matches the top-level `update_html` description; the server enforces `HTML_SURFACE_LIMITS.jsBytes` = 200_000)."}, 'css': {'type': 'string', 'description': 'CSS source. Applied inside the sandbox iframe. At v2 you can also `<link rel="stylesheet">` external stylesheets from any HTTPS CDN — useful for Tailwind CDN, Google Fonts, icon kits.'}, 'html': {'type': 'string', 'description': 'HTML body. Sanitized server-side (smells stripped, but `<script>` and `<link>` allowed at v2 — load any CDN, write inline scripts, dynamic DOM). Use `validate_html` first for a pre-flight check.'}, 'slug': {'type': 'string', 'description': 'The workspace slug.'}, 'surface_slug': {'type': 'string', 'description': 'Optional html surface slug. Omit to write the primary html surface.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'rowId', 'data'], 'properties': {'data': {'type': 'object', 'description': 'Partial row data with fields to update (e.g. {"status": "sealed"}). Pass an empty object {} when the call is purely a move (surface_slug change with no field updates).', 'additionalProperties': True}, 'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'rowId': {'type': 'string', 'description': 'The row ID to update'}, 'position': {'type': 'number', 'description': "Optional. Override the row's position. When moving across surfaces, omit to land at the new surface's tail; pass a number to land at a specific slot."}, 'surface_slug': {'type': 'string', 'description': 'Optional. When set to a different surface than the row currently lives on, moves the row to that surface and emits a `row.moved_surface` event. Same-surface is a no-op. 400 if the slug is a doc surface, archived, or not in this workspace.'}, 'auto_create_columns': {'type': 'boolean', 'description': "When true, the server auto-creates a text column for every key in `data` that doesn't already exist on the surface, then applies the update in the same call. Returns `created_columns` in the response. Default false: unmapped keys are still merged into row.data but won't render in the UI until you `add_column` them yourself."}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'surface_slug'], 'properties': {'name': {'type': 'string', 'description': 'New display name. 1-64 chars.'}, 'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'columns': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': "Optional. Full replacement ColumnDef[] for the surface's table schema. Table surfaces only — doc/html surfaces 400 with a table-only error. Each item: `{ key, label, type, position, width?, hidden?, description?, options? }`. type ∈ text|longtext|url|status|owner|date|number. Existing row.data keys not present in the new schema are preserved on disk but stop rendering in the UI (they'll surface as `unmapped_fields` on the next row write). Use get_workspace_schema → mutate → send the full array back; this is a REPLACE, not a merge."}, 'position': {'type': 'number', 'description': '0-based index in the tab strip. Other surfaces shift to keep positions contiguous.'}, 'surface_slug': {'type': 'string', 'description': 'The current slug of the surface to update.'}, 'new_surface_slug': {'type': 'string', 'description': 'New slug for the surface (lowercase kebab-case, 3-64 chars). Must be unique within the workspace.'}}}
Esquema de entrada
{'type': 'object', 'required': ['org_slug', 'webhook_id', 'active'], 'properties': {'active': {'type': 'boolean', 'description': 'true to enable delivery, false to silence.'}, 'org_slug': {'type': 'string', 'description': 'Org slug'}, 'webhook_id': {'type': 'string', 'description': 'Webhook id (from list_webhooks)'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug'], 'properties': {'mode': {'enum': ['table', 'doc', 'html'], 'type': 'string', 'description': "New default-view preference for the workspace's first tab. Optional. Doesn't add or remove surfaces; use `create_surface` / `delete_surface` to change the actual tab set."}, 'name': {'type': 'string', 'description': 'New display name. Optional.'}, 'slug': {'type': 'string', 'description': 'The current workspace slug'}, 'new_slug': {'type': 'string', 'description': 'New URL slug (lowercase kebab-case, 3-64 chars). Optional. Must be unique within the org. Old slug stays redirectable via the alias table.'}, 'visibility': {'enum': ['private', 'org', 'unlisted', 'public'], 'type': 'string', 'description': 'New visibility. Optional. `private` = explicit members only; `org` = every org member gets virtual editor; `unlisted` = anyone with the URL can view; `public` = listed and viewable to all. Widening transitions are consent-gated; see `consent_mode`.'}, 'consent_mode': {'enum': ['web'], 'type': 'string', 'description': "Required when `visibility` widens audience. Pass 'web' to surface a click-to-approve URL the user opens in their browser; first call returns { status: 'approval_required', approval_url, polling_url }, you print approval_url in chat and poll polling_url for the result."}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'member_id', 'role'], 'properties': {'role': {'enum': ['owner', 'editor', 'commenter', 'viewer'], 'type': 'string', 'description': 'New role.'}, 'slug': {'type': 'string', 'description': "The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace') as shown in the dashboard URL; both resolve to the same workspace."}, 'member_id': {'type': 'string', 'description': 'The WorkspaceMember id to update. Get this from list_workspace_members.'}}}
Esquema de entrada
{'type': 'object', 'properties': {'mode': {'enum': ['chat', 'web'], 'type': 'string', 'description': "Consent surface. 'chat' (default) uses the in-chat confirm_token round-trip. 'web' returns an approval_url the user clicks in a browser. Use 'web' if you're headless or your user prefers a click-to-approve flow."}, 'plan': {'enum': ['pro', 'scale'], 'type': 'string', 'description': "Target plan. Defaults to 'pro'."}, 'confirm_token': {'type': 'string', 'description': 'Chat-mode only. The token returned by the first call as `confirm_token`. Omit on the first call; include on the second call to execute the plan flip. Single-use, 60s TTL, bound to {org, caller, operation, params}.'}}}
Esquema de entrada
{'type': 'object', 'required': ['slug', 'surface_slug', 'filename'], 'properties': {'mime': {'type': 'string', 'description': 'Optional MIME hint. The server still sniffs magic bytes; this only helps for extension-less or ambiguous content.'}, 'slug': {'type': 'string', 'description': 'The workspace slug (bare or org-prefixed).'}, 'filename': {'type': 'string', 'description': 'The file\'s name, including extension (e.g. "report.pdf").'}, 'surface_slug': {'type': 'string', 'description': 'The Files surface slug to upload into (required).'}, 'content_base64': {'type': 'string', 'description': 'The file bytes, base64-encoded. Accepts a bare base64 string or a "data:<mime>;base64,..." data URL. ~3 MB cap. Provide this OR `url`, not both.'}, 'parent_folder_id': {'type': 'string', 'description': 'Optional folder id (from list_files) to place the file in. Defaults to the surface root.'}}, 'additionalProperties': False}
Esquema de entrada
{'type': 'object', 'required': ['markdown'], 'properties': {'markdown': {'type': 'string', 'description': 'Markdown body to validate. Same surface as update_doc: CommonMark + GFM plus mermaid / math / callouts / svg / details / cross-refs / embeds.'}}}
Esquema de entrada
{'type': 'object', 'required': ['formula'], 'properties': {'formula': {'type': 'string', 'description': 'Formula expression to validate, including the leading \'=\'. Example: \'=SUMIF(B2:B10, ">0")\'. Max 4000 chars.'}}}
Esquema de entrada
{'type': 'object', 'properties': {'js': {'type': 'string', 'description': 'JS to validate (optional).'}, 'css': {'type': 'string', 'description': 'CSS to validate (optional).'}, 'html': {'type': 'string', 'description': 'HTML to validate (optional).'}}}
Cambios recientes en herramientas
Servidores MCP similares
Kythene
Provides shared team memory, collections, wikis, artifacts, comments, approvals, review workflows, presence, and controlled shari…
bridgeapp
Connects to a workspace containing tasks, chats, threads, pages, and projects.
Local MCP
Connects AI assistants to Mac email, calendars, reminders, notes, tasks, files, Microsoft 365, Todoist, spreadsheets, and daily b…
Stable Baseline
Manages company documents, knowledge graphs, whiteboards, projects, plans, tasks, teams, and improvement workflows.
mu
Supports personal and collaborative tasks including web browsing, app creation, blogs, bookmarks, discussions, and contact manage…
Dayze — Life Context
Provides authenticated personal life-context data and tools for contacts, memories, events, expenses, trips, assets, places, and …
YouSpot
Connects personal contacts, companies, notes, files, CRM records, email, Slack, LinkedIn, and calendars, with search, relationshi…
mcp
Manages Nestr workspaces, roles, circles, tensions, governance proposals, comments, daily plans, graph relationships, agents, and…