ActionDock
Server Details
Supervised API-write gateway for AI agents with policy, human approval and execution receipts.
- Status
- Healthy
- Uptime
- 49.7% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 8 tools
Tools target distinct resources and actions, but get_job and wait_for_job both retrieve job status, and list_events and list_job_reconciliations both surface job-related audit data, requiring careful reading to distinguish.
All tool names follow a consistent snake_case verb_noun pattern (get_, list_, run_, wait_), making the set predictable and easy to parse.
Eight tools are well-scoped for an action-orchestration server with approvals, connections, events, usage, and reconciliations; each tool covers a necessary capability without redundancy.
The surface covers the core agent workflow (discover actions, run, wait, get result, audit events, usage, reconciliations), but lacks a direct list_jobs or cancel_job operation, forcing workarounds via events or job IDs.
Available Tools
8 toolsget_jobGet jobBRead-onlyIdempotentInspect
Get the current status and result of an action job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job identifier returned by run_action. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Job identifier. |
| error | Yes | Failure, execution_unknown or queued approval revocation explanation; null otherwise. |
| input | Yes | Validated action input exactly as submitted. |
| action | Yes | Catalog action name, for example integration.execute. |
| output | Yes | For writes awaiting_approval or queued: the exact approval preview bound to the owner's decision. Rejected writes retain that preview, including after a queued approval is revoked. After succeeded: the action result. After execution_unknown: the approved write plus the ambiguous provider response when one was received. Other jobs may have a preserved preview or null. |
| status | Yes | awaiting_approval, queued, and running are non-terminal; succeeded, failed, rejected, and execution_unknown are terminal. An owner may revoke a queued approval, producing rejected with both approval and rejection evidence. |
| createdAt | Yes | Creation time. |
| updatedAt | Yes | Last status change. |
| approvedAt | Yes | |
| approvedBy | Yes | Owner who approved the write. |
| rejectedAt | Yes | |
| rejectedBy | Yes | Owner who rejected the write. |
| sideEffect | Yes | True when the action writes to an external system and therefore required owner approval. |
| workflowId | Yes | Caller-supplied workflow identifier shared across related jobs. |
| workspaceId | Yes | Workspace that owns the job. |
| workflowName | Yes | Caller-supplied workflow name shown in the dashboard. |
| idempotencyKey | Yes | Idempotency key that deduplicates this submission within the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds only that it returns both status and result, which is useful but minimal beyond the structured fields.
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 front-loaded sentence with no filler; every word carries information about what is retrieved.
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 one-parameter read tool with full annotations and an output schema, the definition is nearly sufficient—return values need not be explained and the job_id origin is documented in the schema. The only real gap is the missing polling-vs-waiting routing against wait_for_job.
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%, and the schema itself even documents that job_id comes from run_action, so the description has no compensating work to do. 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?
States a specific verb (get) and resource (status and result of an action job), which is more precise than the bare title 'Get job'. It does not, however, distinguish itself from the closely related sibling wait_for_job, which an agent would also consider when retrieving job results.
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?
There is no explicit guidance on when to use this tool versus wait_for_job or list_job_reconciliations. The phrase 'current status' hints at a non-blocking poll, but the choice between polling and waiting is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_actionsList actionsARead-onlyIdempotentInspect
List every action available to the agent, including input schemas and side-effect flags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| actions | Yes | Catalog entries with name, description, input schema, and side-effect flag. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior, so the description does not need to repeat that. The description adds valuable behavioral context by disclosing that the response includes input schemas and side-effect flags, which enriches the agent's understanding of what the result contains.
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 sentence that front-loads the core function and then specifies the valuable output contents. Every word contributes meaning, with no redundant or filler language.
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 zero parameters, strong safety annotations, and the existence of an output schema, the description is complete for agent decision-making. It tells the agent exactly what the tool lists and what the result includes, and no critical operational details are missing.
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 tool has zero parameters, so per the baseline rule a score of 4 applies. The description avoids fabricating parameter details and correctly focuses on the output, which is the only meaningful aspect of the call.
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 a specific verb and resource: 'List every action available to the agent,' and explicitly states what the output includes (input schemas and side-effect flags). This clearly distinguishes it from sibling list tools like list_connections and list_events, which target specific resource categories.
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 clearly implies this tool is for discovering available actions, but it does not explicitly state when to prefer it over alternatives or when not to use it. There is no mention of sibling tools or exclusion criteria, so usage guidance is only implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connectionsList connectionsARead-onlyIdempotentInspect
List the workspace-approved HTTPS API connections and their method/path allowlists. Credentials are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| connections | Yes | Workspace-approved API connections with their method and path allowlists; credentials are never included. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is established. The description adds meaningful behavioral context beyond annotations by stating that credentials are never returned, which is a useful guarantee for an agent deciding whether to call this 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 two short sentences with no filler. The primary action and resource are front-loaded, and the key behavioral guarantee is added in the second sentence. Every word 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?
With no parameters, an output schema present, and annotations covering idempotency and read-only behavior, the description is complete. It covers what is listed, scope, and the important credential-privacy note. An agent has everything needed to invoke this 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?
There are zero parameters, so the description need not explain parameter meaning. The baseline for zero parameters is 4; the description adequately defines what the tool returns without any parameter-specific guidance being necessary.
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 states a specific verb ('List'), a clear resource ('workspace-approved HTTPS API connections'), and adds scope detail ('method/path allowlists'). This clearly distinguishes it from siblings like list_actions, list_events, and list_usage, which target different resource types.
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: the tool is for listing workspace-approved connections, not for modifying or running them. It doesn't explicitly name alternatives or exclusions, but the resource distinction is obvious from the sibling names and the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsList eventsARead-onlyIdempotentInspect
List recent job and callback events for workflow continuation and audit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of most recent events to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | Most recent job and callback events, newest first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful scoping ('recent', 'job and callback events') but does not disclose additional behavioral traits such as ordering guarantees, pagination behavior, or retention semantics. It does not contradict the 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?
A single sentence that front-loads the core behavior ('List recent job and callback events') and then states the purpose. There is no filler, repetition, or unnecessary background.
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-only list tool with one fully documented parameter and an output schema, this description is complete. An agent has enough information to select and invoke the tool correctly: what it lists, the recency aspect, and the purpose.
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%: the 'limit' parameter already has a full description with default, minimum, and maximum. The tool description adds no parameter-specific meaning, so the baseline 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?
The description names a specific verb ('List'), a specific resource ('recent job and callback events'), and a purpose ('workflow continuation and audit'). This clearly distinguishes it from sibling tools like list_actions and list_connections.
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?
'For workflow continuation and audit' gives clear context for when this tool is appropriate, and the mention of 'recent' implies this is for reviewing history rather than blocking on an outcome. It does not explicitly name alternatives or exclusions, but the context is strong enough for a simple list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_job_reconciliationsRead owner reconciliation evidenceARead-onlyIdempotentInspect
Read the owner's append-only observations about an unknown write. These are owner reports, not verified provider facts, a changed job status, or permission to retry. Agents cannot record observations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum observations per page, newest first. | |
| before | No | nextBefore from the previous page; omit for the newest observations. | |
| job_id | Yes | Job identifier returned by run_action. |
Output Schema
| Name | Required | Description |
|---|---|---|
| records | Yes | Owner observations, newest first; corrections append to history. |
| nextBefore | Yes | Pass as before to read older records; null means the end of history. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful context beyond those flags: observations are 'append-only', they are unverified owner reports, and agents cannot record observations. This clarifies both the data model and the trust boundary, which is exactly the kind of behavioral caveat an agent needs.
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 short sentences with no filler. The first sentence states the action and object, the second adds necessary epistemic caveats, and the third states an important agent restriction. Every sentence earns its place and the structure is easy to scan.
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 read-only listing tool with full schema coverage, an output schema, and safety annotations, the description is complete. It explains the purpose, the provenance and reliability of the data, and the agent's inability to write. Nothing essential for correct invocation is missing.
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%, and each parameter already has a meaningful description: limit has bounds and ordering, before explains pagination tokens, and job_id names its source. The description itself adds no parameter-specific detail, so it correctly stays at the 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?
The description uses a specific verb ('Read') and identifies a precise resource: the owner's append-only observations about an unknown write. It also distinguishes itself from status/verification/retry tools by explicitly stating it is 'not verified provider facts, a changed job status, or permission to retry', making its 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 gives clear context for when to use the tool: to inspect owner-side reconciliation evidence for an unknown write. It explicitly states what the observations are not, which helps an agent avoid misusing the tool as a source of verified facts or retry authorization. It does not name a specific sibling alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usageList usageARead-onlyIdempotentInspect
List metered action debits and the current UTC-month usage total.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of most recent usage records to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| records | Yes | Most recent metered action debits, newest first. |
| summary | Yes | Current UTC-month usage total and plan limit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the behavioral detail that the total is for the current UTC month, which is useful context beyond the schema. It does not describe pagination behavior or what happens when limit is exceeded, but the schema's maximum of 200 covers that constraint. No contradiction with 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 sentence that front-loads the primary action ('List metered action debits') and appends the secondary output (monthly total). Every word earns its place; there is 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?
For a simple read-only list tool with one optional parameter, a full output schema, and annotations covering safety and idempotency, the description is nearly complete. The only minor gap is that it does not explicitly mention pagination or the default limit behavior, but the schema's default and maximum values cover the practical needs. The tool is simple enough that this is adequate.
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 single parameter 'limit' is fully documented in the schema. The description does not add any additional parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate because the schema carries the full burden and the description adds no extra semantic value.
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 states a specific verb ('List') and resource ('metered action debits') and adds the current UTC-month usage total, which clearly distinguishes it from sibling list tools like list_actions, list_connections, and list_events. It is clear but does not explicitly name a sibling alternative, so it falls short of a 5.
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 context: it is for viewing metered action debits and the monthly total. However, it does not explicitly state when to use this tool versus alternatives such as list_actions or list_events, nor does it mention any exclusions or prerequisites. The context is clear enough for basic selection but lacks explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_actionSubmit action jobADestructiveInspect
Create an action job. External writes always wait for workspace-owner approval in the dashboard; the owner is emailed, and wait_for_job blocks until the decision.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | Action input matching the schema advertised by list_actions. | |
| action | Yes | Catalog action name from list_actions, for example integration.execute. | |
| workflow_id | No | Stable identifier of the agent workflow this job belongs to, for grouping events. | |
| workflow_name | No | Human-readable workflow name shown to the workspace owner during review. | |
| idempotency_key | No | Caller-chosen key; resubmitting the same key and input returns the existing job instead of creating another. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Job identifier. |
| error | Yes | Failure, execution_unknown or queued approval revocation explanation; null otherwise. |
| input | Yes | Validated action input exactly as submitted. |
| action | Yes | Catalog action name, for example integration.execute. |
| output | Yes | For writes awaiting_approval or queued: the exact approval preview bound to the owner's decision. Rejected writes retain that preview, including after a queued approval is revoked. After succeeded: the action result. After execution_unknown: the approved write plus the ambiguous provider response when one was received. Other jobs may have a preserved preview or null. |
| status | Yes | awaiting_approval, queued, and running are non-terminal; succeeded, failed, rejected, and execution_unknown are terminal. An owner may revoke a queued approval, producing rejected with both approval and rejection evidence. |
| createdAt | Yes | Creation time. |
| updatedAt | Yes | Last status change. |
| approvedAt | Yes | |
| approvedBy | Yes | Owner who approved the write. |
| rejectedAt | Yes | |
| rejectedBy | Yes | Owner who rejected the write. |
| sideEffect | Yes | True when the action writes to an external system and therefore required owner approval. |
| workflowId | Yes | Caller-supplied workflow identifier shared across related jobs. |
| workspaceId | Yes | Workspace that owns the job. |
| workflowName | Yes | Caller-supplied workflow name shown in the dashboard. |
| idempotencyKey | Yes | Idempotency key that deduplicates this submission within the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, but the description adds meaningful context beyond them: external writes require workspace-owner approval in the dashboard, the owner is emailed, and wait_for_job blocks until the decision. It still does not clarify irreversibility or failure behavior of the external write itself.
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 tightly packed sentences with the core purpose front-loaded and the approval/blocking behavior following immediately. No filler 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?
With an output schema present, return details need not be explained, and the approval flow is covered well. Minor gap: no note on what happens if approval is denied or how long the job persists.
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 fully documents action, input, workflow_id, workflow_name, and idempotency_key. The description adds no parameter-level detail beyond that baseline, so a 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?
States a specific verb+resource ('Create an action job') and names the related sibling wait_for_job, so an agent can distinguish it from get_job/list_jobs style siblings. It does not, however, describe what an 'action' is beyond the schema's reference to list_actions.
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 when this tool is invoked (submitting an action) and points at wait_for_job as the blocking companion, which is useful routing. But it gives no explicit when-not-to-use guidance or comparison against siblings like get_job or list_actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_jobWait for jobARead-onlyIdempotentInspect
Wait for an action job to reach a decision or a final state: approved and executed, rejected, failed, or execution_unknown. A job still awaiting owner approval when the timeout elapses is returned as awaiting_approval; call again to keep waiting. Keep timeout_seconds below your client's tool timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job identifier returned by run_action. | |
| timeout_seconds | No | How long to wait for a decision or final state before returning the current job; keep it below your client's tool timeout. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Job identifier. |
| error | Yes | Failure, execution_unknown or queued approval revocation explanation; null otherwise. |
| input | Yes | Validated action input exactly as submitted. |
| action | Yes | Catalog action name, for example integration.execute. |
| output | Yes | For writes awaiting_approval or queued: the exact approval preview bound to the owner's decision. Rejected writes retain that preview, including after a queued approval is revoked. After succeeded: the action result. After execution_unknown: the approved write plus the ambiguous provider response when one was received. Other jobs may have a preserved preview or null. |
| status | Yes | awaiting_approval, queued, and running are non-terminal; succeeded, failed, rejected, and execution_unknown are terminal. An owner may revoke a queued approval, producing rejected with both approval and rejection evidence. |
| createdAt | Yes | Creation time. |
| updatedAt | Yes | Last status change. |
| approvedAt | Yes | |
| approvedBy | Yes | Owner who approved the write. |
| rejectedAt | Yes | |
| rejectedBy | Yes | Owner who rejected the write. |
| sideEffect | Yes | True when the action writes to an external system and therefore required owner approval. |
| workflowId | Yes | Caller-supplied workflow identifier shared across related jobs. |
| workspaceId | Yes | Workspace that owns the job. |
| workflowName | Yes | Caller-supplied workflow name shown in the dashboard. |
| idempotencyKey | Yes | Idempotency key that deduplicates this submission within the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds valuable behavioral detail beyond annotations: it lists the terminal states and explains that a timeout returns awaiting_approval and that the caller should call again to keep waiting. It does not cover auth, rate limits, or error 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?
Three sentences, all front-loaded and purposeful. The purpose and terminal states come first, followed by timeout behavior and a practical caveat about client tool timeouts. No sentence is wasted.
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?
An output schema exists, so the description need not explain return values, and annotations cover safety. It explains the waiting semantics, timeout behavior, and retry guidance well. The only notable gap is lack of explicit contrast with sibling get_job for when immediate retrieval is preferable.
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 both job_id and timeout_seconds fully. The description adds no parameter syntax or meaning beyond what the schema provides, making the baseline of 3 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 states a specific verb and resource: waiting for an action job to reach a decision or final state. It enumerates the terminal states, making the tool's scope clear. However, it does not explicitly distinguish this tool from sibling get_job or run_action, which would help an agent route correctly.
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?
Usage is implied: wait for a job to reach a final state, and call again if the timeout returns awaiting_approval. The description provides behavioral context for repeated calls but does not explicitly state when to use this instead of get_job or the other siblings, nor does it mention any prerequisites beyond what the schema already contains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
get_job3 fields changed- changed
Output schema / properties / error / descriptionPrevious value: -"Failure or execution_unknown message; null otherwise."New value: +"Failure, execution_unknown or queued approval revocation explanation; null otherwise." - changed
Output schema / properties / output / descriptionPrevious value: -"While awaiting_approval: the exact approval preview bound to the owner's decision. After succeeded: the action result. After execution_unknown: the approved write plus the ambiguous provider response when one was received. Otherwise null."New value: +"For writes awaiting_approval or queued: the exact approval preview bound to the owner's decision. Rejected writes retain that preview, including after a queued approval is revoked. After succeeded: the action result. After execution_unknown: the approved write plus the ambiguous provider response when one was received. Other jobs may have a preserved preview or null." - changed
Output schema / properties / status / descriptionPrevious value: -"awaiting_approval, queued, and running are non-terminal; succeeded, failed, rejected, and execution_unknown are terminal."New value: +"awaiting_approval, queued, and running are non-terminal; succeeded, failed, rejected, and execution_unknown are terminal. An owner may revoke a queued approval, producing rejected with both approval and rejection evidence."
- Changed
run_action3 fields changed- changed
Output schema / properties / error / descriptionPrevious value: -"Failure or execution_unknown message; null otherwise."New value: +"Failure, execution_unknown or queued approval revocation explanation; null otherwise." - changed
Output schema / properties / output / descriptionPrevious value: -"While awaiting_approval: the exact approval preview bound to the owner's decision. After succeeded: the action result. After execution_unknown: the approved write plus the ambiguous provider response when one was received. Otherwise null."New value: +"For writes awaiting_approval or queued: the exact approval preview bound to the owner's decision. Rejected writes retain that preview, including after a queued approval is revoked. After succeeded: the action result. After execution_unknown: the approved write plus the ambiguous provider response when one was received. Other jobs may have a preserved preview or null." - changed
Output schema / properties / status / descriptionPrevious value: -"awaiting_approval, queued, and running are non-terminal; succeeded, failed, rejected, and execution_unknown are terminal."New value: +"awaiting_approval, queued, and running are non-terminal; succeeded, failed, rejected, and execution_unknown are terminal. An owner may revoke a queued approval, producing rejected with both approval and rejection evidence."
- Changed
wait_for_job3 fields changed- changed
Output schema / properties / error / descriptionPrevious value: -"Failure or execution_unknown message; null otherwise."New value: +"Failure, execution_unknown or queued approval revocation explanation; null otherwise." - changed
Output schema / properties / output / descriptionPrevious value: -"While awaiting_approval: the exact approval preview bound to the owner's decision. After succeeded: the action result. After execution_unknown: the approved write plus the ambiguous provider response when one was received. Otherwise null."New value: +"For writes awaiting_approval or queued: the exact approval preview bound to the owner's decision. Rejected writes retain that preview, including after a queued approval is revoked. After succeeded: the action result. After execution_unknown: the approved write plus the ambiguous provider response when one was received. Other jobs may have a preserved preview or null." - changed
Output schema / properties / status / descriptionPrevious value: -"awaiting_approval, queued, and running are non-terminal; succeeded, failed, rejected, and execution_unknown are terminal."New value: +"awaiting_approval, queued, and running are non-terminal; succeeded, failed, rejected, and execution_unknown are terminal. An owner may revoke a queued approval, producing rejected with both approval and rejection evidence."
1 tool update
- Added
list_job_reconciliations
7 tool updates
- Changed
get_job1 field changed- added
Input schema / properties / job_id / descriptionAdded value: +"Job identifier returned by run_action."
- Changed
list_actions1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Catalog entries with name, description, input schema, and side-effect flag.", + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "actions" + ], + "type": "object" +}
- Changed
list_connections1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "connections": { + "description": "Workspace-approved API connections with their method and path allowlists; credentials are never included.", + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "connections" + ], + "type": "object" +}
- Changed
list_events2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of most recent events to return." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "events": { + "description": "Most recent job and callback events, newest first.", + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "events" + ], + "type": "object" +}
- Changed
list_usage2 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of most recent usage records to return." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "records": { + "description": "Most recent metered action debits, newest first.", + "items": { + "additionalProperties": {}, + "properties": {}, + "type": "object" + }, + "type": "array" + }, + "summary": { + "additionalProperties": {}, + "description": "Current UTC-month usage total and plan limit.", + "properties": {}, + "type": "object" + } + }, + "required": [ + "summary", + "records" + ], + "type": "object" +}
- Changed
run_action5 fields changed- added
Input schema / properties / action / descriptionAdded value: +"Catalog action name from list_actions, for example integration.execute." - added
Input schema / properties / idempotency_key / descriptionAdded value: +"Caller-chosen key; resubmitting the same key and input returns the existing job instead of creating another." - added
Input schema / properties / input / descriptionAdded value: +"Action input matching the schema advertised by list_actions." - added
Input schema / properties / workflow_id / descriptionAdded value: +"Stable identifier of the agent workflow this job belongs to, for grouping events." - added
Input schema / properties / workflow_name / descriptionAdded value: +"Human-readable workflow name shown to the workspace owner during review."
- Changed
wait_for_job2 fields changed- added
Input schema / properties / job_id / descriptionAdded value: +"Job identifier returned by run_action." - added
Input schema / properties / timeout_seconds / descriptionAdded value: +"How long to wait for a decision or final state before returning the current job; keep it below your client's tool timeout."
1 tool update
- Changed
wait_for_job1 field changed- changed
Input schema / properties / timeout_seconds / maximumPrevious value: -60New value: +300
7 tool updates
- First observed
get_job - First observed
list_actions - First observed
list_connections - First observed
list_events - First observed
list_usage - First observed
run_action - First observed
wait_for_job
Publisher details
- Operator
- ActionDock · Publisher source
- Operator website
- https://actiondock.app
- Vendor relationship
- First-party
- Documentation
- https://actiondock.app/agents
- Trust center
- Not available
- Restrictions
- A paid workspace plan is required for tool calls (Launch $49/month and up, 14-day unconditional refund); the workspace API key is created in the ActionDock dashboard. initialize and tools/list work without a key. No OAuth; the key is sent as Authorization: Bearer or X-ActionDock-API-Key. · Publisher source
Related MCP Connectors
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Zero-trust gateway for AI agents: score tool calls, verify agent cards, enforce policy, audit.
Runtime permission, approval, and audit layer for AI agent tool execution.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables controlled AI-agent access to enterprise-shaped tools with a deny-by-default gated write path, human approval, dry-run execution, and append-only audit logging.1-
- AlicenseNot gradedqualityBmaintenanceProvides a human-in-the-loop approval gateway for AI agents, enforcing policies and audit logging for MCP-compatible tool calls.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible AI agents to safely act on business backends by enforcing per-agent permissions, autonomy thresholds, human approval with review-and-edit, and full audit trails.MIT
- FlicenseNot gradedqualityAmaintenanceProvides a trust and governance layer for AI agents, enabling secure API access, credential vaulting, paid execution with human approval, and automatic call resume.7 npm2-
Glama MCP Gateway
Add one secure layer between your agents and this server.