@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.
- package/README.md +43 -29
- package/dist/__tests__/api-parity.test.js +31 -22
- package/dist/__tests__/api-parity.test.js.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +3 -2
- package/dist/lib/api-client.js +10 -3
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/format-form.d.ts +2 -0
- package/dist/lib/format-form.js +32 -0
- package/dist/lib/format-form.js.map +1 -0
- package/dist/lib/render-jobs.d.ts +17 -0
- package/dist/lib/render-jobs.js +44 -0
- package/dist/lib/render-jobs.js.map +1 -0
- package/dist/lib/schemas.d.ts +4 -4
- package/dist/lib/schemas.js +11 -11
- package/dist/lib/schemas.js.map +1 -1
- package/dist/lib/session-context.js +9 -3
- package/dist/lib/session-context.js.map +1 -1
- package/dist/prompts.js +31 -10
- package/dist/prompts.js.map +1 -1
- package/dist/resources.js +3 -3
- package/dist/resources.js.map +1 -1
- package/dist/server.js +25 -21
- package/dist/server.js.map +1 -1
- package/dist/tools/add-node.d.ts +2 -0
- package/dist/tools/add-node.js +48 -0
- package/dist/tools/add-node.js.map +1 -0
- package/dist/tools/attach-node-audio.d.ts +2 -0
- package/dist/tools/attach-node-audio.js +35 -0
- package/dist/tools/attach-node-audio.js.map +1 -0
- package/dist/tools/{add-question.d.ts → check-render.d.ts} +1 -1
- package/dist/tools/check-render.js +47 -0
- package/dist/tools/check-render.js.map +1 -0
- package/dist/tools/create-form.js +46 -46
- package/dist/tools/create-form.js.map +1 -1
- package/dist/tools/delete-form.js +1 -3
- package/dist/tools/delete-form.js.map +1 -1
- package/dist/tools/delete-node-media.d.ts +2 -0
- package/dist/tools/delete-node-media.js +25 -0
- package/dist/tools/delete-node-media.js.map +1 -0
- package/dist/tools/delete-node.d.ts +2 -0
- package/dist/tools/delete-node.js +28 -0
- package/dist/tools/delete-node.js.map +1 -0
- package/dist/tools/generate-slideshow.js +16 -10
- package/dist/tools/generate-slideshow.js.map +1 -1
- package/dist/tools/generate-tts.js +55 -31
- package/dist/tools/generate-tts.js.map +1 -1
- package/dist/tools/generate-video.js +17 -11
- package/dist/tools/generate-video.js.map +1 -1
- package/dist/tools/get-form.js +4 -31
- package/dist/tools/get-form.js.map +1 -1
- package/dist/tools/get-node-media.d.ts +2 -0
- package/dist/tools/{get-question-media.js → get-node-media.js} +9 -13
- package/dist/tools/get-node-media.js.map +1 -0
- package/dist/tools/list-forms.d.ts +2 -0
- package/dist/tools/list-forms.js +86 -0
- package/dist/tools/list-forms.js.map +1 -0
- package/dist/tools/log-generation.js +1 -2
- package/dist/tools/log-generation.js.map +1 -1
- package/dist/tools/render-composition.js +18 -13
- package/dist/tools/render-composition.js.map +1 -1
- package/dist/tools/search-media.js +1 -1
- package/dist/tools/search-media.js.map +1 -1
- package/dist/tools/set-node-logic.d.ts +2 -0
- package/dist/tools/set-node-logic.js +54 -0
- package/dist/tools/set-node-logic.js.map +1 -0
- package/dist/tools/update-form.js +29 -11
- package/dist/tools/update-form.js.map +1 -1
- package/dist/tools/update-node.d.ts +2 -0
- package/dist/tools/{update-question.js → update-node.js} +14 -12
- package/dist/tools/update-node.js.map +1 -0
- package/dist/tools/upload-node-media.d.ts +2 -0
- package/dist/tools/upload-node-media.js +105 -0
- package/dist/tools/upload-node-media.js.map +1 -0
- package/package.json +1 -1
- package/dist/tools/add-question.js +0 -47
- package/dist/tools/add-question.js.map +0 -1
- package/dist/tools/attach-question-audio.d.ts +0 -2
- package/dist/tools/attach-question-audio.js +0 -37
- package/dist/tools/attach-question-audio.js.map +0 -1
- package/dist/tools/delete-question-media.d.ts +0 -2
- package/dist/tools/delete-question-media.js +0 -29
- package/dist/tools/delete-question-media.js.map +0 -1
- package/dist/tools/delete-question.d.ts +0 -2
- package/dist/tools/delete-question.js +0 -29
- package/dist/tools/delete-question.js.map +0 -1
- package/dist/tools/get-question-media.d.ts +0 -2
- package/dist/tools/get-question-media.js.map +0 -1
- package/dist/tools/set-question-logic.d.ts +0 -2
- package/dist/tools/set-question-logic.js +0 -54
- package/dist/tools/set-question-logic.js.map +0 -1
- package/dist/tools/update-question.d.ts +0 -2
- package/dist/tools/update-question.js.map +0 -1
- package/dist/tools/upload-question-media.d.ts +0 -2
- package/dist/tools/upload-question-media.js +0 -77
- package/dist/tools/upload-question-media.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"add-question.js","sourceRoot":"","sources":["../../src/tools/add-question.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAExE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE;;EAEjB,0BAA0B;;4FAEgE;QACtF,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;YAC5H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kIAAkI,CAAC;YAC9K,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YACxD,iBAAiB,EAAE,CAAC;iBACjB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,sEAAsE,CACvE;SACJ;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE;QAC7D,MAAM,IAAI,GAA4B,EAAE,QAAQ,EAAE,CAAC;QACnD,IAAI,iBAAiB;YAAE,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAElE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,OAAO,YAAY,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,UAAU,CACf;YACE,8BAA8B;YAC9B,gBAAgB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;YACzC,SAAS,QAAQ,CAAC,IAAI,EAAE;YACxB,WAAW,QAAQ,CAAC,MAAM,EAAE;SAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { callApi, errorResult, textResult } from "../lib/api-client.js";
|
|
3
|
-
export function registerAttachQuestionAudioTool(server) {
|
|
4
|
-
server.registerTool("clipform_attach_audio", {
|
|
5
|
-
title: "Attach Audio to Question",
|
|
6
|
-
description: `Attach a sound effect or audio file to a question with existing media (stills only). The audio auto-plays once when a respondent reaches this question. Provide a public URL to the audio file (WAV, MP3, or OGG). The question must already have media uploaded (use clipform_upload_question_media first).`,
|
|
7
|
-
inputSchema: {
|
|
8
|
-
form_id: z.string().uuid().describe("The form UUID (returned by clipform_create_form, not the short share_id from the URL)"),
|
|
9
|
-
edit_token: z.string().optional().describe("The edit token. Required for anonymous (non-OAuth) sessions; omit when connected via an authenticated MCP client like claude.ai."),
|
|
10
|
-
question_id: z
|
|
11
|
-
.string()
|
|
12
|
-
.describe("The question ID (must already have media attached)"),
|
|
13
|
-
url: z
|
|
14
|
-
.string()
|
|
15
|
-
.url()
|
|
16
|
-
.describe("Public URL to the audio file (WAV, MP3, or OGG)"),
|
|
17
|
-
},
|
|
18
|
-
annotations: {
|
|
19
|
-
readOnlyHint: false,
|
|
20
|
-
destructiveHint: false,
|
|
21
|
-
idempotentHint: true,
|
|
22
|
-
openWorldHint: true,
|
|
23
|
-
},
|
|
24
|
-
}, async ({ form_id, edit_token, question_id, url }) => {
|
|
25
|
-
const result = await callApi(`/forms/${form_id}/questions/${question_id}/audio`, {
|
|
26
|
-
method: "PUT",
|
|
27
|
-
token: edit_token,
|
|
28
|
-
body: { url },
|
|
29
|
-
});
|
|
30
|
-
if (!result.ok) {
|
|
31
|
-
return errorResult(result.error);
|
|
32
|
-
}
|
|
33
|
-
return textResult(`Audio attached to question ${question_id}.\n` +
|
|
34
|
-
`Audio path: ${result.data.audio_storage_path}`);
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=attach-question-audio.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attach-question-audio.js","sourceRoot":"","sources":["../../src/tools/attach-question-audio.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAExE,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,8SAA8S;QAC3T,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;YAC5H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kIAAkI,CAAC;YAC9K,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,CAAC,oDAAoD,CAAC;YACjE,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,CAAC,iDAAiD,CAAC;SAC/D;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,UAAU,OAAO,cAAc,WAAW,QAAQ,EAClD;YACE,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,EAAE,GAAG,EAAE;SACd,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,UAAU,CACf,8BAA8B,WAAW,KAAK;YAC5C,eAAe,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAClD,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { callApi, errorResult, textResult } from "../lib/api-client.js";
|
|
3
|
-
export function registerDeleteQuestionMediaTool(server) {
|
|
4
|
-
server.registerTool("clipform_delete_question_media", {
|
|
5
|
-
title: "Delete Question Media",
|
|
6
|
-
description: `Remove media from a question. Deletes the media record and cleans up external resources (Mux video asset, storage file).`,
|
|
7
|
-
inputSchema: {
|
|
8
|
-
form_id: z.string().uuid().describe("The form UUID (returned by clipform_create_form, not the short share_id from the URL)"),
|
|
9
|
-
edit_token: z.string().optional().describe("The edit token. Required for anonymous (non-OAuth) sessions; omit when connected via an authenticated MCP client like claude.ai."),
|
|
10
|
-
question_id: z.string().describe("The question ID"),
|
|
11
|
-
},
|
|
12
|
-
annotations: {
|
|
13
|
-
readOnlyHint: false,
|
|
14
|
-
destructiveHint: true,
|
|
15
|
-
idempotentHint: false,
|
|
16
|
-
openWorldHint: true,
|
|
17
|
-
},
|
|
18
|
-
}, async ({ form_id, edit_token, question_id }) => {
|
|
19
|
-
const result = await callApi(`/forms/${form_id}/questions/${question_id}/media`, {
|
|
20
|
-
method: "DELETE",
|
|
21
|
-
token: edit_token,
|
|
22
|
-
});
|
|
23
|
-
if (!result.ok) {
|
|
24
|
-
return errorResult(result.error);
|
|
25
|
-
}
|
|
26
|
-
return textResult("Media removed from question.");
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=delete-question-media.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delete-question-media.js","sourceRoot":"","sources":["../../src/tools/delete-question-media.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAExE,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,YAAY,CACjB,gCAAgC,EAChC;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,0HAA0H;QACvI,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;YAC5H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kIAAkI,CAAC;YAC9K,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SACpD;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,UAAU,OAAO,cAAc,WAAW,QAAQ,EAClD;YACE,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,UAAU;SAClB,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACpD,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { callApi, errorResult, textResult } from "../lib/api-client.js";
|
|
3
|
-
export function registerDeleteQuestionTool(server) {
|
|
4
|
-
server.registerTool("clipform_delete_question", {
|
|
5
|
-
title: "Delete Question",
|
|
6
|
-
description: `Delete a question from a form. The logic chain is automatically re-linked (the previous question will point to the next one). Cannot delete the start node or the last end screen.`,
|
|
7
|
-
inputSchema: {
|
|
8
|
-
form_id: z.string().uuid().describe("The form UUID (returned by clipform_create_form, not the short share_id from the URL)"),
|
|
9
|
-
edit_token: z.string().optional().describe("The edit token. Required for anonymous (non-OAuth) sessions; omit when connected via an authenticated MCP client like claude.ai."),
|
|
10
|
-
question_id: z.string().describe("The question ID to delete"),
|
|
11
|
-
},
|
|
12
|
-
annotations: {
|
|
13
|
-
readOnlyHint: false,
|
|
14
|
-
destructiveHint: true,
|
|
15
|
-
idempotentHint: false,
|
|
16
|
-
openWorldHint: true,
|
|
17
|
-
},
|
|
18
|
-
}, async ({ form_id, edit_token, question_id }) => {
|
|
19
|
-
const result = await callApi(`/forms/${form_id}/questions/${question_id}`, {
|
|
20
|
-
method: "DELETE",
|
|
21
|
-
token: edit_token,
|
|
22
|
-
});
|
|
23
|
-
if (!result.ok) {
|
|
24
|
-
return errorResult(result.error);
|
|
25
|
-
}
|
|
26
|
-
return textResult(`Question ${question_id} deleted. The logic chain has been re-linked.`);
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=delete-question.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"delete-question.js","sourceRoot":"","sources":["../../src/tools/delete-question.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAExE,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,oLAAoL;QACjM,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;YAC5H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kIAAkI,CAAC;YAC9K,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SAC9D;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,UAAU,OAAO,cAAc,WAAW,EAAE,EAC5C;YACE,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,UAAU;SAClB,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,UAAU,CACf,YAAY,WAAW,+CAA+C,CACvE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-question-media.js","sourceRoot":"","sources":["../../src/tools/get-question-media.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAExE,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,mIAAmI;QAChJ,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;YAC5H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kIAAkI,CAAC;YAC9K,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SACpD;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,UAAU,OAAO,cAAc,WAAW,QAAQ,EAClD;YACE,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,UAAU;SAClB,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAuC,CAAC;QAClE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,UAAU,CAAC,qCAAqC,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,UAAU,CACf,aAAa,KAAK,CAAC,EAAE,IAAI;YACvB,SAAS,KAAK,CAAC,UAAU,IAAI;YAC7B,WAAW,KAAK,CAAC,MAAM,IAAI;YAC3B,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,kBAAkB,KAAK,CAAC,oBAAoB,EAAE,CACjD,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { callApi, errorResult, textResult } from "../lib/api-client.js";
|
|
3
|
-
const LogicRuleSchema = z.object({
|
|
4
|
-
option_content: z
|
|
5
|
-
.string()
|
|
6
|
-
.optional()
|
|
7
|
-
.describe("The option text to match. Omit for a default rule (applies to all unmatched options)."),
|
|
8
|
-
target_question_id: z
|
|
9
|
-
.string()
|
|
10
|
-
.describe("The question ID to jump to when this rule matches"),
|
|
11
|
-
});
|
|
12
|
-
export function registerSetQuestionLogicTool(server) {
|
|
13
|
-
server.registerTool("clipform_set_logic", {
|
|
14
|
-
title: "Set Question Logic",
|
|
15
|
-
description: `Set branching logic on a question. Routes respondents to different questions based on their answer.
|
|
16
|
-
|
|
17
|
-
Each rule maps an option (by its text content) to a target question. Rules without option_content are "default" rules applied to all unmatched options.
|
|
18
|
-
|
|
19
|
-
Example: Route correct answer to a "Well done" node, everything else to "Wrong":
|
|
20
|
-
rules: [
|
|
21
|
-
{ option_content: "42", target_question_id: "well-done-id" },
|
|
22
|
-
{ target_question_id: "wrong-id" }
|
|
23
|
-
]`,
|
|
24
|
-
inputSchema: {
|
|
25
|
-
form_id: z.string().uuid().describe("The form UUID (returned by clipform_create_form, not the short share_id from the URL)"),
|
|
26
|
-
edit_token: z.string().optional().describe("The edit token. Required for anonymous (non-OAuth) sessions; omit when connected via an authenticated MCP client like claude.ai."),
|
|
27
|
-
question_id: z
|
|
28
|
-
.string()
|
|
29
|
-
.describe("The question ID to set logic on"),
|
|
30
|
-
rules: z
|
|
31
|
-
.array(LogicRuleSchema)
|
|
32
|
-
.min(1)
|
|
33
|
-
.describe("Branching rules. Each maps an option or default to a target question."),
|
|
34
|
-
},
|
|
35
|
-
annotations: {
|
|
36
|
-
readOnlyHint: false,
|
|
37
|
-
destructiveHint: false,
|
|
38
|
-
idempotentHint: true,
|
|
39
|
-
openWorldHint: true,
|
|
40
|
-
},
|
|
41
|
-
}, async ({ form_id, edit_token, question_id, rules }) => {
|
|
42
|
-
const result = await callApi(`/forms/${form_id}/questions/${question_id}/logic`, {
|
|
43
|
-
method: "PUT",
|
|
44
|
-
token: edit_token,
|
|
45
|
-
body: { rules },
|
|
46
|
-
});
|
|
47
|
-
if (!result.ok) {
|
|
48
|
-
return errorResult(result.error);
|
|
49
|
-
}
|
|
50
|
-
return textResult(`Logic set on question ${question_id}.\n` +
|
|
51
|
-
`Rules created: ${result.data.rules_count}`);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=set-question-logic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"set-question-logic.js","sourceRoot":"","sources":["../../src/tools/set-question-logic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAExE,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,uFAAuF,CACxF;IACH,kBAAkB,EAAE,CAAC;SAClB,MAAM,EAAE;SACR,QAAQ,CAAC,mDAAmD,CAAC;CACjE,CAAC,CAAC;AAEH,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE;;;;;;;;IAQf;QACE,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;YAC5H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kIAAkI,CAAC;YAC9K,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,CAAC,iCAAiC,CAAC;YAC9C,KAAK,EAAE,CAAC;iBACL,KAAK,CAAC,eAAe,CAAC;iBACtB,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,uEAAuE,CAAC;SACrF;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,UAAU,OAAO,cAAc,WAAW,QAAQ,EAClD;YACE,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,EAAE,KAAK,EAAE;SAChB,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,UAAU,CACf,yBAAyB,WAAW,KAAK;YACvC,kBAAkB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAC9C,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"update-question.js","sourceRoot":"","sources":["../../src/tools/update-question.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { callApi, errorResult, textResult } from "../lib/api-client.js";
|
|
3
|
-
export function registerUploadQuestionMediaTool(server) {
|
|
4
|
-
server.registerTool("clipform_upload_question_media", {
|
|
5
|
-
title: "Upload Question Media",
|
|
6
|
-
description: `Upload media for a question. When a public URL is provided, the media is fetched and stored automatically. Only works on question types that support media (choice, open, scale, button). For video: ingested via Mux. For image: stored in Supabase. When attaching TTS narration video, always include captions from clipform_generate_tts.`,
|
|
7
|
-
inputSchema: {
|
|
8
|
-
form_id: z.string().uuid().describe("The form UUID (returned by clipform_create_form, not the short share_id from the URL)"),
|
|
9
|
-
edit_token: z.string().optional().describe("The edit token. Required for anonymous (non-OAuth) sessions; omit when connected via an authenticated MCP client like claude.ai."),
|
|
10
|
-
question_id: z.string().describe("The question ID"),
|
|
11
|
-
media_type: z
|
|
12
|
-
.enum(["video", "still"])
|
|
13
|
-
.describe("Type of media to upload"),
|
|
14
|
-
media_source: z
|
|
15
|
-
.enum(["uploaded", "recorded"])
|
|
16
|
-
.default("uploaded")
|
|
17
|
-
.describe("How the media was created"),
|
|
18
|
-
url: z
|
|
19
|
-
.string()
|
|
20
|
-
.url()
|
|
21
|
-
.optional()
|
|
22
|
-
.describe("Public URL of the media file. When provided, the server fetches and stores it directly."),
|
|
23
|
-
captions: z
|
|
24
|
-
.array(z.object({
|
|
25
|
-
start: z.number().describe("Segment start time in seconds"),
|
|
26
|
-
end: z.number().describe("Segment end time in seconds"),
|
|
27
|
-
text: z.string().describe("Full segment text"),
|
|
28
|
-
words: z
|
|
29
|
-
.array(z.object({
|
|
30
|
-
word: z.string(),
|
|
31
|
-
start: z.number(),
|
|
32
|
-
end: z.number(),
|
|
33
|
-
}))
|
|
34
|
-
.optional()
|
|
35
|
-
.describe("Per-word timestamps within the segment (for word-by-word highlighting)."),
|
|
36
|
-
}))
|
|
37
|
-
.optional()
|
|
38
|
-
.describe("Word-level captions from clipform_generate_tts. Always include when uploading narrated video - pass the full objects including 'words' so per-word highlighting works."),
|
|
39
|
-
show_captions: z
|
|
40
|
-
.boolean()
|
|
41
|
-
.optional()
|
|
42
|
-
.default(true)
|
|
43
|
-
.describe("Display captions/subtitles on the question. Defaults to true."),
|
|
44
|
-
},
|
|
45
|
-
annotations: {
|
|
46
|
-
readOnlyHint: false,
|
|
47
|
-
destructiveHint: false,
|
|
48
|
-
idempotentHint: false,
|
|
49
|
-
openWorldHint: true,
|
|
50
|
-
},
|
|
51
|
-
}, async ({ form_id, edit_token, question_id, media_type, media_source, url, captions, show_captions }) => {
|
|
52
|
-
const body = { media_type, media_source };
|
|
53
|
-
if (url)
|
|
54
|
-
body.url = url;
|
|
55
|
-
if (captions)
|
|
56
|
-
body.captions = captions;
|
|
57
|
-
if (show_captions !== undefined)
|
|
58
|
-
body.show_captions = show_captions;
|
|
59
|
-
const result = await callApi(`/forms/${form_id}/questions/${question_id}/media`, {
|
|
60
|
-
method: "POST",
|
|
61
|
-
token: edit_token,
|
|
62
|
-
body,
|
|
63
|
-
});
|
|
64
|
-
if (!result.ok) {
|
|
65
|
-
return errorResult(result.error);
|
|
66
|
-
}
|
|
67
|
-
const lines = [`Media uploaded successfully.`, `Media ID: ${result.data.media_id}`];
|
|
68
|
-
if (result.data.upload_url) {
|
|
69
|
-
lines.push(`Upload URL: ${result.data.upload_url}`, `Upload method: ${result.data.upload_method}`, `Upload the file directly to the upload URL using ${result.data.upload_method === "tus" ? "TUS resumable upload" : "HTTP PUT"}.`);
|
|
70
|
-
}
|
|
71
|
-
if (captions) {
|
|
72
|
-
lines.push(`Captions: ${captions.length} segments saved`);
|
|
73
|
-
}
|
|
74
|
-
return textResult(lines.join("\n"));
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=upload-question-media.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload-question-media.js","sourceRoot":"","sources":["../../src/tools/upload-question-media.ts"],"names":[],"mappings":"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"}
|