# Fuzzbucket MCP tools

Connect with OAuth (Claude and other OAuth-capable clients sign in to Fuzzbucket) or a scoped personal access token from Fuzzbucket Settings > MCP. Browser session credentials are not accepted. Saving drafts does not generate. Chat and generation may spend credits. Retrying a change with the same operationId and identical arguments does not repeat it.

## fuzz_list_brands

Lists the Fuzzbucket brands owned by the signed-in user. A brand holds the identity, products, audience and style used by creative work. Use brands with ready=true; a brand that is still being set up or whose setup failed has ready=false and a note to pass on to the user.

```json
{
  "type": "object",
  "properties": {
    "page": {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 50,
          "description": "Page size from 1 to 50. Follow nextCursor rather than requesting a larger page."
        },
        "cursor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048,
          "description": "Opaque pagination/event cursor returned by the previous response. Omit for the first page."
        }
      },
      "required": [],
      "additionalProperties": false,
      "description": "Optional bounded page size and cursor; follow the returned cursor for more results."
    }
  },
  "required": [],
  "additionalProperties": false
}
```

## fuzz_get_brand

Returns one brand’s context and onboarding state, including pending onboarding questions.

```json
{
  "type": "object",
  "properties": {
    "brandId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Brand ID returned by fuzz_list_brands or fuzz_create_brand. Optional when answering an onboarding question before the brand profile exists."
    }
  },
  "required": [
    "brandId"
  ],
  "additionalProperties": false
}
```

## fuzz_get_brand_quota

Returns how many more brands the user’s plan allows them to create.

```json
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
```

## fuzz_create_brand

Starts brand onboarding from at least one website or social URL plus optional factual context. Onboarding runs asynchronously, can ask follow-up questions and can spend credits. Returns a runId.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "inputs": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 50000
      },
      "maxItems": 20,
      "minItems": 1,
      "description": "Website or social URLs plus optional factual brand, product and audience context for onboarding."
    },
    "sessionId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Chat or onboarding session identifier returned by the corresponding tool. Omit on a new send/create when no session exists."
    }
  },
  "required": [
    "operationId",
    "inputs"
  ],
  "additionalProperties": false
}
```

## fuzz_answer_brand_question

Submits the user’s answer to a pending brand onboarding question identified by runId and requestId.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "brandId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Brand ID returned by fuzz_list_brands or fuzz_create_brand. Optional when answering an onboarding question before the brand profile exists."
    },
    "runId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Opaque MCP runId returned by brand creation, chat send or node generation."
    },
    "requestId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Identifier of the pending question or approval, as returned by fuzz_get_run."
    },
    "answers": {
      "type": "object",
      "properties": {
        "confirmed": {
          "type": "boolean"
        },
        "corrections": {
          "type": "string",
          "minLength": 1,
          "maxLength": 50000
        },
        "selected_option": {
          "type": "string",
          "minLength": 1,
          "maxLength": 5000
        },
        "freeform_answer": {
          "type": "string",
          "minLength": 1,
          "maxLength": 50000
        }
      },
      "required": [],
      "additionalProperties": false,
      "description": "Answers to the pending brand onboarding question, using the displayed options or freeform text."
    }
  },
  "required": [
    "operationId",
    "runId",
    "requestId",
    "answers"
  ],
  "additionalProperties": false
}
```

## fuzz_list_workspaces

Lists workspaces for a brand. A workspace holds an orchestrator chat and a canvas of nodes.

```json
{
  "type": "object",
  "properties": {
    "brandId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Brand ID returned by fuzz_list_brands or fuzz_create_brand. Optional when answering an onboarding question before the brand profile exists."
    },
    "page": {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 50,
          "description": "Page size from 1 to 50. Follow nextCursor rather than requesting a larger page."
        },
        "cursor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048,
          "description": "Opaque pagination/event cursor returned by the previous response. Omit for the first page."
        }
      },
      "required": [],
      "additionalProperties": false,
      "description": "Optional bounded page size and cursor; follow the returned cursor for more results."
    }
  },
  "required": [
    "brandId"
  ],
  "additionalProperties": false
}
```

## fuzz_get_workspace

