open_recording
Open a recording for editing
Use this when the user wants to open, edit, trim, or pick a clip from a specific recording. Opens the recording as an episode (a composition-of-one) in the composite TRANSCRIPT editor — the full transcript (speaker lanes + waveform), where the user selects/trims a range and renders. Recommended selections are candidates from episode_read whose boundaries episode_zoom has checked. start_line/end_line or start_word_id/end_word_id with transcript_fingerprint identify the semantic moment; explicit start_seconds/end_seconds set the actual media boundaries where audio valleys, silence, visual resting points, scene changes, visible payoff, or trailing breath make a better cut than the exact word edge. The server creates suggested Moments shown on the transcript for review, trimming, save/dismiss, and export.
Surface: App-only
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.
App descriptor
{
"name": "open_recording",
"title": "Open a recording for editing",
"description": "Use this when the user wants to open, edit, trim, or pick a clip from a specific recording. Opens the recording as an episode (a composition-of-one) in the composite TRANSCRIPT editor — the full transcript (speaker lanes + waveform), where the user selects/trims a range and renders. Recommended selections are candidates from episode_read whose boundaries episode_zoom has checked. start_line/end_line or start_word_id/end_word_id with transcript_fingerprint identify the semantic moment; explicit start_seconds/end_seconds set the actual media boundaries where audio valleys, silence, visual resting points, scene changes, visible payoff, or trailing breath make a better cut than the exact word edge. The server creates suggested Moments shown on the transcript for review, trimming, save/dismiss, and export.",
"inputSchema": {
"type": "object",
"properties": {
"recording_id": {
"type": "string",
"description": "The recording public ID to open."
},
"project_id": {
"type": "string",
"description": "Optional parent project public ID for context."
},
"selections": {
"type": "array",
"description": "Optional candidate moments to pre-resolve for triage. Transcript lines or word IDs are the semantic anchors; explicit start_seconds/end_seconds set the review range where pre-roll, trailing breath, visible payoff/resolution, silence, scene timing, or nearby marker evidence makes a better boundary than the exact word edge. The server creates a `suggested` Moment; unresolved selectors come back in selection_results.",
"items": {
"type": "object",
"properties": {
"start_line": {
"type": "integer",
"description": "First numbered transcript line (a line handle from episode_read)."
},
"end_line": {
"type": "integer",
"description": "Last numbered transcript line (a line handle from episode_read)."
},
"start_seconds": {
"type": "number",
"description": "Explicit review-range start in source seconds. When provided with end_seconds, seconds define the actual moment boundary and may intentionally differ from line/word anchors."
},
"end_seconds": {
"type": "number",
"description": "Explicit review-range end in source seconds. It can include trailing breath, silence, visual payoff, or a marker-backed quiet cut after the last word."
},
"transcript_fingerprint": {
"type": "string",
"description": "Required when selecting by line or word ID; the recording's current line-segmentation fingerprint (from episode_read)."
},
"segmentation_version": {
"type": "string",
"description": "Optional segmentation version for the recording's current line segmentation."
},
"start_word_id": {
"type": "string",
"description": "First word_id anchor (a word handle from episode_zoom)."
},
"end_word_id": {
"type": "string",
"description": "Last word_id anchor (a word handle from episode_zoom)."
},
"title": {
"type": "string",
"description": "Punchy title, <= 8 words."
},
"description": {
"type": "string",
"description": "One sentence on why it's worth clipping."
}
}
}
}
},
"required": [
"recording_id"
],
"additionalProperties": false
},
"annotations": {
"title": "Open a recording for editing",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"securitySchemes": [
{
"type": "noauth"
}
],
"_meta": {
"securitySchemes": [
{
"type": "noauth"
}
],
"ui": {
"visibility": [
"app"
]
},
"openai/widgetAccessible": true,
"openai/visibility": "private"
},
"outputSchema": {
"type": "object",
"properties": {
"recording": {
"type": "object"
},
"media": {
"type": "object"
},
"composition": {
"type": "object",
"description": "Seeded composition-of-one (the recording as one segment) the transcript editor opens on."
},
"workspace_navigation": {
"type": "object",
"additionalProperties": false,
"required": [
"schema",
"target",
"route"
],
"properties": {
"schema": {
"type": "string",
"enum": [
"bitterclip.workspace-nav.v1"
]
},
"target": {
"type": "object",
"additionalProperties": false,
"required": [
"kind",
"id"
],
"properties": {
"kind": {
"type": "string",
"enum": [
"episode",
"clip"
]
},
"id": {
"type": "string",
"pattern": "^comp_[A-Za-z0-9_-]{1,120}$"
}
}
},
"route": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"mode"
],
"properties": {
"name": {
"type": "string",
"enum": [
"composition"
]
},
"mode": {
"type": "string",
"enum": [
"review"
]
}
}
}
}
},
"editor_document": {
"type": "object",
"description": "Versioned application document consumed by the shared editor."
},
"speaker_legend": {
"type": "array"
},
"speaker_model_context": {
"type": "object",
"description": "Compact speaker identity context shared with the model while the full speaker evidence stays in result metadata."
},
"moments": {
"type": "array"
},
"selection_results": {
"type": [
"array",
"null"
],
"description": "Per-selection outcome when selections were supplied: ok:true with moment_id, or ok:false with a reason (stale_transcript, transcript_fingerprint_required, line not found, start/end word not found) and recovery is a fresh episode_read.",
"items": {
"type": "object",
"properties": {
"ok": {
"type": "boolean"
},
"moment_id": {
"type": "string"
},
"title": {
"type": "string"
},
"start_seconds": {
"type": "number"
},
"end_seconds": {
"type": "number"
},
"start_line": {
"type": "integer"
},
"end_line": {
"type": "integer"
},
"start_word_id": {
"type": "string"
},
"end_word_id": {
"type": "string"
},
"reason": {
"type": "string"
},
"count": {
"type": "integer"
}
},
"required": [
"ok"
]
}
},
"route": {
"type": "object"
}
},
"required": [],
"additionalProperties": false
}
}Errors
[
"recording_not_found",
"episode_changed_during_read",
"invalid_input"
]Examples
[]