@writepanda/mcp 1.198.0 → 1.200.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/bin/server.mjs +44 -9
- package/package.json +1 -1
package/bin/server.mjs
CHANGED
|
@@ -2112,10 +2112,34 @@ const TOOLS = [
|
|
|
2112
2112
|
},
|
|
2113
2113
|
command: "project.remove-bleep",
|
|
2114
2114
|
},
|
|
2115
|
+
{
|
|
2116
|
+
name: "project_follow_speaker",
|
|
2117
|
+
description:
|
|
2118
|
+
"Podcast recordings (each person on their own camera): cut the frame to whoever is talking from the transcript's speaker tags. podcast-solo per turn, podcast-pair (both) in quick back-and-forth, no cut for short interjections. Anchored, re-runnable; run after the cuts. One wide shot of several people: project_auto_reframe instead.",
|
|
2119
|
+
inputSchema: {
|
|
2120
|
+
type: "object",
|
|
2121
|
+
properties: {
|
|
2122
|
+
id: { type: "string" },
|
|
2123
|
+
path: { type: "string" },
|
|
2124
|
+
minTurnMs: { type: "number", description: "Shorter turns don't cut away (default 1200)." },
|
|
2125
|
+
pair: {
|
|
2126
|
+
type: "boolean",
|
|
2127
|
+
description: "Both people during quick exchanges (default true).",
|
|
2128
|
+
},
|
|
2129
|
+
exchangeTurnMs: {
|
|
2130
|
+
type: "number",
|
|
2131
|
+
description: "Turn length that counts as quick (default 2600).",
|
|
2132
|
+
},
|
|
2133
|
+
dryRun: { type: "boolean" },
|
|
2134
|
+
expectedRevision: { type: "number" },
|
|
2135
|
+
},
|
|
2136
|
+
},
|
|
2137
|
+
command: "project.follow-speaker",
|
|
2138
|
+
},
|
|
2115
2139
|
{
|
|
2116
2140
|
name: "project_check_broll",
|
|
2117
2141
|
description:
|
|
2118
|
-
"B-roll, the LAST step of an edit. YOU pick the moments from what's said (transcript_get; any language, any topic; ~1 per 10-15 s) and what each picture shows; this checks them: span, clashes with the steps list / end card / other pictures, spacing, a nearby suggestion when blocked, insetSide (card away from the face). No moments: free stretches. Returns imageConnector. Never makes images: show the user your moments and ASK: their own images, generate on their connector (uses credits), or none. No one to ask: skip it and say so.",
|
|
2142
|
+
"B-roll, the LAST step of an edit. YOU pick the moments from what's said (transcript_get; any language, any topic; in a Short ~1 per 6-8 s with the first right after the opening line, in long-form ~1 per 10-15 s) and what each picture shows; this checks them: span, clashes with the steps list / end card / other pictures, spacing, a nearby suggestion when blocked, insetSide (card away from the face). No moments: free stretches. Returns imageConnector. Never makes images: show the user your moments and ASK: their own images, generate on their connector (uses credits), or none. No one to ask: skip it and say so.",
|
|
2119
2143
|
inputSchema: {
|
|
2120
2144
|
type: "object",
|
|
2121
2145
|
properties: {
|
|
@@ -4476,6 +4500,21 @@ const TOOLS = [
|
|
|
4476
4500
|
},
|
|
4477
4501
|
command: "recipe.list",
|
|
4478
4502
|
},
|
|
4503
|
+
{
|
|
4504
|
+
name: "recipe_pick",
|
|
4505
|
+
description:
|
|
4506
|
+
"No style named ('edit my video', 'make this a Short')? The recipes that fit this project's format and footage, each with pickWhen, plus defaultId. Choose by what's said, then recipe_apply_style + recipe_render.",
|
|
4507
|
+
inputSchema: {
|
|
4508
|
+
type: "object",
|
|
4509
|
+
properties: {
|
|
4510
|
+
id: { type: "string", description: "Project id (default: the open project)." },
|
|
4511
|
+
path: { type: "string" },
|
|
4512
|
+
format: { type: "string", enum: ["short", "long"] },
|
|
4513
|
+
footage: { type: "string", enum: ["camera", "screen", "podcast", "none"] },
|
|
4514
|
+
},
|
|
4515
|
+
},
|
|
4516
|
+
command: "recipe.pick",
|
|
4517
|
+
},
|
|
4479
4518
|
{
|
|
4480
4519
|
name: "recipe_get",
|
|
4481
4520
|
description: "Read one recipe in full.",
|
|
@@ -5270,22 +5309,18 @@ Start with system_status. Unknown arguments are rejected. Verbs without a tool o
|
|
|
5270
5309
|
|
|
5271
5310
|
Before an editing pass, read the skill's "Which tool for which moment" section (skill_read section="Which tool for which moment").
|
|
5272
5311
|
|
|
5273
|
-
"Edit my video" with no specifics = this pipeline, in order. Confirm scope once ("full polish, or just part of it?"), then run it all:
|
|
5312
|
+
"Edit my video" / "make this a Short" with no specifics = this pipeline, in order. Confirm scope once ("full polish, or just part of it?"), then run it all:
|
|
5274
5313
|
1. transcript_transcribe clips not yet transcribed (project_read clipStates).
|
|
5275
5314
|
2. transcript_remove_fillers.
|
|
5276
5315
|
3. Fix misheard names / brands with transcript_find_replace (transcript_insert_words for dropped words).
|
|
5277
5316
|
4. transcript_find_issues, then transcript_delete_words on each duplicate take / false start (keep the LAST take; keep severity "low" ones).
|
|
5278
5317
|
5. transcript_remove_silences.
|
|
5279
5318
|
6. audio_clean clips not yet cleaned.
|
|
5280
|
-
7.
|
|
5319
|
+
7. The style, after steps 2-5 (they shift the timeline). The user's named style, recipe, creator or a saved memory wins. Otherwise call recipe_pick: it returns the recipes that fit this project's format and footage, each with pickWhen, plus defaultId. Read the transcript, choose the ONE candidate whose pickWhen matches what is said (defaultId when none clearly fits), do its "before" step if any, then recipe_apply_style + recipe_render and follow the prompt: the recipe decides captions, graphics, zooms, music and transitions. (An app without recipe_pick, 2.0.5 and older: recipe_list with format short or long, and choose by description and footage.) Tell the user which recipe and why in one line and name one or two alternatives. Only when no candidate exists or the user asked for a plain clean-up: captions (caption_toggle, template glowStack), a few motion graphics, emphasis zooms.
|
|
5281
5320
|
8. B-roll, last: pick the moments yourself from what's said (any language), check them with project_check_broll, show the user your moments and ASK: their own images, generated on their image connector (only if one is connected; it uses their credits), or no B-roll. Never generate or invent images without their answer. Place what they give with project_add_broll. Nobody to ask: skip it and say so.
|
|
5282
5321
|
9. llm_generate_title / description / timestamps, then preview_show and ask before export_start. Never export before the user has seen the preview.
|
|
5283
|
-
Report the real count each step returned.
|
|
5284
|
-
|
|
5285
|
-
Style defaults when the user names no style, recipe or creator (their choice or a saved memory wins):
|
|
5286
|
-
- Long-form 16:9 with the speaker on camera: the Ali style recipe, id educator-talking-head-chapters (recipe_apply_style, then recipe_render and follow its prompt). It keeps burned-in captions OFF (keyword pops instead). Not for camera-less screen recordings or Loom-style internal videos.
|
|
5287
|
-
- Shorts / Reels / TikTok (9:16): the Shorts recipe that fits: hard-truth-one-liner-short (one blunt claim), rules-listicle-cutaways-short (numbered tips), rapid-fire-list-short (many one-line items), storytime-turn-short (story with a twist), framework-explainer-short (one concept), split-screen-short-broll (showable things), social-ad-hook-variants (selling an offer), faceless-short (no footage), else warm-educator-short.
|
|
5288
|
-
A Short from a SCREEN RECORDING first gets project_set_vertical_screen_layout, then the recipe. Say which recipe you used and why, and offer others (recipe_list).
|
|
5322
|
+
Report the real count each step returned. No music, intro/outro cards or FX overlays unless the recipe or the user asks for them.
|
|
5323
|
+
A single named operation ("just add captions", "remove the silences") is exactly that: no recipe.
|
|
5289
5324
|
|
|
5290
5325
|
Destructive actions need the user's own confirmation: project_delete, workspace_delete, recipe_delete, memory_forget, export_delete, export_clear_thumbnail, youtube_disconnect, social_disconnect. Ask plainly in chat first ("Delete project 'Demo'? This can't be undone.") and call only after they agree. PandaStudio then confirms with them itself: in its own chat the call returns confirmation_required and changes nothing while a Delete / Cancel card waits (tell them to press it; don't call again; the outcome arrives as their next message); from other apps a dialog asks, and the call is refused when nobody is at the app. Nothing you send can approve it.
|
|
5291
5326
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@writepanda/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.200.0",
|
|
4
4
|
"description": "Model Context Protocol server for PandaStudio. Exposes the desktop video editor's automation surface to Cursor, Continue, Cline, Claude Desktop, and any MCP-compliant client.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pandastudio",
|