{"ok":true,"site":{"host":"wavecraft-webmcp.vercel.app","url":"https://wavecraft-webmcp.vercel.app/","type":"live","desc":"Wavecraft — the multitrack audio editor built for you and your agent.","tools":[{"name":"get_app_capabilities","kind":"answer","impl":"imperative","description":"Call first to learn the real editor features, safety model, supported audio operations, and current WebMCP tool categories. Read-only.","title":"Get Wavecraft capabilities","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inspect_context","kind":"answer","impl":"imperative","description":"Use this before interpreting words like “this”, “here”, “selected”, or “keep my edit”. Returns the exact live human selection, playhead, timeline view, hard constraints, project revision, pending proposals, and manual overrides. Read-only.","title":"Inspect live editing context","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inspect_project","kind":"answer","impl":"imperative","description":"Returns structured project metadata, all track summaries, markers, regions, locks, proposals, and analysis notes without raw audio samples. Read-only.","title":"Inspect project","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inspect_selection","kind":"answer","impl":"imperative","description":"Use whenever the user says “this”, “only this section”, “selected”, or refers to a visual choice. Returns exact timestamps or object IDs plus intersecting clips and locks. Read-only.","title":"Inspect human selection","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_current_constraints","kind":"answer","impl":"imperative","description":"Returns every hard lock and manual override. Agent actions may never silently override these constraints, even in Direct mode. Read-only.","title":"Get human constraints","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_tracks","kind":"answer","impl":"imperative","description":"Lists stable track IDs and mix state. Use IDs from this result in later calls. Read-only.","title":"List tracks","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inspect_track","kind":"answer","impl":"imperative","description":"Returns complete structured state for one track, including stable clip IDs. Read-only.","title":"Inspect track","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID from list_tracks."}},"required":["track_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_clips","kind":"answer","impl":"imperative","description":"Lists all clips, optionally filtered by track_id. Returns exact timeline/source positions. Read-only.","title":"List clips","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Optional stable track ID."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inspect_clip","kind":"answer","impl":"imperative","description":"Returns complete non-destructive edit state and source information for one clip. Read-only.","title":"Inspect clip","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID from list_clips."}},"required":["clip_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_edit_history","kind":"answer","impl":"imperative","description":"Returns current revision, undo/redo availability, and applied agent actions. Read-only.","title":"Get edit history","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_agent_change_history","kind":"answer","impl":"imperative","description":"Returns structured metadata for every applied agent edit, including originating tool, explanation, affected objects, proposal, and reversibility. Read-only.","title":"Get agent changes","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_playback_state","kind":"answer","impl":"imperative","description":"Returns playhead, playback status, loop, and project duration. Read-only.","title":"Get playback state","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_playhead","kind":"act","impl":"imperative","description":"Move the shared human/agent playhead to an exact project time. This does not edit audio.","title":"Set playhead","inputSchema":{"type":"object","properties":{"time":{"type":"number","minimum":0,"description":"Destination in seconds."}},"required":["time"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"play","kind":"act","impl":"imperative","description":"Start real audio playback from the current playhead using the current non-destructive edit state.","title":"Play project","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"pause","kind":"act","impl":"imperative","description":"Pause real audio playback and preserve the current playhead.","title":"Pause project","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"stop","kind":"act","impl":"imperative","description":"Stop real audio playback. The playhead stays at the current position.","title":"Stop project","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_timeline_view","kind":"answer","impl":"imperative","description":"Returns the visible time range and zoom context. Read-only.","title":"Get timeline view","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"zoom_in","kind":"act","impl":"imperative","description":"Zoom the human timeline view in around the current playhead.","title":"Zoom timeline in","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"zoom_out","kind":"act","impl":"imperative","description":"Zoom the human timeline view out around the current playhead.","title":"Zoom timeline out","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fit_project","kind":"act","impl":"imperative","description":"Fit the complete project duration in the visible timeline.","title":"Fit project","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"zoom_to_selection","kind":"act","impl":"imperative","description":"Set the visible timeline to the exact current time-range selection.","title":"Zoom to selection","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"select_time_range","kind":"act","impl":"imperative","description":"Create the same visible time-range selection a human would create by dragging the waveform. Use exact project seconds.","title":"Select time range","inputSchema":{"type":"object","properties":{"start":{"type":"number","minimum":0,"description":"Range start in seconds from the project timeline."},"end":{"type":"number","minimum":0,"description":"Range end in seconds; must be greater than start."},"track_ids":{"type":"array","items":{"type":"string"},"description":"Optional track IDs; omit for all tracks."}},"required":["start","end"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"select_clip","kind":"act","impl":"imperative","description":"Select one clip in the shared UI by stable ID.","title":"Select clip","inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID."}},"required":["clip_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"select_track","kind":"act","impl":"imperative","description":"Select one track in the shared UI by stable ID.","title":"Select track","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."}},"required":["track_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"select_marker","kind":"act","impl":"imperative","description":"Select one marker in the shared UI by stable ID.","title":"Select marker","inputSchema":{"type":"object","properties":{"marker_id":{"type":"string","description":"Stable marker ID."}},"required":["marker_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_selection","kind":"act","impl":"imperative","description":"Clear the shared human/agent selection without changing audio.","title":"Clear selection","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"split_clip","kind":"act","impl":"imperative","description":"Split a clip non-destructively at an exact timeline time. Rejects invalid IDs, boundary times, and human locks. Creates undo history.","title":"Split clip","inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID."},"time":{"type":"number","minimum":0,"description":"Split time in project seconds."}},"required":["clip_id","time"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"trim_clip_start","kind":"act","impl":"imperative","description":"Trim media from the beginning of a clip by setting a later timeline start. Non-destructive source offset is preserved; locks reject changes.","title":"Trim clip start","inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID."},"new_start":{"type":"number","minimum":0,"description":"New timeline start inside the existing clip."}},"required":["clip_id","new_start"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"trim_clip_end","kind":"act","impl":"imperative","description":"Trim media from the end of a clip by setting an earlier timeline end. Non-destructive source data remains available; locks reject changes.","title":"Trim clip end","inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID."},"new_end":{"type":"number","minimum":0,"description":"New timeline end inside the existing clip."}},"required":["clip_id","new_end"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fade_clip_in","kind":"act","impl":"imperative","description":"Set a real linear fade-in duration in seconds. Playback and WAV export both render this envelope.","title":"Set clip fade-in","inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID."},"duration":{"type":"number","minimum":0,"description":"Fade-in duration in seconds."}},"required":["clip_id","duration"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fade_clip_out","kind":"act","impl":"imperative","description":"Set a real linear fade-out duration in seconds. Playback and WAV export both render this envelope.","title":"Set clip fade-out","inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID."},"duration":{"type":"number","minimum":0,"description":"Fade-out duration in seconds."}},"required":["clip_id","duration"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_clip","kind":"act","impl":"imperative","description":"Move a clip non-destructively to an exact timeline start. Rejects locked source/destination ranges. Creates undo history.","title":"Move clip","inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID."},"timeline_start":{"type":"number","minimum":0,"description":"New clip start in project seconds."}},"required":["clip_id","timeline_start"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_clip","kind":"transact","impl":"imperative","description":"Delete one clip. This is destructive and will create a proposal while Propose First mode is active; locks always reject it.","title":"Delete clip","inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID."}},"required":["clip_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_clip_gain","kind":"act","impl":"imperative","description":"Set non-destructive clip gain in dB. Human manual overrides are visible; locks reject changes. Creates undo history.","title":"Set clip gain","inputSchema":{"type":"object","properties":{"clip_id":{"type":"string","description":"Stable clip ID."},"gain_db":{"type":"number","minimum":-60,"maximum":24,"description":"Target clip gain in dB."}},"required":["clip_id","gain_db"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_track_gain","kind":"act","impl":"imperative","description":"Set non-destructive track gain in dB. Check manual overrides and locks first. Creates undo history.","title":"Set track gain","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."},"gain_db":{"type":"number","minimum":-60,"maximum":24,"description":"Target track gain in dB."}},"required":["track_id","gain_db"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_track_pan","kind":"act","impl":"imperative","description":"Set track pan from -1.0 full left to +1.0 full right.","title":"Set track pan","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."},"pan":{"type":"number","minimum":-1,"maximum":1,"description":"Pan position."}},"required":["track_id","pan"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"mute_track","kind":"act","impl":"imperative","description":"Mute a track if it is not already muted.","title":"Mute track","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."}},"required":["track_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"unmute_track","kind":"act","impl":"imperative","description":"Unmute a track if it is muted.","title":"Unmute track","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."}},"required":["track_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"solo_track","kind":"act","impl":"imperative","description":"Solo a track if it is not already soloed.","title":"Solo track","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."}},"required":["track_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"unsolo_track","kind":"act","impl":"imperative","description":"Remove solo from a track if active.","title":"Unsolo track","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."}},"required":["track_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rename_track","kind":"act","impl":"imperative","description":"Rename a track in the shared project.","title":"Rename track","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."},"name":{"type":"string","description":"New human-readable track name."}},"required":["track_id","name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"lock_track","kind":"act","impl":"imperative","description":"Create a hard human-visible track lock. Agents cannot override it. This tool only locks; it never unlocks.","title":"Lock track","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."}},"required":["track_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"unlock_track","kind":"act","impl":"imperative","description":"Remove a track lock only when the user explicitly asked for that unlock.","title":"Unlock track","inputSchema":{"type":"object","properties":{"track_id":{"type":"string","description":"Stable track ID."}},"required":["track_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"lock_time_range","kind":"act","impl":"imperative","description":"Create a hard, human-visible timeline constraint. All future agent edits must re-plan around it.","title":"Lock time range","inputSchema":{"type":"object","properties":{"start":{"type":"number","minimum":0,"description":"Range start in seconds from the project timeline."},"end":{"type":"number","minimum":0,"description":"Range end in seconds; must be greater than start."},"label":{"type":"string","description":"Human-readable reason for the lock."}},"required":["start","end","label"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"unlock_time_range","kind":"act","impl":"imperative","description":"Remove a specific hard range lock only after explicit human instruction. Requires a stable lock_id from get_current_constraints.","title":"Unlock time range","inputSchema":{"type":"object","properties":{"lock_id":{"type":"string","description":"Stable range lock ID."}},"required":["lock_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_marker","kind":"act","impl":"imperative","description":"Add a low-risk visible timeline marker.","title":"Add marker","inputSchema":{"type":"object","properties":{"time":{"type":"number","minimum":0,"description":"Marker time in project seconds."},"label":{"type":"string","description":"Marker label."}},"required":["time","label"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"ripple_delete_time_range","kind":"transact","impl":"imperative","description":"Delete a range across all tracks and close the gap. This is destructive: in Propose First mode it creates a visual proposal instead of applying. Locks always reject it.","title":"Ripple delete time range","inputSchema":{"type":"object","properties":{"start":{"type":"number","minimum":0,"description":"Range start in seconds from the project timeline."},"end":{"type":"number","minimum":0,"description":"Range end in seconds; must be greater than start."}},"required":["start","end"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"analyze_project","kind":"act","impl":"imperative","description":"Computes structured peak, RMS, dynamic range, clipping, silence, speaker-level, and issue evidence from the current local audio graph. Read-only.","title":"Analyze project","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"analyze_selection","kind":"answer","impl":"imperative","description":"Analyze the exact current time-range selection and return only evidence inside it. Read-only.","title":"Analyze selection","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"detect_long_pauses","kind":"answer","impl":"imperative","description":"Find pauses at or above a duration threshold, optionally limited to the current range selection. Returns structured evidence and distinguishes dramatic pauses. Read-only.","title":"Detect long pauses","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"minimum_duration":{"type":"number","minimum":0.25,"maximum":10,"description":"Minimum pause duration in seconds. Default 1.5."},"selection_only":{"type":"boolean","description":"If true, require and limit results to current time selection."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"detect_clipping","kind":"answer","impl":"imperative","description":"Returns structured clipped-peak evidence computed from the current local audio graph. Read-only.","title":"Detect clipping","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"compare_track_levels","kind":"answer","impl":"imperative","description":"Compare dialogue track loudness computed from the current local audio graph. Read-only.","title":"Compare track levels","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_tighten_proposal","kind":"act","impl":"imperative","description":"Analyze the exact current time selection, remove only long pauses outside hard locks, preserve short dramatic pauses, and create a visual diff. Does not mutate audio.","title":"Propose tighter selection","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_balance_proposal","kind":"act","impl":"imperative","description":"Compare host/guest levels and create non-destructive gain changes. Preserves any human manual gain override. Does not mutate audio.","title":"Propose speaker balance","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_proposals","kind":"answer","impl":"imperative","description":"Lists every proposal with status, duration delta, and action counts. Read-only.","title":"List proposals","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inspect_proposal","kind":"answer","impl":"imperative","description":"Returns the full structured visual diff, actions, safety rationale, and duration impact for one proposal. Read-only.","title":"Inspect proposal","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"proposal_id":{"type":"string","description":"Stable proposal ID."}},"required":["proposal_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"explain_proposal","kind":"answer","impl":"imperative","description":"Returns a concise evidence-based explanation of why each proposal action exists and which locks/manual overrides were preserved. Read-only.","title":"Explain proposal","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"proposal_id":{"type":"string","description":"Stable proposal ID."}},"required":["proposal_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reject_proposal_action","kind":"act","impl":"imperative","description":"Mark one proposed edit as rejected. The visual overlay disappears and apply_proposal will preserve the corresponding audio.","title":"Reject proposal action","inputSchema":{"type":"object","properties":{"proposal_id":{"type":"string","description":"Stable proposal ID."},"action_id":{"type":"string","description":"Stable proposal action ID."}},"required":["proposal_id","action_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"accept_proposal_action","kind":"act","impl":"imperative","description":"Restore one previously rejected proposal action to pending so it will be applied.","title":"Restore proposal action","inputSchema":{"type":"object","properties":{"proposal_id":{"type":"string","description":"Stable proposal ID."},"action_id":{"type":"string","description":"Stable proposal action ID."}},"required":["proposal_id","action_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_proposal","kind":"act","impl":"imperative","description":"Atomically apply all non-rejected actions in a pending proposal, respecting current locks again at application time. Creates one undo checkpoint and Agent Changes entry.","title":"Apply approved proposal","inputSchema":{"type":"object","properties":{"proposal_id":{"type":"string","description":"Stable pending proposal ID."}},"required":["proposal_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reject_proposal","kind":"act","impl":"imperative","description":"Reject an entire pending proposal without mutating audio.","title":"Reject proposal","inputSchema":{"type":"object","properties":{"proposal_id":{"type":"string","description":"Stable pending proposal ID."}},"required":["proposal_id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"validate_edit_plan","kind":"answer","impl":"imperative","description":"Validate a multi-action deterministic edit plan against live IDs, timestamps, locks, and ranges without changing state. Call before execute_edit_plan. Read-only.","title":"Validate edit plan","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"actions":{"type":"array","minItems":1,"maxItems":40,"items":{"type":"object","description":"ProjectAction object. Supported types: split_clip, move_clip, delete_clip, set_clip_gain, set_track_gain, set_track_pan, ripple_delete_range, add_marker."}}},"required":["actions"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"simulate_edit_plan","kind":"answer","impl":"imperative","description":"Return an exact before/after project summary and per-action labels without changing state. Read-only.","title":"Simulate edit plan","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"actions":{"type":"array","minItems":1,"maxItems":40,"items":{"type":"object"}}},"required":["actions"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"execute_edit_plan","kind":"act","impl":"imperative","description":"Validate an atomic multi-action edit plan. In Propose First mode, creates a visual proposal. In Direct mode, applies atomically through the proposal engine. Locks always reject.","title":"Execute edit plan","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Human-readable plan title."},"description":{"type":"string","description":"Why this plan is appropriate."},"actions":{"type":"array","minItems":1,"maxItems":40,"items":{"type":"object"}}},"required":["title","description","actions"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"undo","kind":"act","impl":"imperative","description":"Undo the latest complete human or agent edit checkpoint.","title":"Undo edit","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"redo","kind":"act","impl":"imperative","description":"Redo the latest undone edit checkpoint.","title":"Redo edit","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_export_options","kind":"answer","impl":"imperative","description":"Returns real browser export capabilities and current selectable ranges. Read-only.","title":"Get export options","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_project_json","kind":"answer","impl":"imperative","description":"Returns complete serializable project JSON metadata. Raw source PCM is intentionally excluded; imported source files remain browser-local. Read-only.","title":"Export project JSON","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/wavecraft-webmcp.vercel.app.svg","apiSurface":"spec","toolCount":68}}