Epox Docs
Open app

Generation & automations tools

Start a queued pack generation, and read flow, job, and automation status through the Epox MCP server.

Before you start

workspaceId is always resolved server-side from your credential — none of these tools take it as an argument. Every response below shows the parsed data value only; see Developer overview for the full content[0].text envelope every tool result rides in.

Generation

epox_start_pack_generation

Start queued generation from an existing template pack and workspace products. This may consume credits.

Arguments:

  • `packId` (string, required) — the template pack to run.
  • `productIds` (array of string, required, 1–100 items) — which workspace products to generate for.
  • `templateIds` (array of string, optional, up to 100) — restrict the run to specific templates inside the pack; omit to use every template the pack defines.
  • `sourceImages` (object, optional) — per-product base-image selection, keyed by product ID. Each value is { primaryId?: string, additionalIds?: string[] } (up to 2 additional images). Every key must be one of the product IDs in productIds, or the call fails.
  • `resolution` (optional) — one of 0.5K, 1K, 2K, 4K.
  • `variantsPerProduct` (optional integer, 1–8).
  • `executionMode` (optional) — batch or multi.
  • `name` (optional string, up to 200 chars) — names the run.
json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "epox_start_pack_generation",
    "arguments": {
      "packId": "pack_studio_lifestyle_01",
      "productIds": ["prod_9f2a", "prod_c114"],
      "templateIds": ["tmpl_kitchen_counter"],
      "sourceImages": {
        "prod_9f2a": { "primaryId": "img_7d3e", "additionalIds": ["img_1ab2"] }
      },
      "resolution": "2K",
      "variantsPerProduct": 2,
      "executionMode": "batch",
      "name": "October lifestyle refresh"
    }
  }
}
json
{
  "runId": "pack_run_4c9a",
  "flowCount": 2,
  "flowIds": ["flow_a1b2", "flow_c3d4"],
  "jobIds": ["job_e5f6", "job_g7h8", "job_i9j0", "job_k1l2"],
  "expectedImageCount": 4
}

Errors specific to this tool:

  • `-32602` "Source images must belong to a requested product" — a sourceImages key isn't in productIds.
  • `-32000` — the pack executor itself couldn't start the run (a bad packId, a product that no longer exists, etc.); the message is the underlying reason.

epox_list_generation_flows

List generation flow status and linked products. Paginated — see Developer overview → Pagination.

json
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": { "name": "epox_list_generation_flows", "arguments": { "limit": 20 } }
}
json
{
  "items": [
    {
      "id": "flow_a1b2",
      "name": "October lifestyle refresh — Oak Dining Table",
      "status": "completed",
      "productIds": ["prod_9f2a"],
      "collectionId": "coll_88bb",
      "templateId": "tmpl_kitchen_counter",
      "templateName": "Kitchen counter, morning light",
      "packId": "pack_studio_lifestyle_01",
      "packRunId": "pack_run_4c9a",
      "updatedAt": "2026-09-29T14:02:11.000Z"
    }
  ],
  "nextCursor": null
}

status always reflects the flow's true current state, including for a batch/collection-mode run whose own status column is never written after creation — the tool resolves the real status server-side, so you never need to cross-reference a collection separately.

epox_get_generation_flow

Read one generation flow by ID.

json
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": { "name": "epox_get_generation_flow", "arguments": { "id": "flow_a1b2" } }
}
json
{ "flow": { "id": "flow_a1b2", "name": "October lifestyle refresh — Oak Dining Table", "status": "completed", "productIds": ["prod_9f2a"], "collectionId": "coll_88bb", "templateId": "tmpl_kitchen_counter", "templateName": "Kitchen counter, morning light", "packId": "pack_studio_lifestyle_01", "packRunId": "pack_run_4c9a", "updatedAt": "2026-09-29T14:02:11.000Z" } }

An unknown id returns { "flow": null } rather than an error.

epox_list_jobs

