@writepanda/mcp 1.98.0 → 1.99.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 +48 -6
  2. package/package.json +1 -1
package/bin/server.mjs CHANGED
@@ -854,7 +854,7 @@ const TOOLS = [
854
854
  {
855
855
  name: "project_add_motion_graphic",
856
856
  description:
857
- "Drop a motion-graphic MP4/WebM onto the timeline. PREFERRED: pass `fromJob` (the jobId from motion_render_html / motion_generate / motion_concat) — the server resolves the outputPath internally, so you never handle the path string at all. Fallback: pass `file` (an absolute path) only for external/uploaded files. Also accepts `file: 'bundled:transition/<id>'` (ids from asset_list_transitions) — the house-opener pattern: a bundled transition placed as an overlay auto-stamps transitionId so it COVER-fits any canvas (a 16:9 sweep fills a 9:16 frame) and carries its SFX via soundUrl. **Defaults to a `bundled:sound/mouse-click` SFX as the graphic appears** — pass `soundUrl: null` to make it silent, or any other `bundled:sound/<id>` to swap the sound.",
857
+ "Drop a motion-graphic MP4/WebM onto the timeline. PREFERRED: pass `fromJob` (the jobId from motion_render_html / motion_generate / motion_concat) — the server resolves the outputPath internally, so you never handle the path string at all. Fallback: pass `file` (an absolute path) only for external/uploaded files. Also accepts `file: 'bundled:transition/<id>'` (ids from asset_list_transitions) — the house-opener pattern: a bundled transition placed as an overlay auto-stamps transitionId so it COVER-fits any canvas (a 16:9 sweep fills a 9:16 frame) and carries its SFX via soundUrl. Image files (png/jpg/webp/gif/avif) are detected and render as image overlays; pair `file: <image>` with `layer: 'background'` for a timed BACKGROUND-IMAGE underlay (cover-fills the canvas behind the camera — with a background-effect remove region over the same span, the image replaces the speaker's real background for just that duration). **Defaults to a `bundled:sound/mouse-click` SFX as the graphic appears** — pass `soundUrl: null` to make it silent, or any other `bundled:sound/<id>` to swap the sound.",
858
858
  inputSchema: {
859
859
  type: "object",
860
860
  properties: {
@@ -1223,6 +1223,48 @@ const TOOLS = [
1223
1223
  },
1224
1224
  command: "project.add-spotlight",
1225
1225
  },
1226
+ {
1227
+ name: "project_add_background_effect",
1228
+ description:
1229
+ "Add a BACKGROUND EFFECT region on the camera video: AI person segmentation runs between startMs and endMs and either BLURS the background behind the speaker (mode 'blur' — video-call style) or REMOVES it so the project wallpaper shows through behind them (mode 'remove'). Behaves exactly like a zoom region on the timeline: draggable, trimmable, source-anchored (pass anchorSourceMs when placing from a transcript word so it survives later trims). Camera / talking-head footage only. Preview and export render it identically. Find placed regions via project_read under editor.backgroundEffectRegions[]; retime/restyle with project_update_region (regionType 'background-effect'), delete with project_remove_region.",
1230
+ inputSchema: {
1231
+ type: "object",
1232
+ properties: {
1233
+ id: { type: "string" },
1234
+ path: { type: "string" },
1235
+ atMs: { type: "number", description: "Edited-time start (ms). Or pass startMs." },
1236
+ startMs: { type: "number", description: "Alias for atMs (edited-time start, ms)." },
1237
+ endMs: { type: "number", description: "Edited-time end (ms). Alternative to durationMs." },
1238
+ durationMs: {
1239
+ type: "number",
1240
+ description: "Duration in ms. Default 5000 when neither durationMs nor endMs given.",
1241
+ },
1242
+ mode: {
1243
+ type: "string",
1244
+ enum: ["blur", "remove"],
1245
+ description:
1246
+ '"blur" = person sharp, background gaussian-blurred. "remove" = background cut away; the project wallpaper/background shows through behind the person.',
1247
+ },
1248
+ strength: {
1249
+ type: "number",
1250
+ description:
1251
+ "Blur strength in px sigma at 1080p (mode='blur' only; ignored for 'remove'). 1-120, default 18.",
1252
+ },
1253
+ anchorSourceMs: {
1254
+ type: "number",
1255
+ description:
1256
+ "Anchor to a SOURCE-time moment (transcript word startMs). The region then re-anchors automatically on subsequent trim/speed edits.",
1257
+ },
1258
+ anchorSourceEndMs: {
1259
+ type: "number",
1260
+ description: "Optional anchor end (source ms) for ranged anchoring.",
1261
+ },
1262
+ expectedRevision: { type: "number" },
1263
+ },
1264
+ required: ["mode"],
1265
+ },
1266
+ command: "project.add-background-effect",
1267
+ },
1226
1268
  {
1227
1269
  name: "project_update_spotlight",
1228
1270
  description:
@@ -1624,7 +1666,7 @@ const TOOLS = [
1624
1666
  {
1625
1667
  name: "project_remove_region",
1626
1668
  description:
1627
- "Delete an existing region (zoom, trim, speed, annotation, fx, overlay, clip-transform, audio-overlay) by its id. Use project_read to find region ids — visual regions live under editor.*Regions; audio overlays live under audioOverlays[]. If the region belongs to a link group (designed-segment pair: a clip-transform parking the camera into one half + the panel motion-graphic on the other half), deleting either half also removes its peer so the pair stays coherent. Returns the updated project.",
1669
+ "Delete an existing region (zoom, trim, speed, annotation, fx, overlay, clip-transform, background-effect, audio-overlay) by its id. Use project_read to find region ids — visual regions live under editor.*Regions; audio overlays live under audioOverlays[]. If the region belongs to a link group (designed-segment pair: a clip-transform parking the camera into one half + the panel motion-graphic on the other half), deleting either half also removes its peer so the pair stays coherent. Returns the updated project.",
1628
1670
  inputSchema: {
1629
1671
  type: "object",
1630
1672
  properties: {
@@ -1633,7 +1675,7 @@ const TOOLS = [
1633
1675
  regionType: {
1634
1676
  type: "string",
1635
1677
  description:
1636
- "zoom | trim | speed | annotation | fx | overlay | clip-transform | audio-overlay",
1678
+ "zoom | trim | speed | annotation | fx | overlay | clip-transform | background-effect | audio-overlay",
1637
1679
  },
1638
1680
  regionId: { type: "string", description: "id of the region to delete" },
1639
1681
  expectedRevision: { type: "number" },
@@ -1664,7 +1706,7 @@ const TOOLS = [
1664
1706
  {
1665
1707
  name: "project_update_region",
1666
1708
  description:
1667
- "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. Overlay geometry (x/y/width/height) is PERCENT of canvas 0-100; values <= 1 are treated as 0-1 fractions and scaled. 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.",
1709
+ "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. Overlay geometry (x/y/width/height) is PERCENT of canvas 0-100; values <= 1 are treated as 0-1 fractions and scaled. 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), background-effect (startMs, endMs, mode: 'blur'|'remove', strength), 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.",
1668
1710
  inputSchema: {
1669
1711
  type: "object",
1670
1712
  properties: {
@@ -1673,7 +1715,7 @@ const TOOLS = [
1673
1715
  regionType: {
1674
1716
  type: "string",
1675
1717
  description:
1676
- "zoom | trim | speed | annotation | fx | overlay | clip-transform | audio-overlay",
1718
+ "zoom | trim | speed | annotation | fx | overlay | clip-transform | background-effect | audio-overlay",
1677
1719
  },
1678
1720
  regionId: { type: "string", description: "id of the region to update" },
1679
1721
  patch: {
@@ -3012,7 +3054,7 @@ const TOOLS = [
3012
3054
  const server = new Server(
3013
3055
  {
3014
3056
  name: "pandastudio",
3015
- version: "1.71.0",
3057
+ version: "1.72.0",
3016
3058
  },
3017
3059
  {
3018
3060
  capabilities: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@writepanda/mcp",
3
- "version": "1.98.0",
3
+ "version": "1.99.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",