@clipform/mcp-server 1.34.0 → 1.35.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 +1 -1
- package/dist/{chunk-JOJJ2XFL.js → chunk-6MLZZSNM.js} +61 -3
- package/dist/{chunk-JOJJ2XFL.js.map → chunk-6MLZZSNM.js.map} +1 -1
- package/dist/{chunk-KWEBCAPF.js → chunk-BYJMRIB6.js} +10 -4
- package/dist/chunk-BYJMRIB6.js.map +1 -0
- package/dist/{chunk-ZVHI2V7B.js → chunk-G6JFAKX3.js} +133 -108
- package/dist/{chunk-ZVHI2V7B.js.map → chunk-G6JFAKX3.js.map} +1 -1
- package/dist/{chunk-JID43EDM.js → chunk-TMNXECJI.js} +59 -4
- package/dist/chunk-TMNXECJI.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/prompts.js +2 -2
- package/dist/resources.js +2 -2
- package/dist/server.js +4 -4
- package/package.json +1 -1
- package/dist/chunk-JID43EDM.js.map +0 -1
- package/dist/chunk-KWEBCAPF.js.map +0 -1
package/README.md
CHANGED
|
@@ -84,7 +84,7 @@ You can also pass the key as a CLI flag: `npx -y @clipform/mcp-server --api-key=
|
|
|
84
84
|
|
|
85
85
|
| Tool | Description |
|
|
86
86
|
|------|-------------|
|
|
87
|
-
| `clipform_render_composition` | Render a video composition to MP4 or PNG
|
|
87
|
+
| `clipform_render_composition` | Render a video composition to MP4 or PNG - flag reveals, emoji puzzles, grids, timelines, map motion and more. Pass `wait: false` to fire renders in parallel and poll for results |
|
|
88
88
|
| `clipform_generate_tts` | Generate narration audio with word-level captions |
|
|
89
89
|
| `clipform_generate_slideshow` | Create slideshow videos from images + audio (waits, returns URL) |
|
|
90
90
|
| `clipform_generate_video` | Generate video from images, clips, or both synced to audio. Pass `wait: false` to fire renders in parallel and poll for results |
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
WORKFLOW_TYPES,
|
|
3
3
|
getDiscoveryParams,
|
|
4
4
|
getSessionContextWithAuth
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BYJMRIB6.js";
|
|
6
6
|
import {
|
|
7
7
|
__export
|
|
8
8
|
} from "./chunk-HCZI2UJ5.js";
|
|
@@ -4212,6 +4212,29 @@ Wrong answers should sound right to someone who didn't watch but googled the top
|
|
|
4212
4212
|
|
|
4213
4213
|
> **Text-only override:** If the user explicitly asked for text-only (no video), skip steps 7-8 (video production and media attachment). Still generate narration in step 6.`;
|
|
4214
4214
|
}
|
|
4215
|
+
function compositionQuizWorkflow(args, sessionContext, authMode = "authenticated") {
|
|
4216
|
+
const topic = args.topic ? ` about "${args.topic}"` : "";
|
|
4217
|
+
const count = args.question_count ?? 5;
|
|
4218
|
+
const discovery = buildDiscovery(getDiscoveryParams("quiz", "composition", authMode === "anonymous" ? "demo" : "full"), args, authMode);
|
|
4219
|
+
return `${sessionContext ? sessionContext + "\n\n" : ""}${discovery}Here's how to build a ${count}-question composition quiz${topic} with Clipform - a guess-and-reveal quiz where each question is a rendered composition (flag sweep, emoji rebus, blurred photo resolving) instead of a stock-image slideshow. Read the attached quiz and composition guides for the mechanic matrix, the clue \u2192 reveal node pattern, and difficulty design.
|
|
4220
|
+
|
|
4221
|
+
## Composition Quiz Workflow
|
|
4222
|
+
|
|
4223
|
+
1. **Discover what's renderable** - call clipform_list_compositions. Availability varies by session; choose mechanics ONLY from what it returns. Match each question to a mechanic via the composition guide's matrix. Mix 2-3 mechanics across the quiz; for questions with no fitting composition, use the base quiz's Ken Burns pipeline instead.
|
|
4224
|
+
2. **Write questions** - difficulty curve as in the base guide. Difficulty = subject obscurity (Japan's flag vs Kiribati's), never clue degradation. ${count} questions \u2248 ${count * 2 + 1} nodes (each question is a clue + reveal pair) - check the plan's node limit.
|
|
4225
|
+
3. **Render all clips** with clipform_render_composition, wait: false on EVERY call - fire the full batch (clue clip + reveal clip per question), then collect URLs with clipform_check_render. Chain-state compositions: clue clip animate: true, reveal clip animate: false + answer props.
|
|
4226
|
+
4. **Build the whole form in ONE clipform_create_form call** - pass nodes, settings, and tags together; do NOT create an empty form and add nodes one by one:
|
|
4227
|
+
- Settings: show_step_counter: true, disable_back_navigation: true
|
|
4228
|
+
- Per question, a PAIR of nodes:
|
|
4229
|
+
- Clue node (type: "choice"): question as prompt, config { choice: { show_answer_feedback: true }, randomise_options: true }, options with score: 1 on the correct answer and score: 0 on 2-3 wrong ones. Scored options enable correct-answer marking automatically.
|
|
4230
|
+
- Reveal node (type: "button"): the answer in the prompt ("It was Japan!"), config { button_text: "Next one" }
|
|
4231
|
+
- Final end_screen node: show_score: true, icon: "trophy", show_share_button: true, cta_type: "restart", cta_text: a short challenge. NOTE: per-tier messages (score_ranges) are coming soon - write one great message.
|
|
4232
|
+
- tags: format "quiz", genre "trivia", and 2-3 topic words
|
|
4233
|
+
5. **Generate narration** with clipform_generate_tts - batch ALL items in one call. The visual does the teasing: set stakes, never describe what's on screen or read the clue aloud. Reveal narration can celebrate.
|
|
4234
|
+
6. **Attach media** with clipform_upload_node_media (batch all uploads in one call) - clue clip on each choice node, reveal clip on each button node. Include captions, set show_captions: true.
|
|
4235
|
+
7. **Publish** with clipform_update_form
|
|
4236
|
+
8. **Log** with clipform_log_generation - record the composition IDs used per question alongside sources and attributions`;
|
|
4237
|
+
}
|
|
4215
4238
|
function interviewWorkflow(args, sessionContext, authMode = "authenticated") {
|
|
4216
4239
|
const purpose = args.purpose ?? "responses";
|
|
4217
4240
|
const format = args.response_format ?? "all";
|
|
@@ -4339,7 +4362,8 @@ var WORKFLOW_BUILDERS = {
|
|
|
4339
4362
|
};
|
|
4340
4363
|
var QUIZ_VARIANT_BUILDERS = {
|
|
4341
4364
|
"personality": personalityQuizWorkflow,
|
|
4342
|
-
"comprehension": comprehensionQuizWorkflow
|
|
4365
|
+
"comprehension": comprehensionQuizWorkflow,
|
|
4366
|
+
"composition": compositionQuizWorkflow
|
|
4343
4367
|
};
|
|
4344
4368
|
async function getWorkflowText(type, args = {}, variant) {
|
|
4345
4369
|
const { text: sessionContext, authMode } = await getSessionContextWithAuth();
|
|
@@ -4527,6 +4551,40 @@ Outcome categories: ${args.categories}` : "";
|
|
|
4527
4551
|
};
|
|
4528
4552
|
}
|
|
4529
4553
|
);
|
|
4554
|
+
server.registerPrompt(
|
|
4555
|
+
"create-composition-quiz",
|
|
4556
|
+
{
|
|
4557
|
+
title: "Create a Composition Quiz",
|
|
4558
|
+
description: "Build a guess-and-reveal quiz from rendered compositions - flag sweeps, emoji puzzles, blur reveals, odd-one-out grids - instead of stock-image slideshows",
|
|
4559
|
+
argsSchema: {
|
|
4560
|
+
topic: external_exports.string().optional().describe("Quiz topic (e.g. 'world flags', 'movie emoji', '90s music')"),
|
|
4561
|
+
question_count: external_exports.string().optional().default("5").describe("Number of questions (default: 5 - each question is a clue + reveal node pair)")
|
|
4562
|
+
}
|
|
4563
|
+
},
|
|
4564
|
+
async (rawArgs) => {
|
|
4565
|
+
const args = coercePromptArgs(rawArgs);
|
|
4566
|
+
return {
|
|
4567
|
+
messages: [
|
|
4568
|
+
{
|
|
4569
|
+
role: "user",
|
|
4570
|
+
content: {
|
|
4571
|
+
type: "text",
|
|
4572
|
+
text: `I want to create a composition quiz${args.topic ? ` about "${args.topic}"` : ""}. ${args.question_count ?? 5} questions, guess-and-reveal style.`
|
|
4573
|
+
}
|
|
4574
|
+
},
|
|
4575
|
+
resourceLink("guide-quiz", "clipform://guides/quiz", "Quiz Writing Guide"),
|
|
4576
|
+
resourceLink("guide-quiz-composition", "clipform://guides/quiz/composition", "Composition Quiz Addendum"),
|
|
4577
|
+
{
|
|
4578
|
+
role: "assistant",
|
|
4579
|
+
content: {
|
|
4580
|
+
type: "text",
|
|
4581
|
+
text: await getWorkflowText("quiz", args, "composition")
|
|
4582
|
+
}
|
|
4583
|
+
}
|
|
4584
|
+
]
|
|
4585
|
+
};
|
|
4586
|
+
}
|
|
4587
|
+
);
|
|
4530
4588
|
server.registerPrompt(
|
|
4531
4589
|
"create-funnel",
|
|
4532
4590
|
{
|
|
@@ -4647,4 +4705,4 @@ export {
|
|
|
4647
4705
|
getWorkflowText,
|
|
4648
4706
|
registerPrompts
|
|
4649
4707
|
};
|
|
4650
|
-
//# sourceMappingURL=chunk-
|
|
4708
|
+
//# sourceMappingURL=chunk-6MLZZSNM.js.map
|