@clipform/mcp-server 1.7.0 → 1.8.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.
Files changed (97) hide show
  1. package/README.md +43 -29
  2. package/dist/__tests__/api-parity.test.js +31 -22
  3. package/dist/__tests__/api-parity.test.js.map +1 -1
  4. package/dist/index.js +9 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/api-client.d.ts +3 -2
  7. package/dist/lib/api-client.js +10 -3
  8. package/dist/lib/api-client.js.map +1 -1
  9. package/dist/lib/format-form.d.ts +2 -0
  10. package/dist/lib/format-form.js +32 -0
  11. package/dist/lib/format-form.js.map +1 -0
  12. package/dist/lib/render-jobs.d.ts +17 -0
  13. package/dist/lib/render-jobs.js +44 -0
  14. package/dist/lib/render-jobs.js.map +1 -0
  15. package/dist/lib/schemas.d.ts +4 -4
  16. package/dist/lib/schemas.js +11 -11
  17. package/dist/lib/schemas.js.map +1 -1
  18. package/dist/lib/session-context.js +9 -3
  19. package/dist/lib/session-context.js.map +1 -1
  20. package/dist/prompts.js +31 -10
  21. package/dist/prompts.js.map +1 -1
  22. package/dist/resources.js +3 -3
  23. package/dist/resources.js.map +1 -1
  24. package/dist/server.js +25 -21
  25. package/dist/server.js.map +1 -1
  26. package/dist/tools/add-node.d.ts +2 -0
  27. package/dist/tools/add-node.js +48 -0
  28. package/dist/tools/add-node.js.map +1 -0
  29. package/dist/tools/attach-node-audio.d.ts +2 -0
  30. package/dist/tools/attach-node-audio.js +35 -0
  31. package/dist/tools/attach-node-audio.js.map +1 -0
  32. package/dist/tools/{add-question.d.ts → check-render.d.ts} +1 -1
  33. package/dist/tools/check-render.js +47 -0
  34. package/dist/tools/check-render.js.map +1 -0
  35. package/dist/tools/create-form.js +46 -46
  36. package/dist/tools/create-form.js.map +1 -1
  37. package/dist/tools/delete-form.js +1 -3
  38. package/dist/tools/delete-form.js.map +1 -1
  39. package/dist/tools/delete-node-media.d.ts +2 -0
  40. package/dist/tools/delete-node-media.js +25 -0
  41. package/dist/tools/delete-node-media.js.map +1 -0
  42. package/dist/tools/delete-node.d.ts +2 -0
  43. package/dist/tools/delete-node.js +28 -0
  44. package/dist/tools/delete-node.js.map +1 -0
  45. package/dist/tools/generate-slideshow.js +16 -10
  46. package/dist/tools/generate-slideshow.js.map +1 -1
  47. package/dist/tools/generate-tts.js +55 -31
  48. package/dist/tools/generate-tts.js.map +1 -1
  49. package/dist/tools/generate-video.js +17 -11
  50. package/dist/tools/generate-video.js.map +1 -1
  51. package/dist/tools/get-form.js +4 -31
  52. package/dist/tools/get-form.js.map +1 -1
  53. package/dist/tools/get-node-media.d.ts +2 -0
  54. package/dist/tools/{get-question-media.js → get-node-media.js} +9 -13
  55. package/dist/tools/get-node-media.js.map +1 -0
  56. package/dist/tools/list-forms.d.ts +2 -0
  57. package/dist/tools/list-forms.js +86 -0
  58. package/dist/tools/list-forms.js.map +1 -0
  59. package/dist/tools/log-generation.js +1 -2
  60. package/dist/tools/log-generation.js.map +1 -1
  61. package/dist/tools/render-composition.js +18 -13
  62. package/dist/tools/render-composition.js.map +1 -1
  63. package/dist/tools/search-media.js +1 -1
  64. package/dist/tools/search-media.js.map +1 -1
  65. package/dist/tools/set-node-logic.d.ts +2 -0
  66. package/dist/tools/set-node-logic.js +54 -0
  67. package/dist/tools/set-node-logic.js.map +1 -0
  68. package/dist/tools/update-form.js +29 -11
  69. package/dist/tools/update-form.js.map +1 -1
  70. package/dist/tools/update-node.d.ts +2 -0
  71. package/dist/tools/{update-question.js → update-node.js} +14 -12
  72. package/dist/tools/update-node.js.map +1 -0
  73. package/dist/tools/upload-node-media.d.ts +2 -0
  74. package/dist/tools/upload-node-media.js +105 -0
  75. package/dist/tools/upload-node-media.js.map +1 -0
  76. package/package.json +1 -1
  77. package/dist/tools/add-question.js +0 -47
  78. package/dist/tools/add-question.js.map +0 -1
  79. package/dist/tools/attach-question-audio.d.ts +0 -2
  80. package/dist/tools/attach-question-audio.js +0 -37
  81. package/dist/tools/attach-question-audio.js.map +0 -1
  82. package/dist/tools/delete-question-media.d.ts +0 -2
  83. package/dist/tools/delete-question-media.js +0 -29
  84. package/dist/tools/delete-question-media.js.map +0 -1
  85. package/dist/tools/delete-question.d.ts +0 -2
  86. package/dist/tools/delete-question.js +0 -29
  87. package/dist/tools/delete-question.js.map +0 -1
  88. package/dist/tools/get-question-media.d.ts +0 -2
  89. package/dist/tools/get-question-media.js.map +0 -1
  90. package/dist/tools/set-question-logic.d.ts +0 -2
  91. package/dist/tools/set-question-logic.js +0 -54
  92. package/dist/tools/set-question-logic.js.map +0 -1
  93. package/dist/tools/update-question.d.ts +0 -2
  94. package/dist/tools/update-question.js.map +0 -1
  95. package/dist/tools/upload-question-media.d.ts +0 -2
  96. package/dist/tools/upload-question-media.js +0 -77
  97. package/dist/tools/upload-question-media.js.map +0 -1
