@clipform/mcp-server 1.5.1 → 1.7.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.
- package/README.md +21 -9
- package/dist/lib/api-client.d.ts +1 -1
- package/dist/lib/api-client.js +21 -5
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/auth-context.d.ts +17 -0
- package/dist/lib/auth-context.js +9 -0
- package/dist/lib/auth-context.js.map +1 -0
- package/dist/lib/session-context.d.ts +1 -0
- package/dist/lib/session-context.js +32 -0
- package/dist/lib/session-context.js.map +1 -0
- package/dist/prompts.js +241 -125
- package/dist/prompts.js.map +1 -1
- package/dist/resources.d.ts +2 -0
- package/dist/resources.js +336 -0
- package/dist/resources.js.map +1 -0
- package/dist/server.js +6 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/add-question.js +2 -2
- package/dist/tools/add-question.js.map +1 -1
- package/dist/tools/attach-question-audio.js +2 -2
- package/dist/tools/attach-question-audio.js.map +1 -1
- package/dist/tools/create-form.js +65 -12
- package/dist/tools/create-form.js.map +1 -1
- package/dist/tools/delete-form.js +2 -2
- package/dist/tools/delete-form.js.map +1 -1
- package/dist/tools/delete-question-media.js +2 -2
- package/dist/tools/delete-question-media.js.map +1 -1
- package/dist/tools/delete-question.js +2 -2
- package/dist/tools/delete-question.js.map +1 -1
- package/dist/tools/generate-slideshow.js +114 -17
- package/dist/tools/generate-slideshow.js.map +1 -1
- package/dist/tools/generate-tts.js +3 -2
- package/dist/tools/generate-tts.js.map +1 -1
- package/dist/tools/generate-video.d.ts +2 -0
- package/dist/tools/generate-video.js +113 -0
- package/dist/tools/generate-video.js.map +1 -0
- package/dist/tools/get-form.js +1 -1
- package/dist/tools/get-form.js.map +1 -1
- package/dist/tools/get-question-media.js +2 -2
- package/dist/tools/get-question-media.js.map +1 -1
- package/dist/tools/list-assets.js +1 -1
- package/dist/tools/list-assets.js.map +1 -1
- package/dist/tools/list-compositions.js +3 -3
- package/dist/tools/list-compositions.js.map +1 -1
- package/dist/tools/log-generation.js +3 -3
- package/dist/tools/log-generation.js.map +1 -1
- package/dist/tools/render-composition.js +6 -4
- 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/search-music.js +1 -1
- package/dist/tools/search-music.js.map +1 -1
- package/dist/tools/search-news.js +1 -1
- package/dist/tools/search-news.js.map +1 -1
- package/dist/tools/set-question-logic.js +2 -2
- package/dist/tools/set-question-logic.js.map +1 -1
- package/dist/tools/update-form.js +39 -3
- package/dist/tools/update-form.js.map +1 -1
- package/dist/tools/update-question.js +2 -2
- package/dist/tools/update-question.js.map +1 -1
- package/dist/tools/upload-question-media.js +14 -6
- package/dist/tools/upload-question-media.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,38 +1,135 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { callInternalApi, errorResult, textResult } from "../lib/api-client.js";
|
|
3
|
+
// Style knobs - mirror packages/remotion/src/compositions/slideshow/KenBurnsImage.tsx.
|
|
4
|
+
// Every field optional; unset fields fall back to library defaults (which shift
|
|
5
|
+
// automatically between 'cover' and 'blur-pad' fit modes).
|
|
6
|
+
const slideshowStyleSchema = z.object({
|
|
7
|
+
preset: z.enum(["cinematic", "dramatic", "calm", "documentary", "dreamy", "moody"]).optional().describe("Named shortcut applied before per-field overrides. cinematic = defaults; dramatic = big zoom, wider pan, ease-out, stronger vignette; calm = minimal motion, linear, no vignette; documentary = near-static, no pan; dreamy = bright heavy blur-pad, soft vignette, gentle zoom; moody = desaturated low-key blur-pad, strong vignette. Set any other field to override individual knobs on top of the preset."),
|
|
8
|
+
zoom: z.object({
|
|
9
|
+
from: z.number().optional().describe("Starting scale for zoom-in / ending scale for zoom-out. Default 1.0."),
|
|
10
|
+
to: z.number().optional().describe("Ending scale for zoom-in / starting scale for zoom-out. Default 1.3 (cover) / 1.15 (blur-pad)."),
|
|
11
|
+
}).optional().describe("Zoom range. Lower 'to' (e.g. 1.05) for near-static cinematography; higher (e.g. 1.4) for dramatic push-in."),
|
|
12
|
+
pan: z.object({
|
|
13
|
+
range: z.number().optional().describe("Pan drift as fraction of viewport on each side. Default 0.05 (cover) / 0.03 (blur-pad). 0.08+ feels like sweeping."),
|
|
14
|
+
scale: z.number().optional().describe("Baseline scale during pan effects. Must exceed 1 + 2×range so edges never show. Default 1.12 / 1.08."),
|
|
15
|
+
}).optional(),
|
|
16
|
+
zoomPan: z.object({
|
|
17
|
+
from: z.number().optional(),
|
|
18
|
+
to: z.number().optional(),
|
|
19
|
+
rangeFraction: z.number().optional().describe("Multiplier on pan.range for zoom-in-pan-* effects. Default 0.5."),
|
|
20
|
+
}).optional(),
|
|
21
|
+
easing: z.enum(["ease-in-out", "ease-in", "ease-out", "linear"]).optional().describe("Motion curve. 'ease-in-out' = cinematic default. 'linear' = mechanical/deliberate. 'ease-out' = fast-start slow-finish, good for reveals."),
|
|
22
|
+
blurPad: z.object({
|
|
23
|
+
blurPx: z.number().optional().describe("Blur strength on the background layer. Default 40. 60+ for heavy dreamy effect, 20 for just-barely."),
|
|
24
|
+
brightness: z.number().optional().describe("Background brightness multiplier. Default 0.55 (dimmed). Raise to 0.8+ for a brighter bed; lower for moodier."),
|
|
25
|
+
saturate: z.number().optional().describe("Background saturation. Default 1.15. Lower (0.6) for desaturated/muted bg; higher for vivid."),
|
|
26
|
+
overscale: z.number().optional().describe("Background overscale to hide blur edges. Default 1.12."),
|
|
27
|
+
foregroundScale: z.number().optional().describe("Gentle crop on the contain-fit sharp layer. Default 1.0 (pure contain). 1.2 reduces letterbox by accepting mild crop."),
|
|
28
|
+
}).optional().describe("Styling for the blurred-letterbox layer. Only applies when fit resolves to 'blur-pad' (landscape source in portrait viewport)."),
|
|
29
|
+
vignette: z.union([
|
|
30
|
+
z.literal(false),
|
|
31
|
+
z.object({
|
|
32
|
+
opacity: z.number().optional().describe("Edge darkness opacity, 0-1. Default 0.35 (cover) / 0.4 (blur-pad)."),
|
|
33
|
+
innerRadiusPercent: z.number().optional().describe("Where darkening starts, 0 = center, 100 = edge. Default 50-55."),
|
|
34
|
+
}),
|
|
35
|
+
]).optional().describe("Edge darkening for cinematic framing. Pass false to disable."),
|
|
36
|
+
backgroundColor: z.string().optional().describe("Hex color behind the image frame. Default '#000'."),
|
|
37
|
+
autoBlurPadThreshold: z.number().optional().describe("When fit='auto', trigger blur-pad if aspectRatio > this value. Default 1.1."),
|
|
38
|
+
}).describe("Creative style overrides. Every field optional - unset inherits defaults.");
|
|
3
39
|
export function registerGenerateSlideshowTool(server) {
|
|
4
40
|
server.registerTool("clipform_generate_slideshow", {
|
|
5
|
-
title: "Generate
|
|
6
|
-
description:
|
|
41
|
+
title: "Generate Slideshow",
|
|
42
|
+
description: `**Deprecated: prefer clipform_generate_video** which supports both images and video clips.
|
|
7
43
|
|
|
8
|
-
|
|
9
|
-
1. Find images (use clipform_search_media with kind: "image", or provide URLs)
|
|
10
|
-
2. Provide an audio track URL (e.g. TTS narration from clipform_generate_tts)
|
|
11
|
-
3. This tool creates a video with Ken Burns pan/zoom effects over the images, synced to the audio duration
|
|
12
|
-
4. Attach the resulting public URL to a question using clipform_upload_media with media_type "video"
|
|
44
|
+
Generate a slideshow video from images and audio. Creates a 9:16 (720x1280) video with smooth pan/zoom effects (Ken Burns style), eased motion, and crossfade transitions, synced to the audio duration. Uploaded to storage; returns a public URL.
|
|
13
45
|
|
|
14
|
-
|
|
15
|
-
|
|
46
|
+
You are the director. Every stylistic choice below is yours - defaults exist for convenience but override anything that fits your creative vision.
|
|
47
|
+
|
|
48
|
+
## Workflow
|
|
49
|
+
|
|
50
|
+
1. Source images (use clipform_search_media with kind: "image"). Prefer portrait sources for 9:16 output; landscape works too via blur-pad fallback.
|
|
51
|
+
2. Produce narration audio (clipform_generate_tts).
|
|
52
|
+
3. Call this tool with images + audio_url + your creative direction.
|
|
53
|
+
4. Attach the returned public URL to a question via clipform_upload_media with media_type "video".
|
|
54
|
+
|
|
55
|
+
## Image framing (per-image)
|
|
56
|
+
|
|
57
|
+
- **aspect_ratio** (width/height): pass through from the image source so the composition can auto-pick framing. Landscape images with no aspect_ratio will cover-crop and may pixelate.
|
|
58
|
+
- **fit**: 'cover' (fill frame, crop), 'blur-pad' (sharp contained foreground + blurred cover background for landscape sources), 'auto' (default: cover for portrait, blur-pad for landscape > 1.1:1).
|
|
59
|
+
- **style**: per-image creative overrides (see Style Knobs below).
|
|
60
|
+
|
|
61
|
+
## Effects
|
|
62
|
+
|
|
63
|
+
zoom-in, zoom-out, pan-left, pan-right, pan-up, pan-down, zoom-in-pan-left, zoom-in-pan-right, random, static. Set 'random' or pass random_effects: true to shuffle per image.
|
|
64
|
+
|
|
65
|
+
## Transitions
|
|
66
|
+
|
|
67
|
+
fade (default), slide, wipe. Legacy names (fadeblack, slideleft, etc.) also work. duration is in seconds.
|
|
68
|
+
|
|
69
|
+
## Style presets (fastest path)
|
|
70
|
+
|
|
71
|
+
Pick one as a starting point via \`style.preset\` (per-image) or \`default_style.preset\` (global). Override individual knobs on top.
|
|
72
|
+
|
|
73
|
+
- **cinematic** - the default feel. Smooth ease-in-out, zoom 1.0→1.3, subtle pan, subtle vignette.
|
|
74
|
+
- **dramatic** - zoom 1.0→1.4, ease-out, wider pan (0.07), strong vignette. Good for big-reveal content, competitions, climactic moments.
|
|
75
|
+
- **calm** - zoom 1.0→1.08, linear easing, no vignette. Reflective topics, wellness, educational explainers.
|
|
76
|
+
- **documentary** - near-static (zoom 1.0→1.05, tiny pan, no vignette). Talking-heads-style context shots, historical photos.
|
|
77
|
+
- **dreamy** - heavy blur-pad (blurPx 60, brightness 0.75), soft vignette. Aspirational, romantic, nostalgic.
|
|
78
|
+
- **moody** - desaturated blur-pad (brightness 0.35, saturate 0.7), strong vignette, dark wrapper color. Crime, mystery, somber topics.
|
|
79
|
+
|
|
80
|
+
Per-image preset wins over default_style preset. Per-field overrides (zoom, pan, etc.) merge on top of whichever preset is active.
|
|
81
|
+
|
|
82
|
+
## Style Knobs (per-image via images[i].style, or global via default_style)
|
|
83
|
+
|
|
84
|
+
- **zoom**: { from, to } - push-in/pull-out range. Cinematic default 1.0→1.3. Drop to 1.0→1.05 for near-static; push to 1.0→1.4 for dramatic.
|
|
85
|
+
- **pan**: { range, scale } - drift magnitude. 0.03 subtle, 0.05 default, 0.08+ sweeping.
|
|
86
|
+
- **easing**: 'ease-in-out' (default, cinematic) | 'ease-in' (accelerate) | 'ease-out' (decelerate, good for reveals) | 'linear' (mechanical).
|
|
87
|
+
- **blurPad**: { blurPx, brightness, saturate, overscale, foregroundScale } - only applies when blur-pad fit is active. Heavier blurPx (60) + lower brightness (0.35) for moody; foregroundScale: 1.2 to reduce letterbox at the cost of mild crop.
|
|
88
|
+
- **vignette**: false to disable, or { opacity, innerRadiusPercent }. Stronger vignette (opacity 0.6) for dramatic focus; disable for bright, flat looks.
|
|
89
|
+
- **backgroundColor**: hex color shown behind the image frame (default '#000').
|
|
90
|
+
- **autoBlurPadThreshold**: when fit='auto', images wider than this ratio get blur-pad. Default 1.1.
|
|
91
|
+
|
|
92
|
+
## Global options
|
|
93
|
+
|
|
94
|
+
- **default_style**: style applied to every image unless the image overrides per-field. Per-image style merges over default_style at the field level.
|
|
95
|
+
- **background_color**: viewport wrapper color, visible during cross-fades.
|
|
96
|
+
- **random_effects**: shuffles effects across images when true.
|
|
97
|
+
|
|
98
|
+
## Creative guidance
|
|
99
|
+
|
|
100
|
+
- For the same 5-image quiz slideshow, vary the effects (one zoom-in on the opener, pan-left on a cityscape, zoom-out on the closer) rather than random_effects: true, unless you want the dice-roll.
|
|
101
|
+
- Quiet/reflective topics: slow easing ('linear'), tight zoom (1.0→1.08), no vignette.
|
|
102
|
+
- Energetic topics: punchy zoom (1.0→1.35), ease-out, wider pan.
|
|
103
|
+
- Mixed orientation sets: rely on fit: 'auto' + pass aspect_ratio per image. The composition will cover-crop portraits and blur-pad landscapes without more work.`,
|
|
16
104
|
inputSchema: {
|
|
17
105
|
images: z.array(z.object({
|
|
18
106
|
url: z.string().url().describe("Image URL"),
|
|
19
|
-
effect: z.string().optional().describe("Ken Burns effect (
|
|
107
|
+
effect: z.string().optional().describe("Ken Burns effect name (see description). Pass 'random' to shuffle this image only."),
|
|
108
|
+
aspect_ratio: z.number().positive().optional().describe("Source image width / height. Enables auto blur-pad for landscape images in the 9:16 viewport."),
|
|
109
|
+
fit: z.enum(["cover", "blur-pad", "auto"]).optional().describe("Framing mode. 'auto' (default) picks cover for portrait, blur-pad for landscape."),
|
|
110
|
+
style: slideshowStyleSchema.optional(),
|
|
20
111
|
})).min(1).max(20).describe("Images for the slideshow (1-20)"),
|
|
21
|
-
audio_url: z.string().url().describe("URL of the audio track (mp3/wav)"),
|
|
22
|
-
random_effects: z.boolean().optional().default(true).describe("
|
|
112
|
+
audio_url: z.string().url().describe("URL of the audio track (mp3/wav). Slideshow duration matches audio duration."),
|
|
113
|
+
random_effects: z.boolean().optional().default(true).describe("Shuffle effects across all images (default: true). Set false when specifying effects explicitly per-image."),
|
|
23
114
|
transition: z.object({
|
|
24
|
-
type: z.string().optional().default("fade").describe("Transition type (default
|
|
25
|
-
duration: z.number().optional().default(1).describe("Transition duration in seconds (default: 1)"),
|
|
26
|
-
}).optional().describe("Transition
|
|
115
|
+
type: z.string().optional().default("fade").describe("Transition type: fade (default), slide, wipe."),
|
|
116
|
+
duration: z.number().optional().default(1).describe("Transition duration in seconds (default: 1)."),
|
|
117
|
+
}).optional().describe("Transition between images."),
|
|
118
|
+
default_style: slideshowStyleSchema.optional().describe("Style applied to every image unless overridden per-image."),
|
|
119
|
+
background_color: z.string().optional().describe("Viewport background color behind all images (default '#000')."),
|
|
27
120
|
},
|
|
28
121
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
29
|
-
}, async ({ images, audio_url, random_effects, transition }) => {
|
|
30
|
-
const
|
|
122
|
+
}, async ({ images, audio_url, random_effects, transition, default_style, background_color }) => {
|
|
123
|
+
const workspace_id = process.env.MCP_WORKSPACE_ID;
|
|
124
|
+
const result = await callInternalApi("/internal/slideshow", {
|
|
31
125
|
body: {
|
|
32
126
|
images,
|
|
33
127
|
audio_url,
|
|
34
128
|
random_effects: random_effects ?? true,
|
|
35
129
|
transition: transition ?? { type: "fade", duration: 1 },
|
|
130
|
+
default_style,
|
|
131
|
+
background_color,
|
|
132
|
+
workspace_id,
|
|
36
133
|
},
|
|
37
134
|
});
|
|
38
135
|
if (!result.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-slideshow.js","sourceRoot":"","sources":["../../src/tools/generate-slideshow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"generate-slideshow.js","sourceRoot":"","sources":["../../src/tools/generate-slideshow.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,8 +25,9 @@ Returns the audio public URL and word-level captions for subtitle display.`,
|
|
|
25
25
|
},
|
|
26
26
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
27
27
|
}, async ({ text, voice }) => {
|
|
28
|
-
const
|
|
29
|
-
|
|
28
|
+
const workspace_id = process.env.MCP_WORKSPACE_ID;
|
|
29
|
+
const result = await callInternalApi("/internal/tts", {
|
|
30
|
+
body: { text, voice, workspace_id },
|
|
30
31
|
});
|
|
31
32
|
if (!result.ok)
|
|
32
33
|
return errorResult(result.error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-tts.js","sourceRoot":"","sources":["../../src/tools/generate-tts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE;;;;;;;;;;;;;;;2EAewD;QACrE,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACrF,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SAC1H;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;KACzG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"generate-tts.js","sourceRoot":"","sources":["../../src/tools/generate-tts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE;;;;;;;;;;;;;;;2EAewD;QACrE,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACrF,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SAC1H;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;KACzG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QACxB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,eAAe,EAAE;YACpD,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAW,CAAC;QAChC,OAAO,UAAU,CACf;YACE,mCAAmC;YACnC,EAAE;YACF,UAAU,IAAI,CAAC,KAAK,EAAE;YACtB,cAAc,IAAI,CAAC,QAAQ,EAAE;YAC7B,iBAAiB,IAAI,CAAC,WAAW,EAAE;YACnC,aAAa,IAAI,CAAC,QAAQ,CAAC,MAAM,WAAW;YAC5C,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACjD,EAAE;YACF,uEAAuE;YACvE,4VAA4V;SAC7V,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { callInternalApi, errorResult, textResult } from "../lib/api-client.js";
|
|
3
|
+
const slideshowStyleSchema = z.object({
|
|
4
|
+
preset: z.enum(["cinematic", "dramatic", "calm", "documentary", "dreamy", "moody"]).optional(),
|
|
5
|
+
zoom: z.object({ from: z.number().optional(), to: z.number().optional() }).optional(),
|
|
6
|
+
pan: z.object({ range: z.number().optional(), scale: z.number().optional() }).optional(),
|
|
7
|
+
zoomPan: z.object({
|
|
8
|
+
from: z.number().optional(), to: z.number().optional(), rangeFraction: z.number().optional(),
|
|
9
|
+
}).optional(),
|
|
10
|
+
easing: z.enum(["ease-in-out", "ease-in", "ease-out", "linear"]).optional(),
|
|
11
|
+
blurPad: z.object({
|
|
12
|
+
blurPx: z.number().optional(), brightness: z.number().optional(),
|
|
13
|
+
saturate: z.number().optional(), overscale: z.number().optional(),
|
|
14
|
+
foregroundScale: z.number().optional(),
|
|
15
|
+
}).optional(),
|
|
16
|
+
vignette: z.union([
|
|
17
|
+
z.literal(false),
|
|
18
|
+
z.object({ opacity: z.number().optional(), innerRadiusPercent: z.number().optional() }),
|
|
19
|
+
]).optional(),
|
|
20
|
+
backgroundColor: z.string().optional(),
|
|
21
|
+
autoBlurPadThreshold: z.number().optional(),
|
|
22
|
+
});
|
|
23
|
+
export function registerGenerateVideoTool(server) {
|
|
24
|
+
server.registerTool("clipform_generate_video", {
|
|
25
|
+
title: "Generate Video",
|
|
26
|
+
description: `Generate a video from images, video clips, or a mix of both, synced to audio. Creates a 9:16 (720x1280) video with transitions, uploaded to storage. Returns a public URL.
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
1. Source media with clipform_search_media (kind: "image" or "video")
|
|
31
|
+
2. Source audio with clipform_generate_tts (narration) or clipform_search_music (background)
|
|
32
|
+
3. Call this tool with items + audio_url
|
|
33
|
+
4. Attach the returned URL to a question via clipform_upload_question_media with media_type "video"
|
|
34
|
+
|
|
35
|
+
## Items
|
|
36
|
+
|
|
37
|
+
Each item is an image or video clip:
|
|
38
|
+
- **type: "image"** - still image with Ken Burns motion (pan/zoom). Supports effect, fit, and style overrides.
|
|
39
|
+
- **type: "video"** - video clip, cover-cropped to fill 9:16 frame. Audio muted by default (set volume: 1 to mix in). Use start_from to trim.
|
|
40
|
+
|
|
41
|
+
## Style presets (image items)
|
|
42
|
+
|
|
43
|
+
Pick one via default_style.preset (all images) or per-image style.preset:
|
|
44
|
+
- **cinematic** (default) - smooth ease-in-out, subtle zoom/pan, subtle vignette
|
|
45
|
+
- **dramatic** - big zoom, wide pan, ease-out, strong vignette. Reveals, climactic moments.
|
|
46
|
+
- **calm** - minimal motion, linear easing, no vignette. Educational, reflective.
|
|
47
|
+
- **documentary** - near-static, tiny pan, no vignette. Historical photos, talking-heads context.
|
|
48
|
+
- **dreamy** - heavy blur-pad, soft vignette. Aspirational, nostalgic.
|
|
49
|
+
- **moody** - desaturated, dark, strong vignette. Mystery, somber.
|
|
50
|
+
|
|
51
|
+
## Effects (image items)
|
|
52
|
+
|
|
53
|
+
zoom-in, zoom-out, pan-left, pan-right, pan-up, pan-down, zoom-in-pan-left, zoom-in-pan-right, random, static.
|
|
54
|
+
Set per-image or use random_effects: true to shuffle.
|
|
55
|
+
|
|
56
|
+
## Transitions
|
|
57
|
+
|
|
58
|
+
fade (default), slide, wipe, none. Duration in seconds.
|
|
59
|
+
|
|
60
|
+
## Duration
|
|
61
|
+
|
|
62
|
+
Matches audio when audio_url is provided. Use duration_seconds for videos without audio.`,
|
|
63
|
+
inputSchema: {
|
|
64
|
+
items: z.array(z.object({
|
|
65
|
+
type: z.enum(["image", "video"]).describe("'image' for still images with Ken Burns effects, 'video' for video clips"),
|
|
66
|
+
url: z.string().url().describe("Media URL"),
|
|
67
|
+
effect: z.string().optional().describe("Ken Burns effect (image only): zoom-in, zoom-out, pan-left, pan-right, pan-up, pan-down, zoom-in-pan-left, zoom-in-pan-right, random, static"),
|
|
68
|
+
aspect_ratio: z.number().positive().optional().describe("Image width/height ratio (image only). Enables auto blur-pad for landscape images."),
|
|
69
|
+
fit: z.enum(["cover", "blur-pad", "auto"]).optional().describe("Framing mode (image only). auto = cover for portrait, blur-pad for landscape."),
|
|
70
|
+
style: slideshowStyleSchema.optional().describe("Creative style overrides (image only)"),
|
|
71
|
+
start_from: z.number().min(0).optional().describe("Start time in seconds (video only). Trims the clip."),
|
|
72
|
+
volume: z.number().min(0).max(1).optional().describe("Clip audio volume 0-1 (video only, default 0 = muted)"),
|
|
73
|
+
})).min(1).max(20).describe("Media items (images, video clips, or a mix)"),
|
|
74
|
+
audio_url: z.string().url().optional().describe("Audio track URL. Video duration matches audio duration."),
|
|
75
|
+
duration_seconds: z.number().positive().optional().describe("Video duration in seconds (required if no audio_url)"),
|
|
76
|
+
random_effects: z.boolean().optional().default(true).describe("Shuffle Ken Burns effects across image items (default: true)"),
|
|
77
|
+
transition: z.object({
|
|
78
|
+
type: z.string().optional().default("fade").describe("Transition: fade (default), slide, wipe, none"),
|
|
79
|
+
duration: z.number().optional().default(1).describe("Transition duration in seconds (default: 1)"),
|
|
80
|
+
}).optional(),
|
|
81
|
+
default_style: slideshowStyleSchema.optional().describe("Style applied to all image items unless overridden per-item"),
|
|
82
|
+
background_color: z.string().optional().describe("Background color (default '#000')"),
|
|
83
|
+
},
|
|
84
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
85
|
+
}, async ({ items, audio_url, duration_seconds, random_effects, transition, default_style, background_color }) => {
|
|
86
|
+
const workspace_id = process.env.MCP_WORKSPACE_ID;
|
|
87
|
+
const result = await callInternalApi("/internal/generate-video", {
|
|
88
|
+
body: {
|
|
89
|
+
items,
|
|
90
|
+
audio_url,
|
|
91
|
+
duration_seconds,
|
|
92
|
+
random_effects: random_effects ?? true,
|
|
93
|
+
transition: transition ?? { type: "fade", duration: 1 },
|
|
94
|
+
default_style,
|
|
95
|
+
background_color,
|
|
96
|
+
workspace_id,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
if (!result.ok)
|
|
100
|
+
return errorResult(result.error);
|
|
101
|
+
const data = result.data;
|
|
102
|
+
return textResult([
|
|
103
|
+
`Video generated successfully!`,
|
|
104
|
+
``,
|
|
105
|
+
`Storage path: ${data.storage_path}`,
|
|
106
|
+
`Public URL: ${data.public_url}`,
|
|
107
|
+
`Duration: ${data.duration_seconds}s`,
|
|
108
|
+
``,
|
|
109
|
+
`Use clipform_upload_question_media with the public URL to attach this video to a question.`,
|
|
110
|
+
].join("\n"));
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=generate-video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-video.js","sourceRoot":"","sources":["../../src/tools/generate-video.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/get-form.js
CHANGED
|
@@ -5,7 +5,7 @@ export function registerGetFormTool(server) {
|
|
|
5
5
|
title: "Get Clipform",
|
|
6
6
|
description: `Retrieve a form's details including all questions in sequential order. Use this to see the current state of a form before making changes.`,
|
|
7
7
|
inputSchema: {
|
|
8
|
-
form_id: z.string().describe("The form
|
|
8
|
+
form_id: z.string().uuid().describe("The form UUID (returned by clipform_create_form, not the short share_id from the URL)"),
|
|
9
9
|
edit_token: z
|
|
10
10
|
.string()
|
|
11
11
|
.describe("The edit token returned by clipform_create_form"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-form.js","sourceRoot":"","sources":["../../src/tools/get-form.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,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,2IAA2I;QACxJ,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"get-form.js","sourceRoot":"","sources":["../../src/tools/get-form.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,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,2IAA2I;QACxJ,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;YAC5H,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,CAAC,iDAAiD,CAAC;SAC/D;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,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,OAAO,EAAE,EAAE;YAChD,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,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,SAQrB,CAAC;QAEH,MAAM,KAAK,GAAa;YACtB,SAAS,IAAI,CAAC,KAAK,EAAE;YACrB,YAAY,IAAI,CAAC,OAAO,EAAE;YAC1B,cAAc,IAAI,CAAC,YAAY,EAAE;YACjC,EAAE;YACF,uBAAuB;SACxB,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;YACnE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjD,IACE,CAAC,CAAC,MAAM;gBACR,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,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;YACJ,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -5,8 +5,8 @@ export function registerGetQuestionMediaTool(server) {
|
|
|
5
5
|
title: "Get Question Media",
|
|
6
6
|
description: `Get the media attached to a question, including processing status. Useful for checking if a video upload has finished processing.`,
|
|
7
7
|
inputSchema: {
|
|
8
|
-
form_id: z.string().describe("The form
|
|
9
|
-
edit_token: z.string().describe("The edit token"),
|
|
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
10
|
question_id: z.string().describe("The question ID"),
|
|
11
11
|
},
|
|
12
12
|
annotations: {
|
|
@@ -1 +1 @@
|
|
|
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,QAAQ,CAAC,
|
|
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"}
|
|
@@ -10,7 +10,7 @@ export function registerListAssetsTool(server) {
|
|
|
10
10
|
},
|
|
11
11
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
12
12
|
}, async ({ type }) => {
|
|
13
|
-
const result = await callInternalApi("/internal/
|
|
13
|
+
const result = await callInternalApi("/internal/assets", {
|
|
14
14
|
method: "GET",
|
|
15
15
|
params: { type: type ?? "all" },
|
|
16
16
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-assets.js","sourceRoot":"","sources":["../../src/tools/list-assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,4IAA4I;QACzJ,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;iBACxE,QAAQ,CAAC,mCAAmC,CAAC;SACjD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"list-assets.js","sourceRoot":"","sources":["../../src/tools/list-assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,4IAA4I;QACzJ,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;iBACxE,QAAQ,CAAC,mCAAmC,CAAC;SACjD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,kBAAkB,EAAE;YACvD,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAW,CAAC;QAChC,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;YACtD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;YAC1D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC1E,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -2,16 +2,16 @@ import { callInternalApi, errorResult, textResult } from "../lib/api-client.js";
|
|
|
2
2
|
export function registerListCompositionsTool(server) {
|
|
3
3
|
server.registerTool("clipform_list_compositions", {
|
|
4
4
|
title: "List Compositions",
|
|
5
|
-
description: `List all available Remotion compositions and their expected props schemas.
|
|
5
|
+
description: `List all available Remotion compositions and their expected props schemas. Use clipform_render_composition to render them.`,
|
|
6
6
|
inputSchema: {},
|
|
7
7
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
8
8
|
}, async () => {
|
|
9
|
-
const result = await callInternalApi("/internal/
|
|
9
|
+
const result = await callInternalApi("/internal/compositions", {
|
|
10
10
|
method: "GET",
|
|
11
11
|
});
|
|
12
12
|
if (!result.ok) {
|
|
13
13
|
if (result.status === 0 || result.status === 404) {
|
|
14
|
-
return errorResult("Remotion compositions are not available
|
|
14
|
+
return errorResult("Remotion compositions are not available (API server may not be running). Start the API with 'npm run dev --workspace=apps/api'.");
|
|
15
15
|
}
|
|
16
16
|
return errorResult(result.error);
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-compositions.js","sourceRoot":"","sources":["../../src/tools/list-compositions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"list-compositions.js","sourceRoot":"","sources":["../../src/tools/list-compositions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,4HAA4H;QACzI,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACxG,EACD,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,wBAAwB,EAAE;YAC7D,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjD,OAAO,WAAW,CAAC,iIAAiI,CAAC,CAAC;YACxJ,CAAC;YACD,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,YAAY,GAAI,MAAM,CAAC,IAAY,CAAC,YAAqB,CAAC;QAChE,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE,OAAO,UAAU,CAAC,wBAAwB,CAAC,CAAC;QAEtE,MAAM,KAAK,GAAG,CAAC,2BAA2B,YAAY,CAAC,MAAM,MAAM,CAAC,CAAC;QACrE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,gBAAgB,aAAa,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/H,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -5,8 +5,8 @@ export function registerLogGenerationTool(server) {
|
|
|
5
5
|
title: "Log Form Generation Audit",
|
|
6
6
|
description: `Save an audit trail for a generated form. Records where content came from - the sources and image attributions. Call this as the final step after building a form or quiz.`,
|
|
7
7
|
inputSchema: {
|
|
8
|
-
form_id: z.string().describe("The form ID"),
|
|
9
|
-
edit_token: z.string().describe("The edit token"),
|
|
8
|
+
form_id: z.string().uuid().describe("The form ID (UUID format, not the share ID)"),
|
|
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
10
|
summary: z.string().describe("Short description of what was generated"),
|
|
11
11
|
details: z.object({
|
|
12
12
|
sources: z.array(z.object({
|
|
@@ -23,7 +23,7 @@ export function registerLogGenerationTool(server) {
|
|
|
23
23
|
},
|
|
24
24
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
25
25
|
}, async ({ form_id, edit_token, summary, details }) => {
|
|
26
|
-
const result = await callInternalApi("/internal/
|
|
26
|
+
const result = await callInternalApi("/internal/log-generation", {
|
|
27
27
|
body: { form_id, summary, details },
|
|
28
28
|
});
|
|
29
29
|
if (!result.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-generation.js","sourceRoot":"","sources":["../../src/tools/log-generation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,4KAA4K;QACzL,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"log-generation.js","sourceRoot":"","sources":["../../src/tools/log-generation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,4KAA4K;QACzL,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YAClF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kIAAkI,CAAC;YAC9K,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;YACvE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;gBAChB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;oBACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;oBACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;iBAC5B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;gBACjD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;oBACvB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;oBACf,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;oBAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;iBAC/B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;aACxD,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SAChD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1G,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,0BAA0B,EAAE;YAC/D,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjD,OAAO,UAAU,CAAC,4BAA4B,OAAO,cAAc,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -3,12 +3,14 @@ import { callInternalApi, errorResult, textResult } from "../lib/api-client.js";
|
|
|
3
3
|
export function registerRenderCompositionTool(server) {
|
|
4
4
|
server.registerTool("clipform_render_composition", {
|
|
5
5
|
title: "Render Composition",
|
|
6
|
-
description: `Render a Remotion composition to MP4, PNG, or GIF.
|
|
6
|
+
description: `Render a Remotion composition to MP4, PNG, or GIF. MP4 renders use AWS Lambda in production for fast, scalable rendering. PNG and GIF render locally.
|
|
7
7
|
|
|
8
8
|
Output formats:
|
|
9
9
|
- mp4: Video file (H.264 codec, best for social media)
|
|
10
10
|
- png: Still image (single frame)
|
|
11
|
-
- gif: Animated GIF (looping)
|
|
11
|
+
- gif: Animated GIF (looping)
|
|
12
|
+
|
|
13
|
+
For narrated quiz slideshows, prefer clipform_generate_slideshow which handles the full workflow (focal point detection, audio sync, storage upload). Use this tool for custom compositions like ScorecardQuiz, ShortFormQuiz, or PresenterDirected.`,
|
|
12
14
|
inputSchema: {
|
|
13
15
|
compositionId: z.string().describe("The composition ID (e.g. 'ScorecardQuiz', 'ShortFormQuiz', 'PresenterDirected')"),
|
|
14
16
|
outputFormat: z.enum(["mp4", "png", "gif"]).default("mp4").describe("Output format (default: mp4)"),
|
|
@@ -16,7 +18,7 @@ Output formats:
|
|
|
16
18
|
},
|
|
17
19
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
18
20
|
}, async ({ compositionId, outputFormat, inputProps }) => {
|
|
19
|
-
const result = await callInternalApi("/internal/
|
|
21
|
+
const result = await callInternalApi("/internal/render", {
|
|
20
22
|
body: {
|
|
21
23
|
compositionId,
|
|
22
24
|
outputFormat,
|
|
@@ -25,7 +27,7 @@ Output formats:
|
|
|
25
27
|
});
|
|
26
28
|
if (!result.ok) {
|
|
27
29
|
if (result.status === 0 || result.status === 404) {
|
|
28
|
-
return errorResult("Remotion rendering is not available
|
|
30
|
+
return errorResult("Remotion rendering is not available (API server may not be running). Start the API with 'npm run dev --workspace=apps/api', or use clipform_generate_slideshow for slideshow videos.");
|
|
29
31
|
}
|
|
30
32
|
return errorResult(result.error);
|
|
31
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-composition.js","sourceRoot":"","sources":["../../src/tools/render-composition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"render-composition.js","sourceRoot":"","sources":["../../src/tools/render-composition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,YAAY,CACjB,6BAA6B,EAC7B;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE;;;;;;;qPAOkO;QAC/O,WAAW,EAAE;YACX,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iFAAiF,CAAC;YACrH,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACnG,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;SACjH;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE;KAC1G,EACD,KAAK,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,kBAAkB,EAAE;YACvD,IAAI,EAAE;gBACJ,aAAa;gBACb,YAAY;gBACZ,UAAU,EAAE,UAAU,IAAI,EAAE;aAC7B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjD,OAAO,WAAW,CAAC,sLAAsL,CAAC,CAAC;YAC7M,CAAC;YACD,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAW,CAAC;QAChC,OAAO,UAAU,CACf;YACE,kBAAkB;YAClB,EAAE;YACF,gBAAgB,aAAa,EAAE;YAC/B,WAAW,IAAI,CAAC,MAAM,EAAE;YACxB,WAAW,IAAI,CAAC,UAAU,EAAE;YAC5B,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -12,7 +12,7 @@ export function registerSearchMediaTool(server) {
|
|
|
12
12
|
},
|
|
13
13
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
14
14
|
}, async ({ query, kind, count }) => {
|
|
15
|
-
const result = await callInternalApi("/internal/
|
|
15
|
+
const result = await callInternalApi("/internal/search-media", {
|
|
16
16
|
body: { query, kind, count },
|
|
17
17
|
});
|
|
18
18
|
if (!result.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-media.js","sourceRoot":"","sources":["../../src/tools/search-media.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,uZAAuZ;QACpa,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;YACxG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;iBACnD,QAAQ,CAAC,6DAA6D,CAAC;SAC3E;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACvG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"search-media.js","sourceRoot":"","sources":["../../src/tools/search-media.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,uZAAuZ;QACpa,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;YACxG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;iBACnD,QAAQ,CAAC,6DAA6D,CAAC;SAC3E;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACvG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,wBAAwB,EAAE;YAC7D,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAI,MAAM,CAAC,IAAY,CAAC,OAAgB,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,UAAU,CAAC,MAAM,IAAI,gBAAgB,KAAK,IAAI,CAAC,CAAC;QAE5E,MAAM,KAAK,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,IAAI,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC;QACrE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAClF,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YACnF,IAAI,IAAI,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACvE,IAAI,IAAI,CAAC,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -14,7 +14,7 @@ export function registerSearchMusicTool(server) {
|
|
|
14
14
|
},
|
|
15
15
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
16
16
|
}, async ({ query, count, instrumentalOnly, minDuration, maxDuration, tags }) => {
|
|
17
|
-
const result = await callInternalApi("/internal/
|
|
17
|
+
const result = await callInternalApi("/internal/search-music", {
|
|
18
18
|
body: { query, count, instrumentalOnly, minDuration, maxDuration, tags },
|
|
19
19
|
});
|
|
20
20
|
if (!result.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-music.js","sourceRoot":"","sources":["../../src/tools/search-music.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,oKAAoK;QACjL,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yFAAyF,CAAC;YACrH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC3F,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YAC3G,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YAC1E,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;SAC9E;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACvG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"search-music.js","sourceRoot":"","sources":["../../src/tools/search-music.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ If neither native web search nor this tool is available and the topic is post-cu
|
|
|
20
20
|
},
|
|
21
21
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
22
22
|
}, async ({ query, count }) => {
|
|
23
|
-
const result = await callInternalApi("/internal/
|
|
23
|
+
const result = await callInternalApi("/internal/search-news", {
|
|
24
24
|
body: { query, count },
|
|
25
25
|
});
|
|
26
26
|
if (!result.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-news.js","sourceRoot":"","sources":["../../src/tools/search-news.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE;;;;;;;;;iIAS8G;QAC3H,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kFAAkF,CAAC;YAC9G,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;iBACnD,QAAQ,CAAC,sCAAsC,CAAC;SACpD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACvG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC
|
|
1
|
+
{"version":3,"file":"search-news.js","sourceRoot":"","sources":["../../src/tools/search-news.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE;;;;;;;;;iIAS8G;QAC3H,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kFAAkF,CAAC;YAC9G,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;iBACnD,QAAQ,CAAC,sCAAsC,CAAC;SACpD;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACvG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,uBAAuB,EAAE;YAC5D,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,OAAO,GAAI,MAAM,CAAC,IAAY,CAAC,OAAgB,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,UAAU,CAAC,+BAA+B,KAAK,IAAI,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,kBAAkB,KAAK,MAAM,CAAC,CAAC;QACrE,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,IAAI,OAAO,CAAC,WAAW;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAChE,IAAI,OAAO,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACpC,IAAI,OAAO,CAAC,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -22,8 +22,8 @@ Example: Route correct answer to a "Well done" node, everything else to "Wrong":
|
|
|
22
22
|
{ target_question_id: "wrong-id" }
|
|
23
23
|
]`,
|
|
24
24
|
inputSchema: {
|
|
25
|
-
form_id: z.string().describe("The form
|
|
26
|
-
edit_token: z.string().describe("The edit token"),
|
|
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
27
|
question_id: z
|
|
28
28
|
.string()
|
|
29
29
|
.describe("The question ID to set logic on"),
|