List recent generation job status without raw prompts or payloads. Paginated.

json
{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": { "name": "epox_list_jobs", "arguments": { "limit": 10 } }
}
json
{
  "items": [
    {
      "id": "job_e5f6",
      "flowId": "flow_a1b2",
      "type": "image",
      "status": "completed",
      "progress": 100,
      "attempts": 1,
      "maxAttempts": 3,
      "error": null,
      "createdAt": "2026-09-29T13:58:02.000Z",
      "startedAt": "2026-09-29T13:58:04.000Z",
      "completedAt": "2026-09-29T14:00:47.000Z"
    }
  ],
  "nextCursor": null
}

epox_get_job

Read one generation job status without raw prompts or payloads.

json
{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "tools/call",
  "params": { "name": "epox_get_job", "arguments": { "id": "job_e5f6" } }
}
json
{ "job": { "id": "job_e5f6", "flowId": "flow_a1b2", "type": "image", "status": "completed", "progress": 100, "attempts": 1, "maxAttempts": 3, "error": null, "createdAt": "2026-09-29T13:58:02.000Z", "startedAt": "2026-09-29T13:58:04.000Z", "completedAt": "2026-09-29T14:00:47.000Z" } }

An unknown id returns { "job": null }.

Automations

epox_list_automations

List automation definitions with redacted action configuration. Paginated; optionally filter by enabled (boolean).

json
{
  "jsonrpc": "2.0",
  "id": 6,
  "method": "tools/call",
  "params": { "name": "epox_list_automations", "arguments": { "enabled": true, "limit": 20 } }
}
json
{
  "items": [
    {
      "id": "auto_3f8c",
      "name": "New product → lifestyle pack",
      "description": "Runs the studio lifestyle pack whenever a product is added from WooCommerce.",
      "enabled": true,
      "labels": ["catalogue-sync"],
      "trigger": "product_created",
      "actionTypes": ["generate", "approval"],
      "storeConnectionId": "store_conn_11aa",
      "updatedAt": "2026-09-20T09:15:00.000Z"
    }
  ],
  "nextCursor": null
}

epox_get_automation

Read one automation definition with redacted action configuration — same shape as above.

json
{
  "jsonrpc": "2.0",
  "id": 7,
  "method": "tools/call",
  "params": { "name": "epox_get_automation", "arguments": { "id": "auto_3f8c" } }
}
json
{ "automation": { "id": "auto_3f8c", "name": "New product → lifestyle pack", "description": "Runs the studio lifestyle pack whenever a product is added from WooCommerce.", "enabled": true, "labels": ["catalogue-sync"], "trigger": "product_created", "actionTypes": ["generate", "approval"], "storeConnectionId": "store_conn_11aa", "updatedAt": "2026-09-20T09:15:00.000Z" } }

An unknown id returns { "automation": null }.

epox_list_automation_runs

List recent automation execution status without trigger payloads. Paginated; optionally filter by automationId and/or status (one of pending, running, waiting_approval, waiting_retry, completed, failed, cancelled, imported).

json
{
  "jsonrpc": "2.0",
  "id": 8,
  "method": "tools/call",
  "params": { "name": "epox_list_automation_runs", "arguments": { "automationId": "auto_3f8c", "status": "completed", "limit": 20 } }
}
json
{
  "items": [
    {
      "id": "run_9c2d",
      "automationId": "auto_3f8c",
      "productId": "prod_9f2a",
      "flowId": "flow_a1b2",
      "status": "completed",
      "actionIndex": 2,
      "retryCount": 0,
      "error": null,
      "isManual": false,
      "createdAt": "2026-09-29T13:57:40.000Z",
      "startedAt": "2026-09-29T13:57:41.000Z",
      "completedAt": "2026-09-29T14:00:50.000Z"
    }
  ],
  "nextCursor": null
}
Was this guide useful?Your feedback helps us refine the documentation.