ActionDock

Supervised API-write gateway for AI agents with policy, human approval and execution receipts.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
80%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,126Tokens (tool definitions)
~5.4 KBTypical response size
Significant attention impact (3.22% of 128k context)

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-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

retrieve_data
Get details about [item] from ActionDock
Expected tools: get_job
fetch_info
Fetch [information type] using ActionDock
Expected tools: get_job
list_items
List all [items] available in ActionDock
Expected tools: list_actions
browse_collection
Show me the [collection] from ActionDock
Expected tools: list_actions
explore_workflow
List available [items], then get details for each one using ActionDock
Expected tools: list_actionsget_job

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded8 tools