@topazlabs/mcp 0.1.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 +96 -0
- package/dist/api/client.d.ts +31 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +150 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/models.d.ts +19 -0
- package/dist/api/models.d.ts.map +1 -0
- package/dist/api/models.js +75 -0
- package/dist/api/models.js.map +1 -0
- package/dist/api/types.d.ts +40 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/apps/viewer.html +51 -0
- package/dist/lib/create-main.d.ts +9 -0
- package/dist/lib/create-main.d.ts.map +1 -0
- package/dist/lib/create-main.js +27 -0
- package/dist/lib/create-main.js.map +1 -0
- package/dist/lib/errors.d.ts +16 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +17 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/fetch-url.d.ts +18 -0
- package/dist/lib/fetch-url.d.ts.map +1 -0
- package/dist/lib/fetch-url.js +239 -0
- package/dist/lib/fetch-url.js.map +1 -0
- package/dist/lib/http-server.d.ts +18 -0
- package/dist/lib/http-server.d.ts.map +1 -0
- package/dist/lib/http-server.js +225 -0
- package/dist/lib/http-server.js.map +1 -0
- package/dist/lib/path-security.d.ts +21 -0
- package/dist/lib/path-security.d.ts.map +1 -0
- package/dist/lib/path-security.js +210 -0
- package/dist/lib/path-security.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +8 -0
- package/dist/main.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +108 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/compare.d.ts +9 -0
- package/dist/tools/compare.d.ts.map +1 -0
- package/dist/tools/compare.js +133 -0
- package/dist/tools/compare.js.map +1 -0
- package/dist/tools/enhance.d.ts +22 -0
- package/dist/tools/enhance.d.ts.map +1 -0
- package/dist/tools/enhance.js +175 -0
- package/dist/tools/enhance.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as os from "node:os";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import sharp from "sharp";
|
|
5
|
+
import { loadImage } from "../lib/fetch-url.js";
|
|
6
|
+
import { readImageFile } from "../api/client.js";
|
|
7
|
+
import { autoSelectModel, ENHANCE_MODELS, FOUR_K_WIDTH } from "../api/models.js";
|
|
8
|
+
/** Parse the size parameter into target pixel dimensions. */
|
|
9
|
+
export function resolveSize(size, origWidth, origHeight) {
|
|
10
|
+
if (!size || Object.keys(size).length === 0) {
|
|
11
|
+
// Default: if under 4K, upscale to 4K width proportionally. Otherwise keep at 1x.
|
|
12
|
+
if (origWidth < FOUR_K_WIDTH) {
|
|
13
|
+
const scale = FOUR_K_WIDTH / origWidth;
|
|
14
|
+
return {
|
|
15
|
+
width: FOUR_K_WIDTH,
|
|
16
|
+
height: Math.round(origHeight * scale),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return { width: origWidth, height: origHeight };
|
|
20
|
+
}
|
|
21
|
+
if (size.scale !== undefined) {
|
|
22
|
+
return {
|
|
23
|
+
width: Math.round(origWidth * size.scale),
|
|
24
|
+
height: Math.round(origHeight * size.scale),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (size.width !== undefined && size.height !== undefined) {
|
|
28
|
+
return { width: size.width, height: size.height };
|
|
29
|
+
}
|
|
30
|
+
if (size.width !== undefined) {
|
|
31
|
+
const scale = size.width / origWidth;
|
|
32
|
+
return { width: size.width, height: Math.round(origHeight * scale) };
|
|
33
|
+
}
|
|
34
|
+
if (size.height !== undefined) {
|
|
35
|
+
const scale = size.height / origHeight;
|
|
36
|
+
return { width: Math.round(origWidth * scale), height: size.height };
|
|
37
|
+
}
|
|
38
|
+
return { width: origWidth, height: origHeight };
|
|
39
|
+
}
|
|
40
|
+
export async function handleEnhance(input, client) {
|
|
41
|
+
if (!input.image) {
|
|
42
|
+
return {
|
|
43
|
+
content: [{ type: "text", text: "Error: image is required." }],
|
|
44
|
+
isError: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const isUrl = input.image.startsWith("http://") || input.image.startsWith("https://");
|
|
48
|
+
// Load image data to get dimensions
|
|
49
|
+
let imageBuffer;
|
|
50
|
+
let imageFilename;
|
|
51
|
+
if (isUrl) {
|
|
52
|
+
imageBuffer = await loadImage(input.image);
|
|
53
|
+
imageFilename = "image.jpg";
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const result = readImageFile(input.image);
|
|
57
|
+
imageBuffer = result.buffer;
|
|
58
|
+
imageFilename = result.filename;
|
|
59
|
+
}
|
|
60
|
+
// Get dimensions using sharp
|
|
61
|
+
const metadata = await sharp(imageBuffer).metadata();
|
|
62
|
+
const origWidth = metadata.width ?? 0;
|
|
63
|
+
const origHeight = metadata.height ?? 0;
|
|
64
|
+
if (origWidth === 0 || origHeight === 0) {
|
|
65
|
+
return {
|
|
66
|
+
content: [
|
|
67
|
+
{ type: "text", text: "Error: Could not determine image dimensions." },
|
|
68
|
+
],
|
|
69
|
+
isError: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// Resolve target size
|
|
73
|
+
const targetSize = resolveSize(input.size, origWidth, origHeight);
|
|
74
|
+
// Select model
|
|
75
|
+
let selectedModel;
|
|
76
|
+
let faceEnhancement = false;
|
|
77
|
+
if (input.model) {
|
|
78
|
+
if (!(input.model in ENHANCE_MODELS)) {
|
|
79
|
+
const available = Object.keys(ENHANCE_MODELS).join(", ");
|
|
80
|
+
return {
|
|
81
|
+
content: [
|
|
82
|
+
{
|
|
83
|
+
type: "text",
|
|
84
|
+
text: `Error: Unknown model "${input.model}". Available: ${available}`,
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
isError: true,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
selectedModel = input.model;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const auto = autoSelectModel(origWidth);
|
|
94
|
+
selectedModel = auto.model;
|
|
95
|
+
faceEnhancement = auto.faceEnhancement;
|
|
96
|
+
}
|
|
97
|
+
// Build API request
|
|
98
|
+
const req = {
|
|
99
|
+
model: selectedModel,
|
|
100
|
+
output_width: targetSize.width,
|
|
101
|
+
output_height: targetSize.height,
|
|
102
|
+
output_format: "png",
|
|
103
|
+
face_enhancement: faceEnhancement || undefined,
|
|
104
|
+
image: imageBuffer,
|
|
105
|
+
image_filename: imageFilename,
|
|
106
|
+
};
|
|
107
|
+
const startTime = Date.now();
|
|
108
|
+
try {
|
|
109
|
+
const { process_id } = await client.enhance(req);
|
|
110
|
+
const status = await client.pollUntilComplete(process_id);
|
|
111
|
+
// Download result
|
|
112
|
+
const outputDir = path.join(os.tmpdir(), "topaz-mcp");
|
|
113
|
+
const outputPath = await client.downloadToFile(process_id, outputDir);
|
|
114
|
+
const elapsedSec = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
115
|
+
const modelInfo = ENHANCE_MODELS[selectedModel];
|
|
116
|
+
const summary = [
|
|
117
|
+
`✅ Enhancement complete`,
|
|
118
|
+
``,
|
|
119
|
+
`**Model:** ${selectedModel} (${modelInfo.type})`,
|
|
120
|
+
`**Input:** ${origWidth}×${origHeight}`,
|
|
121
|
+
`**Output:** ${status.output_width ?? targetSize.width}×${status.output_height ?? targetSize.height}`,
|
|
122
|
+
`**Time:** ${elapsedSec}s`,
|
|
123
|
+
`**File:** ${outputPath}`,
|
|
124
|
+
].join("\n");
|
|
125
|
+
const content = [
|
|
126
|
+
{ type: "text", text: summary },
|
|
127
|
+
];
|
|
128
|
+
// Include enhanced image inline if small enough (<5MB)
|
|
129
|
+
try {
|
|
130
|
+
const outputBuffer = fs.readFileSync(outputPath);
|
|
131
|
+
if (outputBuffer.length < 5 * 1024 * 1024) {
|
|
132
|
+
content.push({
|
|
133
|
+
type: "image",
|
|
134
|
+
data: outputBuffer.toString("base64"),
|
|
135
|
+
mimeType: "image/png",
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Image too large or read failed — skip inline
|
|
141
|
+
}
|
|
142
|
+
// Include viewer resource reference
|
|
143
|
+
const downloadInfo = await client.getDownloadUrl(process_id);
|
|
144
|
+
content.push({
|
|
145
|
+
type: "resource",
|
|
146
|
+
resource: {
|
|
147
|
+
uri: "ui://topaz/viewer",
|
|
148
|
+
mimeType: "text/html",
|
|
149
|
+
text: buildViewerHtml(downloadInfo.input_download_url ?? "", downloadInfo.download_url),
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
return { content };
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
156
|
+
return {
|
|
157
|
+
content: [{ type: "text", text: `Error enhancing image: ${message}` }],
|
|
158
|
+
isError: true,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Build a minimal viewer HTML that loads the before/after images from URLs.
|
|
164
|
+
* For the full viewer resource, the compare tool is more appropriate.
|
|
165
|
+
*/
|
|
166
|
+
function buildViewerHtml(beforeUrl, afterUrl) {
|
|
167
|
+
const data = JSON.stringify({
|
|
168
|
+
before: beforeUrl,
|
|
169
|
+
after: afterUrl,
|
|
170
|
+
labelBefore: "Original",
|
|
171
|
+
labelAfter: "Enhanced",
|
|
172
|
+
}).replace(/</g, "\\u003c");
|
|
173
|
+
return `<!DOCTYPE html><html><head><script>window.__COMPARE_DATA__=${data};</script></head><body><p>Before/after viewer — use the compare tool for the full interactive experience.</p></body></html>`;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=enhance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhance.js","sourceRoot":"","sources":["../../src/tools/enhance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAe,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEjF,6DAA6D;AAC7D,MAAM,UAAU,WAAW,CACzB,IAAqE,EACrE,SAAiB,EACjB,UAAkB;IAElB,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,kFAAkF;QAClF,IAAI,SAAS,GAAG,YAAY,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,YAAY,GAAG,SAAS,CAAC;YACvC,OAAO;gBACL,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;aACvC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAClD,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YACzC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;SAC5C,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC;IACvE,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QACvC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACvE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAClD,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAmB,EACnB,MAAmB;IAEnB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;YAC9D,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAE1E,oCAAoC;IACpC,IAAI,WAAmB,CAAC;IACxB,IAAI,aAAqB,CAAC;IAE1B,IAAI,KAAK,EAAE,CAAC;QACV,WAAW,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,aAAa,GAAG,WAAW,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1C,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;IAExC,IAAI,SAAS,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8CAA8C,EAAE;aACvE;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAElE,eAAe;IACf,IAAI,aAA2B,CAAC;IAChC,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,cAAc,CAAC,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yBAAyB,KAAK,CAAC,KAAK,iBAAiB,SAAS,EAAE;qBACvE;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,aAAa,GAAG,KAAK,CAAC,KAAqB,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACxC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3B,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IACzC,CAAC;IAED,oBAAoB;IACpB,MAAM,GAAG,GAAmB;QAC1B,KAAK,EAAE,aAAa;QACpB,YAAY,EAAE,UAAU,CAAC,KAAK;QAC9B,aAAa,EAAE,UAAU,CAAC,MAAM;QAChC,aAAa,EAAE,KAAK;QACpB,gBAAgB,EAAE,eAAe,IAAI,SAAS;QAC9C,KAAK,EAAE,WAAW;QAClB,cAAc,EAAE,aAAa;KAC9B,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAE1D,kBAAkB;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,SAAS,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;QAEhD,MAAM,OAAO,GAAG;YACd,wBAAwB;YACxB,EAAE;YACF,cAAc,aAAa,KAAK,SAAS,CAAC,IAAI,GAAG;YACjD,cAAc,SAAS,IAAI,UAAU,EAAE;YACvC,eAAe,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC,aAAa,IAAI,UAAU,CAAC,MAAM,EAAE;YACrG,aAAa,UAAU,GAAG;YAC1B,aAAa,UAAU,EAAE;SAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,OAAO,GAA8B;YACzC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;SAChC,CAAC;QAEF,uDAAuD;QACvD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACrC,QAAQ,EAAE,WAAW;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;QAED,oCAAoC;QACpC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACR,GAAG,EAAE,mBAAmB;gBACxB,QAAQ,EAAE,WAAW;gBACrB,IAAI,EAAE,eAAe,CACnB,YAAY,CAAC,kBAAkB,IAAI,EAAE,EACrC,YAAY,CAAC,YAAY,CAC1B;aACF;SACF,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,OAAO,EAAE,EAAE,CAAC;YACtE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,SAAiB,EAAE,QAAgB;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,UAAU;QACvB,UAAU,EAAE,UAAU;KACvB,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE5B,OAAO,8DAA8D,IAAI,6HAA6H,CAAC;AACzM,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@topazlabs/mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Topaz Labs MCP server — AI image enhancement and comparison for LLMs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"topaz-mcp": "./dist/main.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/main.js",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build:app": "npx --no-install vite build",
|
|
15
|
+
"build:server": "tsc -p tsconfig.server.json",
|
|
16
|
+
"build": "npm run build:app && npm run build:server",
|
|
17
|
+
"dev": "tsc -p tsconfig.server.json --watch",
|
|
18
|
+
"start": "node dist/main.js"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"mcp",
|
|
22
|
+
"image",
|
|
23
|
+
"enhance",
|
|
24
|
+
"upscale",
|
|
25
|
+
"compare",
|
|
26
|
+
"topaz",
|
|
27
|
+
"ai",
|
|
28
|
+
"mcp-server"
|
|
29
|
+
],
|
|
30
|
+
"author": "Topaz Labs <hello@topazlabs.com>",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
34
|
+
"sharp": "^0.33.5",
|
|
35
|
+
"zod": "^3.25.76"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^22.19.11",
|
|
39
|
+
"typescript": "5.7",
|
|
40
|
+
"vite": "^6.1.0",
|
|
41
|
+
"vite-plugin-singlefile": "^2.0.3"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=20"
|
|
45
|
+
},
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "https://github.com/EricYangTL/topaz-mcp.git",
|
|
49
|
+
"directory": "packages/mcp"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/EricYangTL/topaz-mcp#readme"
|
|
52
|
+
}
|