@writepanda/mcp 1.99.0 → 1.105.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 +106 -6
  2. package/package.json +1 -1
package/bin/server.mjs CHANGED
@@ -229,6 +229,40 @@ const TOOLS = [
229
229
  inputSchema: { type: "object", properties: {} },
230
230
  command: "system.isWhisperModelDownloaded",
231
231
  },
232
+ {
233
+ name: "system_get_narration_engine",
234
+ description:
235
+ "Read the active narration (TTS) engine for the current workspace. Returns { engine } — 'local-kokoro' (default; Kokoro-82M on-device, English, no key/cloud) or 'replicate' (cloud TTS, needs the user's Replicate key). Use before recommending a switch or when disclosing which engine narration uses.",
236
+ inputSchema: { type: "object", properties: {} },
237
+ command: "system.getNarrationEngine",
238
+ },
239
+ {
240
+ name: "system_set_narration_engine",
241
+ description:
242
+ "Set the DEFAULT narration engine for the current workspace. Pass `engine` = 'local-kokoro' (on-device English, no key) or 'replicate' (cloud, needs the user's Replicate key). Individual media_generate_narration calls can still override this via their `model` arg. Switching to local triggers a one-time ~330 MB model download on first use — call system_is_kokoro_model_downloaded to check.",
243
+ inputSchema: {
244
+ type: "object",
245
+ properties: {
246
+ engine: { type: "string", description: "'local-kokoro' | 'replicate'." },
247
+ },
248
+ required: ["engine"],
249
+ },
250
+ command: "system.setNarrationEngine",
251
+ },
252
+ {
253
+ name: "system_is_kokoro_model_downloaded",
254
+ description:
255
+ "Check whether the local Kokoro-82M TTS model (English on-device narration) has been downloaded. Returns { downloaded: boolean }. The model (~330 MB) auto-downloads on first local narration; calling this first lets you surface the download instead of a long first-run wait.",
256
+ inputSchema: { type: "object", properties: {} },
257
+ command: "system.isKokoroModelDownloaded",
258
+ },
259
+ {
260
+ name: "system_download_kokoro_model",
261
+ description:
262
+ "Pre-download the local Kokoro-82M TTS model + voices (~330 MB) now so the first narration doesn't pay the wait. Idempotent; returns { downloaded: true }. Optional — narration also auto-downloads on first use.",
263
+ inputSchema: { type: "object", properties: {} },
264
+ command: "system.downloadKokoroModel",
265
+ },
232
266
 
233
267
  // ── workspaces (v1.19) ──────────────────────────────────────────
234
268
  // Multi-workspace isolation: each workspace has its own projects,
@@ -1250,6 +1284,32 @@ const TOOLS = [
1250
1284
  description:
1251
1285
  "Blur strength in px sigma at 1080p (mode='blur' only; ignored for 'remove'). 1-120, default 18.",
1252
1286
  },
1287
+ outline: {
1288
+ type: "boolean",
1289
+ description:
1290
+ "Draw a person OUTLINE (colored keyline + drop shadow) around the cutout. Enable on 'remove' over a cream wallpaper for the VOX magazine-cutout look; also composes with 'blur'.",
1291
+ },
1292
+ outlineWidth: {
1293
+ type: "number",
1294
+ description: "Outline keyline width in px at 1080p. 1-120, default 36.",
1295
+ },
1296
+ outlineColor: {
1297
+ type: "string",
1298
+ description: "Outline color (hex/rgb). Default white '#ffffff'.",
1299
+ },
1300
+ outlineShadow: {
1301
+ type: "boolean",
1302
+ description: "Whether the outline casts a drop shadow (lifted-sticker look). Default true.",
1303
+ },
1304
+ matteContract: {
1305
+ type: "number",
1306
+ description:
1307
+ "Manually tune the person BOUNDARY, px at 1080p: >0 contracts the edge INWARD (kills background fringe / tightens the cutout), <0 expands it outward. -60..60, default 0.",
1308
+ },
1309
+ matteFeather: {
1310
+ type: "number",
1311
+ description: "Soften the matte edge, px at 1080p. 0..60, default 0.",
1312
+ },
1253
1313
  anchorSourceMs: {
1254
1314
  type: "number",
1255
1315
  description:
@@ -1806,6 +1866,44 @@ const TOOLS = [
1806
1866
  },
1807
1867
  command: "project.set-screen-transform",
1808
1868
  },
