@clipform/mcp-server 2.18.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@ import {
3
3
  MCP_AUTH_VIA_HEADER,
4
4
  MCP_MINT_PROOF_HEADER,
5
5
  getMcpAuth
6
- } from "./chunk-HZMMOSEM.js";
6
+ } from "./chunk-A5CFGL27.js";
7
7
  import {
8
8
  isAuthFault,
9
9
  isServerFault,
@@ -37,9 +37,10 @@ var FEATURES = {
37
37
  consent_documents: {
38
38
  name: "Agreement documents",
39
39
  description: "Attach a PDF agreement to a consent item, read inline in the viewer with scroll-to-accept",
40
- enabled: false,
41
- status: "beta",
42
- category: "builder"
40
+ enabled: true,
41
+ status: "live",
42
+ category: "builder",
43
+ wentLiveAt: "2026-10-02"
43
44
  },
44
45
  node_logic: {
45
46
  name: "Node routing logic",
@@ -156,8 +157,8 @@ var FEATURES = {
156
157
  // Widened (#4338): the checkbox items are typed 'consent' (required,
157
158
  // blocks submission until checked) or 'opt_in' (optional) - see
158
159
  // CONSENT_TYPES in node-types.js and the viewer's Contact.tsx. Both are
159
- // plain text checkboxes available to every creator with no gate; only
160
- // attaching a PDF agreement document is gated (consent_documents, beta).
160
+ // plain text checkboxes available to every creator with no gate. Attaching
161
+ // a PDF agreement document is the separate consent_documents feature (live).
161
162
  description: "Structured fields (name, email, phone, company) with consent and opt-in checkboxes",
162
163
  enabled: true,
163
164
  status: "live",
@@ -1282,7 +1283,17 @@ var NODE_TYPES = {
1282
1283
  // document version they saw, and when they accepted.
1283
1284
  reached_end: { type: "boolean" },
1284
1285
  document_version: { type: "string" },
1285
- accepted_at: { type: "string" }
1286
+ accepted_at: { type: "string" },
1287
+ // Server-stamped on write (#4552) when the node's current document
1288
+ // matches document_version; any client-supplied value is discarded.
1289
+ document: {
1290
+ type: "object",
1291
+ properties: {
1292
+ storage_path: { type: "string" },
1293
+ url: { type: "string" },
1294
+ filename: { type: "string" }
1295
+ }
1296
+ }
1286
1297
  }
1287
1298
  },
1288
1299
  description: "Consent checkbox entries"
@@ -1321,7 +1332,15 @@ var NODE_TYPES = {
1321
1332
  // Scrollwrap audit trail (#2760), emitted only for document-gated items.
1322
1333
  reached_end: { type: "boolean" },
1323
1334
  document_version: { type: "string" },
1324
- accepted_at: { type: "string" }
1335
+ accepted_at: { type: "string" },
1336
+ // The exact agreement file accepted (#4552). storage_path is not emitted.
1337
+ document: {
1338
+ type: "object",
1339
+ properties: {
1340
+ url: { type: "string" },
1341
+ filename: { type: "string" }
1342
+ }
1343
+ }
1325
1344
  }
1326
1345
  }
1327
1346
  }
@@ -2593,7 +2612,6 @@ var HELP_TOPICS = {
2593
2612
  emailShare: { path: "/help/sharing", anchor: "share-by-email" },
2594
2613
  publicResults: { path: "/help/public-results", anchor: null },
2595
2614
  trash: { path: "/help/managing-forms", anchor: "trash" },
2596
- agreementVersions: { path: "/help/responses", anchor: "agreement-versions" },
2597
2615
  customDomains: { path: "/help/domains", anchor: null },
2598
2616
  customPath: { path: "/help/links", anchor: "custom-path-on-your-domain" },
2599
2617
  // Per-node-type deep-links into help/node-types.mdx (#3963). Keyed
@@ -2628,250 +2646,6 @@ function isInactiveOptionEdge(node, action) {
2628
2646
  return isOptionEdge(action) && !isBranchingActive(node);
2629
2647
  }
2630
2648
 
2631
- // ../config/video-templates.js
2632
- var PRESET_BG = {
2633
- bold: "#0a0a14",
2634
- elegant: "#1a1a2e",
2635
- minimal: "#fafafa",
2636
- typewriter: "#0d1117",
2637
- neon: "#0a0a0a",
2638
- cinematic: "#000000"
2639
- };
2640
- var PRESET_NAMES = Object.keys(PRESET_BG);
2641
- var THEME_MOTION = {
2642
- calm: { holdMultiplier: 1.4 },
2643
- balanced: { holdMultiplier: 1 },
2644
- energetic: { holdMultiplier: 0.7 }
2645
- };
2646
- var THEME_NAMES = Object.keys(THEME_MOTION);
2647
- var KEN_BURNS_EFFECTS = [
2648
- "pan-left",
2649
- "pan-right",
2650
- "pan-up",
2651
- "pan-down",
2652
- "zoom-in-pan-left",
2653
- "zoom-in-pan-right",
2654
- "zoom-in",
2655
- "zoom-out",
2656
- "static"
2657
- ];
2658
- var SLIDESHOW_COMPOSITION_TRANSITIONS = ["fade", "slide", "wipe", "none"];
2659
- var SLIDESHOW_TRANSITION_DURATION = { min: 0.1, max: 5 };
2660
- function isHttpUrl(value) {
2661
- return /^https?:\/\//i.test(value);
2662
- }
2663
- var HTTP_URL_MESSAGE = "URL must start with http:// or https://";
2664
- var VIDEO_LOOKS = {
2665
- clean: {
2666
- transition: { type: "fade", duration: 1 },
2667
- motionPreset: "cinematic"
2668
- },
2669
- editorial: {
2670
- transition: { type: "fade", duration: 1 },
2671
- motionPreset: "calm",
2672
- texture: { type: "halftone" },
2673
- duotone: { shadow: "#1a1633", highlight: "#f5c542" }
2674
- },
2675
- punchy: {
2676
- transition: { type: "slide", duration: 0.5 },
2677
- motionPreset: "energetic",
2678
- randomEffects: true
2679
- },
2680
- "bold-poster": {
2681
- transition: { type: "fade", duration: 1 },
2682
- motionPreset: "dramatic",
2683
- texture: { type: "halftone" },
2684
- duotone: { shadow: "#0a0a14", highlight: "#f59e0b" },
2685
- backgroundColor: "#0a0a14"
2686
- }
2687
- };
2688
- var VIDEO_LOOK_NAMES = Object.keys(VIDEO_LOOKS);
2689
- var KEN_BURNS_RANDOM_POOL = KEN_BURNS_EFFECTS.filter((e) => e.startsWith("pan-"));
2690
- var VIDEO_TEMPLATE_REGISTRY = [
2691
- {
2692
- name: "title-card",
2693
- tier: "labs",
2694
- description: "An intro, section break, or outro card: a title with optional tagline and subtitle over an image or solid-colour background.",
2695
- keywords: ["intro card", "title screen", "opening", "outro", "section header", "branded end screen"],
2696
- controls: ["title", "subtitle?", "tagline?", "preset?", "backgroundImage?", "variant?", "theme?"],
2697
- exampleControls: {
2698
- title: "Welcome to Clipform",
2699
- subtitle: "Video-first forms that actually get answered",
2700
- tagline: "Get started",
2701
- preset: "cinematic"
2702
- }
2703
- },
2704
- {
2705
- name: "mystery-reveal",
2706
- tier: "public",
2707
- description: 'A "guess what this is" reveal - a single image that resolves from obscured (blurred, pixelated, or zoomed-in) to sharp.',
2708
- keywords: ["guess what this is", "reveal quiz", "blurred photo", "zoom and reveal", "mystery image", "guess the picture", "guess the flag"],
2709
- controls: ["image", "variant?", "revealSeconds?", "theme?"],
2710
- exampleControls: {
2711
- image: "https://picsum.photos/seed/clipform-mystery/1080/1920",
2712
- variant: "blur"
2713
- }
2714
- },
2715
- {
2716
- name: "colour-grid",
2717
- tier: "labs",
2718
- description: "A colour-matching or palette game: a grid of colour swatches to pick from or reveal.",
2719
- keywords: ["colour matching", "palette quiz", "pick the colour", "swatch game", "build the flag"],
2720
- controls: ["colors", "labels?", "variant?", "theme?"],
2721
- exampleControls: {
2722
- colors: ["#6366F1", "#EC4899", "#F59E0B", "#10B981"],
2723
- labels: ["Indigo", "Pink", "Amber", "Emerald"]
2724
- }
2725
- },
2726
- {
2727
- name: "question-card",
2728
- tier: "labs",
2729
- description: "A survey or quiz prompt: a question over an image or solid-colour background, with an optional helper line - the workhorse for a form's question nodes.",
2730
- keywords: ["ask a question", "survey question", "quiz prompt", "poll question", "form question"],
2731
- controls: ["question", "helper?", "preset?", "backgroundImage?", "variant?", "theme?"],
2732
- exampleControls: {
2733
- question: "What are you hoping to achieve?",
2734
- helper: "One sentence is plenty",
2735
- preset: "minimal"
2736
- }
2737
- },
2738
- {
2739
- name: "stat-highlight",
2740
- tier: "labs",
2741
- description: "An impressive-number beat: one big statistic or metric that pops in, with an optional label and caption - social proof and emphasis.",
2742
- keywords: ["big number", "statistic", "metric highlight", "impressive figure", "social proof number"],
2743
- controls: ["value", "label?", "caption?", "preset?", "backgroundImage?", "variant?", "theme?"],
2744
- exampleControls: {
2745
- value: "10,000+",
2746
- label: "forms created this month",
2747
- preset: "bold"
2748
- }
2749
- },
2750
- {
2751
- name: "quote-card",
2752
- tier: "labs",
2753
- description: "A testimonial or pull-quote beat for social proof, with optional attribution.",
2754
- keywords: ["testimonial", "pull quote", "social proof", "customer quote", "review highlight"],
2755
- controls: ["quote", "attribution?", "preset?", "backgroundImage?", "variant?", "theme?"],
2756
- exampleControls: {
2757
- quote: "The fastest way we've found to talk to customers at scale.",
2758
- attribution: "Jamie R., Head of Growth",
2759
- preset: "elegant"
2760
- }
2761
- },
2762
- {
2763
- name: "list-card",
2764
- tier: "labs",
2765
- description: `An agenda, steps, or "what you'll get" beat: a headline with a short bulleted list revealed sequentially.`,
2766
- keywords: ["bullet list", "agenda", "steps", "what you'll get", "checklist", "how it works"],
2767
- controls: ["title", "items", "preset?", "backgroundImage?", "variant?", "theme?"],
2768
- exampleControls: {
2769
- title: "What you'll get",
2770
- items: ["A custom quote", "A 15-minute call", "A live demo", "A follow-up plan"],
2771
- preset: "bold"
2772
- }
2773
- },
2774
- {
2775
- name: "cta-card",
2776
- tier: "labs",
2777
- description: "A closing call-to-action: headline, action line, and optional subtext telling the viewer what to do next.",
2778
- keywords: ["call to action", "closing screen", "do this next", "sign up prompt", "end card"],
2779
- controls: ["headline", "action", "subtext?", "preset?", "backgroundImage?", "variant?", "theme?"],
2780
- exampleControls: {
2781
- headline: "Ready to get started?",
2782
- action: "Sign up free",
2783
- subtext: "No credit card required",
2784
- preset: "cinematic"
2785
- }
2786
- },
2787
- {
2788
- name: "slideshow",
2789
- tier: "public",
2790
- description: "A photo and video montage: images and/or video clips with Ken Burns motion and configurable transitions, with optional narration or background audio (audio_url / background_audio_url) synced to the track length. Defaults to silent (motion only) when no audio_url is given; with audio_url the video runs exactly as long as the narration (duration_seconds is ignored). Per-item image/video dials via items, a named look via preset, plus advanced overrides: transition {type, duration}, style_preset, texture, duotone, background_color, random_effects. Accepts the same inputs as clipform_generate_video.",
2791
- keywords: ["photo montage", "image slideshow", "ken burns", "picture story", "gallery", "photo gallery", "narrated montage", "video montage"],
2792
- controls: ["images", "items?", "effect?", "random_effects?", "transition?", "preset?", "style_preset?", "texture?", "duotone?", "background_color?", "secondsPerImage?", "audio_url?", "background_audio_url?", "background_audio_volume?", "duration_seconds?", "theme?"],
2793
- exampleControls: {
2794
- images: [
2795
- "https://picsum.photos/seed/clipform-slideshow-1/1080/1920",
2796
- "https://picsum.photos/seed/clipform-slideshow-2/1080/1920",
2797
- "https://picsum.photos/seed/clipform-slideshow-3/1080/1920"
2798
- ],
2799
- transition: "fade"
2800
- }
2801
- },
2802
- {
2803
- name: "guess-the-city",
2804
- tier: "public",
2805
- description: 'A map "guess where this is" reveal - the camera flies from a globe down onto a mystery city with place names hidden, then optionally reveals the answer.',
2806
- keywords: ["guess the location", "guess the city", "where in the world", "geography trivia", "map flyover", "guess the country"],
2807
- controls: ["lat", "lng", "name?", "motion?", "basemap?", "revealName?", "theme?"],
2808
- exampleControls: {
2809
- lat: 48.8566,
2810
- lng: 2.3522,
2811
- name: "Paris",
2812
- motion: "zoom-in"
2813
- }
2814
- },
2815
- {
2816
- name: "versus",
2817
- tier: "public",
2818
- description: 'A head-to-head "this or that" comparison: two options side by side for the viewer to pick between.',
2819
- keywords: ["this or that", "versus", "a or b", "which do you prefer", "head to head", "pick a side", "would you rather"],
2820
- controls: ["left", "right", "leftLabel?", "rightLabel?", "theme?"],
2821
- exampleControls: {
2822
- left: "https://picsum.photos/seed/clipform-versus-left/1080/1920",
2823
- right: "https://picsum.photos/seed/clipform-versus-right/1080/1920",
2824
- leftLabel: "Option A",
2825
- rightLabel: "Option B"
2826
- }
2827
- },
2828
- {
2829
- name: "pick-the-answer",
2830
- tier: "public",
2831
- description: "A multiple-choice question grid - the everyday quiz beat. Pair with a choice node's own answer feedback for the win/lose beat; set reveal: true for an optional spotlight-the-correct-option-with-a-green-tick payoff variant.",
2832
- keywords: ["multiple choice", "quiz options", "pick the answer", "pick the correct one", "reveal the answer", "trivia question", "question grid"],
2833
- controls: ["options", "reveal?", "correctIndex?", "columns?", "theme?"],
2834
- exampleControls: {
2835
- options: ["Paris", "London", "Rome", "Berlin"],
2836
- reveal: true,
2837
- correctIndex: 0
2838
- }
2839
- },
2840
- {
2841
- name: "odd-one-out",
2842
- tier: "public",
2843
- description: `A "spot the one that does not belong" grid puzzle. Pair with a choice node's own answer feedback for the win/lose beat; set reveal: true for an optional spotlight-the-odd-item payoff variant.`,
2844
- keywords: ["odd one out", "spot the odd one", "which does not belong", "find the different one", "which is different"],
2845
- controls: ["items", "reveal?", "oddIndex?", "columns?", "theme?"],
2846
- exampleControls: {
2847
- items: [
2848
- "https://picsum.photos/seed/clipform-odd-1/1080/1920",
2849
- "https://picsum.photos/seed/clipform-odd-2/1080/1920",
2850
- "https://picsum.photos/seed/clipform-odd-3/1080/1920",
2851
- "https://picsum.photos/seed/clipform-odd-4/1080/1920"
2852
- ],
2853
- reveal: true,
2854
- oddIndex: 2
2855
- }
2856
- },
2857
- {
2858
- name: "photo-grid",
2859
- tier: "public",
2860
- description: "A photo wall or mosaic: several images shown together in one grid, with optional captions.",
2861
- keywords: ["photo grid", "photo wall", "mosaic", "image grid", "moodboard", "gallery grid"],
2862
- controls: ["images", "columns?", "labels?", "theme?"],
2863
- exampleControls: {
2864
- images: [
2865
- "https://picsum.photos/seed/clipform-photo-1/1080/1920",
2866
- "https://picsum.photos/seed/clipform-photo-2/1080/1920",
2867
- "https://picsum.photos/seed/clipform-photo-3/1080/1920",
2868
- "https://picsum.photos/seed/clipform-photo-4/1080/1920"
2869
- ]
2870
- }
2871
- }
2872
- ];
2873
- var VIDEO_TEMPLATE_NAMES = VIDEO_TEMPLATE_REGISTRY.map((r) => r.name);
2874
-
2875
2649
  // ../config/logic-chain.js
2876
2650
  function outgoingTargets(actions, node) {
2877
2651
  const out = [];
@@ -2994,6 +2768,7 @@ var BUSINESS = {
2994
2768
  };
2995
2769
  var MEDIA_DIRECT_MAX_BYTES = 20 * 1024 * 1024;
2996
2770
  var MEDIA_IMAGE_MAX_BYTES = 10 * 1024 * 1024;
2771
+ var MEDIA_DOCUMENT_MAX_BYTES = 20 * 1024 * 1024;
2997
2772
  var SUPABASE_STORAGE_MAX_BYTES = 200 * 1024 * 1024;
2998
2773
  var VIDEO_COMPRESS_FLOOR_BYTES = 1 * 1024 * 1024;
2999
2774
  var HELP_LINKS = buildHelpLinks(BUSINESS.urls.docs);
@@ -3184,27 +2959,6 @@ var CONTACT_FIELDS = [
3184
2959
  var CONTACT_FIELDS_MAP = Object.fromEntries(
3185
2960
  CONTACT_FIELDS.map((f) => [f.id, f])
3186
2961
  );
3187
- var KEN_BURNS_EFFECTS2 = [
3188
- "pan-left",
3189
- "pan-right",
3190
- "pan-up",
3191
- "pan-down",
3192
- "zoom-in-pan-left",
3193
- "zoom-in-pan-right",
3194
- "zoom-in",
3195
- "zoom-out",
3196
- "static"
3197
- ];
3198
- var KEN_BURNS_PRESETS = [
3199
- "cinematic",
3200
- "dramatic",
3201
- "calm",
3202
- "documentary",
3203
- "dreamy",
3204
- "moody",
3205
- "energetic"
3206
- ];
3207
- var KEN_BURNS_FIT_MODES = ["cover", "blur-pad", "auto"];
3208
2962
  var COMPOSITION_REGISTRY = [
3209
2963
  // Beds (full-bleed backgrounds)
3210
2964
  { id: "Slideshow", tier: "public", kind: "bed", scene_layer: true },
@@ -3261,7 +3015,6 @@ var MCP_TOOL_TOOLSETS = {
3261
3015
  // composition's `boundary` prop, so it lives with the render tools.
3262
3016
  clipform_fetch_boundary: "media",
3263
3017
  clipform_generate_tts: "media",
3264
- clipform_generate_video: "media",
3265
3018
  clipform_render_composition: "media",
3266
3019
  clipform_render_video_template: "media",
3267
3020
  clipform_check_render: "media",
@@ -3486,17 +3239,9 @@ export {
3486
3239
  ALL_VARIANTS,
3487
3240
  resolveFormType,
3488
3241
  getDiscoveryParams,
3489
- SLIDESHOW_COMPOSITION_TRANSITIONS,
3490
- SLIDESHOW_TRANSITION_DURATION,
3491
- isHttpUrl,
3492
- HTTP_URL_MESSAGE,
3493
- VIDEO_LOOK_NAMES,
3494
3242
  defaultTarget,
3495
3243
  bfsOrder,
3496
3244
  CONTACT_FIELDS,
3497
- KEN_BURNS_EFFECTS2 as KEN_BURNS_EFFECTS,
3498
- KEN_BURNS_PRESETS,
3499
- KEN_BURNS_FIT_MODES,
3500
3245
  exposedCompositionIds,
3501
3246
  MCP_TOOL_TIERS,
3502
3247
  MCP_TOOL_TOOLSETS,
@@ -3509,4 +3254,4 @@ export {
3509
3254
  getSessionContextWithAuth,
3510
3255
  getSessionContext
3511
3256
  };
3512
- //# sourceMappingURL=chunk-RKYB6247.js.map
3257
+ //# sourceMappingURL=chunk-VZKMOMFJ.js.map