@collage-dam/mcp-server 0.1.2 → 0.1.3
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/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.1.3] — 2026-05-18
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- `get_asset_details` accepts an optional `include_preview` boolean
|
|
14
|
+
(default false). When true, the server fetches the asset's thumbnail
|
|
15
|
+
server-side, base64-encodes it, and appends an MCP `image` content
|
|
16
|
+
block alongside the existing JSON metadata. Clients that support image
|
|
17
|
+
rendering (Claude Desktop, Claude Code, etc.) display the thumbnail
|
|
18
|
+
inline; clients that don't, ignore the extra block. Capped at 200 KB
|
|
19
|
+
per asset (~67k tokens of base64) to bound the LLM's token budget —
|
|
20
|
+
larger thumbnails are skipped with a textual note pointing back at the
|
|
21
|
+
signed URL. Fetch timeout: 8 s.
|
|
22
|
+
|
|
23
|
+
Rationale: passing the thumbnail URL back as a string only worked in
|
|
24
|
+
rare hosts that auto-render markdown image links; most MCP clients
|
|
25
|
+
treat external HTTP URLs in tool output as untrusted and render a
|
|
26
|
+
broken-image placeholder. The `image` content block is the
|
|
27
|
+
spec-sanctioned way to expose visuals and matches how other MCP
|
|
28
|
+
servers (filesystem, screenshot, etc.) deliver image content.
|
|
29
|
+
|
|
10
30
|
## [0.1.2] — 2026-05-18
|
|
11
31
|
|
|
12
32
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -59,7 +59,7 @@ import { wrapPromptAsTool } from './prompts/wrap-prompt-as-tool.js';
|
|
|
59
59
|
import { buildCollectionLookup } from './tools/asset-selection.js';
|
|
60
60
|
export { COLLAGE_MCP_SCHEMA_VERSION, SchemaVersionSchema, addSchemaVersion, validateSchemaVersion, } from './conventions/schema-version.js';
|
|
61
61
|
const SERVER_NAME = 'collage-mcp';
|
|
62
|
-
const SERVER_VERSION = '0.1.
|
|
62
|
+
const SERVER_VERSION = '0.1.3';
|
|
63
63
|
function withTextContent(inner) {
|
|
64
64
|
return async (args) => {
|
|
65
65
|
const result = await inner(args);
|
|
@@ -2,6 +2,7 @@ import { z } from 'zod';
|
|
|
2
2
|
import type { CollageClient } from '../client.js';
|
|
3
3
|
export declare const GetAssetDetailsInputSchema: {
|
|
4
4
|
asset_id: z.ZodUnion<[z.ZodNumber, z.ZodString]>;
|
|
5
|
+
include_preview: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
5
6
|
};
|
|
6
7
|
export declare const GetAssetDetailsOutputSchema: z.ZodObject<{
|
|
7
8
|
asset: z.ZodObject<{
|
|
@@ -314,8 +315,9 @@ export declare const GET_ASSET_DETAILS_DESCRIPTION: string;
|
|
|
314
315
|
* Wraps `CollageClient.getAssetDetails()`, which calls
|
|
315
316
|
* `POST /digital-assets/view-detail` with `digital_assets_id` body param.
|
|
316
317
|
*/
|
|
317
|
-
export declare function buildGetAssetDetailsHandler(client: CollageClient): ({ asset_id }: {
|
|
318
|
+
export declare function buildGetAssetDetailsHandler(client: CollageClient): ({ asset_id, include_preview, }: {
|
|
318
319
|
asset_id: number | string;
|
|
320
|
+
include_preview?: boolean;
|
|
319
321
|
}) => Promise<{
|
|
320
322
|
isError: boolean;
|
|
321
323
|
content: {
|
|
@@ -335,10 +337,14 @@ export declare function buildGetAssetDetailsHandler(client: CollageClient): ({ a
|
|
|
335
337
|
request_id: string;
|
|
336
338
|
};
|
|
337
339
|
} | {
|
|
338
|
-
content: {
|
|
340
|
+
content: ({
|
|
339
341
|
type: "text";
|
|
340
342
|
text: string;
|
|
341
|
-
}
|
|
343
|
+
} | {
|
|
344
|
+
type: "image";
|
|
345
|
+
data: string;
|
|
346
|
+
mimeType: string;
|
|
347
|
+
})[];
|
|
342
348
|
structuredContent: {
|
|
343
349
|
request_id: string;
|
|
344
350
|
asset: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-asset-details.d.ts","sourceRoot":"","sources":["../../src/tools/get-asset-details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"get-asset-details.d.ts","sourceRoot":"","sources":["../../src/tools/get-asset-details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AA4BlD,eAAO,MAAM,0BAA0B;;;CAYtC,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,6BAA6B,QAMwB,CAAC;AAgDnE;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,aAAa,IACjD,gCAGX;IACD,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;;;;;;;;;;;;;;;;;;;;cAwBa,MAAM;cAAQ,MAAM;;cACpB,OAAO;cAAQ,MAAM;kBAAY,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCtD"}
|
|
@@ -1,9 +1,37 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { logger } from '../conventions/logger.js';
|
|
2
3
|
import { DigitalAssetSchema } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Per-asset cap on inline preview size. Larger thumbnails are skipped
|
|
6
|
+
* to protect the LLM's token budget — a 50 KB JPEG is already ~17k
|
|
7
|
+
* tokens once base64-encoded, so 200 KB (~67k tokens) is the upper bound
|
|
8
|
+
* we'll inline before bailing.
|
|
9
|
+
*/
|
|
10
|
+
const MAX_PREVIEW_BYTES = 200 * 1024;
|
|
11
|
+
/**
|
|
12
|
+
* Hard timeout on the upstream thumbnail fetch. We don't want a slow
|
|
13
|
+
* S3 response to stall the entire tool call — if it takes longer, we
|
|
14
|
+
* skip the preview and still return the metadata.
|
|
15
|
+
*/
|
|
16
|
+
const PREVIEW_FETCH_TIMEOUT_MS = 8000;
|
|
17
|
+
const PREVIEW_MIME_TYPES = {
|
|
18
|
+
jpg: 'image/jpeg',
|
|
19
|
+
jpeg: 'image/jpeg',
|
|
20
|
+
png: 'image/png',
|
|
21
|
+
gif: 'image/gif',
|
|
22
|
+
webp: 'image/webp',
|
|
23
|
+
svg: 'image/svg+xml',
|
|
24
|
+
};
|
|
3
25
|
export const GetAssetDetailsInputSchema = {
|
|
4
26
|
asset_id: z
|
|
5
27
|
.union([z.number().int().positive(), z.string().min(1)])
|
|
6
28
|
.describe('The numeric Collage asset ID to look up.'),
|
|
29
|
+
include_preview: z
|
|
30
|
+
.boolean()
|
|
31
|
+
.optional()
|
|
32
|
+
.default(false)
|
|
33
|
+
.describe('When true, fetch the asset thumbnail and include it as a base64 image content block so the client can render it inline. ' +
|
|
34
|
+
'Capped at 200 KB per asset; larger previews are skipped with a note. Default false to keep token usage low.'),
|
|
7
35
|
};
|
|
8
36
|
export const GetAssetDetailsOutputSchema = z.object({
|
|
9
37
|
asset: DigitalAssetSchema,
|
|
@@ -12,8 +40,44 @@ export const GetAssetDetailsOutputSchema = z.object({
|
|
|
12
40
|
export const GET_ASSET_DETAILS_DESCRIPTION = 'Retrieve complete metadata for a single Collage asset by its ID. ' +
|
|
13
41
|
'Returns the file name, type, size, dimensions, tags, folder location ' +
|
|
14
42
|
'(breadcrumb), formatted upload metadata, and signed thumbnail/compressed ' +
|
|
15
|
-
'preview URLs valid for 24 hours.
|
|
16
|
-
'
|
|
43
|
+
'preview URLs valid for 24 hours. Pass include_preview=true to also embed ' +
|
|
44
|
+
'the thumbnail bytes inline (base64) so MCP clients can render the image — ' +
|
|
45
|
+
'capped at 200 KB per asset to protect token budget. Read-only.';
|
|
46
|
+
async function fetchPreview(url, fileType) {
|
|
47
|
+
const controller = new AbortController();
|
|
48
|
+
const timer = setTimeout(() => controller.abort(), PREVIEW_FETCH_TIMEOUT_MS);
|
|
49
|
+
try {
|
|
50
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
return {
|
|
53
|
+
note: `Preview skipped: upstream returned HTTP ${response.status}.`,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const buffer = await response.arrayBuffer();
|
|
57
|
+
if (buffer.byteLength > MAX_PREVIEW_BYTES) {
|
|
58
|
+
return {
|
|
59
|
+
note: `Preview skipped: ${(buffer.byteLength / 1024).toFixed(0)} KB exceeds the ${MAX_PREVIEW_BYTES / 1024} KB cap. Open the source URL directly to view.`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const mimeType = response.headers.get('content-type')?.split(';')[0]?.trim() ||
|
|
63
|
+
(fileType ? PREVIEW_MIME_TYPES[fileType.toLowerCase()] : undefined) ||
|
|
64
|
+
'image/jpeg';
|
|
65
|
+
if (!mimeType.startsWith('image/')) {
|
|
66
|
+
return {
|
|
67
|
+
note: `Preview skipped: upstream content-type "${mimeType}" is not an image.`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const data = Buffer.from(buffer).toString('base64');
|
|
71
|
+
return { imageBlock: { type: 'image', data, mimeType } };
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
75
|
+
return { note: `Preview skipped: ${message}` };
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
clearTimeout(timer);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
17
81
|
/**
|
|
18
82
|
* Build the handler for the `get_asset_details` tool.
|
|
19
83
|
*
|
|
@@ -21,7 +85,7 @@ export const GET_ASSET_DETAILS_DESCRIPTION = 'Retrieve complete metadata for a s
|
|
|
21
85
|
* `POST /digital-assets/view-detail` with `digital_assets_id` body param.
|
|
22
86
|
*/
|
|
23
87
|
export function buildGetAssetDetailsHandler(client) {
|
|
24
|
-
return async ({ asset_id }) => {
|
|
88
|
+
return async ({ asset_id, include_preview = false, }) => {
|
|
25
89
|
const result = await client.getAssetDetails(asset_id);
|
|
26
90
|
if (!result.ok) {
|
|
27
91
|
return {
|
|
@@ -42,13 +106,33 @@ export function buildGetAssetDetailsHandler(client) {
|
|
|
42
106
|
asset: result.data,
|
|
43
107
|
request_id: result.request_id,
|
|
44
108
|
};
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
109
|
+
const content = [
|
|
110
|
+
{
|
|
111
|
+
type: 'text',
|
|
112
|
+
text: JSON.stringify(output, null, 2),
|
|
113
|
+
},
|
|
114
|
+
];
|
|
115
|
+
if (include_preview) {
|
|
116
|
+
const url = result.data.thumbnail_file ?? null;
|
|
117
|
+
if (!url) {
|
|
118
|
+
content.push({
|
|
48
119
|
type: 'text',
|
|
49
|
-
text:
|
|
50
|
-
}
|
|
51
|
-
|
|
120
|
+
text: 'Preview skipped: asset has no thumbnail_file URL.',
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
const preview = await fetchPreview(url, result.data.file_type ?? undefined);
|
|
125
|
+
if (preview.imageBlock) {
|
|
126
|
+
content.push(preview.imageBlock);
|
|
127
|
+
}
|
|
128
|
+
else if (preview.note) {
|
|
129
|
+
logger.info({ asset_id, note: preview.note }, 'get_asset_details: preview not embedded');
|
|
130
|
+
content.push({ type: 'text', text: preview.note });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
content,
|
|
52
136
|
structuredContent: output,
|
|
53
137
|
};
|
|
54
138
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-asset-details.js","sourceRoot":"","sources":["../../src/tools/get-asset-details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACvD,QAAQ,CAAC,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"get-asset-details.js","sourceRoot":"","sources":["../../src/tools/get-asset-details.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@collage-dam/mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Model Context Protocol (MCP) server for the Collage Digital Asset Management platform. Exposes Collage workspaces — assets, folders, collections, share links, audit prompts — to AI clients (Claude Desktop, Cursor, ChatGPT) through a typed tool surface.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|