1869
+ {
1870
+ name: "project_set_backdrop",
1871
+ description:
1872
+ "Set what fills the canvas BEHIND the main video when it's scaled down / parked in a corner (via project_set_screen_transform). mode='blur-self' shows a blurred, cover-cropped copy of the main video itself — the Shorts / camera-in-a-corner look. mode='wallpaper' (default) clears it back to the configured wallpaper. Only visible when the main video doesn't fill the frame; for the full one-click corner layout use project_set_shorts_layout. Preview and export render it identically.",
1873
+ inputSchema: {
1874
+ type: "object",
1875
+ properties: {
1876
+ id: { type: "string" },
1877
+ path: { type: "string" },
1878
+ mode: {
1879
+ type: "string",
1880
+ enum: ["blur-self", "wallpaper"],
1881
+ description: "'blur-self' (blurred self-fill) or 'wallpaper' (default / clear).",
1882
+ },
1883
+ expectedRevision: { type: "number" },
1884
+ },
1885
+ },
1886
+ command: "project.set-backdrop",
1887
+ },
1888
+ {
1889
+ name: "project_set_shorts_layout",
1890
+ description:
1891
+ "One-shot vertical (9:16) layout for a camera-only clip — the automation equivalent of the editor's Layout picker. layout='full' = camera fills the frame (clears any transform + backdrop). layout='camera-corner' = camera shrinks to a draggable bottom-right tile over a blurred self-fill of itself (sets the main-clip transform AND backdrop together). For a screen-recording (screen+camera) clip, use project_set_webcam_layout with 'picture-in-picture' instead — that already gives screen-fills-with-camera-corner.",
1892
+ inputSchema: {
1893
+ type: "object",
1894
+ properties: {
1895
+ id: { type: "string" },
1896
+ path: { type: "string" },
1897
+ layout: {
1898
+ type: "string",
1899
+ enum: ["full", "camera-corner"],
1900
+ description: "'full' or 'camera-corner'.",
1901
+ },
1902
+ expectedRevision: { type: "number" },
1903
+ },
1904
+ },
1905
+ command: "project.set-shorts-layout",
1906
+ },
1809
1907
  {
1810
1908
  name: "project_set_focal_point",
1811
1909
  description:
@@ -2432,27 +2530,29 @@ const TOOLS = [
2432
2530
  {
2433
2531
  name: "media_generate_narration",
2434
2532
  description:
2435
- "Generate a voiceover / narration audio clip via Replicate TTS, for promo videos and explainers. Project-agnostic; writes audio to <userData>/narration/ and returns { audioPath, durationMs, model, voice, predictionId }. Canonical workflow: media_generate_narration → project_add_audio (place at startMs, pass the returned durationMs so the overlay is sized to the speech). Models: 'elevenlabs-v3' (default, most expressive — embed inline delivery tags in the text like [excited] or [whispers]) | 'gemini-flash-tts' (30 voices, strong multilingual; 'style' sets tone) | 'minimax-turbo' (fast; 'style' maps to an emotion, 'speed' 0.5-2). Voices — gemini e.g. Kore/Puck/Charon; minimax e.g. Friendly_Person/Wise_Woman/Casual_Guy; omit voice for the model default. Requires the user's Replicate API key (Settings → Integrations).",
2533
+ "Generate a voiceover / narration audio clip. Project-agnostic; writes audio to <userData>/narration/ and returns { audioPath, durationMs, model, voice, predictionId }. Canonical workflow: media_generate_narration → project_add_audio (place at startMs, pass the returned durationMs so the overlay is sized to the speech). DEFAULT is the LOCAL, on-device Kokoro engine (English) — no API key, no cloud, runs on the user's machine; the model auto-downloads (~330 MB) on first use. Kokoro voices (pass in `voice`): af_heart (default), af_bella, am_michael, bf_emma, bm_george, etc. (a*=American, b*=British; f=female, m=male). To use CLOUD TTS instead (more voices/languages, needs the user's Replicate key), set `model` to a Replicate model: 'elevenlabs-v3' (most expressive — embed inline tags like [excited]/[whispers]) | 'gemini-flash-tts' (30 voices, multilingual, 'style' sets tone) | 'minimax-turbo' (fast, 'style' maps to an emotion, 'speed' 0.5-2). Cloud voices — gemini Kore/Puck/Charon; minimax Friendly_Person/Wise_Woman. Omit `model` to honour the workspace default (system_get_narration_engine).",
2436
2534
  inputSchema: {
2437
2535
  type: "object",
2438
2536
  properties: {
2439
2537
  text: {
2440
2538
  type: "string",
2441
2539
  description:
2442
- "The script to speak. For elevenlabs-v3 you can embed delivery tags inline, e.g. 'Welcome [excited] to the future of editing.'",
2540
+ "The script to speak. For the cloud elevenlabs-v3 model you can embed delivery tags inline, e.g. 'Welcome [excited] to the future of editing.' (Local Kokoro ignores such tags.)",
2443
2541
  },
2444
2542
  model: {
2445
2543
  type: "string",
2446
- description: "'elevenlabs-v3' (default) | 'gemini-flash-tts' | 'minimax-turbo'.",
2544
+ description:
2545
+ "Engine/model selector. Omit for the workspace default (local Kokoro). 'kokoro-local' forces on-device English. Cloud (needs Replicate key): 'elevenlabs-v3' | 'gemini-flash-tts' | 'minimax-turbo'.",
2447
2546
  },
2448
2547
  voice: {
2449
2548
  type: "string",
2450
2549
  description:
2451
- "Voice id/name for the chosen model (gemini: Kore/Puck/...; minimax: Friendly_Person/...). Omit for the model default.",
2550
+ "Voice for the chosen engine. Local Kokoro: af_heart/af_bella/am_michael/bf_emma/bm_george/... Cloud: gemini Kore/Puck/...; minimax Friendly_Person/... Omit for the engine's default voice.",
2452
2551
  },
2453
2552
  language: {
2454
2553
  type: "string",
2455
- description: "Optional BCP-47 language hint, e.g. 'en-US', 'es-ES'.",
2554
+ description:
2555
+ "Optional BCP-47 language hint for the cloud models, e.g. 'en-US', 'es-ES'. Local Kokoro is English-only and ignores this.",
2456
2556
  },
2457
2557
  style: {
2458
2558
  type: "string",
@@ -3054,7 +3154,7 @@ const TOOLS = [
3054
3154
  const server = new Server(
3055
3155
  {
3056
3156
  name: "pandastudio",
3057
- version: "1.72.0",
3157
+ version: "1.73.0",
3058
3158
  },
3059
3159
  {
3060
3160
  capabilities: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@writepanda/mcp",
3
- "version": "1.99.0",
3
+ "version": "1.105.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",