What SeamUI agents can do
Browse the operations currently exposed through MCP, what requires confirmation, and what remains intentionally unavailable. Your actual access still depends on your Workspace and current server availability.
Available tools
These tools are currently returned to connected MCP Hosts.
catalog.modelsRead onlyList active SeamUI model routes, what each can do (uses: text-to-image, image-edit, text-to-video, animate-image, first-last-frame, video-edit, ...), their input slots and safe limits.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}workspace.context.readRead onlyRead fresh operational context for the connected Workspace.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}account.workspaces.listRead onlyList every Workspace of the connected SeamUI account, with the User's role, the plan, the member count and the number of images, videos and Assets. Read only: actions apply only to the current Workspace.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"additionalProperties": false
}projects.listRead onlyList Projects in the connected Workspace.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cursor": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"additionalProperties": false
}projects.readRead onlyRead one Project from the connected Workspace.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"projectId": {
"type": "string",
"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)$"
}
},
"required": [
"projectId"
],
"additionalProperties": false
}assets.listRead onlyFind images and videos, newest first, to resolve "this image" or "my last video". Lists safe Asset metadata, including orphaned Assets, in the connected Workspace. A created Asset carries url, its public permanent media URL.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cursor": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"projectId": {
"type": "string",
"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": {
"type": "string",
"enum": [
"image",
"video"
]
},
"status": {
"type": "string",
"minLength": 1,
"maxLength": 32
}
},
"additionalProperties": false
}assets.readRead onlyRead safe metadata for one Asset in the connected Workspace, including url, its public permanent media URL once created.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"assetId": {
"type": "string",
"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)$"
}
},
"required": [
"assetId"
],
"additionalProperties": false
}assets.generation.readRead onlyRead the prompt, model, settings and reference files that produced one image or video, to show them, regenerate it, or make a variation. reuse holds ready arguments for images.generate or videos.generate. status not_generated means a trim, merge, frame, background or resize derivative: read its sourceAssetIds instead. status expired means the plan's history retention removed the prompt.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"assetId": {
"type": "string",
"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)$"
}
},
"required": [
"assetId"
],
"additionalProperties": false
}references.listRead onlyList reusable reference identities already stored in the Workspace. To add a new file, use references.upload or references.import.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cursor": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"projectId": {
"type": "string",
"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)$"
}
},
"additionalProperties": false
}assets.handoffRead onlyOpen a Project or Asset in the SeamUI app. Creates an authenticated SeamUI Dashboard link to one Project. For an Asset, the link opens the Project that contains it.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"projectId": {
"type": "string",
"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)$"
},
"assetId": {
"type": "string",
"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)$"
}
},
"additionalProperties": false
}assets.contentRead onlyReturn authenticated media bytes, for Hosts that need the bytes themselves rather than the public url. Images return MCP image content; videos return a poster or embedded file bytes. Originals above 8 MB require chunks. Pass objectVersion and objectEtag from the first chunk on every subsequent read, and assemble bytes by offset after checking each SHA-256.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"assetId": {
"type": "string",
"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)$"
},
"representation": {
"type": "string",
"enum": [
"preview",
"poster",
"original",
"chunk"
]
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"length": {
"type": "integer",
"minimum": 1,
"maximum": 1000000
},
"objectVersion": {
"type": "string",
"minLength": 1,
"maxLength": 256
},
"objectEtag": {
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"required": [
"assetId",
"representation"
],
"additionalProperties": false
}actions.resultRead onlyRecover one operation by actionId, or by capability and the original idempotencyKey after response loss. Returns durable admission state, Asset IDs and available results, with the public media url of each created Asset. Do not resubmit generation after an uncertain response.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"actionId": {
"type": "string",
"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)$"
},
"capability": {
"type": "string"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{8,128}$"
}
},
"additionalProperties": false
}projects.createActionConnection permissionCreate one Project. The shared slug policy tries the initial slug then suffixes -1 through -99. Keep actionId, also the stable Project ID. Missing evidence never permits automatic resubmission.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"minLength": 2,
"maxLength": 32
},
"description": {
"type": "string",
"maxLength": 250
}
},
"required": [
"name"
],
"additionalProperties": false
}projects.updateActionConnection permissionRename a Project, change its description, or change its provider preference. Keep actionId and use actions.result instead of repeating an uncertain change.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"const": "details"
},
"projectId": {
"type": "string",
"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)$"
},
"name": {
"type": "string",
"minLength": 2,
"maxLength": 32
},
"description": {
"type": "string",
"maxLength": 250
}
},
"required": [
"mode",
"projectId",
"name"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"const": "preference"
},
"projectId": {
"type": "string",
"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)$"
},
"provider": {
"type": "string",
"enum": [
"default",
"kie"
]
}
},
"required": [
"mode",
"projectId",
"provider"
],
"additionalProperties": false
}
]
}assets.renameActionConnection permissionRename an image or video. Keep actionId and use actions.result instead of repeating an uncertain change.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"assetId": {
"type": "string",
"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)$"
},
"name": {
"type": "string",
"minLength": 2,
"maxLength": 32
}
},
"required": [
"assetId",
"name"
],
"additionalProperties": false
}assets.moveActionConnection permissionAtomically move one or more images or videos to another Project. Keep actionId and use actions.result instead of repeating an uncertain change.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"assetIds": {
"minItems": 1,
"maxItems": 1000,
"type": "array",
"items": {
"type": "string",
"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)$"
}
},
"targetProjectId": {
"type": "string",
"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)$"
}
},
"required": [
"assetIds",
"targetProjectId"
],
"additionalProperties": false
}prompts.readRead onlyList the saved prompts of the Workspace prompt library, for images and videos. It does not hold the prompt that produced a given Asset.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cursor": {
"type": "string"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"kind": {
"type": "string",
"enum": [
"image",
"video",
"all"
]
}
},
"additionalProperties": false
}prompts.writeActionConnection permissionSave a new prompt to the Workspace prompt library, or update a saved one, for images or videos. Keep actionId and use actions.result instead of repeating an uncertain write.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"const": "create"
},
"kind": {
"type": "string",
"enum": [
"image",
"video"
]
},
"values": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"mode",
"kind",
"values"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"const": "update"
},
"kind": {
"type": "string",
"enum": [
"image",
"video"
]
},
"promptId": {
"type": "string",
"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)$"
},
"values": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"mode",
"kind",
"promptId",
"values"
],
"additionalProperties": false
}
]
}references.uploadActionConnection permissionGet an upload link for one local reference file (image, video or audio) when you can run a shell command. Declare its exact mediaKind, mime, size in bytes and lowercase hex SHA-256 (for example from `shasum -a 256`). Then run the returned command within 15 minutes: the link accepts only that exact file, POSTed raw, and answers with source={type:reference-source,id} and url, the public file. Put that source as {kind:stored,source} in images.generate references or a videos.generate attachment. Limits: image jpeg/png/webp up to 2 MB (resize larger photos first), video mp4/quicktime up to 10 MB, audio mpeg/wav up to 5 MB. The same file always gives the same ID. Use the source in a generation within 24 hours: an unused source is then deleted. If your sandbox blocks the SeamUI host (HTTP 403 host_not_allowed), follow ifHostBlocked instead of retrying. Never paste file bytes or base64 into a tool call.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"mediaKind": {
"type": "string",
"enum": [
"image",
"video",
"audio"
]
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"mime": {
"type": "string",
"minLength": 3,
"maxLength": 100
},
"size": {
"type": "integer",
"minimum": 1,
"maximum": 10485760
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
}
},
"required": [
"mediaKind",
"name",
"mime",
"size",
"sha256"
],
"additionalProperties": false
}references.importActionConnection permissionStore one public https image, video or audio file as a reference, from its URL. A SeamUI media url returned by another tool is reused without copying. Set mediaKind when the server does not send a media Content-Type. Returns source and url. Put source as {kind:stored,source} in images.generate references or a videos.generate attachment. Same limits as references.upload. Use references.upload instead for a local file.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"format": "uri"
},
"mediaKind": {
"type": "string",
"enum": [
"image",
"video",
"audio"
]
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 255
}
},
"required": [
"url"
],
"additionalProperties": false
}images.generateActionConnection permissionMANDATORY: before anything that creates 4 images or videos or more in total (several calls, parallel calls, retries, lists, CSV rows), tell the User the exact count, say it bills their own provider account, and wait for an explicit yes. No yes, no call. Set requestTotal to that total on every call. SeamUI refuses, and starts nothing, without the costConfirmation code its refusal gives. Create images from a prompt, or edit, restyle or make variations of an existing image by passing it as a reference (route uses include image-edit in catalog.models). Image count: by default one call generates imageCount images (1 to 10) from the single prompt in form.prompts. When the catalog.models route lists imagesPerRequestedImage, each requested image returns that many (withReference once a reference image is attached), and all of them are billed: count them in requestTotal. To try several prompts with the same model, settings and references (variations of a prompt, one image each), put up to 10 prompts in form.prompts and set form.onePromptOneImage to true: one image per prompt, imageCount is ignored. Several prompts without onePromptOneImage are refused. Past 500 images per Workspace in one rolling hour, the call is refused, nothing starts, and the refusal explains how to continue: ask the User, then resend with its hourlyLimitConfirmation code. Supply form.provider, form.model and form.prompts; omitted settings use the shown defaults. Stored source IDs are accepted: get one for a local or online file with references.upload or references.import. Keep actionId and read status instead of repeating uncertain work. Each created Asset carries url, its public permanent media URL, to display, download or reuse the file.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"projectId": {
"type": "string",
"minLength": 1,
"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)$"
},
"form": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"default",
"kie"
]
},
"model": {
"type": "string",
"enum": [
"gpt-image-2.5-flare",
"gpt-image-2.5-sunburst",
"gpt-image-2",
"gpt-image-1.5",
"gpt-image-1",
"gpt-image-1-mini",
"gemini-nano-banana-2.1",
"gemini-3.1-flash-image-preview",
"gemini-3-pro-image-preview",
"gemini-2.5-flash-image",
"flux-2-pro",
"flux-2-max",
"flux-3",
"flux-kontext-pro",
"flux-kontext-max",
"grok-imagine-image-quality",
"grok-imagine-image",
"qwen"
]
},
"prompts": {
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 32000
}
},
"onePromptOneImage": {
"default": false,
"type": "boolean"
},
"imageCount": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 10
},
"dimensions": {
"default": "1024x1024",
"type": "string"
},
"background": {
"default": "auto",
"type": "string",
"enum": [
"auto",
"transparent",
"opaque"
]
},
"moderation": {
"default": "auto",
"type": "string",
"enum": [
"auto",
"low"
]
},
"outputFormat": {
"default": "png",
"type": "string",
"enum": [
"png",
"jpeg",
"webp"
]
},
"outputCompression": {
"default": 100,
"type": "integer",
"minimum": 0,
"maximum": 100
},
"quality": {
"default": "auto",
"type": "string",
"enum": [
"auto",
"max",
"xhigh",
"high",
"medium",
"low",
"hd",
"standard"
]
},
"style": {
"default": "vivid",
"type": "string",
"enum": [
"vivid",
"natural"
]
},
"inputFidelity": {
"default": "high",
"type": "string",
"enum": [
"low",
"high"
]
},
"aspectRatio": {
"default": "1:1",
"type": "string",
"enum": [
"auto",
"1:1",
"2:3",
"3:2",
"3:4",
"4:3",
"4:5",
"5:4",
"9:16",
"16:9",
"21:9",
"9:21",
"1:4",
"4:1",
"1:8",
"8:1",
"2:1",
"1:2",
"19.5:9",
"9:19.5",
"20:9",
"9:20",
"5:2"
]
},
"seed": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"safetyTolerance": {
"default": 2,
"type": "integer",
"minimum": 0,
"maximum": 6
},
"enableTranslation": {
"default": true,
"type": "boolean"
},
"promptUpsampling": {
"default": false,
"type": "boolean"
},
"uploadCn": {
"default": false,
"type": "boolean"
},
"nsfwChecker": {
"default": false,
"type": "boolean"
},
"enablePro": {
"default": false,
"type": "boolean"
},
"disablePup": {
"default": false,
"type": "boolean"
},
"thinkingLevel": {
"default": "minimal",
"type": "string"
},
"watermark": {
"default": "",
"type": "string"
},
"resolution": {
"default": "1K",
"type": "string",
"enum": [
"512",
"1K",
"2K",
"4K",
"1k",
"2k"
]
}
},
"required": [
"provider",
"model",
"prompts"
],
"additionalProperties": false
},
"references": {
"maxItems": 64,
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "upload"
},
"mime": {
"type": "string"
},
"size": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sha256": {
"type": "string",
"minLength": 64,
"maxLength": 64,
"pattern": "^[0-9a-f]{64}$"
},
"width": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"height": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"kind",
"mime",
"size",
"sha256",
"width",
"height"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "stored"
},
"source": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"asset",
"reference-source"
]
},
"id": {
"type": "string",
"minLength": 1,
"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)$"
}
},
"required": [
"type",
"id"
],
"additionalProperties": false
}
},
"required": [
"kind",
"source"
],
"additionalProperties": false
}
]
}
},
"mask": {
"anyOf": [
{
"anyOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "upload"
},
"mime": {
"type": "string"
},
"size": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sha256": {
"type": "string",
"minLength": 64,
"maxLength": 64,
"pattern": "^[0-9a-f]{64}$"
},
"width": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"height": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"kind",
"mime",
"size",
"sha256",
"width",
"height"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "stored"
},
"source": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"asset",
"reference-source"
]
},
"id": {
"type": "string",
"minLength": 1,
"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)$"
}
},
"required": [
"type",
"id"
],
"additionalProperties": false
}
},
"required": [
"kind",
"source"
],
"additionalProperties": false
}
]
},
{
"type": "null"
}
]
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{8,128}$"
},
"requestTotal": {
"description": "Required. Total images and videos the User's whole request creates, over every call, retry and parallel call. At 4 or more, ask the User first.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"costConfirmation": {
"description": "Only the code from a cost_confirmation_required refusal, sent after the User said yes.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,512}$"
},
"hourlyLimitConfirmation": {
"description": "Only the code from an hourly_image_limit refusal, sent after the User said yes.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,512}$"
}
},
"required": [
"projectId",
"form",
"references",
"mask",
"idempotencyKey",
"requestTotal"
],
"additionalProperties": false
}videos.generateActionConnection permissionMANDATORY: before anything that creates 4 images or videos or more in total (several calls, parallel calls, retries, lists, CSV rows), tell the User the exact count, say it bills their own provider account, and wait for an explicit yes. No yes, no call. Set requestTotal to that total on every call. SeamUI refuses, and starts nothing, without the costConfirmation code its refusal gives. Each call creates 1 video: clips, shots of one merged video and model edits all count. Create a video from text, animate an image (image to video), go from a first to a last frame, or restyle a video with a model: pick the route in catalog.models by its uses. Ordered stored source IDs are accepted: get one for a local or online file with references.upload or references.import. Segments of one composed video are ordinary sequential calls. Keep actionId and read actions.result instead of resending uncertain work. Each created Asset carries url, its public permanent media URL, to display, download or reuse the file.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"projectId": {
"type": "string",
"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)$"
},
"input": {
"type": "object",
"properties": {
"model": {
"type": "string"
},
"provider": {
"type": "string",
"enum": [
"default",
"kie"
]
},
"prompt": {
"type": "string",
"maxLength": 64000
},
"filledSlotKeys": {
"maxItems": 32,
"type": "array",
"items": {
"type": "string"
}
},
"settings": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"required": [
"model",
"provider",
"prompt",
"filledSlotKeys",
"settings"
],
"additionalProperties": false
},
"attachments": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"minItems": 1,
"maxItems": 64,
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "stored"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"source": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"asset",
"reference-source"
]
},
"id": {
"type": "string",
"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)$"
}
},
"required": [
"type",
"id"
],
"additionalProperties": false
}
},
"required": [
"kind",
"name",
"source"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"const": "upload"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"mime": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"size": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"durationSeconds": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "null"
}
]
},
"width": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"height": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"kind",
"name",
"mime",
"size",
"sha256",
"durationSeconds",
"width",
"height"
],
"additionalProperties": false
}
]
}
}
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{8,128}$"
},
"requestTotal": {
"description": "Required. Total images and videos the User's whole request creates, over every call, retry and parallel call. At 4 or more, ask the User first.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"costConfirmation": {
"description": "Only the code from a cost_confirmation_required refusal, sent after the User said yes.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,512}$"
}
},
"required": [
"projectId",
"input",
"attachments",
"idempotencyKey",
"requestTotal"
],
"additionalProperties": false
}images.transformActionConnection permissionMANDATORY: before anything that creates 4 images or videos or more in total (several calls, parallel calls, retries, lists, CSV rows), tell the User the exact count, say it bills their own provider account, and wait for an explicit yes. No yes, no call. Set requestTotal to that total on every call. SeamUI refuses, and starts nothing, without the costConfirmation code its refusal gives. Each call creates 1 image. Remove the background or cut out a subject (remove_background), change the background color (update_background), or resize an image to new dimensions (resize). Upscaling, crop and deletion are not supported. The source version and exact settings remain sealed in an idempotent action. Each output counts toward the hourly image limit of images.generate. The created derivative carries url, its public permanent media URL.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"command": {
"description": "Shared command without clientRequestId: schemaVersion=1, sourceAssetId=UUID, outputPolicy={createDerivative:true,preserveSource:true}, operation. resize: target={width,height,presetId:null|string}, fit=contain, aspectRatio=preserve, crop=false, upscaleSourcePixels=false, resampling=high_quality, padding={color:#RRGGBB}, output={formatPolicy:preserve_source_when_supported_else_png}. remove_background: utilitySelection={mode:auto}|{mode:explicit,utilityId}, dimensions={policy:preserve_source_exactly}, output={format:png}, acknowledgedContourRisk:boolean. update_background: background={kind:custom_solid,color:#RRGGBB} or shared preset, intermediateAssetPolicy=temporary_not_visible, output={formatPolicy:preserve_source_when_supported_else_png}, transparencyPolicy=skip_removal and acknowledgedContourRisk=false, or remove_if_needed with segmentationUtilitySelection and acknowledgedContourRisk. Unknown fields are refused.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{8,128}$"
},
"requestTotal": {
"description": "Required. Total images and videos the User's whole request creates, over every call, retry and parallel call. At 4 or more, ask the User first.",
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"costConfirmation": {
"description": "Only the code from a cost_confirmation_required refusal, sent after the User said yes.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,512}$"
},
"hourlyLimitConfirmation": {
"description": "Only the code from an hourly_image_limit refusal, sent after the User said yes.",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,512}$"
}
},
"required": [
"command",
"idempotencyKey",
"requestTotal"
],
"additionalProperties": false
}videos.editActionConnection permissionMerge, combine, join or stitch 2 to 8 videos end to end in the given order (op merge), or trim, cut or shorten one video (op trim). No provider call and no generation cost. Keep actionId and read actions.result; never automatically resend uncertain work.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "trim"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{8,128}$"
},
"assetId": {
"type": "string",
"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)$"
},
"startSec": {
"type": "number",
"minimum": 0
},
"endSec": {
"type": "number",
"exclusiveMinimum": 0
},
"audio": {
"type": "boolean"
},
"name": {
"type": "string",
"maxLength": 120
}
},
"required": [
"op",
"idempotencyKey",
"assetId",
"startSec",
"endSec",
"audio"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"type": "string",
"const": "merge"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{8,128}$"
},
"assetIds": {
"minItems": 2,
"maxItems": 8,
"type": "array",
"items": {
"type": "string",
"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)$"
}
},
"audio": {
"type": "boolean"
},
"name": {
"type": "string",
"maxLength": 120
}
},
"required": [
"op",
"idempotencyKey",
"assetIds",
"audio"
],
"additionalProperties": false
}
]
}videos.extract-frameActionConnection permissionSave the first or last frame of a video as an image Asset: a still, a thumbnail, or the start image of the next shot. Keep actionId for actions.result; never automatically resend uncertain work.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"assetId": {
"type": "string",
"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)$"
},
"position": {
"type": "string",
"enum": [
"first",
"last"
]
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{8,128}$"
}
},
"required": [
"assetId",
"position",
"idempotencyKey"
],
"additionalProperties": false
}assets.statusRead onlyRead bounded durable Asset status, safe failures, reported/calculated/unknown costs and, once created, the public media url. Follow the returned polling guidance (2 seconds minimum, backoff to 30 seconds, stop at terminal or unverified state). Never resubmit missing work. This read never dispatches or polls a provider.
Input schema and limits
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"assetIds": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"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)$"
}
},
"preparedIntent": {
"type": "string",
"minLength": 1,
"maxLength": 1400000
}
},
"additionalProperties": false
}Planned
These capabilities are not available to connected agents.
assets.source.resolveResolve a reusable source Asset and its generation lineage by stable ID.
Unavailable by design
These operations are deliberately excluded from SeamUI MCP.
batches.prepareExcludedValidate a CSV batch and register its rows with the Worker.
batches.progressExcludedBatch progress, safe row errors and terminal batch status.
batches.dispatch-queueExcludedDashboard queue that dispatches registered batch rows through server-owned claims.
images.cropUnavailableCrop is not an existing transformation: the resize command fixes crop to false.
projects.deleteExcludedDelete a Project, including an empty one.
assets.deleteExcludedSoft-delete one or many Assets, including failed-card dismissal and batch discard.
prompts.deleteExcludedDelete an image or video prompt entry.
maintenance.content-cleanupExcludedScheduled cleanup of old deleted, failed and reference media. Cron only, never a user capability.
exclusion.provider-keysExcludedRead, add, replace or delete provider key values.
exclusion.membersExcludedMember management and role changes.
exclusion.workspace-lifecycleExcludedWorkspace creation, naming and switching. Listing the account's Workspaces is the read-only account.workspaces.list.
exclusion.billingExcludedBilling, checkout, plan redemption and billing data.
exclusion.mcp-connection-controlExcludedSeamUI-only OAuth consent, Workspace binding, cancellation and Connection revocation. The setup tool only links to the authenticated page.
exclusion.accountExcludedGlobal account, profile and onboarding operations.
exclusion.inspirationsExcludedInspiration browsing, suggestions and community submissions.
exclusion.issue-reportingExcludedIssue reporting and contact forms.
exclusion.adminExcludedSuper-admin operations.
exclusion.public-free-toolsExcludedPublic SEO free tools and lead capture; a separate product, not a BYOK Workspace capability.
exclusion.agent-workflowExcludedMission or agent workflow persistence; SeamUI schedules no workflow.
Confirmation and safe recovery
Every action uses the revocable permission accepted when the Workspace is selected. No action asks for another SeamUI confirmation; your assistant app decides which tool calls it asks you to approve.
Agents must check status after an uncertain response and must never automatically resubmit potentially accepted work.
MCP release 3.0.0+mcp.2026-10-05.1. The application version is read automatically from package.json.