Returns one workspace and, optionally, its resumable chat sessions. Does not change what the user sees in the Fuzzbucket app.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "includeSessions": {
      "type": "boolean",
      "description": "Include resumable chat sessions; requires chat:read in addition to workspace access."
    },
    "sessionsPage": {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 50,
          "description": "Page size from 1 to 50. Follow nextCursor rather than requesting a larger page."
        },
        "cursor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048,
          "description": "Opaque pagination/event cursor returned by the previous response. Omit for the first page."
        }
      },
      "required": [],
      "additionalProperties": false,
      "description": "Pagination for sessions; only valid when includeSessions is true."
    }
  },
  "required": [
    "workspaceId"
  ],
  "additionalProperties": false
}
```

## fuzz_create_workspace

Creates a named workspace under an existing brand.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "brandId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Brand ID returned by fuzz_list_brands or fuzz_create_brand. Optional when answering an onboarding question before the brand profile exists."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    },
    "description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000
    }
  },
  "required": [
    "operationId",
    "brandId",
    "name"
  ],
  "additionalProperties": false
}
```

## fuzz_list_workspace_contents

Lists canvas nodes and stored assets in a workspace, with name search and pagination. Node IDs and asset IDs are different identifiers.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "kind": {
      "type": "string",
      "enum": [
        "node",
        "asset",
        "all"
      ]
    },
    "query": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    },
    "page": {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 50,
          "description": "Page size from 1 to 50. Follow nextCursor rather than requesting a larger page."
        },
        "cursor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048,
          "description": "Opaque pagination/event cursor returned by the previous response. Omit for the first page."
        }
      },
      "required": [],
      "additionalProperties": false,
      "description": "Optional bounded page size and cursor; follow the returned cursor for more results."
    }
  },
  "required": [
    "workspaceId"
  ],
  "additionalProperties": false
}
```

## fuzz_get_node

Returns a canvas node’s saved draft (prompt, model, settings), revision, supported inputSlots, connections, placement and output asset IDs.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "nodeId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Canvas nodeId returned by fuzz_list_workspace_contents or a node tool. Not an assetId."
    }
  },
  "required": [
    "workspaceId",
    "nodeId"
  ],
  "additionalProperties": false
}
```

## fuzz_create_node

