@writepanda/mcp 1.74.0 → 1.75.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 -8
- package/package.json +43 -43
package/bin/server.mjs
CHANGED
|
@@ -379,8 +379,12 @@ const TOOLS = [
|
|
|
379
379
|
id: { type: "string", description: "Export entry id." },
|
|
380
380
|
accountId: { type: "string" },
|
|
381
381
|
channelId: { type: "string" },
|
|
382
|
-
title: { type: "string" },
|
|
383
|
-
description: {
|
|
382
|
+
title: { type: "string", description: "Max 100 chars; < and > are stripped (YouTube rejects them)." },
|
|
383
|
+
description: {
|
|
384
|
+
type: "string",
|
|
385
|
+
description:
|
|
386
|
+
"Plain text, line breaks OK. < and > are stripped automatically and the text is clamped to 5000 chars, so a stray angle bracket (common in AI-written copy) no longer fails the upload.",
|
|
387
|
+
},
|
|
384
388
|
tags: { type: "array", items: { type: "string" } },
|
|
385
389
|
categoryId: { type: "string" },
|
|
386
390
|
privacyStatus: {
|
|
@@ -416,8 +420,12 @@ const TOOLS = [
|
|
|
416
420
|
properties: {
|
|
417
421
|
accountId: { type: "string" },
|
|
418
422
|
videoId: { type: "string" },
|
|
419
|
-
title: { type: "string" },
|
|
420
|
-
description: {
|
|
423
|
+
title: { type: "string", description: "Max 100 chars; < and > are stripped (YouTube rejects them)." },
|
|
424
|
+
description: {
|
|
425
|
+
type: "string",
|
|
426
|
+
description:
|
|
427
|
+
"Plain text, line breaks OK. < and > are stripped automatically and the text is clamped to 5000 chars, so a stray angle bracket (common in AI-written copy) no longer fails the upload.",
|
|
428
|
+
},
|
|
421
429
|
tags: { type: "array", items: { type: "string" } },
|
|
422
430
|
categoryId: { type: "string" },
|
|
423
431
|
privacyStatus: { type: "string" },
|
|
@@ -911,8 +919,13 @@ const TOOLS = [
|
|
|
911
919
|
description:
|
|
912
920
|
"1 (mild) - 6 (extreme). Default 2 (1.5×) — soft, modern feel. Use 3-4 for emphasis beats, 5-6 for dramatic punch-ins.",
|
|
913
921
|
},
|
|
914
|
-
focusX: { type: "number", description: "Normalised 0-1 horizontal center. Default 0.5" },
|
|
915
|
-
focusY: { type: "number", description: "Normalised 0-1 vertical center. Default 0.5" },
|
|
922
|
+
focusX: { type: "number", description: "Normalised 0-1 horizontal center. Default 0.5. Ignored when followCursor is true." },
|
|
923
|
+
focusY: { type: "number", description: "Normalised 0-1 vertical center. Default 0.5. Ignored when followCursor is true." },
|
|
924
|
+
followCursor: {
|
|
925
|
+
type: "boolean",
|
|
926
|
+
description:
|
|
927
|
+
"When true, the zoom continuously pans to follow the recorded mouse cursor (smoothed) for its duration — the Screen-Studio-style cursor-follow camera. Requires cursor telemetry (screen recordings); falls back to static focus otherwise. Ideal for screen-recording walkthroughs. Default false.",
|
|
928
|
+
},
|
|
916
929
|
soundUrl: {
|
|
917
930
|
type: "string",
|
|
918
931
|
description:
|
|
@@ -1228,7 +1241,7 @@ const TOOLS = [
|
|
|
1228
1241
|
{
|
|
1229
1242
|
name: "project_update_region",
|
|
1230
1243
|
description:
|
|
1231
|
-
"Patch fields on an existing region without replacing it. Accepts any subset of the region's own properties — only the supplied fields are changed, everything else is preserved. Works on zoom (depth, focusX, focusY), trim (startMs, endMs), speed (startMs, endMs, speed), fx (atMs, durationMs, opacity, blendMode, speed), annotation, overlay, clip-transform (startMs, endMs, preset, transitionMs), and audio-overlay (startMs, endMs, sourceStartMs, volume — lets you drag-trim an audio overlay without removing it). Time shifts on a link-grouped region (e.g. one half of a designed segment) propagate to every peer in the group so the pair stays coherent.",
|
|
1244
|
+
"Patch fields on an existing region without replacing it. Accepts any subset of the region's own properties — only the supplied fields are changed, everything else is preserved. Works on zoom (depth, focusX, focusY, focusMode: 'static'|'auto' — set 'auto' for the cursor-follow camera), trim (startMs, endMs), speed (startMs, endMs, speed), fx (atMs, durationMs, opacity, blendMode, speed), annotation, overlay, clip-transform (startMs, endMs, preset, transitionMs), and audio-overlay (startMs, endMs, sourceStartMs, volume — lets you drag-trim an audio overlay without removing it). Time shifts on a link-grouped region (e.g. one half of a designed segment) propagate to every peer in the group so the pair stays coherent.",
|
|
1232
1245
|
inputSchema: {
|
|
1233
1246
|
type: "object",
|
|
1234
1247
|
properties: {
|
|
@@ -1310,6 +1323,24 @@ const TOOLS = [
|
|
|
1310
1323
|
},
|
|
1311
1324
|
command: "project.set-crop",
|
|
1312
1325
|
},
|
|
1326
|
+
{
|
|
1327
|
+
name: "project_set_screen_transform",
|
|
1328
|
+
description:
|
|
1329
|
+
"Move and/or scale the MAIN video within the frame — the automation equivalent of dragging or resizing the main clip on the canvas. Distinct from project_set_crop (which trims SOURCE pixels): this repositions and zooms the WHOLE video inside the frame. `scale` is a uniform multiplier (0.1-5; >1 zooms in and the overflow is clipped to the canvas, <1 shrinks it so the wallpaper shows around it). `x`/`y` shift the center as a fraction of canvas width/height (-2..2; 0 = centered). Omitted fields keep their current value. Pass reset:true (or no x/y/scale) to clear it back to the natural layout. Global (whole timeline); preview and export honor it identically.",
|
|
1330
|
+
inputSchema: {
|
|
1331
|
+
type: "object",
|
|
1332
|
+
properties: {
|
|
1333
|
+
id: { type: "string" },
|
|
1334
|
+
path: { type: "string" },
|
|
1335
|
+
x: { type: "number", description: "Center X offset, fraction of canvas width (-2..2)." },
|
|
1336
|
+
y: { type: "number", description: "Center Y offset, fraction of canvas height (-2..2)." },
|
|
1337
|
+
scale: { type: "number", description: "Uniform scale multiplier (0.1..5). 1 = natural." },
|
|
1338
|
+
reset: { type: "boolean", description: "Clear the transform (back to natural layout)." },
|
|
1339
|
+
expectedRevision: { type: "number" },
|
|
1340
|
+
},
|
|
1341
|
+
},
|
|
1342
|
+
command: "project.set-screen-transform",
|
|
1343
|
+
},
|
|
1313
1344
|
{
|
|
1314
1345
|
name: "project_set_focal_point",
|
|
1315
1346
|
description:
|
|
@@ -1369,7 +1400,7 @@ const TOOLS = [
|
|
|
1369
1400
|
{
|
|
1370
1401
|
name: "project_set_aspect_ratio",
|
|
1371
1402
|
description:
|
|
1372
|
-
"Change the project's output aspect ratio. Affects the canvas size and how the video is cropped/letterboxed on export. Pick based on the target platform: 16:9 for YouTube/desktop, 9:16 for Shorts/Reels/TikTok, 1:1 for Instagram feed.",
|
|
1403
|
+
"Change the project's output aspect ratio. Affects the canvas size and how the video is cropped/letterboxed on export. Pick based on the target platform: 16:9 for YouTube/desktop, 9:16 for Shorts/Reels/TikTok, 1:1 for Instagram feed. A camera-only project whose source aspect differs from the new ratio is auto cover-cropped (centered) to fill the frame instead of letterboxing.",
|
|
1373
1404
|
inputSchema: {
|
|
1374
1405
|
type: "object",
|
|
1375
1406
|
properties: {
|
|
@@ -1421,6 +1452,11 @@ const TOOLS = [
|
|
|
1421
1452
|
type: "boolean",
|
|
1422
1453
|
description: "Whether to show a blurred background behind the recording.",
|
|
1423
1454
|
},
|
|
1455
|
+
cursorScale: {
|
|
1456
|
+
type: "number",
|
|
1457
|
+
description:
|
|
1458
|
+
"Custom-cursor overlay size. 0 = off (no synthetic cursor). >0 (e.g. 1.5) draws an enlarged cursor that tracks the recording's cursor telemetry. Screen recordings only. 0-5.",
|
|
1459
|
+
},
|
|
1424
1460
|
expectedRevision: { type: "number" },
|
|
1425
1461
|
},
|
|
1426
1462
|
},
|
package/package.json
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
2
|
+
"name": "@writepanda/mcp",
|
|
3
|
+
"version": "1.75.0",
|
|
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
|
+
"keywords": [
|
|
6
|
+
"pandastudio",
|
|
7
|
+
"mcp",
|
|
8
|
+
"model-context-protocol",
|
|
9
|
+
"video-editor",
|
|
10
|
+
"agent",
|
|
11
|
+
"cursor",
|
|
12
|
+
"continue",
|
|
13
|
+
"cline",
|
|
14
|
+
"claude-desktop"
|
|
15
|
+
],
|
|
16
|
+
"author": "Kamala Kannan Sankarraj",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"homepage": "https://www.writepanda.ai/cli",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/kamskans/openscreen.git",
|
|
22
|
+
"directory": "packages/mcp"
|
|
23
|
+
},
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://github.com/kamskans/openscreen/issues"
|
|
26
|
+
},
|
|
27
|
+
"type": "module",
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18"
|
|
30
|
+
},
|
|
31
|
+
"bin": {
|
|
32
|
+
"writepanda-mcp": "./bin/server.mjs"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"bin",
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE"
|
|
38
|
+
],
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@modelcontextprotocol/sdk": "^1.0.4"
|
|
41
|
+
},
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
}
|
|
45
45
|
}
|