publish_prepare
Prepare a publish package
Creates reviewable publish packages for an episode or clip. This never publishes externally; a fresh server-bound final confirmation is required before any send and is ordinarily surfaced in the first-party workspace. App-only descriptor visibility does not itself restrict authenticated MCP transport or prove human review. Improved YouTube/LinkedIn/X titles, descriptions, and copy belong in the package here (or in publish_update); the saved episode stays unchanged.
Surface: Default model and app
Product release eb8538f4a297f331d0399351c1e175bffcd212d2
Public contract commit 20688e11af473a363145ed880d5019c90a7ec1e2
Public contract SHA-256 87a94b85a84dc19245fc03f9b544c70d64bd9f5e08585dcccb38157cace5700d
Captured 2026-10-04T11:55:45.577Z. 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": "publish_prepare",
"title": "Prepare a publish package",
"description": "Creates reviewable publish packages for an episode or clip. This never publishes externally; a fresh server-bound final confirmation is required before any send and is ordinarily surfaced in the first-party workspace. App-only descriptor visibility does not itself restrict authenticated MCP transport or prove human review. Improved YouTube/LinkedIn/X titles, descriptions, and copy belong in the package here (or in publish_update); the saved episode stays unchanged.",
"inputSchema": {
"type": "object",
"properties": {
"target_type": {
"type": "string",
"enum": [
"episode",
"clip"
],
"description": "Object to publish."
},
"target_id": {
"type": "string",
"description": "Rendered episode/clip public ID or ready export public ID."
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"youtube",
"linkedin",
"x"
]
}
},
"title": {
"type": "string",
"description": "Optional publish title."
},
"description": {
"type": "string",
"description": "Optional publish description."
},
"copy": {
"type": [
"object",
"string"
],
"description": "Optional channel copy hints. Object values may be keyed by channel plus default."
},
"idempotency_key": {
"type": "string",
"description": "Caller-stable key for safe retry."
}
},
"required": [
"target_type",
"target_id"
],
"additionalProperties": false
},
"annotations": {
"title": "Prepare a publish package",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"securitySchemes": [
{
"type": "noauth"
}
],
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
}
}App descriptor
{
"name": "publish_prepare",
"title": "Prepare a publish package",
"description": "Creates reviewable publish packages for an episode or clip. This never publishes externally; a fresh server-bound final confirmation is required before any send and is ordinarily surfaced in the first-party workspace. App-only descriptor visibility does not itself restrict authenticated MCP transport or prove human review. Improved YouTube/LinkedIn/X titles, descriptions, and copy belong in the package here (or in publish_update); the saved episode stays unchanged.",
"inputSchema": {
"type": "object",
"properties": {
"target_type": {
"type": "string",
"enum": [
"episode",
"clip"
],
"description": "Object to publish."
},
"target_id": {
"type": "string",
"description": "Rendered episode/clip public ID or ready export public ID."
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"youtube",
"linkedin",
"x"
]
}
},
"title": {
"type": "string",
"description": "Optional publish title."
},
"description": {
"type": "string",
"description": "Optional publish description."
},
"copy": {
"type": [
"object",
"string"
],
"description": "Optional channel copy hints. Object values may be keyed by channel plus default."
},
"idempotency_key": {
"type": "string",
"description": "Caller-stable key for safe retry."
}
},
"required": [
"target_type",
"target_id"
],
"additionalProperties": false
},
"annotations": {
"title": "Prepare a publish package",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"securitySchemes": [
{
"type": "noauth"
}
],
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"outputSchema": {
"type": "object",
"properties": {
"publish_package_id": {
"type": [
"string",
"null"
]
},
"target_type": {
"type": "string"
},
"target_id": {
"type": "string"
},
"status": {
"type": "string"
},
"publish_mode": {
"type": "string",
"enum": [
"approval"
]
},
"channels": {
"type": "array"
},
"approvals": {
"type": "array"
},
"approval_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"next_action": {
"type": [
"object",
"null"
]
},
"blockers": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [],
"additionalProperties": false
}
}Live Workspace descriptor
{
"name": "publish_prepare",
"title": "Prepare a publish package",
"description": "Creates reviewable publish packages for an episode or clip. This never publishes externally; a fresh server-bound final confirmation is required before any send and is ordinarily surfaced in the first-party workspace. App-only descriptor visibility does not itself restrict authenticated MCP transport or prove human review. Improved YouTube/LinkedIn/X titles, descriptions, and copy belong in the package here (or in publish_update); the saved episode stays unchanged.",
"inputSchema": {
"type": "object",
"properties": {
"target_type": {
"type": "string",
"enum": [
"episode",
"clip"
],
"description": "Object to publish."
},
"target_id": {
"type": "string",
"description": "Rendered episode/clip public ID or ready export public ID."
},
"channels": {
"type": "array",
"items": {
"type": "string",
"enum": [
"youtube",
"linkedin",
"x"
]
}
},
"title": {
"type": "string",
"description": "Optional publish title."
},
"description": {
"type": "string",
"description": "Optional publish description."
},
"copy": {
"type": [
"object",
"string"
],
"description": "Optional channel copy hints. Object values may be keyed by channel plus default."
},
"idempotency_key": {
"type": "string",
"description": "Caller-stable key for safe retry."
}
},
"required": [
"target_type",
"target_id"
],
"additionalProperties": false
},
"annotations": {
"title": "Prepare a publish package",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"securitySchemes": [
{
"type": "noauth"
}
],
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
]
},
"outputSchema": {
"type": "object",
"properties": {
"publish_package_id": {
"type": [
"string",
"null"
]
},
"target_type": {
"type": "string"
},
"target_id": {
"type": "string"
},
"status": {
"type": "string"
},
"publish_mode": {
"type": "string",
"enum": [
"approval"
]
},
"channels": {
"type": "array"
},
"approvals": {
"type": "array"
},
"approval_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"next_action": {
"type": [
"object",
"null"
]
},
"blockers": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [],
"additionalProperties": false
}
}Errors
[
"export_not_found",
"composition_not_ready",
"composition_has_no_source",
"publish_not_ready",
"invalid_platforms",
"idempotency_conflict",
"invalid_input"
]Examples
[]