{"ok":true,"site":{"host":"agentcut-iota.vercel.app","url":"https://agentcut-iota.vercel.app/","type":"live","desc":"Browser-based image and video editor controlled by humans and AI agents through WebMCP.","tools":[{"name":"get_image_state","kind":"answer","impl":"imperative","description":"Read-only inspection of the current AgentCut image project state, including source dimensions, aspect ratio, transforms, adjustments, active text layers, and edit history summary.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_image_aspect_ratio","kind":"act","impl":"imperative","description":"Change the visible aspect ratio of the loaded image project (e.g. 4:5 for Instagram, 1:1 square, 16:9 landscape, 9:16 vertical, or original). The visible canvas updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"ratio":{"type":"string","enum":["original","1:1","4:5","16:9","9:16"],"description":"Target aspect ratio format"}},"required":["ratio"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rotate_image","kind":"act","impl":"imperative","description":"Rotate the image project by the specified degrees (e.g. 90, 180, 270). The visible canvas updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"degrees":{"type":"number","description":"Degrees to rotate the image (e.g. 90)"}},"required":["degrees"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"flip_image","kind":"act","impl":"imperative","description":"Flip the image horizontally or vertically. Visible canvas updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"horizontal":{"type":"boolean","description":"Flip horizontally"},"vertical":{"type":"boolean","description":"Flip vertically"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"adjust_image","kind":"act","impl":"imperative","description":"Adjust brightness, contrast, saturation, grayscale, or blur on the currently loaded AgentCut image. Only supplied fields are changed. The visible editor updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"brightness":{"type":"number","minimum":-100,"maximum":100,"description":"Brightness offset (-100 to 100)"},"contrast":{"type":"number","minimum":-100,"maximum":100,"description":"Contrast offset (-100 to 100)"},"saturation":{"type":"number","minimum":-100,"maximum":100,"description":"Saturation offset (-100 to 100)"},"grayscale":{"type":"number","minimum":0,"maximum":100,"description":"Grayscale percentage (0 to 100)"},"blur":{"type":"number","minimum":0,"maximum":20,"description":"Blur radius in px (0 to 20)"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_image_text","kind":"act","impl":"imperative","description":"Add a new text overlay layer to the image with semantic position (\"top-left\", \"top-center\", \"top-right\", \"center\", \"bottom-left\", \"bottom-center\", \"bottom-right\") and font size. Returns created textId. The text layer appears immediately on canvas.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"content":{"type":"string","description":"Text string to display"},"position":{"type":"string","enum":["top-left","top-center","top-right","center","bottom-left","bottom-center","bottom-right"],"description":"Semantic placement on image"},"fontSize":{"type":"number","minimum":12,"maximum":120,"description":"Font size in px"},"color":{"type":"string","description":"Hex color string"},"fontFamily":{"type":"string","enum":["Inter","Poppins","Montserrat","Bebas Neue","Playfair Display","DM Serif Display","Caveat","Pacifico"],"description":"Font family for the text layer. Use bold display fonts such as Bebas Neue for poster headlines, serif fonts such as Playfair Display for editorial styling, and Caveat/Pacifico for handwritten or expressive text."}},"required":["content"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_image_text","kind":"act","impl":"imperative","description":"Update an existing image text layer by textId (e.g. modify content, semantic position, font size, or opacity). The canvas updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"textId":{"type":"string","description":"ID of the text layer to update"},"content":{"type":"string","description":"New text content"},"position":{"type":"string","enum":["top-left","top-center","top-right","center","bottom-left","bottom-center","bottom-right"],"description":"New semantic position"},"fontSize":{"type":"number","description":"New font size in px"},"opacity":{"type":"number","minimum":0,"maximum":1,"description":"Layer opacity"},"fontFamily":{"type":"string","enum":["Inter","Poppins","Montserrat","Bebas Neue","Playfair Display","DM Serif Display","Caveat","Pacifico"],"description":"Font family for the text layer. Use bold display fonts such as Bebas Neue for poster headlines, serif fonts such as Playfair Display for editorial styling, and Caveat/Pacifico for handwritten or expressive text."}},"required":["textId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_image_text","kind":"act","impl":"imperative","description":"Remove a text layer from the image by textId. Visible canvas updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"textId":{"type":"string","description":"ID of the text layer to remove"}},"required":["textId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"undo_image_edit","kind":"act","impl":"imperative","description":"Revert the latest image editing action while preserving earlier edits. The canvas updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"redo_image_edit","kind":"act","impl":"imperative","description":"Re-apply the next image edit from the redo stack. The canvas updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_image","kind":"act","impl":"imperative","description":"Render and export the final image project containing all transforms, aspect ratio crop, adjustments, and text layers to PNG or JPG.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["png","jpg"],"description":"Export format (\"png\" or \"jpg\")"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_video_state","kind":"answer","impl":"imperative","description":"Read-only inspection of the current AgentCut video project state, including source duration, aspect ratio, trim bounds, playback speed, volume, timed text overlays, and edit history.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_timeline","kind":"answer","impl":"imperative","description":"Read-only compact chronological overview of the video timeline, active clips, timed text overlays, and playhead position.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"trim_video","kind":"act","impl":"imperative","description":"Trim the video by setting in-point and out-point timestamps (in seconds). For example, to remove the first 2 seconds of a 10s video, set startTime=2, endTime=10. The visible timeline updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"startTime":{"type":"number","minimum":0,"description":"New start timestamp in seconds"},"endTime":{"type":"number","minimum":0.1,"description":"New end timestamp in seconds"}},"required":["startTime","endTime"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_video_aspect_ratio","kind":"act","impl":"imperative","description":"Set the aspect ratio for the video project (e.g. 9:16 for Reels/Shorts/TikTok, 16:9 for landscape, 1:1 square, 4:5 vertical, or original). Preview frame adapts immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"ratio":{"type":"string","enum":["16:9","9:16","1:1","4:5","original"],"description":"Target video aspect ratio"}},"required":["ratio"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_video_speed","kind":"act","impl":"imperative","description":"Set video playback speed rate (supported: 0.5, 0.75, 1, 1.25, 1.5, 2). Timeline and video preview playback rate update immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"speed":{"type":"number","enum":[0.5,0.75,1,1.25,1.5,2],"description":"Playback speed factor"}},"required":["speed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_video_volume","kind":"act","impl":"imperative","description":"Set audio volume level (0 to 100) and/or mute status. Visible audio control updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"volume":{"type":"number","minimum":0,"maximum":100,"description":"Volume level from 0 to 100"},"muted":{"type":"boolean","description":"Whether audio is muted"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_video_text","kind":"act","impl":"imperative","description":"Add a timed text overlay to the video active between startTime and endTime seconds with semantic position (\"bottom-center\", \"top-left\", etc.). The text appears in preview and on timeline immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"content":{"type":"string","description":"Text content to overlay"},"startTime":{"type":"number","minimum":0,"description":"Start time in seconds"},"endTime":{"type":"number","minimum":0.1,"description":"End time in seconds"},"position":{"type":"string","enum":["top-left","top-center","top-right","center","bottom-left","bottom-center","bottom-right"],"description":"Semantic placement on frame"},"fontSize":{"type":"number","description":"Font size in px"},"fontFamily":{"type":"string","enum":["Inter","Poppins","Montserrat","Bebas Neue","Playfair Display","DM Serif Display","Caveat","Pacifico"],"description":"Font family for the text layer. Use bold display fonts such as Bebas Neue for poster headlines, serif fonts such as Playfair Display for editorial styling, and Caveat/Pacifico for handwritten or expressive text."}},"required":["content","startTime","endTime"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_video_text","kind":"act","impl":"imperative","description":"Update an existing video text overlay by textId (content, position, font size, start time, or end time). Visible preview and timeline update immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"textId":{"type":"string","description":"ID of the video text overlay to update"},"content":{"type":"string","description":"New text content"},"position":{"type":"string","enum":["top-left","top-center","top-right","center","bottom-left","bottom-center","bottom-right"]},"fontSize":{"type":"number"},"startTime":{"type":"number"},"endTime":{"type":"number"},"fontFamily":{"type":"string","enum":["Inter","Poppins","Montserrat","Bebas Neue","Playfair Display","DM Serif Display","Caveat","Pacifico"],"description":"Font family for the text layer. Use bold display fonts such as Bebas Neue for poster headlines, serif fonts such as Playfair Display for editorial styling, and Caveat/Pacifico for handwritten or expressive text."}},"required":["textId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_video_text","kind":"act","impl":"imperative","description":"Remove a timed text overlay from the video project by textId. Visible preview and timeline update immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"textId":{"type":"string","description":"ID of the video text layer to remove"}},"required":["textId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_video_keyframe","kind":"act","impl":"imperative","description":"Add an animation keyframe to the current AgentCut video project. Keyframes can animate text-layer position, scale and opacity or animate the video frame's position and scale. Use multiple keyframes at different timestamps to create motion, fades, zooms and pans. The visible preview and timeline update immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"targetType":{"type":"string","enum":["text","video"],"description":"Target to animate (\"text\" for a text layer, \"video\" for the video frame)"},"targetId":{"type":"string","description":"Text layer ID to animate (required if targetType is \"text\")"},"time":{"type":"number","minimum":0,"description":"Timestamp in seconds for the keyframe on timeline"},"properties":{"type":"object","properties":{"x":{"type":"number","minimum":0,"maximum":100,"description":"X position percentage (0 to 100)"},"y":{"type":"number","minimum":0,"maximum":100,"description":"Y position percentage (0 to 100)"},"scale":{"type":"number","minimum":0.25,"maximum":3,"description":"Scale multiplier (0.25 to 3)"},"opacity":{"type":"number","minimum":0,"maximum":1,"description":"Opacity (0 to 1)"}},"description":"Visual properties to animate at this timestamp"}},"required":["targetType","time","properties"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_video_keyframe","kind":"act","impl":"imperative","description":"Update an existing video keyframe by keyframeId (modify timestamp or visual properties). Uses safe partial updates: omitted properties preserve existing values. Visible preview and timeline update immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"keyframeId":{"type":"string","description":"ID of the keyframe to update"},"time":{"type":"number","minimum":0,"description":"New timestamp in seconds"},"properties":{"type":"object","properties":{"x":{"type":"number","minimum":0,"maximum":100},"y":{"type":"number","minimum":0,"maximum":100},"scale":{"type":"number","minimum":0.25,"maximum":3},"opacity":{"type":"number","minimum":0,"maximum":1}},"description":"Properties to update (omitted properties remain unchanged)"}},"required":["keyframeId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_video_keyframe","kind":"act","impl":"imperative","description":"Remove an animation keyframe from the video project by keyframeId. The visible preview and timeline update immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"keyframeId":{"type":"string","description":"ID of the keyframe to remove"}},"required":["keyframeId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_video_keyframes","kind":"answer","impl":"imperative","description":"Read-only inspection of animation keyframes in the video project, ordered chronologically. Supports optional filtering by targetType (\"text\" | \"video\") or targetId.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"targetType":{"type":"string","enum":["text","video"],"description":"Optional filter by targetType (\"text\" or \"video\")"},"targetId":{"type":"string","description":"Optional filter by text targetId"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"split_video","kind":"act","impl":"imperative","description":"Split the current video clip at the given timestamp into two distinct segments. The timeline updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"time":{"type":"number","minimum":0.1,"description":"Timestamp in seconds where clip should be split"}},"required":["time"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_video_segment","kind":"transact","impl":"imperative","description":"Delete a split clip segment by segmentId from the timeline.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"segmentId":{"type":"string","description":"ID of the segment to delete"}},"required":["segmentId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"undo_video_edit","kind":"act","impl":"imperative","description":"Revert the latest video editing action (such as speed, trim, or text) while preserving earlier edits. The visible video project updates immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"redo_video_edit","kind":"act","impl":"imperative","description":"Re-apply the next video edit from the redo stack. The timeline and preview update immediately.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_video","kind":"act","impl":"imperative","description":"Render and export the current AgentCut video project (prefers QuickTime-compatible MP4 when supported by the browser MediaRecorder, falling back to WebM). The rendered export bakes in all active trims, aspect ratio crop, video keyframe motion/zoom, and timed animated text layers. The resulting video file is downloaded and structured metadata is returned.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/agentcut-iota.vercel.app.svg","apiSurface":"spec","toolCount":29}}