Creates and places a text, image, video, audio or post draft node on the workspace canvas, with optional initial input connections. Saves a draft only; it does not generate.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "kind": {
      "type": "string",
      "enum": [
        "text",
        "image",
        "video",
        "audio",
        "post"
      ]
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    },
    "input": {
      "type": "object",
      "properties": {
        "prompt": {
          "type": "string",
          "maxLength": 50000,
          "description": "Creative instructions saved in the node input box. Empty text clears the draft prompt."
        },
        "modelId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "description": "Model ID returned by fuzz_list_models for this workspace and media type."
        },
        "settings": {
          "type": "object",
          "properties": {
            "aspectRatio": {
              "type": "string",
              "minLength": 1,
              "maxLength": 32
            },
            "resolution": {
              "type": "string",
              "minLength": 1,
              "maxLength": 32
            },
            "durationSeconds": {
              "type": "integer",
              "minimum": 1
            },
            "generationCount": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10
            },
            "audioParams": {
              "type": "object",
              "properties": {
                "mode": {
                  "type": "string",
                  "enum": [
                    "speech",
                    "dialogue",
                    "sound_scene",
                    "music",
                    "sfx"
                  ]
                },
                "voiceId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 255
                },
                "language": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 32
                },
                "voiceInstruction": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 500
                },
                "speed": {
                  "type": "number",
                  "minimum": 0.5,
                  "maximum": 2
                },
                "volume": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 2
                },
                "pitch": {
                  "type": "integer",
                  "minimum": -12,
                  "maximum": 12
                },
                "stability": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "outputFormat": {
                  "type": "string",
                  "enum": [
                    "wav",
                    "mp3",
                    "pcm",
                    "opus",
                    "ogg_opus"
                  ]
                },
                "sampleRate": {
                  "type": "integer",
                  "enum": [
                    8000,
                    16000,
                    22050,
                    24000,
                    32000,
                    44100,
                    48000
                  ]
                },
                "multilingual": {
                  "type": "boolean"
                },
                "timestamps": {
                  "type": "boolean"
                }
              },
              "required": [],
              "additionalProperties": false
            }
          },
          "required": [],
          "additionalProperties": false,
          "description": "Generation settings supported by the chosen model; allowed values are listed by fuzz_list_models."
        },
        "bindings": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "slotId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "Exact inputSlots.slotId returned by fuzz_get_node for the target node and its chosen model, which also lists accepted mediaTypes and maxConnections."
              },
              "source": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "nodeId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255,
                        "description": "Canvas nodeId returned by fuzz_list_workspace_contents or a node tool. Not an assetId."
                      }
                    },
                    "required": [
                      "nodeId"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "assetId": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255,
                        "description": "Stored content asset ID from contents, node outputs, or upload completion."
                      }
                    },
                    "required": [
                      "assetId"
                    ],
                    "additionalProperties": false
                  }
                ],
                "description": "Exactly one nodeId (live canvas input) or assetId (stored reference) from this workspace."
              }
            },
            "required": [
              "slotId",
              "source"
            ],
            "additionalProperties": false
          },
          "maxItems": 50,
          "description": "Initial typed input connections. Supported slots are listed by fuzz_get_node after the draft exists; fuzz_connect_node_input adds more."
        }
      },
      "required": [],
      "additionalProperties": false,
      "description": "Saved input-box draft; saving it does not start generation."
    }
  },
  "required": [
    "operationId",
    "workspaceId",
    "kind",
    "name"
  ],
  "additionalProperties": false
}
```

## fuzz_update_node_input

Updates a node’s saved prompt, model or settings. Omitted fields are kept. Requires the node’s latest revision. Does not generate.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "nodeId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Canvas nodeId returned by fuzz_list_workspace_contents or a node tool. Not an assetId."
    },
    "expectedRevision": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256,
      "description": "Opaque revision string from the latest node response (fuzz_get_node or a node mutation). A stale revision is rejected with a conflict."
    },
    "patch": {
      "type": "object",
      "properties": {
        "prompt": {
          "type": "string",
          "maxLength": 50000,
          "description": "Creative instructions saved in the node input box. Empty text clears the draft prompt."
        },
        "modelId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 255,
          "description": "Model ID returned by fuzz_list_models for this workspace and media type."
        },
        "settings": {
          "type": "object",
          "properties": {
            "aspectRatio": {
              "type": "string",
              "minLength": 1,
              "maxLength": 32
            },
            "resolution": {
              "type": "string",
              "minLength": 1,
              "maxLength": 32
            },
            "durationSeconds": {
              "type": "integer",
              "minimum": 1
            },
            "generationCount": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10
            },
            "audioParams": {
              "type": "object",
              "properties": {
                "mode": {
                  "type": "string",
                  "enum": [
                    "speech",
                    "dialogue",
                    "sound_scene",
                    "music",
                    "sfx"
                  ]
                },
                "voiceId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 255
                },
                "language": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 32
                },
                "voiceInstruction": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 500
                },
                "speed": {
                  "type": "number",
                  "minimum": 0.5,
                  "maximum": 2
                },
                "volume": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 2
                },
                "pitch": {
                  "type": "integer",
                  "minimum": -12,
                  "maximum": 12
                },
                "stability": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "outputFormat": {
                  "type": "string",
                  "enum": [
                    "wav",
                    "mp3",
                    "pcm",
                    "opus",
                    "ogg_opus"
                  ]
                },
                "sampleRate": {
                  "type": "integer",
                  "enum": [
                    8000,
                    16000,
                    22050,
                    24000,
                    32000,
                    44100,
                    48000
                  ]
                },
                "multilingual": {
                  "type": "boolean"
                },
                "timestamps": {
                  "type": "boolean"
                }
              },
              "required": [],
              "additionalProperties": false
            }
          },
          "required": [],
          "additionalProperties": false,
          "description": "Generation settings supported by the chosen model; allowed values are listed by fuzz_list_models."
        }
      },
      "required": [],
      "additionalProperties": false,
      "description": "Draft fields to update. Omitted fields are preserved; read current draft and model capabilities first."
    }
  },
  "required": [
    "operationId",
    "workspaceId",
    "nodeId",
    "expectedRevision",
    "patch"
  ],
  "additionalProperties": false
}
```

## fuzz_connect_node_input

Connects a source node or stored asset from the same workspace to one of the target node’s supported input slots. Requires the node’s latest revision. Does not generate.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "nodeId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Canvas nodeId returned by fuzz_list_workspace_contents or a node tool. Not an assetId."
    },
    "expectedRevision": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256,
      "description": "Opaque revision string from the latest node response (fuzz_get_node or a node mutation). A stale revision is rejected with a conflict."
    },
    "slotId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Exact inputSlots.slotId returned by fuzz_get_node for the target node and its chosen model, which also lists accepted mediaTypes and maxConnections."
    },
    "source": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "nodeId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Canvas nodeId returned by fuzz_list_workspace_contents or a node tool. Not an assetId."
            }
          },
          "required": [
            "nodeId"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "assetId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 255,
              "description": "Stored content asset ID from contents, node outputs, or upload completion."
            }
          },
          "required": [
            "assetId"
          ],
          "additionalProperties": false
        }
      ],
      "description": "Exactly one nodeId (live canvas input) or assetId (stored reference) from this workspace."
    }
  },
  "required": [
    "operationId",
    "workspaceId",
    "nodeId",
    "expectedRevision",
    "slotId",
    "source"
  ],
  "additionalProperties": false
}
```

## fuzz_disconnect_node_input

Removes one input connection from a node by connectionId. The source node or asset itself is kept. Requires the node’s latest revision.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "nodeId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Canvas nodeId returned by fuzz_list_workspace_contents or a node tool. Not an assetId."
    },
    "expectedRevision": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256,
      "description": "Opaque revision string from the latest node response (fuzz_get_node or a node mutation). A stale revision is rejected with a conflict."
    },
    "connectionId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "connections.connectionId returned by fuzz_get_node."
    }
  },
  "required": [
    "operationId",
    "workspaceId",
    "nodeId",
    "expectedRevision",
    "connectionId"
  ],
  "additionalProperties": false
}
```

