@kolbo/mcp 1.5.3 → 1.5.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolbo/mcp",
3
- "version": "1.5.3",
3
+ "version": "1.5.5",
4
4
  "description": "Kolbo AI MCP Server - Generate images, videos, music, speech, and sound effects from Claude Code",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -90,10 +90,10 @@ function registerGenerateTools(server, client) {
90
90
  // ─── generate_creative_director ─────────────────────────────
91
91
  server.tool(
92
92
  'generate_creative_director',
93
- 'Generate a multi-scene coordinated set from ONE creative brief. Use this INSTEAD of calling generate_image/generate_video multiple times when the user wants a storyboard, multi-scene ad, product showcase, or any set of related outputs that should share visual language. Produces 1–8 scenes in a single request with consistent style. Supports image mode and video mode (`workflow_type`). Visual DNA and moodboard references keep character/style consistent across every scene.',
93
+ 'Generate 2–8 related images or videos as one coherent set from a single creative brief. Use scene_count (NOT num_images) to set the number of scenes (1–8, default 4). Use this when the user gives a general brief ("make 4 product shots", "create a storyboard") and you are planning the scenes it handles style consistency and runs scenes in parallel. If the user explicitly provides separate prompts for each image, use parallel generate_image calls instead. Supports image and video modes (workflow_type). Visual DNA and moodboard references keep character/style consistent across every scene.',
94
94
  {
95
95
  prompt: z.string().describe('Creative brief or concept describing the full set of scenes to generate'),
96
- scene_count: z.number().optional().describe('Number of scenes to generate, 1–8. Default: 4'),
96
+ scene_count: z.number().optional().describe('Number of scenes/images to generate, 1–8. Default: 4. Use this — NOT num_images — to control how many outputs are created.'),
97
97
  model: z.string().optional().describe('Model identifier applied to every scene. Omit for Smart Select.'),
98
98
  aspect_ratio: z.string().optional().describe('Aspect ratio applied to every scene (e.g., "1:1", "16:9", "9:16"). Default: "1:1"'),
99
99
  workflow_type: z.string().optional().describe('"image" (default) or "video"'),
@@ -17,15 +17,25 @@ function registerModelTools(server, client) {
17
17
  const path = type ? `/v1/models?type=${encodeURIComponent(type)}` : '/v1/models';
18
18
  const result = await client.get(path);
19
19
 
20
- // Format for readability
21
- const summary = result.models.map(m =>
22
- `${m.identifier} (${m.name}) - ${m.credit} credits${m.recommended ? ' [RECOMMENDED]' : ''}${m.new_model ? ' [NEW]' : ''}`
23
- ).join('\n');
20
+ // Split into auto-selectable (has summary) and named-only (no summary)
21
+ const withSummary = result.models.filter(m => m.summary && m.summary.trim() !== '');
22
+ const withoutSummary = result.models.filter(m => !m.summary || m.summary.trim() === '');
23
+
24
+ const formatModel = m =>
25
+ `${m.identifier} (${m.name}) - ${m.credit} credits${m.recommended ? ' [RECOMMENDED]' : ''}${m.new_model ? ' [NEW]' : ''}${m.summary ? ` — ${m.summary}` : ''}`;
26
+
27
+ const sections = [];
28
+ if (withSummary.length > 0) {
29
+ sections.push(`Auto-selectable models (${withSummary.length}) — safe to pick based on quality + cost:\n${withSummary.map(formatModel).join('\n')}`);
30
+ }
31
+ if (withoutSummary.length > 0) {
32
+ sections.push(`Named-only models (${withoutSummary.length}) — only use if the user explicitly requests by name:\n${withoutSummary.map(formatModel).join('\n')}`);
33
+ }
24
34
 
25
35
  return {
26
36
  content: [{
27
37
  type: 'text',
28
- text: `Available models (${result.count}):\n\n${summary}\n\nUse the "identifier" value as the "model" parameter in generate tools.`
38
+ text: `Available models (${result.count}):\n\n${sections.join('\n\n')}\n\nUse the "identifier" value as the "model" parameter in generate tools.`
29
39
  }]
30
40
  };
31
41
  }