identity_asset_ingest
Add an image or texture to FX Studio
Ingests an image/logo/texture from HTTPS or base64 into the account's asset library. Without project_id it serves account authoring; an accessible Project selects its account. Returned asset IDs listed in a scene's settings.asset_ids admit those exact bytes to the isolated scene runtime. A scene has no ambient network or account credentials.
Surface: Default model and app
Product release 185ad8f4adfa21ae055b5bd6f97968d9044480d1
Public contract commit d2ab41fab4088c07c0f6b924fa4f3c63481b936a
Public contract SHA-256 2365c73c2aef7b9f85e8434d8e29ea29f40824bc3a46a72a356155ea328757fc
Captured 2026-10-29T03:35:56.855Z. Review or improve this contract on GitHub.
These blocks show the complete MCP descriptors captured from serving Rails. Security schemes and resource URIs can differ by connected host.
Default model descriptor
{
"name": "identity_asset_ingest",
"title": "Add an image or texture to FX Studio",
"description": "Ingests an image/logo/texture from HTTPS or base64 into the account's asset library. Without project_id it serves account authoring; an accessible Project selects its account. Returned asset IDs listed in a scene's settings.asset_ids admit those exact bytes to the isolated scene runtime. A scene has no ambient network or account credentials.",
"inputSchema": {
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "Project public ID; this is the account boundary for the uploaded asset."
},
"url": {
"type": "string",
"description": "HTTPS image URL to fetch; exactly one of url or data_base64."
},
"data_base64": {
"type": "string",
"description": "Base64 image bytes, optionally as a data:image/...;base64 URL; exactly one of data_base64 or url."
},
"kind": {
"type": "string",
"enum": [
"logo",
"image"
],
"description": "logo for a brand mark/wordmark asset; image for supporting imagery."
},
"name": {
"type": "string",
"description": "Human name for the asset."
}
},
"required": [
"kind",
"name"
],
"additionalProperties": false
},
"annotations": {
"title": "Add an image or texture to FX Studio",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"securitySchemes": [
{
"type": "noauth"
}
],
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
],
"ui": {
"visibility": [
"model",
"app"
]
},
"openai/widgetAccessible": true
}
}App descriptor
{
"name": "identity_asset_ingest",
"title": "Add an image or texture to FX Studio",
"description": "Ingests an image/logo/texture from HTTPS or base64 into the account's asset library. Without project_id it serves account authoring; an accessible Project selects its account. Returned asset IDs listed in a scene's settings.asset_ids admit those exact bytes to the isolated scene runtime. A scene has no ambient network or account credentials.",
"inputSchema": {
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "Project public ID; this is the account boundary for the uploaded asset."
},
"url": {
"type": "string",
"description": "HTTPS image URL to fetch; exactly one of url or data_base64."
},
"data_base64": {
"type": "string",
"description": "Base64 image bytes, optionally as a data:image/...;base64 URL; exactly one of data_base64 or url."
},
"kind": {
"type": "string",
"enum": [
"logo",
"image"
],
"description": "logo for a brand mark/wordmark asset; image for supporting imagery."
},
"name": {
"type": "string",
"description": "Human name for the asset."
}
},
"required": [
"kind",
"name"
],
"additionalProperties": false
},
"annotations": {
"title": "Add an image or texture to FX Studio",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"securitySchemes": [
{
"type": "noauth"
}
],
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
],
"ui": {
"visibility": [
"model",
"app"
]
},
"openai/widgetAccessible": true
},
"outputSchema": {
"type": "object",
"properties": {
"asset": {
"type": "object",
"description": "Account-scoped asset ref with asset_id, kind, content_type, sha256, and authenticated url."
},
"warnings": {
"type": "array",
"items": {
"type": "object"
}
},
"schema": {
"type": "string",
"description": "Receipt schema identifier, bitterclip.identity_asset_ingest_receipt.v0."
},
"account_id": {
"type": "string",
"description": "Account public ID that owns the asset."
},
"project_id": {
"type": "string",
"description": "Project public ID the asset was ingested through; absent for an account-level ingest."
},
"blockers": {
"type": "array",
"items": {
"type": "object"
},
"description": "Typed blockers; empty when the call succeeded."
}
},
"required": [],
"additionalProperties": false
}
}Live Workspace descriptor
{
"name": "identity_asset_ingest",
"title": "Add an image or texture to FX Studio",
"description": "Ingests an image/logo/texture from HTTPS or base64 into the account's asset library. Without project_id it serves account authoring; an accessible Project selects its account. Returned asset IDs listed in a scene's settings.asset_ids admit those exact bytes to the isolated scene runtime. A scene has no ambient network or account credentials.",
"inputSchema": {
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "Project public ID; this is the account boundary for the uploaded asset."
},
"url": {
"type": "string",
"description": "HTTPS image URL to fetch; exactly one of url or data_base64."
},
"data_base64": {
"type": "string",
"description": "Base64 image bytes, optionally as a data:image/...;base64 URL; exactly one of data_base64 or url."
},
"kind": {
"type": "string",
"enum": [
"logo",
"image"
],
"description": "logo for a brand mark/wordmark asset; image for supporting imagery."
},
"name": {
"type": "string",
"description": "Human name for the asset."
}
},
"required": [
"kind",
"name"
],
"additionalProperties": false
},
"annotations": {
"title": "Add an image or texture to FX Studio",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": true
},
"securitySchemes": [
{
"type": "noauth"
}
],
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
],
"ui": {
"visibility": [
"model",
"app"
]
},
"openai/widgetAccessible": true
},
"outputSchema": {
"type": "object",
"properties": {
"asset": {
"type": "object",
"description": "Account-scoped asset ref with asset_id, kind, content_type, sha256, and authenticated url."
},
"warnings": {
"type": "array",
"items": {
"type": "object"
}
},
"schema": {
"type": "string",
"description": "Receipt schema identifier, bitterclip.identity_asset_ingest_receipt.v0."
},
"account_id": {
"type": "string",
"description": "Account public ID that owns the asset."
},
"project_id": {
"type": "string",
"description": "Project public ID the asset was ingested through; absent for an account-level ingest."
},
"blockers": {
"type": "array",
"items": {
"type": "object"
},
"description": "Typed blockers; empty when the call succeeded."
}
},
"required": [],
"additionalProperties": false
}
}Errors
[
"project_not_found",
"invalid_input"
]Examples
[
{
"label": "Upload a logo for a new brand",
"input": {
"project_id": "show_...",
"url": "https://example.com/logo.png",
"kind": "logo",
"name": "Acme mark"
}
}
]