@writepanda/mcp 1.22.1 → 1.22.3
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 -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",
|
|
@@ -480,6 +485,16 @@ const TOOLS = [
|
|
|
480
485
|
type: "number",
|
|
481
486
|
description: "Sound volume 0–1. Default 1 when soundUrl is set.",
|
|
482
487
|
},
|
|
488
|
+
anchorSourceMs: {
|
|
489
|
+
type: "number",
|
|
490
|
+
description:
|
|
491
|
+
"Anchor the motion graphic to a SOURCE-time moment (raw recording time). Pass this whenever atMs was derived from a transcript word's startMs — the region will then re-anchor automatically when subsequent transcript edits (remove-fillers, remove-silences, delete-words) shift the edited-time map. Without it, the motion graphic drifts silently. Omit for free-floating placement.",
|
|
492
|
+
},
|
|
493
|
+
anchorSourceEndMs: {
|
|
494
|
+
type: "number",
|
|
495
|
+
description:
|
|
496
|
+
"Optional anchor end (source ms) for ranged anchoring — the region's duration tracks the source-time span instead of preserving its visible duration.",
|
|
497
|
+
},
|
|
483
498
|
expectedRevision: { type: "number" },
|
|
484
499
|
},
|
|
485
500
|
required: ["file", "durationMs"],
|
|
@@ -545,6 +560,15 @@ const TOOLS = [
|
|
|
545
560
|
type: "number",
|
|
546
561
|
description: "Sound volume 0–1. Default 0.8.",
|
|
547
562
|
},
|
|
563
|
+
anchorSourceMs: {
|
|
564
|
+
type: "number",
|
|
565
|
+
description:
|
|
566
|
+
"Anchor the lower third to a SOURCE-time moment. Pass when atMs was derived from a transcript word's startMs — the lower third re-anchors automatically on subsequent transcript edits. Without it, the lower third drifts after any trim. Omit for free-floating placement.",
|
|
567
|
+
},
|
|
568
|
+
anchorSourceEndMs: {
|
|
569
|
+
type: "number",
|
|
570
|
+
description: "Optional anchor end (source ms) for ranged anchoring.",
|
|
571
|
+
},
|
|
548
572
|
expectedRevision: { type: "number" },
|
|
549
573
|
},
|
|
550
574
|
required: ["content", "atMs"],
|
|
@@ -676,6 +700,15 @@ const TOOLS = [
|
|
|
676
700
|
y: { type: "number", description: "Vertical center, percent 0-100. Default 50." },
|
|
677
701
|
width: { type: "number", description: "Width, percent 0-100. Default 30." },
|
|
678
702
|
height: { type: "number", description: "Height, percent 0-100. Default 20." },
|
|
703
|
+
anchorSourceMs: {
|
|
704
|
+
type: "number",
|
|
705
|
+
description:
|
|
706
|
+
"Anchor the annotation to a SOURCE-time moment (raw recording time). Pass when startMs was derived from a transcript word's startMs — the annotation re-anchors automatically on subsequent transcript edits. Without it, the annotation drifts after any trim. Omit for free-floating placement.",
|
|
707
|
+
},
|
|
708
|
+
anchorSourceEndMs: {
|
|
709
|
+
type: "number",
|
|
710
|
+
description: "Optional anchor end (source ms) for ranged anchoring.",
|
|
711
|
+
},
|
|
679
712
|
expectedRevision: { type: "number" },
|
|
680
713
|
},
|
|
681
714
|
required: ["startMs", "endMs", "type"],
|
|
@@ -996,6 +1029,16 @@ const TOOLS = [
|
|
|
996
1029
|
description:
|
|
997
1030
|
"[Legacy] Sets endMs = startMs + maxDurationMs when endMs is absent. Prefer endMs.",
|
|
998
1031
|
},
|
|
1032
|
+
anchorSourceMs: {
|
|
1033
|
+
type: "number",
|
|
1034
|
+
description:
|
|
1035
|
+
"Anchor an SFX overlay to a SOURCE-time moment (e.g. a punchline word). Pass when startMs was derived from a transcript word's source-time — the overlay re-anchors automatically on subsequent transcript edits. DO NOT pass for background music tracks; those should stay free-floating (they cover a fixed slot of the edited timeline regardless of content edits).",
|
|
1036
|
+
},
|
|
1037
|
+
anchorSourceEndMs: {
|
|
1038
|
+
type: "number",
|
|
1039
|
+
description:
|
|
1040
|
+
"Optional anchor end (source ms). When set, the overlay's edited duration tracks the source-time span between anchorSourceMs and anchorSourceEndMs.",
|
|
1041
|
+
},
|
|
999
1042
|
expectedRevision: { type: "number" },
|
|
1000
1043
|
},
|
|
1001
1044
|
required: ["audioPath"],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@writepanda/mcp",
|
|
3
|
-
"version": "1.22.
|
|
3
|
+
"version": "1.22.3",
|
|
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",
|