@clipform/mcp-server 2.11.0 → 2.12.0

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.
@@ -5,7 +5,7 @@ import {
5
5
  FULL_CAPS,
6
6
  callApi,
7
7
  getSessionContext
8
- } from "./chunk-ETX3HYZE.js";
8
+ } from "./chunk-YSLAOZBU.js";
9
9
 
10
10
  // src/lib/guides.ts
11
11
  var guidesPromise = null;
@@ -143,4 +143,4 @@ export {
143
143
  getGuideUri,
144
144
  registerResources
145
145
  };
146
- //# sourceMappingURL=chunk-LSMZCCFU.js.map
146
+ //# sourceMappingURL=chunk-JHCN23OK.js.map
@@ -3,7 +3,7 @@ import {
3
3
  WORKFLOW_TYPES,
4
4
  getDiscoveryParams,
5
5
  getSessionContextWithAuth
6
- } from "./chunk-ETX3HYZE.js";
6
+ } from "./chunk-YSLAOZBU.js";
7
7
  import {
8
8
  __export
9
9
  } from "./chunk-G3PMV62Z.js";
@@ -4856,4 +4856,4 @@ export {
4856
4856
  getWorkflowText,
4857
4857
  registerPrompts
4858
4858
  };
4859
- //# sourceMappingURL=chunk-3P4ARF7X.js.map
4859
+ //# sourceMappingURL=chunk-SHOP5J2M.js.map
@@ -6,7 +6,7 @@ import {
6
6
  getWorkflowText,
7
7
  objectType,
8
8
  registerPrompts
9
- } from "./chunk-3P4ARF7X.js";
9
+ } from "./chunk-SHOP5J2M.js";
10
10
  import {
11
11
  GUIDE_TYPES,
12
12
  QUIZ_VARIANTS,
@@ -15,7 +15,7 @@ import {
15
15
  getGuideUri,
16
16
  guideFallbackText,
17
17
  registerResources
18
- } from "./chunk-LSMZCCFU.js";
18
+ } from "./chunk-JHCN23OK.js";
19
19
  import {
20
20
  ACTIVE_NODE_TYPES,
21
21
  CONTACT_FIELDS,
@@ -39,7 +39,7 @@ import {
39
39
  resolveFormType,
40
40
  structuredResult,
41
41
  textResult
42
- } from "./chunk-ETX3HYZE.js";
42
+ } from "./chunk-YSLAOZBU.js";
43
43
  import {
44
44
  getMcpAuth,
45
45
  runWithMcpTool
@@ -17096,7 +17096,7 @@ var CaptionSchema = external_exports.object({
17096
17096
  start: external_exports.number().describe("Segment start time in seconds"),
17097
17097
  end: external_exports.number().describe("Segment end time in seconds"),
17098
17098
  text: external_exports.string().describe("Full segment text"),
17099
- words: external_exports.array(external_exports.object({ word: external_exports.string(), start: external_exports.number(), end: external_exports.number() })).optional().describe("Per-word timestamps within the segment")
17099
+ words: external_exports.array(external_exports.object({ word: external_exports.string(), start: external_exports.number(), end: external_exports.number() })).min(1).describe("Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim.")
17100
17100
  });
17101
17101
  var OptionSchema = external_exports.object({
17102
17102
  content: external_exports.string().describe("Option text"),
@@ -18117,7 +18117,8 @@ var REDACTED_TYPES = {
18117
18117
  details: "[contact details - view in dashboard]",
18118
18118
  contact: "[contact details - view in dashboard]",
18119
18119
  file_upload: "[file upload - view in dashboard]",
18120
- payment: "[payment - view in dashboard]",
18120
+ // payment is handled by paymentSummary() before this map - it surfaces a
18121
+ // non-PII amount/status line rather than a flat placeholder.
18121
18122
  open: ""
18122
18123
  // open is redacted ONLY when the answer is a recording (handled below)
18123
18124
  };
@@ -18127,12 +18128,21 @@ function truncate(s, n = MAX_ANSWER_LENGTH) {
18127
18128
  function looksLikeMediaReference(display) {
18128
18129
  return /https?:\/\/|storage\/|\.(webm|mp4|mp3|wav|m4a|mov)\b/i.test(display);
18129
18130
  }
18131
+ function paymentSummary(value) {
18132
+ const stripe = value?.stripe;
18133
+ if (!stripe) return null;
18134
+ const amount = typeof stripe.amount === "number" ? stripe.amount : null;
18135
+ const currency = typeof stripe.currency === "string" ? stripe.currency : null;
18136
+ const status = typeof stripe.status === "string" ? stripe.status : "unknown";
18137
+ if (amount === null || !currency) return null;
18138
+ return `${(amount / 100).toFixed(2)} ${currency.toUpperCase()} - ${status}`;
18139
+ }
18130
18140
  function registerGetResponsesTool(server) {
18131
18141
  server.registerTool(
18132
18142
  "clipform_get_responses",
18133
18143
  {
18134
18144
  title: "List form responses",
18135
- description: "List a Clipform form's individual responses (submissions) with time filtering - complements clipform_get_results (aggregates). Answers questions like 'what came in during the last 24 hours', 'what's the longest answer', 'what did people say'. Text answers only: contact details, file uploads, payments, and audio/video answers are redacted to placeholders; those are viewable in the dashboard (the responses URL from clipform_get_form). Responses are sorted newest first unless sort: 'oldest'.",
18145
+ description: "List a Clipform form's individual responses (submissions) with time filtering - complements clipform_get_results (aggregates). Answers questions like 'what came in during the last 24 hours', 'what's the longest answer', 'what did people say'. Text answers plus a non-PII payment summary (amount and status); contact details, file uploads, and audio/video answers are redacted to placeholders and the customer's payment details stay in the dashboard (the responses URL from clipform_get_form). Responses are sorted newest first unless sort: 'oldest'.",
18136
18146
  inputSchema: {
18137
18147
  form_id: external_exports.string().describe("Form UUID (from clipform_list_forms / clipform_create_form)"),
18138
18148
  since: external_exports.string().datetime({ offset: true }).optional().describe("Only responses submitted at or after this ISO 8601 time (e.g. '2026-08-29T00:00:00Z')"),
@@ -18200,6 +18210,15 @@ function registerGetResponsesTool(server) {
18200
18210
  const node = nodeById.get(nodeId);
18201
18211
  const type = node?.type ?? (typeof resp?.type === "string" ? resp.type : "unknown");
18202
18212
  const question = truncate(node?.prompt || type, 120);
18213
+ if (type === "payment") {
18214
+ const summary = paymentSummary(resp?.value);
18215
+ answers.push({
18216
+ question,
18217
+ type,
18218
+ answer: summary ?? "[payment - view in dashboard]"
18219
+ });
18220
+ continue;
18221
+ }
18203
18222
  const placeholder = REDACTED_TYPES[type];
18204
18223
  if (placeholder) {
18205
18224
  answers.push({ question, type, answer: placeholder });
@@ -18242,7 +18261,7 @@ function registerGetResponsesTool(server) {
18242
18261
  ...r.answers.map((a) => ` ${a.question}: ${a.answer}`)
18243
18262
  ]),
18244
18263
  ``,
18245
- `Contact details, files, payments, and recordings are redacted here - the dashboard shows full response detail. For aggregate stats use clipform_get_results.`
18264
+ `Contact details, files, and recordings are redacted here; payments show an amount/status summary only (the customer's details stay in the dashboard, which shows full response detail). For aggregate stats use clipform_get_results.`
18246
18265
  ];
18247
18266
  return structuredResult(lines.join("\n"), {
18248
18267
  total_matching: totalMatching,
@@ -18513,9 +18532,9 @@ var MediaAssetItemSchema = external_exports.object({
18513
18532
  start: external_exports.number(),
18514
18533
  end: external_exports.number()
18515
18534
  })
18516
- ).optional().describe("Per-word timestamps within the segment")
18535
+ ).min(1).describe("Per-word timestamps within the segment. Required - copy the full array from clipform_generate_tts verbatim.")
18517
18536
  })
18518
- ).optional().describe("Word-level captions from clipform_generate_tts. Required for per-word highlighting - pass the full objects including 'words' arrays."),
18537
+ ).optional().describe("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."),
18519
18538
  ai_generated: external_exports.boolean().optional().describe("Whether this media was AI-generated. Drives the viewer's disclosure chip - set true for AI-rendered/synthesized media.")
18520
18539
  });
18521
18540
  function registerUploadMediaAssetTool(server) {
@@ -19045,7 +19064,7 @@ var CaptionSchema2 = external_exports.object({
19045
19064
  start: external_exports.number(),
19046
19065
  end: external_exports.number(),
19047
19066
  text: external_exports.string(),
19048
- words: external_exports.array(external_exports.object({ word: external_exports.string(), start: external_exports.number(), end: external_exports.number() })).optional()
19067
+ words: external_exports.array(external_exports.object({ word: external_exports.string(), start: external_exports.number(), end: external_exports.number() })).min(1)
19049
19068
  });
19050
19069
  var TtsItemSchema = external_exports.object({
19051
19070
  text: external_exports.string().min(1).max(5e3).describe("Narration text"),
@@ -20685,4 +20704,4 @@ export {
20685
20704
  buildInstructions,
20686
20705
  createServer
20687
20706
  };
20688
- //# sourceMappingURL=chunk-W2CAY2L4.js.map
20707
+ //# sourceMappingURL=chunk-UVRL2EXF.js.map