@clipform/mcp-server 2.5.1 → 2.10.2

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.
package/README.md CHANGED
@@ -64,12 +64,14 @@ Your MCP client lists these automatically on connect (via `tools/list`). Full re
64
64
  | Tool | Description |
65
65
  |------|-------------|
66
66
  | `clipform_create_form` | Create a new Clipform (interactive video-style form). |
67
+ | `clipform_import_form` | Convert a public Google Form, Typeform, or Tally form into a new Clipform. |
67
68
  | `clipform_list_forms` | List forms in your workspace with optional filtering. |
68
69
  | `clipform_whoami` | Show the current identity: auth mode (api key, session, or anonymous), active workspace, and plan limits. |
69
70
  | `clipform_get_form` | Retrieve a form's details including all nodes in sequential order and their routing. |
70
71
  | `clipform_update_form` | Update a form's title, publish status, settings, or tags. |
71
72
  | `clipform_delete_form` | Move a form and all its nodes to the trash. |
72
73
  | `clipform_get_results` | View response counts, choice/action answer breakdowns, and recent open-text answers for a form. |
74
+ | `clipform_get_responses` | List a Clipform form's individual responses (submissions) with time filtering - complements clipform_get_results (aggregates). |
73
75
  | `clipform_add_node` | Add a new node to an existing form. |
74
76
  | `clipform_update_node` | Update one or more existing nodes' text, type, config, or options. |
75
77
  | `clipform_delete_node` | Delete a node from a form. |
@@ -2,7 +2,7 @@ import {
2
2
  WORKFLOW_TYPES,
3
3
  getDiscoveryParams,
4
4
  getSessionContextWithAuth
5
- } from "./chunk-3BYQLPTT.js";
5
+ } from "./chunk-IL26A4IN.js";
6
6
  import {
7
7
  __export
8
8
  } from "./chunk-G3PMV62Z.js";
@@ -4354,6 +4354,49 @@ function bookingWorkflow(args, sessionContext, authMode = "authenticated") {
4354
4354
 
4355
4355
  ## Key rule: 3-5 fields max. Every extra field costs registrations.`;
4356
4356
  }
