@metalevel/snapix-mcp-server 0.1.1
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/LICENSE +674 -0
- package/README.md +161 -0
- package/dist/client.d.ts +30 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +203 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +11 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +48 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/galleries.d.ts +4 -0
- package/dist/resources/galleries.d.ts.map +1 -0
- package/dist/resources/galleries.js +35 -0
- package/dist/resources/galleries.js.map +1 -0
- package/dist/resources/images.d.ts +4 -0
- package/dist/resources/images.d.ts.map +1 -0
- package/dist/resources/images.js +35 -0
- package/dist/resources/images.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +56 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/convert.d.ts +4 -0
- package/dist/tools/convert.d.ts.map +1 -0
- package/dist/tools/convert.js +28 -0
- package/dist/tools/convert.js.map +1 -0
- package/dist/tools/create-gallery.d.ts +4 -0
- package/dist/tools/create-gallery.d.ts.map +1 -0
- package/dist/tools/create-gallery.js +34 -0
- package/dist/tools/create-gallery.js.map +1 -0
- package/dist/tools/delete-gallery.d.ts +4 -0
- package/dist/tools/delete-gallery.d.ts.map +1 -0
- package/dist/tools/delete-gallery.js +26 -0
- package/dist/tools/delete-gallery.js.map +1 -0
- package/dist/tools/delete-image.d.ts +4 -0
- package/dist/tools/delete-image.d.ts.map +1 -0
- package/dist/tools/delete-image.js +22 -0
- package/dist/tools/delete-image.js.map +1 -0
- package/dist/tools/generate.d.ts +4 -0
- package/dist/tools/generate.d.ts.map +1 -0
- package/dist/tools/generate.js +61 -0
- package/dist/tools/generate.js.map +1 -0
- package/dist/tools/get-gallery.d.ts +4 -0
- package/dist/tools/get-gallery.d.ts.map +1 -0
- package/dist/tools/get-gallery.js +22 -0
- package/dist/tools/get-gallery.js.map +1 -0
- package/dist/tools/get-image.d.ts +4 -0
- package/dist/tools/get-image.d.ts.map +1 -0
- package/dist/tools/get-image.js +22 -0
- package/dist/tools/get-image.js.map +1 -0
- package/dist/tools/list-galleries.d.ts +4 -0
- package/dist/tools/list-galleries.d.ts.map +1 -0
- package/dist/tools/list-galleries.js +18 -0
- package/dist/tools/list-galleries.js.map +1 -0
- package/dist/tools/list-images.d.ts +4 -0
- package/dist/tools/list-images.d.ts.map +1 -0
- package/dist/tools/list-images.js +34 -0
- package/dist/tools/list-images.js.map +1 -0
- package/dist/tools/update-gallery.d.ts +4 -0
- package/dist/tools/update-gallery.d.ts.map +1 -0
- package/dist/tools/update-gallery.js +27 -0
- package/dist/tools/update-gallery.js.map +1 -0
- package/dist/tools/update-image.d.ts +4 -0
- package/dist/tools/update-image.d.ts.map +1 -0
- package/dist/tools/update-image.js +32 -0
- package/dist/tools/update-image.js.map +1 -0
- package/dist/tools/upload-image.d.ts +4 -0
- package/dist/tools/upload-image.d.ts.map +1 -0
- package/dist/tools/upload-image.js +68 -0
- package/dist/tools/upload-image.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { handleToolError } from "../errors.js";
|
|
3
|
+
export function registerUploadImageTool(server, client) {
|
|
4
|
+
server.registerTool("snapix_upload_image", {
|
|
5
|
+
title: "Upload an image",
|
|
6
|
+
description: "Upload an image to SnapiX cloud storage either from a remote URL (imageUrl) or as a base64-encoded binary (imageBase64). Exactly one of the two must be provided. Optionally convert to different formats (JPEG, PNG, WebP, AVIF), resize, and assign to galleries. Returns CDN URLs for all generated variants. Costs 1+ App credits.",
|
|
7
|
+
inputSchema: z
|
|
8
|
+
.object({
|
|
9
|
+
imageUrl: z
|
|
10
|
+
.url()
|
|
11
|
+
.optional()
|
|
12
|
+
.describe("URL of the image to upload (mutually exclusive with imageBase64)"),
|
|
13
|
+
imageBase64: z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Base64-encoded image binary (mutually exclusive with imageUrl)"),
|
|
17
|
+
contentType: z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("MIME type of the image (e.g. 'image/png', 'image/jpeg'). Recommended when using imageBase64."),
|
|
21
|
+
name: z.string().max(256).optional().describe("Name for the uploaded image"),
|
|
22
|
+
description: z.string().max(4096).optional().describe("Description of the image"),
|
|
23
|
+
formatOptions: z
|
|
24
|
+
.array(z.object({
|
|
25
|
+
format: z.enum(["jpeg", "png", "webp", "avif"]).describe("Output image format"),
|
|
26
|
+
}))
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Array of output format options. Each creates a variant."),
|
|
29
|
+
resizeOptions: z
|
|
30
|
+
.array(z.object({
|
|
31
|
+
width: z.number().positive().optional().describe("Target width in pixels"),
|
|
32
|
+
height: z.number().positive().optional().describe("Target height in pixels"),
|
|
33
|
+
}))
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Array of resize options. Each creates a variant. Empty object keeps original size."),
|
|
36
|
+
ratio: z
|
|
37
|
+
.number()
|
|
38
|
+
.positive()
|
|
39
|
+
.optional()
|
|
40
|
+
.describe("Aspect ratio as a number (e.g., 1.777 for 16:9, 1.333 for 4:3)"),
|
|
41
|
+
galleries: z
|
|
42
|
+
.array(z.uuid())
|
|
43
|
+
.optional()
|
|
44
|
+
.describe("Array of gallery IDs to add the image to"),
|
|
45
|
+
bucketKey: z
|
|
46
|
+
.string()
|
|
47
|
+
.optional()
|
|
48
|
+
.describe("Storage bucket key (defaults to primary bucket)"),
|
|
49
|
+
})
|
|
50
|
+
.refine((data) => !!(data.imageUrl ?? data.imageBase64), {
|
|
51
|
+
message: "Either imageUrl or imageBase64 must be provided",
|
|
52
|
+
})
|
|
53
|
+
.refine((data) => !(data.imageUrl && data.imageBase64), {
|
|
54
|
+
message: "imageUrl and imageBase64 are mutually exclusive — provide only one",
|
|
55
|
+
}),
|
|
56
|
+
}, async (params) => {
|
|
57
|
+
try {
|
|
58
|
+
const result = await client.uploadImage(params);
|
|
59
|
+
return {
|
|
60
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return handleToolError(error);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=upload-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-image.js","sourceRoot":"","sources":["../../src/tools/upload-image.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export interface SnapixClientConfig {
|
|
2
|
+
baseUrl: string;
|
|
3
|
+
apiKey: string;
|
|
4
|
+
}
|
|
5
|
+
export type CreateServerOptions = Omit<SnapixClientConfig, "baseUrl"> & {
|
|
6
|
+
baseUrl?: string;
|
|
7
|
+
};
|
|
8
|
+
export interface ListImagesParams {
|
|
9
|
+
page?: number;
|
|
10
|
+
limit?: number;
|
|
11
|
+
sort?: "asc" | "desc";
|
|
12
|
+
bucketKey?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface UploadImageParams {
|
|
15
|
+
imageUrl?: string;
|
|
16
|
+
imageBase64?: string;
|
|
17
|
+
imageContentType?: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
contentType?: string;
|
|
21
|
+
ratio?: number;
|
|
22
|
+
resizeOptions?: Record<string, unknown>[];
|
|
23
|
+
formatOptions?: {
|
|
24
|
+
format: string;
|
|
25
|
+
options?: Record<string, unknown>;
|
|
26
|
+
}[];
|
|
27
|
+
galleries?: string[];
|
|
28
|
+
bucketKey?: string;
|
|
29
|
+
prefix?: string;
|
|
30
|
+
storageKeyHandling?: "unique" | "default";
|
|
31
|
+
}
|
|
32
|
+
export interface GenerateImageParams {
|
|
33
|
+
promptText: string;
|
|
34
|
+
imageUrl?: string;
|
|
35
|
+
name?: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
ratio?: number;
|
|
38
|
+
resizeOptions?: Record<string, unknown>[];
|
|
39
|
+
formatOptions?: {
|
|
40
|
+
format: string;
|
|
41
|
+
options?: Record<string, unknown>;
|
|
42
|
+
}[];
|
|
43
|
+
galleries?: string[];
|
|
44
|
+
bucketKey?: string;
|
|
45
|
+
aiConfig?: Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
export interface UpdateImageParams {
|
|
48
|
+
name?: string;
|
|
49
|
+
description?: string;
|
|
50
|
+
galleries?: string[];
|
|
51
|
+
formatOptions?: {
|
|
52
|
+
format: string;
|
|
53
|
+
options?: Record<string, unknown>;
|
|
54
|
+
};
|
|
55
|
+
resizeOptions?: Record<string, unknown>;
|
|
56
|
+
}
|
|
57
|
+
export interface CreateGalleryParams {
|
|
58
|
+
name: string;
|
|
59
|
+
isPublic?: boolean;
|
|
60
|
+
bucketKey?: string;
|
|
61
|
+
imageIds?: string[];
|
|
62
|
+
}
|
|
63
|
+
export interface UpdateGalleryParams {
|
|
64
|
+
name?: string;
|
|
65
|
+
isPublic?: boolean;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,GAAG;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1C,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,CAAC;IACxE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC1C,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,CAAC;IACxE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@metalevel/snapix-mcp-server",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"mcpBaseUrl": "https://www.snapix.space",
|
|
5
|
+
"description": "MCP server for SnapiX - image optimization, conversion, generation, and gallery management via the Model Context Protocol",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "pa4080",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/pa4080/snapix-mcp-server"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://snapix.metalevel.tech/docs/mcp",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"mcp",
|
|
16
|
+
"model-context-protocol",
|
|
17
|
+
"snapix",
|
|
18
|
+
"image-optimization",
|
|
19
|
+
"image-conversion",
|
|
20
|
+
"ai",
|
|
21
|
+
"llm"
|
|
22
|
+
],
|
|
23
|
+
"bin": {
|
|
24
|
+
"snapix-mcp-server": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"main": "./dist/server.js",
|
|
27
|
+
"types": "./dist/server.d.ts",
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"import": "./dist/server.js",
|
|
31
|
+
"types": "./dist/server.d.ts"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"README.md",
|
|
37
|
+
"LICENSE"
|
|
38
|
+
],
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
41
|
+
"zod": "^4.3.6"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"typescript": "^5.9.3"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=18.0.0"
|
|
48
|
+
},
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "tsc",
|
|
51
|
+
"dev": "tsc --watch",
|
|
52
|
+
"start": "node dist/index.js"
|
|
53
|
+
}
|
|
54
|
+
}
|