@kolbo/mcp 1.20.0 → 1.21.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
@@ -4,32 +4,44 @@ Use [Kolbo AI](https://kolbo.ai) as native tools in Claude Code and Claude Deskt
4
4
 
5
5
  Generate images, videos, music, speech, sound effects, multi-scene campaigns, and conversational chat — all from natural language in your coding environment. 100+ AI models behind Smart Select routing, with reusable Visual DNA profiles for character/style consistency.
6
6
 
7
- ## Install in 2 steps (works in Claude Code, Claude Desktop, Cursor, Codex & Kolbo Code)
7
+ ## Set up paste one prompt, or one config block (keyless, no API key)
8
+
9
+ ### Easiest: paste this prompt to your AI
10
+
11
+ Copy this and paste it to Claude, ChatGPT, Cursor, or any AI assistant — it installs Kolbo itself (picks local config or remote connector based on what it can do):
12
+
13
+ ```
14
+ Set up the Kolbo AI MCP server so you can generate images, video, music and more.
15
+
16
+ - If you can edit files (Claude Code, Cursor, Claude Desktop): add this to my MCP config, then tell me to restart the app:
17
+ {"mcpServers":{"kolbo":{"command":"npx","args":["-y","@kolbo/mcp@latest"]}}}
18
+ On first use a Kolbo login opens in my browser — I'll click Allow (no API key needed).
19
+ - If you support remote connectors (claude.ai, ChatGPT): add the custom connector URL https://api.kolbo.ai/mcp and walk me through logging in.
20
+
21
+ Then confirm Kolbo is connected and offer to generate a test image of a sunset.
22
+ ```
23
+
24
+ ### Or add the config yourself
8
25
 
9
26
  <!--
10
27
  AI ASSISTANT SETUP INSTRUCTIONS — if you are an AI agent reading this to set up Kolbo for a user, do exactly this:
11
- 1. Ask the user for their Kolbo API key (starts with `kolbo_live_`). They get one at https://app.kolbo.ai/developer. Do not continue without it.
12
- 2. Write the JSON block below into the user's MCP config, merging into any existing "mcpServers":
13
- - Claude Code: .claude/settings.json (or run: claude mcp add-json kolbo '{"command":"npx","args":["-y","@kolbo/mcp@latest"],"env":{"KOLBO_API_KEY":"kolbo_live_..."}}')
28
+ 1. If you can edit files (Claude Code, Cursor, Claude Desktop): write the JSON block below it has NO api key into the user's MCP config, merging into any existing "mcpServers":
29
+ - Claude Code: .claude/settings.json (or run: claude mcp add kolbo -- npx -y @kolbo/mcp@latest)
14
30
  - Claude Desktop: claude_desktop_config.json
15
31
  - Cursor: .cursor/mcp.json
16
- 3. Tell the user to fully restart their app so the Kolbo tools load, then they can just say "generate an image of...".
17
- Ignore the optional plugin section below unless the user specifically wants slash-commands the JSON config alone is enough to use every tool.
32
+ Then tell the user to restart. On their first generation a Kolbo login opens in the browser — they click Allow (no API key to create).
33
+ 2. If you're a web chat that can't edit files (claude.ai, ChatGPT): tell the user to add the connector URL https://api.kolbo.ai/mcp under Settings → Connectors instead.
34
+ The JSON config alone enables every tool. The plugin below is an optional slash-command upgrade.
18
35
  -->
19
36
 
20
- **Step 1 Get your API key:** create one at [app.kolbo.ai/developer](https://app.kolbo.ai/developer) (it starts with `kolbo_live_`).
21
-
22
- **Step 2 — Add one config block.** This single block is identical for every MCP client — paste your key in and you're done:
37
+ This single block is identical for every MCP client and carries **no API key** on first use it logs you in via the browser:
23
38
 
24
39
  ```json
25
40
  {
26
41
  "mcpServers": {
27
42
  "kolbo": {
28
43
  "command": "npx",
29
- "args": ["-y", "@kolbo/mcp@latest"],
30
- "env": {
31
- "KOLBO_API_KEY": "kolbo_live_..."
32
- }
44
+ "args": ["-y", "@kolbo/mcp@latest"]
33
45
  }
34
46
  }
35
47
  }
@@ -37,13 +49,16 @@ Generate images, videos, music, speech, sound effects, multi-scene campaigns, an
37
49
 
38
50
  | Client | Where the config goes |
39
51
  |--------|----------------------|
40
- | **Claude Code** | `.claude/settings.json` (or `claude mcp add-json kolbo '…'`) |
52
+ | **Claude Code** | `.claude/settings.json` (or `claude mcp add kolbo -- npx -y @kolbo/mcp@latest`) |
41
53
  | **Claude Desktop** | `claude_desktop_config.json` |
42
54
  | **Cursor** | `.cursor/mcp.json` |
43
- | **Codex / other MCP agents** | that agent's MCP config file |
44
- | **Kolbo Code** | configured automatically on `kolbo auth login` — nothing to do |
55
+ | **Kolbo Code** | configured automatically on `kolbo auth login` |
45
56
 
46
- Restart your app so it loads the Kolbo tools. That's the whole installevery tool below now works.
57
+ Restart your app, then ask it to generate something. The first time, a Kolbo login opens in your browserclick **Allow** (no API key to create). _Prefer an API key? Create one at [app.kolbo.ai/developer](https://app.kolbo.ai/developer) and add `"env": { "KOLBO_API_KEY": "kolbo_live_..." }` to the block above._
58
+
59
+ ### Browser-only (claude.ai / ChatGPT): the connector
60
+
61
+ No install at all — add the custom connector **`https://api.kolbo.ai/mcp`** under Settings → Connectors, then Connect → log in → Allow. Great for generating from text or URLs; to upload your own local files, use the config install above (it runs on your machine).
47
62
 
48
63
  ### Optional upgrade: add the Kolbo skill for slash-commands + smart routing
49
64
 
@@ -187,9 +202,11 @@ Every generation tool also accepts an optional `project_id` arg that routes the
187
202
 
188
203
  ## Environment Variables
189
204
 
205
+ Both are optional — the local install logs in via the browser on first use.
206
+
190
207
  | Variable | Required | Description |
191
208
  |----------|----------|-------------|
192
- | `KOLBO_API_KEY` | Yes | Your Kolbo API key |
209
+ | `KOLBO_API_KEY` | No | Set a `kolbo_live_` key to skip the browser login (create one at [app.kolbo.ai/developer](https://app.kolbo.ai/developer)). |
193
210
  | `KOLBO_API_URL` | No | Custom API URL (default: `https://api.kolbo.ai/api`) |
194
211
 
195
212
  ## Links
package/bin/kolbo-mcp.js CHANGED
@@ -1,2 +1,15 @@
1
- #!/usr/bin/env node
2
- require('../src/index.js');
1
+ #!/usr/bin/env node
2
+
3
+ // `npx @kolbo/mcp install` → one-command keyless setup (configures the user's
4
+ // agent). Anything else → run the MCP stdio server (the default).
5
+ if (process.argv[2] === 'install') {
6
+ require('../src/install.js')
7
+ .run()
8
+ .then((code) => process.exit(code || 0))
9
+ .catch((err) => {
10
+ console.error('Kolbo install failed:', err && err.message ? err.message : err);
11
+ process.exit(1);
12
+ });
13
+ } else {
14
+ require('../src/index.js');
15
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolbo/mcp",
3
- "version": "1.20.0",
3
+ "version": "1.21.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/src/install.js ADDED
@@ -0,0 +1,98 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * `npx @kolbo/mcp install` — one-command, keyless setup.
5
+ *
6
+ * Detects the MCP config of every supported local agent (Claude Desktop,
7
+ * Claude Code, Cursor) that's actually installed, and adds the Kolbo MCP server
8
+ * to it — to the RIGHT file, merging instead of clobbering. No API key (the
9
+ * server logs in via the browser on first use). This exists because having an
10
+ * agent hand-edit settings.json is fragile (wrong file, JSON breakage, and
11
+ * Claude Code's self-modification guard) — one deterministic command is not.
12
+ */
13
+
14
+ const fs = require('fs');
15
+ const path = require('path');
16
+ const os = require('os');
17
+
18
+ const KOLBO_ENTRY = { command: 'npx', args: ['-y', '@kolbo/mcp@latest'] };
19
+
20
+ function targets() {
21
+ const home = os.homedir();
22
+ let desktop;
23
+ if (process.platform === 'darwin') {
24
+ desktop = path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
25
+ } else if (process.platform === 'win32') {
26
+ desktop = path.join(process.env.APPDATA || path.join(home, 'AppData', 'Roaming'), 'Claude', 'claude_desktop_config.json');
27
+ } else {
28
+ desktop = path.join(home, '.config', 'Claude', 'claude_desktop_config.json');
29
+ }
30
+ return [
31
+ { name: 'Claude Desktop', file: desktop, restart: 'Fully quit and reopen Claude Desktop' },
32
+ { name: 'Claude Code', file: path.join(home, '.claude', 'settings.json'), restart: 'Restart Claude Code' },
33
+ { name: 'Cursor', file: path.join(home, '.cursor', 'mcp.json'), restart: 'Restart Cursor' },
34
+ ];
35
+ }
36
+
37
+ function configure(t) {
38
+ const dir = path.dirname(t.file);
39
+ const fileExists = fs.existsSync(t.file);
40
+ // Only touch an app that looks installed (its config file or parent dir exists)
41
+ // so we don't create configs for apps the user doesn't have.
42
+ if (!fileExists && !fs.existsSync(dir)) return { ...t, status: 'not found' };
43
+
44
+ let cfg = {};
45
+ if (fileExists) {
46
+ try {
47
+ cfg = JSON.parse(fs.readFileSync(t.file, 'utf8'));
48
+ } catch (_) {
49
+ return { ...t, status: 'skipped — existing config is not valid JSON' };
50
+ }
51
+ }
52
+ cfg.mcpServers = cfg.mcpServers || {};
53
+ if (cfg.mcpServers.kolbo) return { ...t, status: 'already set up' };
54
+
55
+ cfg.mcpServers.kolbo = { ...KOLBO_ENTRY };
56
+ try {
57
+ fs.mkdirSync(dir, { recursive: true });
58
+ fs.writeFileSync(t.file, JSON.stringify(cfg, null, 2) + '\n');
59
+ return { ...t, status: 'configured' };
60
+ } catch (e) {
61
+ return { ...t, status: `failed — ${e.message}` };
62
+ }
63
+ }
64
+
65
+ async function run() {
66
+ const out = (s = '') => process.stdout.write(s + '\n');
67
+ const results = targets().map(configure);
68
+ const newlyConfigured = results.filter((r) => r.status === 'configured');
69
+ const ready = results.filter((r) => r.status === 'configured' || r.status === 'already set up');
70
+
71
+ out();
72
+ out(' Kolbo MCP — keyless setup');
73
+ out(' ─────────────────────────');
74
+ for (const r of results) {
75
+ const ok = r.status === 'configured' || r.status === 'already set up';
76
+ out(` ${ok ? '✓' : '·'} ${r.name}: ${r.status}${ok ? ` (${r.file})` : ''}`);
77
+ }
78
+ out();
79
+
80
+ if (ready.length === 0) {
81
+ out(' No supported agent found (Claude Desktop / Claude Code / Cursor).');
82
+ out(' Add this to your agent\'s MCP config manually, then restart it:');
83
+ out(' {"mcpServers":{"kolbo":{"command":"npx","args":["-y","@kolbo/mcp@latest"]}}}');
84
+ out();
85
+ return 0;
86
+ }
87
+
88
+ out(' Done — no API key needed.');
89
+ if (newlyConfigured.length) {
90
+ const steps = [...new Set(newlyConfigured.map((r) => r.restart))];
91
+ out(` Next: ${steps.join('; ')}.`);
92
+ }
93
+ out(' On your first Kolbo generation, a login opens in your browser — click Allow.');
94
+ out();
95
+ return 0;
96
+ }
97
+
98
+ module.exports = { run };