@clipform/mcp-server 1.5.1 → 1.8.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.
Files changed (108) hide show
  1. package/README.md +51 -26
  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 -1
  7. package/dist/lib/api-client.js +31 -5
  8. package/dist/lib/api-client.js.map +1 -1
  9. package/dist/lib/auth-context.d.ts +17 -0
  10. package/dist/lib/auth-context.js +9 -0
  11. package/dist/lib/auth-context.js.map +1 -0
  12. package/dist/lib/format-form.d.ts +2 -0
  13. package/dist/lib/format-form.js +32 -0
  14. package/dist/lib/format-form.js.map +1 -0
  15. package/dist/lib/render-jobs.d.ts +13 -0
  16. package/dist/lib/render-jobs.js +38 -0
  17. package/dist/lib/render-jobs.js.map +1 -0
  18. package/dist/lib/schemas.d.ts +4 -4
  19. package/dist/lib/schemas.js +11 -11
  20. package/dist/lib/schemas.js.map +1 -1
  21. package/dist/lib/session-context.d.ts +1 -0
  22. package/dist/lib/session-context.js +38 -0
  23. package/dist/lib/session-context.js.map +1 -0
  24. package/dist/prompts.js +262 -125
  25. package/dist/prompts.js.map +1 -1
  26. package/dist/resources.d.ts +2 -0
  27. package/dist/resources.js +336 -0
  28. package/dist/resources.js.map +1 -0
  29. package/dist/server.js +29 -23
  30. package/dist/server.js.map +1 -1
  31. package/dist/tools/add-node.d.ts +2 -0
  32. package/dist/tools/add-node.js +50 -0
  33. package/dist/tools/add-node.js.map +1 -0
  34. package/dist/tools/attach-node-audio.d.ts +2 -0
  35. package/dist/tools/attach-node-audio.js +37 -0
  36. package/dist/tools/attach-node-audio.js.map +1 -0
  37. package/dist/tools/{add-question.d.ts → check-render.d.ts} +1 -1
  38. package/dist/tools/check-render.js +47 -0
  39. package/dist/tools/check-render.js.map +1 -0
  40. package/dist/tools/create-form.js +90 -19
  41. package/dist/tools/create-form.js.map +1 -1
  42. package/dist/tools/delete-form.js +2 -2
  43. package/dist/tools/delete-form.js.map +1 -1
  44. package/dist/tools/delete-node-media.d.ts +2 -0
  45. package/dist/tools/delete-node-media.js +29 -0
  46. package/dist/tools/delete-node-media.js.map +1 -0
  47. package/dist/tools/delete-node.d.ts +2 -0
  48. package/dist/tools/delete-node.js +32 -0
  49. package/dist/tools/delete-node.js.map +1 -0
  50. package/dist/tools/generate-slideshow.js +129 -26
  51. package/dist/tools/generate-slideshow.js.map +1 -1
  52. package/dist/tools/generate-tts.js +56 -31
  53. package/dist/tools/generate-tts.js.map +1 -1
  54. package/dist/tools/generate-video.d.ts +2 -0
  55. package/dist/tools/generate-video.js +119 -0
  56. package/dist/tools/generate-video.js.map +1 -0
  57. package/dist/tools/get-form.js +5 -26
  58. package/dist/tools/get-form.js.map +1 -1
  59. package/dist/tools/get-node-media.d.ts +2 -0
  60. package/dist/tools/{get-question-media.js → get-node-media.js} +11 -11
  61. package/dist/tools/get-node-media.js.map +1 -0
  62. package/dist/tools/list-assets.js +1 -1
  63. package/dist/tools/list-assets.js.map +1 -1
  64. package/dist/tools/list-compositions.js +3 -3
  65. package/dist/tools/list-compositions.js.map +1 -1
  66. package/dist/tools/log-generation.js +3 -3
  67. package/dist/tools/log-generation.js.map +1 -1
  68. package/dist/tools/render-composition.js +22 -15
  69. package/dist/tools/render-composition.js.map +1 -1
  70. package/dist/tools/search-media.js +2 -2
  71. package/dist/tools/search-media.js.map +1 -1
  72. package/dist/tools/search-music.js +1 -1
  73. package/dist/tools/search-music.js.map +1 -1
  74. package/dist/tools/search-news.js +1 -1
  75. package/dist/tools/search-news.js.map +1 -1
  76. package/dist/tools/set-node-logic.d.ts +2 -0
  77. package/dist/tools/set-node-logic.js +56 -0
  78. package/dist/tools/set-node-logic.js.map +1 -0
  79. package/dist/tools/update-form.js +43 -4
  80. package/dist/tools/update-form.js.map +1 -1
  81. package/dist/tools/update-node.d.ts +2 -0
  82. package/dist/tools/{update-question.js → update-node.js} +16 -13
  83. package/dist/tools/update-node.js.map +1 -0
  84. package/dist/tools/upload-node-media.d.ts +2 -0
  85. package/dist/tools/upload-node-media.js +109 -0
  86. package/dist/tools/upload-node-media.js.map +1 -0
  87. package/package.json +3 -2
  88. package/dist/tools/add-question.js +0 -47
  89. package/dist/tools/add-question.js.map +0 -1
  90. package/dist/tools/attach-question-audio.d.ts +0 -2
  91. package/dist/tools/attach-question-audio.js +0 -37
  92. package/dist/tools/attach-question-audio.js.map +0 -1
  93. package/dist/tools/delete-question-media.d.ts +0 -2
  94. package/dist/tools/delete-question-media.js +0 -29
  95. package/dist/tools/delete-question-media.js.map +0 -1
  96. package/dist/tools/delete-question.d.ts +0 -2
  97. package/dist/tools/delete-question.js +0 -29
  98. package/dist/tools/delete-question.js.map +0 -1
  99. package/dist/tools/get-question-media.d.ts +0 -2
  100. package/dist/tools/get-question-media.js.map +0 -1
  101. package/dist/tools/set-question-logic.d.ts +0 -2
  102. package/dist/tools/set-question-logic.js +0 -54
  103. package/dist/tools/set-question-logic.js.map +0 -1
  104. package/dist/tools/update-question.d.ts +0 -2
  105. package/dist/tools/update-question.js.map +0 -1
  106. package/dist/tools/upload-question-media.d.ts +0 -2
  107. package/dist/tools/upload-question-media.js +0 -69
  108. package/dist/tools/upload-question-media.js.map +0 -1