4357
+ function intakeWorkflow(args, sessionContext, authMode = "authenticated") {
4358
+ const useCase = args.use_case ?? "new clients";
4359
+ const discovery = buildDiscovery(getDiscoveryParams("intake", void 0, authMode === "anonymous" ? "demo" : "full"), args, authMode);
4360
+ return `${sessionContext ? sessionContext + "\n\n" : ""}${discovery}Here's how to build a client intake form for ${useCase} with Clipform. Read the attached intake guide for craft knowledge on a warm welcome and low-friction capture.
4361
+
4362
+ ## Workflow
4363
+
4364
+ 1. **Decide what you actually need** - contact details plus one open question about what the client is looking for. Capture, don't qualify.
4365
+ 2. ${BUILD_ONCE_STEP}
4366
+ - Settings: show_step_counter: true, disable_back_navigation: false
4367
+ - Welcome (type: "button") - warm intro: "Thanks for reaching out - a couple of quick questions so we can help you properly." button_text: "Let's begin"
4368
+ - Contact collection (type: "details") - first name + email; phone optional
4369
+ - What they need (type: "open") - "Tell us a bit about what you're looking for." Enable video + audio + text responses (video-first)
4370
+ - Optional one qualifier (type: "choice") - only if it changes what you do next ("What are you most interested in?"). Don't stack these.
4371
+ - Optional "Anything else?" (type: "open") - catches what you didn't think to ask
4372
+ - End screen: "Thanks! We've got your details and we'll be in touch shortly." icon: "tick", no score, no restart
4373
+ - tags: format "intake", genre "onboarding", and 2-3 topic words
4374
+ 3. **Optional: add a welcome video** - a short personal intro from you. Generate narration with clipform_generate_tts, then build a video with clipform_search_media + clipform_generate_video.
4375
+ 4. ${REPUBLISH_STEP}
4376
+ 5. **Log** with clipform_log_generation
4377
+
4378
+ ## Key rule: 3-5 steps max. An intake that feels like paperwork loses the client you just won.`;
4379
+ }
4380
+ function leadCaptureWorkflow(args, sessionContext, authMode = "authenticated") {
4381
+ const useCase = args.use_case ?? "enquiries";
4382
+ const discovery = buildDiscovery(getDiscoveryParams("lead-capture", void 0, authMode === "anonymous" ? "demo" : "full"), args, authMode);
4383
+ return `${sessionContext ? sessionContext + "\n\n" : ""}${discovery}Here's how to build a lead capture form for ${useCase} with Clipform. Read the attached lead-capture guide - the whole game is minimal friction. This is a LINEAR form: no branching, no scoring.
4384
+
4385
+ ## Workflow
4386
+
4387
+ 1. **Decide the one thing you need** - a contact. Everything else is optional and costs conversions.
4388
+ 2. ${BUILD_ONCE_STEP}
4389
+ - Settings: show_step_counter: false, disable_back_navigation: false
4390
+ - Optional hook (type: "button") - one line restating the value, e.g. "Want in? Drop your details and we'll be in touch." button_text: "Count me in"
4391
+ - Contact collection (type: "details") - first name + email; phone only if you'll call
4392
+ - Optional ONE qualifier (type: "choice") - only if the answer routes your follow-up ("What are you most interested in?"). If it doesn't, cut it.
4393
+ - End screen: "Thanks! We'll be in touch soon." Set the expectation (when/how). icon: "tick", no score, no restart
4394
+ - tags: format "lead-capture", genre "enquiry", and 2-3 topic words
4395
+ 3. ${REPUBLISH_STEP}
4396
+ 4. **Log** with clipform_log_generation
4397
+
4398
+ ## Key rule: 3-4 steps max. Get the contact early, qualify lightly or not at all.`;
4399
+ }
4357
4400
  var WORKFLOW_BUILDERS = {
4358
4401
  "quiz": quizWorkflow,
4359
4402
  "interview": interviewWorkflow,
@@ -4361,7 +4404,9 @@ var WORKFLOW_BUILDERS = {
4361
4404
  "funnel": funnelWorkflow,
4362
4405
  "testimonial": testimonialWorkflow,
4363
4406
  "application": applicationWorkflow,
4364
- "booking": bookingWorkflow
4407
+ "booking": bookingWorkflow,
4408
+ "intake": intakeWorkflow,
4409
+ "lead-capture": leadCaptureWorkflow
4365
4410
  };
4366
4411
  var QUIZ_VARIANT_BUILDERS = {
4367
4412
  "personality": personalityQuizWorkflow,
@@ -4696,6 +4741,65 @@ Outcome categories: ${args.categories}` : "";
4696
4741
  ]
4697
4742
  })
4698
4743
  );
4744
+ server.registerPrompt(
4745
+ "create-intake",
4746
+ {
4747
+ title: "Create a Client Intake Form",
4748
+ description: "Build a warm client intake or onboarding form - capture contact details and what the client needs",
4749
+ argsSchema: {
4750
+ use_case: external_exports.string().optional().describe("What kind of business or service (e.g. 'massage', 'coaching', 'personal training', 'agency')"),
4751
+ response_format: external_exports.enum(["video", "audio", "text", "all"]).optional().describe("How people answer the open question (default: all)")
4752
+ }
4753
+ },
4754
+ async (args) => ({
4755
+ messages: [
4756
+ {
4757
+ role: "user",
4758
+ content: {
4759
+ type: "text",
4760
+ text: `I want to create a client intake form${args.use_case ? ` for a ${args.use_case} business` : ""}.`
4761
+ }
4762
+ },
4763
+ resourceLink("guide-intake", "clipform://guides/intake", "Client Intake & Onboarding Guide"),
4764
+ {
4765
+ role: "assistant",
4766
+ content: {
4767
+ type: "text",
4768
+ text: await getWorkflowText("intake", args)
4769
+ }
4770
+ }
4771
+ ]
4772
+ })
4773
+ );
4774
+ server.registerPrompt(
4775
+ "create-lead-capture",
4776
+ {
4777
+ title: "Create a Lead Capture Form",
4778
+ description: "Build a short lead capture or enquiry form - turn interest into a contact with minimal friction",
4779
+ argsSchema: {
4780
+ use_case: external_exports.string().optional().describe("What you're capturing leads for (e.g. 'a service', 'a product', 'a waitlist', 'a quote')")
4781
+ }
4782
+ },
4783
+ async (args) => ({
4784
+ messages: [
4785
+ {
4786
+ role: "user",
4787
+ content: {
4788
+ type: "text",
4789
+ text: `I want to create a lead capture form${args.use_case ? ` for ${args.use_case}` : ""}.`
4790
+ }
4791
+ },
4792
+ resourceLink("guide-lead-capture", "clipform://guides/lead-capture", "Lead Capture Guide"),
4793
+ {
4794
+ role: "assistant",
4795
+ content: {
4796
+ type: "text",
4797
+ text: await getWorkflowText("lead-capture", args)
4798
+ }
4799
+ }
4800
+ ]
4801
+ })
4802
+ );
4699
4803
  }
4700
4804
 
4701
4805
  export {
@@ -4708,4 +4812,4 @@ export {
4708
4812
  getWorkflowText,
4709
4813
  registerPrompts
4710
4814
  };
4711
- //# sourceMappingURL=chunk-NYMC63ZK.js.map
4815
+ //# sourceMappingURL=chunk-4QF4KGPE.js.map