@writepanda/mcp 1.22.2 → 1.23.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 +49 -1
- package/package.json +1 -1
package/bin/server.mjs
CHANGED
|
@@ -396,12 +396,17 @@ const TOOLS = [
|
|
|
396
396
|
{
|
|
397
397
|
name: "project_read",
|
|
398
398
|
description:
|
|
399
|
-
"Read a project's full JSON. Returns { path, project, clipStates }. `clipStates` is a per-clip summary: { clipId, mediaPath, durationMs, transcribed, wordCount, audioCleaned, cleanedAudioPath? } — use it to decide whether to call transcript_transcribe or audio_clean before editing. Pass `project.revision` back as `expectedRevision` on subsequent writes for conflict-safe edits.",
|
|
399
|
+
"Read a project's full JSON. Returns { path, project, clipStates }. `clipStates` is a per-clip summary: { clipId, mediaPath, durationMs, transcribed, wordCount, audioCleaned, cleanedAudioPath? } — use it to decide whether to call transcript_transcribe or audio_clean before editing. Pass `project.revision` back as `expectedRevision` on subsequent writes for conflict-safe edits. **Performance tip:** pass `includeTranscript: false` after your first read to drop the per-clip transcript words from the response — they're typically 600+ KB on a 5-minute recording and most agent flows don't need them after pacing is done. clipStates always tells you the transcribed/wordCount status either way.",
|
|
400
400
|
inputSchema: {
|
|
401
401
|
type: "object",
|
|
402
402
|
properties: {
|
|
403
403
|
id: { type: "string" },
|
|
404
404
|
path: { type: "string" },
|
|
405
|
+
includeTranscript: {
|
|
406
|
+
type: "boolean",
|
|
407
|
+
description:
|
|
408
|
+
"When false, per-clip transcripts are stripped from the returned project object. Saves 600+ KB on typical recordings, 2-4s of JSON parse on subsequent reads. Default true.",
|
|
409
|
+
},
|
|
405
410
|
},
|
|
406
411
|
},
|
|
407
412
|
command: "project.read",
|
|
@@ -710,6 +715,49 @@ const TOOLS = [
|
|
|
710
715
|
},
|
|
711
716
|
command: "project.add-annotation",
|
|
712
717
|
},
|
|
718
|
+
{
|
|
719
|
+
name: "project_add_clip_transform_region",
|
|
720
|
+
description:
|
|
721
|
+
"Time-bounded transform on the main video clip — between startMs and endMs the clip renders inside a sub-rect of the canvas (per the chosen preset), freeing the rest for motion graphics. Outside the region, the clip renders full-frame. Renderer interpolates over `transitionMs` (default 320ms) at each boundary so the camera smoothly slides + scales. **Use ONLY on camera-only / user-uploaded recordings — for screen recordings, use cursor-telemetry zooms instead.** Typical pattern: agent finds an emphasis moment in the transcript, places a `cam-bottom-half` (9:16) or `cam-right-portrait` (16:9) transform region, and adds a motion graphic in the freed space. When the region ends, the camera returns to full-frame.",
|
|
722
|
+
inputSchema: {
|
|
723
|
+
type: "object",
|
|
724
|
+
required: ["startMs", "endMs", "preset"],
|
|
725
|
+
properties: {
|
|
726
|
+
id: { type: "string" },
|
|
727
|
+
path: { type: "string" },
|
|
728
|
+
startMs: { type: "number" },
|
|
729
|
+
endMs: { type: "number" },
|
|
730
|
+
preset: {
|
|
731
|
+
type: "string",
|
|
732
|
+
enum: [
|
|
733
|
+
"cam-bottom-half",
|
|
734
|
+
"cam-top-half",
|
|
735
|
+
"cam-right-portrait",
|
|
736
|
+
"cam-left-portrait",
|
|
737
|
+
"cam-bottom-right-quarter",
|
|
738
|
+
"cam-bottom-left-quarter",
|
|
739
|
+
],
|
|
740
|
+
description:
|
|
741
|
+
"cam-bottom-half / cam-top-half — for 9:16 (camera fills half, other half open for motion graphics). cam-right-portrait / cam-left-portrait — for 16:9 (camera ~35% of canvas in a portrait card on the chosen side, other ~65% open). cam-bottom-right-quarter / cam-bottom-left-quarter — small corner card; rest of canvas open.",
|
|
742
|
+
},
|
|
743
|
+
transitionMs: {
|
|
744
|
+
type: "number",
|
|
745
|
+
description: "Transition window at each edge in ms. Default 320.",
|
|
746
|
+
},
|
|
747
|
+
anchorSourceMs: {
|
|
748
|
+
type: "number",
|
|
749
|
+
description:
|
|
750
|
+
"Anchor to a SOURCE-time moment (transcript word startMs). Pass when startMs was derived from a transcript word — the region re-anchors automatically on subsequent transcript edits.",
|
|
751
|
+
},
|
|
752
|
+
anchorSourceEndMs: {
|
|
753
|
+
type: "number",
|
|
754
|
+
description: "Optional anchor end (source ms) for ranged anchoring.",
|
|
755
|
+
},
|
|
756
|
+
expectedRevision: { type: "number" },
|
|
757
|
+
},
|
|
758
|
+
},
|
|
759
|
+
command: "project.add-clip-transform-region",
|
|
760
|
+
},
|
|
713
761
|
|
|
714
762
|
// ── project lifecycle (extended) ───────────────────────────────
|
|
715
763
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@writepanda/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.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",
|