package/README.md CHANGED
@@ -1,65 +1,86 @@
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
- ```bash
8
- npm install @clipform/mcp-server
9
- ```
7
+ There are two ways to connect: **remote** (recommended, uses your Clipform account) and **local** (anonymous, free-tier limits).
8
+
9
+ ### Remote (recommended)
10
+
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
+
13
+ **Claude (claude.ai):** Settings → Connectors → Add custom connector → enter `https://mcp.clipform.io`
14
+
15
+ **ChatGPT:** Settings → Connectors → Advanced → enable Developer Mode → Create connector → enter `https://mcp.clipform.io` (requires Pro/Team/Enterprise)
16
+
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).
18
+
19
+ ### Local - Claude Code / Claude Desktop / Cursor / etc.
10
20
 
11
- ### Claude Code
21
+ Use this for stdio-based MCP clients. Pass your API key to authenticate with your workspace and plan tier.
22
+
23
+ **Claude Code:**
12
24
 
13
25
  ```bash
14
- 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
15
27
  ```
16
28
 
17
- ### Claude Desktop
18
-
19
- Add to your `claude_desktop_config.json`:
29
+ **Claude Desktop / Cursor / Windsurf / OpenClaw** - add to your MCP config:
20
30
 
21
31
  ```json
22
32
  {
23
33
  "mcpServers": {
24
34
  "clipform": {
25
35
  "command": "npx",
26
- "args": ["-y", "@clipform/mcp-server"]
36
+ "args": ["-y", "@clipform/mcp-server"],
37
+ "env": {
38
+ "CLIPFORM_API_KEY": "cf_live_xxx"
39
+ }
27
40
  }
28
41
  }
29
42
  }
30
43
  ```
31
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
+
32
51
  ## Tools
33
52
 
34
- ### Form & question management
53
+ ### Form & node management
35
54
 
36
55
  | Tool | Description |
37
56
  |------|-------------|
38
- | `clipform_create_form` | Create a new form with questions in one call |
39
- | `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_get_form` | View a form and all its nodes |
40
59
  | `clipform_update_form` | Change title, publish status, or settings |
41
60
  | `clipform_delete_form` | Delete an unclaimed form |
