{"name":"io.github.Clipform/mcp-server","slug":"clipform-mcp-server","title":"Clipform","description":"Interactive video forms that capture authentic responses. Build engaging forms in minutes.","url":"https://mcp.market/server/clipform-mcp-server","rating":null,"grade":"B","score":78,"certified":false,"status":"active","category":"media","tags":["media"],"presence":{"score":37,"stars":0,"forks":0,"downloads_week":681,"last_push_at":"2026-09-09T11:57:21.000Z","license":"MIT"},"uptime":{"percent":100,"checks":1,"ok":1,"last_checked_at":"2026-09-19T16:50:43.165Z","last_ok_at":"2026-09-19T16:50:43.165Z","latency_ms":826},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/clipform/mcp-server","website":"https://www.clipform.io","version":"2.15.5","remotes":[{"type":"streamable-http","url":"https://mcp.clipform.io"}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@clipform/mcp-server","version":"2.15.5","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"API key that scopes tool calls to your workspace (create one in the dashboard under Settings, API keys). Not needed to list tools, only to call them.","isRequired":true,"isSecret":true,"name":"CLIPFORM_API_KEY"},{"description":"Clipform API base URL.","isRequired":true,"default":"https://api.clipform.io","name":"API_URL"}]}],"tools":[{"name":"clipform_add_node","description":"Add a new node to an existing form. Inserted before the end screen by default; after_node_id controls insertion position. Inserting into a linear flow automatically re-links the chain (the node before the insertion point points to the new node, which points to what followed) - you do not need clipform_set_logic for a simple insert. Branching still needs an explicit logic write. Node types and config schemas match clipform_create_form.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"node":{"type":"object","properties":{"type":{"type":"string","enum":["choice","open","details","payment","button","redirect","file_download","end_screen"]},"prompt":{"type":"string","description":"The text shown to the respondent"},"label":{"type":"string","description":"Short label for the node (used in logic builder). Defaults to the prompt text."},"required":{"type":"boolean","default":true},"config":{"type":"object","additionalProperties":{},"description":"Type-specific configuration keyed by node type. Omit to use defaults. Per-type keys, shapes, and defaults are listed in the clipform_create_form description; craft guidance via clipform_get_guide."},"options":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string","description":"Option text"},"is_correct":{"type":"boolean","description":"Mark this as the correct answer for a quiz (maps to score 1; other options score 0). Use this OR score, not both."},"score":{"type":"number","description":"Score value for this option (for scored quizzes). Use 1 for correct, 0 for wrong. Scored options automatically enable correct-answer marking (record_scores) and correct/incorrect answer feedback on the node; set config.choice.show_answer_feedback: false to hide the feedback."}},"required":["content"],"additionalProperties":false},"description":"Answer options. choice: required, min 1, max 6, content max 36 chars button: required, min 1, max 1, content max 28 chars"}},"required":["type","prompt"],"additionalProperties":false,"description":"The node to add"},"after_node_id":{"type":"string","description":"Insert after this node ID. Omit to append before the end screen."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","node","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_attach_node_media","description":"Attach an existing workspace media asset (from clipform_upload_media_asset) to one or more nodes (max 10). Pass one item or many; multiple items attach sequentially. Only works on node types that support media (choice, open, scale, draw, binary, button). A media asset is reusable - attach the same media_asset_id to several nodes.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"items":{"type":"array","items":{"type":"object","properties":{"node_id":{"type":"string","description":"The node ID"},"media_asset_id":{"type":"string","description":"A media asset ID returned by clipform_upload_media_asset"},"fit_media":{"type":"boolean","description":"Show the whole frame (contain) instead of cover-cropping. ALWAYS set true when attaching renders from clipform_render_composition or clipform_generate_video - they are composed 9:16 frames that must never be cropped. Leave unset for user-supplied media (arbitrary aspect ratios want the cover default)."},"show_captions":{"type":"boolean","description":"Display captions/subtitles on the node. Defaults to on; pass false to hide them."}},"required":["node_id","media_asset_id"],"additionalProperties":false},"minItems":1,"maxItems":10,"description":"One or more attachments to make"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","items","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_check_render","description":"Check the status of render jobs started by clipform_generate_video, clipform_render_video_template, or clipform_render_composition.\n\nPass job_ids to check a whole batch in ONE call - one line of status per job. Pass job_id for a single job. Returns the output URL for each completed render. Typical render time: 10-60 seconds. Attach is automatic when node_id was provided to the render tool - no need to poll to completion, and the attach outcome is reported here once known.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid","description":"A single job ID returned by the render tool"},"job_ids":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":20,"description":"Multiple job IDs - check the whole batch in one call instead of one call per job"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_complete_media_upload","description":"Confirm a signed-PUT still image upload finished, after PUTting the bytes to the upload_url returned by clipform_upload_media_asset. The API verifies the object actually landed in storage before flipping the asset from processing to ready - call this right after the PUT succeeds, or the asset stays invisible in the library. Not needed for video uploads (TUS/Mux settle automatically).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"media_asset_id":{"type":"string","format":"uuid","description":"The media_asset_id returned by clipform_upload_media_asset for the still image"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["media_asset_id","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_create_form","description":"Create a new Clipform (interactive video-style form). Returns a viewer URL and form ID. When connected via an authenticated MCP client (e.g. claude.ai), the form lands directly in the user's workspace. Anonymous sessions get a claim URL to transfer ownership later.\n\nIf the user hasn't said what to build yet, offer to build their first form and suggest starting points: lead-gen, feedback, quiz, or something else.\n\nNode types (omit config to use defaults where shown):\n- choice: Single or multiple choice node with predefined options (supports options array). Config: choice ({enable_branching, show_answer_feedback, record_scores}), selection_mode (\"single\"|\"multiple\", default: \"single\"), allow_text_response (boolean, default: false), randomise_options (boolean, default: false), show_option_count (boolean, default: false), option_display (\"list\"|\"letters\", default: \"list\"). Defaults: {\"selection_mode\":\"single\",\"choice\":{\"enable_branching\":false},\"randomise_options\":false,\"show_option_count\":false,\"option_display\":\"list\"}\n- open: Free-form text responses from users. Config: formats (array of {format, order}), max_recording_seconds (number, default: 120). Defaults: {\"formats\":[{\"order\":0,\"format\":\"text\"},{\"order\":1,\"format\":\"audio\"},{\"order\":2,\"format\":\"video\"}]}\n- details: Collect several fields on one screen - name, email, phone, address, date, and more. Config: title (string), fields (array of {id, type, label, order, required, is_custom}), description (string), consent_items (array of {id, name, label, order, type, document, require_scroll_to_accept}), Available field IDs: first_name, last_name, email, phone. Defaults: {\"fields\":[{\"id\":\"first_name\",\"type\":\"first_name\",\"label\":\"First Name\",\"enabled\":true,\"required\":true},{\"id\":\"email\",\"type\":\"email\",\"label\":\"Email\",\"enabled\":true,\"required\":true}],\"consent_items\":[]}\n- payment: Collect a payment from respondents inline, charged to a connected Stripe account. Config: amount (number), currency (\"usd\"|\"eur\"|\"gbp\"|\"cad\"|\"aud\", default: \"usd\"), provider (\"stripe\"|\"paddle\", default: \"stripe\"), workspace_integration_id (string), title (string), description (string). Defaults: {\"amount\":null,\"currency\":\"usd\",\"provider\":\"stripe\"}\n- button: Simple button for acknowledgment or navigation (supports options array). Config: button_text (string, default: \"Continue\"), button_style (\"primary\"|\"secondary\"|\"outline\", default: \"primary\")\n- redirect: Redirect users to an external URL. Config: url (string), auto_redirect (boolean, default: true). Defaults: {\"url\":\"\",\"auto_redirect\":true}\n- file_download: Provide a file for respondents to download. Config: files (array of {file_name, display_name, file_path, file_size, mime_type}), button_text (string, default: \"Continue\"), description (string)\n- end_screen: Final screen shown when form is completed. Config: title (string, default: \"Thank you!\"), message (string, default: \"Your response has been submitted.\"), icon (\"tick\"|\"trophy\"|\"star\"|\"crown\"|\"party\"|\"none\", default: \"tick\"), show_share_button (boolean, default: false), cta_type (\"none\"|\"restart\"|\"external_link\", default: \"none\"), cta_text (string, default: \"Continue\"), cta_url (string). Defaults: {\"title\":\"Thank you!\",\"message\":\"Your response has been submitted.\"}\n\nAll type definitions and config schemas are derived from @vid-master/config (node-types). Refer to the config descriptions above for the correct keys and shapes. AI-PROTECTED parameters have restrictions noted in their descriptions.\n\nExample: A form that asks a question, collects contact info, then finishes:\n{\n  title: \"Quick Survey\",\n  nodes: [\n    { type: \"open\", prompt: \"What's your biggest challenge?\" },\n    { type: \"details\", prompt: \"Leave your details\", config: { fields: [{ id: \"first_name\", required: true }, { id: \"email\", required: true }] } },\n    { type: \"end_screen\", prompt: \"Thanks for your response!\" }\n  ]\n}","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"title":{"type":"string","description":"Form title"},"nodes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["choice","open","details","payment","button","redirect","file_download","end_screen"]},"prompt":{"type":"string","description":"The text shown to the respondent"},"label":{"type":"string","description":"Short label for the node (used in logic builder). Defaults to the prompt text."},"required":{"type":"boolean","default":true},"config":{"type":"object","additionalProperties":{},"description":"Type-specific configuration keyed by node type. Omit to use defaults. Per-type keys, shapes, and defaults are listed in the clipform_create_form description; craft guidance via clipform_get_guide."},"options":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string","description":"Option text"},"is_correct":{"type":"boolean","description":"Mark this as the correct answer for a quiz (maps to score 1; other options score 0). Use this OR score, not both."},"score":{"type":"number","description":"Score value for this option (for scored quizzes). Use 1 for correct, 0 for wrong. Scored options automatically enable correct-answer marking (record_scores) and correct/incorrect answer feedback on the node; set config.choice.show_answer_feedback: false to hide the feedback."}},"required":["content"],"additionalProperties":false},"description":"Answer options. choice: required, min 1, max 6, content max 36 chars button: required, min 1, max 1, content max 28 chars"}},"required":["type","prompt"],"additionalProperties":false},"minItems":1,"description":"Ordered list of nodes/steps for the form"},"show_step_counter":{"type":"boolean","description":"Show step counter (e.g. '1/5'). Set true for quizzes."},"disable_back_navigation":{"type":"boolean","description":"Prevent going back. Set true for quizzes."},"primary_color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"Primary/brand color as 6-digit hex (e.g. '#FF5500'). Used for buttons and accents."},"background_color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"Background color as 6-digit hex (e.g. '#1A1A2E')."},"font_family":{"type":"string","description":"AI-PROTECTED: Only set when the user explicitly requests a specific font."},"tags":{"type":"array","items":{"type":"string"},"description":"Tags for indexing (e.g. ['quiz', 'trivia', 'arsenal']). Include format, genre, and topics."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["title","nodes","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_delete_form","description":"Move a form and all its nodes to the trash. It stops accepting responses immediately and can be restored later. Requires user confirmation before it runs.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID to delete (returned by clipform_create_form, not the short share_id from the URL)"},"confirm":{"type":"boolean","description":"Set to true ONLY after the user has explicitly confirmed this destructive action. Leave unset otherwise - hosts that support confirmation dialogs will prompt the user automatically."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_delete_node","description":"Delete a node from a form. The logic chain is automatically re-linked (the previous node will point to the next one). Cannot delete the start node or the last end screen. Requires user confirmation before it runs.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"node_id":{"type":"string","description":"The node ID to delete"},"confirm":{"type":"boolean","description":"Set to true ONLY after the user has explicitly confirmed this destructive action. Leave unset otherwise - hosts that support confirmation dialogs will prompt the user automatically."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","node_id","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_delete_node_media","description":"Remove media from a node. Deletes the media record and cleans up external resources (Mux video asset, storage file). Requires user confirmation before it runs.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"node_id":{"type":"string","description":"The node ID"},"confirm":{"type":"boolean","description":"Set to true ONLY after the user has explicitly confirmed this destructive action. Leave unset otherwise - hosts that support confirmation dialogs will prompt the user automatically."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","node_id","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_fetch_boundary","description":"Fetch a GeoJSON boundary polygon for a country, city, or region. Returns simplified GeoJSON ready to use as the 'boundary' prop in the Map composition.\n\nmainlandOnly excludes small islands and overseas territories (e.g. Corsica for France, Hawaii for USA).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Place name (e.g. 'France', 'Paris', 'Tokyo', 'Brazil')"},"type":{"type":"string","enum":["country","city","state","region"],"default":"country","description":"Type of place to search for"},"mainlandOnly":{"type":"boolean","default":true,"description":"Keep only the largest landmass, excluding small islands and overseas territories"},"maxPoints":{"type":"number","default":500,"description":"Maximum points per polygon ring for simplification (default 500, lower = smaller payload)"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["query","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_generate_tts","description":"Generate narration audio from text with word-level captions. Use this for quiz question narration, survey introductions, form instructions, or any node that benefits from a human voice. Proactively suggest narration for quizzes and content-rich forms - it significantly improves engagement.\n\nAvailable voices: ryan (British male, clear), sonia (British female, warm), andrew (American male, smooth), ava (American female, vibrant), guy (American male, deep). Pick ONE voice that fits the topic - e.g. a London quiz gets ryan or sonia, a US sports quiz gets andrew or guy - and reuse that SAME voice for every item and every call across the whole form. Never mix voices within one form unless the user explicitly asks for multiple voices.\n\nUse the tone parameter to direct HOW the voice speaks. Always set a tone that matches the form's mood - e.g. quizzes: \"Energetic and playful, like a quiz show host teasing the audience\", surveys: \"Professional but warm, encouraging honest answers\", personality quizzes: \"Curious and reflective\". This dramatically improves the narration quality.\n\nPass one item or many (max 10) - multiple items run in parallel. Returns audio_url and caption_ref per item - pass caption_ref downstream to clipform_render_composition / clipform_render_video_template / clipform_upload_media_asset to attach this run's word-level captions instead of hand-copying the captions array.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":5000,"description":"Narration text"},"voice":{"type":"string","enum":["ryan","sonia","andrew","ava","guy"],"default":"ryan","description":"Voice: ryan (British male, clear/articulate), sonia (British female, warm/bright), andrew (American male, smooth/neutral), ava (American female, vibrant/friendly), guy (American male, deep/authoritative). Pick ONE voice for the whole form based on its topic and audience, then reuse that same voice on every item and every call - never mix voices within a form unless the user explicitly asks for more than one."},"tone":{"type":"string","maxLength":500,"description":"Style instructions for how the voice should sound. E.g. 'Speak like an energetic quiz show host, playful and teasing' or 'Warm and conversational, like chatting with a friend'. Infer from context if not specified by the user."}},"required":["text"],"additionalProperties":false},"minItems":1,"maxItems":10,"description":"One or more TTS items to generate"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["items","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_generate_video","description":"Generate a video from images, video clips, or both, synced to an audio track. Use this for narrated question backgrounds, topic visualisations, or any form node that benefits from video. Combine with clipform_generate_tts for narrated audio and clipform_search_media for royalty-free images. Creates 9:16 (720x1280) with Ken Burns pan/zoom effects and transitions. Returns a public URL when complete.\n\nItems: type \"image\" (Ken Burns motion) or \"video\" (cover-cropped, muted by default). Duration matches audio_url or set duration_seconds explicitly.\n\nFor multi-question builds, pass wait: false on every render: each call returns a job ID immediately, so all renders run in parallel - then collect URLs with clipform_check_render. Sequential waiting renders take 15-120 seconds EACH.\n\nChoosing a render tool: for a recognisable form/quiz beat (guess-the-city, this-or-that, mystery reveal, multiple choice, photo montage...) reach for a video template first (clipform_list_video_templates + clipform_render_video_template) - it is a one-call recipe. Use clipform_generate_video for a narrated or audio-synced media montage (images/clips timed to a voice track). Use clipform_render_composition only when neither fits and you need a custom layer stack.\nMontage disambiguation: choose clipform_generate_video when the montage is narrated or synced to an audio track; choose the slideshow video template when it is silent (motion + transitions only, no voice-over).\nA render for a form node is not done until it is attached to that node. Pass node_id (and form_id) so the completed render attaches itself automatically - do not poll clipform_check_render to completion or manually chain clipform_upload_media_asset + clipform_attach_node_media; fire the render and move on.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["image","video"],"description":"'image' for still images with Ken Burns effects, 'video' for video clips"},"url":{"type":"string","format":"uri","description":"Media URL"},"effect":{"type":"string","enum":["pan-left","pan-right","pan-up","pan-down","zoom-in-pan-left","zoom-in-pan-right","zoom-in","zoom-out","static","random"],"description":"Advanced override: a specific Ken Burns effect (image only), overriding the preset look's own effect choice"},"aspect_ratio":{"type":"number","exclusiveMinimum":0,"description":"Image width/height ratio (image only). Enables auto blur-pad for landscape images."},"fit":{"type":"string","enum":["cover","blur-pad","auto"],"description":"Framing mode (image only). auto = cover for portrait, blur-pad for landscape."},"start_from":{"type":"number","minimum":0,"description":"Start time in seconds (video only). Trims the clip."},"volume":{"type":"number","minimum":0,"maximum":1,"description":"Clip audio volume 0-1 (video only, default 0 = muted)"}},"required":["type","url"],"additionalProperties":false},"minItems":1,"maxItems":20,"description":"Media items (images, video clips, or a mix)"},"audio_url":{"type":"string","format":"uri","description":"Audio track URL. Video duration matches audio duration."},"background_audio_url":{"type":"string","format":"uri","description":"Ambience/music bed under the narration (crowd noise, room tone). Loops to fill the video. Find tracks with clipform_search_music."},"background_audio_volume":{"type":"number","minimum":0,"maximum":1,"description":"Background bed volume 0-1 (default 0.15 - sits under speech)"},"duration_seconds":{"type":"number","exclusiveMinimum":0,"description":"Video duration in seconds (required if no audio_url)"},"preset":{"type":"string","enum":["clean","editorial","punchy","bold-poster"],"default":"clean","description":"Named look driving transition + motion + colour treatment together (default: 'clean'). One of: clean, editorial, punchy, bold-poster. The advanced fields below (transition, style_preset, texture, duotone, background_color, per-item effect) override individual pieces of the chosen look when set."},"random_effects":{"type":"boolean","default":true,"description":"Shuffle Ken Burns effects across image items (default: true)"},"transition":{"type":"object","properties":{"type":{"type":"string","enum":["fade","slide","wipe","none"],"description":"Advanced override: fade, slide, wipe, none - overrides the preset look's own transition"},"duration":{"type":"number","description":"Advanced override: transition duration in seconds"}},"additionalProperties":false,"description":"Advanced: overrides the preset look's transition"},"style_preset":{"type":"string","enum":["cinematic","dramatic","calm","documentary","dreamy","moody","energetic"],"description":"Advanced override: a raw Ken Burns motion preset, overriding the preset look's own motion."},"texture":{"type":"object","properties":{"type":{"type":"string","enum":["checker","halftone","scanlines"],"description":"checker = square dither mesh, halftone = dot grid, scanlines = horizontal lines"},"sizePx":{"type":"number","exclusiveMinimum":0,"description":"Pattern cell size in px (default 4)"},"opacity":{"type":"number","minimum":0,"maximum":1,"description":"Pattern darkness 0-1 (default 0.35)"}},"required":["type"],"additionalProperties":false,"description":"Advanced override: print-style pattern overlay on image items, overriding the preset look's own texture - makes stock imagery read as designed (screen-print dither look)"},"duotone":{"type":"object","properties":{"shadow":{"type":"string","description":"Darker tone (maps to image shadows), e.g. '#1a1633'"},"highlight":{"type":"string","description":"Lighter tone (maps to image highlights), e.g. '#f5c542'"},"contrast":{"type":"number","exclusiveMinimum":0,"description":"Contrast boost before mapping (default 1.1)"}},"required":["shadow","highlight"],"additionalProperties":false,"description":"Advanced override: two-tone editorial recolour on image items, overriding the preset look's own duotone - desaturates then maps to a shadow->highlight palette. Pair with a halftone texture for a screen-print poster look."},"background_color":{"type":"string","description":"Advanced override: background color, overriding the preset look's own background (default '#000')"},"wait":{"type":"boolean","default":true,"description":"true (default) blocks until the video is ready and returns its URL. false returns a job ID immediately - fire all renders first, then poll clipform_check_render. Use false whenever rendering more than one video."},"node_id":{"type":"string","description":"Form node to attach this render to automatically once it completes - skips the manual clipform_upload_media_asset + clipform_attach_node_media steps and republishes the form if it's currently live. Requires form_id."},"form_id":{"type":"string","format":"uuid","description":"The form UUID (required when node_id is set)."},"captions":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number","description":"Segment start time in seconds"},"end":{"type":"number","description":"Segment end time in seconds"},"text":{"type":"string","description":"Full segment text"},"words":{"type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"],"additionalProperties":false},"minItems":1,"description":"Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim."}},"required":["start","end","text","words"],"additionalProperties":false},"description":"Word-level captions from clipform_generate_tts - carried onto the attached media asset. Only used when node_id is set."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["items","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_get_form","description":"Retrieve a form's details including all nodes in sequential order and their routing. Returns title, settings, and every node with its options, config, media status, and next node (from clipform_set_logic).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_get_guide","description":"Retrieve craft knowledge for building a specific form type. Returns question psychology, difficulty curves, narration style, scoring setup, and writing principles as markdown. Does NOT return a step-by-step build workflow - use clipform_get_workflow for that.\n\nAvailable types: quiz, survey, interview, funnel, testimonial, application, booking, intake, lead-capture.\nAliases also accepted: trivia → quiz, test → quiz, exam → quiz, feedback → survey, poll → survey, nps → survey, questionnaire → survey, case-study → interview, callout → interview, lead-gen → funnel, qualification → funnel, lead-magnet → funnel, story → testimonial, review → testimonial, job-application → application, admission → application, enrollment → application, grant → application, registration → booking, signup → booking, event → booking, rsvp → booking, workshop → booking, client-intake → intake, onboarding → intake, enquiry → intake, inquiry → intake, new-client → intake, lead → lead-capture, lead-form → lead-capture, enquiry-form → lead-capture, waitlist → lead-capture, get-a-quote → lead-capture.\nQuiz variants (optional): personality, comprehension, composition - appends variant-specific addendum to the base quiz guide.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"type":{"type":"string","description":"Form type to get the craft guide for (accepts aliases like 'feedback' → survey)"},"variant":{"type":"string","enum":["personality","comprehension","composition"],"description":"Quiz sub-variant. Only used when type is 'quiz'. Omit for a standard scored quiz."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["type","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_get_node_media","description":"Get the media attached to a node, including processing status. Useful for checking if a video upload has finished processing.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"node_id":{"type":"string","description":"The node ID"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","node_id","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_get_responses","description":"List a Clipform form's individual responses (submissions) with time filtering - complements clipform_get_results (aggregates). Answers questions like 'what came in during the last 24 hours', 'what's the longest answer', 'what did people say'. Text answers plus a non-PII payment summary (amount and status); contact details, file uploads, and audio/video answers are redacted to placeholders and the customer's payment details stay in the dashboard (the responses URL from clipform_get_form). Responses are sorted newest first unless sort: 'oldest'.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","description":"Form UUID (from clipform_list_forms / clipform_create_form)"},"since":{"type":"string","format":"date-time","description":"Only responses submitted at or after this ISO 8601 time (e.g. '2026-08-29T00:00:00Z')"},"until":{"type":"string","format":"date-time","description":"Only responses submitted at or before this ISO 8601 time"},"query":{"type":"string","description":"Only responses whose text answers contain this string (case-insensitive)"},"sort":{"type":"string","enum":["newest","oldest"],"description":"Order by submission time. Default: newest"},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"Max responses to return (default 20, max 50)"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_get_results","description":"View response counts, choice/action answer breakdowns, and recent open-text answers for a form. Contact, file, draw, camera, and payment answers are counts only - use the dashboard for per-response detail.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_get_workflow","description":"Retrieve a step-by-step build workflow for creating a specific form type. Returns the exact tool sequence, form settings, node configuration, scoring setup, and end screen config as a build recipe.\n\nDoes NOT return craft knowledge (question psychology, difficulty curves, narration style) - use clipform_get_guide for that.\n\nAvailable types: quiz, survey, interview, testimonial, application, booking, intake, lead-capture.\nAliases also accepted: trivia → quiz, test → quiz, exam → quiz, feedback → survey, poll → survey, nps → survey, questionnaire → survey, case-study → interview, callout → interview, lead-gen → funnel, qualification → funnel, lead-magnet → funnel, story → testimonial, review → testimonial, job-application → application, admission → application, enrollment → application, grant → application, registration → booking, signup → booking, event → booking, rsvp → booking, workshop → booking, client-intake → intake, onboarding → intake, enquiry → intake, inquiry → intake, new-client → intake, lead → lead-capture, lead-form → lead-capture, enquiry-form → lead-capture, waitlist → lead-capture, get-a-quote → lead-capture.\nQuiz variants (optional): personality, comprehension, composition - returns the variant-specific workflow instead of the base quiz workflow.\n\nOptional args by type:\n- quiz: topic, question_count (8)\n- quiz (variant: personality): topic, categories, question_count (8)\n- quiz (variant: comprehension): youtube_url, question_count (8), audience\n- interview: purpose, response_format (all), needs_consent (true)\n- survey: topic, anonymous (true)\n- funnel: outcomes, criteria, needs_contact (true)\n- testimonial: use_case\n- application: role\n- booking: event_name, event_type\n- intake: use_case, response_format (all)\n- lead-capture: use_case","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"type":{"type":"string","description":"Form type to get the build workflow for (accepts aliases like 'feedback' → survey)"},"variant":{"type":"string","enum":["personality","comprehension","composition"],"description":"Quiz sub-variant. Only used when type is 'quiz'. Omit for a standard scored quiz."},"topic":{"type":"string","description":"Topic or theme (quiz, survey)"},"question_count":{"type":"number","description":"Number of questions, default 8 (quiz types)"},"categories":{"type":"string","description":"Comma-separated outcome categories (quiz variant: personality)"},"youtube_url":{"type":"string","description":"YouTube video URL (quiz variant: comprehension)"},"audience":{"type":"string","description":"Target audience (quiz variant: comprehension)"},"purpose":{"type":"string","description":"What you're collecting (interview)"},"response_format":{"type":"string","enum":["video","audio","text","all"],"description":"How respondents reply (interview)"},"needs_consent":{"type":"boolean","description":"Include consent statement (interview)"},"anonymous":{"type":"boolean","description":"Anonymous survey (survey)"},"outcomes":{"type":"string","description":"Segments or recommendations (funnel)"},"criteria":{"type":"string","description":"Routing criteria (funnel)"},"needs_contact":{"type":"boolean","description":"Include contact capture (funnel)"},"use_case":{"type":"string","description":"What stories to collect (testimonial)"},"role":{"type":"string","description":"What the application is for (application)"},"event_name":{"type":"string","description":"Event or offering name (booking)"},"event_type":{"type":"string","description":"Type of event (booking)"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["type","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_import_form","description":"Convert a public Google Form, Typeform, or Tally form into a new Clipform. Supported URLs: Google Forms (docs.google.com or forms.gle - must be shared as \"Anyone with the link\"), Typeform (form.typeform.com/to/...), and Tally (tally.so - must be public). The source form must be publicly accessible; a private form's questions cannot be read. The new Clipform is created as a DRAFT - review it, then republish with clipform_update_form (is_live: true) once it's ready. Some question types don't map cleanly to a Clipform node and are skipped rather than guessed at; the result always reports exactly what was imported vs skipped, and why.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"Public URL of the Google Form, Typeform, or Tally form to import"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["url","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_list_assets","description":"List available creative assets (sound effects, animations, fonts) for video compositions.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"type":{"type":"string","enum":["sfx","animation","font","all"],"default":"all","description":"Asset type to list (default: all)"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_list_compositions","description":"Browse available video compositions and their expected props schemas. Call this before using clipform_render_composition to discover visual styles and their input props. For an image or photo montage, reach for a video template (clipform_list_video_templates + clipform_render_video_template) or clipform_generate_video instead of a composition.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_list_forms","description":"List forms in your workspace with optional filtering. Returns paginated results (cursor-based). next_cursor is included when more results exist. To find or open a form by name, pass search with part of its title instead of paging through results.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Number of forms to return (default 25, max 100)"},"cursor":{"type":"string","description":"Pagination cursor from previous response's next_cursor"},"tag":{"type":"string","description":"Filter by tag name(s), comma-separated. AND logic: only forms with ALL tags are returned."},"published":{"type":"string","enum":["true","false"],"description":"Filter by publish status"},"search":{"type":"string","description":"Filter to forms whose title contains this text (case-insensitive substring). Use this to resolve a form by name in one call instead of paginating."},"sort":{"type":"string","enum":["created_at","updated_at"],"description":"Sort field (default: created_at)"},"order":{"type":"string","enum":["asc","desc"],"description":"Sort order (default: desc, newest first)"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_list_video_templates","description":"Browse available video templates - curated Scene arrangements (bed + overlay + sane defaults) that render through the Scene composition from a small controls object. Call this before clipform_render_video_template to see template names and their exposed controls. For a fully custom layer stack, assemble Scene layers directly via clipform_render_composition instead.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_log_generation","description":"Internal audit step run by a form-generation workflow. Records a completed generation's content provenance (sources, image attributions) for the flow that just built the form. Not a user action - only call it as the final step of a generation workflow you are running, never in response to a plain create or edit request.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form ID (UUID format, not the share ID)"},"summary":{"type":"string","description":"Short description of what was generated"},"details":{"type":"object","properties":{"sources":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"},"type":{"type":"string"}},"required":["title"],"additionalProperties":false},"description":"Knowledge sources used"},"images":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"attribution":{"type":"string"},"license":{"type":"string"}},"required":["url"],"additionalProperties":false},"description":"Images used with attribution"}},"additionalProperties":false,"description":"Content sources and attributions"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","summary","details","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_render_composition","description":"Render a specialised video composition to MP4 or PNG - custom animated visuals that clipform_generate_video can't provide, such as geography animations or designed motion graphics. Available composition names and their required input props schemas come from clipform_list_compositions.\n\nOutput formats: mp4 (H.264, best for social media) or png (single frame). Returns a public URL when complete.\n\nFor multi-render builds (e.g. one clip per quiz question), pass everything in ONE call via items (max 10): all renders fire in parallel and you get one job ID each - then collect the URLs in a single clipform_check_render call with job_ids. Single render: pass compositionId/inputProps at the top level (wait: true blocks and returns the URL; wait: false returns a job ID).\n\nChoosing a render tool: for a recognisable form/quiz beat (guess-the-city, this-or-that, mystery reveal, multiple choice, photo montage...) reach for a video template first (clipform_list_video_templates + clipform_render_video_template) - it is a one-call recipe. Use clipform_generate_video for a narrated or audio-synced media montage (images/clips timed to a voice track). Use clipform_render_composition only when neither fits and you need a custom layer stack.\nA render for a form node is not done until it is attached to that node. Pass node_id (and form_id) so the completed render attaches itself automatically - do not poll clipform_check_render to completion or manually chain clipform_upload_media_asset + clipform_attach_node_media; fire the render and move on. In batch mode, set node_id per item (see items) and form_id once at the top level.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"compositionId":{"type":"string","description":"Single render: the composition ID. Call clipform_list_compositions to see available options (e.g. 'Slideshow', 'Map', 'Grid'). Use items instead for multiple renders."},"outputFormat":{"type":"string","enum":["mp4","png"],"default":"mp4","description":"Single render: output format (default: mp4)"},"inputProps":{"type":"object","additionalProperties":{},"description":"Single render: props object matching the composition's schema from clipform_list_compositions. Validated STRICTLY - unknown or missing props fail with the schema in the error, nothing renders silently with defaults. For map compositions (Map), wide shots (camera.zoom < 9) may round lat/lng to 1 decimal place to improve cache hit rates; close shots and pin drops should keep full precision — the pin lands exactly on `target`."},"wait":{"type":"boolean","default":true,"description":"Single render only: true (default) blocks until the render is ready and returns its URL; false returns a job ID for clipform_check_render. Batch items always run fire-and-poll."},"items":{"type":"array","items":{"type":"object","properties":{"compositionId":{"type":"string","description":"The composition ID (see clipform_list_compositions)"},"outputFormat":{"type":"string","enum":["mp4","png"],"default":"mp4","description":"Output format (default: mp4)"},"inputProps":{"type":"object","additionalProperties":{},"description":"Props matching the composition's schema - validated strictly"},"node_id":{"type":"string","description":"Form node to attach this item's render to automatically once it completes. Requires the batch's top-level form_id."},"captions":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number","description":"Segment start time in seconds"},"end":{"type":"number","description":"Segment end time in seconds"},"text":{"type":"string","description":"Full segment text"},"words":{"type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"],"additionalProperties":false},"minItems":1,"description":"Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim."}},"required":["start","end","text","words"],"additionalProperties":false},"description":"Word-level captions from clipform_generate_tts - carried onto the attached media asset. Only used when node_id is set."},"caption_ref":{"type":"string","description":"caption_ref from clipform_generate_tts - an opaque handle that attaches that TTS run's word-level captions to the media asset, resolved server-side. Preferred over captions. Only used when node_id is set."}},"required":["compositionId"],"additionalProperties":false},"minItems":1,"maxItems":10,"description":"Batch mode: multiple renders in one call. All fire in parallel; returns one job ID per item - collect with clipform_check_render (job_ids). Use this whenever rendering more than one clip."},"node_id":{"type":"string","description":"Single render only: form node to attach this render to automatically once it completes. Requires form_id. For batch mode, set node_id per item instead."},"form_id":{"type":"string","format":"uuid","description":"The form UUID - required when node_id is set (single render) or any item sets node_id (batch)."},"captions":{"type":"array","items":{"$ref":"#/properties/items/items/properties/captions/items"},"description":"Single render only: word-level captions from clipform_generate_tts, carried onto the attached media asset. Only used when node_id is set. For batch mode, set captions per item instead."},"caption_ref":{"type":"string","description":"Single render only: caption_ref from clipform_generate_tts - an opaque handle that attaches that TTS run's word-level captions to the media asset, resolved server-side. Preferred over captions. Only used when node_id is set. For batch mode, set caption_ref per item instead."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_render_video_template","description":"Render a curated video template (a pre-arranged Scene: bed + overlay + sane defaults) to MP4 or PNG from a small controls object, instead of hand-assembling Scene layers. Call clipform_list_video_templates first for available template names and their controls. Renders through the Scene composition under the hood.\n\nChoosing a render tool: for a recognisable form/quiz beat (guess-the-city, this-or-that, mystery reveal, multiple choice, photo montage...) reach for a video template first (clipform_list_video_templates + clipform_render_video_template) - it is a one-call recipe. Use clipform_generate_video for a narrated or audio-synced media montage (images/clips timed to a voice track). Use clipform_render_composition only when neither fits and you need a custom layer stack.\nA render for a form node is not done until it is attached to that node. Pass node_id (and form_id) so the completed render attaches itself automatically - do not poll clipform_check_render to completion or manually chain clipform_upload_media_asset + clipform_attach_node_media; fire the render and move on.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"template":{"type":"string","description":"Video template name (see clipform_list_video_templates)."},"controls":{"type":"object","additionalProperties":{},"description":"Template-specific controls (see clipform_list_video_templates for the exposed control surface)."},"outputFormat":{"type":"string","enum":["mp4","png"],"default":"mp4","description":"Output format (default: mp4)"},"wait":{"type":"boolean","default":true,"description":"true (default) blocks until the render is ready and returns its URL; false returns a job ID for clipform_check_render."},"node_id":{"type":"string","description":"Form node to attach this render to automatically once it completes - skips the manual clipform_upload_media_asset + clipform_attach_node_media steps and republishes the form if it's currently live. Requires form_id."},"form_id":{"type":"string","format":"uuid","description":"The form UUID (required when node_id is set)."},"captions":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number","description":"Segment start time in seconds"},"end":{"type":"number","description":"Segment end time in seconds"},"text":{"type":"string","description":"Full segment text"},"words":{"type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"],"additionalProperties":false},"minItems":1,"description":"Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim."}},"required":["start","end","text","words"],"additionalProperties":false},"description":"Word-level captions from clipform_generate_tts - carried onto the attached media asset. Only used when node_id is set."},"caption_ref":{"type":"string","description":"caption_ref from clipform_generate_tts - an opaque handle that attaches that TTS run's word-level captions to the media asset, resolved server-side. Preferred over captions. Only used when node_id is set."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["template","controls","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_search_media","description":"Search images or stock video clips. Pass one query or many (max 10) - multiple queries run in one call instead of separate tool calls. Use results to feed into clipform_generate_video for narrated slideshow videos, or upload directly as still images via clipform_upload_media_asset then clipform_attach_node_media. All results are pre-cleared for commercial use. Results include a description (alt text where the provider has it) - use it to pick visually distinct images.\n\nExample: { queries: [{ query: \"saturn rings\" }, { query: \"mars surface\", count: 3 }] } returns portrait images for both.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"queries":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string","description":"What to search for (e.g. 'african lion', 'saturn rings')"},"kind":{"type":"string","enum":["image","video"],"default":"image","description":"image = stock photos (default), video = stock clips"},"count":{"type":"number","minimum":1,"maximum":20,"default":6,"description":"Max results per provider (default 6 for image, 3 for video)"},"orientation":{"type":"string","enum":["portrait","landscape","any"],"default":"portrait","description":"portrait (default) fills the 9:16 frame; landscape gets auto blur-pad framing in Ken Burns videos"}},"required":["query"],"additionalProperties":false},"minItems":1,"maxItems":10,"description":"One or more search queries to run"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["queries","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_search_music","description":"Search for royalty-free music tracks and ambient sounds. Quiz forms especially benefit from background music - it keeps energy up between questions. Also consider it for multi-step surveys and longer forms. Pass the returned URL as the audio track to clipform_generate_video, or as the audio for the slideshow video template via clipform_render_video_template. Returns download URLs, duration, artist, and license info.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"What to search for (e.g. 'upbeat quiz background', 'calm ambient', 'playful pizzicato')"},"count":{"type":"number","minimum":1,"maximum":10,"default":5,"description":"Max results (default: 5)"},"instrumentalOnly":{"type":"boolean","default":true,"description":"Only instrumental tracks (default: true)"},"minDuration":{"type":"number","description":"Minimum duration in seconds"},"maxDuration":{"type":"number","description":"Maximum duration in seconds"},"tags":{"type":"array","items":{"type":"string"},"description":"Genre/mood tags to filter by"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["query","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_search_news","description":"Fallback news lookup for clients without native web search. Returns structured current-news articles from NewsAPI and The Guardian.\n\nCoverage: recent events, people, and topics (post-May-2025). Does NOT cover timeless topics (history, geography, science). Narrower and less current than native web search tools (WebSearch, web fetch) when available.\n\nReturns: article title, source, author, date, URL, description, and image URL per result.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"News search query (e.g. 'Iran war 2026', 'Australian Open final', 'UK election')"},"count":{"type":"number","minimum":1,"maximum":15,"default":5,"description":"Max results per provider (default 5)"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["query","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_set_logic","description":"Set the next node for one or more nodes, wiring a linear route (A to B to C). Pass multiple nodes in one call instead of separate tool calls. Each node routes to exactly one target node. Branching by which option a respondent picks is not configured here; it is set up in the form's Build tab in the dashboard (the builder URL returned by clipform_get_form / clipform_create_form).\n\nA call replaces that node's routing entirely - it does not merge with any prior target.\n\nExample:\n  nodes: [\n    { node_id: \"q1-id\", rules: [{ target_node_id: \"q2-id\" }] },\n    { node_id: \"q2-id\", rules: [{ target_node_id: \"q3-id\" }] }\n  ]","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"nodes":{"type":"array","items":{"type":"object","properties":{"node_id":{"type":"string","description":"The node ID to set routing on"},"rules":{"type":"array","items":{"type":"object","properties":{"target_node_id":{"type":"string","description":"The node ID this node routes to"}},"required":["target_node_id"],"additionalProperties":false},"minItems":1,"maxItems":1,"description":"Exactly one rule: the single node this node routes to"}},"required":["node_id","rules"],"additionalProperties":false},"minItems":1,"maxItems":20,"description":"One or more nodes to set logic on"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","nodes","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_update_form","description":"Update a form's title, publish status, settings, or tags. Only sends fields that are provided - omitted fields remain unchanged. AI-PROTECTED parameters have restrictions noted in their descriptions.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"title":{"type":"string","description":"New form title"},"is_live":{"type":"boolean","description":"Setting true publishes/republishes the snapshot respondents see. Forms are live from creation, but edits and media attached AFTER creation are not visible until you re-send true - republishing is the expected final step of a build, never skip it after attaching media. Setting false takes the form offline (keeps the last published snapshot) - AI-PROTECTED: only take a form offline when the user explicitly asks."},"show_step_counter":{"type":"boolean","description":"Show step counter (e.g. '1/5'). Recommended for quizzes."},"disable_back_navigation":{"type":"boolean","description":"Prevent respondents from going back. Recommended for quizzes."},"total_steps":{"type":["number","null"],"description":"Override the total step count shown in the step counter. Set null to auto-calculate."},"primary_color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"Primary/brand color as 6-digit hex (e.g. '#FF5500'). Used for buttons and accents."},"background_color":{"type":"string","pattern":"^#[0-9A-Fa-f]{6}$","description":"Background color as 6-digit hex (e.g. '#1A1A2E')."},"font_family":{"type":"string","description":"AI-PROTECTED: Only set when the user explicitly requests a specific font."},"description":{"type":["string","null"],"description":"SEO description (meta description, og:description). Set null to clear."},"author":{"type":["string","null"],"description":"AI-PROTECTED: Only set when the user explicitly provides an author name. Set null to clear."},"logo_url":{"type":["string","null"],"description":"AI-PROTECTED: Only set when the user explicitly provides a logo URL. Set null to clear."},"show_branding":{"type":"boolean","description":"Show Clipform branding. Set false to remove (Pro plan)."},"brand_name":{"type":["string","null"],"description":"AI-PROTECTED: Custom brand name shown in footer. Only set when user explicitly provides."},"tags":{"type":"array","items":{"type":"string"},"description":"Replace all tags on this form. Pass the full desired set (e.g. ['quiz', 'trivia', 'slug:elephants']). Omit to leave tags unchanged."},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_update_node","description":"Update one or more existing nodes' text, type, config, or options. Pass multiple updates in one call instead of separate tool calls. Requires node IDs (returned by clipform_create_form, clipform_add_node, or clipform_get_form). Does not change node positions in the flow. All type definitions and config schemas are derived from @vid-master/config (node-types).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"form_id":{"type":"string","format":"uuid","description":"The form UUID (returned by clipform_create_form, not the short share_id from the URL)"},"updates":{"type":"array","items":{"type":"object","properties":{"node_id":{"type":"string","description":"The node ID to update"},"prompt":{"type":"string","description":"New node prompt text"},"label":{"type":"string","description":"Short label for the node (used in logic builder)"},"type":{"type":"string","enum":["choice","open","details","payment","button","redirect","file_download","end_screen"],"description":"Change the node type"},"required":{"type":"boolean","description":"Whether an answer is required"},"config":{"type":"object","additionalProperties":{},"description":"Type-specific configuration keyed by node type. Omit to use defaults. Per-type keys, shapes, and defaults are listed in the clipform_create_form description; craft guidance via clipform_get_guide. Merged shallowly into the stored config - only the keys you pass are changed. Set a key to null to delete it; nested objects are replaced wholesale. When type is changed in the same call, config replaces the stored configuration instead of merging."},"options":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string","description":"Option text"},"is_correct":{"type":"boolean","description":"Mark this as the correct answer for a quiz (maps to score 1; other options score 0). Use this OR score, not both."},"score":{"type":"number","description":"Score value for this option (for scored quizzes). Use 1 for correct, 0 for wrong. Scored options automatically enable correct-answer marking (record_scores) and correct/incorrect answer feedback on the node; set config.choice.show_answer_feedback: false to hide the feedback."}},"required":["content"],"additionalProperties":false},"description":"Replace all options (for choice nodes). Omit to keep existing options."}},"required":["node_id"],"additionalProperties":false},"minItems":1,"maxItems":20,"description":"One or more node updates to apply"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["form_id","updates","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_upload_media_asset","description":"Put one or more media files into your workspace media library (max 10, uploaded sequentially). This is step one of attaching media to a node - follow up with clipform_attach_node_media to place the returned media_asset_id on a node.\n\nWhen a public URL is provided, the media is fetched and stored automatically. For video: ingested via Mux. For image: stored in Supabase. Word-level captions from clipform_generate_tts enable per-word highlighting in the viewer once attached - pass the caption_ref it returned instead of hand-copying the captions array.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"media_type":{"type":"string","enum":["video","still"],"description":"Type of media"},"media_source":{"type":"string","enum":["uploaded","recorded"],"default":"uploaded","description":"How the media was created"},"url":{"type":"string","format":"uri","description":"Public URL of the media file. When provided, the server fetches and stores it directly."},"captions":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number","description":"Segment start time in seconds"},"end":{"type":"number","description":"Segment end time in seconds"},"text":{"type":"string","description":"Full segment text"},"words":{"type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"start":{"type":"number"},"end":{"type":"number"}},"required":["word","start","end"],"additionalProperties":false},"minItems":1,"description":"Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim."}},"required":["start","end","text","words"],"additionalProperties":false},"description":"Word-level captions from clipform_generate_tts. `words` is a required field on each caption (schema-enforced) - pass the full objects returned by clipform_generate_tts unmodified."},"caption_ref":{"type":"string","description":"caption_ref from clipform_generate_tts - an opaque handle that attaches that TTS run's word-level captions to this asset, resolved server-side. Preferred over captions."},"ai_generated":{"type":"boolean","description":"Whether this media was AI-generated. Drives the viewer's disclosure chip - set true for AI-rendered/synthesized media."}},"required":["media_type"],"additionalProperties":false},"minItems":1,"maxItems":10,"description":"One or more media items to create as workspace library assets"},"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["items","context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"clipform_whoami","description":"Show the current identity: auth mode (api key, oauth, session, or anonymous), active workspace, and plan limits.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"context":{"type":"string","description":"Describe the user's underlying goal in one sentence - not the tool you're calling."}},"required":["context"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_more_tools","description":"Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"context":{"type":"string","description":"A description of your goal and what kind of tool would help accomplish it."}},"required":["context"]}}],"scan":{"score":78,"grade":"B","scanned_at":"2026-09-19T20:55:42.962Z","report":{"scannerVersion":"0.1.7","scannedAt":"2026-09-19T20:55:42.930Z","components":{"code":{"score":20,"max":25,"notes":["23 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 799ms"]},"poisoning":{"score":13,"max":15,"notes":["34 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 8 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 10 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/chunk-I65WITUI.js: …ode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"},{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool clipform_create_form: …Create a new Clipform (interactive video-style form). Returns a viewer URL and form ID. When connected via an authenticated MCP client (e.g. claude.ai), the form lands directly in the user's workspace. Anonymous sessions get a claim URL to transfer ownership later. If the user hasn't said what to build yet, offer to build their first form and suggest starting points: lead-gen, feedback, quiz, or something else. Node types (omit config to use defaults where shown): - choice: Single or multiple choice node with predefined options (supports options array). Config: choice ({enable_branching, show_answer_feedback, record_scores}), selection_mode (\"single\"|\"multiple\", default: \"single\"), allow_text_response (boolean, default: false), randomise_options (boolean, default: false), show_option_count (boolean, default: false), option_display (\"list\"|\"letters\", default: \"list\"). Defaults: {\"selection_mode\":\"single\",\"choice\":{\"enable_branching\":false},\"randomise_options\":false,\"show_option_count\":false,\"option_display\":\"list\"} - open: Free-form text responses from users. Config: formats (array of {format, order}), max_recording_seconds (number, default: 120). Defaults: {\"formats\":[{\"order\":0,\"format\":\"text\"},{\"order\":1,\"format\":\"audio\"},{\"order\":2,\"format\":\"video\"}]} - details: Collect several fields on one screen - name, email, phone, address, date, and more. Config: title (string), fields (array of {id, type, label, order, required, is_custom}), description (string), consent_items (array of {id, name, label, order, type, document, require_scroll_to_accept}), Available field IDs: first_name, last_name, email, phone. Defaults: {\"fields\":[{\"id\":\"first_name\",\"type\":\"first_name\",\"label\":\"First Name\",\"enabled\":true,\"required\":true},{\"id\":\"email\",\"type\":\"email\",\"label\":\"Email\",\"enabled\":true,\"required\":true}],\"consent_items\":[]} - payment: Collect a payment from respondents inline, charged to a connected Stripe account. Config: amount (number), currency (\"usd\"|\"eur\"|\"gbp\"|\"cad\"|\"aud\", default: \"usd\"), provider (\"stripe\"|\"paddle\", default: \"stripe\"), workspace_integration_id (string), title (string), description (string). Defaults: {\"amount\":null,\"currency\":\"usd\",\"provider\":\"stripe\"} - button: Simple button for acknowledgment or navigation (supports options array). Config: button_text (string, default: \"Continue\"), button_style (\"primary\"|\"secondary\"|\"outline\", default: \"primary\") - redirect: Redirect users to an external URL. Config: url (string), auto_redirect (boolean, default: true). Defaults: {\"url\":\"\",\"auto_redirect\":true} - file_download: Provide a file for respondents to download. Config: files (array of {file_name, display_name, file_path, file_size, mime_type}), button_text (string, default: \"Continue\"), description (string) - end_screen: Final screen shown when form is completed. Config: title (string, default: \"Thank you!\"), message (string, default: \"Your response has been submitted.\"), icon (\"tick\"|\"trophy\"|\"star\"|\"crown\"|\"party\"|\"none\", default: \"tick\"), show_share_button (boolean, default: false), cta_type (\"none\"|\"restart\"|\"external_link\", default: \"none\"), cta_text (string, default: \"Continue\"), cta_url (string). Defaults: {\"title\":\"Thank you!\",\"message\":\"Your response has been submitted.\"} All type definitions and config schemas are derived from @vid-master/config (node-types). Refer to the config descriptions above for the correct keys and shapes. AI-PROTECTED parameters have restrictions noted in their descriptions. Example: A form that asks a question, collects contact info, then finishes: { title: \"Quick Survey\", nodes: [ { type: \"open\", prompt: \"What's your biggest challenge?\" }, { type: \"details\", prompt: \"Leave your details\", config: { fields: [{ id: \"first_name\", required: true }, { id: \"email\", required: true }] } }, { type: \"end_screen\", prompt: \"Thanks for your response!\" } ] }…"}],"inputs":{"probes":[{"url":"https://mcp.clipform.io","reachable":true,"authRequired":false,"latencyMs":799,"serverInfo":{"name":"clipform-mcp-server","version":"2.15.10"}}],"packages":[{"registryType":"npm","identifier":"@clipform/mcp-server","version":"2.15.5","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":0,"publishedAt":"2026-09-09T11:56:35.750Z","repositoryUrl":"https://github.com/clipform/mcp-server.git","weeklyDownloads":681}],"repo":{"found":true,"owner":"clipform","repo":"mcp-server","archived":false,"pushedAt":"2026-09-09T11:57:21Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/292353269?v=4","ownerCreatedAt":"2026-06-10T07:08:37Z"},"icon":{"url":"https://www.clipform.io/apple-touch-icon.png","source":"registry","width":180,"height":180},"presence":{"stars":0,"forks":0,"downloadsWeek":681,"license":"MIT","lastPushAt":"2026-09-09T11:57:21.000Z","score":37}}}},"grade_history":[],"reviews":[]}