@kolbo/mcp 1.3.2 → 1.4.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolbo/mcp",
3
- "version": "1.3.2",
3
+ "version": "1.4.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": {
@@ -9,10 +9,15 @@ function registerMoodboardTools(server, client) {
9
9
  // ─── list_moodboards ───────────────────────────────────────
10
10
  server.tool(
11
11
  'list_moodboards',
12
- 'List moodboards available to you: your own, system presets, and any organization moodboards. Returns id, name, master_prompt, thumbnail, and image URLs for each.',
13
- {},
14
- async () => {
15
- const result = await client.get('/v1/moodboards');
12
+ 'List moodboards. By default returns ALL (personal + system presets + organization). Use "scope" to filter: "personal" (user\'s own), "preset" or "global" (system presets), or "organization" (org-shared). Returns id, name, master_prompt, thumbnail, and image URLs for each.',
13
+ {
14
+ scope: z.enum(['all', 'personal', 'preset', 'global', 'organization']).optional().describe('Filter by scope. Default: "all" (everything accessible). "personal" = only your own. "preset"/"global" = system presets. "organization" = org-shared.')
15
+ },
16
+ async ({ scope } = {}) => {
17
+ const params = new URLSearchParams();
18
+ if (scope && scope !== 'all') params.set('scope', scope);
19
+ const qs = params.toString();
20
+ const result = await client.get(`/v1/moodboards${qs ? '?' + qs : ''}`);
16
21
  return {
17
22
  content: [{
18
23
  type: 'text',
@@ -76,10 +76,21 @@ function registerVisualDnaTools(server, client) {
76
76
  // ─── list_visual_dnas ──────────────────────────────────────
77
77
  server.tool(
78
78
  'list_visual_dnas',
79
- 'List your Visual DNA profiles. Returns id, name, type, and thumbnail for each.',
80
- {},
81
- async () => {
82
- const result = await client.get('/v1/visual-dna');
79
+ 'List Visual DNA profiles. By default returns ALL (personal + global cast presets + organization). Use "scope" to filter: "personal" (user\'s own), "global" (system cast/presets), or "organization" (org-shared). Use "search" to filter by name/tags/description. Use "collection" to filter global presets by collection (cast, influencers, props, locations, styles, glamour, street).',
80
+ {
81
+ scope: z.enum(['all', 'personal', 'global', 'organization']).optional().describe('Filter by scope. Default: "all" (everything accessible). "personal" = only your own. "global" = system presets/cast. "organization" = org-shared.'),
82
+ search: z.string().optional().describe('Search by name, tags, or description (case-insensitive)'),
83
+ collection: z.string().optional().describe('Filter global presets by collection: cast, influencers, props, locations, styles, glamour, street'),
84
+ tags: z.string().optional().describe('Comma-separated tags to filter by (OR logic)')
85
+ },
86
+ async ({ scope, search, collection, tags } = {}) => {
87
+ const params = new URLSearchParams();
88
+ if (scope && scope !== 'all') params.set('scope', scope);
89
+ if (search) params.set('search', search);
90
+ if (collection) params.set('collection', collection);
91
+ if (tags) params.set('tags', tags);
92
+ const qs = params.toString();
93
+ const result = await client.get(`/v1/visual-dna${qs ? '?' + qs : ''}`);
83
94
  return {
84
95
  content: [{
85
96
  type: 'text',