42
- | `clipform_add_question` | Add a question to an existing form |
43
- | `clipform_update_question` | Update question text, type, config, or options |
44
- | `clipform_delete_question` | Remove a question (logic chain auto-relinks) |
61
+ | `clipform_add_node` | Add a node to an existing form |
62
+ | `clipform_update_node` | Update node text, type, config, or options |
63
+ | `clipform_delete_node` | Remove a node (logic chain auto-relinks) |
45
64
 
46
65
  ### Media & logic
47
66
 
48
67
  | Tool | Description |
49
68
  |------|-------------|
50
- | `clipform_upload_question_media` | Attach video or image to a question |
51
- | `clipform_get_question_media` | View a question's media details |
52
- | `clipform_delete_question_media` | Remove media from a question |
53
- | `clipform_attach_question_audio` | Attach audio to a still-image question |
54
- | `clipform_set_question_logic` | Set branching logic on a question |
69
+ | `clipform_upload_node_media` | Attach video or image to one or more nodes (batch, max 10) |
70
+ | `clipform_get_node_media` | View a node's media details |
71
+ | `clipform_delete_node_media` | Remove media from a node |
72
+ | `clipform_attach_audio` | Attach audio to a still-image node |
73
+ | `clipform_set_logic` | Set branching logic on a node |
55
74
 
56
75
  ### Creative
57
76
 
58
77
  | Tool | Description |
59
78
  |------|-------------|
60
- | `clipform_render_composition` | Render a Remotion composition to MP4, PNG, or GIF |
79
+ | `clipform_render_composition` | Render a Remotion composition to MP4, PNG, or GIF (async - returns job ID) |
61
80
  | `clipform_generate_tts` | Generate narration audio with word-level captions |
62
- | `clipform_generate_slideshow` | Create Ken Burns slideshow videos from images + audio |
81
+ | `clipform_generate_slideshow` | Create slideshow videos from images + audio (async - returns job ID) |
82
+ | `clipform_generate_video` | Generate video from images, clips, or both synced to audio (async - returns job ID) |
83
+ | `clipform_check_render` | Check status of an async render job |
63
84
  | `clipform_search_media` | Search royalty-free images and videos |
64
85
  | `clipform_search_music` | Search royalty-free music and ambient sounds |
65
86
  | `clipform_list_compositions` | List available Remotion compositions and prop schemas |
@@ -71,11 +92,15 @@ Add to your `claude_desktop_config.json`:
71
92
 
72
93
  ## How it works
73
94
 
74
- 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.
95
+ **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.
96
+
97
+ **Local with API key:** The `CLIPFORM_API_KEY` is sent as an `X-API-Key` header. Forms are created directly in the key's workspace with your plan tier limits.
98
+
99
+ **Local anonymous (no key):** 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. Free-tier 3-node limit applies.
75
100
 
76
- Forms are created with a start node and end screen automatically - you just add the questions in between.
101
+ Forms are created with a start node and end screen automatically - you just add the nodes in between.
77
102
 
78
103
  ## Links
79
104
 
