@writepanda/mcp 1.24.0 → 1.26.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 +25 -3
  2. package/package.json +1 -1
package/bin/server.mjs CHANGED
@@ -369,10 +369,32 @@ const TOOLS = [
369
369
  {
370
370
  name: "project_list",
371
371
  description:
372
- "List every project on disk (id, name, path, modifiedAt, clipCount, revision). Returns the project UUID pass it as `id` to most other tools.",
373
- inputSchema: { type: "object", properties: {} },
372
+ "List projects in the active workspace (id, name, path, modifiedAt, clipCount, revision, workspaceId). Pass `allWorkspaces: true` to see across every workspace on the machine. Each row carries its workspaceId; the top-level response also returns currentWorkspaceId so you can detect cross-workspace mismatches.",
373
+ inputSchema: {
374
+ type: "object",
375
+ properties: {
376
+ allWorkspaces: {
377
+ type: "boolean",
378
+ description:
379
+ "When true, list across every workspace (each row tagged with workspaceId). Default false — current workspace only.",
380
+ },
381
+ },
382
+ },
374
383
  command: "project.list",
375
384
  },
385
+ {
386
+ name: "project_locate",
387
+ description:
388
+ "Look up a project's owning workspace WITHOUT reading the project body. Returns { id, filePath, workspaceId, workspaceName, isInActiveWorkspace }. **Cheap pre-flight you SHOULD call when given a project id with no other context** — before any edit, export, or publish. If isInActiveWorkspace is false, surface the mismatch to the user before proceeding (the YouTube account + Replicate key are workspace-scoped, so publishing to YouTube on the wrong workspace publishes to the wrong client's channel).",
389
+ inputSchema: {
390
+ type: "object",
391
+ properties: {
392
+ id: { type: "string", description: "Project UUID." },
393
+ },
394
+ required: ["id"],
395
+ },
396
+ command: "project.locate",
397
+ },
376
398
  {
377
399
  name: "project_current",
378
400
  description:
@@ -396,7 +418,7 @@ const TOOLS = [
396
418
  {
397
419
  name: "project_read",
398
420
  description:
399
- "Read a project's full JSON. Returns { path, project, clipStates }. `clipStates` is a per-clip summary: { clipId, mediaPath, durationMs, transcribed, wordCount, audioCleaned, cleanedAudioPath? } — use it to decide whether to call transcript_transcribe or audio_clean before editing. Pass `project.revision` back as `expectedRevision` on subsequent writes for conflict-safe edits. **Performance tip:** pass `includeTranscript: false` after your first read to drop the per-clip transcript words from the response — they're typically 600+ KB on a 5-minute recording and most agent flows don't need them after pacing is done. clipStates always tells you the transcribed/wordCount status either way.",
421
+ "Read a project's full JSON. Returns { path, project, clipStates, workspaceId, workspaceName, isInActiveWorkspace }. `clipStates` is a per-clip summary: { clipId, mediaPath, durationMs, transcribed, wordCount, audioCleaned, cleanedAudioPath? } — use it to decide whether to call transcript_transcribe or audio_clean before editing. **Workspace fields:** every read includes the project's owning workspace; if `isInActiveWorkspace` is false, the YouTube account and Replicate key in scope are NOT the ones that own this project — surface the mismatch to the user before any export or publish. Pass `project.revision` back as `expectedRevision` on subsequent writes for conflict-safe edits. **Performance tip:** pass `includeTranscript: false` after your first read to drop the per-clip transcript words from the response — they're typically 600+ KB on a 5-minute recording and most agent flows don't need them after pacing is done. clipStates always tells you the transcribed/wordCount status either way.",
400
422
  inputSchema: {
401
423
  type: "object",
402
424
  properties: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@writepanda/mcp",
3
- "version": "1.24.0",
3
+ "version": "1.26.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",