## fuzz_send_chat_message

Sends a creative brief, with optional node or asset references, to the workspace orchestrator. The orchestrator can create and generate content and spend credits. Returns sessionId and runId for an asynchronous run.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "sessionId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Chat or onboarding session identifier returned by the corresponding tool. Omit on a new send/create when no session exists."
    },
    "message": {
      "type": "string",
      "minLength": 1,
      "maxLength": 50000
    },
    "references": {
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "nodeId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "Canvas nodeId returned by fuzz_list_workspace_contents or a node tool. Not an assetId."
              }
            },
            "required": [
              "nodeId"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "assetId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 255,
                "description": "Stored content asset ID from contents, node outputs, or upload completion."
              }
            },
            "required": [
              "assetId"
            ],
            "additionalProperties": false
          }
        ]
      },
      "maxItems": 50,
      "description": "Existing workspace node or asset references to include in the creative brief."
    }
  },
  "required": [
    "operationId",
    "workspaceId",
    "message"
  ],
  "additionalProperties": false
}
```

## fuzz_read_chat

Returns persisted user and assistant messages from a workspace chat session, with pagination.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "sessionId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Chat or onboarding session identifier returned by the corresponding tool. Omit on a new send/create when no session exists."
    },
    "page": {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "minimum": 1,
          "maximum": 50,
          "description": "Page size from 1 to 50. Follow nextCursor rather than requesting a larger page."
        },
        "cursor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048,
          "description": "Opaque pagination/event cursor returned by the previous response. Omit for the first page."
        }
      },
      "required": [],
      "additionalProperties": false,
      "description": "Optional bounded page size and cursor; follow the returned cursor for more results."
    }
  },
  "required": [
    "workspaceId",
    "sessionId"
  ],
  "additionalProperties": false
}
```

## fuzz_respond_to_chat_approval

Submits the user’s approve or decline decision, with optional feedback, for a pending orchestrator approval request identified by runId and requestId. Approving can start generation and spend credits.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "sessionId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Chat or onboarding session identifier returned by the corresponding tool. Omit on a new send/create when no session exists."
    },
    "runId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Opaque MCP runId returned by brand creation, chat send or node generation."
    },
    "requestId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Identifier of the pending question or approval, as returned by fuzz_get_run."
    },
    "response": {
      "type": "object",
      "properties": {
        "approved": {
          "type": "boolean"
        },
        "message": {
          "type": "string",
          "minLength": 1,
          "maxLength": 50000
        }
      },
      "required": [
        "approved"
      ],
      "additionalProperties": false,
      "description": "User decision for the pending approval, optionally with feedback."
    }
  },
  "required": [
    "operationId",
    "workspaceId",
    "sessionId",
    "runId",
    "requestId",
    "response"
  ],
  "additionalProperties": false
}
```

## fuzz_generate_node

Starts generation from a node’s saved prompt, model, settings and connections. Requires the node’s latest revision. Spends credits under the user’s plan. Returns a runId for an asynchronous run.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "nodeId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Canvas nodeId returned by fuzz_list_workspace_contents or a node tool. Not an assetId."
    },
    "expectedRevision": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256,
      "description": "Opaque revision string from the latest node response (fuzz_get_node or a node mutation). A stale revision is rejected with a conflict."
    }
  },
  "required": [
    "operationId",
    "workspaceId",
    "nodeId",
    "expectedRevision"
  ],
  "additionalProperties": false
}
```

## fuzz_get_run

Returns the status, progress events, pending questions or approvals, errors and output asset IDs of an asynchronous brand, chat or generation run. A run continues if the client disconnects. In clients that support MCP Apps, completed image, video and audio outputs are shown in an interactive preview.

```json
{
  "type": "object",
  "properties": {
    "runId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Opaque MCP runId returned by brand creation, chat send or node generation."
    },
    "cursor": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "description": "Opaque pagination/event cursor returned by the previous response. Omit for the first page."
    }
  },
  "required": [
    "runId"
  ],
  "additionalProperties": false
}
```

