@kolbo/mcp 1.67.0 → 1.68.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.
package/README.md CHANGED
@@ -128,7 +128,7 @@ Without the optional skill, the config block alone already exposes every tool
128
128
  | `generate_lipsync` | Source image/video + audio → lipsynced video (Sync-3 adds active-speaker selection, emotion, model mode, temperature) |
129
129
  | `generate_creative_director` | One brief → N coordinated scenes (image or video) |
130
130
  | `generate_music` | Text (+ optional lyrics) → song. Style, title, negative tags, length, and Suno fine-controls (style weight, weirdness, audio weight, persona / singing voice) |
131
- | `generate_speech` | Text + voice → spoken audio. Full expressive/style control: free-form voice direction (Google/Gemini), preset styles + emotions (DeepDub / MiniMax), speed, and per-provider voice settings (ElevenLabs stability/similarity/style, DeepDub accent/variance/tempo, MiniMax pitch/volume/intensity/timbre) |
131
+ | `generate_speech` | Text + voice → spoken audio. Full expressive/style control: Google/Gemini named voice-direction presets (`style_instructions_preset_id`: warm/dramatic/whisper/…) or free-form `style_instructions`, preset styles + emotions (DeepDub / MiniMax / Cartesia), speed, accent/`language`, and per-provider voice settings (ElevenLabs similarity/style, DeepDub accent/variance/tempo, MiniMax pitch/volume/intensity/timbre). Status returns the same fields for reuse. |
132
132
  | `generate_sound` | Text → sound effect. Duration, prompt influence, and per-provider controls (Stable Audio guidance, Kie loop/tempo/key, Seed-Audio voice/speed/volume/pitch + reference audio/image) |
133
133
  | `generate_3d` | Text or reference images → 3D model (GLB/FBX/OBJ/USDZ) |
134
134
  | `transcribe_audio` | Audio/video URL or file → text + SRT subtitles. Language, speaker diarization, audio-event tagging, and SRT formatting (words/line, lines/subtitle, caption stretch) |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolbo/mcp",
