Server definition
- Hash
- sha256:67dc439e88a280ceed5b79629dc407073063eaf4994022c4afcde6ff07b7b689
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "ActionDock is a human-in-the-loop approval gateway for AI-agent API writes: an MCP server and HTTP API that puts deterministic policy, owner approval of the exact request, and server-held credentials between an agent's tool call and a real API write. It is not a hidden agent or workflow orchestrator. You remain responsible for the user's goal, reasoning, action sequence, and every decision after a tool result. Use integration.execute for a supervised write to a workspace-approved HTTPS API. API reads, validation, extraction, research, document analysis, and reports are supporting actions. ActionDock controls only actions routed through its MCP or HTTP API. It does not control your browser, computer, or alternate direct access to a provider. Do not use ActionDock for messaging to customers or other external people, marketing, social publishing, generated media, moving money, stored value, regulated advice, or decisions, scoring, profiling, ranking, or categorization of people. A connection to the workspace’s own Slack workspace or Stripe account may be used only inside its method and path allowlists; a 403 integration_endpoint_refused, integration_parameter_blocked, or integration_method_blocked means the endpoint, parameter, or method is permanently refused for that destination and must not be retried or worked around; integration_path_blocked means the path is outside the connection's allowlist, which only the owner can widen. Call list_connections before an integration action. Stay inside each connection's method and path allowlists; credentials are never available to you. Only the signed-in owner can revoke an approved integration.execute while it is still queued, before the worker claims it. Successful revocation releases capacity and emits job.rejected, retaining the preview and both approval and rejection evidence. Agent API keys cannot revoke approval. This cannot cancel running requests or undo external changes. Treat rejected as terminal even after approval; do not automatically resubmit. The original idempotency key returns the rejected job; a replacement requires a new proposal, key and owner approval. For a support handoff, direct the signed-in owner to Download job evidence on the dashboard job. GET /v1/dashboard/jobs/{jobId}/export requires the owner session, not an agent API key. The JSON contains that job and up to 1,000 of its newest stored job events and owner observations per collection, with truncation flags. It is not signed or independent provider verification and never replays a request. Events may lag job updates. Review sensitive content before sharing. For time-sensitive writes, set integration.execute input.executeBefore to a future UTC ISO 8601 timestamp with seconds and up to millisecond precision. It is bound to the owner preview and checked again immediately before dispatch. Expired pending/queued jobs become failed, release capacity and emit job.failed; no automatic retry. Reuse the original idempotency key to retrieve the original job. Extending or removing the deadline requires a new proposal, key and approval. Already-sent requests may finish later; ambiguous outcomes still require reconciliation. For APIs supporting conditional writes, copy the strong quoted ETag from integration.fetch output.headers.etag into integration.execute input.ifMatch. The condition is bound to owner approval and sent as If-Match. On HTTP 412, read the current resource and submit a new proposal with a new idempotency key for approval; never silently remove the condition. Provider enforcement is required. For multi-step work, pass the same workflow_id and workflow_name to every run_action call so the customer can inspect the sequence you chose in the dashboard. Use a stable idempotency key to deduplicate the same ActionDock submission; it does not guarantee exactly-once execution by the provider. Show the exact approval preview, direct the signed-in workspace owner to approve or reject the write in the dashboard, wait for terminal job state, and never claim an external side effect occurred until its job succeeds. If execution is unknown, stop blind retry and reconcile the external system before submitting another request. Use list_job_reconciliations to read the owner’s provider observations after an unknown write. Treat them as owner reports, not independent verification or permission to retry. Agents cannot append them; direct the owner to Review provider outcome on the dashboard job. Preserve the original execution_unknown status when reporting the attempt. A workspace callback can wake your host when a job finishes. Verify its HMAC signature and deduplicate the delivery before resuming your reasoning loop; polling remains the fallback. Read the portable agent instruction at https://actiondock.app/skill.md for recommendation, connection, workflow, and safety rules.",
"tools": [
{
"description": "Get the current status and result of an action job.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"job_id": {
"description": "Job identifier returned by run_action.",
"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)$",
"type": "string"
}
},
"required": [
"job_id"
],
"type": "object"
},
"name": "get_job",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"action": {
"description": "Catalog action name, for example integration.execute.",
"type": "string"
},
"approvedAt": {
"anyOf": [
{
"description": "When a signed-in workspace owner released the write.",
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"approvedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who approved the write."
},
"createdAt": {
"description": "Creation time.",
"format": "date-time",
"type": "string"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Failure, execution_unknown or queued approval revocation explanation; null otherwise."
},
"id": {
"description": "Job identifier.",
"format": "uuid",
"type": "string"
},
"idempotencyKey": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Idempotency key that deduplicates this submission within the workspace."
},
"input": {
"additionalProperties": {},
"description": "Validated action input exactly as submitted.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"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."
},
"rejectedAt": {
"anyOf": [
{
"description": "When a signed-in workspace owner rejected the write.",
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"rejectedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who rejected the write."
},
"sideEffect": {
"description": "True when the action writes to an external system and therefore required owner approval.",
"type": "boolean"
},
"status": {
"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.",
"enum": [
"awaiting_approval",
"queued",
"running",
"succeeded",
"failed",
"rejected",
"execution_unknown"
],
"type": "string"
},
"updatedAt": {
"description": "Last status change.",
"format": "date-time",
"type": "string"
},
"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."
},
"workspaceId": {
"description": "Workspace that owns the job.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id",
"workspaceId",
"action",
"workflowId",
"workflowName",
"status",
"input",
"output",
"error",
"sideEffect",
"idempotencyKey",
"approvedAt",
"approvedBy",
"rejectedAt",
"rejectedBy",
"createdAt",
"updatedAt"
],
"type": "object"
}
},
{
"description": "List every action available to the agent, including input schemas and side-effect flags.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_actions",
"outputSchema": {
"$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"
}
},
{
"description": "List the workspace-approved HTTPS API connections and their method/path allowlists. Credentials are never returned.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_connections",
"outputSchema": {
"$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"
}
},
{
"description": "List recent job and callback events for workflow continuation and audit.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 50,
"description": "Maximum number of most recent events to return.",
"maximum": 200,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "list_events",
"outputSchema": {
"$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"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"before": {
"description": "nextBefore from the previous page; omit for the newest observations.",
"pattern": "^[1-9][0-9]{0,18}$",
"type": "string"
},
"job_id": {
"description": "Job identifier returned by run_action.",
"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)$",
"type": "string"
},
"limit": {
"default": 20,
"description": "Maximum observations per page, newest first.",
"maximum": 100,
"minimum": 1,
"type": "integer"
}
},
"required": [
"job_id"
],
"type": "object"
},
"name": "list_job_reconciliations",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"nextBefore": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Pass as before to read older records; null means the end of history."
},
"records": {
"description": "Owner observations, newest first; corrections append to history.",
"items": {
"additionalProperties": false,
"properties": {
"createdAt": {
"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))$",
"type": "string"
},
"evidence": {
"type": "string"
},
"id": {
"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)$",
"type": "string"
},
"jobId": {
"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)$",
"type": "string"
},
"outcome": {
"enum": [
"applied",
"not_applied",
"inconclusive"
],
"type": "string"
},
"recordedBy": {
"description": "Signed-in workspace owner who recorded this observation.",
"type": "string"
},
"reference": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"jobId",
"outcome",
"evidence",
"reference",
"recordedBy",
"createdAt"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"records",
"nextBefore"
],
"type": "object"
}
},
{
"description": "List metered action debits and the current UTC-month usage total.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"default": 50,
"description": "Maximum number of most recent usage records to return.",
"maximum": 200,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "list_usage",
"outputSchema": {
"$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"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"action": {
"description": "Catalog action name from list_actions, for example integration.execute.",
"minLength": 1,
"type": "string"
},
"idempotency_key": {
"description": "Caller-chosen key; resubmitting the same key and input returns the existing job instead of creating another.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"input": {
"additionalProperties": {},
"default": {},
"description": "Action input matching the schema advertised by list_actions.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"workflow_id": {
"description": "Stable identifier of the agent workflow this job belongs to, for grouping events.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"workflow_name": {
"description": "Human-readable workflow name shown to the workspace owner during review.",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "run_action",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"action": {
"description": "Catalog action name, for example integration.execute.",
"type": "string"
},
"approvedAt": {
"anyOf": [
{
"description": "When a signed-in workspace owner released the write.",
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"approvedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who approved the write."
},
"createdAt": {
"description": "Creation time.",
"format": "date-time",
"type": "string"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Failure, execution_unknown or queued approval revocation explanation; null otherwise."
},
"id": {
"description": "Job identifier.",
"format": "uuid",
"type": "string"
},
"idempotencyKey": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Idempotency key that deduplicates this submission within the workspace."
},
"input": {
"additionalProperties": {},
"description": "Validated action input exactly as submitted.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"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."
},
"rejectedAt": {
"anyOf": [
{
"description": "When a signed-in workspace owner rejected the write.",
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"rejectedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who rejected the write."
},
"sideEffect": {
"description": "True when the action writes to an external system and therefore required owner approval.",
"type": "boolean"
},
"status": {
"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.",
"enum": [
"awaiting_approval",
"queued",
"running",
"succeeded",
"failed",
"rejected",
"execution_unknown"
],
"type": "string"
},
"updatedAt": {
"description": "Last status change.",
"format": "date-time",
"type": "string"
},
"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."
},
"workspaceId": {
"description": "Workspace that owns the job.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id",
"workspaceId",
"action",
"workflowId",
"workflowName",
"status",
"input",
"output",
"error",
"sideEffect",
"idempotencyKey",
"approvedAt",
"approvedBy",
"rejectedAt",
"rejectedBy",
"createdAt",
"updatedAt"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"job_id": {
"description": "Job identifier returned by run_action.",
"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)$",
"type": "string"
},
"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.",
"maximum": 300,
"minimum": 0,
"type": "integer"
}
},
"required": [
"job_id"
],
"type": "object"
},
"name": "wait_for_job",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"action": {
"description": "Catalog action name, for example integration.execute.",
"type": "string"
},
"approvedAt": {
"anyOf": [
{
"description": "When a signed-in workspace owner released the write.",
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"approvedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who approved the write."
},
"createdAt": {
"description": "Creation time.",
"format": "date-time",
"type": "string"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Failure, execution_unknown or queued approval revocation explanation; null otherwise."
},
"id": {
"description": "Job identifier.",
"format": "uuid",
"type": "string"
},
"idempotencyKey": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Idempotency key that deduplicates this submission within the workspace."
},
"input": {
"additionalProperties": {},
"description": "Validated action input exactly as submitted.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"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."
},
"rejectedAt": {
"anyOf": [
{
"description": "When a signed-in workspace owner rejected the write.",
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
]
},
"rejectedBy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Owner who rejected the write."
},
"sideEffect": {
"description": "True when the action writes to an external system and therefore required owner approval.",
"type": "boolean"
},
"status": {
"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.",
"enum": [
"awaiting_approval",
"queued",
"running",
"succeeded",
"failed",
"rejected",
"execution_unknown"
],
"type": "string"
},
"updatedAt": {
"description": "Last status change.",
"format": "date-time",
"type": "string"
},
"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."
},
"workspaceId": {
"description": "Workspace that owns the job.",
"format": "uuid",
"type": "string"
}
},
"required": [
"id",
"workspaceId",
"action",
"workflowId",
"workflowName",
"status",
"input",
"output",
"error",
"sideEffect",
"idempotencyKey",
"approvedAt",
"approvedBy",
"rejectedAt",
"rejectedBy",
"createdAt",
"updatedAt"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:67dc439e88a280ceed5b79629dc407073063eaf4994022c4afcde6ff07b7b689 | sha256sum