80
105
  - [Clipform](https://clipform.io) - Create interactive video forms
81
- - [Documentation](https://docs.clipform.io) - Full guide with question types, scoring, and more
106
+ - [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", "edit_token", "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,YAAY,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAE7E,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,3 +1,5 @@
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>;
@@ -15,7 +17,7 @@ type ApiResult = {
15
17
  export declare function callApi(path: string, options?: ApiOptions): Promise<ApiResult>;
16
18
  /**
17
19
  * Call an internal API endpoint (formgen, media, etc.)
18
- * Uses INTERNAL_API_KEY for auth and INTERNAL_API_URL as base.
20
+ * Uses INTERNAL_SECRET for auth and INTERNAL_API_URL as base.
19
21
  */
20
22
  export declare function callInternalApi(path: string, options?: Omit<ApiOptions, "token">): Promise<ApiResult>;
21
23
  export declare function errorResult(message: string): {
@@ -1,7 +1,15 @@
1
+ import { getMcpAuth } from "./auth-context.js";
1
2
  const DASHBOARD_URL = process.env.SERVER_URL || process.env.DASHBOARD_URL || "https://api.clipform.io";
2
3
  const API_VERSION = "v1";
3
4
  const INTERNAL_API_URL = process.env.INTERNAL_API_URL || DASHBOARD_URL;
4
- const INTERNAL_API_KEY = process.env.INTERNAL_API_KEY || "";
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
+ }
5
13
  export async function callApi(path, options = {}) {
6
14
  const { method = "GET", body, params, token } = options;
7
15
  let url = `${DASHBOARD_URL}/${API_VERSION}${path}`;
@@ -12,7 +20,25 @@ export async function callApi(path, options = {}) {
12
20
  const headers = {
13
21
  "Content-Type": "application/json",
14
22
  };
15
- if (token) {
23
+ // If the MCP server is running in-process inside the API host AND the
24
+ // request has been OAuth-authenticated, forward the end-user identity
25
+ // via internal headers instead of propagating the caller's Bearer.
26
+ //
27
+ // Token passthrough is forbidden by the MCP Authorization spec: the
28
+ // token that claude.ai presented was issued for audience `${api}/mcp`
29
+ // and must not be replayed against downstream routes like /v1/forms/*.
30
+ // Those routes instead trust the INTERNAL_SECRET + X-Mcp-User /
31
+ // X-Mcp-Workspace headers set below.
32
+ const mcpAuth = getMcpAuth();
33
+ if (mcpAuth && INTERNAL_SECRET) {
34
+ headers["Authorization"] = `Bearer ${INTERNAL_SECRET}`;
35
+ headers["X-Mcp-User"] = mcpAuth.user_id;
36
+ headers["X-Mcp-Workspace"] = mcpAuth.workspace_id;
37
+ }
38
+ else if (_apiKey) {
39
+ headers["X-API-Key"] = _apiKey;
40
+ }
41
+ else if (token) {
16
42
  headers["Authorization"] = `Bearer ${token}`;
17
43
  }
18
44
  const fetchOptions = { method, headers };
@@ -46,7 +72,7 @@ export async function callApi(path, options = {}) {
46
72
  }
47
73
  /**
48
74
  * Call an internal API endpoint (formgen, media, etc.)
49
- * Uses INTERNAL_API_KEY for auth and INTERNAL_API_URL as base.
75
+ * Uses INTERNAL_SECRET for auth and INTERNAL_API_URL as base.
50
76
  */
51
77
  export async function callInternalApi(path, options = {}) {
52
78
  const { method = "POST", body, params } = options;
@@ -58,8 +84,8 @@ export async function callInternalApi(path, options = {}) {
58
84
  const headers = {
59
85
  "Content-Type": "application/json",
60
86
  };
61
- if (INTERNAL_API_KEY) {
62
- headers["Authorization"] = `Bearer ${INTERNAL_API_KEY}`;
87
+ if (INTERNAL_SECRET) {
88
+ headers["Authorization"] = `Bearer ${INTERNAL_SECRET}`;
63
89
  }
64
90
  const fetchOptions = { method, headers };
65
91
  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,17 @@
1
+ /**
2
+ * Identity of the end-user a given MCP request is acting on behalf of.
3
+ *
4
+ * Populated by the in-process host (apps/api) after validating an OAuth
5
+ * Bearer on /mcp. The MCP tool layer reads it to decide which workspace
6
+ * forms should land in and which plan tier gates apply.
7
+ *
8
+ * NOT populated when the server runs as a local stdio process (npx) - in
9
+ * that mode tools fall back to edit-token based auth.
10
+ */
11
+ export interface McpAuthContext {
12
+ user_id: string;
13
+ workspace_id: string;
14
+ scopes: string[];
15
+ }
16
+ export declare function runWithMcpAuth<T>(ctx: McpAuthContext, fn: () => Promise<T> | T): Promise<T> | T;
17
+ export declare function getMcpAuth(): McpAuthContext | undefined;
@@ -0,0 +1,9 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ const storage = new AsyncLocalStorage();
3
+ export function runWithMcpAuth(ctx, fn) {
4
+ return storage.run(ctx, fn);
5
+ }
6
+ export function getMcpAuth() {
7
+ return storage.getStore();
8
+ }
9
+ //# sourceMappingURL=auth-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-context.js","sourceRoot":"","sources":["../../src/lib/auth-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAkBrD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAkB,CAAC;AAExD,MAAM,UAAU,cAAc,CAAI,GAAmB,EAAE,EAAwB;IAC7E,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function formatFormState(data: Record<string, unknown>): string;
2
+ export declare function fetchAndFormatFormState(formId: string, editToken?: 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, editToken) {
27
+ const result = await callApi(`/forms/${formId}`, { token: editToken });
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,EACd,SAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,13 @@
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 function createJob(tool: string): RenderJob;
10
+ export declare function completeJob(id: string, result: Record<string, unknown>): void;
11
+ export declare function failJob(id: string, error: string): void;
12
+ export declare function getJob(id: string): RenderJob | undefined;
13
+ export declare function pruneJobs(): void;
@@ -0,0 +1,38 @@
1
+ import { v4 as uuidv4 } from "uuid";
2
+ const jobs = new Map();
3
+ const MAX_AGE_MS = 30 * 60 * 1000; // 30 minutes
4
+ export function createJob(tool) {
5
+ const job = {
6
+ id: uuidv4(),
7
+ status: "rendering",
8
+ tool,
9
+ createdAt: Date.now(),
10
+ };
11
+ jobs.set(job.id, job);
12
+ return job;
13
+ }
14
+ export function completeJob(id, result) {
15
+ const job = jobs.get(id);
16
+ if (job) {
17
+ job.status = "complete";
18
+ job.result = result;
19
+ }
20
+ }
21
+ export function failJob(id, error) {
22
+ const job = jobs.get(id);
23
+ if (job) {
24
+ job.status = "failed";
25
+ job.error = error;
26
+ }
27
+ }
28
+ export function getJob(id) {
29
+ return jobs.get(id);
30
+ }
31
+ export function pruneJobs() {
32
+ const cutoff = Date.now() - MAX_AGE_MS;
33
+ for (const [id, job] of jobs) {
34
+ if (job.createdAt < cutoff)
35
+ jobs.delete(id);
36
+ }
37
+ }
38
+ //# 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,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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzD,wDAAwD;AAExD,gFAAgF;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,UAAiC,CAAC;KAC5E,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;KACpD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAA0B,CAAC,CAAC,mBAAmB;AAEtE,wDAAwD;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC,GAAG,CACjD,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAC5B,CAAC;AAEF,6CAA6C;AAE7C;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,YAAiB,EACjB,OAAgB;IAEhB,IAAI,CAAC,YAAY,EAAE,UAAU;QAAE,OAAO,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAM,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,kDAAkD;QAClD,IAAI,GAAG,KAAK,oBAAoB;YAAE,SAAS;QAE3C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,CAAC,GAAG,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,CAAC,IAAI,eAAe,IAAI,CAAC,OAAO,GAAG,CAAC;YACpE,CAAC,IAAI,GAAG,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC;YAC1B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,CAAC,IAAI,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC;YAClE,CAAC,IAAI,GAAG,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC;YACzB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,CAAC,IAAI,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC;YAClE,CAAC,IAAI,GAAG,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,GAAG,GAAG,UAAU,CAAC;YACzB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,CAAC,IAAI,eAAe,IAAI,CAAC,OAAO,GAAG,CAAC;YACpE,CAAC,IAAI,GAAG,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;YAC3D,qCAAqC;YACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,eAAe,QAAQ,IAAI,CAAC,CAAC;QAChD,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpE,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,cAAc,IAAI,GAAG,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrD,uCAAuC;YACvC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,SAAS,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,wBAAwB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE;IAC9C,MAAM,KAAK,GAAa,CAAC,iBAAiB,CAAC,CAAC;IAE5C,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,GAAG,GAAI,UAAkC,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAExD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,IAAI,IAAI,2BAA2B,CAAC;QACtC,CAAC;QAED,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAC,EAAE,CAAC;AAEL,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE;IACtC,MAAM,KAAK,GAAa,CAAC,6CAA6C,CAAC,CAAC;IAExE,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,GAAG,GAAI,UAAkC,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC,CAAC,EAAE,CAAC;AAEL,sBAAsB;AAEtB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACzF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iFAAiF,CAAC;CACpI,CAAC,CAAC;AAEH,gGAAgG;AAChG,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE;IAChC,MAAM,KAAK,GAAa,CAAC,iBAAiB,CAAC,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,GAAG,GAAI,UAAkC,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,SAAS;QAC/B,MAAM,KAAK,GAAa,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC;QAC9C,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,IAAI,GAAG,CAAC,iBAAiB,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,iBAAiB,QAAQ,CAAC,CAAC;QAClG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;IAC3H,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9C,MAAM,EAAE,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACnB,QAAQ,EAAE;SACV,QAAQ,CAAC,kBAAkB,CAAC;IAC/B,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,YAAY,CAAC;SACnB,QAAQ,EAAE;SACV,QAAQ,CAAC,mBAAmB,CAAC;CACjC,CAAC,CAAC"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/lib/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function getSessionContext(): Promise<string>;