Dock
Server Details
AI workspace for you, your team, and every agent. Tables, docs (images, 4K video), formulas.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- try-dock-ai/mcp
- GitHub Stars
- 0
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.6/5 across 64 of 64 tools scored. Lowest: 3.5/5.
Most tools have clearly distinct purposes, but there is some overlap among doc editing tools (update_doc, update_doc_section, append_doc_section) and comment tools (add_comment, reply_to_comment). However, descriptions are detailed enough to differentiate them.
The naming generally follows a verb_noun pattern (e.g., create_workspace, delete_row), but there are deviations like 'address_book' and inconsistent verb choices (e.g., 'add_column' vs 'create_row'). Overall, the style is mixed but still readable.
64 tools is very high for an MCP server, covering a broad domain. While each tool seems justified, the sheer number can be overwhelming. Some consolidation (e.g., merging validation tools) might improve scoping.
The tool set provides comprehensive CRUD coverage for workspaces, surfaces, rows, columns, comments, webhooks, and more. Minor gaps exist (e.g., no direct restore for deleted workspaces via MCP), but the overall surface is well-rounded.
Available Tools
64 toolsadd_columnAInspect
Append a single column to a workspace's table schema. Position is auto-computed as next-after-max so the contiguity invariant holds. Key collision (409) if a column with the same key already exists. Editor role required. Use this for per-column additions; use get_workspace_schema + update_workspace_columns (PUT on /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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Field name in row.data. Lowercase + underscores recommended; 1-64 chars. | |
| slug | Yes | 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 | Yes | Column type. See get_workspace_schema for examples. | |
| label | Yes | Human-readable header shown in the sheet. | |
| width | No | Optional. Initial column width in px. | |
| options | No | Required for `status` + `select` types. The allowed values shown in the dropdown. | |
| description | No | Optional. Human-readable tooltip shown in the column header. | |
| surface_slug | No | 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). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals behaviors: auto-computed position, key collision 409 error, editor role requirement, and surface targeting logic. These provide useful context beyond the schema, though idempotency or success behavior isn't detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of 4 sentences, front-loading the core action and sequentially covering position, error, role, alternatives, and surface handling. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters and no output schema, the description covers the purpose, usage guidelines, error scenarios, role requirements, and multi-surface nuance comprehensively. It is complete for an AI agent to correctly invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the position auto-computation, key collision, editor role, and surface_slug fallback behavior, which are not in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Append a single column to a workspace's table schema,' providing a specific verb and resource. It distinguishes itself from sibling tools like update_workspace_columns and get_workspace_schema by mentioning alternative use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this for per-column additions; use get_workspace_schema + update_workspace_columns (PUT on /columns) for full schema replacement or reordering.' It also notes the editor role requirement and key collision error, guiding appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_commentAInspect
Post a new comment on any target in a workspace: a row, a cell, a doc text range, an html element, an entire surface, or the workspace itself. Polymorphic target shape mirrors the REST POST /api/workspaces/:slug/comments. For threading, pass parentId to hang the new comment as 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 resolved parent). For replies to existing comments where you don't want to reconstruct the target, prefer reply_to_comment which derives the target from the parent. Editor or commenter role required.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Comment body (plain text or markdown). 1-5000 chars. | |
| slug | Yes | The workspace slug ('my-workspace' or 'my-org/my-workspace'). | |
| target | Yes | Polymorphic target. Shapes: { type: 'row', rowId: '<cuid>' } { type: 'cell', rowId: '<cuid>', columnKey: '<key>' } { type: 'doc_range', surfaceSlug: '<slug>', anchor: { from: <number>, to: <number>, text: '<plain>' } } { type: 'html_element', surfaceSlug: '<slug>', anchor: { selector: '<css>', text?: '<plain>' } } { type: 'surface', surfaceSlug: '<slug>' } { type: 'workspace' } | |
| mentions | No | 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 | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behaviors: threading behavior (flattening nested replies, auto-unresolving parent), events fired (comment.added, comment.unresolved), mention validation (access check), and role requirement. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and well-structured: first sentence for purpose, second for threading details, third for mentions, fourth for alternative tool. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no output schema, many siblings), the description covers all essential aspects: purpose, usage guidelines, behavioral traits, parameter details, and role requirements. It is complete for correct agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema covers 100% of parameters with descriptions, the tool description adds significant context: it explains the threading effect of parentId (re-opens resolved parent), the fan-out behavior for mentions, and the polymorphic nature of target. This enhances the schema's meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Post a new comment on any target in a workspace'. It lists all possible target types (row, cell, doc_range, html_element, surface, workspace) and distinguishes from the sibling tool 'reply_to_comment', making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use an alternative: 'For replies to existing comments where you don't want to reconstruct the target, prefer reply_to_comment'. It also mentions the required role ('Editor or commenter role required'), providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
address_bookAInspect
List the agents you can message: every agent signed by your owner, each with its address and live status. Each entry has address (the slug@owner string to pass straight to send_message), online (true means connected and reading right now, so your message wakes it within about a second; false means it is offline and the message queues until it reconnects), plus name and brandKey. Also returns ownerAddress (self@<owner>) for messaging the owning human directly. Owner-scoped: it lists your teammates under the same owner, not other people's agents. Takes no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully details the tool's behavior: it lists every agent signed by the owner, explains the online status implications, and specifies scope. No assumptions left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose but every sentence adds value, explaining output fields and usage context. It could be slightly more concise, but it is well-organized and front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description comprehensively explains every field in the response and the tool's owner-scoped behavior. No additional context is needed for this simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the schema coverage is 100%. The description doesn't need to add parameter info, and it correctly conveys the tool takes no arguments. A score of 4 is appropriate for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List the agents you can message' and explains each field in the response. It distinguishes from sibling 'send_message' by focusing on listing rather than sending. No confusion about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use to get addresses and online status before messaging, and it notes owner-scoping. It doesn't explicitly list alternatives or when not to use, but the purpose is self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
append_doc_sectionAInspect
Append a chunk of Markdown to the END of a workspace's doc body. Designed for crons + ingest agents that produce content in timestamped chunks (changelog updates, daily standups, batch summaries). Same markdown surface as update_doc: supports CommonMark, GFM,  inline images (any publicly-reachable HTTPS URL), lone video URLs (.mp4/.webm/.mov/.mkv/.m4v → native <video> player, 5 GB per file), mermaid diagrams, $math$/$$math$$ KaTeX, > [!NOTE]/[!TIP]/[!IMPORTANT]/[!WARNING]/[!CAUTION] callouts, svg sanitized embeds, X... toggles, [[slug]] cross-references, @Label @-mentions of users + agents, and lone-URL embeds (YouTube/Vimeo/Loom/Figma/CodePen/gists). Server fetches the current body, splices the new blocks on, and writes the result through the same path as update_doc with the same auth, same events, same byte/depth/node-count guard. Append is non-idempotent by design (every call adds content); the caller is responsible for dedupe. @-mentions inside the appended chunk fire doc.mention_added + inbox/email fan-out for newly-added mentions only — appending a chunk that re-mentions someone already mentioned earlier in the doc won't re-fire. Requires editor role. Multi-surface workspaces optionally accept surface_slug to append to a specific doc tab.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | Markdown chunk to append (CommonMark + GFM). Becomes one or more new blocks at the end of the existing doc. | |
| surface_slug | No | Optional doc surface slug for multi-doc workspaces. Omit to append to the primary doc surface. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: non-idempotent, dedupe responsibility, mention firing rules (only new mentions trigger events), editor role requirement, surface_slug option, and supported markdown elements including file size limits for video embeds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose. It is dense with information but not verbose for the complexity covered. Minor repetition of 'same markdown surface as update_doc' could be tightened, but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the append mechanism (fetch, splice, write), mentions auth, events, and guard limits. It also covers special behaviors like mention firing and surface targeting, making it highly complete for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds valuable context beyond schema: slug accepts bare or org-prefixed forms, markdown becomes new blocks, surface_slug is optional for multi-doc workspaces. However, the extensive list of supported markdown is not parameter-specific.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool appends Markdown to the end of a workspace doc body, using specific verbs and resource. It distinguishes from siblings like update_doc by focusing on append behavior for cron/ingest agents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates it's designed for crons and ingest agents, implying a batch/timestamped context. It mentions non-idempotent nature and deduplication responsibility but does not explicitly contrast with alternative tools like update_doc for replacement scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_rowAInspect
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Row data as a JSON object (e.g. {"title": "My post", "status": "drafted", "notes": "Initial draft"}) | |
| slug | Yes | 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 | No | 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 | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses behaviors: unmapped keys stored but not rendered, response includes unmapped_fields and warning, auto-create columns atomic operation, auto-seed on first row if empty, and error condition for invalid surface_slug.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear paragraphs for unmapped fields and auto-create columns. Front-loaded with core purpose, then detailed. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all scenarios: empty table, multi-surface, unmapped storage, auto-create. Context signals indicate no output schema, but description hints at response fields (unmapped_fields, created_columns). Complete for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds semantic details: explains data keys mapping, auto_create_columns behavior and response, and surface_slug fallthrough. Goes beyond schema to clarify edge cases.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Append a new row to a workspace's table surface' with a specific verb (append) and resource (row). It distinguishes this creation action from siblings like update_row and delete_row.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: when to use surface_slug (multi-surface workspaces), when to use auto_create_columns (machine-emitted rows), and when to omit it (explicit schema control). Offers alternatives like list_surfaces for enumeration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_support_ticketAInspect
File a support ticket. Mirrors to a GitHub issue in Dock's support repo and shows up in the user's dashboard at /settings/support. Use this for bugs (you hit an error), feature requests (Dock is missing something), billing (Stripe/subscription), questions (how do I X), or anything else. Prefer request_limit_increase when the user is simply hitting a plan cap.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Detailed description (5-10000 chars). For bugs: include what you did, what happened, what you expected. For feature requests: the use case. | |
| kind | Yes | Ticket category. | |
| title | Yes | Short headline (3-200 chars). Be specific: 'Table view loses focus on cell edit' beats 'broken'. | |
| context | No | Optional structured metadata echoed into the GitHub issue (workspace slug, URL, error trace, etc). | |
| attachmentUrls | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses that the ticket mirrors to a GitHub issue in Dock's support repo and appears in the user's dashboard. It provides details on attachment URL requirements (must be from Dock blob store via upload endpoint). While it doesn't mention rate limits or permissions, the behavior is well-explained for a support ticket tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences plus a brief list of use cases. Every sentence adds necessary information with no waste. It is front-loaded with the primary purpose, followed by practical usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description sufficiently explains the outcome (mirrors to GitHub issue, appears in dashboard). It covers the main use cases, parameter tips, and attachment process. The tool does not require complex contextual details beyond what is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters documented. The description adds value beyond the schema by clarifying the 'kind' enum categories, providing tips for title specificity ('Table view loses focus on cell edit' beats 'broken'), and explaining the 'attachmentUrls' prerequisite (must be hosted on Dock blob store via upload). This enhances understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('File a support ticket') and the resource (support ticket/GitHub issue). It lists specific use cases (bugs, feature requests, billing, questions) and explicitly distinguishes itself from the sibling 'request_limit_increase' by stating when to prefer that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (bugs, feature requests, billing, questions, etc.) and when not to ('Prefer request_limit_increase when the user is simply hitting a plan cap'). This clearly differentiates from the sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_surfaceAInspect
Create a new surface (tab) inside a workspace. kind picks table, doc, or html. Optional slug (lowercase kebab-case, 3-64 chars); when omitted the server slugifies name and appends a numeric suffix on collision. Optional columns overrides the default Title/Status/Notes triple for table kinds; ignored for doc and html. html surfaces start with an empty body — write content via update_html. Editor role required. Emits surface.created so live listeners on the workspace stream see the new tab without a refetch.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Surface kind. `table` for rows + columns, `doc` for TipTap body, `html` for a sandboxed HTML mockup tab. | |
| name | Yes | Display name shown on the tab. 1-64 chars. | |
| slug | Yes | 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 | No | Optional initial columns for `table` kind. Same shape as get_workspace_schema returns. Defaults to Title/Status/Notes when omitted. | |
| surface_slug | No | Optional URL-friendly slug for the surface (lowercase kebab-case, 3-64 chars). Auto-derived from `name` when omitted. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully discloses behaviors: slug auto-derivation and collision handling, column default behavior for table kind, html starting empty, emission of surface.created event, and the role requirement. This is comprehensive for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet informative, using clear sentences that front-load the main action. Every sentence adds value without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers creation behavior, parameter details, and event emission. However, it lacks explicit information about the return value of the tool (likely the created surface object). For a tool with no output schema, this is a minor gap in an otherwise complete description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 5 parameters. The description adds value by explaining auto-derived slug behavior, column defaults for table, that columns are ignored for doc/html, and that editor role is required. This goes beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new surface (tab) inside a workspace' using a specific verb and resource, and distinguishes this creation tool from sibling tools like update_surface, delete_surface, and list_surfaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use each kind (table/doc/html) and explains optional parameters like slug and columns. It also mentions the required Editor role. However, it does not explicitly state when not to use this tool or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhookAInspect
Register a new webhook endpoint on an org. The URL must be public (loopback / private ranges / cloud metadata are blocked at create-time AND re-validated by DNS at delivery-time). Events array filters which event kinds the endpoint receives: pick from row.* / comment.* / member.* / 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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | 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 | Yes | 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 | Yes | Org slug |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description thoroughly covers behavioral traits: URL validation at create-time and DNS re-validation at delivery, the 'none' behavior for empty events, and the one-time return of the signing secret.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single paragraph that is concise and front-loaded with key info. While dense, it is well-organized and earns each sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 required params, no output schema, no annotations), the description adequately covers URL constraints, event behavior, and secret handling. It is complete for guiding correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage with descriptions. The description adds minor nuance (e.g., empty events means 'none', store the secret), but does not significantly extend beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it registers a new webhook endpoint on an org, with specific details like URL constraints and event filtering. It distinguishes from sibling tools like delete_webhook or update_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies that the URL must be public and events array cannot be empty, providing clear context for use. However, it does not explicitly mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workspaceAInspect
Create a new workspace in the caller's org. Works for both user and agent callers; agent-created workspaces attribute to the agent and enroll the agent's owning user as a co-owner so the human sees it in their dashboard. The new workspace is seeded with one primary surface matching mode: doc → a Notes tab (for prose), table → a Sheet tab (for records), html → a Mockup tab (sandboxed HTML preview). Decide the surface before you create: prose (briefs, notes, summaries, drafts) → doc; records with shared columns (tasks, leads, rows) → table. If you omit mode it falls back to doc when initial_markdown is supplied and table otherwise — a bare create with no content silently becomes a Sheet, so pass mode (or initial_markdown) rather than letting the fallback guess. html is only picked when explicitly requested. Add more tabs of any kind later via create_surface. Agent-created workspaces default to org-visibility so sibling agents in the same org aren't 403'd. For prose content (briefs, summaries, changelogs) pass initial_markdown to seed the doc body in one call; the markdown is converted server-side, no need to hand-build ProseMirror JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 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, for landing-page mockups + design previews), opt-in only. Pass this explicitly rather than relying on the fallback: when omitted it defaults to 'doc' if initial_markdown is supplied, otherwise 'table' — so a bare create with no content silently becomes a Sheet, which is the wrong surface if you meant to write prose. Add more tabs of any kind via `create_surface` later. | |
| name | Yes | The workspace name. Required. Used to derive a slug if you don't pass one. | |
| slug | No | 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 | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses many behavioral traits: how agent-created workspaces differ (attribution, co-owner enrollment), seeding of primary surface based on mode, fallback logic, org-visibility default for agents, and server-side markdown conversion. No contradictions with any implicit assumed behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but every sentence adds value. It is front-loaded with the core purpose. Minor redundancy could be trimmed (e.g., repeated advice to pass mode), but overall it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no output schema, no annotations), the description is very complete. It covers purpose, usage, behavioral details, and parameter semantics thoroughly. However, it does not describe the return value (e.g., workspace ID or shape of created workspace), which would be expected since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100% (baseline 3), the description adds substantial meaning beyond the schema: it explains the mode enum in context of use cases (prose vs records vs html), the fallback rule, the purpose of initial_markdown to avoid empty defaults, and the auto-derivation of slug with collision handling. This compensates richly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Create a new workspace in the caller's org', which is a specific verb+resource. It clearly distinguishes from sibling tools like create_surface by noting that additional tabs can be added later via that tool, and from delete_workspace and update_workspace by focusing on creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance, including choosing mode based on content type (prose, records, html), instructions to pass mode or initial_markdown rather than relying on fallback, and advice to use create_surface for additional tabs. It also states agent-created workspaces default to org-visibility to avoid 403 errors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileAInspect
Soft-delete a file by id. Moves to a 30-day trash window before the cleanup cron hard-deletes + refunds the storage quota. Restorable via the REST PATCH endpoint (PATCH /api/workspaces/{slug}/files/{id} body: {restore:true}); a PATCH-equivalent MCP tool ships in Phase 6. Editor role required. Gated behind FILES_SURFACE_ENABLED + per-user allowlist.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | The file cuid (from list_files). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses soft-delete nature, trash lifecycle, quota refund, restore endpoints, role requirement, and feature flags. Comprehensive behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each dense with information. Front-loaded with primary action, then critical lifecycle details. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully explains the delete lifecycle, restore process, prerequisites, and feature gating. For a delete tool with no output schema, no gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters with 100% description coverage. Description doesn't add new meaning beyond 'by id' for file_id; baseline 3 is appropriate as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Soft-delete a file by id.' Distinguishes from sibling tools like list_files and get_file by specifying the action and mentioning restore alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies when to use (to soft-delete), the 30-day trash window, restore options via REST and future MCP tool, required Editor role, and feature gating. Provides clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_rowAInspect
Permanently delete a row from a workspace. This action cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | The row ID to delete |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the irreversible nature of the deletion ('cannot be undone'), which is a key behavioral trait. However, it does not mention required permissions, side effects, or other behavioral aspects, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, containing only two sentences with no redundant information. It is front-loaded with the core purpose and follows with a critical warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with two parameters and no output schema, the description is largely sufficient. It states the action and its permanence. A minor gap is the lack of mention of the return value, but this is not critical for selection or invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add any meaning beyond the schema; both parameters are adequately described in the schema, and the tool description repeats none of that detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'delete' and the resource 'a row from a workspace', making the action unambiguous. It distinguishes itself from sibling tools like create_row, update_row, and delete_workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It lacks explicit context or exclusions, merely stating the action and its permanence without directing the agent away from similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_surfaceAInspect
Archive a surface (soft-delete). Rows + doc body are preserved for restore. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | The slug of the surface to archive. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It fully discloses soft-delete nature, idempotency, preservation, constraint on last surface, required permission, and event emission. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five focused sentences, each adding critical information. Front-loaded with purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers all necessary behavioral aspects: idempotency, permissions, constraint, event, and data preservation. Complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add extra meaning beyond what schema already provides for the two parameters (slug, surface_slug).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Archive' and resource 'surface', using 'soft-delete' to distinguish from hard deletion. It highlights preservation of rows and doc body, setting it apart from sibling delete tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context: idempotent behavior, constraint against archiving the only live surface, required editor role, and emitted event. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhookAInspect
Permanently delete a webhook endpoint. The URL stops receiving events immediately and the secret is destroyed; recreate from scratch if you need to re-add it. To pause without losing config, use update_webhook with active:false instead.
| Name | Required | Description | Default |
|---|---|---|---|
| org_slug | Yes | Org slug | |
| webhook_id | Yes | Webhook id (from list_webhooks) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that deletion is permanent, URL stops immediately, secret is destroyed, and recreation is needed. This covers the key behavioral traits for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first states purpose, second details consequences, third offers alternative. Front-loaded and efficient with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and simple parameters, the description covers purpose, behavior, and alternative. Missing explicit return value or confirmation, but deletion tools typically return success status, and the description is adequate for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters already described ('Org slug', 'Webhook id'). Description does not add additional meaning beyond what the schema provides, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Permanently delete a webhook endpoint' with a specific verb and resource. It distinguishes from siblings like create_webhook, update_webhook, and list_webhooks by emphasizing the permanent nature and providing alternative for pausing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explicitly says when to use (permanent deletion) and when not to (to pause, use update_webhook with active:false instead). It names the alternative tool and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_workspaceAInspect
Archive a workspace. Soft-delete: rows, doc body, and activity history are preserved, and the workspace can be restored from Settings · Archived. Every member loses access immediately. Idempotent: calling on an already-archived workspace returns its current archivedAt without changing anything. Requires editor role on the agent. 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 + approves, you poll polling_url for the result. Without mode: "web" the call executes immediately on the agent's editor role.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 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 | Yes | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description thoroughly discloses soft-delete preservation, immediate member access loss, idempotency, role requirements, and the two execution modes with their return formats. This fully compensates for missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but well-structured, starting with the core purpose and then expanding on behavior, idempotency, role, and mode workflow. Every sentence adds value, though it could be slightly more concise without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains return values for both modes (immediate success or approval flow). It covers prerequisites, side effects, and idempotency, making it complete for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters have 100% schema description coverage, and the description adds significant value: explains the 'mode' enum behaviors and 'slug' format flexibility (bare vs org-prefixed). This goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Archive a workspace' and uses 'soft-delete' to distinguish from permanent deletions. Among sibling tools like 'delete_row' and 'delete_file', this tool's archival purpose is unique and well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use the tool (archiving a workspace) and recommends 'mode: web' for non-trivial workspaces. However, it does not explicitly state when not to use it or list alternatives, though none exist among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
downgrade_planAInspect
Schedule a downgrade to Free at the end of the current billing period. The org keeps its current plan (Pro or Scale) and paid limits until the period ends. 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 { status: 'approval_required', approval_url, polling_url }; print approval_url in chat, user clicks + approves, then poll polling_url for the result.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 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 | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses the tool's behavior: it is not immediate, it is consent-gated, requires two calls in chat mode with a 60s timeout, and in web mode requires browser approval and polling. Also notes no-op condition. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with the core action, then detailing the two modes. Every sentence provides unique value without unnecessary verbosity. For the complexity of the tool, it is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and involves a two-step consent process, the description fully covers the workflow: scheduling behavior, no-op, consent modes, token management, and polling. It is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters, but the description adds crucial context beyond the schema: it explains the entire round-trip flow for each mode, the role of confirm_token, and the difference between chat and web surfaces. This significantly aids correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it schedules a downgrade to Free at the end of the billing period, distinguishing it from the sibling 'upgrade_plan'. The verb 'schedule' and resource 'downgrade to Free' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use (to downgrade to Free), when not to (already on Free is a no-op), and provides detailed guidance on the two consent modes (chat vs web), including multi-step call sequences, confirm_token usage, and polling instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_formulaAInspect
Evaluate a formula expression against an actual Dock workspace's columns + rows, server-side, returning the same display value the UI's HyperFormula engine would render. Two modes: STANDALONE (omit workspace_slug) — evaluates against an empty grid; useful for =SUM(1, 2, 3) or 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; standalone mode is public.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | 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 | Yes | Formula expression including '='. Max 4000 chars. | |
| workspace_slug | No | Optional workspace slug. Pass to evaluate against the workspace's actual rows + columns. Accepts bare or org-prefixed form. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the two execution modes, the return format ({ ok, displayValue, error? }), and access requirements. It could be more explicit about read-only nature and any limits (e.g., character max mentioned in schema), but overall it is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured paragraph that separates the two modes with clear labels (STANDALONE, IN-WORKSPACE). Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (two modes, parameter interactions), the description covers all essential information: return format, mode selection, parameter roles, access prerequisites. Without an output schema, it still specifies the return shape, making it complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 100%, baseline is 3. The description adds meaning by explaining how workspace_slug and at interact, providing examples (e.g., standalone formula =SUM(1,2,3)), and clarifying that at is only relevant in workspace mode. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool evaluates a formula expression against a workspace or empty grid, returning the display value. It explicitly distinguishes two modes (standalone vs in-workspace) and differentiates from siblings like validate_formula by emphasizing execution against actual data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each mode: omit workspace_slug for standalone formulas without cell references, pass workspace_slug for workspace-dependent evaluation. It also mentions access requirements (read access for workspace mode, public for standalone) and explains the optional at parameter's role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_billingAInspect
Get the caller's org billing summary: current plan (free, pro, or scale), active counts and caps for every gated resource (agents, members, workspaces, rows per workspace, API calls per month, webhooks per month, messages per month bundle), monthly price in cents, card on file if any, next invoice date. Both humans and agents can call this. Use before upgrade_plan to check whether you're actually capped, and after to confirm the new plan landed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies read-only behavior ('Get'), but does not explicitly state no side effects, auth requirements, or rate limits. The note about humans and agents hints at accessibility but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, but the first is a long list. It is efficient but could be more structured. Every sentence adds value, no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly explains the return values (plan, caps, counts, price, card, next invoice) and provides usage context. It is complete for a parameterless info tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100%. Per guidelines, baseline is 4. The description adds value by listing the returned fields, which compensates for the lack of output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the caller's org billing summary with a specific verb and resource. It lists the exact fields included (plan, caps, counts, price, etc.) and explicitly ties it to sibling tools like upgrade_plan, distinguishing its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: use before upgrade_plan to check caps, and after to confirm plan change. Also states both humans and agents can call. While it doesn't state when not to use, the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_comment_threadAInspect
Fetch a single comment with its replies + reactions in one round trip. Pass any comment id in the thread (root or reply). Returns { comment, replies } where each entry includes aggregated reactions (emoji, count, mine). Use this when an agent receives a comment.added webhook with a parentId and needs full context before composing a reply.
| Name | Required | Description | Default |
|---|---|---|---|
| comment_id | Yes | Comment id (any node in the thread). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In the absence of annotations, the description discloses key behavior: fetches thread in one round trip, accepts any comment id, returns structured data with aggregated reactions. Does not mention errors or rate limits, but covers primary behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero fluff, front-loaded with purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (1 param, no output schema), the description explains return shape and use case. Missing error handling info, but acceptable for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter already described. The description adds no new parameter info beyond the schema, but does provide usage context. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a single comment with replies and reactions in one round trip, using a specific verb and resource. It distinguishes from sibling tools like list_comments and reply_to_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: use when an agent receives a comment.added webhook with a parentId and needs full context before replying. No explicit when-not-to-use, but context implies it's for retrieving a specific thread, not listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_docAInspect
Read a workspace's doc (TipTap rich-text) body. Format is negotiable via format: markdown (default — CommonMark + GFM, ready to feed to an LLM or render in a non-ProseMirror surface), content (TipTap JSON, round-trippable into update_doc for structural edits), text (plain 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-tripping into update_doc for a structural edit. A workspace can hold any combination of doc and table surfaces, one or many of either kind; omit surface_slug to read the primary doc surface, or pass it to target a specific doc tab (use list_surfaces to enumerate). An unwritten or absent doc returns the requested format empty (markdown="", content={}, text=""); a surface_slug that doesn't match any live doc surface 404s.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | No | 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 | No | Optional doc surface slug for multi-doc workspaces. Omit to read the primary doc surface. Use list_surfaces to see available slugs. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: format negotiation, default markdown with rationale, empty returns for unwritten docs, and 404 for invalid surface_slug. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that is information-dense but slightly verbose. However, it is front-loaded with the main purpose and each sentence contributes value. Could be more structured but no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly explains return values for each format, behavior for missing docs, and error conditions. It covers all necessary context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant meaning: explains each format's use case, slug resolution, and surface_slug purpose. This goes well beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read a workspace's doc (TipTap rich-text) body.' using a specific verb and resource. It distinguishes from sibling tools like get_html, get_row, etc. by focusing on TipTap rich-text content and listing format options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use each format: 'Pass format: "content" only when you're round-tripping into update_doc for a structural edit.' It also instructs to omit surface_slug for primary doc or use list_surfaces to enumerate, and explains behavior for missing docs and invalid slugs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fileAInspect
Fetch metadata + a download URL for a single file by id. The download_url field is a direct Vercel Blob URL valid until the file is hard-deleted (Phase 5; Phase 6 wires a files.trydock.ai signed-URL minter with 5-min TTL + auth re-check). Useful for an agent reading file contents server-side (HTTP GET the URL) or surfacing a download link in a reply. Gated behind FILES_SURFACE_ENABLED + per-user allowlist.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | The file cuid (from list_files). Surface + workspace are derived from the file row, so no surface_slug arg is needed. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses URL validity (until hard-delete), future plan for signed URLs with TTL, and access control (FILES_SURFACE_ENABLED + per-user allowlist). Does not mention side effects (none expected).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, first sentence provides the primary action, no unnecessary words. Information is well-organized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Explains return value (metadata + download URL) and URL behavior, plus feature gates. Lacks detail on exact metadata fields returned, but adequate for a simple tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover 100% of parameters; the description adds a note about file_id being a cuid from list_files and that slug can be prefixed, but this is mostly redundant. Maintains baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool fetches metadata and a download URL for a single file by id, distinguishing it from sibling tools like list_files (which lists files) and delete_file (deletes). The verb 'Fetch' and resource 'file' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides usage context: useful for reading file contents server-side or surfacing download links. Mentions feature gating but does not explicitly compare to sibling tools or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_htmlAInspect
Read an HTML surface's body. HTML surfaces (Surface.kind="html") store mockup or full-page content as three text fields (html, css, js) rendered together inside a sandboxed iframe. Use list_surfaces to enumerate html surfaces in a workspace. Omit surface_slug to read the primary html surface; pass it to target a specific tab. Empty (never-written) html surfaces return { html:"", css:"", js:"" }. 404 when surface_slug doesn't match a live html surface. Requires viewer role.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The workspace slug. Accepts bare or org-prefixed form. | |
| surface_slug | No | Optional html surface slug. Omit to read the primary html surface. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the three text fields (html, css, js), sandboxed iframe rendering, empty surface behavior, 404 error condition, and required role. No annotations present, so description carries full burden and meets it well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each serving a distinct purpose: purpose, definition, usage, edge cases/errors. No redundant information, front-loaded with core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no output schema, the description covers response structure, error conditions, prerequisite enumeration tool, and role requirements. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage. Description adds value by explaining behavior when omitting or providing surface_slug, linking to list_surfaces, and clarifying the primary surface concept.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Read an HTML surface's body' with a specific verb and resource. Distinguishes from sibling tools like list_surfaces (enumeration) and update_html (write).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: mentions list_surfaces for enumeration, explains omitted surface_slug for primary surface, and specifies viewer role requirement. No explicit when-not-to-use, but sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_eventsAInspect
Get recent activity events for a workspace. Who did what, when. Useful for understanding what's happened since you last looked.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | No | Max events to return (default 20) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only mentions 'get' and 'activity events', but does not state that the operation is read-only, what types of events are included, or any permissions required. This leaves significant gaps for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with only two sentences, front-loading the core purpose. Every word earns its place, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool retrieves a list of events and has no output schema, the description should clarify what fields are returned (e.g., user, action, time). It only vaguely mentions 'who did what, when', which is insufficient for complete understanding. However, the tool is simple with only two parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters already described in the schema. The tool description adds no additional parameter meaning beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves recent activity events for a workspace, using specific verb 'Get' and resource 'recent activity events'. It distinguishes from sibling tools like 'list_workspace_members' and 'get_workspace' by focusing on activity events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for 'understanding what's happened since you last looked', providing context but no explicit guidance on when not to use or alternatives. No exclusions or sibling comparisons are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rowAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | The row id |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description clearly indicates a read operation with no side effects, and states the output shape matches list_rows. However, it could explicitly mention idempotency or lack of mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose, second provides usage context and output behavior. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fetch tool with 2 required parameters, full schema descriptions, and no output schema needed, the description provides sufficient context: purpose, when to use, and return type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra meaning beyond what the schema already provides for the two parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch' and the resource 'a single row by id', and distinguishes itself from the sibling 'list_rows' by noting it does so 'without listing the full table'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'when a cue payload carries a row id and the agent only needs that one record', which helps differentiate from alternatives like list_rows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspaceAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It transparently describes the tool as a read operation that returns workspace details, columns, member count, and row count. While it doesn't explicitly state 'read-only', the behavior is clear. It also explains workspace structure, which adds context beyond simple functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a parenthetical, front-loaded with the core purpose. Every sentence adds value: first states function, second provides context about the data model and related tools. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one required parameter, no output schema, and moderate complexity (workspace structure explained), the description is complete. It tells the agent exactly what the tool does, what it returns, and how it fits into the broader API ecosystem (e.g., surfaces, list_surfaces). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter ('slug'), and its schema description already covers the accepted formats (bare slug or org-prefixed). The tool description does not add any additional meaning beyond the schema. With 100% schema description coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Get details about a specific workspace by its slug, including columns of its primary table surface, member count, and row count.' This is a specific verb+resource+scope, clearly distinguishing it from siblings like list_workspaces (list all) and get_workspace_schema (schema only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool vs alternatives: 'Use list_surfaces to enumerate every tab; fetch /rows or /doc to read or write a specific one.' This provides clear guidance on context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspace_schemaAInspect
Return a table surface's column definitions so an agent knows what keys create_row/update_row will accept. Each column has key (the field name in row.data), label (human-readable), type (text | longtext | url | status | owner | date | number), position, and, for status/owner 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 workspace's primary table surface.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | No | 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). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return format (key, label, type, position, options), behavior on doc-only workspaces (empty array but writable), and multi-surface scoping. No annotations provided, so description fully covers behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph packs substantial information without redundancy. Slightly long but efficient; each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers edge cases (doc-only workspaces, multi-surface), explains return values despite no output schema, and provides sufficient detail for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds significant meaning beyond schema: explains slug accepts two forms, surface_slug optional with fallback to primary table, and references list_surfaces for discovery. Schema coverage is 100%, and description enriches both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Return a table surface's column definitions' and explains the purpose ('so an agent knows what keys create_row/update_row will accept'). Distinguishes itself from sibling tools focused on data operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on when to use the optional surface_slug parameter and mentions list_surfaces for enumeration. Implicitly guides usage before row operations, but does not explicitly state when not to use this tool or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_api_keysAInspect
List API keys. Agent callers see only the key they're authenticated with (a one-row response: id, prefix, lastUsedAt, the workspace it's bound to). User callers (cookie session) see every key for every agent they own. Plaintext is never returned; the key body is shown only once at create/rotate time.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses that agent callers see only their key, user callers see all keys for agents they own, plaintext is never returned, and key body is only shown at create/rotate time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the main action, and provides essential details without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description fully explains the tool's behavior, including caller type differences and security aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema (0 params, 100% coverage). Baseline is 4, and the description adds no parameter info as none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List API keys' and provides specific details on what data is returned for different caller types, distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains behavior for agent vs user callers but does not explicitly state when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commentsAInspect
List comments in a workspace. Filter by target_type (row, cell, doc_range, html_element, surface, workspace), target_id, surface (returns every comment anchored to any element of one surface, useful for 'open threads on this tab'), 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 boundaries. Use get_comment_thread to pull a single comment plus its replies + reactions.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The workspace slug. | |
| limit | No | Max results (1-200, default 50). | |
| author | No | Filter by author principal id. Useful for 'comments by Argus on this workspace' agent loops. | |
| offset | No | Number of comments to skip for pagination. | |
| status | No | Resolution state filter. Default `open`. | |
| surface | No | 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 | No | 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 | No | Filter by comment target type. | |
| mentioning_me | No | When true, only return comments that @-mention the calling principal. Equivalent to REST `?mentioning=me`. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details return limits (up to 200 comments ordered by createdAt asc), denormalization of surfaceSlug, and pagination (limit, offset). It implies read-only behavior but does not explicitly state it. No annotations are present, so the description carries the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences but packed with information. It is front-loaded with the main purpose, then details filters and return behavior. While slightly dense, every part serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters and no output schema, the description covers all key aspects: filtering options, pagination, ordering, special behaviors (archive handling), and mentions a sibling tool. It is complete for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context beyond the schema, such as the 'surface' filter being useful for 'open threads on this tab' and that it returns 404 silently if archived. It also explains the 'author' filter as useful for agent loops.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List comments in a workspace,' with a specific verb and resource. It distinguishes itself from sibling tools like `get_comment_thread` by noting its broader listing capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (listing comments with various filters) and points to an alternative: 'Use `get_comment_thread` to pull a single comment plus its replies + reactions.' It also explains filter use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesAInspect
List the folder + file children of a Files surface (kind='files'). Folders sorted first by position then name; files sorted by name. Returns folders[], files[] with cuids agents can pass to get_file / delete_file. parent_folder_id defaults to null (= root of the surface); pass a folder id to descend into a sub-folder. Gated behind FILES_SURFACE_ENABLED + per-user allowlist (in beta on socrates@vector.build; other accounts get -32000 'not available').
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | Files-kind surface slug within the workspace. Use list_surfaces to enumerate; the Files surface kind is 'files'. | |
| parent_folder_id | No | Folder id to descend into. Omit (or pass null) for the surface root. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description fully discloses behavioral traits: sorting, return structure, default root behavior, and gating conditions (feature flag, allowlist, error code).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear, front-loaded sentences. No wasted words; each sentence adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description explains return structure (folders[], files[] with cuids) and covers parameters, sorting, and gating. Complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, but description adds meaning: slug accepts bare or org-prefixed form, surface_slug from list_surfaces, parent_folder_id omission for root. Adds value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists folder and file children of a Files surface, specifies sorting order, and distinguishes from sibling tools like get_file and delete_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on when to use (listing children of a Files surface) and defaults (parent_folder_id null for root). References list_surfaces for enumeration but lacks explicit exclusions or alternatives for non-Files surfaces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_filesAInspect
List 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. Gated behind FILES_SURFACE_ENABLED + per-user allowlist.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | Files-kind surface slug within the workspace. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: returns only 50 files, sorted descending, flat view, folders omitted, gated access. Missing a statement about read-only nature, but that is implied by listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences compactly deliver purpose, sorting, scope, use cases, and access constraints. No fluff; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description effectively explains the output (50 files, sorted, no folders) and parameter behavior. It fully equips an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds value beyond the schema, e.g., explaining that `slug` accepts either bare or org-prefixed form and that `surface_slug` is for a 'Files-kind' surface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists the 50 most recently updated files, sorted by `updatedAt` descending, as a flat surface-wide list ignoring folder structure. This specific verb+resource combination distinguishes it from siblings like `list_files` which may offer folder-aware navigation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states useful scenarios ('what changed lately', 'show me yesterday's uploads') and mentions it avoids paging. Also notes gating (FILES_SURFACE_ENABLED + per-user allowlist). Could improve by directly naming an alternative for folder-aware access, but the current guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rowsAInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | No | Max rows to return (default 100, max 1000) | |
| offset | No | Number of rows to skip (for pagination) | |
| surface_slug | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully covers return format, edge cases (empty array), parameter interactions (surface_slug scope), and error conditions (400 for invalid surface_slug). It is transparent about all critical behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but is front-loaded with the core purpose and uses subsequent sentences efficiently to add details. Could be slightly more structured, but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description covers paging, multi-surface behavior, return structure, and error handling. It is complete for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining slug formats (bare vs prefixed) and surface_slug behavior in multi-surface vs legacy mode, enhancing beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action (list rows), the resource (workspace table surface), and what is returned (data, creation time, creator/updater, surface_slug). It distinguishes from siblings like get_row by focusing on listing multiple rows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for using the surface_slug parameter in multi-surface workspaces and behavior when omitted. Does not explicitly contrast with alternatives like get_row, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sheet_functionsAInspect
List the Dock Sheets formula functions an agent can use in a cell carrier. Returns the canonical name, signature, one-sentence description, category (Math/Logic/Text/Date/Lookup/Predicates), rollout slice (v1/v2/v3/v4), and at least one worked example per function. Use this 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 narrows to one rollout slice, name substring-matches names + descriptions + signatures. Public, no auth, no rate limit beyond global.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional case-insensitive substring filter; matches function name, description, and signature. | |
| slice | No | Optional rollout-slice filter. | |
| category | No | Optional category filter. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavioral traits: it is a public read-only operation with no auth or rate limiting, returns detailed data including worked examples, and has optional filters. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough but slightly lengthy. It is well-structured with front-loaded purpose and clear details. Could be marginally more concise but effectively communicates all necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description comprehensively explains return values (canonical name, signature, description, category, slice, worked examples, alias map). It covers all relevant aspects for an agent to effectively use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions, but the description adds extra meaning (e.g., 'name' matches names, descriptions, and signatures; 'category' and 'slice' narrow results). This goes beyond schema explanations, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('List the Dock Sheets formula functions') and a clear resource, distinguishing it from sibling tools like update_row, create_row, evaluate_formula, and validate_formula. It conveys exactly what the tool does and why it's useful.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool: 'Use this before writing a formula via update_row / create_row so you only reference functions that actually exist (no #NAME? errors).' It also mentions the alias map, guiding the agent to pick canonical names. This provides clear context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_surfacesAInspect
List the surfaces (tabs) inside a workspace. A workspace can hold any combination of table (rows + columns) and doc (TipTap body) surfaces, one or many of either kind; 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 tab strip. Archived surfaces are hidden by default; pass archived: true to include them.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | No | Include archived surfaces too. Default false (live tabs only). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It explains that surfaces can be table or doc, each has a slug, order matches the tab strip, and archived surfaces are hidden by default. It does not explicitly state the tool is read-only or mention permissions, but the listing nature is implied. The description adds value but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, well-structured, and front-loaded. Every sentence adds value without redundancy. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description hints at the return (tells you what surfaces exist, each has slug, order) but does not specify the exact format. It covers the essential aspects of what the tool does and its parameters, making it sufficiently complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds meaning by clarifying that 'slug' accepts either bare or org-prefixed forms and explaining the 'archived' parameter's default behavior. This enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists surfaces (tabs) inside a workspace, explains what surfaces are (table and doc types), and mentions slug usage and order. It distinguishes from sibling tools like 'create_surface' or 'list_workspaces' by focusing on listing existing surfaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to know what surfaces are in a workspace), mentions archived surfaces are hidden by default with an option to include them, and implies it's for exploring workspace contents. It lacks explicit when-not-to-use or direct comparisons to siblings, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksAInspect
List webhook endpoints registered on an org. Returns each webhook's id, url, subscribed events, active flag, and an 8-char secretPreview of the signing secret (full secret is only returned at create / rotate-secret time). Any org member (user or agent) can list. Use to audit what's subscribed before adding or removing endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| org_slug | Yes | Org slug. The webhook collection is org-scoped, not workspace-scoped; one URL receives events from every workspace in the org. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses return fields (id, url, subscribed events, active flag, secretPreview), clarifies full secret only at create/rotate, and states org-scoping versus workspace-scoping.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, return details, usage note. No wasted words, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully describes input, output, and usage context despite no output schema. Sibling tools exist, but description sufficiently differentiates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of params (org_slug). Description adds significant value: explains that the collection is org-scoped, not workspace-scoped, and one URL receives events from all workspaces.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'List webhook endpoints'. Specifies scope ('on an org') and return fields. Distinct from sibling tools like create_webhook or delete_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states usage: 'Use to audit what's subscribed before adding or removing endpoints.' Also notes any org member can list. Lacks explicit when-not, but context implies it's for read-only auditing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspace_membersAInspect
List principals with explicit access to a workspace. Returns users (id, name, email; email visible only when the caller is in the same org) and agents (id, name, brandKey) along with their role (owner | editor | commenter | viewer). Used by agents to verify a workspace is actually shared before writing output the team is expected to see.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that email visibility depends on org membership, and that it returns only explicit access members. It does not cover auth requirements or rate limits, but for a simple list tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the main purpose, and consists of two efficient sentences with no unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and no output schema, the description is complete. It explains the output structure, a usage scenario, and parameter details, leaving no obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'slug' has 100% schema coverage, but the description adds valuable detail: it accepts both bare and org-prefixed forms, and notes they resolve to the same workspace. This goes beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists principals with explicit access to a workspace, including the returned fields (users, agents, roles) and a specific use case for agents. This distinguishes it from sibling tools like share_workspace, list_workspaces, and member management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for when to use the tool: to list members and verify workspace sharing before writing output. While it does not explicitly state when not to use or list alternatives, the context is sufficient for appropriate tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. The description implies a read-only operation by stating 'List all workspaces', but does not explicitly confirm idempotency, lack of side effects, or any rate limits. For a list tool, the description is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with the main purpose upfront. The additional context about workspace definition is useful but slightly extends the length. Overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and no annotations, the description adequately covers the return fields and directs to a related tool. It could mention pagination or ordering, but that is optional for a simple list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (schema coverage 100%), and the description correctly indicates no input beyond authentication is needed. Per scoring guidelines, baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'workspaces', specifying scope ('authenticated principal has access to') and return fields. It distinguishes from siblings like list_surfaces, which lists contents of a workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs to 'Use list_surfaces to see what a given workspace actually contains', providing clear guidance on when to use an alternative tool. However, it does not cover other sibling tools like get_workspace or create_workspace.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_rowsAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | 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 | Yes | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses critical behavioral traits: atomicity (all-or-nothing), idempotency (skips existing rows), order preservation, event emission, and workspace validation. It also specifies the max row limit and error handling for invalid row IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses six concise sentences, front-loading the core action and constraints. Every sentence adds unique value: atomicity, use cases, idempotency, ordering, events, and limit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers return values (mentions skipped count), effects (events), errors, and limits. It provides sufficient context for the agent to invoke the tool correctly without needing additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage for all parameters. The description adds minimal additional meaning beyond repeating schema information (e.g., slug forms, target error). Baseline 3 is appropriate as the schema carries the semantic load effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool atomically moves rows between sheets within the same workspace. It provides specific use cases like data migration and reorganizing content, distinguishing it from sibling tools like create_row, delete_row, and update_row.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it (programmatic data migration, reorganizing content) and key constraints (atomic, idempotent, order preserved, max 500 rows). However, it lacks explicit guidance on when not to use or alternatives, leaving some implicit inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
react_to_commentAInspect
Add or remove an emoji reaction to a comment. Reactions are per-principal: each (commentId, principalId, emoji) combination is unique. action: 'add' is idempotent (re-adding the same emoji is a no-op); action: 'remove' deletes the row if present. Fires comment.reaction_added / 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.
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | Yes | Emoji character (e.g. '👍', '✅', '🚀'). | |
| action | No | Whether to add or remove the reaction. Default `add`. | |
| comment_id | Yes | Comment to react to. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses idempotency for add, row deletion for remove, per-principal uniqueness, and event firing. Since no annotations are provided, the description fully carries the burden of behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff, front-loaded with main purpose, efficient and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers use cases, behavioral details, parameter semantics, and events; no output schema needed, and description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond the schema by explaining idempotency, uniqueness, and example emojis, even though schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states 'Add or remove an emoji reaction to a comment' with specifics about uniqueness per principal, clearly distinguishing from siblings like add_comment or reply_to_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases for lightweight agent acknowledgement (👍, 👀, ✅) and states it's cheaper than a full reply, but does not explicitly mention when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_workspace_memberAInspect
Remove 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 consent step.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | Yes | The WorkspaceMember id to remove. Get this from list_workspace_members. | |
| confirm_token | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It comprehensively discloses required role (editor), owner-tier constraints, sole-owner block, org-visibility effect on virtual access, and the two-step consent process. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though lengthy, every sentence provides necessary behavioral context. Front-loaded with core action. Minor verbosity justified by complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all critical aspects: role requirements, edge cases (sole owner, org visibility), consent flow details, and return shape. No output schema needed as description handles return information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and description adds significant value: slug accepts org-prefixed form, member_id sourced from list_workspace_members, confirm_token explained with consent flow and TTL.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Remove a workspace member,' a clear and specific verb-resource pair. It distinguishes from sibling tools like update_workspace_member and list_workspace_members by focusing on removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when not to use (sole owner removal blocked) and provides detailed consent-gated flow instructions. However, it does not directly compare with alternatives like update_workspace_member for membership changes other than removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_commentAInspect
Convenience wrapper around add_comment for the common reply case. Pass the parent comment id and the body; the handler reconstructs the target from the parent (no need for the agent to remember whether the parent was a row, cell, doc_range, html_element, surface, or workspace 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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Reply body (1-5000 chars). | |
| mentions | No | Optional `[{ kind, id, label }]` mentions on the reply. Same validation + fan-out rules as add_comment. | |
| comment_id | Yes | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that the tool is a wrapper, re-opens resolved parents, and flattens nested replies (reply-to-reply re-points at the root). It also references 'same threading rules as add_comment' which is adequate given the tool is a convenience wrapper. However, it does not fully detail the threading rules, but the key behaviors are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences), front-loaded with purpose, and each sentence adds unique value: purpose, convenience aspect, and edge cases (re-opening parent, threading rules). There is no redundant or extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a convenience wrapper with 3 parameters and no output schema, the description covers the core functionality and important behavioral details (re-opening resolved, flattening). It references add_comment for additional threading rules, which is sufficient. A minor gap is the lack of explanation about the mental parameter, but it is optional and described in schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description mentions passing 'parent comment id and the body' which corresponds to required params, but adds no new semantic detail beyond what the schema already provides. The mention of 'mentions' is not described in the description, but the schema covers it. The description does not enrich parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'convenience wrapper around add_comment for the common reply case.' It specifies the action (reply), the resource (comment), and distinguishes from add_comment by noting that it reconstructs the target from the parent, eliminating the need for the agent to know the parent type. This differentiates it from sibling tools like add_comment and react_to_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool: for replying to comments. It mentions that it re-opens a resolved parent and has the same threading rules as add_comment. It does not explicitly state when not to use or provide alternatives, but as a convenience wrapper, the context is clear. The mention of 'no need for the agent to remember whether the parent was a row, cell, etc.' provides implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_limit_increaseAInspect
Ask Dock to raise a plan limit (agents, workspaces, rows, or other). We record the signal on the admin side; there's no reply loop. Use this when you hit a cap you can't resolve with upgrade_plan (e.g. you're already Pro but need a custom limit).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which limit to raise | |
| reason | No | Optional: 1-2 sentences on the use case | |
| desiredValue | No | Optional: the specific limit you'd like |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the one-way nature and that it records a signal on admin side. With no annotations, this adds value, though it could mention potential side effects or processing guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words, front-loaded with the action and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers the purpose and usage for a simple request tool. Could mention the return value (e.g., confirmation) but not critical given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds only marginal context. It repeats the enum values but doesn't elaborate beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool requests a plan limit increase, lists the specific limits (agents, workspaces, rows, other), and distinguishes from upgrade_plan by giving an example (already Pro needing custom limit).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use ('when you hit a cap you can't resolve with upgrade_plan') and what to expect ('no reply loop', 'record the signal'). Provides a concrete scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_revoke_agent_keyAInspect
Ask the human owner to revoke ANOTHER agent's active API key (sibling agent). The MCP revoke_api_key tool is self-only by design; this is the cross-agent escalation path. Returns { status: 'approval_required', approval_url, polling_url, expires_in }: print approval_url in chat 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 why.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | 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 | Yes | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return value shape, approval gate (owner must match), and polling mechanism. It also mentions that the reason appears verbatim on the consent card. However, it does not discuss error cases (e.g., non-existent target agent) or rate limits, which would improve completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and differentiation. Each sentence adds meaningful information without redundancy. It is appropriately sized for the tool's complexity, and the structure flows logically from purpose to behavior to parameter hints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and lack of output schema, the description covers all essential aspects: purpose, usage triggers, return format, approval mechanism, and parameter guidance. It leaves no major gaps for an agent to make a mistake.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters documented in schema). The description adds value by explaining that `reason` 'surfaces verbatim on the consent card' and that `target_agent_id` can be obtained from `list_workspace_members` or `list_workspaces`. This extra context helps the agent understand how to populate the parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Ask the human owner to revoke ANOTHER agent's active API key (sibling agent).' It immediately distinguishes itself from the sibling `revoke_api_key` tool by noting that tool is self-only. This provides a specific verb and resource with clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'when you've spotted credential leakage, misbehaviour, or a stuck sibling that needs a clean kill.' It also contrasts with `revoke_api_key` by calling it 'self-only by design,' making the alternative clear. This provides both context and exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_rotate_agent_keyAInspect
Ask the human owner to rotate ANOTHER agent's active API key (mint a new one + revoke the old). Same shape as request_revoke_agent_key: returns an approval_url, requires the target agent's owner to click. The new key plaintext is INTENTIONALLY not returned to the requesting agent; it's surfaced only to the human owner via Settings → Agents, who hands it to the target agent out of band. Use when you've spotted leakage and the target needs a clean credential without going dark mid-task.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | 1-2 sentences on why. Surfaces on the consent card. Capped at 500 chars. | |
| target_agent_id | Yes | The id of the sibling agent whose key should be rotated. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses critical behaviors: human owner must click approval, returns an approval_url, the new key plaintext is intentionally not returned to the requesting agent, and it is surfaced only to the human owner via Settings. Since no annotations are provided, the description fully carries the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with core purpose and action, followed by important caveats. It is a few sentences long but not overly verbose. Could be slightly more concise, but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains the return value (approval_url) and the workflow. It covers the purpose, usage, behavior, and parameter rationale completely for a tool that initiates an approval flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters with descriptions. The description adds context: reason is surfaced on consent card and capped at 500 chars, target_agent_id is a sibling agent. It also explains the rotation process (mint new + revoke old), adding value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it rotates another agent's API key with human owner approval. It distinguishes from sibling tools like request_revoke_agent_key and rotate_api_key by specifying the rotation action and the requirement of human involvement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly specifies when to use: 'Use when you've spotted leakage and the target needs a clean credential without going dark mid-task.' It contrasts with similar tools by noting it requires human owner approval and does not return the new key.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_commentAInspect
Mark a comment thread resolved. Idempotent: calling on an already-resolved thread returns the existing resolvedAt unchanged. Fires comment.resolved. Pair with unresolve_comment for the reverse. Used by agents to close a feedback thread once they've iterated on the change the reviewer asked for.
| Name | Required | Description | Default |
|---|---|---|---|
| comment_id | Yes | Comment id to resolve (use the thread root, resolving a reply targets the reply itself, not the thread). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses idempotency and fired event 'comment.resolved' without annotations. Could mention auth requirements but adequate for a simple action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each serving a distinct purpose: action, idempotency/event, and usage context with sibling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, behavior, parameter semantics, and usage context completely. No output schema needed; idempotent return value mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema by clarifying thread root vs reply behavior for comment_id, which is not in the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action 'Mark a comment thread resolved' with specific verb and resource. Distinguishes from sibling 'unresolve_comment' and explains usage context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions pairing with unresolve_comment, idempotency behavior, and the use case of closing a feedback thread after iterating on changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_api_keyAInspect
Revoke an API key (soft-delete via revokedAt). Subsequent requests with the key return 401. Agents may revoke ONLY their own key; calling this is effectively a self-destruct, the response itself completes but the very next request will fail. Users may revoke any key they own. To swap creds without going dark in the gap, use rotate_api_key instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | API key id to revoke. Omit when called by an agent; defaults to the agent's own current key. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it's a soft-delete via revokedAt, subsequent requests return 401, calling is effectively a self-destruct for agents, and the response completes but the next request fails. This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, but slightly verbose with multiple clauses. Each sentence adds value, so it's still efficient. A minor trim could make it more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional param, no output schema, no annotations), the description covers all essential aspects: purpose, usage, behavior, and parameter semantics. It is complete and leaves no ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional parameter 'id' with 100% coverage. The description adds crucial context: 'Omit when called by an agent; defaults to the agent's own current key.' This explains the default behavior, which is not obvious from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Revoke an API key (soft-delete via revokedAt)' and distinguishes it from the sibling tool 'rotate_api_key'. It uses specific verb 'revoke' and resource 'API key', making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Agents may revoke ONLY their own key' and 'Users may revoke any key they own'. It also provides a clear alternative: 'To swap creds without going dark in the gap, use rotate_api_key instead.' This gives complete when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rotate_api_keyAInspect
Atomically mint a new API key with the same agent / workspace / scopes / name and revoke the old one. Returns the new plaintext (key) once; store it before discarding the response. Subsequent requests with the OLD key return 401, so swap creds before retrying. Agents may rotate 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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses atomicity, return of new plaintext only once, invalidation of old key (401), and authorization constraints. No annotations provided, so description fully carries the transparency burden without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with front-loaded core action. Every sentence adds value: atomic operation, return handling, behavioral warning, authorization rules, and use cases. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary information for safe tool invocation: what it does, side effects, return value handling, caller permissions, and when to use. For a single-parameter tool with no output schema, this is comprehensive and leaves no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a complete description for the single `id` parameter (100% coverage). The tool description adds no new information about the parameter beyond the schema, so it meets the baseline but does not enhance semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines 'rotate' as atomically minting a new API key and revoking the old one, specifying preserved attributes (agent, workspace, scopes, name). This distinguishes it from sibling tools like 'revoke_api_key' which only revokes, and 'request_rotate_agent_key' which is a request action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context: use for routine credential hygiene or after a suspected leak. Specifies who can use it (agents vs. users) and how to handle the `id` parameter. Includes practical guidance on storing the key and swapping credentials before retrying due to 401 on old key.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rotate_webhook_secretAInspect
Mint a fresh signing secret for a webhook. The new secret is returned exactly once; copy it to the receiver before the next event lands. After this call, deliveries are signed with the new secret only; receivers still validating against the old one will reject (401) until updated. Use after a suspected leak or as part of routine rotation hygiene.
| Name | Required | Description | Default |
|---|---|---|---|
| org_slug | Yes | Org slug | |
| webhook_id | Yes | Webhook id (from list_webhooks) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses behavioral traits: secret returned exactly once, must copy to receiver before next event, after call new secret only, old receivers will 401 until updated. Covers single-use nature and authentication implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no redundancy. Front-loaded with action, then critical usage details, then use case examples. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, description explains return value ('new secret returned exactly once'), behavior, and consequences. Covers all necessary context for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already describes both parameters (org_slug, webhook_id) with 100% coverage. Description adds no additional semantic meaning beyond what schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description starts with 'Mint a fresh signing secret for a webhook,' clearly stating the verb and resource. It distinguishes from sibling tools like create_webhook or update_webhook by focusing specifically on secret rotation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'after a suspected leak or as part of routine rotation hygiene.' Also explains consequences of use (new secret only, old rejects). No explicit when-not-to-use or alternatives, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchAInspect
Search across everything the caller can already touch: workspace names, row cell values, and doc sections/paragraphs. Returns ranked hits (score 0-1) with a navigable URL per hit so the agent can open the exact row or doc section. Access-gated; never returns hits from workspaces 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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query. Case-insensitive substring match. | |
| kind | No | 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 | No | Max hits to return (default 20, max 100). | |
| offset | No | Hits to skip for pagination (default 0). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that results are ranked (score 0-1), include navigable URLs, and are access-gated (no results from inaccessible workspaces). Lacks mention of whether it's read-only (implied) or any rate limits, but covers key behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first defines scope, second explains output and access, third gives use case and comparison. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately explains return format (ranked hits with score and URL) and covers all parameter semantics. Combined with schema, it provides a complete picture for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value by explaining the use cases for each 'kind' enum ('workspace is fastest when naming something', 'row targets table data') and clarifying default behavior for 'all'. This goes beyond the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('Search') and resources ('workspace names, row cell values, and doc sections/paragraphs'). It distinguishes itself from sibling tools by emphasizing speed and scope, avoiding tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('when the user references something by keyword') with concrete examples. Contrasts with listing tools by claiming it's faster than iterating, providing clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageAInspect
Send a direct message to another agent or human in the messaging substrate. Wires through cue.dock.svc, the same path the /live UI uses, so the recipient sees this message in their drawer (and, once they have a Dock-connected agent worker running, their agent harness's inbox). 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 when an agent legitimately needs to ask a teammate (human or agent) for help, hand off work, or follow up async; don't use it as a chat-ops side-channel for things that belong in workspace events. Sender identity follows the caller: agent callers send AS themselves, user callers send AS their self-agent (self@<their_slug>). Body cap is 32,000 chars. Returns { messageId, threadId, to } on success. The recipient is resolved against the substrate's identity space, NOT against your accessible workspace set, this is messaging, not workspace write access. Pre-cue.dock.svc-deploy environments return cue_not_configured (caller treats as 'messaging not deployed yet').
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | 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). | |
| body | Yes | Message text. Plain string, 1-32000 chars. `@<slug>` mentions inside the body CC the named agent on the message. | |
| replyTo | No | 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 | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It comprehensively discloses behavioral traits: sender identity follows caller, body cap of 32,000 chars, return format, recipient resolution scope, and error condition for pre-deploy environments. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough but slightly verbose. It front-loads the main purpose and usage guidelines, but includes details like pre-deploy behavior that could be in a separate note. Still, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no output schema, no annotations), the description fully covers the tool's behavior, error handling, and return value. No gaps remain for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant context: explains address format in detail, mentions scheduling alias, and specifies where to get thread IDs. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send a direct message'), the target ('another agent or human'), and the medium ('messaging substrate'). It uniquely identifies the tool's purpose among siblings, as no other tool handles direct messaging.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool ('legitimately needs to ask a teammate for help, hand off work, follow up async') and when not to use it ('don't use it as a chat-ops side-channel for things that belong in workspace events'). This helps the agent select appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unresolve_commentAInspect
Re-open a previously-resolved comment thread. Idempotent on already-unresolved comments. Fires comment.unresolved with reason: 'manual'. (Auto-unresolve on reply fires the same event with reason: 'reply' and is handled by add_comment / reply_to_comment.)
| Name | Required | Description | Default |
|---|---|---|---|
| comment_id | Yes | Comment id to re-open. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, description fully discloses side effects: fires 'comment.unresolved' with 'reason: manual'. Also notes idempotent behavior and explains difference from auto-unresolve on reply. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. First sentence states primary action and target state. Second sentence adds idempotency and event details efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter and no output schema, description covers all essential aspects: action, idempotency, event firing, and distinction from related tools. Avoids unnecessary detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'comment_id' with schema description 'Comment id to re-open.' Description adds no additional meaning beyond schema. Schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb ('re-open') and resource ('previously-resolved comment thread'). Contrasts with sibling tool 'resolve_comment' by being the inverse operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions idempotency on already-unresolved comments, which guides safe usage. Also distinguishes auto-unresolve on reply from manual unresolved, directing agent to use other tools for reply context. Lacks explicit when-not-to-use scenarios but sufficient for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_docAInspect
Replace a workspace's doc body. Takes EITHER TipTap JSON (content) OR Markdown (markdown): pass markdown when you're producing prose from scratch (CommonMark + GFM is the format every LLM emits natively), pass TipTap JSON when you need structural edits to an existing doc (round-trip from get_doc, mutate, write back). Beyond CommonMark + GFM, the markdown layer recognizes:
→ inline image. Use ANY publicly-reachable URL (HTTPS preferred — HTTP fires browser mixed-content warnings; data: URIs are rejected by
allowBase64: false). Renders block-feeling via CSS (max-width 100%, rounded corners, drop shadow) even though the underlying node is inline. Thealttext is the accessible label and shows in place of the image if the URL fails to load — always include it. To attach a user-uploaded file, hitPOST /api/workspaces/:slug/upload-imagefrom the human-side UI first to get a Vercel Blob URL, then reference that URL in the doc markdown.A lone video-file URL on its own line (extension
.mp4/.m4v/.webm/.mov/.mkv, signed-params + timestamp fragments tolerated) → native HTML5<video controls preload="metadata">player. Source URL is referenced directly: no iframe, no transcoding, no quality loss. Vercel Blob is the canonical hosting (5 GB per file, served with HTTP range requests so 4K masters stream cleanly), but ANY publicly-reachable HTTPS URL works. Sample shape: a paragraph containing onlyhttps://cdn.dock.ai/2025-launch-walkthrough.mp4. Mid-paragraph URLs stay as plain links — surrounding prose disqualifies the auto-promotion (matches the oEmbed convention).```mermaid fenced code → diagram (15 sub-types: flowchart, sequence, gantt, ER, state, class, mindmap, timeline, pie, quadrant, sankey, XY-chart, packet, block, journey)
$x$ inline math, $$x$$ block math (LaTeX, KaTeX-rendered, scripts/href disabled)
> [!NOTE] / [!TIP] / [!IMPORTANT] / [!WARNING] / [!CAUTION] GFM-style callouts
```svg fenced code → sanitized SVG embed (the universal escape hatch for custom diagrams; scripts and event handlers stripped at write time)
XBODY → collapsible toggle
[[slug]] / [[org/slug]] / [[slug#tab]] / [[slug#row-id]] / [[slug|display]] → cross-references to another workspace, surface, or row. Resolved against your accessible workspace set; targets you can't see render as plain text on the reader's side (no info leak). Every cross-ref creates a Backlink row so the target's 'referenced from' sidebar shows this doc.
@Label → @-mention of a user or agent.
<kind>isagentorhuman;<id>is the principal id. Optional query params?org=<slug>(agents) or?email=<addr>(humans) for renderer hints. Mentioning a human writes adoc_mentionrow to their inbox + sends a deep-link email; mentioning an agent fires thedoc.mention_addedwebhook so the agent service can wake up and reply. Re-saving a doc that already mentions someone does NOT re-fire — only newly-added mentions notify (computed from a diff against the previous body). Use this from agent code to ping a teammate when a doc you wrote needs their eyes.A lone URL on its own line from a safelisted provider (YouTube, Vimeo, Loom, Figma, CodePen, GitHub gists) → sandboxed iframe embed. Other URLs stay as regular links. Surrounding prose disqualifies the auto-embed.
Per-format caps: max 50 Mermaid diagrams (30 KB source each), max 500 math expressions (8 KB source each), max 50 SVG blocks (100 KB source each post-sanitize), max 200 cross-refs per doc, max 500 @-mentions per doc, max 20 embeds per doc, max 20 videos per doc (5 GB per file at upload time), max 200 images per doc. See /docs/doc-formats for examples. Last-write-wins; no CRDT merge. Emits doc.updated + doc.heading_added + doc.mention_added events as applicable. Requires editor role. Multi-surface workspaces optionally accept surface_slug to write to a specific doc tab; omitted writes the primary doc surface. Append-only updates have a dedicated append_doc_section tool that doesn't require fetching the body first.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | 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 | No | 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). | |
| markdown | No | 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 | No | 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 | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses last-write-wins, no CRDT merge, events emitted (doc.updated, etc.), editor role requirement, format caps (e.g., max images, videos), cross-ref and mention behavior, and conflict handling with if_unmodified_since. No annotations provided, so description carries full burden and does so comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite length, the description is well-structured with bullet points and clear sections. Front-loaded with purpose and usage, then detailed feature explanations. Every sentence adds necessary information for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and many sibling tools, the description is thoroughly complete. Covers input formats, features, limitations (caps), side effects (events, notifications), permissions, and conflict handling. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds significant value beyond schema: explains markdown vs TipTap usage context, details supported markdown features (images, videos, diagrams, etc.), cross-ref syntax, mention behavior, if_unmodified_since conflict resolution, and surface_slug purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool replaces a workspace doc body, provides two input formats (TipTap JSON or Markdown), and distinguishes from the sibling tool 'append_doc_section' which is for append-only updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use markdown (prose from scratch) vs TipTap JSON (structural edits from get_doc), mentions the dedicated append_doc_section tool, and advises on if_unmodified_since for multi-agent flows, with explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_doc_sectionAInspect
Replace a single section of a workspace's doc body, identified by its heading text. The targeted edit complement to update_doc (full replacement) and append_doc_section (append-only at the end). Use this when the agent maintains a recurring section (e.g., a 'Status' block in 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 whose plain text matches heading exactly (case-sensitive on trimmed text) is found, and everything from that heading up to the next heading at the same OR shallower level is replaced. So a ## Outcomes section ends at the next ## … or # …; nested ### … subsections stay part of the replaced range. Returns 404 when no matching heading exists; strict by design so a misremembered heading fails loudly. markdown is the FULL replacement, INCLUDING the heading line: pass it back as-is to keep the heading, change it to rename or rewrite the heading, change the heading level, or omit the heading entirely (collapses the section into the prior one). Empty markdown deletes the section. Same markdown surface as update_doc / append_doc_section (CommonMark + GFM +  images + lone-URL videos (mp4/webm/mov/mkv/m4v) + Mermaid + KaTeX + callouts + SVG + details + cross-refs + @-mentions + URL embeds). Identity / attribution / events / doc-guard all flow through the same writeDocBody path as the other doc endpoints, so @-mentions in the new section fire doc.mention_added for newly-added mentions just like update_doc does. Requires editor role. Multi-surface workspaces optionally accept surface_slug to target a specific doc tab.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | The workspace slug. Accepts either the bare slug ('my-workspace') or the org-prefixed form ('my-org/my-workspace'). | |
| heading | Yes | 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 | Yes | 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 | No | Optional doc surface slug for multi-doc workspaces. Omit to target the primary doc surface. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: section semantics (first heading match, replacement range to next same/shallower heading), error for missing heading (404), behavior for empty markdown (deletes section), note about @-mention events, and permission requirement (editor role). It also clarifies multi-surface workspace optionality. This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but every sentence earns its place, providing essential details. It is front-loaded with the core purpose and use case. A minor deduction because it could be slightly tighter (e.g., combining the section semantics and markdown notes), but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, no output schema, and no annotations, the description covers all needed context: purpose, when to use, behavioral details (section replacement boundaries, error handling, deletion behavior), parameter specifics (heading matching, markdown requirements), event behavior (@-mention events), and permissions (editor role). It is thoroughly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds significant meaning: it explains how `heading` is compared (case-sensitive, trimmed, hash marks stripped), that `markdown` must include the heading line, that empty string deletes the section, and that `surface_slug` is optional. It also suggests using `get_doc` to enumerate headings. This goes well beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb-object pair: 'Replace a single section of a workspace's doc body, identified by its heading text.' It explicitly names sibling tools (`update_doc`, `append_doc_section`) and explains how this tool differs as 'the targeted edit complement.' This meets the 5-criterion of specific verb+resource and sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use advice: 'Use this when the agent maintains a recurring section ... and only needs to refresh that one piece.' It also explains why alternatives are worse (token cost, latency, race condition with concurrent edits). This exceeds the 5-criterion of explicit when/when-not/alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_htmlAInspect
Write an HTML surface's body. Pass any of html / css / js; omitted fields stay unchanged. Pass empty string to clear. The surface renders in a sandboxed iframe 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, css 200 KB, js 200 KB, total 600 KB. The sanitizer strips a small set of style smells: inline on*= event-handler attributes, javascript: and data:text/html URIs, <meta http-equiv> tags; use addEventListener and <script> instead. Requires editor role.
| Name | Required | Description | Default |
|---|---|---|---|
| js | No | 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 | No | 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 | No | 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 | Yes | The workspace slug. | |
| surface_slug | No | Optional html surface slug. Omit to write the primary html surface. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description thoroughly covers behavioral traits: sandboxed iframe, origin isolation, supported web technologies, per-field caps, sanitization rules, and required role. It does not mention error handling or output format, but overall provides strong transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense yet well-structured, front-loading the core action and proceeding logically through fields, security, capabilities, limits, and requirements. Every sentence adds value without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all key aspects: parameters, limits, security, and prerequisites. It lacks explicit mention of the return value or success indication, but given the standard nature of update tools, it is reasonably complete. Sibling tool overlap is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds meaningful context beyond the schema, such as v2 usage tips for js and css fields, external stylesheets, and pre-flighting with validate_html. This enhances the agent's understanding of parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it writes an HTML surface's body, specifying the verb and resource. However, it does not explicitly distinguish this tool from sibling tools like update_surface or validate_html, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that omitted fields stay unchanged and empty strings clear fields, providing usage context. It also mentions using validate_html first. But it lacks explicit guidance on when to use this tool versus alternatives like update_surface or create_surface.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_rowAInspect
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | 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). | |
| slug | Yes | 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 | Yes | The row ID to update | |
| position | No | 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 | No | 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 | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: only provided fields are updated, move behavior with position recomputation, unmapped field storage, auto_create_columns behavior, response fields (unmapped_fields, warning, created_columns), and events (row.moved_surface). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence serves a purpose. The description is front-loaded with the core update purpose, then explains move behavior, then unmapped data details. No redundant or unnecessary text. Concise yet comprehensive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, the description explains expected response fields (unmapped_fields, warning, created_columns) and events. Covers error conditions (400 for invalid surface_slug). For a mutation tool with complex behavior, this is complete and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds significant behavioral context for each parameter: 'data' explicitly allows empty object for moves, 'slug' explains prefix forms, 'position' clarifies default placement, 'surface_slug' details move conditions and errors, 'auto_create_columns' explains effect and defaults. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update specific fields of an existing row' with a specific verb and resource. It distinguishes from siblings like 'create_row' and 'delete_row' by detailing update-specific behaviors (field preservation, move semantics, unmapped data handling). No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use auto_create_columns, when to pass empty data for a pure move, and conditions for surface_slug (400 errors). It does not explicitly compare to alternatives like 'move_rows', but the context is clear enough for most agents. Slight deduction for lack of direct alternative mention.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_surfaceAInspect
Rename, reslug, reorder, OR replace the column schema of a surface. Pass any subset of name, new_surface_slug, position, columns. Position is 0-based and is normalised across siblings so positions stay contiguous. Editor role required. Emits surface.updated.
Column schema (columns): table surfaces only. Pass a full ColumnDef[] to REPLACE the existing schema atomically (no per-column add/remove churn, no row data loss — existing row.data keys that are no longer mapped are preserved on disk and surface in future writes' unmapped_fields). Each ColumnDef = { key, label, type, position, width?, hidden?, description?, options? }. Type ∈ text | longtext | url | status | owner | date | number; options is required on status/owner. Reject 400 with a table-only error if the surface is a doc or html kind. Use get_workspace_schema first to fetch the current shape, mutate it, send it back.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name. 1-64 chars. | |
| slug | Yes | 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 | No | 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 | No | 0-based index in the tab strip. Other surfaces shift to keep positions contiguous. | |
| surface_slug | Yes | The current slug of the surface to update. | |
| new_surface_slug | No | New slug for the surface (lowercase kebab-case, 3-64 chars). Must be unique within the workspace. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: atomic column replacement, position normalization, event emission, error for wrong surface kind, and data preservation. It does not cover rate limits or idempotency but is otherwise thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized, starting with a summary then detailing column schema specifics. It is slightly lengthy but every sentence adds value, earning a high score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple update types, column schema replacement), the description covers prerequisites, error cases, and behavioral details. No output schema exists, but the description suffices for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds significant context beyond the schema, such as replacement semantics for columns, position normalization, and uniqueness requirement for new_surface_slug. This greatly aids correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool does multiple operations: 'Rename, reslug, reorder, OR replace the column schema of a surface.' This is specific and distinguishes it from siblings like create_surface or add_column.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on passing a subset of fields, role requirement ('Editor role'), and a recommended workflow ('Use get_workspace_schema first'). However, it does not explicitly contrast with sibling tools like add_column, though the differentiation is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_webhookAInspect
Toggle a webhook's active flag on or off. Inactive webhooks are skipped at delivery time (no retry queue, no log row) but the endpoint config is preserved so flipping back is one call. Use to silence a noisy receiver during maintenance without losing its URL + secret + event subscription.
| Name | Required | Description | Default |
|---|---|---|---|
| active | Yes | true to enable delivery, false to silence. | |
| org_slug | Yes | Org slug | |
| webhook_id | Yes | Webhook id (from list_webhooks) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that inactive webhooks are skipped, no retry queue, no log row, and endpoint config preserved. This provides behavioral context beyond the parameter schema, though it doesn't mention any potential side effects beyond what's intended.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding value: first states the action, second explains the effect when inactive, third gives a concrete use case. No wasted words, front-loaded with primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple toggle tool with 100% schema coverage and no output schema, the description is complete. It covers purpose, effect of both states, and a recommended use case, making it fully actionable for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description reinforces the meaning of active flag (enable/silence) but doesn't add new information beyond what schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Toggle a webhook's `active` flag on or off.' This is a specific verb+resource pair that distinguishes it from siblings like create_webhook, delete_webhook, and rotate_webhook_secret.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use to silence a noisy receiver during maintenance without losing its URL + secret + event subscription.' It explains effect of toggling off (no retry, no log row) and that config is preserved, making it easy to flip back. It does not explicitly mention when not to use, but the use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_workspaceAInspect
Rename a workspace, change its slug, switch its default-view mode, or flip its visibility (private | org | unlisted | public). 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. Emits workspace.renamed and/or workspace.visibility_changed. Visibility WIDENING (private → org/unlisted/public, org → unlisted/public, unlisted → public) is consent-gated: pass consent_mode: "web" to return an approval_url the user clicks; otherwise the call returns consent_required and you must re-issue with consent_mode set. Visibility narrowing + non-visibility updates execute immediately on the agent's role.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 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 | No | New display name. Optional. | |
| slug | Yes | The current workspace slug | |
| new_slug | No | 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 | No | 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 | No | 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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: slug alias preservation, SSE subscriber disconnection on visibility change, editor role requirement, event emissions, consent-gating for visibility widening, and immediate execution for non-visibility updates. This fully compensates for missing annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph, but every sentence earns its place by explaining complex behaviors. It is front-loaded with the core purpose. Slight improvement could come from breaking it into bullet points, but it remains readable and complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides adequate context for expected outcomes (e.g., consent flow returns approval_url, events emitted). It covers all major behaviors but could explicitly mention the overall return format (e.g., success object).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value beyond the schema by explaining effects (e.g., slug alias, consent flow, mode doesn't change surfaces) and by clarifying that omitted fields are unchanged. This helps the agent understand parameter implications.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool updates workspace settings (rename, slug, default-view mode, visibility). It specifies the exact fields and contrasts with siblings like delete_workspace or create_workspace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (updating workspace properties) and provides context for prerequisites like editor role and consent mode for visibility widening. While it doesn't explicitly list alternatives, the sibling names provide that context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_workspace_memberAInspect
Change an existing workspace member's role. Editor role required to caller. Owner-tier transitions (promoting to or demoting from owner) require an owner caller. Demoting the sole owner is blocked; promote someone else to owner first. No-op when the role is unchanged. Emits member.role_changed with from/to roles.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | New role. | |
| slug | Yes | 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 | Yes | The WorkspaceMember id to update. Get this from list_workspace_members. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses caller role requirements, owner transition constraints, no-op behavior, and emitted event. This is comprehensive for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence delivers essential information. Front-loaded with purpose. No wasted words. Well-structured for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers most aspects: purpose, usage, behavior, edge cases, and events. However, lacks mention of the return value or response structure, which would be useful given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds context for slug and member_id sources, but the schema already includes that information. No extra meaning beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource: 'Change an existing workspace member's role.' It distinguishes from siblings like remove_workspace_member and list_workspace_members. Specific role transitions and edge cases are mentioned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (changing role), and when not to (no-op if unchanged, demoting sole owner blocked). Provides prerequisites for caller role and owner transitions. No explicit alternatives but clear from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgrade_planAInspect
Move the caller's org to Pro ($19/mo flat, 10 agents, 20 members, 200 workspaces, 5k rows per workspace) or Scale ($49/mo flat, 30 agents, 60 members, 1,000 workspaces, 50k rows per workspace). The bill doesn't change as you add agents. If the org has no card on file, returns a Stripe Checkout URL for the human. If a card exists, a live plan switch (Pro ↔ Scale) is consent-gated. Two consent surfaces, you pick via mode: (1) chat (default): FIRST call returns { status: 'confirmation_required', confirm_token, message, expires_in }; surface the message to your user and re-call within 60s with confirm_token set. (2) web: FIRST call returns { status: 'approval_required', approval_url, polling_url, expires_at }; print the approval_url in chat for your user to click and approve in their browser, then poll polling_url for the result. No-card and same-plan paths execute on the first call (no money changes hands).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 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 | No | Target plan. Defaults to 'pro'. | |
| confirm_token | No | 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}. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description fully discloses billing flat-rate, consent-gated switch, consent surfaces, token details, and special cases like no-card and same-plan paths.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though lengthy, the description is well-structured with core action up front, followed by detailed flows; every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description thoroughly covers responses, edge cases, and consent mechanisms, making it complete even without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters, yet description adds defaults, token purpose, and mode use cases, providing meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool upgrades the org to Pro or Scale plans with specific verb 'Move the caller's org' and distinguishes from sibling tool 'downgrade_plan'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use chat vs web mode, consent flows, and conditions for immediate execution, effectively differentiating from alternatives like downgrade_plan.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_doc_markdownAInspect
Pre-flight check on markdown BEFORE writing it via update_doc / append_doc_section. Returns { ok, errors, warnings, parsed } with parsed counts per format type (imageCount, videoCount, mermaidCount, mathCount, svgCount, calloutCount, crossRefCount, mentionCount, embedCount, 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-format markdown to catch problems before burning a write. Cross-ref + mention resolution is gated on caller's accessible workspace set, so unresolved tokens surface in warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | Markdown body to validate. Same surface as update_doc: CommonMark + GFM plus mermaid / math / callouts / svg / details / cross-refs / embeds. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavior: it never writes anything (pure parse + analysis), and details the exact return structure including fields like ok, errors, warnings, and parsed counts with specific format types. It explains error types (cap breaches) and warning categories (unresolved cross-refs/mentions, oversize sources), and notes the dependency on caller's workspace for resolution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the purpose and then lists return fields. It is efficient with no wasted words, though slightly more structured formatting (e.g., bullet points for return fields) could improve readability. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is remarkably complete. It explains the return object structure in detail, lists all parsed counts, error and warning categories, and notes the workspace-dependency for resolution. It covers side effects (none), caveats, and intended use, leaving no significant gaps for an agent to understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'markdown' has a schema description that lists supported formats (CommonMark, GFM, mermaid, math, etc.). The description adds value by confirming the same surface as update_doc and listing all supported format types, which goes beyond the schema's brief description. With 100% schema coverage, baseline is 3, but the extra context justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Pre-flight check on markdown BEFORE writing it via update_doc / append_doc_section', clearly stating the tool's purpose as a validation step before write operations. It specifies it returns structured results including ok, errors, warnings, and parsed counts, and emphasizes it never writes anything. This distinguishes it from sibling write tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to use this tool 'when iterating on rich-format markdown to catch problems before burning a write' and positions it as a pre-flight check before update_doc/append_doc_section. It provides context that cross-ref and mention resolution depends on the caller's accessible workspace set, but does not explicitly list when not to use it or alternative validation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_formulaAInspect
Parse-check a formula expression server-side without writing anything. Returns { ok, error?, rewrittenFormula?, referencedFunctions, unknownFunctions }. Use BEFORE update_row / create_row when the formula references functions or syntax you're not 100% sure of: a =SUMIFS(...) 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 the canonical post-alias names the engine will see. Cheap, public, no auth, no workspace context needed.
| Name | Required | Description | Default |
|---|---|---|---|
| formula | Yes | Formula expression to validate, including the leading '='. Example: '=SUMIF(B2:B10, ">0")'. Max 4000 chars. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses that no data is written, what the return object contains (ok, error, rewrittenFormula, referencedFunctions, unknownFunctions), and explains the meaning of these fields. It also states it requires no authentication and no workspace context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and return shape. It is a single paragraph of six sentences, each providing essential information. Slight improvement could be gained by using bullet points for clarity, but it is still concise and effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return values and their significance. It covers the primary use case, related risks, and how the tool interacts with siblings. The single parameter is fully documented, making the description complete for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, and the description adds valuable context: the need for a leading '=' in the formula, an example, and a 4000 character limit, exceeding the schema's minimal description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Parse-check', resource 'formula expression', and qualifier 'server-side without writing anything'. It distinguishes from sibling tools like update_row/create_row by explicitly stating its role as a pre-validation step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises 'Use BEFORE update_row / create_row when...' and provides a concrete scenario with a misspelled function. It also notes the tool is 'cheap, public, no auth, no workspace context needed', clarifying when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_htmlAInspect
Pre-flight check on html / css / js BEFORE writing via update_html. Returns { ok, errors, warnings, parsed } where parsed has byte counts per field and dropped (true if the sanitizer would strip anything from html). Errors cover cap breaches (html_too_large, css_too_large, js_too_large, total_too_large) and sanitizer rejection (html_sanitize_rejected, html_sanitize_empty). At v2 the sanitizer accepts <script> and <link> — those used to be smells but are now first-class agent markup; isolation lives in the opaque render iframe, not the sanitizer. The smells still stripped: inline on*= attributes, javascript:/data:text/html URIs, <meta http-equiv> tags. NEVER writes anything. Use when iterating on a payload so you don't burn a write on something the surface would reject.
| Name | Required | Description | Default |
|---|---|---|---|
| js | No | JS to validate (optional). | |
| css | No | CSS to validate (optional). | |
| html | No | HTML to validate (optional). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return structure, error types, sanitizer behavior (including v2 changes), and explicitly states it never writes. No annotations exist, so description carries full burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single dense paragraph with logical flow: purpose, return, errors, sanitizer details. Slightly verbose but all sentences add value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description explains return value structure, error types, and smells. Sufficient for a validation tool with 3 optional params.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add new parameter information beyond the schema, but provides context on how they are used together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it is a pre-flight check for HTML/CSS/JS before update_html, with specific return values. Distinguishes itself from siblings by focusing on validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use when iterating on a payload' and 'NEVER writes anything,' providing clear guidance on when to use and its non-destructive nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!