@writepanda/mcp 1.22.0 → 1.22.2
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 +71 -0
- package/package.json +1 -1
package/bin/server.mjs
CHANGED
|
@@ -480,6 +480,16 @@ const TOOLS = [
|
|
|
480
480
|
type: "number",
|
|
481
481
|
description: "Sound volume 0–1. Default 1 when soundUrl is set.",
|
|
482
482
|
},
|
|
483
|
+
anchorSourceMs: {
|
|
484
|
+
type: "number",
|
|
485
|
+
description:
|
|
486
|
+
"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.",
|
|
487
|
+
},
|
|
488
|
+
anchorSourceEndMs: {
|
|
489
|
+
type: "number",
|
|
490
|
+
description:
|
|
491
|
+
"Optional anchor end (source ms) for ranged anchoring — the region's duration tracks the source-time span instead of preserving its visible duration.",
|
|
492
|
+
},
|
|
483
493
|
expectedRevision: { type: "number" },
|
|
484
494
|
},
|
|
485
495
|
required: ["file", "durationMs"],
|
|
@@ -545,6 +555,15 @@ const TOOLS = [
|
|
|
545
555
|
type: "number",
|
|
546
556
|
description: "Sound volume 0–1. Default 0.8.",
|
|
547
557
|
},
|
|
558
|
+
anchorSourceMs: {
|
|
559
|
+
type: "number",
|
|
560
|
+
description:
|
|
561
|
+
"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.",
|
|
562
|
+
},
|
|
563
|
+
anchorSourceEndMs: {
|
|
564
|
+
type: "number",
|
|
565
|
+
description: "Optional anchor end (source ms) for ranged anchoring.",
|
|
566
|
+
},
|
|
548
567
|
expectedRevision: { type: "number" },
|
|
549
568
|
},
|
|
550
569
|
required: ["content", "atMs"],
|
|
@@ -676,6 +695,15 @@ const TOOLS = [
|
|
|
676
695
|
y: { type: "number", description: "Vertical center, percent 0-100. Default 50." },
|
|
677
696
|
width: { type: "number", description: "Width, percent 0-100. Default 30." },
|
|
678
697
|
height: { type: "number", description: "Height, percent 0-100. Default 20." },
|
|
698
|
+
anchorSourceMs: {
|
|
699
|
+
type: "number",
|
|
700
|
+
description:
|
|
701
|
+
"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.",
|
|
702
|
+
},
|
|
703
|
+
anchorSourceEndMs: {
|
|
704
|
+
type: "number",
|
|
705
|
+
description: "Optional anchor end (source ms) for ranged anchoring.",
|
|
706
|
+
},
|
|
679
707
|
expectedRevision: { type: "number" },
|
|
680
708
|
},
|
|
681
709
|
required: ["startMs", "endMs", "type"],
|
|
@@ -996,6 +1024,16 @@ const TOOLS = [
|
|
|
996
1024
|
description:
|
|
997
1025
|
"[Legacy] Sets endMs = startMs + maxDurationMs when endMs is absent. Prefer endMs.",
|
|
998
1026
|
},
|
|
1027
|
+
anchorSourceMs: {
|
|
1028
|
+
type: "number",
|
|
1029
|
+
description:
|
|
1030
|
+
"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).",
|
|
1031
|
+
},
|
|
1032
|
+
anchorSourceEndMs: {
|
|
1033
|
+
type: "number",
|
|
1034
|
+
description:
|
|
1035
|
+
"Optional anchor end (source ms). When set, the overlay's edited duration tracks the source-time span between anchorSourceMs and anchorSourceEndMs.",
|
|
1036
|
+
},
|
|
999
1037
|
expectedRevision: { type: "number" },
|
|
1000
1038
|
},
|
|
1001
1039
|
required: ["audioPath"],
|
|
@@ -1378,6 +1416,39 @@ const TOOLS = [
|
|
|
1378
1416
|
},
|
|
1379
1417
|
command: "motion.concat",
|
|
1380
1418
|
},
|
|
1419
|
+
{
|
|
1420
|
+
name: "motion_verify_frames",
|
|
1421
|
+
description:
|
|
1422
|
+
"Extract PNG frames at given timestamps from a rendered video so the agent can VISUALLY verify the motion graphics landed. This operationalises the 'lint passing ≠ design working — VIEW THE FRAMES' rule in reference/motion-philosophy.md §4. Call this after motion_render_html or export.start and BEFORE declaring a motion-graphics deliverable done. Pass either entryId (export-library entry) or videoPath (arbitrary MP4). Timestamps are in seconds, typically 8-15 spread across hero moments. Returns { frames: [{timestampSeconds, path}...] } — the agent must then Read each path as an image (multimodal) and confirm no cropped faces / text overflow / blank frames / forbidden-zone occlusion / flat-white headlines.",
|
|
1423
|
+
inputSchema: {
|
|
1424
|
+
type: "object",
|
|
1425
|
+
required: ["timestamps"],
|
|
1426
|
+
properties: {
|
|
1427
|
+
entryId: {
|
|
1428
|
+
type: "string",
|
|
1429
|
+
description:
|
|
1430
|
+
"Export library entry id. Mutually exclusive with videoPath — one must be provided.",
|
|
1431
|
+
},
|
|
1432
|
+
videoPath: {
|
|
1433
|
+
type: "string",
|
|
1434
|
+
description:
|
|
1435
|
+
"Absolute path to an MP4 (e.g. a motion.render-html intermediate output). Mutually exclusive with entryId.",
|
|
1436
|
+
},
|
|
1437
|
+
timestamps: {
|
|
1438
|
+
type: "array",
|
|
1439
|
+
items: { type: "number" },
|
|
1440
|
+
description:
|
|
1441
|
+
"Timestamps in seconds to extract frames at (e.g. [0.5, 1.5, 3.0, 5.0, 7.5, 10.0, 12.5, 15.0]). Max 30 per call.",
|
|
1442
|
+
},
|
|
1443
|
+
outputName: {
|
|
1444
|
+
type: "string",
|
|
1445
|
+
description:
|
|
1446
|
+
"Optional subdir stem for the output PNGs. Defaults to verify-<rand>. Frames land in RECORDINGS_DIR/<stem>/frame-<ms>.png.",
|
|
1447
|
+
},
|
|
1448
|
+
},
|
|
1449
|
+
},
|
|
1450
|
+
command: "motion.verify-frames",
|
|
1451
|
+
},
|
|
1381
1452
|
|
|
1382
1453
|
// ── assets ──────────────────────────────────────────────────────
|
|
1383
1454
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@writepanda/mcp",
|
|
3
|
-
"version": "1.22.
|
|
3
|
+
"version": "1.22.2",
|
|
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",
|