@kolbo/mcp 1.5.5 → 1.5.6

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.5",
3
+ "version": "1.5.6",
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": {
@@ -15,7 +15,7 @@ function registerGenerateTools(server, client) {
15
15
  'Generate image(s) from a text prompt using Kolbo AI. Supports Visual DNA profiles (for character/style/product consistency), moodboards (for style direction), reference images (for composition guidance), batch generation (num_images), and web-search grounding. For EDITING an existing image, use generate_image_edit instead. For a coordinated multi-scene set (storyboard, ad campaign), use generate_creative_director. Returns the final image URL(s) when complete.',
16
16
  {
17
17
  prompt: z.string().describe('Text description of the image to generate'),
18
- model: z.string().optional().describe('Model identifier. Use list_models type="image" to see options. Omit for Smart Select.'),
18
+ model: z.string().optional().describe('Model identifier. Use list_models type="text_to_img" to see options. Omit for Smart Select.'),
19
19
  aspect_ratio: z.string().optional().describe('Aspect ratio (e.g., "1:1", "16:9", "9:16"). Default: "1:1"'),
20
20
  enhance_prompt: z.boolean().optional().describe('Enhance the prompt for better results. Default: true'),
21
21
  num_images: z.number().optional().describe('Number of images to generate in one call. Default: 1'),
@@ -54,7 +54,7 @@ function registerGenerateTools(server, client) {
54
54
  'Edit or transform an existing image using AI. Provide the source image URL(s) in `source_images` and describe the edit in `prompt` (e.g., "remove the background", "change the car color to red", "add sunglasses to the person"). Supports Visual DNA profiles and moodboards for style-consistent edits. For creating a brand new image from scratch, use generate_image. Returns the edited image URL(s) when complete.',
55
55
  {
56
56
  prompt: z.string().describe('Description of the edit to apply (e.g., "remove the background", "change the sky to sunset")'),
57
- model: z.string().optional().describe('Model identifier. Use list_models type="image_edit" to see options. Omit for Smart Select.'),
57
+ model: z.string().optional().describe('Model identifier. Use list_models type="image_editing" to see options. Omit for Smart Select.'),
58
58
  source_images: z.array(z.string()).describe('Array of source image URLs to edit. Typically one, but some models accept multiple for compositing.'),
59
59
  aspect_ratio: z.string().optional().describe('Output aspect ratio (e.g., "1:1", "16:9", "9:16"). Default: "1:1"'),
60
60
  enhance_prompt: z.boolean().optional().describe('Enhance the prompt for better results. Default: true'),
@@ -144,7 +144,7 @@ function registerGenerateTools(server, client) {
144
144
  'Generate a video from a text prompt using Kolbo AI. For animating an existing still image into motion, use generate_video_from_image instead. For a coordinated multi-scene video campaign, use generate_creative_director with workflow_type="video". Supports Visual DNA profiles (for character consistency) and reference images (for style guidance). Returns the final video URL when complete.',
145
145
  {
146
146
  prompt: z.string().describe('Text description of the video to generate'),
147
- model: z.string().optional().describe('Model identifier. Use list_models type="video" to see options. Check supported_durations and supported_aspect_ratios.'),
147
+ model: z.string().optional().describe('Model identifier. Use list_models type="text_to_video" to see options. Check supported_durations and supported_aspect_ratios.'),
148
148
  aspect_ratio: z.string().optional().describe('Aspect ratio (e.g., "16:9", "9:16", "1:1"). Default: "16:9"'),
149
149
  duration: z.number().optional().describe('Duration in seconds. Must be a value the chosen model supports — check supported_durations from list_models. Default: 5'),
150
150
  enhance_prompt: z.boolean().optional().describe('Enhance the prompt. Default: true'),
@@ -183,7 +183,7 @@ function registerGenerateTools(server, client) {
183
183
  {
184
184
  image_url: z.string().describe('URL of the source image to animate'),
185
185
  prompt: z.string().describe('Text description of the desired MOTION (e.g., "camera slowly pans right while the character walks forward")'),
186
- model: z.string().optional().describe('Model identifier. Use list_models type="video_from_image" to see options.'),
186
+ model: z.string().optional().describe('Model identifier. Use list_models type="img_to_video" to see options.'),
187
187
  aspect_ratio: z.string().optional().describe('Output aspect ratio (e.g., "16:9", "9:16", "1:1"). Default: "16:9"'),
188
188
  duration: z.number().optional().describe('Duration in seconds. Must be a value the chosen model supports. Default: 5'),
189
189
  enhance_prompt: z.boolean().optional().describe('Enhance the motion prompt. Default: true'),
@@ -219,7 +219,7 @@ function registerGenerateTools(server, client) {
219
219
  'Generate music from a text description using Kolbo AI. Supports instrumental mode, custom lyrics, style direction, and vocal gender. Default model is Suno. Returns the final audio URL when complete.',
220
220
  {
221
221
  prompt: z.string().describe('Text description of the music to generate (e.g., "upbeat electronic dance track with synthesizers")'),
222
- model: z.string().optional().describe('Model identifier. Use list_models type="music" to see options. Omit for Suno (default).'),
222
+ model: z.string().optional().describe('Model identifier. Use list_models type="music_gen" to see options. Omit for Suno (default).'),
223
223
  style: z.string().optional().describe('Music style / genre (e.g., "pop", "rock", "lo-fi", "electronic", "jazz")'),
224
224
  instrumental: z.boolean().optional().describe('Generate instrumental only, no vocals. Default: false'),
225
225
  lyrics: z.string().optional().describe('Custom lyrics for the song. If omitted, lyrics are generated automatically from the prompt unless instrumental is true.'),
@@ -257,7 +257,7 @@ function registerGenerateTools(server, client) {
257
257
  {
258
258
  text: z.string().describe('The text to convert to speech'),
259
259
  voice: z.string().optional().describe('Voice ID (from list_voices) or voice display name (e.g., "Rachel", "Adam"). Default: "Rachel"'),
260
- model: z.string().optional().describe('Model identifier. Use list_models type="speech" to see options. Default: eleven_v3'),
260
+ model: z.string().optional().describe('Model identifier. Use list_models type="text_to_speech" to see options. Default: eleven_v3'),
261
261
  language: z.string().optional().describe('Language code (e.g., "en-US", "he-IL", "es-ES"). Default: "en-US"')
262
262
  },
263
263
  async ({ text, voice, model, language }) => {
@@ -289,7 +289,7 @@ function registerGenerateTools(server, client) {
289
289
  'Generate sound effects (not music, not speech) from a text description using Kolbo AI. Use this for ambient sounds, foley, impacts, atmospheres, UI sounds, etc. For music use generate_music; for voice use generate_speech. Returns the final audio URL when complete.',
290
290
  {
291
291
  prompt: z.string().describe('Text description of the sound effect (e.g., "thunder clap with rain", "door creaking open", "futuristic UI beep")'),
292
- model: z.string().optional().describe('Model identifier. Use list_models type="sound" to see options. Default: elevenlabs-sound-effects-v1'),
292
+ model: z.string().optional().describe('Model identifier. Use list_models type="text_to_sound" to see options. Default: elevenlabs-sound-effects-v1'),
293
293
  duration: z.number().optional().describe('Duration in seconds. Omit for automatic duration.')
294
294
  },
295
295
  async ({ prompt, model, duration }) => {
@@ -380,7 +380,7 @@ function registerGenerateTools(server, client) {
380
380
  'Generate a video from reference elements (images and/or videos) + a text prompt. Use when the user wants to animate specific uploaded/referenced assets — e.g. "animate this product", "put these 3 characters into a scene". Supports Visual DNA for character consistency. For text-only → video use generate_video instead. For animating a single still image use generate_video_from_image. Returns the final video URL when complete.',
381
381
  {
382
382
  prompt: z.string().describe('Text description of the desired video / animation'),
383
- model: z.string().optional().describe('Model identifier. Use list_models type="video" to see options. Omit for Smart Select.'),
383
+ model: z.string().optional().describe('Model identifier. Use list_models type="elements" to see options (Seedance 2, Kling O3 Reference, Grok Imagine, Veo 3.1, etc.). Omit for Smart Select.'),
384
384
  reference_images: z.array(z.string()).optional().describe('Array of public image URLs used as reference elements (product shots, character references, etc.). URL mode.'),
385
385
  files: z.array(z.string()).optional().describe('Array of URLs or absolute local paths — alternative to reference_images. Use this when you have local files to upload. Each item can be a URL OR a local path.'),
386
386
  duration: z.number().optional().describe('Duration in seconds. Default: 5'),
@@ -447,7 +447,7 @@ function registerGenerateTools(server, client) {
447
447
  first_frame: z.string().optional().describe('URL or absolute local path to the first frame (file mode — alternative to first_frame_url)'),
448
448
  last_frame: z.string().optional().describe('URL or absolute local path to the last frame (file mode — alternative to last_frame_url)'),
449
449
  prompt: z.string().optional().describe('Optional description of the desired motion between the two frames (e.g. "smooth camera dolly in")'),
450
- model: z.string().optional().describe('Model identifier. Use list_models type="video_from_image" to see options. Omit for Smart Select.'),
450
+ model: z.string().optional().describe('Model identifier. Use list_models type="firstlastgenerations" to see options. Omit for Smart Select.'),
451
451
  duration: z.number().optional().describe('Duration in seconds. Default: 5'),
452
452
  aspect_ratio: z.string().optional().describe('Aspect ratio (auto-detected from first frame if not provided). Default: "16:9"'),
453
453
  enhance_prompt: z.boolean().optional().describe('Enhance the prompt. Default: true'),
@@ -512,7 +512,7 @@ function registerGenerateTools(server, client) {
512
512
  source: z.string().describe('URL or absolute local path to the source image or video (the face to animate)'),
513
513
  audio: z.string().describe('URL or absolute local path to the audio track (the voice to sync to)'),
514
514
  text_prompt: z.string().optional().describe('Optional text prompt (for performance-capable models)'),
515
- model: z.string().optional().describe('Model identifier. Use list_models type="lipsync" to see options. Omit for Smart Select.'),
515
+ model: z.string().optional().describe('Model identifier. Use list_models type="lipsync-image" or type="lipsync-video" to see options. Omit for Smart Select.'),
516
516
  bounding_box_target: z.array(z.number()).optional().describe('Optional bounding box [x, y, w, h] for multi-face inputs (Hedra Character3 style). Leave empty for single-face.')
517
517
  },
518
518
  async ({ source, audio, text_prompt, model, bounding_box_target }) => {
@@ -581,7 +581,7 @@ function registerGenerateTools(server, client) {
581
581
  {
582
582
  source_video: z.string().describe('URL or absolute local path to the source video to restyle'),
583
583
  prompt: z.string().describe('Text description of the desired restyle / transformation'),
584
- model: z.string().optional().describe('Model identifier. Omit for Smart Select.'),
584
+ model: z.string().optional().describe('Model identifier. Use list_models type="video_to_video" to see options. Omit for Smart Select.'),
585
585
  aspect_ratio: z.string().optional().describe('Output aspect ratio. Default: matches source'),
586
586
  duration: z.number().optional().describe('Duration in seconds (default: matches source)'),
587
587
  enhance_prompt: z.boolean().optional().describe('Enhance the prompt. Default: true'),
@@ -679,7 +679,7 @@ function registerGenerateTools(server, client) {
679
679
  reference_images: z.array(z.string()).optional().describe('Array of public image URLs. 1 image → single mode, 2+ → multi mode.'),
680
680
  mode: z.string().optional().describe('Explicitly set mode: "text" | "single" | "multi". Auto-detected from reference_images if omitted.'),
681
681
  texture_prompt: z.string().optional().describe('Optional prompt to guide texture generation'),
682
- model: z.string().optional().describe('Model identifier. Use list_models type="three_d" to see options.'),
682
+ model: z.string().optional().describe('Model identifier. Use list_models type="three_d" to see all 3D options, or filter by sub-type: "3d_text_to_model", "3d_image_to_model", "3d_multi_image_to_model", "3d_world".'),
683
683
  topology: z.string().optional().describe('Topology preset (optional, model-specific)'),
684
684
  target_polycount: z.number().optional().describe('Target polygon count (optional, model-specific)'),
685
685
  enable_tpose: z.boolean().optional().describe('Force T-pose for character models (optional)'),
@@ -11,7 +11,7 @@ function registerModelTools(server, client) {
11
11
  'list_models',
12
12
  'List available AI models on Kolbo. Filter by type to find models for a specific generation type.',
13
13
  {
14
- type: z.string().optional().describe('Filter by type: "image", "image_edit", "video", "video_from_image", "video_from_video", "music", "speech", "sound", "chat", "lipsync", "three_d", "elements", "first_last_frame", "transcription". Omit for all models.')
14
+ type: z.string().optional().describe('Filter by DB type name: "text_to_img", "image_editing", "text_to_video", "img_to_video", "draw_to_video", "video_to_video", "elements", "firstlastgenerations", "lipsync-image", "lipsync-video", "music_gen", "text_to_speech", "text_to_sound", "stt", "text". Legacy aliases also accepted: "image", "image_edit", "video", "video_from_image", "video_from_video", "music", "speech", "sound", "chat", "lipsync" (both lipsync types), "three_d" (all 3D types), "first_last_frame", "transcription". Omit for all models.')
15
15
  },
16
16
  async ({ type }) => {
17
17
  const path = type ? `/v1/models?type=${encodeURIComponent(type)}` : '/v1/models';