@writepanda/mcp 1.58.0 → 1.62.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.
Files changed (2) hide show
  1. package/bin/server.mjs +46 -2
  2. package/package.json +43 -43
package/bin/server.mjs CHANGED
@@ -646,6 +646,12 @@ const TOOLS = [
646
646
  description:
647
647
  "Optional CSS color string composited over the blurred backdrop. Editor default: 'rgba(10,10,10,0.18)' (slight dark glass). Only applied when backdropBlurStrength > 0.",
648
648
  },
649
+ layer: {
650
+ type: "string",
651
+ enum: ["overlay", "background"],
652
+ description:
653
+ "'background' renders this full-frame graphic BEHIND the camera (graphic-background + talking-head-card layout) — pair it with a CARD camera clip-transform (cam-right-portrait / cam-bottom-right-quarter) over the same span. The camera card composites on top in preview AND export. Default 'overlay' (on top).",
654
+ },
649
655
  expectedRevision: { type: "number" },
650
656
  },
651
657
  required: ["durationMs"],
@@ -1001,6 +1007,7 @@ const TOOLS = [
1001
1007
  "cam-bottom-half",
1002
1008
  "cam-top-half",
1003
1009
  "cam-right-portrait",
1010
+ "cam-right-portrait-sm",
1004
1011
  "cam-left-portrait",
1005
1012
  "cam-bottom-right-quarter",
1006
1013
  "cam-bottom-left-quarter",
@@ -1014,7 +1021,7 @@ const TOOLS = [
1014
1021
  "layout-guest-full",
1015
1022
  ],
1016
1023
  description:
1017
- "cam-* (camera reposition into a sub-rect): cam-bottom-half / cam-top-half (9:16); cam-right-portrait / cam-left-portrait (16:9 ~35% card); cam-bottom-right-quarter / cam-bottom-left-quarter (corner card); cam-right-55/left-55/right-50/left-50 (designed splits). layout-* (PODCAST ONLY — whole-composite swap over time): layout-side-by-side, layout-podcast (two equal tiles), layout-host-full (speaker 1 only), layout-guest-full (speaker 2 only). IMPORTANT: layout-* presets only do anything on a PODCAST clip (kind='podcast' — a clip with BOTH a host and a guest source). On any other clip there is no second speaker, so they are a no-op; use cam-* there. Check clip.kind via project_read before using layout-*.",
1024
+ "cam-* (camera reposition into a sub-rect): cam-bottom-half / cam-top-half (9:16); cam-right-portrait / cam-left-portrait (16:9 ~35% card); cam-right-portrait-sm (small ~25% host card — for a full-frame graphic background); cam-bottom-right-quarter / cam-bottom-left-quarter (corner card); cam-right-55/left-55/right-50/left-50 (designed splits). layout-* (PODCAST ONLY — whole-composite swap over time): layout-side-by-side, layout-podcast (two equal tiles), layout-host-full (speaker 1 only), layout-guest-full (speaker 2 only). IMPORTANT: layout-* presets only do anything on a PODCAST clip (kind='podcast' — a clip with BOTH a host and a guest source). On any other clip there is no second speaker, so they are a no-op; use cam-* there. Check clip.kind via project_read before using layout-*.",
1018
1025
  },
1019
1026
  transitionMs: {
1020
1027
  type: "number",
@@ -1843,7 +1850,7 @@ const TOOLS = [
1843
1850
  slots: {
1844
1851
  type: "object",
1845
1852
  description:
1846
- "Editable values keyed by slot key (see motion_list / the SKILL catalog): text strings, color hex strings, or list arrays. Omitted slots fall back to the template default.",
1853
+ "Editable values keyed by slot key (see motion_list / the SKILL catalog): text strings, color hex strings, or list arrays. An 'image'-typed slot (see its `type` in motion_list) takes an ABSOLUTE FILE PATH to an image — the server stages the file into the render, so you can pass a project-media path or a generated image (e.g. from media_generate_image). Omitted slots fall back to the template default.",
1847
1854
  },
1848
1855
  aspectRatio: {
1849
1856
  type: "string",
@@ -1862,6 +1869,43 @@ const TOOLS = [
1862
1869
  },
1863
1870
  command: "motion.generate",
1864
1871
  },
1872
+ // Video templates ("storyboards") — multi-scene, parameterized videos that
1873
+ // render several templates and concatenate them into one finished clip.
1874
+ {
1875
+ name: "motion_list_storyboards",
1876
+ description:
1877
+ "List the bundled VIDEO templates (storyboards). Unlike single-scene templates (motion_list), a storyboard is a whole short video: an ordered set of scenes plus a `params` brief you fill in once. Returns each storyboard's id, name, audience (youtube|podcaster|course), description, aspectRatios, and `params` (the brief: key, label, type string|color|asset, required, default — color params default to the workspace brand kit via brand.* sentinels). Use a storyboard when the user wants a finished intro/outro/episode-open/lesson-open rather than a single overlay. Render one with motion_generate_storyboard.",
1878
+ inputSchema: { type: "object", properties: {} },
1879
+ command: "motion.list-storyboards",
1880
+ },
1881
+ {
1882
+ name: "motion_generate_storyboard",
1883
+ description:
1884
+ "Render a multi-scene VIDEO template (storyboard) by id. Fill the brief via `params`; missing color params fall back to the workspace brand kit, missing required text params fail fast. The server renders each scene and concatenates them into one MP4. Async — returns { jobId, outputPath, sceneCount }; call job_wait, then pass that jobId as `fromJob` to project_add_motion_graphic. Discover storyboards + their params with motion_list_storyboards.",
1885
+ inputSchema: {
1886
+ type: "object",
1887
+ properties: {
1888
+ storyboardId: {
1889
+ type: "string",
1890
+ description:
1891
+ "Storyboard id from motion_list_storyboards (e.g. youtube-creator-intro, podcast-episode-open, course-lesson-open).",
1892
+ },
1893
+ params: {
1894
+ type: "object",
1895
+ description:
1896
+ "The brief, keyed by param key (see motion_list_storyboards). Text and color values. Omitted color params fall back to the workspace brand kit; omitted required text params cause a fast failure.",
1897
+ },
1898
+ aspectRatio: {
1899
+ type: "string",
1900
+ enum: ["16:9", "9:16", "1:1"],
1901
+ description: "Defaults to the storyboard's first listed aspect.",
1902
+ },
1903
+ outputName: { type: "string", description: "Optional filename stem (no extension)." },
1904
+ },
1905
+ required: ["storyboardId"],
1906
+ },
1907
+ command: "motion.generate-storyboard",
1908
+ },
1865
1909
  // Custom HTML authoring path is `motion_render_html` (for briefs no
1866
1910
  // bundled template fits).
1867
1911
  {
package/package.json CHANGED
@@ -1,45 +1,45 @@
1
1
  {
2
- "name": "@writepanda/mcp",
3
- "version": "1.58.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
- }
2
+ "name": "@writepanda/mcp",
3
+ "version": "1.62.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
  }