@kolbo/mcp 1.51.1 → 1.51.2

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.51.1",
3
+ "version": "1.51.2",
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": {
@@ -80,9 +80,16 @@ function registerVisualDnaTools(server, client, options = {}) {
80
80
  // ─── list_visual_dnas ──────────────────────────────────────
81
81
  server.tool(
82
82
  'list_visual_dnas',
83
- '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).',
83
+ 'List the user\'s OWN Visual DNA profiles. This is almost always what you want "my characters", '
84
+ + '"which DNAs do I have", picking a DNA for a generation. Pass `project_id` to also include a shared '
85
+ + 'project\'s DNAs (teammates\' assets on that project). '
86
+ + 'Kolbo ALSO ships a large library of ~1000 global cast/preset DNAs — those are NOT returned by default '
87
+ + 'because dumping them buries the user\'s own handful. Only pass scope="global" (optionally with '
88
+ + '`collection` and `search`) when the user explicitly wants to BROWSE the preset cast — e.g. "find me a '
89
+ + 'character", "show me street style models", "I need a location DNA" — and they have not named one of '
90
+ + 'their own. Use scope="all" only if the user genuinely wants both at once.',
84
91
  {
85
- 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.'),
92
+ scope: z.enum(['all', 'personal', 'global', 'organization']).optional().describe('Default: "personal" — the user\'s own DNAs (plus a shared project\'s when project_id is set). "global" = the ~1000 system cast/preset DNAs, for browsing when the user needs a character and has none of their own. "organization" = org-shared. "all" = everything, rarely wanted.'),
86
93
  search: z.string().optional().describe('Search by name, tags, or description (case-insensitive)'),
87
94
  collection: z.string().optional().describe('Filter global presets by collection: cast, influencers, props, locations, styles, glamour, street'),
88
95
  tags: z.string().optional().describe('Comma-separated tags to filter by (OR logic)'),
@@ -90,7 +97,12 @@ function registerVisualDnaTools(server, client, options = {}) {
90
97
  },
91
98
  async ({ scope, search, collection, tags, project_id } = {}) => {
92
99
  const params = new URLSearchParams();
93
- if (scope && scope !== 'all') params.set('scope', scope);
100
+ // Default to the user's OWN DNAs. The API defaults to "all", which pulls
101
+ // in ~1000 global cast presets and buries the handful the user actually
102
+ // made. Global is opt-in via scope="global" (browse the preset cast).
103
+ // Shared-project assets still come through project_id, independently.
104
+ const effectiveScope = scope || 'personal';
105
+ if (effectiveScope !== 'all') params.set('scope', effectiveScope);
94
106
  if (search) params.set('search', search);
95
107
  if (collection) params.set('collection', collection);
96
108
  if (tags) params.set('tags', tags);