@kolbo/mcp 1.12.1 → 1.14.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 +19 -1
- package/package.json +55 -55
- package/src/index.js +12 -4
- package/src/tools/artifacts.js +11 -4
- package/src/tools/visual_dna.js +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,20 @@ 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
|
-
##
|
|
7
|
+
## Recommended install: the Kolbo Claude Code plugin
|
|
8
|
+
|
|
9
|
+
The easiest way to use this MCP from Claude Code is the official **Kolbo plugin**, which bundles this server + the routing skill + a first-run API-key prompt — no `settings.json` editing required:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
claude plugin marketplace add Zoharvan12/kolbo-claude-plugin
|
|
13
|
+
claude plugin install kolbo@kolbo
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
You'll be prompted for your API key once and it's stored in your OS keychain. The plugin lives in its own tiny repo at [`kolbo-claude-plugin`](https://github.com/Zoharvan12/kolbo-claude-plugin); the routing skill it ships is auto-synced from the canonical source in [`kolbo-code`](https://github.com/Zoharvan12/kolbo-code), so the Claude Code plugin and the Kolbo Code CLI always carry the same skill.
|
|
17
|
+
|
|
18
|
+
Continue below if you'd rather wire the MCP in by hand (Claude Desktop, Cursor, custom setups).
|
|
19
|
+
|
|
20
|
+
## Manual setup
|
|
8
21
|
|
|
9
22
|
### 1. Get an API Key
|
|
10
23
|
|
|
@@ -115,6 +128,11 @@ Every generation tool also accepts an optional `resolution` arg. Images use `"1K
|
|
|
115
128
|
| `move_folder_contents` | Move every item in a folder to a project |
|
|
116
129
|
| `get_media_stats` | Counts + storage bytes per type (optionally per project) |
|
|
117
130
|
|
|
131
|
+
**Artifacts**
|
|
132
|
+
| Tool | Description |
|
|
133
|
+
|------|-------------|
|
|
134
|
+
| `publish_html_artifact` | Publish an HTML page, SVG, or Mermaid diagram and get a public shareable URL on `sites.kolbo.ai`. Pass `share_token` from a prior publish to update the same URL in place (old content kept in version history). |
|
|
135
|
+
|
|
118
136
|
**Discovery & Account**
|
|
119
137
|
| Tool | Description |
|
|
120
138
|
|------|-------------|
|
package/package.json
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@kolbo/mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Kolbo AI MCP Server - Generate images, videos, music, speech, and sound effects from Claude Code",
|
|
5
|
-
"main": "src/index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"kolbo-mcp": "./bin/kolbo-mcp.js"
|
|
8
|
-
},
|
|
9
|
-
"scripts": {
|
|
10
|
-
"start": "node src/index.js",
|
|
11
|
-
"smoke": "node scripts/smoke.js",
|
|
12
|
-
"check-parity": "node scripts/check-parity.js",
|
|
13
|
-
"prepublishOnly": "node scripts/smoke.js && node scripts/check-parity.js"
|
|
14
|
-
},
|
|
15
|
-
"keywords": [
|
|
16
|
-
"kolbo",
|
|
17
|
-
"mcp",
|
|
18
|
-
"ai",
|
|
19
|
-
"image-generation",
|
|
20
|
-
"video-generation",
|
|
21
|
-
"music-generation",
|
|
22
|
-
"text-to-speech",
|
|
23
|
-
"claude-code",
|
|
24
|
-
"claude-desktop",
|
|
25
|
-
"model-context-protocol"
|
|
26
|
-
],
|
|
27
|
-
"license": "MIT",
|
|
28
|
-
"repository": {
|
|
29
|
-
"type": "git",
|
|
30
|
-
"url": "https://github.com/Zoharvan12/kolbo-mcp"
|
|
31
|
-
},
|
|
32
|
-
"homepage": "https://docs.kolbo.ai/developer-api/claude-code-skill",
|
|
33
|
-
"author": "Kolbo AI <support@kolbo.ai>",
|
|
34
|
-
"publishConfig": {
|
|
35
|
-
"access": "public"
|
|
36
|
-
},
|
|
37
|
-
"files": [
|
|
38
|
-
"src/",
|
|
39
|
-
"bin/",
|
|
40
|
-
"README.md"
|
|
41
|
-
],
|
|
42
|
-
"dependencies": {
|
|
43
|
-
"@modelcontextprotocol/sdk": "1.29.0",
|
|
44
|
-
"form-data": "^4.0.5",
|
|
45
|
-
"zod": "^3.25.0"
|
|
46
|
-
},
|
|
47
|
-
"overrides": {
|
|
48
|
-
"hono": "^4.12.12",
|
|
49
|
-
"@hono/node-server": "^1.19.13",
|
|
50
|
-
"path-to-regexp": "^8.4.2"
|
|
51
|
-
},
|
|
52
|
-
"engines": {
|
|
53
|
-
"node": ">=18.0.0"
|
|
54
|
-
}
|
|
55
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@kolbo/mcp",
|
|
3
|
+
"version": "1.14.0",
|
|
4
|
+
"description": "Kolbo AI MCP Server - Generate images, videos, music, speech, and sound effects from Claude Code",
|
|
5
|
+
"main": "src/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"kolbo-mcp": "./bin/kolbo-mcp.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"start": "node src/index.js",
|
|
11
|
+
"smoke": "node scripts/smoke.js",
|
|
12
|
+
"check-parity": "node scripts/check-parity.js",
|
|
13
|
+
"prepublishOnly": "node scripts/smoke.js && node scripts/check-parity.js"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"kolbo",
|
|
17
|
+
"mcp",
|
|
18
|
+
"ai",
|
|
19
|
+
"image-generation",
|
|
20
|
+
"video-generation",
|
|
21
|
+
"music-generation",
|
|
22
|
+
"text-to-speech",
|
|
23
|
+
"claude-code",
|
|
24
|
+
"claude-desktop",
|
|
25
|
+
"model-context-protocol"
|
|
26
|
+
],
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/Zoharvan12/kolbo-mcp"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://docs.kolbo.ai/developer-api/claude-code-skill",
|
|
33
|
+
"author": "Kolbo AI <support@kolbo.ai>",
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"src/",
|
|
39
|
+
"bin/",
|
|
40
|
+
"README.md"
|
|
41
|
+
],
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@modelcontextprotocol/sdk": "1.29.0",
|
|
44
|
+
"form-data": "^4.0.5",
|
|
45
|
+
"zod": "^3.25.0"
|
|
46
|
+
},
|
|
47
|
+
"overrides": {
|
|
48
|
+
"hono": "^4.12.12",
|
|
49
|
+
"@hono/node-server": "^1.19.13",
|
|
50
|
+
"path-to-regexp": "^8.4.2"
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"node": ">=18.0.0"
|
|
54
|
+
}
|
|
55
|
+
}
|
package/src/index.js
CHANGED
|
@@ -93,7 +93,15 @@ async function main() {
|
|
|
93
93
|
await server.connect(transport);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
module.exports = { main };
|
|
97
|
+
|
|
98
|
+
// Auto-run when invoked directly (e.g. `node src/index.js` or via the published
|
|
99
|
+
// bin/kolbo-mcp.js wrapper). Consumers that `require()` this module to embed it
|
|
100
|
+
// inside another process (the Kolbo Code CLI's `kolbo mcp serve` subcommand)
|
|
101
|
+
// should call `main()` themselves.
|
|
102
|
+
if (require.main === module || require.main?.filename?.endsWith('kolbo-mcp.js')) {
|
|
103
|
+
main().catch(err => {
|
|
104
|
+
console.error('Failed to start Kolbo MCP server:', err);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
});
|
|
107
|
+
}
|
package/src/tools/artifacts.js
CHANGED
|
@@ -9,23 +9,29 @@ function registerArtifactTools(server, client) {
|
|
|
9
9
|
// ─── publish_html_artifact ─────────────────────────────────────
|
|
10
10
|
server.tool(
|
|
11
11
|
'publish_html_artifact',
|
|
12
|
-
'Publish an HTML page (or SVG / Mermaid diagram) to kolbo.ai and return a public shareable URL. Use this when the user explicitly asks to share, publish, or deploy a built artifact so they can send the URL to someone. The content is hosted at https://sites.kolbo.ai/<slug>; the page is served with restrictive CSP (no fetch/XHR/form-action) so it cannot exfiltrate data. Identical content uploaded twice returns the same URL (server dedup).',
|
|
12
|
+
'Publish an HTML page (or SVG / Mermaid diagram) to kolbo.ai and return a public shareable URL. Use this when the user explicitly asks to share, publish, or deploy a built artifact so they can send the URL to someone. The content is hosted at https://sites.kolbo.ai/<slug>; the page is served with restrictive CSP (no fetch/XHR/form-action) so it cannot exfiltrate data. Identical content uploaded twice returns the same URL (server dedup). To update a previously-published page in place (keeping the same URL), pass the `share_token` returned from the prior publish — the old content is preserved in version history.',
|
|
13
13
|
{
|
|
14
14
|
title: z.string().describe('Human-friendly title for the page (also used to generate the SEO slug). Keep under ~60 chars.'),
|
|
15
15
|
content: z.string().describe('The raw artifact body. For type="html" this is a full HTML document (DOCTYPE + html/head/body). For "svg" it is an <svg> document. For "mermaid" it is the Mermaid source text.'),
|
|
16
16
|
type: z.enum(['html', 'svg', 'mermaid']).optional().describe('Artifact type. Default: "html".'),
|
|
17
17
|
allow_js: z.boolean().optional().describe('Allow inline <script> execution on the published page. Default: false. Required for Tailwind JIT, Chart.js, Three.js, React-from-CDN etc.'),
|
|
18
|
+
share_token: z.string().optional().describe('Optional. Pass the `shareToken` returned from a previous publish to update that artifact in place. The public URL stays the same and the old content is moved into version history. Omit this on the first publish.'),
|
|
18
19
|
},
|
|
19
|
-
async ({ title, content, type, allow_js }) => {
|
|
20
|
+
async ({ title, content, type, allow_js, share_token }) => {
|
|
20
21
|
if (!title || !title.trim()) throw new Error('title is required');
|
|
21
22
|
if (typeof content !== 'string' || !content.length) throw new Error('content is required');
|
|
22
23
|
|
|
23
|
-
const
|
|
24
|
+
const body = {
|
|
24
25
|
title: title.trim(),
|
|
25
26
|
content,
|
|
26
27
|
type: type || 'html',
|
|
27
28
|
allowJs: allow_js === true,
|
|
28
|
-
}
|
|
29
|
+
};
|
|
30
|
+
if (typeof share_token === 'string' && share_token.trim()) {
|
|
31
|
+
body.shareToken = share_token.trim();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const result = await client.post('/artifact/quick-share', body);
|
|
29
35
|
|
|
30
36
|
const artifact = result?.data || {};
|
|
31
37
|
const slug = artifact.shareableSlug || artifact.shareToken;
|
|
@@ -49,6 +55,7 @@ function registerArtifactTools(server, client) {
|
|
|
49
55
|
shareToken: artifact.shareToken,
|
|
50
56
|
shareableSlug: slug,
|
|
51
57
|
duplicate: result?.duplicate === true,
|
|
58
|
+
updated: result?.updated === true,
|
|
52
59
|
title: artifact.title,
|
|
53
60
|
}),
|
|
54
61
|
}],
|
package/src/tools/visual_dna.js
CHANGED
|
@@ -20,7 +20,7 @@ function registerVisualDnaTools(server, client) {
|
|
|
20
20
|
'create_visual_dna',
|
|
21
21
|
'Create a Visual DNA profile from reference media. Each item in images/video/audio can be a public URL or an absolute local file path. Max 4 images, 1 video, 1 audio. Files capped at 25MB each.',
|
|
22
22
|
{
|
|
23
|
-
name: z.string().describe('Name of the Visual DNA profile'),
|
|
23
|
+
name: z.string().describe('Name of the Visual DNA profile. **Pick a short, lowercase, no-space single token** (e.g. `maya`, `tokyo_neon`, `brand_red`, `esther_model`) — never names with spaces (`Sarah Johnson` ❌). The user/LLM types this as `@<name>` inside generation prompts, and the @ parser stops at the first space, so `@Sarah Johnson` matches only `Sarah` and the binding silently drops. Multi-word concepts should use underscores or be a single token. Names are case-insensitive on lookup, but **reserved** values rejected on creation: `Image1`, `Image2`, …, `Video1`, …, `Audio1`, … (any-language characters allowed; max 100 chars).'),
|
|
24
24
|
dna_type: z.string().optional().describe('Type: "character", "style", "product", "scene". Default: "character"'),
|
|
25
25
|
prompt_helper: z.string().optional().describe('Optional description/notes to guide DNA extraction'),
|
|
26
26
|
images: z.array(z.string()).optional().describe('Array of image sources (URLs or absolute local paths). Max 4.'),
|