Build with Caroush

Results & background jobs

Read structured results and follow asynchronous work through its real outcome.

Take the docs with youMarkdown for your editor or agent.

Each tool returns MCP content and structuredContent. The structured envelope contains a server-generated request_id, status, and, when appropriate, data, operation_id, approval_url or error. The machine-readable catalog provides the full output schema for every tool.

Illustrative approval response; IDs are examples, not real resources:

json
{
  "request_id": "11111111-1111-4111-8111-111111111111",
  "operation_id": "22222222-2222-4222-8222-222222222222",
  "status": "approval_required",
  "approval_url": "https://app.caroush.com/settings/integrations/mcp/requests/22222222-2222-4222-8222-222222222222"
}
StateMeaningClient action
approval_requiredExact request recorded; effect has not runShow the URL to the user; never approve on their behalf
approved / queuedUser approved, or background request acceptedPoll get_job_status with operation_id
runningOne worker owns executionWait; do not generate a new key
succeededTool handler finishedInspect data for native run or provider state
failedValidation, access or application failureRead error; correct the cause before a new intentional action
dispatch_failedQueue dispatch failedRetry the identical call with the same key; automatic recovery also runs
deniedUser declined or approval expiredStop; a new request requires renewed user intent
outcome_unknownWorker stopped or an unexpected error prevented confirmationInspect existing records before any new request; no blind replay

status=succeeded at the MCP envelope means the handler returned successfully. It does not promise AI generation, provider processing or publication finished. generate_carousel, regeneration and retry queue native jobs and return the actual post/run IDs. Poll get_carousel using its documented post_id. run_automation returns a native run: poll get_automation_run using kind and run_id. Publishing can remain pending; inspect returned schedules with get_schedule. Confirm completion from real statuses and post_url values, never invented permalinks.

get_job_status itself is a successful read, so the operation's state is inside its data.status. It is visible only to the connection that created it. Stored arguments and successful results are encrypted with the Laravel application key. Keep that key stable on redeployment.