> ## Documentation Index
> Fetch the complete documentation index at: https://docs.trycontinuum.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Forge templates and CAD files

> MCP tools for Forge templates, render sets, and renders, and for CAD mesh files: inputs, examples, and errors.

Generated from the server's own tool registry, as released on 2026-11-05. Every section lists what the tool needs, whether it waits for a yes, how it completes, each action's inputs, valid example calls, and the errors it can return. Before you call a tool, fetch its live schema with `help_describe`; if the server and this page disagree, the server wins.

| Tool | What it does | Changes things |
| - | - | - |
| [`forge_query`](#forge_query) | Lists Forge templates, sets, and render jobs. Full contracts: [Forge functions](https://docs.trycontinuum.ai/forge/functions.md). | No |
| [`forge_manage`](#forge_manage) | Writes versions into a template, previews them, and produces final renders. Full contracts: [Forge functions](https://docs.trycontinuum.ai/forge/functions.md). | Yes |
| [`cad_query`](#cad_query) | Reads CAD mesh capabilities, files, revisions, and jobs. | No |
| [`cad_manage`](#cad_manage) | Uploads STL, DXF, or 3MF files, then transforms, renders, validates, or exports them. | Yes |

### `forge_query`

Lists Forge templates, sets, and render jobs. Full contracts: [Forge functions](https://docs.trycontinuum.ai/forge/functions.md).

**Good to know:**

* Per-action contracts, recipes, and recovery steps: [Forge functions](https://docs.trycontinuum.ai/forge/functions.md).

| Contract | Behavior |
| - | - |
| Changes things | No |
| Listed in your assistant | Always. |
| Role | Viewer or higher. |
| Needs | An active brand. |
| Confirmation | None. The call runs when made. |
| Completion | Returns the result in the same call. |
| Retry | Safe to retry: it only reads. |

**Actions** (`action`):

| action | Required inputs |
| - | - |
| `templates` | `action` |
| `template` | `action`, `templateKey` |
| `sets` | `action` |
| `set` | `action`, `setId` |
| `set_revisions` | `action`, `setId` |
| `destinations` | `action` |
| `jobs` | `action` |
| `job` | `action`, `jobId` |
| `batch` | `action`, `batchId` |
| `scenes` | `action` |
| `set_diff` | `action`, `setId`, `fromRevision` |
| `template_tree` | `action`, `assetId` |
| `template_layers` | `action`, `revisionId` |
| `template_revision` | `action`, `revisionId` |
| `template_diff` | `action`, `revisionId`, `toRevisionId` |
| `template_run` | `action`, `assetId` |
| `sources` | `action` |

Other inputs, shared by every action (the live schema says which each action reads): `templateKey`, `bindingId`, `setId`, `jobId`, `status`, `limit`, `batchId`, `waitSeconds`, `rowIds`, `fromRevision`, `toRevision`, `assetId`, `revisionId`, `toRevisionId`.

**Examples** (IDs are illustrative; use the ones earlier calls return):

* Wait on a batch in a background task until done is true: `{"name":"forge_query","arguments":{"action":"batch","batchId":"00000000-0000-4000-8000-000000000000","waitSeconds":50}}`
* What a variation renders differently from its parent row: `{"name":"forge_query","arguments":{"action":"set_diff","setId":"00000000-0000-4000-8000-000000000000","rowIds":["00000000-0000-4000-8000-000000000001","00000000-0000-4000-8000-000000000002"]}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `NOT_FOUND` | The item doesn't exist, or this brand can't see it. |
| `VALIDATION_ERROR` | An input is missing or wrong, or it changed since the preview. `details` names the field. |
| `needs_brand` | No brand is active. Call `brands_select`. |

**Related:** `forge_manage`, `paid_manage`.

Full schema: `help_describe {"tool":"forge_query","action":"templates"}`. As JSON: [`/mcp/schemas/forge_query.json`](https://docs.trycontinuum.ai/mcp/schemas/forge_query.json).

### `forge_manage`

Writes versions into a template, previews them, and produces final renders. Full contracts: [Forge functions](https://docs.trycontinuum.ai/forge/functions.md).

**Good to know:**

* `render_preview` returns a `confirmationToken` that `render_confirm` redeems. `set_delete` deletes with no preview, so ask first. Per-action contracts: [Forge functions](https://docs.trycontinuum.ai/forge/functions.md).

| Contract | Behavior |
| - | - |
| Changes things | Yes |
| Listed in your assistant | Always. |
| Role | Operator or higher. Admin or Owner for `template_forge`, `template_set_default`, and renders with `final: true`. |
| Needs | An active brand. |
| Confirmation | Writes preview first and return a `confirm_token` with `expires_at`. Confirm with that token after the person says yes. |
| Completion | Returns right away. Longer work continues as a job; read the id in the result. |
| Retry | Not idempotent. Check the current state before retrying. |

**Actions** (`action`):

| action | Required inputs |
| - | - |
| `set_create` | `action`, `templateKey`, `name`, `rows` |
| `set_update` | `action`, `setId`, `expectedRevision` |
| `set_fork` | `action`, `setId` |
| `set_delete` | `action`, `setId` |
| `suggest_rows` | `action`, `setId`, `prompt` |
| `apply_suggestions` | `action`, `setId`, `rows`, `expectedRevision` |
| `source_begin` | `action` |
| `source_status` | `action`, `upload_intent_id` |
| `source_figma` | `action`, `figmaUrl` |
| `render_preview` | `action`, `setId` |
| `render_confirm` | `action`, `confirmationToken` |
| `scene_fill` | `action`, `assetId`, `versionId` |
| `scene_render` | `action`, `confirmationToken` |
| `rows_patch` | `action`, `setId`, `rows`, `expectedRevision` |
| `set_retarget` | `action`, `setId`, `expectedRevision`, `templateRevisionId` |
| `template_preview` | `action`, `assetId`, `parentRevisionId`, `edits` |
| `template_save` | `action`, `name`, `assetId`, `parentRevisionId`, `edits` |
| `template_forge` | `action`, `assetId`, `step`, `templateName` |
| `template_set_default` | `action`, `assetId`, `variantId` |

Other inputs, shared by every action (the live schema says which each action reads): `setId`, `templateKey`, `bindingId`, `name`, `description`, `rows`, `settings`, `expectedRevision`, `prompt`, `count`, `autoCount`, `documentIds`, `mediaAssetIds`, `upload_intent_id`, `figmaUrl`, `figmaNodeIds`, `varyKeys`, `seed`, `parentRowId`, `rowIds`, `approvalDestinationIds`, `slackDestinationId`, `final`, `acceptMissingFonts`, `acceptLinkedLineMismatch`, `acceptOffPaletteColor`, `renderer`, `microFallbackPolicy`, `confirmationToken`, `assetId`, `versionId`, `brief`, `outputs`, `templateRevisionId`, `revision`, `removeRowIds`, `parentRevisionId`, `edits`, `compId`, `variantId`, `idempotencyKey`, `step`, `templateName`, `decisions`.

**Examples** (IDs are illustrative; use the ones earlier calls return):

* Open a signed-in mixed-file handoff: `{"name":"forge_manage","arguments":{"action":"source_begin"}}`
* Read each uploaded source and its ready ID: `{"name":"forge_manage","arguments":{"action":"source_status","upload_intent_id":"00000000-0000-4000-8000-000000000000"}}`
* Draft from extracted files and media without a fixed row count: `{"name":"forge_manage","arguments":{"action":"suggest_rows","setId":"00000000-0000-4000-8000-000000000000","documentIds":["00000000-0000-4000-8000-000000000001"],"mediaAssetIds":["00000000-0000-4000-8000-000000000002"],"autoCount":true,"count":10}}`
* Append selected draft rows once: `{"name":"forge_manage","arguments":{"action":"apply_suggestions","setId":"00000000-0000-4000-8000-000000000000","expectedRevision":0,"rows":[{"id":"00000000-0000-4000-8000-000000000003","parentId":null,"label":"Offer","overrides":{"headline":"Today only"}}]}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `BRAND_FORBIDDEN` | The person can't reach that brand. |
| `CONFLICT` | The item changed or is busy. Read it again, then retry with the current state. |
| `NOT_FOUND` | The item doesn't exist, or this brand can't see it. |
| `PERMISSION_DENIED` | The person's role can't do this. Ask an Admin or Owner. |
| `UNAUTHENTICATED` | The sign-in is missing or expired. Reconnect the assistant. |
| `UPSTREAM_ERROR` | A platform or provider returned an error. `details` carries its message. |
| `VALIDATION_ERROR` | An input is missing or wrong, or it changed since the preview. `details` names the field. |
| `needs_brand` | No brand is active. Call `brands_select`. |
| `needs_role` | The person's role is too low for this call. Needs: Operator or higher. Admin or Owner for `template_forge`, `template_set_default`, and renders with `final: true`. Ask an Admin or Owner. |
| `CONFIRMATION_REQUIRED` | This write needs a preview first. Preview, get a yes, then confirm with the returned token. |

**Related:** `forge_query`, `brand_knowledge`, `library_manage`, `media_upload_and_clip`, `paid_manage`.

Full schema: `help_describe {"tool":"forge_manage","action":"set_create"}`. As JSON: [`/mcp/schemas/forge_manage.json`](https://docs.trycontinuum.ai/mcp/schemas/forge_manage.json).

### `cad_query`

Reads CAD mesh capabilities, files, revisions, and jobs.

| Contract | Behavior |
| - | - |
| Changes things | No |
| Listed in your assistant | Always. |
| Role | Any brand member |
| Needs | An active brand. |
| Confirmation | None. The call runs when made. |
| Completion | Returns the result in the same call. |
| Retry | Safe to retry: it only reads. |

**Actions** (`action`):

| action | Required inputs |
| - | - |
| `capabilities` | `action` |
| `asset` | `action`, `assetId` |
| `entities` | `action`, `assetId` |
| `revision` | `action`, `assetId` |
| `job` | `action`, `jobId` |
| `artifact` | `action`, `assetId`, `artifact` |

Other inputs, shared by every action (the live schema says which each action reads): `assetId`, `revisionId`, `jobId`, `artifact`, `offset`, `limit`.

**Examples** (IDs are illustrative; use the ones earlier calls return):

* Which CAD files and operations are supported: `{"name":"cad_query","arguments":{"action":"capabilities"}}`
* Read a CAD file and its revisions: `{"name":"cad_query","arguments":{"action":"asset","assetId":"b7d3f9a1-4c6e-4a2b-8d5f-6e9c1b3a7d40"}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `BRAND_FORBIDDEN` | The person can't reach that brand. |
| `needs_brand` | No brand is active. Call `brands_select`. |
| `VALIDATION_ERROR` | An input is missing or wrong, or it changed since the preview. `details` names the field. |

**Related:** `cad_manage`.

Full schema: `help_describe {"tool":"cad_query","action":"capabilities"}`. As JSON: [`/mcp/schemas/cad_query.json`](https://docs.trycontinuum.ai/mcp/schemas/cad_query.json).

### `cad_manage`

Uploads STL, DXF, or 3MF files, then transforms, renders, validates, or exports them.

| Contract | Behavior |
| - | - |
| Changes things | Yes |
| Listed in your assistant | Always. |
| Role | Operator or higher |
| Needs | An active brand. |
| Confirmation | None. The call runs when made. |
| Completion | Returns right away. Longer work continues as a job; read the id in the result. |
| Retry | Retry with the same `idempotency_key` to avoid duplicates. |

**Actions** (`action`):

| action | Required inputs | Other inputs it uses |
| - | - | - |
| `upload_begin` | `brandId`, `root`, `files`, `requestId`, `action` | — |
| `upload_finalize` | `brandId`, `assetId`, `action` | — |
| `apply` | `brandId`, `assetId`, `baseRevision`, `requestId`, `operations`, `action` | — |
| `render` | `brandId`, `assetId`, `revisionId`, `requestId`, `recipe`, `width`, `height`, `frames`, `fps`, `action` | — |
| `export` | `brandId`, `assetId`, `revisionId`, `requestId`, `format`, `action` | — |
| `validate` | `brandId`, `assetId`, `revisionId`, `requestId`, `format`, `action` | `shellPolicy`, `profile` |
| `manufacturing_export` | `brandId`, `assetId`, `revisionId`, `requestId`, `format`, `action` | `shellPolicy`, `profile` |
| `benchmark` | `brandId`, `assetId`, `revisionId`, `requestId`, `profileId`, `action` | `shellPolicy`, `profile` |
| `cancel` | `action`, `brandId`, `jobId` | — |

**Examples** (IDs are illustrative; use the ones earlier calls return):

* Run manufacturing checks on a revision: `{"name":"cad_manage","arguments":{"action":"validate","brandId":"5c8e1a3b-7d2f-4e6a-9b4c-0f1e3d5a7c92","assetId":"b7d3f9a1-4c6e-4a2b-8d5f-6e9c1b3a7d40","revisionId":"c3e5a7b9d1f2a4c6e8b0d2f4a6c8e0b2d4f6a8c0e2b4d6f8a0c2e4b6d8f0a2c4","requestId":"0d3f5b7a-9c1e-4a2b-8f4d-6b8a0c2e4f71","format":"stl"}}`

**Errors and statuses:**

| Code | When |
| - | - |
| `BRAND_FORBIDDEN` | The person can't reach that brand. |
| `needs_brand` | No brand is active. Call `brands_select`. |
| `needs_role` | The person's role is too low for this call. Needs: Operator or higher. Ask an Admin or Owner. |
| `VALIDATION_ERROR` | An input is missing or wrong, or it changed since the preview. `details` names the field. |

**Related:** `cad_query`.

Full schema: `help_describe {"tool":"cad_manage","action":"upload_begin"}`. As JSON: [`/mcp/schemas/cad_manage.json`](https://docs.trycontinuum.ai/mcp/schemas/cad_manage.json).

## What's next

* [All tools](https://docs.trycontinuum.ai/mcp/tools.md): Every tool on one page, and the machine-readable index.
* [Account, brand, and jobs](https://docs.trycontinuum.ai/mcp/tools/account.md): Lists the brands you can access, and more.
* [Analytics, trends, and competitors](https://docs.trycontinuum.ai/mcp/tools/insights.md): Organic, paid, and website results by platform: accounts, top posts, campaigns, ad sets, and ads, and more.
* [Organic+ planning and publishing](https://docs.trycontinuum.ai/mcp/tools/organic.md): Reads and proposes a week of posts, approves it, reschedules and copies posts, and attaches media, and more.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.