3
- "version": "1.67.0",
3
+ "version": "1.68.0",
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": {
package/skill/SKILL.md CHANGED
@@ -103,7 +103,7 @@ Each `references/models/*.md` mirrors the matching skill prompt in `kolbo-api/sr
103
103
  | `generate_first_last_frame` | Keyframe interpolation between two frames. |
104
104
  | `generate_lipsync` | Lipsync audio to an image or video face. |
105
105
  | `generate_music` | Music generation (Suno + variants). |
106
- | `generate_speech` | TTS. Use `list_voices` to pick a voice. |
106
+ | `generate_speech` | TTS. Use `list_voices` to pick a voice. Pass provider controls: Google/Gemini `style_instructions_preset_id` (warm/dramatic/whisper/excited/calm/cheerful/serious/storyteller/sad/intimate/british/commercial) or free-form `style_instructions` + `language` as Accent; DeepDub/MiniMax/Cartesia `selected_style`/`emotion`; `speaking_speed`; ElevenLabs `similarity_boost`/`style`; MiniMax `minimax_pitch`/`minimax_vol`/…. |
107
107
  | `generate_sound` | Sound effects. |
108
108
  | `generate_3d` | 3D models from text / single image / multi-view. Returns GLB/FBX/OBJ/USDZ. |
109
109
 
@@ -660,12 +660,20 @@ function registerGenerateTools(server, client, options = {}) {
660
660
  text: z.string().describe('The text to convert to speech'),
661
661
  voice: z.string().optional().describe('Voice ID or display name — MUST come from a `list_voices` result, never constructed. Google/Gemini ids in particular are not validated provider-side: an id that is not in the catalog is silently mapped to another voice (or a default one) and the audio comes back in a voice nobody asked for. Do not pattern-match a locale onto an id you saw for another language. Default: "Rachel"'),
662
662
  model: z.string().optional().describe('Model identifier. Use list_models type="text_to_speech" to see options. Default: eleven_v3'),
663
- language: z.string().optional().describe('Language code (e.g., "en-US", "he-IL", "es-ES"). Default: "en-US"'),
663
+ language: z.string().optional().describe('Language / accent code (e.g., "en-US", "he-IL", "es-ES"). For Google/Gemini voices this is the Accent control (does not translate the text). Default: "en-US"'),
664
664
  // ── Expressive style / emotion (provider-specific) ──
665
- style_instructions: z.string().optional().describe('Google/Gemini voices ONLY. Free-form natural-language voice direction, e.g. "whisper conspiratorially, slightly amused" or "excited sports announcer". Max 500 chars. Ignored by other providers.'),
666
- selected_style: z.string().optional().describe('DeepDub & MiniMax voices. Preset expressive style/emotion. DeepDub supports: reading, conversational, angry, breathy, panic, amused, sad, whisper, singing, shout, scream, mumbling, excited. Ignored by other providers.'),
667
- emotion: z.string().optional().describe('MiniMax voices. Emotion: happy, sad, angry, fearful, disgusted, surprised, calm, fluent, whisper.'),
668
- speaking_speed: z.number().optional().describe('Speech speed 0.5 (slow) – 2.0 (fast). Default 1.0. Applies to ElevenLabs / OpenAI / Google.'),
665
+ // Google/Gemini: prefer a named preset id from the Kolbo UI picker; free-form
666
+ // style_instructions is the escape hatch for custom direction.
667
+ style_instructions_preset_id: z.enum([
668
+ 'warm', 'dramatic', 'whisper', 'excited', 'calm', 'cheerful',
669
+ 'serious', 'storyteller', 'sad', 'intimate', 'british', 'commercial',
670
+ 'custom', 'none',
671
+ ]).optional().describe('Google/Gemini voices ONLY. Named voice-direction preset from the Kolbo TTS picker (warm, dramatic, whisper, excited, calm, cheerful, serious, storyteller, sad, intimate, british, commercial). Use "custom" with style_instructions for free-form direction, or "none" for default delivery. Preferred over raw style_instructions when a preset fits — the API expands it to the English directive fal receives and stores the label for history/reuse.'),
672
+ style_instructions: z.string().optional().describe('Google/Gemini voices ONLY. Free-form natural-language voice direction, e.g. "whisper conspiratorially, slightly amused" or "excited sports announcer". Max 500 chars. When set without a preset_id, treated as custom. Ignored by other providers.'),
673
+ style_instructions_label: z.string().optional().describe('Google/Gemini voices ONLY. Friendly label stored on the generation for history cards (defaults to the preset name or the custom text). Usually omit — the API fills it.'),
674
+ selected_style: z.string().optional().describe('DeepDub, MiniMax & Cartesia voices. Preset expressive style/emotion. DeepDub: reading, conversational, angry, breathy, panic, amused, sad, whisper, singing, shout, scream, mumbling, excited. MiniMax/Cartesia: happy, sad, angry, fearful, disgusted, surprised, calm, fluent, whisper (or provider emotion names). Ignored by other providers.'),
675
+ emotion: z.string().optional().describe('MiniMax / Cartesia voices. Emotion: happy, sad, angry, fearful, disgusted, surprised, calm, fluent, whisper. Prefer this OR selected_style (both map to the same delivery control).'),
676
+ speaking_speed: z.number().optional().describe('Speech speed 0.5 (slow) – 2.0 (fast); Cartesia clamped 0.6–1.5. Default 1.0. Applies to ElevenLabs / OpenAI / Google / MiniMax / Cartesia / DeepDub (as tempo when tempo omitted).'),
669
677
  // ── ElevenLabs voice settings ──
670
678
  similarity_boost: z.number().optional().describe('ElevenLabs voice similarity, 0–1. Default 0.75. Higher hews closer to the original voice.'),
671
679
  style: z.number().optional().describe('ElevenLabs style exaggeration, 0–1. Default 0.5. Higher = more expressive/dramatic.'),
@@ -689,7 +697,7 @@ function registerGenerateTools(server, client, options = {}) {
689
697
  project_id: projectIdField,
690
698
  session_id: sessionIdField
691
699
  },
692
- async ({ text, voice, model, language, style_instructions, selected_style, emotion, speaking_speed, similarity_boost, style, use_speaker_boost, variance, tempo, promptBoost, seed, accentControl, voiceTitle, minimax_pitch, minimax_vol, minimax_intensity, minimax_timbre, project_id, session_id }) => {
700
+ async ({ text, voice, model, language, style_instructions_preset_id, style_instructions, style_instructions_label, selected_style, emotion, speaking_speed, similarity_boost, style, use_speaker_boost, variance, tempo, promptBoost, seed, accentControl, voiceTitle, minimax_pitch, minimax_vol, minimax_intensity, minimax_timbre, project_id, session_id }) => {
693
701
  model = await canonicalModelId(client, model, 'text_to_speech'); // lenient id resolution ("z-image" → "z-image/turbo")
694
702
  // Resolve the requested voice against the REAL catalog (cached) so the card
695
703
  // can show its display name + portrait instead of a raw id, and so an id
@@ -703,7 +711,8 @@ function registerGenerateTools(server, client, options = {}) {
703
711
  : null;
704
712
  const gen = await client.post('/v1/generate/speech', {
705
713
  text, voice, model, language,
706
- style_instructions, selected_style, emotion, speaking_speed,
714
+ style_instructions_preset_id, style_instructions, style_instructions_label,
715
+ selected_style, emotion, speaking_speed,
707
716
  similarity_boost, style, use_speaker_boost,
708
717
  variance, tempo, promptBoost, seed, accentControl, voiceTitle,
709
718
  minimax_pitch, minimax_vol, minimax_intensity, minimax_timbre,
@@ -713,7 +722,12 @@ function registerGenerateTools(server, client, options = {}) {
713
722
  if (ui()) return uiGenerating({
714
723
  tool: 'generate_speech', kind: 'audio', gen, client, model, prompt: text,
715
724
  voice: voiceRecord,
716
- settings: { voice: voice || 'Rachel', style: selected_style || emotion || style_instructions },
725
+ settings: {
726
+ voice: voice || 'Rachel',
727
+ style: selected_style || emotion || style_instructions_preset_id || style_instructions,
728
+ speaking_speed,
729
+ language,
730
+ },
717
731
  warning: unknownVoice
718
732
  });
719
733