ayphic-mcp-server 1.2.0 → 1.2.1

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/index.js +26 -34
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -375,13 +375,13 @@ const MCP_TOOLS = [
375
375
  },
376
376
  {
377
377
  name: 'get_transcript',
378
- description: 'REQUIRED FIRST STEP FOR VIDEO CAPTIONS: Extract the authentic speech transcript with verbatim word-level timestamps (seconds) from the video/audio clip. When the user asks to add captions/subtitles to a video, you MUST call this tool first to obtain the authentic spoken words and timings from the video before calling captions.',
378
+ description: 'Inspect speech text and retrieve authentic word-level timestamps (seconds) from video/audio. Use this tool to read what was spoken, inspect timestamps, find filler words (ums, ahs) to cut with split_item, or detect pauses for silence removal. (NOTE: For adding captions directly to the timeline, call `captions` directly).',
379
379
  inputSchema: {
380
380
  type: 'object',
381
381
  properties: {
382
382
  itemId: {
383
383
  type: 'string',
384
- description: 'Optional ID of the clip to transcribe (e.g. "clip2"). If omitted, automatically targets the main video.'
384
+ description: 'Optional ID of the clip to inspect (e.g. "clip2"). If omitted, automatically targets the main video on track V1.'
385
385
  },
386
386
  mediaUrl: {
387
387
  type: 'string',
@@ -392,23 +392,35 @@ const MCP_TOOLS = [
392
392
  },
393
393
  {
394
394
  name: 'captions',
395
- description: 'Add, style, or remove animated captions/subtitles across the video timeline. DIRECT DATA TOOL: When adding captions for a video clip, you MUST first call `get_transcript` to get the real speech timestamps, then pass the `transcription` object directly here. You can also customize `template` ("beast", "hustle", "pop", "soft-ai", "karaoke"), or provide custom Remotion JSX `code`, or use `action: "delete"` to remove captions.',
395
+ description: 'DIRECT CAPTIONS TOOL: Add, style, generate, or remove animated captions/subtitles across the video timeline in one single step. Call this tool directly (e.g. `template: "beast"` or `template: "hustle"`). It automatically extracts audio from the timeline/clip, transcribes speech with word-level timestamps, and places stylized captions on track C1. Presets: "beast", "hustle", "viral-stack", "grape", "poppin", "soft-ai", "gaming-stream", "simple-one-word", "pop", "karaoke", "podcast", "custom". Use `action: "delete"` to remove all captions.',
396
396
  inputSchema: {
397
397
  type: 'object',
398
398
  properties: {
399
- transcription: {
400
- type: 'object',
401
- description: 'The authentic transcription object returned from get_transcript containing { text, words, segments, lines, captions }. Pass this directly from get_transcript.'
402
- },
403
399
  template: {
404
400
  type: 'string',
405
- enum: ['viral-stack', 'viral-stacked', 'stacked', 'beast', 'hustle', 'pop', 'soft-ai', 'gaming-stream', 'karaoke', 'grape', 'poppin', 'kinetic-01', 'kinetic-02', 'aarit', 'podcast'],
406
- description: 'Visual subtitle preset theme. Recommended: "viral-stack" (stacked kinetic typography with dynamic sizing and slide-up), "beast" (MrBeast style bold uppercase highlight), "hustle" (green glow), "pop" (spring bounce).'
401
+ enum: ['viral-stack', 'viral-stacked', 'stacked', 'beast', 'hustle', 'pop', 'soft-ai', 'gaming-stream', 'karaoke', 'grape', 'poppin', 'kinetic-01', 'kinetic-02', 'aarit', 'podcast', 'custom'],
402
+ description: 'Visual subtitle preset theme. Recommended: "beast" (MrBeast bold uppercase highlight), "hustle" (green glow), "viral-stack" (stacked kinetic typography), "pop" (spring bounce).'
403
+ },
404
+ itemId: {
405
+ type: 'string',
406
+ description: 'Optional ID of specific clip to transcribe. If omitted, transcribes the main video on track V1.'
407
+ },
408
+ trackId: {
409
+ type: 'string',
410
+ description: 'Optional track ID (e.g. "V1"). Default is "V1".'
411
+ },
412
+ text: {
413
+ type: 'string',
414
+ description: 'Optional explicit custom quote text if provided by user in prompt. If transcribing spoken video, leave blank so audio is automatically transcribed.'
415
+ },
416
+ transcription: {
417
+ type: 'object',
418
+ description: 'Optional direct transcription object if already available containing { text, words, segments }.'
407
419
  },
408
420
  action: {
409
421
  type: 'string',
410
422
  enum: ['generate', 'delete', 'remove', 'clear'],
411
- description: 'Action to perform. Use "generate" to add/update captions, or "delete"/"remove"/"clear" to remove all captions from the timeline.'
423
+ description: 'Action to perform. Default is "generate". Use "delete"/"remove"/"clear" to remove all captions from the timeline.'
412
424
  },
413
425
  code: {
414
426
  type: 'string',
@@ -417,12 +429,12 @@ const MCP_TOOLS = [
417
429
  words: {
418
430
  type: 'array',
419
431
  items: { type: 'object' },
420
- description: 'Array of word-level timing objects [{ text: string, start: number, end: number }] from get_transcript.'
432
+ description: 'Optional array of word-level timing objects [{ text: string, start: number, end: number }].'
421
433
  },
422
434
  captions: {
423
435
  type: 'array',
424
436
  items: { type: 'object' },
425
- description: 'Array of timed caption segments [{ text: string, start: number, end: number, words: array }] from get_transcript.'
437
+ description: 'Optional array of timed caption segments [{ text: string, start: number, end: number, words: array }].'
426
438
  },
427
439
  fontSize: {
428
440
  type: ['number', 'string'],
@@ -622,33 +634,13 @@ async function executeAyphicTool(toolName, params) {
622
634
  };
623
635
  }
624
636
 
625
- // For get_timeline, return the structured timeline data
626
- if (resolvedToolName === 'get_timeline' || resolvedToolName === 'getTimeline') {
627
- return {
628
- isError: false,
629
- content: [
630
- {
631
- type: 'text',
632
- text: JSON.stringify(data, null, 2)
633
- }
634
- ]
635
- };
636
- }
637
-
638
- // For all action/editing tools, return concise summary
639
- const summaryMsg = data.message || `Successfully executed ${cleanName}`;
640
- const resultObj = {
641
- success: true,
642
- message: summaryMsg,
643
- ...(data.element ? { element: data.element } : {})
644
- };
645
-
637
+ // Return the full structured result from data (including transcripts, bounding boxes, overlaps, elements, etc.)
646
638
  return {
647
639
  isError: false,
648
640
  content: [
649
641
  {
650
642
  type: 'text',
651
- text: JSON.stringify(resultObj, null, 2)
643
+ text: JSON.stringify(data, null, 2)
652
644
  }
653
645
  ]
654
646
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ayphic-mcp-server",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Model Context Protocol (MCP) Server for Ayphic AI Video Editor",
5
5
  "main": "index.js",
6
6
  "type": "module",