Clipform
Was dieses MCP kann
Builds interactive video forms and quizzes, manages form logic and responses, and generates or renders narrated video, audio, graphics, and other media assets.
Tools
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'node', 'context'], 'properties': {'node': {'type': 'object', 'required': ['type', 'prompt'], 'properties': {'type': {'enum': ['choice', 'open', 'details', 'payment', 'button', 'redirect', 'file_download', 'end_screen'], 'type': 'string'}, 'label': {'type': 'string', 'description': 'Short label for the node (used in logic builder). Defaults to the prompt text.'}, 'config': {'type': 'object', '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.', 'additionalProperties': {}}, 'prompt': {'type': 'string', 'description': 'The text shown to the respondent'}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['content'], 'properties': {'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.'}, '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.'}}, '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': 'boolean', 'default': True}}, 'description': 'The node to add', 'additionalProperties': False}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'form_id': {'type': 'string', 'format': 'uuid', 'description': 'The form UUID (returned by clipform_create_form, not the short share_id from the URL)'}, 'after_node_id': {'type': 'string', 'description': 'Insert after this node ID. Omit to append before the end screen.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['node_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Node type that was added'}, 'node_id': {'type': 'string', 'description': 'ID of the created node - pass to update_node / attach_node_media'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'items', 'context'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['node_id', 'media_asset_id'], 'properties': {'node_id': {'type': 'string', 'description': 'The node ID'}, '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.'}, 'media_asset_id': {'type': 'string', 'description': 'A media asset ID returned by clipform_upload_media_asset'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, '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."}, 'form_id': {'type': 'string', 'format': 'uuid', 'description': 'The form UUID (returned by clipform_create_form, not the short share_id from the URL)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['node_id', 'ok'], 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string'}, 'node_id': {'type': 'string'}, 'media_asset_id': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'One result per item, in order'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['context'], 'properties': {'job_id': {'type': 'string', 'format': 'uuid', 'description': 'A single job ID returned by the render tool'}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'job_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid'}, 'maxItems': 20, 'minItems': 1, 'description': 'Multiple job IDs - check the whole batch in one call instead of one call per job'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['jobs'], 'properties': {'jobs': {'type': 'array', 'items': {'type': 'object', 'required': ['job_id', 'status'], 'properties': {'error': {'type': 'string'}, 'job_id': {'type': 'string'}, 'status': {'enum': ['rendering', 'complete', 'failed', 'not_found'], 'type': 'string'}, 'attached': {'type': 'boolean', 'description': "True when the render's node_id was set and it attached to the node automatically."}, 'public_url': {'type': 'string'}, 'republished': {'type': 'boolean', 'description': 'True when the form was live and was republished to include this media.'}, 'attach_error': {'type': 'string', 'description': 'Present when node_id was set but auto-attach failed - the render itself still succeeded.'}, 'media_asset_id': {'type': 'string', 'description': 'The workspace media asset created from this render, when attached.'}, 'elapsed_seconds': {'type': 'number'}, 'duration_seconds': {'type': 'number'}}, 'additionalProperties': False}, 'description': 'One entry per queried job; attach completed public_urls via upload_media_asset then attach_node_media unless already auto-attached'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['media_asset_id', 'context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'media_asset_id': {'type': 'string', 'format': 'uuid', 'description': 'The media_asset_id returned by clipform_upload_media_asset for the still image'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['media_asset_id', 'status'], 'properties': {'status': {'type': 'string', 'description': "The asset's status after this call - ready on success, or its already-settled status when called again (noop)"}, 'media_asset_id': {'type': 'string'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['title', 'nodes', 'context'], 'properties': {'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': "Tags for indexing (e.g. ['quiz', 'trivia', 'arsenal']). Include format, genre, and topics."}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'prompt'], 'properties': {'type': {'enum': ['choice', 'open', 'details', 'payment', 'button', 'redirect', 'file_download', 'end_screen'], 'type': 'string'}, 'label': {'type': 'string', 'description': 'Short label for the node (used in logic builder). Defaults to the prompt text.'}, 'config': {'type': 'object', '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.', 'additionalProperties': {}}, 'prompt': {'type': 'string', 'description': 'The text shown to the respondent'}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['content'], 'properties': {'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.'}, '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.'}}, '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': 'boolean', 'default': True}}, 'additionalProperties': False}, 'minItems': 1, 'description': 'Ordered list of nodes/steps for the form'}, 'title': {'type': 'string', 'description': 'Form title'}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'font_family': {'type': 'string', 'description': 'AI-PROTECTED: Only set when the user explicitly requests a specific font.'}, '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')."}, '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.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'viewer_url', 'nodes'], 'properties': {'plan': {'type': 'object', 'required': ['name', 'auth_mode'], 'properties': {'name': {'type': 'string'}, 'auth_mode': {'type': 'string'}}, 'description': 'Plan and auth context for this session', 'additionalProperties': False}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'prompt'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string'}, 'prompt': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Created nodes in order - IDs for attach_node_media / update_node'}, 'form_id': {'type': 'string', 'description': 'Form UUID - pass to follow-up tools'}, 'viewer_url': {'type': 'string', 'description': 'Form URL for respondents - a live public URL once authenticated/published, or a scoped preview-only link for an anonymous session'}, 'dashboard_url': {'type': 'string', 'description': 'Builder URL (sign in to edit)'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'context'], 'properties': {'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."}, '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)'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'node_id', 'context'], 'properties': {'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."}, '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'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'node_id', 'context'], 'properties': {'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."}, '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'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query', 'context'], 'properties': {'type': {'enum': ['country', 'city', 'state', 'region'], 'type': 'string', 'default': 'country', 'description': 'Type of place to search for'}, 'query': {'type': 'string', 'description': "Place name (e.g. 'France', 'Paris', 'Tokyo', 'Brazil')"}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'maxPoints': {'type': 'number', 'default': 500, 'description': 'Maximum points per polygon ring for simplification (default 500, lower = smaller payload)'}, 'mainlandOnly': {'type': 'boolean', 'default': True, 'description': 'Keep only the largest landmass, excluding small islands and overseas territories'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'geometry_type', 'size_kb', 'mainland_only', 'geojson'], 'properties': {'name': {'type': 'string', 'description': 'Resolved place name'}, 'geojson': {'type': 'string', 'description': 'The Feature GeoJSON as a JSON string - use as the boundary prop in the Map composition'}, 'size_kb': {'type': 'number', 'description': 'Approximate size of the returned GeoJSON in KB'}, 'geometry_type': {'enum': ['Polygon', 'MultiPolygon'], 'type': 'string'}, 'mainland_only': {'type': 'boolean'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['items', 'context'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 5000, 'minLength': 1, 'description': 'Narration text'}, '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."}, 'voice': {'enum': ['ryan', 'sonia', 'andrew', 'ava', 'guy'], 'type': 'string', '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.'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, '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."}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['ok'], 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string'}, 'captions': {'type': 'array', 'items': {'type': 'object', 'required': ['start', 'end', 'text', 'words'], 'properties': {'end': {'type': 'number'}, 'text': {'type': 'string'}, 'start': {'type': 'number'}, 'words': {'type': 'array', 'items': {'type': 'object', 'required': ['word', 'start', 'end'], 'properties': {'end': {'type': 'number'}, 'word': {'type': 'string'}, 'start': {'type': 'number'}}, 'additionalProperties': False}, 'minItems': 1}}, 'additionalProperties': False}, 'description': 'Word-level captions, for reference only - prefer passing caption_ref downstream instead of copying this array.'}, 'audio_url': {'type': 'string'}, 'caption_ref': {'type': 'string', 'description': "Pass this as the caption_ref param on clipform_render_composition / clipform_render_video_template / clipform_upload_media_asset to attach this run's word-level captions - never hand-copy the captions array."}}, 'additionalProperties': False}, 'description': 'One result per item, in order'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['items', 'context'], 'properties': {'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.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'url'], 'properties': {'fit': {'enum': ['cover', 'blur-pad', 'auto'], 'type': 'string', 'description': 'Framing mode (image only). auto = cover for portrait, blur-pad for landscape.'}, 'url': {'type': 'string', 'format': 'uri', 'description': 'Media URL'}, 'type': {'enum': ['image', 'video'], 'type': 'string', 'description': "'image' for still images with Ken Burns effects, 'video' for video clips"}, 'effect': {'enum': ['pan-left', 'pan-right', 'pan-up', 'pan-down', 'zoom-in-pan-left', 'zoom-in-pan-right', 'zoom-in', 'zoom-out', 'static', 'random'], 'type': 'string', 'description': "Advanced override: a specific Ken Burns effect (image only), overriding the preset look's own effect choice"}, 'volume': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Clip audio volume 0-1 (video only, default 0 = muted)'}, 'start_from': {'type': 'number', 'minimum': 0, 'description': 'Start time in seconds (video only). Trims the clip.'}, 'aspect_ratio': {'type': 'number', 'description': 'Image width/height ratio (image only). Enables auto blur-pad for landscape images.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, 'description': 'Media items (images, video clips, or a mix)'}, 'preset': {'enum': ['clean', 'editorial', 'punchy', 'bold-poster'], 'type': 'string', '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."}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'duotone': {'type': 'object', 'required': ['shadow', 'highlight'], 'properties': {'shadow': {'type': 'string', 'description': "Darker tone (maps to image shadows), e.g. '#1a1633'"}, 'contrast': {'type': 'number', 'description': 'Contrast boost before mapping (default 1.1)', 'exclusiveMinimum': 0}, 'highlight': {'type': 'string', 'description': "Lighter tone (maps to image highlights), e.g. '#f5c542'"}}, '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.", 'additionalProperties': False}, 'form_id': {'type': 'string', 'format': 'uuid', 'description': 'The form UUID (required when node_id is set).'}, '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."}, 'texture': {'type': 'object', 'required': ['type'], 'properties': {'type': {'enum': ['checker', 'halftone', 'scanlines'], 'type': 'string', 'description': 'checker = square dither mesh, halftone = dot grid, scanlines = horizontal lines'}, 'sizePx': {'type': 'number', 'description': 'Pattern cell size in px (default 4)', 'exclusiveMinimum': 0}, 'opacity': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'Pattern darkness 0-1 (default 0.35)'}}, '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)", 'additionalProperties': False}, 'captions': {'type': 'array', 'items': {'type': 'object', 'required': ['start', 'end', 'text', 'words'], 'properties': {'end': {'type': 'number', 'description': 'Segment end time in seconds'}, 'text': {'type': 'string', 'description': 'Full segment text'}, 'start': {'type': 'number', 'description': 'Segment start time in seconds'}, 'words': {'type': 'array', 'items': {'type': 'object', 'required': ['word', 'start', 'end'], 'properties': {'end': {'type': 'number'}, 'word': {'type': 'string'}, 'start': {'type': 'number'}}, 'additionalProperties': False}, 'minItems': 1, 'description': 'Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim.'}}, 'additionalProperties': False}, 'description': 'Word-level captions from clipform_generate_tts - carried onto the attached media asset. Only used when node_id is set.'}, 'audio_url': {'type': 'string', 'format': 'uri', 'description': 'Audio track URL. Video duration matches audio duration.'}, 'transition': {'type': 'object', 'properties': {'type': {'enum': ['fade', 'slide', 'wipe', 'none'], 'type': 'string', 'description': "Advanced override: fade, slide, wipe, none - overrides the preset look's own transition"}, 'duration': {'type': 'number', 'maximum': 5, 'minimum': 0.1, 'description': "Advanced override: transition duration in seconds (0.1-5). For a hard cut use type: 'none' instead - duration is ignored then."}}, 'description': "Advanced: overrides the preset look's transition", 'additionalProperties': False}, 'style_preset': {'enum': ['cinematic', 'dramatic', 'calm', 'documentary', 'dreamy', 'moody', 'energetic'], 'type': 'string', 'description': "Advanced override: a raw Ken Burns motion preset, overriding the preset look's own motion."}, 'random_effects': {'type': 'boolean', 'default': True, 'description': 'Shuffle Ken Burns effects across image items (default: true)'}, 'background_color': {'type': 'string', 'description': "Advanced override: background color, overriding the preset look's own background (default '#000')"}, 'duration_seconds': {'type': 'number', 'description': 'Video duration in seconds (required if no audio_url)', 'exclusiveMinimum': 0}, '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', 'maximum': 1, 'minimum': 0, 'description': 'Background bed volume 0-1 (default 0.15 - sits under speech)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status'], 'properties': {'job_id': {'type': 'string', 'description': "Present when status is 'rendering' - pass to check_render"}, 'status': {'enum': ['rendering', 'complete'], 'type': 'string', 'description': "'rendering' when wait:false (poll check_render); 'complete' with a public_url when wait:true"}, 'attached': {'type': 'boolean', 'description': 'True when node_id was provided and the render was attached to the node automatically (present once the attach outcome is known).'}, 'public_url': {'type': 'string', 'description': "Present when status is 'complete' - attach via upload_media_asset then attach_node_media (fit_media: true), unless node_id was set (auto-attached)"}, 'republished': {'type': 'boolean', 'description': 'True when the form was live and was republished to include this media.'}, 'attach_error': {'type': 'string', 'description': 'Present when node_id was provided but auto-attach failed - the render itself still succeeded.'}, 'media_asset_id': {'type': 'string', 'description': 'The workspace media asset created from this render, when attached.'}, 'duration_seconds': {'type': 'number'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'form_id': {'type': 'string', 'format': 'uuid', 'description': 'The form UUID (returned by clipform_create_form, not the short share_id from the URL)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'title', 'is_live', 'has_unpublished_changes', 'nodes'], 'properties': {'urls': {'type': 'object', 'properties': {'embed': {'type': 'string', 'description': 'Embed setup for websites. Not present for an anonymous caller.'}, 'share': {'type': 'string', 'description': 'Share tab - link, QR, social. Not present for an anonymous caller.'}, 'viewer': {'type': 'string', 'description': "Live respondent link, or a scoped preview link for an anonymous caller's draft. Omitted for a non-anonymous caller's unpublished draft."}, 'builder': {'type': 'string', 'description': 'Build tab - the node/canvas editor. Not present for an anonymous caller.'}, 'summary': {'type': 'string', 'description': 'Summary tab - form overview and key stats. Not present for an anonymous caller.'}, 'analytics': {'type': 'string', 'description': 'Analytics tab - views, starts, completion rate, drop-off per node. Not present for an anonymous caller.'}, 'responses': {'type': 'string', 'description': 'Responses tab - individual submissions. Not present for an anonymous caller.'}, 'dynamic_link': {'type': 'string', 'description': 'Dynamic/personalized link setup. Not present for an anonymous caller.'}}, 'description': "Dashboard/viewer deeplinks for this form. An anonymous caller gets only 'viewer'.", 'additionalProperties': False}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'prompt', 'required'], 'properties': {'id': {'type': 'string'}, 'next': {'type': 'object', 'required': ['target_id', 'target_type'], 'properties': {'target_id': {'type': 'string', 'description': 'The node/screen ID this node routes to'}, 'target_type': {'enum': ['node', 'end_screen', 'redirect', 'link_list'], 'type': 'string', 'description': 'What kind of target target_id is'}}, 'description': "This node's outgoing edge, set via clipform_set_logic. Omitted for a chain tail or terminal node.", 'additionalProperties': False}, 'type': {'type': 'string'}, 'config': {'type': 'object', 'additionalProperties': {}}, 'prompt': {'type': 'string'}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'content'], 'properties': {'id': {'type': 'string'}, 'content': {'type': 'string'}}, 'additionalProperties': False}}, 'required': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': 'Nodes in sequential order - IDs for update_node / attach_node_media'}, 'title': {'type': 'string', 'description': 'Form title'}, 'form_id': {'type': 'string', 'description': 'Form UUID'}, 'is_live': {'type': 'boolean', 'description': 'Whether the form is published'}, 'has_unpublished_changes': {'type': 'boolean', 'description': 'Live form has edits not yet republished'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['type', 'context'], 'properties': {'type': {'type': 'string', 'description': "Form type to get the craft guide for (accepts aliases like 'feedback' → survey)"}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'variant': {'enum': ['personality', 'comprehension', 'composition'], 'type': 'string', 'description': "Quiz sub-variant. Only used when type is 'quiz'. Omit for a standard scored quiz."}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'node_id', 'context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, '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'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['media'], 'properties': {'media': {'anyOf': [{'type': 'object', 'required': ['media_type', 'status'], 'properties': {'status': {'type': 'string'}, 'duration': {'type': 'number'}, 'media_type': {'type': 'string'}, 'transcription_status': {'type': ['string', 'null']}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Attached media (null if the node has none)'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'context'], 'properties': {'sort': {'enum': ['newest', 'oldest'], 'type': 'string', 'description': 'Order by submission time. Default: newest'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Max responses to return (default 20, max 50)'}, 'query': {'type': 'string', 'description': 'Only responses whose text answers contain this string (case-insensitive)'}, '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'}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'form_id': {'type': 'string', 'description': 'Form UUID (from clipform_list_forms / clipform_create_form)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['total_matching', 'returned', 'locked_over_plan_limit', 'responses'], 'properties': {'returned': {'type': 'number', 'description': 'Responses in this result'}, 'responses': {'type': 'array', 'items': {'type': 'object', 'required': ['submitted_at', 'status', 'answers'], 'properties': {'status': {'type': 'string'}, 'answers': {'type': 'array', 'items': {'type': 'object', 'required': ['question', 'type', 'answer'], 'properties': {'type': {'type': 'string'}, 'answer': {'type': 'string', 'description': 'Text answer, or a redaction placeholder'}, 'question': {'type': 'string'}}, 'additionalProperties': False}}, 'submitted_at': {'type': 'string', 'description': 'ISO 8601 submission time'}}, 'additionalProperties': False}, 'description': 'Matching responses, filtered/sorted/capped per the inputs'}, 'total_matching': {'type': 'number', 'description': 'Responses matching the filters (before the limit cap)'}, 'locked_over_plan_limit': {'type': 'number', 'description': "Matching responses hidden by the plan's response limit"}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'form_id': {'type': 'string', 'description': 'The form UUID (returned by clipform_create_form, not the short share_id from the URL)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['total_responses', 'nodes'], 'properties': {'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['node_id', 'node_type', 'prompt', 'total_responses', 'total_views'], 'properties': {'prompt': {'type': 'string'}, 'node_id': {'type': 'string'}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'count', 'percentage'], 'properties': {'count': {'type': 'number'}, 'label': {'type': 'string'}, 'percentage': {'type': 'number'}}, 'additionalProperties': False}, 'description': 'Answer breakdown - choice and action-category (booking/file_download/shopping) nodes only'}, 'node_type': {'type': 'string'}, 'total_views': {'type': 'number'}, 'recent_answers': {'type': 'array', 'items': {'type': 'object', 'required': ['text', 'submitted_at'], 'properties': {'text': {'type': 'string'}, 'submitted_at': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Most recent open-text answers, capped at 20 - open questions only'}, 'total_responses': {'type': 'number'}}, 'additionalProperties': False}, 'description': 'Nodes in form order. Contact/file/draw/camera/payment nodes carry only total_responses/total_views - no per-response detail.'}, 'results_url': {'type': 'string', 'description': 'Dashboard Responses tab for this form. Not present for an anonymous caller.'}, 'total_responses': {'type': 'number', 'description': 'Total unique respondents to the form'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['type', 'context'], 'properties': {'role': {'type': 'string', 'description': 'What the application is for (application)'}, 'type': {'type': 'string', 'description': "Form type to get the build workflow for (accepts aliases like 'feedback' → survey)"}, 'topic': {'type': 'string', 'description': 'Topic or theme (quiz, survey)'}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'purpose': {'type': 'string', 'description': "What you're collecting (interview)"}, 'variant': {'enum': ['personality', 'comprehension', 'composition'], 'type': 'string', 'description': "Quiz sub-variant. Only used when type is 'quiz'. Omit for a standard scored quiz."}, 'audience': {'type': 'string', 'description': 'Target audience (quiz variant: comprehension)'}, 'criteria': {'type': 'string', 'description': 'Routing criteria (funnel)'}, 'outcomes': {'type': 'string', 'description': 'Segments or recommendations (funnel)'}, 'use_case': {'type': 'string', 'description': 'What stories to collect (testimonial)'}, 'anonymous': {'type': 'boolean', 'description': 'Anonymous survey (survey)'}, 'categories': {'type': 'string', 'description': 'Comma-separated outcome categories (quiz variant: personality)'}, 'event_name': {'type': 'string', 'description': 'Event or offering name (booking)'}, 'event_type': {'type': 'string', 'description': 'Type of event (booking)'}, 'youtube_url': {'type': 'string', 'description': 'YouTube video URL (quiz variant: comprehension)'}, 'needs_consent': {'type': 'boolean', 'description': 'Include consent statement (interview)'}, 'needs_contact': {'type': 'boolean', 'description': 'Include contact capture (funnel)'}, 'question_count': {'type': 'number', 'description': 'Number of questions, default 8 (quiz types)'}, 'response_format': {'enum': ['video', 'audio', 'text', 'all'], 'type': 'string', 'description': 'How respondents reply (interview)'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url', 'context'], '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."}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'viewer_url', 'import_summary'], 'properties': {'form_id': {'type': ['string', 'null'], 'description': "New form's UUID - pass to follow-up tools. Null when no importable questions were found (nothing was created)."}, 'viewer_url': {'type': ['string', 'null'], 'description': 'The address this form WILL be live at once published (clipform_update_form with is_live: true) - it is a draft and is NOT viewable by anyone yet; opening it now shows a maintenance screen, not the form. Null when no importable questions were found.'}, 'import_summary': {'type': 'object', 'required': ['title', 'total_questions', 'imported', 'skipped', 'skipped_details', 'warnings'], 'properties': {'title': {'type': 'string', 'description': 'Title of the source form'}, 'skipped': {'type': 'number', 'description': 'Questions that could not be converted'}, 'imported': {'type': 'number', 'description': 'Questions successfully converted into Clipform nodes'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Non-fatal issues surfaced during the import'}, 'skipped_details': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'description': 'Per-skipped-question title, reason, and source question type'}, 'total_questions': {'type': 'number', 'description': 'Total questions found in the source form'}}, 'additionalProperties': False}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['context'], 'properties': {'type': {'enum': ['sfx', 'animation', 'font', 'all'], 'type': 'string', '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."}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['sfx', 'animations', 'fonts'], 'properties': {'sfx': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'path': {'type': 'string'}, 'description': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'fonts': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'weights': {'type': 'array', 'items': {'type': ['string', 'number']}}}, 'additionalProperties': False}}, 'animations': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'path': {'type': 'string'}, 'description': {'type': ['string', 'null']}}, 'additionalProperties': False}}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['compositions'], 'properties': {'compositions': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'width', 'height', 'fps', 'durationInFrames', 'props'], 'properties': {'id': {'type': 'string'}, 'fps': {'type': 'number'}, 'props': {'type': 'string', 'description': 'Compact props summary (name*: type)'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'propsSchema': {'type': 'object', 'description': 'Full JSON Schema for inputProps', 'additionalProperties': {}}, 'durationInFrames': {'type': 'number'}}, 'additionalProperties': False}, 'description': 'Available compositions - pass an id to render_composition'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['context'], 'properties': {'tag': {'type': 'string', 'description': 'Filter by tag name(s), comma-separated. AND logic: only forms with ALL tags are returned.'}, 'sort': {'enum': ['created_at', 'updated_at'], 'type': 'string', 'description': 'Sort field (default: created_at)'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Number of forms to return (default 25, max 100)'}, 'order': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Sort order (default: desc, newest first)'}, 'cursor': {'type': 'string', 'description': "Pagination cursor from previous response's next_cursor"}, '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.'}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'published': {'enum': ['true', 'false'], 'type': 'string', 'description': 'Filter by publish status'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['forms', 'next_cursor'], 'properties': {'forms': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'share_id', 'is_live', 'has_unpublished_changes', 'tags'], 'properties': {'id': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'color'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'color': {'type': ['string', 'null']}}, 'additionalProperties': False}}, 'title': {'type': 'string'}, 'is_live': {'type': 'boolean'}, 'share_id': {'type': 'string'}, 'viewer_url': {'type': 'string', 'description': 'Live respondent link. Only present for a published (is_live) form, and not for an anonymous caller.'}, 'builder_url': {'type': 'string', 'description': 'Dashboard Build tab for this form. Not present for an anonymous caller.'}, 'has_unpublished_changes': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': 'Matching forms (empty if none)'}, 'next_cursor': {'type': ['string', 'null'], 'description': 'Pass as cursor to fetch the next page, or null when no more'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['templates'], 'properties': {'templates': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'tier', 'description', 'keywords', 'controls'], 'properties': {'name': {'type': 'string'}, 'tier': {'type': 'string'}, 'controls': {'type': 'array', 'items': {'type': 'string'}, 'description': "Control names, '?'-suffixed when optional"}, 'keywords': {'type': 'array', 'items': {'type': 'string'}, 'description': "Natural-language phrases a user's intent might match against this template"}, 'description': {'type': 'string'}, 'exampleControls': {'type': 'object', 'description': 'A worked, ready-to-render controls object for this template - copy and adapt it', 'additionalProperties': {}}}, 'additionalProperties': False}, 'description': 'Available video templates - pass a name + controls to clipform_render_video_template'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'summary', 'details', 'context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'details': {'type': 'object', 'properties': {'images': {'type': 'array', 'items': {'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string'}, 'license': {'type': 'string'}, 'attribution': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Images used with attribution'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['title'], 'properties': {'url': {'type': 'string'}, 'type': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Knowledge sources used'}}, 'description': 'Content sources and attributions', 'additionalProperties': False}, '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'}}}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['context'], 'properties': {'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', 'required': ['compositionId'], 'properties': {'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', 'required': ['start', 'end', 'text', 'words'], 'properties': {'end': {'type': 'number', 'description': 'Segment end time in seconds'}, 'text': {'type': 'string', 'description': 'Full segment text'}, 'start': {'type': 'number', 'description': 'Segment start time in seconds'}, 'words': {'type': 'array', 'items': {'type': 'object', 'required': ['word', 'start', 'end'], 'properties': {'end': {'type': 'number'}, 'word': {'type': 'string'}, 'start': {'type': 'number'}}, 'additionalProperties': False}, 'minItems': 1, 'description': 'Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim.'}}, 'additionalProperties': False}, 'description': 'Word-level captions from clipform_generate_tts - carried onto the attached media asset. Only used when node_id is set.'}, 'inputProps': {'type': 'object', 'description': "Props matching the composition's schema - validated strictly", 'additionalProperties': {}}, '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."}, 'outputFormat': {'enum': ['mp4', 'png'], 'type': 'string', 'default': 'mp4', 'description': 'Output format (default: mp4)'}, 'compositionId': {'type': 'string', 'description': 'The composition ID (see clipform_list_compositions)'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, '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.'}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, '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).'}, '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.'}, '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.'}, 'inputProps': {'type': 'object', '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`.", 'additionalProperties': {}}, '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."}, 'outputFormat': {'enum': ['mp4', 'png'], 'type': 'string', 'default': 'mp4', 'description': 'Single render: output format (default: mp4)'}, '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."}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['jobs'], 'properties': {'jobs': {'type': 'array', 'items': {'type': 'object', 'required': ['status'], 'properties': {'job_id': {'type': 'string', 'description': "Present when status is 'rendering' - pass to check_render"}, 'status': {'enum': ['rendering', 'complete'], 'type': 'string'}, 'attached': {'type': 'boolean', 'description': 'True when node_id was provided and the render was attached to the node automatically (present once the attach outcome is known).'}, 'public_url': {'type': 'string', 'description': "Present when status is 'complete' - attach via upload_media_asset then attach_node_media (fit_media: true), unless node_id was set (auto-attached)"}, 'republished': {'type': 'boolean', 'description': 'True when the form was live and was republished to include this media.'}, 'attach_error': {'type': 'string', 'description': 'Present when node_id was provided but auto-attach failed - the render itself still succeeded.'}, 'output_format': {'type': 'string'}, 'composition_id': {'type': 'string'}, 'media_asset_id': {'type': 'string', 'description': 'The workspace media asset created from this render, when attached.'}}, 'additionalProperties': False}, 'description': 'One entry per render (single or batch)'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['template', 'controls', 'context'], 'properties': {'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.'}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'form_id': {'type': 'string', 'format': 'uuid', 'description': 'The form UUID (required when node_id is set).'}, '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."}, 'captions': {'type': 'array', 'items': {'type': 'object', 'required': ['start', 'end', 'text', 'words'], 'properties': {'end': {'type': 'number', 'description': 'Segment end time in seconds'}, 'text': {'type': 'string', 'description': 'Full segment text'}, 'start': {'type': 'number', 'description': 'Segment start time in seconds'}, 'words': {'type': 'array', 'items': {'type': 'object', 'required': ['word', 'start', 'end'], 'properties': {'end': {'type': 'number'}, 'word': {'type': 'string'}, 'start': {'type': 'number'}}, 'additionalProperties': False}, 'minItems': 1, 'description': 'Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim.'}}, 'additionalProperties': False}, 'description': 'Word-level captions from clipform_generate_tts - carried onto the attached media asset. Only used when node_id is set.'}, 'controls': {'type': 'object', 'description': 'Template-specific controls (see clipform_list_video_templates for the exposed control surface).', 'additionalProperties': {}}, 'template': {'type': 'string', 'description': 'Video template name (see clipform_list_video_templates).'}, '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."}, 'outputFormat': {'enum': ['mp4', 'png'], 'type': 'string', 'default': 'mp4', 'description': 'Output format (default: mp4)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status'], 'properties': {'job_id': {'type': 'string', 'description': "Present when status is 'rendering' - pass to clipform_check_render"}, 'status': {'enum': ['rendering', 'complete'], 'type': 'string'}, 'attached': {'type': 'boolean', 'description': 'True when node_id was provided and the render was attached to the node automatically (present once the attach outcome is known).'}, 'template': {'type': 'string'}, 'public_url': {'type': 'string', 'description': "Present when status is 'complete' - attach via upload_media_asset then attach_node_media (fit_media: true), unless node_id was set (auto-attached)"}, 'republished': {'type': 'boolean', 'description': 'True when the form was live and was republished to include this media.'}, 'attach_error': {'type': 'string', 'description': 'Present when node_id was provided but auto-attach failed - the render itself still succeeded.'}, 'output_format': {'type': 'string'}, 'media_asset_id': {'type': 'string', 'description': 'The workspace media asset created from this render, when attached.'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['queries', 'context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'queries': {'type': 'array', 'items': {'type': 'object', 'required': ['query'], 'properties': {'kind': {'enum': ['image', 'video'], 'type': 'string', 'default': 'image', 'description': 'image = stock photos (default), video = stock clips'}, 'count': {'type': 'number', 'default': 6, 'maximum': 20, 'minimum': 1, 'description': 'Max results per provider (default 6 for image, 3 for video)'}, 'query': {'type': 'string', 'description': "What to search for (e.g. 'african lion', 'saturn rings')"}, 'orientation': {'enum': ['portrait', 'landscape', 'any'], 'type': 'string', 'default': 'portrait', 'description': 'portrait (default) fills the 9:16 frame; landscape gets auto blur-pad framing in Ken Burns videos'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, 'description': 'One or more search queries to run'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['searches'], 'properties': {'searches': {'type': 'array', 'items': {'type': 'object', 'required': ['query', 'kind', 'items'], 'properties': {'kind': {'enum': ['image', 'video'], 'type': 'string'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string'}, 'title': {'type': 'string'}, 'width': {'type': 'number'}, 'height': {'type': 'number'}, 'source': {'type': 'string'}, 'duration': {'type': 'number'}, 'attribution': {'type': 'string'}}, 'additionalProperties': False}}, 'query': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Results grouped by query (items empty if a query found nothing or failed)'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query', 'context'], 'properties': {'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': "Genre/mood tags to filter by. Multiple tags are ANDed together (e.g. ['ambient', 'chill'] matches tracks tagged both)."}, 'count': {'type': 'integer', 'default': 5, 'maximum': 10, 'minimum': 1, 'description': 'Max results (default: 5)'}, 'query': {'type': 'string', 'minLength': 1, 'description': "What to search for (e.g. 'upbeat quiz background', 'calm ambient', 'playful pizzicato')"}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'maxDuration': {'type': 'number', 'description': 'Maximum duration in seconds', 'exclusiveMinimum': 0}, 'minDuration': {'type': 'number', 'description': 'Minimum duration in seconds', 'exclusiveMinimum': 0}, 'instrumentalOnly': {'type': 'boolean', 'default': True, 'description': 'Only instrumental tracks (default: true)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query', 'tracks'], 'properties': {'query': {'type': 'string'}, 'tracks': {'type': 'array', 'items': {'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string'}, 'title': {'type': 'string'}, 'artist': {'type': 'string'}, 'source': {'type': 'string'}, 'license': {'type': 'string'}, 'duration': {'type': 'number'}}, 'additionalProperties': False}, 'description': 'Matching tracks (empty if none); pass a url as the audio track to generate_video'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query', 'context'], 'properties': {'count': {'type': 'number', 'default': 5, 'maximum': 15, 'minimum': 1, 'description': 'Max results per provider (default 5)'}, 'query': {'type': 'string', 'description': "News search query (e.g. 'Iran war 2026', 'Australian Open final', 'UK election')"}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query', 'articles'], 'properties': {'query': {'type': 'string'}, 'articles': {'type': 'array', 'items': {'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string'}, 'title': {'type': 'string'}, 'author': {'type': 'string'}, 'source': {'type': 'string'}, 'image_url': {'type': 'string'}, 'description': {'type': 'string'}, 'published_at': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'Matching articles (empty if none)'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'nodes', 'context'], 'properties': {'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['node_id', 'rules'], 'properties': {'rules': {'type': 'array', 'items': {'type': 'object', 'required': ['target_node_id'], 'properties': {'target_node_id': {'type': 'string', 'description': 'The node ID this node routes to'}}, 'additionalProperties': False}, 'maxItems': 1, 'minItems': 1, 'description': 'Exactly one rule: the single node this node routes to'}, 'node_id': {'type': 'string', 'description': 'The node ID to set routing on'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, '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."}, 'form_id': {'type': 'string', 'format': 'uuid', 'description': 'The form UUID (returned by clipform_create_form, not the short share_id from the URL)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['node_id', 'ok'], 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string'}, 'node_id': {'type': 'string'}, 'rules_count': {'type': 'number'}}, 'additionalProperties': False}, 'description': 'One result per node, in order'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'context'], 'properties': {'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."}, 'title': {'type': 'string', 'description': 'New form title'}, 'author': {'type': ['string', 'null'], 'description': 'AI-PROTECTED: Only set when the user explicitly provides an author name. Set null to clear.'}, 'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, 'form_id': {'type': 'string', 'format': 'uuid', 'description': 'The form UUID (returned by clipform_create_form, not the short share_id from the URL)'}, '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.'}, 'logo_url': {'type': ['string', 'null'], 'description': 'AI-PROTECTED: Only set when the user explicitly provides a logo URL. Set null to clear.'}, 'brand_name': {'type': ['string', 'null'], 'description': 'AI-PROTECTED: Custom brand name shown in footer. Only set when user explicitly provides.'}, 'description': {'type': ['string', 'null'], 'description': 'SEO description (meta description, og:description). Set null to clear.'}, 'font_family': {'type': 'string', 'description': 'AI-PROTECTED: Only set when the user explicitly requests a specific font.'}, '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."}, 'show_branding': {'type': 'boolean', 'description': 'Show Clipform branding. Set false to remove (Pro plan).'}, 'background_color': {'type': 'string', 'pattern': '^#[0-9A-Fa-f]{6}$', 'description': "Background color as 6-digit hex (e.g. '#1A1A2E')."}, '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.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'updated_fields'], 'properties': {'form_id': {'type': 'string', 'description': 'Form UUID'}, 'updated_fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Names of the fields that were changed by this call'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['form_id', 'updates', 'context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}, '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', 'required': ['node_id'], 'properties': {'type': {'enum': ['choice', 'open', 'details', 'payment', 'button', 'redirect', 'file_download', 'end_screen'], 'type': 'string', 'description': 'Change the node type'}, 'label': {'type': 'string', 'description': 'Short label for the node (used in logic builder)'}, 'config': {'type': 'object', '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.', 'additionalProperties': {}}, 'prompt': {'type': 'string', 'description': 'New node prompt text'}, 'node_id': {'type': 'string', 'description': 'The node ID to update'}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['content'], 'properties': {'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.'}, '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.'}}, 'additionalProperties': False}, 'description': 'Replace all options (for choice nodes). Omit to keep existing options.'}, 'required': {'type': 'boolean', 'description': 'Whether an answer is required'}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, 'description': 'One or more node updates to apply'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['node_id', 'ok'], 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string'}, 'node_id': {'type': 'string'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'description': 'One result per requested update, in order'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['context'], 'properties': {'files': {'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'object', 'required': ['download_url'], 'properties': {'name': {'type': 'string'}, 'size': {'type': 'number'}, 'file_id': {'type': 'string', 'description': 'Host-assigned identifier for the attached file'}, 'file_name': {'type': 'string'}, 'mime_type': {'type': 'string', 'description': 'Declared MIME type - determines whether the file becomes a video or still asset'}, 'download_url': {'type': 'string', 'description': "Short-lived URL the server downloads the file's bytes from"}}, 'additionalProperties': True}]}, 'maxItems': 10, 'minItems': 1, 'description': 'Files attached by the host client. Each becomes a video or still library asset based on its declared mime_type.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['media_type'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Public URL that links directly to the media file itself. When provided, the server fetches and stores it directly.'}, 'captions': {'type': 'array', 'items': {'type': 'object', 'required': ['start', 'end', 'text', 'words'], 'properties': {'end': {'type': 'number', 'description': 'Segment end time in seconds'}, 'text': {'type': 'string', 'description': 'Full segment text'}, 'start': {'type': 'number', 'description': 'Segment start time in seconds'}, 'words': {'type': 'array', 'items': {'type': 'object', 'required': ['word', 'start', 'end'], 'properties': {'end': {'type': 'number'}, 'word': {'type': 'string'}, 'start': {'type': 'number'}}, 'additionalProperties': False}, 'minItems': 1, 'description': 'Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim.'}}, '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.'}, 'media_type': {'enum': ['video', 'still'], 'type': 'string', 'description': 'Type of media'}, '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."}, 'media_source': {'enum': ['uploaded', 'recorded'], 'type': 'string', 'default': 'uploaded', 'description': 'How the media was created'}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 1, '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."}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['media_type', 'stored', 'ok'], 'properties': {'ok': {'type': 'boolean'}, 'error': {'type': 'string'}, 'stored': {'type': 'boolean', 'description': 'Bytes already stored (URL-based); false when an upload_url is pending'}, 'media_type': {'type': 'string'}, 'upload_url': {'type': 'string'}, 'upload_method': {'type': 'string'}, 'media_asset_id': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'One result per item, in order'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['context'], 'properties': {'context': {'type': 'string', 'description': "Describe the user's underlying goal in one sentence - not the tool you're calling."}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['auth_mode', 'is_authenticated', 'workspace', 'plan'], 'properties': {'plan': {'type': 'object', 'required': ['name', 'tier', 'node_limit', 'form_limit'], 'properties': {'name': {'type': 'string'}, 'tier': {'type': 'number'}, 'form_limit': {'type': ['number', 'null'], 'description': 'Max forms in the workspace, or null if unlimited'}, 'node_limit': {'type': ['number', 'null'], 'description': 'Max nodes per form, or null if unlimited'}}, 'description': 'Plan limits for the active workspace', 'additionalProperties': False}, 'links': {'type': 'object', 'required': ['dashboard', 'forms'], 'properties': {'forms': {'type': 'string', 'description': 'Forms list for the active workspace.'}, 'dashboard': {'type': 'string', 'description': 'Dashboard home for the active workspace.'}}, 'description': 'Workspace-level dashboard links - only present for a non-anonymous caller.', 'additionalProperties': False}, 'auth_mode': {'enum': ['api_key', 'oauth', 'session', 'anonymous'], 'type': 'string', 'description': 'How this session is authenticated'}, 'workspace': {'anyOf': [{'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Active workspace, or null when anonymous'}, 'workspaces': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}, 'description': "All workspaces in the caller's company - only present for session (dashboard) auth"}, 'is_authenticated': {'type': 'boolean', 'description': 'True for api_key, oauth, or session auth; false for anonymous'}}, 'additionalProperties': False}
Eingabeschema
{'type': 'object', 'required': ['context'], 'properties': {'context': {'type': 'string', 'description': 'A description of your goal and what kind of tool would help accomplish it.'}}}
Letzte Tool-Änderungen
Ähnliche MCP-Server
Hermoso
Supports ad research, competitor analysis, video and static ad creation, campaign policy checks, content publishing, and performa…
Heista
Analyzes video advertising, builds brand intelligence profiles, researches markets, and generates advertising scripts and creativ…
Spook SEO
Provides SEO analysis, keyword and content generation, AEO checks, ad copy tools and automated article generation and publishing.
VarynForge
Supports SEO research and content planning through niche analysis, competitor and keyword research, opportunity discovery, and wr…
AfterLaunch: the agentic growth marketing engine
Runs growth-marketing workflows covering SEO, AI-search visibility, competitor analysis, content planning, distribution channels,…
RoboWrite
Supports brand setup, content briefs, AI-generated drafts, editorial review, quality checks, and publishing workflows.
ai-content-drop
Generates AI images, videos, UGC clips, avatars, and finished ads, while organizing creative assets and campaign boards.
Newswire Com
Searches and retrieves recent press releases from Newswire.com's public newsroom feed.