## fuzz_cancel_run

Requests cancellation of an asynchronous run. Work that already finished, and credits it already used, are not reversed.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "runId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Opaque MCP runId returned by brand creation, chat send or node generation."
    }
  },
  "required": [
    "operationId",
    "runId"
  ],
  "additionalProperties": false
}
```

## fuzz_get_asset

Returns a stored asset’s name, MIME type, size, dimensions and, for text assets, its text content.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "assetId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Stored content asset ID from contents, node outputs, or upload completion."
    }
  },
  "required": [
    "workspaceId",
    "assetId"
  ],
  "additionalProperties": false
}
```

## fuzz_prepare_upload

Prepares a short-lived transfer for uploading a reference file of up to 100 MB into a workspace. Returns an uploadId, URL and private request headers for a multipart upload.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "filename": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    },
    "mimeType": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128
    },
    "sizeBytes": {
      "type": "integer",
      "minimum": 1,
      "maximum": 104857600
    }
  },
  "required": [
    "operationId",
    "workspaceId",
    "filename",
    "mimeType",
    "sizeBytes"
  ],
  "additionalProperties": false
}
```

## fuzz_complete_upload

Finalizes an uploaded file by uploadId and stores it as a workspace asset.

```json
{
  "type": "object",
  "properties": {
    "operationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Client-generated identifier for one deliberate mutation (UUID recommended). Reuse exactly the same ID and arguments for retries; use a new ID for a new operation."
    },
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "uploadId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "uploadId returned by fuzz_prepare_upload, used after the file bytes were sent to its URL."
    }
  },
  "required": [
    "operationId",
    "workspaceId",
    "uploadId"
  ],
  "additionalProperties": false
}
```

## fuzz_download_asset

Prepares a 15-minute private download of one stored asset’s original file. Returns a URL with the private request headers needed to fetch it, and an equivalent downloadUrl that opens directly in a browser. Both are credentials for that one file.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "assetId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Stored content asset ID from contents, node outputs, or upload completion."
    }
  },
  "required": [
    "workspaceId",
    "assetId"
  ],
  "additionalProperties": false
}
```

## fuzz_export_node

Prepares a 15-minute private ZIP export of one canvas node. Returns a URL with the private request headers needed to fetch it, and an equivalent downloadUrl that opens directly in a browser.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "nodeId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Canvas nodeId returned by fuzz_list_workspace_contents or a node tool. Not an assetId."
    },
    "format": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "Optional export format supported by the node. Omit to use the normal app default; unsupported formats fail."
    }
  },
  "required": [
    "workspaceId",
    "nodeId"
  ],
  "additionalProperties": false
}
```

## fuzz_export_nodes

Prepares a 15-minute private ZIP export of several canvas nodes from one workspace. Returns a URL with the private request headers needed to fetch it, and an equivalent downloadUrl that opens directly in a browser.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "nodeIds": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255
      },
      "maxItems": 50,
      "minItems": 1,
      "description": "Canvas node IDs returned by the server, all in the specified workspace."
    },
    "format": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "Optional export format supported by the node. Omit to use the normal app default; unsupported formats fail."
    }
  },
  "required": [
    "workspaceId",
    "nodeIds"
  ],
  "additionalProperties": false
}
```

## fuzz_preview_assets

Returns compact previews of up to four stored assets from one workspace: small image thumbnails as image content, plus name, type and size for video, audio, text and other files. In clients that support MCP Apps, the previews are shown in an interactive gallery. Original files are available through fuzz_download_asset.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "assetIds": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 255
      },
      "maxItems": 4,
      "minItems": 1
    }
  },
  "required": [
    "workspaceId",
    "assetIds"
  ],
  "additionalProperties": false
}
```

## fuzz_list_models

Lists the models available to the user for a workspace: ID, label, provider, generation modes and a credit estimate for each. Filter by mediaType; pass modelId to get that model's supported settings (aspect ratios, resolutions, durations, reference limits) and full credit estimate.

```json
{
  "type": "object",
  "properties": {
    "workspaceId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Workspace ID returned by fuzz_list_workspaces or fuzz_create_workspace. Resources must belong to this workspace."
    },
    "mediaType": {
      "type": "string",
      "enum": [
        "text",
        "image",
        "video",
        "audio"
      ]
    },
    "modelId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Model ID returned by fuzz_list_models for this workspace and media type."
    }
  },
  "required": [
    "workspaceId"
  ],
  "additionalProperties": false
}
```
