@writepanda/mcp 1.9.3 → 1.9.5
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 +67 -20
- package/package.json +1 -1
package/bin/server.mjs
CHANGED
|
@@ -34,10 +34,7 @@ import path from "node:path";
|
|
|
34
34
|
import process from "node:process";
|
|
35
35
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
36
36
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
37
|
-
import {
|
|
38
|
-
CallToolRequestSchema,
|
|
39
|
-
ListToolsRequestSchema,
|
|
40
|
-
} from "@modelcontextprotocol/sdk/types.js";
|
|
37
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
41
38
|
|
|
42
39
|
// ── Credentials + transport ───────────────────────────────────────────
|
|
43
40
|
|
|
@@ -176,7 +173,8 @@ const TOOLS = [
|
|
|
176
173
|
},
|
|
177
174
|
{
|
|
178
175
|
name: "project_show",
|
|
179
|
-
description:
|
|
176
|
+
description:
|
|
177
|
+
"Resolve a project's path + summary metadata by id or path. Cheaper than project_read.",
|
|
180
178
|
inputSchema: {
|
|
181
179
|
type: "object",
|
|
182
180
|
properties: {
|
|
@@ -219,7 +217,8 @@ const TOOLS = [
|
|
|
219
217
|
},
|
|
220
218
|
{
|
|
221
219
|
name: "project_open",
|
|
222
|
-
description:
|
|
220
|
+
description:
|
|
221
|
+
"Open the desktop editor focused on a specific project (so the user can take over).",
|
|
223
222
|
inputSchema: {
|
|
224
223
|
type: "object",
|
|
225
224
|
properties: {
|
|
@@ -272,7 +271,10 @@ const TOOLS = [
|
|
|
272
271
|
properties: {
|
|
273
272
|
id: { type: "string" },
|
|
274
273
|
path: { type: "string" },
|
|
275
|
-
fxId: {
|
|
274
|
+
fxId: {
|
|
275
|
+
type: "string",
|
|
276
|
+
description: "Bundled FX id (e.g. film-burn). Use asset_list_fx to discover.",
|
|
277
|
+
},
|
|
276
278
|
src: { type: "string", description: "Direct path/URL (alternative to fxId)" },
|
|
277
279
|
atMs: { type: "number" },
|
|
278
280
|
durationMs: { type: "number", description: "Default 2500ms for bundled FX" },
|
|
@@ -296,7 +298,8 @@ const TOOLS = [
|
|
|
296
298
|
durationMs: { type: "number", description: "Default 5000ms" },
|
|
297
299
|
designType: {
|
|
298
300
|
type: "string",
|
|
299
|
-
description:
|
|
301
|
+
description:
|
|
302
|
+
"name-bar | slash-reveal | center-stack | minimal-underline | box-reveal | corner-brackets | border-frame | split-horizontal",
|
|
300
303
|
},
|
|
301
304
|
accentColor: { type: "string" },
|
|
302
305
|
expectedRevision: { type: "number" },
|
|
@@ -309,7 +312,8 @@ const TOOLS = [
|
|
|
309
312
|
// ── compose: visual regions ─────────────────────────────────────
|
|
310
313
|
{
|
|
311
314
|
name: "project_add_zoom",
|
|
312
|
-
description:
|
|
315
|
+
description:
|
|
316
|
+
"Add a zoom region — highlight a UI moment. Typical pattern: find 'click X' in transcript, drop zoom there.",
|
|
313
317
|
inputSchema: {
|
|
314
318
|
type: "object",
|
|
315
319
|
properties: {
|
|
@@ -410,7 +414,8 @@ const TOOLS = [
|
|
|
410
414
|
},
|
|
411
415
|
{
|
|
412
416
|
name: "transcript_remove_fillers",
|
|
413
|
-
description:
|
|
417
|
+
description:
|
|
418
|
+
"Auto-detect filler words ('um', 'uh', 'like', 'you know', ...) plus immediately-repeated words and bulk-trim them.",
|
|
414
419
|
inputSchema: {
|
|
415
420
|
type: "object",
|
|
416
421
|
properties: {
|
|
@@ -424,7 +429,8 @@ const TOOLS = [
|
|
|
424
429
|
},
|
|
425
430
|
{
|
|
426
431
|
name: "transcript_search",
|
|
427
|
-
description:
|
|
432
|
+
description:
|
|
433
|
+
"Find every occurrence of a phrase in the merged transcript. Returns matches with their word IDs.",
|
|
428
434
|
inputSchema: {
|
|
429
435
|
type: "object",
|
|
430
436
|
properties: {
|
|
@@ -471,7 +477,8 @@ const TOOLS = [
|
|
|
471
477
|
},
|
|
472
478
|
{
|
|
473
479
|
name: "caption_set_template",
|
|
474
|
-
description:
|
|
480
|
+
description:
|
|
481
|
+
"Pick a caption template: classic, modern, minimal, bold, spotlight, boxed, neon, or colored.",
|
|
475
482
|
inputSchema: {
|
|
476
483
|
type: "object",
|
|
477
484
|
properties: {
|
|
@@ -488,13 +495,15 @@ const TOOLS = [
|
|
|
488
495
|
// ── motion graphics ─────────────────────────────────────────────
|
|
489
496
|
{
|
|
490
497
|
name: "motion_list",
|
|
491
|
-
description:
|
|
498
|
+
description:
|
|
499
|
+
"List every motion-graphic template (id, name, slots, defaults, aspectRatios). 19 templates ship today.",
|
|
492
500
|
inputSchema: { type: "object", properties: {} },
|
|
493
501
|
command: "motion.list",
|
|
494
502
|
},
|
|
495
503
|
{
|
|
496
504
|
name: "motion_themes",
|
|
497
|
-
description:
|
|
505
|
+
description:
|
|
506
|
+
"List every style-pack theme (color overrides). default, mr-beast, mkbhd, kurzgesagt, veritasium.",
|
|
498
507
|
inputSchema: { type: "object", properties: {} },
|
|
499
508
|
command: "motion.themes",
|
|
500
509
|
},
|
|
@@ -514,6 +523,34 @@ const TOOLS = [
|
|
|
514
523
|
},
|
|
515
524
|
command: "motion.generate",
|
|
516
525
|
},
|
|
526
|
+
{
|
|
527
|
+
name: "motion_render_html",
|
|
528
|
+
description:
|
|
529
|
+
"Render arbitrary HTML/CSS/JS to an MP4. Use this when the bundled motion-graphic templates don't fit the brief — Claude can author full animations and we'll render them. Pass either inline `html` or a `htmlPath`. The HTML loads in a Chromium offscreen window at the requested dimensions; we capture frames for durationMs starting after the first paint. Animations should auto-start on DOMContentLoaded (CSS animations, GSAP, Lottie via CDN, anything Chromium can render). Async — returns { jobId, outputPath }; poll job_wait for the final MP4.",
|
|
530
|
+
inputSchema: {
|
|
531
|
+
type: "object",
|
|
532
|
+
properties: {
|
|
533
|
+
html: {
|
|
534
|
+
type: "string",
|
|
535
|
+
description: "Inline HTML string (mutually exclusive with htmlPath).",
|
|
536
|
+
},
|
|
537
|
+
htmlPath: {
|
|
538
|
+
type: "string",
|
|
539
|
+
description: "Absolute path to .html file (mutually exclusive with html).",
|
|
540
|
+
},
|
|
541
|
+
aspectRatio: {
|
|
542
|
+
type: "string",
|
|
543
|
+
description: "16:9 (default) | 9:16 | 1:1. Ignored if width+height supplied.",
|
|
544
|
+
},
|
|
545
|
+
width: { type: "number" },
|
|
546
|
+
height: { type: "number" },
|
|
547
|
+
durationMs: { type: "number", description: "How long to capture. Default 2500." },
|
|
548
|
+
frameRate: { type: "number", description: "Default 30." },
|
|
549
|
+
outputName: { type: "string", description: "Optional filename stem." },
|
|
550
|
+
},
|
|
551
|
+
},
|
|
552
|
+
command: "motion.render-html",
|
|
553
|
+
},
|
|
517
554
|
|
|
518
555
|
// ── assets ──────────────────────────────────────────────────────
|
|
519
556
|
{
|
|
@@ -524,7 +561,8 @@ const TOOLS = [
|
|
|
524
561
|
},
|
|
525
562
|
{
|
|
526
563
|
name: "asset_list_fx",
|
|
527
|
-
description:
|
|
564
|
+
description:
|
|
565
|
+
"List every bundled FX video overlay (id, title, blendMode, defaults, absolute path).",
|
|
528
566
|
inputSchema: { type: "object", properties: {} },
|
|
529
567
|
command: "asset.list-fx",
|
|
530
568
|
},
|
|
@@ -532,7 +570,8 @@ const TOOLS = [
|
|
|
532
570
|
// ── project-aware LLM ──────────────────────────────────────────
|
|
533
571
|
{
|
|
534
572
|
name: "llm_generate_title",
|
|
535
|
-
description:
|
|
573
|
+
description:
|
|
574
|
+
"Generate a YouTube-ready title from the project's merged transcript using the bundled local LLM.",
|
|
536
575
|
inputSchema: {
|
|
537
576
|
type: "object",
|
|
538
577
|
properties: {
|
|
@@ -580,7 +619,10 @@ const TOOLS = [
|
|
|
580
619
|
properties: {
|
|
581
620
|
id: { type: "string" },
|
|
582
621
|
path: { type: "string" },
|
|
583
|
-
outputPath: {
|
|
622
|
+
outputPath: {
|
|
623
|
+
type: "string",
|
|
624
|
+
description: "Where to write the MP4. Default: recordings dir",
|
|
625
|
+
},
|
|
584
626
|
quality: { type: "string", description: "draft | standard | high | ultra. Default high" },
|
|
585
627
|
},
|
|
586
628
|
},
|
|
@@ -635,7 +677,10 @@ const TOOLS = [
|
|
|
635
677
|
type: "object",
|
|
636
678
|
properties: {
|
|
637
679
|
id: { type: "string", description: "Job id from the async tool's response" },
|
|
638
|
-
timeoutMs: {
|
|
680
|
+
timeoutMs: {
|
|
681
|
+
type: "number",
|
|
682
|
+
description: "Max wait. Default 60_000, hard-capped at 300_000",
|
|
683
|
+
},
|
|
639
684
|
},
|
|
640
685
|
required: ["id"],
|
|
641
686
|
},
|
|
@@ -674,7 +719,7 @@ const TOOLS = [
|
|
|
674
719
|
const server = new Server(
|
|
675
720
|
{
|
|
676
721
|
name: "pandastudio",
|
|
677
|
-
version: "1.9.
|
|
722
|
+
version: "1.9.5",
|
|
678
723
|
},
|
|
679
724
|
{
|
|
680
725
|
capabilities: {
|
|
@@ -712,7 +757,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
712
757
|
dispatchArgs = args.args ?? {};
|
|
713
758
|
if (typeof command !== "string" || !command.includes(".")) {
|
|
714
759
|
return {
|
|
715
|
-
content: [
|
|
760
|
+
content: [
|
|
761
|
+
{ type: "text", text: "pandastudio_call requires `command` of the form 'verb.noun'" },
|
|
762
|
+
],
|
|
716
763
|
isError: true,
|
|
717
764
|
};
|
|
718
765
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@writepanda/mcp",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.5",
|
|
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",
|