package/README.md CHANGED
@@ -1,75 +1,87 @@
1
1
  # @clipform/mcp-server
2
2
 
3
- MCP server for [Clipform](https://clipform.io) - build and manage video-style forms from Claude Code, Claude Desktop, or any MCP client.
3
+ MCP server for [Clipform](https://clipform.io) - build and manage video-style forms from any MCP client (Claude, ChatGPT, Cursor, Windsurf, etc.).
4
4
 
5
5
  ## Install
6
6
 
7
7
  There are two ways to connect: **remote** (recommended, uses your Clipform account) and **local** (anonymous, free-tier limits).
8
8
 
9
- ### Remote - claude.ai (recommended)
9
+ ### Remote (recommended)
10
10
 
11
- Use this if you have a Clipform account. Forms are created directly in your workspace and your plan tier applies (no 3-question cap on Pro).
11
+ Use this if you have a Clipform account. Forms are created directly in your workspace and your plan tier applies (no 3-node cap on Pro).
12
12
 
13
- 1. In claude.ai, open **Settings → Connectors → Add custom connector**.
14
- 2. Enter the MCP URL: `https://mcp.clipform.io`
15
- 3. Follow the OAuth prompts. You'll be redirected to Clipform to sign in and pick a workspace.
13
+ **Claude (claude.ai):** Settings → Connectors → Add custom connector → enter `https://mcp.clipform.io`
16
14
 
17
- No install or config file needed - claude.ai handles discovery and registration automatically via OAuth 2.1 + Dynamic Client Registration (RFC 7591).
15
+ **ChatGPT:** Settings Connectors Advanced enable Developer Mode Create connector enter `https://mcp.clipform.io` (requires Pro/Team/Enterprise)
18
16
 
19
- ### Local - Claude Code / Claude Desktop
17
+ **Any MCP client with OAuth:** Point it at `https://mcp.clipform.io` - discovery, registration, and auth are handled automatically via OAuth 2.1 + Dynamic Client Registration (RFC 7591).
20
18
 
21
- Use this for local development or if you don't have a Clipform account. Forms go into a shared anonymous workspace with the free-tier 3-question limit, and you claim them afterwards via the claim URL.
19
+ ### Local - Claude Code / Claude Desktop / Cursor / etc.
20
+
21
+ Use this for stdio-based MCP clients. Pass your API key to authenticate with your workspace and plan tier.
22
22
 
23
23
  **Claude Code:**
24
24
 
25
25
  ```bash
26
- claude mcp add clipform -- npx -y @clipform/mcp-server
26
+ claude mcp add clipform -e CLIPFORM_API_KEY=cf_live_xxx -- npx -y @clipform/mcp-server
27
27
  ```
28
28
 
29
- **Claude Desktop** - add to `claude_desktop_config.json`:
29
+ **Claude Desktop / Cursor / Windsurf / OpenClaw** - add to your MCP config:
30
30
 
31
31
  ```json
32
32
  {
33
33
  "mcpServers": {
34
34
  "clipform": {
35
35
  "command": "npx",
36
- "args": ["-y", "@clipform/mcp-server"]
36
+ "args": ["-y", "@clipform/mcp-server"],
37
+ "env": {
38
+ "CLIPFORM_API_KEY": "cf_live_xxx"
39
+ }
37
40
  }
38
41
  }
39
42
  }
40
43
  ```
41
44
 
45
+ Generate an API key in your Clipform dashboard under **Settings > API Keys**.
46
+
47
+ You can also pass the key as a CLI flag: `npx -y @clipform/mcp-server --api-key=cf_live_xxx`
48
+
49
+ **Anonymous mode** (no API key): Forms go into a shared workspace with the free-tier 3-node limit. You'll get a claim URL to move forms into your account.
50
+
42
51
  ## Tools
43
52
 
44
- ### Form & question management
53
+ ### Form & node management
45
54
 
46
55
  | Tool | Description |
47
56
  |------|-------------|
48
- | `clipform_create_form` | Create a new form with questions in one call |
49
- | `clipform_get_form` | View a form and all its questions |
57
+ | `clipform_create_form` | Create a new form with nodes, theming, and tags in one call |
58
+ | `clipform_list_forms` | List forms in your workspace with filtering and pagination |
59
+ | `clipform_get_form` | View a form and all its nodes |
50
60
  | `clipform_update_form` | Change title, publish status, or settings |
51
61
  | `clipform_delete_form` | Delete an unclaimed form |
52
- | `clipform_add_question` | Add a question to an existing form |
53
- | `clipform_update_question` | Update question text, type, config, or options |
54
- | `clipform_delete_question` | Remove a question (logic chain auto-relinks) |
62
+ | `clipform_add_node` | Add a node to an existing form |
63
+ | `clipform_update_node` | Update node text, type, config, or options |
64
+ | `clipform_delete_node` | Remove a node (logic chain auto-relinks) |
55
65
 
56
66
  ### Media & logic
57
67
 
58
68
  | Tool | Description |
59
69
  |------|-------------|
60
- | `clipform_upload_question_media` | Attach video or image to a question |
61
- | `clipform_get_question_media` | View a question's media details |
62
- | `clipform_delete_question_media` | Remove media from a question |
63
- | `clipform_attach_question_audio` | Attach audio to a still-image question |
64
- | `clipform_set_question_logic` | Set branching logic on a question |
70
+ | `clipform_upload_node_media` | Attach video or image to one or more nodes (batch, max 10) |
71
+ | `clipform_get_node_media` | View a node's media details |
72
+ | `clipform_delete_node_media` | Remove media from a node |
73
+ | `clipform_attach_audio` | Attach audio to a still-image node |
74
+ | `clipform_set_logic` | Set branching logic on a node |
65
75
 
66
76
  ### Creative
67
77
 
68
78
  | Tool | Description |
69
79
  |------|-------------|
70
- | `clipform_render_composition` | Render a Remotion composition to MP4, PNG, or GIF |
80
+ | `clipform_render_composition` | Render a Remotion composition to MP4, PNG, or GIF (async - returns job ID) |
71
81
  | `clipform_generate_tts` | Generate narration audio with word-level captions |
72
- | `clipform_generate_slideshow` | Create slideshow videos from images + audio (director props: zoom, pan, easing, blur-pad, vignette, per-image style) |
82
+ | `clipform_generate_slideshow` | Create slideshow videos from images + audio (async - returns job ID) |
83
+ | `clipform_generate_video` | Generate video from images, clips, or both synced to audio (async - returns job ID) |
84
+ | `clipform_check_render` | Check status of an async render job |
73
85
  | `clipform_search_media` | Search royalty-free images and videos |
74
86
  | `clipform_search_music` | Search royalty-free music and ambient sounds |
75
87
  | `clipform_list_compositions` | List available Remotion compositions and prop schemas |
@@ -81,13 +93,15 @@ claude mcp add clipform -- npx -y @clipform/mcp-server
81
93
 
82
94
  ## How it works
83
95
 
84
- **Remote (claude.ai):** OAuth Bearer tokens are audience-bound to `https://mcp.clipform.io` (RFC 8707) and scoped to `mcp` only. Forms land directly in the workspace you approved during consent, and plan-tier limits come from that workspace's company.
96
+ **Remote (OAuth):** Bearer tokens are audience-bound to `https://mcp.clipform.io` (RFC 8707) and scoped to `mcp` only. Forms land directly in the workspace you approved during consent.
97
+
98
+ **Local with API key:** The `CLIPFORM_API_KEY` is sent as a standard `Authorization: Bearer` header. Forms are created directly in the key's workspace with your plan tier limits.
85
99
 
86
- **Local (npx):** When you create a form, you get back an `edit_token` that authorizes all subsequent changes. The token works until the form is claimed by a user via the claim URL.
100
+ **Local anonymous (no key):** Forms go into a shared unclaimed workspace. No auth is needed to edit them - the form UUID is the only credential. You'll get a claim URL to transfer ownership. Free-tier 3-node limit applies.
87
101
 
88
- Forms are created with a start node and end screen automatically - you just add the questions in between.
102
+ Forms are created with a start node and end screen automatically - you just add the nodes in between.
89
103
 
90
104
  ## Links
91
105
 
92
106
  - [Clipform](https://clipform.io) - Create interactive video forms
93
- - [Documentation](https://docs.clipform.io) - Full guide with question types, scoring, and more
107
+ - [Documentation](https://clipform.io/docs/guides/mcp) - Full guide with node types, scoring, and more
@@ -8,9 +8,9 @@
8
8
  */
9
9
  import { describe, it, expect } from "vitest";
10
10
  import { registerUpdateFormTool } from "../tools/update-form.js";
11
- import { registerAddQuestionTool } from "../tools/add-question.js";
12
- import { registerUpdateQuestionTool } from "../tools/update-question.js";
13
- import { registerUploadQuestionMediaTool } from "../tools/upload-question-media.js";
11
+ import { registerAddNodeTool } from "../tools/add-node.js";
12
+ import { registerUpdateNodeTool } from "../tools/update-node.js";
13
+ import { registerUploadNodeMediaTool } from "../tools/upload-node-media.js";
14
14
  import { registerCreateFormTool } from "../tools/create-form.js";
15
15
  // ---------------------------------------------------------------------------
16
16
  // Helpers
@@ -67,7 +67,7 @@ function arrayElementFields(zodSchema) {
67
67
  * Fields that are MCP-internal (auth/routing, not API body fields).
68
68
  * These are excluded from parity checks.
69
69
  */
70
- const MCP_ONLY_FIELDS = ["form_id", "edit_token", "question_id"];
70
+ const MCP_ONLY_FIELDS = ["form_id", "node_id", "workspace_id"];
71
71
  const API_PARITY = {
72
72
  "update-form": {
73
73
  register: registerUpdateFormTool,
@@ -79,23 +79,24 @@ const API_PARITY = {
79
79
  /** Fields the create tool should expose (beyond title/questions which are core) */
80
80
  apiBodyFields: ["title", "questions", "show_step_counter", "disable_back_navigation", "primary_color", "background_color", "font_family"],
81
81
  },
82
- "add-question": {
83
- register: registerAddQuestionTool,
84
- apiBodyFields: ["question", "after_question_id"],
85
- /** Nested: fields inside the question object */
86
- questionFields: ["type", "prompt", "label", "required", "config", "options"],
82
+ "add-node": {
83
+ register: registerAddNodeTool,
84
+ apiBodyFields: ["question", "after_node_id"],
85
+ /** Nested: fields inside the node object */
86
+ nodeFields: ["type", "prompt", "label", "required", "config", "options"],
87
87
  /** Nested: fields inside each option */
88
88
  optionFields: ["content", "score", "scores"],
89
89
  },
90
- "update-question": {
91
- register: registerUpdateQuestionTool,
90
+ "update-node": {
91
+ register: registerUpdateNodeTool,
92
92
  apiBodyFields: ["prompt", "label", "type", "required", "config", "options"],
93
93
  optionFields: ["content", "score", "scores"],
94
94
  },
95
- "upload-question-media": {
96
- register: registerUploadQuestionMediaTool,
97
- /** Body fields accepted by POST /forms/:formId/questions/:questionId/media */
98
- apiBodyFields: ["media_type", "media_source", "url", "captions", "show_captions"],
95
+ "upload-node-media": {
96
+ register: registerUploadNodeMediaTool,
97
+ /** Body fields accepted by POST /forms/:formId/nodes/:nodeId/media (nested inside items[]) */
98
+ apiBodyFields: ["items"],
99
+ mediaItemFields: ["node_id", "media_type", "media_source", "url", "captions", "show_captions"],
99
100
  },
100
101
  };
101
102
  // ---------------------------------------------------------------------------
@@ -113,12 +114,20 @@ describe("api-parity", () => {
113
114
  expect(mcpFields, `MCP tool "${toolName}" is missing API field "${field}"`).toContain(field);
114
115
  }
115
116
  });
116
- if ("questionFields" in spec) {
117
- it("question schema exposes all API question fields", () => {
118
- const questionSchema = schema.question;
119
- const qFields = shapeFields(questionSchema);
120
- for (const field of spec.questionFields) {
121
- expect(qFields, `QuestionSchema is missing field "${field}"`).toContain(field);
117
+ if ("nodeFields" in spec) {
118
+ it("node schema exposes all API node fields", () => {
119
+ const nodeSchema = schema.question;
120
+ const nFields = shapeFields(nodeSchema);
121
+ for (const field of spec.nodeFields) {
122
+ expect(nFields, `NodeSchema is missing field "${field}"`).toContain(field);
123
+ }
124
+ });
125
+ }
126
+ if ("mediaItemFields" in spec) {
127
+ it("media item schema exposes all API media fields", () => {
128
+ const itemFields = arrayElementFields(schema.items);
129
+ for (const field of spec.mediaItemFields) {
130
+ expect(itemFields, `MediaItemSchema is missing field "${field}"`).toContain(field);
122
131
  }
123
132
  });
124
133
  }
@@ -128,7 +137,7 @@ describe("api-parity", () => {
128
137
  // For update-question: schema.options is directly on the inputSchema
129
138
  let optionsSchema;
130
139
  if (schema.question) {
131
- // Nested inside QuestionSchema
140
+ // Nested inside NodeSchema
132
141
  const qShape = schema.question._def?.shape;
133
142
  const shape = typeof qShape === "function" ? qShape() : qShape;
134
143
  optionsSchema = shape?.options;
@@ -1 +1 @@
1
- {"version":3,"file":"api-parity.test.js","sourceRoot":"","sources":["../../src/__tests__/api-parity.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-parity.test.js","sourceRoot":"","sources":["../../src/__tests__/api-parity.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,qEAAqE;AACrE,SAAS,aAAa,CAAC,UAAiC;IACtD,IAAI,QAAQ,GAAwB,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG;QACjB,YAAY,EAAE,CAAC,KAAa,EAAE,GAAQ,EAAE,QAAa,EAAE,EAAE;YACvD,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC;QAC7B,CAAC;KACF,CAAC;IACF,UAAU,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,oEAAoE;AACpE,SAAS,UAAU,CAAC,MAA2B;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,4DAA4D;AAC5D,SAAS,WAAW,CAAC,SAAc;IACjC,MAAM,KAAK,GAAG,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC;IACrC,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7D,IAAI,KAAK;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAS,MAAM,CAAC,MAAW;IACzB,OAAO,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6FAA6F;AAC7F,SAAS,kBAAkB,CAAC,SAAc;IACxC,gDAAgD;IAChD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACtC,qDAAqD;IACrD,MAAM,QAAQ,GAAG,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC;IACzC,IAAI,QAAQ;QAAE,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,8EAA8E;AAC9E,sEAAsE;AACtE,gDAAgD;AAChD,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,GAAG;IACjB,aAAa,EAAE;QACb,QAAQ,EAAE,sBAAsB;QAChC,iGAAiG;QACjG,aAAa,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,CAAC;KAC5J;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,sBAAsB;QAChC,mFAAmF;QACnF,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,CAAC;KAC1I;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,mBAAmB;QAC7B,aAAa,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;QAC5C,4CAA4C;QAC5C,UAAU,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC;QACxE,wCAAwC;QACxC,YAAY,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC7C;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,sBAAsB;QAChC,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC3E,YAAY,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC7C;IACD,mBAAmB,EAAE;QACnB,QAAQ,EAAE,2BAA2B;QACrC,8FAA8F;QAC9F,aAAa,EAAE,CAAC,OAAO,CAAC;QACxB,eAAe,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,CAAC;KAC/F;CACO,CAAC;AAEX,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;gBACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvC,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;wBAAE,SAAS;oBAC9C,MAAM,CAAC,SAAS,EAAE,aAAa,QAAQ,2BAA2B,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC/F,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBACzB,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;oBACjD,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC;oBACnC,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;oBACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACpC,MAAM,CAAC,OAAO,EAAE,gCAAgC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAC7E,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,iBAAiB,IAAI,IAAI,EAAE,CAAC;gBAC9B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;oBACxD,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACpD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;wBACzC,MAAM,CAAC,UAAU,EAAE,qCAAqC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACrF,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;gBAC3B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;oBACrD,yEAAyE;oBACzE,qEAAqE;oBACrE,IAAI,aAAkB,CAAC;oBACvB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACpB,2BAA2B;wBAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;wBAC3C,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;wBAC/D,aAAa,GAAG,KAAK,EAAE,OAAO,CAAC;oBACjC,CAAC;yBAAM,CAAC;wBACN,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;oBACjC,CAAC;oBAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;oBACpD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtC,MAAM,CAAC,SAAS,EAAE,kCAAkC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACjF,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
3
  import { createServer } from "./server.js";
4
+ import { setApiKey } from "./lib/api-client.js";
5
+ const apiKeyArg = process.argv.find((a) => a.startsWith("--api-key="));
6
+ const apiKey = apiKeyArg?.split("=")[1] || process.env.CLIPFORM_API_KEY;
7
+ if (apiKey) {
8
+ setApiKey(apiKey);
9
+ }
4
10
  const server = createServer();
5
11
  const transport = new StdioServerTransport();
6
12
  await server.connect(transport);
7
- console.error("Clipform MCP Server running on stdio");
13
+ console.error(apiKey
14
+ ? "Clipform MCP Server running on stdio (API key authenticated)"
15
+ : "Clipform MCP Server running on stdio (anonymous mode)");
8
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;AAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;AACvE,MAAM,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAExE,IAAI,MAAM,EAAE,CAAC;IACX,SAAS,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;AAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChC,OAAO,CAAC,KAAK,CACX,MAAM;IACJ,CAAC,CAAC,8DAA8D;IAChE,CAAC,CAAC,uDAAuD,CAC5D,CAAC"}
@@ -1,8 +1,9 @@
1
+ export declare function setApiKey(key: string): void;
2
+ export declare function getApiKey(): string | undefined;
1
3
  interface ApiOptions {
2
4
  method?: string;
3
5
  body?: Record<string, unknown>;
4
6
  params?: Record<string, string>;
5
- token?: string;
6
7
  }
7
8
  type ApiResult = {
8
9
  ok: true;
@@ -17,7 +18,7 @@ export declare function callApi(path: string, options?: ApiOptions): Promise<Api
17
18
  * Call an internal API endpoint (formgen, media, etc.)
18
19
  * Uses INTERNAL_SECRET for auth and INTERNAL_API_URL as base.
19
20
  */
20
- export declare function callInternalApi(path: string, options?: Omit<ApiOptions, "token">): Promise<ApiResult>;
21
+ export declare function callInternalApi(path: string, options?: ApiOptions): Promise<ApiResult>;
21
22
  export declare function errorResult(message: string): {
22
23
  content: {
23
24
  type: "text";
@@ -3,8 +3,15 @@ const DASHBOARD_URL = process.env.SERVER_URL || process.env.DASHBOARD_URL || "ht
3
3
  const API_VERSION = "v1";
4
4
  const INTERNAL_API_URL = process.env.INTERNAL_API_URL || DASHBOARD_URL;
5
5
  const INTERNAL_SECRET = process.env.INTERNAL_SERVICE_SECRET || "";
6
+ let _apiKey;
7
+ export function setApiKey(key) {
8
+ _apiKey = key;
9
+ }
10
+ export function getApiKey() {
11
+ return _apiKey;
12
+ }
6
13
  export async function callApi(path, options = {}) {
7
- const { method = "GET", body, params, token } = options;
14
+ const { method = "GET", body, params } = options;
8
15
  let url = `${DASHBOARD_URL}/${API_VERSION}${path}`;
9
16
  if (params) {
10
17
  const searchParams = new URLSearchParams(params);
@@ -28,8 +35,8 @@ export async function callApi(path, options = {}) {
28
35
  headers["X-Mcp-User"] = mcpAuth.user_id;
29
36
  headers["X-Mcp-Workspace"] = mcpAuth.workspace_id;
30
37
  }
31
- else if (token) {
32
- headers["Authorization"] = `Bearer ${token}`;
38
+ else if (_apiKey) {
39
+ headers["Authorization"] = `Bearer ${_apiKey}`;
33
40
  }
34
41
  const fetchOptions = { method, headers };
35
42
  if (body && method !== "GET") {
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function formatFormState(data: Record<string, unknown>): string;
2
+ export declare function fetchAndFormatFormState(formId: string): Promise<string | null>;
@@ -0,0 +1,32 @@
1
+ import { callApi } from "./api-client.js";
2
+ export function formatFormState(data) {
3
+ const questions = data.questions;
4
+ const lines = [
5
+ `Form: ${data.title}`,
6
+ `Form ID: ${data.form_id}`,
7
+ `Published: ${data.is_published}`,
8
+ ``,
9
+ `Nodes (in order):`,
10
+ ];
11
+ for (let i = 0; i < questions.length; i++) {
12
+ const q = questions[i];
13
+ lines.push(` ${i + 1}. [${q.type}] ${q.prompt || "(no prompt)"}`);
14
+ lines.push(` Node ID: ${q.id}`);
15
+ if (q.required)
16
+ lines.push(` Required: yes`);
17
+ if (q.config && Object.keys(q.config).length > 0) {
18
+ lines.push(` Config: ${JSON.stringify(q.config)}`);
19
+ }
20
+ if (q.options && q.options.length > 0) {
21
+ lines.push(` Options: ${q.options.map((o) => o.content).join(", ")}`);
22
+ }
23
+ }
24
+ return lines.join("\n");
25
+ }
26
+ export async function fetchAndFormatFormState(formId) {
27
+ const result = await callApi(`/forms/${formId}`);
28
+ if (!result.ok)
29
+ return null;
30
+ return formatFormState(result.data);
31
+ }
32
+ //# sourceMappingURL=format-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-form.js","sourceRoot":"","sources":["../../src/lib/format-form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,UAAU,eAAe,CAAC,IAA6B;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,SAQrB,CAAC;IAEH,MAAM,KAAK,GAAa;QACtB,SAAS,IAAI,CAAC,KAAK,EAAE;QACrB,YAAY,IAAI,CAAC,OAAO,EAAE;QAC1B,cAAc,IAAI,CAAC,YAAY,EAAE;QACjC,EAAE;QACF,mBAAmB;KACpB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjD,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CACR,iBAAiB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,17 @@
1
+ export interface RenderJob {
2
+ id: string;
3
+ status: "rendering" | "complete" | "failed";
4
+ tool: string;
5
+ createdAt: number;
6
+ result?: Record<string, unknown>;
7
+ error?: string;
8
+ }
9
+ export declare const RENDER_TIMING: {
10
+ readonly expectedRange: "15-45 seconds";
11
+ readonly pollDelay: "~10 seconds";
12
+ };
13
+ export declare function createJob(tool: string): RenderJob;
14
+ export declare function completeJob(id: string, result: Record<string, unknown>): void;
15
+ export declare function failJob(id: string, error: string): void;
16
+ export declare function getJob(id: string): RenderJob | undefined;
17
+ export declare function pruneJobs(): void;
@@ -0,0 +1,44 @@
1
+ import { v4 as uuidv4 } from "uuid";
2
+ const jobs = new Map();
3
+ const MAX_AGE_MS = 30 * 60 * 1000; // 30 minutes
4
+ // Keep in sync with apps/api/src/lib/remotion/render-lambda.ts (framesPerLambda).
5
+ // With framesPerLambda=20 and 1000 concurrent Lambdas, renders finish in ~15-45s.
6
+ export const RENDER_TIMING = {
7
+ expectedRange: "15-45 seconds",
8
+ pollDelay: "~10 seconds",
9
+ };
10
+ export function createJob(tool) {
11
+ const job = {
12
+ id: uuidv4(),
13
+ status: "rendering",
14
+ tool,
15
+ createdAt: Date.now(),
16
+ };
17
+ jobs.set(job.id, job);
18
+ return job;
19
+ }
20
+ export function completeJob(id, result) {
21
+ const job = jobs.get(id);
22
+ if (job) {
23
+ job.status = "complete";
24
+ job.result = result;
25
+ }
26
+ }
27
+ export function failJob(id, error) {
28
+ const job = jobs.get(id);
29
+ if (job) {
30
+ job.status = "failed";
31
+ job.error = error;
32
+ }
33
+ }
34
+ export function getJob(id) {
35
+ return jobs.get(id);
36
+ }
37
+ export function pruneJobs() {
38
+ const cutoff = Date.now() - MAX_AGE_MS;
39
+ for (const [id, job] of jobs) {
40
+ if (job.createdAt < cutoff)
41
+ jobs.delete(id);
42
+ }
43
+ }
44
+ //# sourceMappingURL=render-jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-jobs.js","sourceRoot":"","sources":["../../src/lib/render-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAWpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE1C,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;AAEhD,kFAAkF;AAClF,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,aAAa,EAAE,eAAe;IAC9B,SAAS,EAAE,aAAa;CAChB,CAAC;AAEX,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,GAAG,GAAc;QACrB,EAAE,EAAE,MAAM,EAAE;QACZ,MAAM,EAAE,WAAW;QACnB,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACtB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAU,EAAE,MAA+B;IACrE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC;QACxB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAU,EAAE,KAAa;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;QACtB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,EAAU;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IACvC,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,SAAS,GAAG,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
- /** Active, non-system question types — the only types the MCP server exposes */
3
- export declare const QUESTION_TYPES: [string, ...string[]];
2
+ /** Active, non-system node types — the only types the MCP server exposes */
3
+ export declare const ACTIVE_NODE_TYPES: [string, ...string[]];
4
4
  /** Contact field IDs derived from the config package */
5
5
  export declare const CONTACT_FIELD_IDS: string[];
6
6
  /** Per-type description including config hints, auto-generated from NODE_TYPES */
7
- export declare const QUESTION_TYPES_DESCRIPTION: string;
7
+ export declare const NODE_TYPES_DESCRIPTION: string;
8
8
  /** Aggregate config description for Zod .describe() on the config field */
9
9
  export declare const CONFIG_DESCRIPTION: string;
10
10
  export declare const OptionSchema: z.ZodObject<{
@@ -20,7 +20,7 @@ export declare const OptionSchema: z.ZodObject<{
20
20
  score?: number | undefined;
21
21
  scores?: Record<string, number> | undefined;
22
22
  }>;
23
- export declare const QuestionSchema: z.ZodObject<{
23
+ export declare const NodeSchema: z.ZodObject<{
24
24
  type: z.ZodEnum<[string, ...string[]]>;
25
25
  prompt: z.ZodString;
26
26
  label: z.ZodOptional<z.ZodString>;
@@ -1,8 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { NODE_TYPES, CONTACT_FIELDS } from "./config.js";
3
3
  // --- Derived constants (zero hardcoded type lists) ---
4
- /** Active, non-system question types — the only types the MCP server exposes */
5
- export const QUESTION_TYPES = Object.entries(NODE_TYPES)
4
+ /** Active, non-system node types — the only types the MCP server exposes */
5
+ export const ACTIVE_NODE_TYPES = Object.entries(NODE_TYPES)
6
6
  .filter(([, def]) => def.is_active && !def.is_system)
7
7
  .map(([type]) => type); // tuple for z.enum
8
8
  /** Contact field IDs derived from the config package */
@@ -71,9 +71,9 @@ function generateConfigSummary(configSchema, typeKey) {
71
71
  return parts.length > 0 ? `Config: ${parts.join(", ")}` : "";
72
72
  }
73
73
  /** Per-type description including config hints, auto-generated from NODE_TYPES */
74
- export const QUESTION_TYPES_DESCRIPTION = (() => {
75
- const lines = ["Question types:"];
76
- for (const type of QUESTION_TYPES) {
74
+ export const NODE_TYPES_DESCRIPTION = (() => {
75
+ const lines = ["Node types:"];
76
+ for (const type of ACTIVE_NODE_TYPES) {
77
77
  const def = NODE_TYPES[type];
78
78
  let line = `- ${type}: ${def.description || def.label}`;
79
79
  if (def.has_options) {
@@ -90,7 +90,7 @@ export const QUESTION_TYPES_DESCRIPTION = (() => {
90
90
  /** Aggregate config description for Zod .describe() on the config field */
91
91
  export const CONFIG_DESCRIPTION = (() => {
92
92
  const lines = ["Type-specific configuration. Per-type keys:"];
93
- for (const type of QUESTION_TYPES) {
93
+ for (const type of ACTIVE_NODE_TYPES) {
94
94
  const def = NODE_TYPES[type];
95
95
  const summary = generateConfigSummary(def.config_schema, type);
96
96
  if (summary) {
@@ -108,7 +108,7 @@ export const OptionSchema = z.object({
108
108
  /** Build options description from config - which types need options, min counts, max lengths */
109
109
  const OPTIONS_DESCRIPTION = (() => {
110
110
  const hints = ["Answer options."];
111
- for (const type of QUESTION_TYPES) {
111
+ for (const type of ACTIVE_NODE_TYPES) {
112
112
  const def = NODE_TYPES[type];
113
113
  if (!def.has_options)
114
114
  continue;
@@ -123,10 +123,10 @@ const OPTIONS_DESCRIPTION = (() => {
123
123
  }
124
124
  return hints.join(" ");
125
125
  })();
126
- export const QuestionSchema = z.object({
127
- type: z.enum(QUESTION_TYPES),
128
- prompt: z.string().describe("The question text shown to the respondent"),
129
- label: z.string().optional().describe("Short label for the question (used in logic builder). Defaults to the prompt text."),
126
+ export const NodeSchema = z.object({
127
+ type: z.enum(ACTIVE_NODE_TYPES),
128
+ prompt: z.string().describe("The text shown to the respondent"),
129
+ label: z.string().optional().describe("Short label for the node (used in logic builder). Defaults to the prompt text."),
130
130
  required: z.boolean().optional().default(true),
131
131
  config: z
132
132
  .record(z.unknown())
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/lib/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/lib/schemas.ts"],"names":[],"mappings":"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"}
@@ -9,12 +9,18 @@ export async function getSessionContext() {
9
9
  const lines = [];
10
10
  lines.push("## Your Session");
11
11
  if (me.auth_mode === "oauth") {
12
- lines.push(`Workspace: ${me.workspace?.name ?? "Unknown"}`);
12
+ lines.push(`Auth: OAuth (connected)`);
13
+ lines.push(`Workspace: ${me.workspace?.name ?? "Unknown"} (${me.workspace?.id ?? "?"})`);
14
+ lines.push(`User: ${me.user_id ?? "?"}`);
15
+ lines.push(`Company: ${me.company_id ?? "none"}`);
13
16
  }
14
17
  else {
15
- lines.push("Mode: anonymous (not connected to a Clipform account)");
18
+ lines.push("Auth: anonymous (not connected to a Clipform account)");
19
+ if (me.workspace) {
20
+ lines.push(`Workspace: ${me.workspace.name} (${me.workspace.id})`);
21
+ }
16
22
  }
17
- lines.push(`Plan: ${plan.name}`);
23
+ lines.push(`Plan: ${plan.name} (tier ${plan.tier})`);
18
24
  if (plan.node_limit !== null) {
19
25
  lines.push(`Question limit: ${plan.node_limit} per form`);
20
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session-context.js","sourceRoot":"","sources":["../../src/lib/session-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAE1B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAW,CAAC;IAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;IACrB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,UAAU,WAAW,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,EAAE,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,wFAAwF,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1H,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"session-context.js","sourceRoot":"","sources":["../../src/lib/session-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IAE1B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAW,CAAC;IAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;IACrB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,IAAI,IAAI,SAAS,KAAK,EAAE,CAAC,SAAS,EAAE,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACpE,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,UAAU,WAAW,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,EAAE,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,wFAAwF,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1H,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}