ActionDock
Supervised API-write gateway for AI agents with policy, human approval and execution receipts.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"actiondock": {
"url": "https://actiondock.app/mcp"
}
}
}Remote endpoints
https://actiondock.app/mcpstreamable-httpWhat it can do
Tool inventory
Tools (8)
🟢list_actions
List every action available to the agent, including input schemas and side-effect flags.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"description": "Catalog entries with name, description, input schema, and side-effect flag."
}
},
"required": [
"actions"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴run_action(action, input, workflow_id, workflow_name, idempotency_key)
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.
Input Schema
{
"type": "object",
"properties": {
"action": {
"type": "string",
"minLength": 1,
"description": "Catalog action name from list_actions, for example integration.execute."
},
"input": {
"default": {},
"description": "Action input matching the schema advertised by list_actions.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"workflow_id": {
"description": "Stable identifier of the agent workflow this job belongs to, for grouping events.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"workflow_name": {
"description": "Human-readable workflow name shown to the workspace owner during review.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"idempotency_key": {
"description": "Caller-chosen key; resubmitting the same key and input returns the existing job instead of creating another.",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"action"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Job identifier."
},
"workspaceId": {
"type": "string",
"format": "uuid",
"description": "Workspace that owns the job."
},
"action": {
"type": "string",
"description": "Catalog action name, for example integration.execute."
},
"workflowId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Caller-supplied workflow identifier shared across related jobs."
},
"workflowName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Caller-supplied workflow name shown in the dashboard."
},
"status": {
"type": "string",
"enum": [
"awaiting_approval",
"queued",
"running",
"succeeded",
"failed",
"rejected",
"execution_unknown"
],
"description": "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."
},
"input": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "Validated action input exactly as submitted."
},
"output": {
"description": "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."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Failure, execution_unknown or queued approval revocation explanation; null otherwise."
},
"sideEffect": {
"type": "boolean",
"description": "True when the action writes to an external system and therefore required owner approval."
},
"idempotencyKey": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Idempotency key that deduplicates this submission within the workspace."
},
"approvedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "When a signed-in workspace owner released the write."
},
{
"type": "null"
}
]
},
"approvedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who approved the write."
},
"rejectedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "When a signed-in workspace owner rejected the write."
},
{
"type": "null"
}
]
},
"rejectedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who rejected the write."
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Creation time."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Last status change."
}
},
"required": [
"id",
"workspaceId",
"action",
"workflowId",
"workflowName",
"status",
"input",
"output",
"error",
"sideEffect",
"idempotencyKey",
"approvedAt",
"approvedBy",
"rejectedAt",
"rejectedBy",
"createdAt",
"updatedAt"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_job(job_id)
Get the current status and result of an action job.
Input Schema
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Job identifier returned by run_action."
}
},
"required": [
"job_id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Job identifier."
},
"workspaceId": {
"type": "string",
"format": "uuid",
"description": "Workspace that owns the job."
},
"action": {
"type": "string",
"description": "Catalog action name, for example integration.execute."
},
"workflowId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Caller-supplied workflow identifier shared across related jobs."
},
"workflowName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Caller-supplied workflow name shown in the dashboard."
},
"status": {
"type": "string",
"enum": [
"awaiting_approval",
"queued",
"running",
"succeeded",
"failed",
"rejected",
"execution_unknown"
],
"description": "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."
},
"input": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "Validated action input exactly as submitted."
},
"output": {
"description": "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."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Failure, execution_unknown or queued approval revocation explanation; null otherwise."
},
"sideEffect": {
"type": "boolean",
"description": "True when the action writes to an external system and therefore required owner approval."
},
"idempotencyKey": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Idempotency key that deduplicates this submission within the workspace."
},
"approvedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "When a signed-in workspace owner released the write."
},
{
"type": "null"
}
]
},
"approvedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who approved the write."
},
"rejectedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "When a signed-in workspace owner rejected the write."
},
{
"type": "null"
}
]
},
"rejectedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who rejected the write."
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Creation time."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Last status change."
}
},
"required": [
"id",
"workspaceId",
"action",
"workflowId",
"workflowName",
"status",
"input",
"output",
"error",
"sideEffect",
"idempotencyKey",
"approvedAt",
"approvedBy",
"rejectedAt",
"rejectedBy",
"createdAt",
"updatedAt"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢list_job_reconciliations(job_id, limit, before)
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.
Input Schema
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Job identifier returned by run_action."
},
"limit": {
"default": 20,
"description": "Maximum observations per page, newest first.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"before": {
"description": "nextBefore from the previous page; omit for the newest observations.",
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
}
},
"required": [
"job_id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"records": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"jobId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"outcome": {
"type": "string",
"enum": [
"applied",
"not_applied",
"inconclusive"
]
},
"evidence": {
"type": "string"
},
"reference": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"recordedBy": {
"type": "string",
"description": "Signed-in workspace owner who recorded this observation."
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"id",
"jobId",
"outcome",
"evidence",
"reference",
"recordedBy",
"createdAt"
],
"additionalProperties": false
},
"description": "Owner observations, newest first; corrections append to history."
},
"nextBefore": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Pass as before to read older records; null means the end of history."
}
},
"required": [
"records",
"nextBefore"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢wait_for_job(job_id, timeout_seconds)
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.
Input Schema
{
"type": "object",
"properties": {
"job_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Job identifier returned by run_action."
},
"timeout_seconds": {
"default": 30,
"description": "How long to wait for a decision or final state before returning the current job; keep it below your client's tool timeout.",
"type": "integer",
"minimum": 0,
"maximum": 300
}
},
"required": [
"job_id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "Job identifier."
},
"workspaceId": {
"type": "string",
"format": "uuid",
"description": "Workspace that owns the job."
},
"action": {
"type": "string",
"description": "Catalog action name, for example integration.execute."
},
"workflowId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Caller-supplied workflow identifier shared across related jobs."
},
"workflowName": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Caller-supplied workflow name shown in the dashboard."
},
"status": {
"type": "string",
"enum": [
"awaiting_approval",
"queued",
"running",
"succeeded",
"failed",
"rejected",
"execution_unknown"
],
"description": "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."
},
"input": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "Validated action input exactly as submitted."
},
"output": {
"description": "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."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Failure, execution_unknown or queued approval revocation explanation; null otherwise."
},
"sideEffect": {
"type": "boolean",
"description": "True when the action writes to an external system and therefore required owner approval."
},
"idempotencyKey": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Idempotency key that deduplicates this submission within the workspace."
},
"approvedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "When a signed-in workspace owner released the write."
},
{
"type": "null"
}
]
},
"approvedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who approved the write."
},
"rejectedAt": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"description": "When a signed-in workspace owner rejected the write."
},
{
"type": "null"
}
]
},
"rejectedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who rejected the write."
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Creation time."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"description": "Last status change."
}
},
"required": [
"id",
"workspaceId",
"action",
"workflowId",
"workflowName",
"status",
"input",
"output",
"error",
"sideEffect",
"idempotencyKey",
"approvedAt",
"approvedBy",
"rejectedAt",
"rejectedBy",
"createdAt",
"updatedAt"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢list_events(limit)
List recent job and callback events for workflow continuation and audit.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"default": 50,
"description": "Maximum number of most recent events to return.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"description": "Most recent job and callback events, newest first."
}
},
"required": [
"events"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢list_connections
List the workspace-approved HTTPS API connections and their method/path allowlists. Credentials are never returned.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"connections": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"description": "Workspace-approved API connections with their method and path allowlists; credentials are never included."
}
},
"required": [
"connections"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢list_usage(limit)
List metered action debits and the current UTC-month usage total.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"default": 50,
"description": "Maximum number of most recent usage records to return.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"summary": {
"type": "object",
"properties": {},
"additionalProperties": {},
"description": "Current UTC-month usage total and plan limit."
},
"records": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"description": "Most recent metered action debits, newest first."
}
},
"required": [
"summary",
"records"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Recommended Prompts
get_jobget_joblist_actionslist_actionslist_actionsget_jobCommunity
Evidence