@ssemble/mcp-server 1.1.3 → 1.1.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssemble/mcp-server",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "mcpName": "com.ssemble/mcp-server",
5
5
  "description": "MCP server for Ssemble AI Clipping — create viral short-form videos from any AI assistant. Webhook callbacks for n8n, Zapier, and Make automation.",
6
6
  "type": "module",
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "com.ssemble/mcp-server",
4
4
  "title": "Ssemble AI Clipping",
5
5
  "description": "Create AI-powered short-form video clips from YouTube videos. Supports webhook callbacks.",
6
- "version": "1.1.3",
6
+ "version": "1.1.4",
7
7
  "websiteUrl": "https://www.ssemble.com/mcp",
8
8
  "repository": {
9
9
  "url": "https://github.com/ssembleinc/ssemble-mcp-server",
@@ -14,7 +14,7 @@
14
14
  "registryType": "npm",
15
15
  "registryBaseUrl": "https://registry.npmjs.org",
16
16
  "identifier": "@ssemble/mcp-server",
17
- "version": "1.1.3",
17
+ "version": "1.1.4",
18
18
  "transport": {
19
19
  "type": "stdio"
20
20
  },
@@ -7,6 +7,13 @@ const SUPPORTED_LANGUAGES = {
7
7
  pt: 'Portuguese', ru: 'Russian', ja: 'Japanese', ko: 'Korean', zh: 'Chinese',
8
8
  ar: 'Arabic', hi: 'Hindi', tr: 'Turkish', pl: 'Polish', nl: 'Dutch',
9
9
  sv: 'Swedish', no: 'Norwegian', da: 'Danish', fi: 'Finnish', cs: 'Czech',
10
+ vi: 'Vietnamese', id: 'Indonesian', fa: 'Persian (Farsi)', uk: 'Ukrainian',
11
+ af: 'Afrikaans', ca: 'Catalan', et: 'Estonian', fo: 'Faroese', gl: 'Galician',
12
+ is: 'Icelandic', ms: 'Malay', sq: 'Albanian', sw: 'Swahili', tl: 'Filipino (Tagalog)',
13
+ ro: 'Romanian', sk: 'Slovak', hr: 'Croatian', sl: 'Slovenian', hu: 'Hungarian',
14
+ lv: 'Latvian', lt: 'Lithuanian', bs: 'Bosnian', az: 'Azerbaijani',
15
+ bg: 'Bulgarian', mk: 'Macedonian', sr: 'Serbian', mt: 'Maltese', el: 'Greek',
16
+ ne: 'Nepali', mr: 'Marathi', ka: 'Georgian', hy: 'Armenian', ur: 'Urdu', he: 'Hebrew',
10
17
  };
11
18
 
12
19
  const PREFERRED_LENGTHS = {
@@ -21,7 +28,7 @@ const PREFERRED_LENGTHS = {
21
28
  const LAYOUTS = {
22
29
  auto: 'Automatic — AI detects best framing based on speaker position',
23
30
  fill: 'Fill — crop to fill 9:16 vertical frame',
24
- fit: 'Fit — fit entire frame with bars if needed',
31
+ fit: 'Fit — fit entire frame; the area around the video is a blurred copy of the video (default) or the template color when blurBackground=false',
25
32
  square: 'Square — 1:1 aspect ratio',
26
33
  };
27
34
 
@@ -52,6 +59,7 @@ export function registerResources(server) {
52
59
  text += `| \`${value}\` | ${desc} |\n`;
53
60
  }
54
61
  text += '\nDefault: `under60sec`';
62
+ text += '\n\nTo limit how many shorts a request creates, pass `maxShorts` (1-12) to `create_short`. Omit it to get up to 12.';
55
63
  return { contents: [{ uri: 'ssemble://preferred-lengths', mimeType: 'text/markdown', text }] };
56
64
  }
57
65
  );
@@ -2,9 +2,15 @@ import { z } from 'zod';
2
2
  import { formatCreateShortResponse, formatError } from '../utils/format.js';
3
3
  import { saveRequest } from '../utils/session-store.js';
4
4
 
5
+ // Mirrors the backend list (plugin-shortsmaker-node-backend/constants/apiConstants.js
6
+ // SUPPORTED_LANGUAGES) and the ssemble://supported-languages resource. Keep all three in sync.
5
7
  const SUPPORTED_LANGUAGES = [
6
8
  'en', 'es', 'fr', 'de', 'it', 'pt', 'ru', 'ja', 'ko', 'zh',
7
9
  'ar', 'hi', 'tr', 'pl', 'nl', 'sv', 'no', 'da', 'fi', 'cs',
10
+ 'vi', 'id', 'fa', 'uk',
11
+ 'af', 'ca', 'et', 'fo', 'gl', 'is', 'ms', 'sq', 'sw', 'tl',
12
+ 'ro', 'sk', 'hr', 'sl', 'hu', 'lv', 'lt', 'bs', 'az',
13
+ 'bg', 'mk', 'sr', 'mt', 'el', 'ne', 'mr', 'ka', 'hy', 'ur', 'he',
8
14
  ];
9
15
 
10
16
  const schema = {
@@ -14,6 +20,8 @@ const schema = {
14
20
  end: z.number().min(1).describe('End time in seconds (> start, max 1200s window)'),
15
21
  preferredLength: z.enum(['under30sec', 'under60sec', 'under90sec', 'under3min', 'under5min', 'under10min'])
16
22
  .default('under60sec').describe('Target clip duration').optional(),
23
+ maxShorts: z.number().int().min(1).max(12)
24
+ .describe('Maximum number of shorts to create (1-12). Keeps the highest-scoring clips and never pads, so short videos may return fewer. Omit to get up to 12.').optional(),
17
25
  language: z.enum(SUPPORTED_LANGUAGES).default('en').describe('Spoken language (ISO 639-1)').optional(),
18
26
  captionLanguage: z.enum(SUPPORTED_LANGUAGES).describe('Caption language if different from spoken').optional(),
19
27
  templateId: z.string().regex(/^[0-9a-fA-F]{24}$/).describe('Caption template ID from list_templates (24-char hex)').optional(),
@@ -29,6 +37,7 @@ const schema = {
29
37
  musicName: z.string().describe('Exact track name from list_music (case-sensitive)').optional(),
30
38
  musicVolume: z.number().min(0).max(100).default(10).describe('Music volume 0-100').optional(),
31
39
  layout: z.enum(['auto', 'fill', 'fit', 'square']).default('auto').describe('Video framing layout').optional(),
40
+ blurBackground: z.boolean().describe('Background behind the clip when the source does not fill the 9:16 canvas (mainly layout=fit): true = blurred copy of the video, false = solid template color. Omit to use the account\'s saved editor preference (default: blurred).').optional(),
32
41
  webhookUrl: z.string().url().describe('Optional webhook URL for completion/failure notifications. Receives a POST with results when processing finishes.').optional(),
33
42
  };
34
43