create_moment
ChatGPTCreate a moment (clip) from [start, end] second-pairs of an ingested video. Saves the moment and starts clip preprocessing (downscale + speaker detection) in the background. Pick segments from the transcript / video-corpus timestamps, listed in ascending start-time order (the order they appear in the transcript); out-of-order pairs are sorted before the moment is saved. kind is one of content, hook_montage, ad, sponsor_read. file_id is only needed when the project has multiple files. Set is_sizzle_reel to true when the moment is a sizzle reel — a promo cut stitched from several non-contiguous highlights — rather than one continuous clip. platform is the intended destination: tiktok, youtube, instagram, linkedin or general (omit if unknown). Both are recorded on the moment's metadata and do not change kind. Speaker detection uses the recording's stored transcript, including when utterances is omitted. The legacy argument is accepted but ignored; it cannot override the recording's text, speaker IDs, or timestamps. Returns JSON with moment.id, preprocessing.workflow_id and editor_url. When preprocessing.status is "processing", poll get_workflow_status(preprocessing.workflow_id) until completed (typically a few minutes), then share editor_url with the user. A "skipped" status (see preprocessing.reason) means preprocessing could not run and there is nothing to poll; the moment still exists.
create_playbook
ChatGPTCreate a new playbook from a natural-language description. Generates label, ranking, and hook rubrics via LLM based on your description, then saves the playbook as version 1 (auto-approved). base_format_type must be one of: default, podcast, talk. Returns the full playbook including generated rubrics.
get_capabilities
ChatGPTExplain what Montage can do with recordings, including beyond clips. Use when a user asks what Montage can do or needs help choosing a use case. Returns examples, supporting tools and where results appear. Written synthesis is performed by the connected assistant; this tool does not read recordings, generate content or report account readiness.
get_moments
ChatGPTGet moments for a project or file. At least one of project_id or file_id is required. Optionally filter by kind: content, hook_montage, ad, sponsor_read. Results are ordered by start time then creation time. Paginate with limit and cursor (pass the returned next_cursor as cursor). Moments with a downscaled clip include a presigned video_url, rendered as a playable gallery via the linked ui:// resource.
get_playbook
ChatGPTGet the current approved playbook by name. Returns the playbook's rubrics (label, ranking, hook) and metadata. Raises an error if the playbook is not found or does not belong to the user.
get_project
ChatGPTGet details for a single project by its ID. Returns the project's details if it exists and belongs to the authenticated user. Raises an error if the project is not found or does not belong to the user.
get_transcript
ChatGPTGet transcript segments for a project. Pass file_id or the exact file_name to select a specific file's transcription when the project has more than one file. Pass provider to select a specific transcription provider ('assemblyai' or 'deepgram'); defaults to assemblyai with automatic fallback to deepgram. Use timestamp_format='hh:mm:ss:ms' for human-readable timestamps instead of raw seconds. Paginate with limit and cursor (pass the returned next_cursor as cursor in the next call).
get_upload_capacity
ChatGPTRead this account's shared simultaneous-upload capacity. Returns plan, limit (Free 1 / Starter 2 / Pro 5), active, available, checked_at and next_action. This is an advisory snapshot, not a reservation or permission to transfer a source. Capacity currently counts admission-ledger work; legacy uploads are not yet integrated. Unavailable subscription/database/worker state returns dependency_unavailable without a fabricated count. No source transfer, processing job or quota reservation is created.
get_upload_status
ChatGPTGet the progress of an upload_video pipeline. Returns JSON with status (running/completed/failed/...) plus, while running, current_step (creating_records/validating_url/downloading/ validating_video/analyzing/finalizing), project_id/file_id once created, and per-stage child_workflow_status. When completed, includes the final result; on failure, an error. A current durable job_result is authoritative across transport states. Legacy/null results omit it; unavailable workers/database return dependency_unavailable, never a historical result. Transport success and quota flags retain their meaning.
get_video_analysis
ChatGPTGet the vision-model video analysis for a project or file. Produced by the video-understanding pass of upload_video. Each result carries the model used, latency_seconds, finish_reason, the detected category_name, max_people_count, and the full analysis JSON — scene breakdown with timings and descriptions, clip candidates with hook/payoff reasoning, and reframe instructions. Read this alongside the transcript when choosing moment boundaries: the transcript gives the words, the analysis gives the visual story. At least one of project_id or file_id is required. Paginate with limit and cursor (pass the returned next_cursor as cursor).
get_video_corpus
ChatGPTGet the long-footage video corpus index for a project or file. At least one of project_id or file_id is required. view="rollup" (recommended first read) returns each result's bounded rollup summary — coverage fraction, subject roster with speaking/tracked seconds, hard-veto ranges, alignment-state totals, screen-text inventory — small enough to reason over many videos at once. view="full" (default) additionally returns the complete corpus index JSON (audio/video timelines, canonical subjects, constraints, speech attribution, visual salience, alignment timeline) and the global_pass — large; avoid when the rollup suffices. Paginate with limit and cursor (pass the returned next_cursor as cursor).
get_video_validation
ChatGPTGet the source-video validation and technical metadata for a project or file. Written by the validation stage of upload_video. Each result carries is_valid, the check tallies (checks_passed/failed/warning/ skipped) with failed_checks and error_summary, the container facts (width, height, fps, duration_seconds, video_codec, audio_codec, raw ffprobe metadata), and the probe rollups audio_info, speech_detection_info, audio_quality_info, person_detection_info, downscaling_info. Use it to keep moment boundaries inside duration_seconds and to know upfront whether the footage has usable speech, audio quality and on-camera people. At least one of project_id or file_id is required. Paginate with limit and cursor (pass the returned next_cursor as cursor).
get_workflow_status
ChatGPTGet the status of a workflow by its workflow ID. Returns JSON with workflow_id, status (running/completed/failed/ canceled/terminated/timed_out/unknown), result (when completed) and error (on failure). Raises an error if the workflow is not found.
list_playbooks
ChatGPTList playbooks owned by the authenticated user. Returns up to limit approved playbooks. Pass name to filter by name (case-insensitive substring match). Paginate with cursor (pass the returned next_cursor as cursor in the next call).
list_projects
ChatGPTList projects owned by the authenticated user. Returns up to limit projects. If has_more is true in the response, pass the returned next_cursor as cursor in the next call to page forward. Pass name to search by project name. Exact name is not required: matching is a case-insensitive substring first, and when that finds nothing it falls back to fuzzy matching that tolerates typos and reordered words, best match first.
report_moment_interaction
ChatGPTRecord a verified, content-free interaction with an MCP gallery moment.
report_task_intent
ChatGPTReport the requested outcome to Montage product analytics (optional). Use a generic label, including new use cases beyond clips. This is the assistant's interpretation, not the user's exact query. Never send chat excerpts, recording contents, names, or confidential details. Reuse the returned task_id on subsequent tools; skip reporting if the user declines. A report does not claim that a deliverable was created or saved in Studio.
report_task_outcome
ChatGPTOptionally report the final outcome of a writing task done in chat. Reuse report_task_intent's task_id. Report only after delivering the collateral or establishing the task is blocked/abandoned. Count outputs delivered in this task, not revisions. Use feedback only if the user explicitly provided it; silence is unknown, not acceptance. This reports the assistant's account, not verified publication, reach or user success. Never include output text, titles, links or chat excerpts. Skip if the user declines analytics. Report once per task/artifact type; reporting again is another receipt, not another independently verified artifact.
update_playbook
ChatGPTUpdate an existing playbook via a natural-language change description. Finds the current approved version of the playbook, updates its rubrics via LLM based on your change description, and activates the result as a new version. Returns the new active version with updated rubrics.
upload_video
ChatGPTImport a video from a Google Drive URL into a new project. Only Google Drive links are supported. YouTube, Dropbox and other URLs are rejected — tell the user to share the video from Google Drive instead of retrying. Creates a project and file record, downloads the video to storage, then validates, analyzes, indexes and transcribes it. Google Drive links must be shared as "Anyone with the link". This is long-running (minutes to hours depending on video size). Returns immediately with a workflow_id — poll get_upload_status(workflow_id) for progress. project_name and file_name are optional and auto-generated when omitted. Background noise removal runs automatically on paid plans — the audio is cleaned before transcription and the project's video is repointed at the cleaned copy, so create_moment cuts from it with no extra argument. Do not ask the user whether their video has noise: faint noise is inaudible to them too, and the server decides. Only pass remove_background_noise=false when the user says the audio must be left alone (music beds, ASMR). Free plans never get it, whatever is passed. Uploads count against the user's plan (video length quota). If the video exceeds the per-upload cap or the remaining quota, the pipeline stops after validation with limit_reached: true and a limit_reason (per_video_cap_exceeded or cumulative_quota_exceeded) — visible via get_upload_status. On success, the video's duration is recorded against the user's usage.
create_moment
Claudecreate_playbook
Claudeget_binary_labels
Claudeget_chapters
Claudeget_moments
Claudeget_playbook
Claudeget_project
Claudeget_transcript
Claudeget_upload_status
Claudeget_video_corpus
Claudeget_workflow_status
Claudelist_playbooks
Claudelist_projects
Claudeping
Claudequery_video_corpus_range
Claudeupdate_playbook
Claudeupload_video
Claude