@just-every/design 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/dist/server.js ADDED
@@ -0,0 +1,368 @@
1
+ /**
2
+ * MCP Server for design-app (design.justevery.com API)
3
+ */
4
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
5
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
6
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
7
+ import { readFile } from 'node:fs/promises';
8
+ import { fileURLToPath } from 'node:url';
9
+ import { DesignAppClient } from './design-client.js';
10
+ export async function startMcpServer(options) {
11
+ const config = options.config;
12
+ const sessionToken = config.sessionToken ?? '';
13
+ if (!sessionToken) {
14
+ throw new Error('Not authenticated. Run `npx @just-every/design auth login` first (or set DESIGN_MCP_SESSION_TOKEN).');
15
+ }
16
+ const version = await resolvePackageVersion();
17
+ const client = new DesignAppClient({
18
+ designOrigin: config.designOrigin,
19
+ sessionToken,
20
+ activeAccountSlug: config.activeAccountSlug,
21
+ });
22
+ const server = new Server({
23
+ name: 'every-design',
24
+ version,
25
+ }, {
26
+ capabilities: {
27
+ tools: {},
28
+ },
29
+ });
30
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
31
+ tools: [
32
+ {
33
+ name: 'design.create',
34
+ description: 'Create a design run in Every Design (async). Use this to generate things like: ' +
35
+ 'web/landing page designs (HTML/CSS + assets), logos, icons, marketing graphics/illustrations, ' +
36
+ 'photorealistic images, backgrounds/patterns, and even 3D assets (GLB). ' +
37
+ 'Attach 1+ source images via `sourceImages` (local path, URL, or base64) or pass web URLs via `referenceUrls`/`references`. ' +
38
+ 'Returns a run id; follow up with `design.wait`, `design.get`, and `design.artifacts.*`.',
39
+ inputSchema: {
40
+ type: 'object',
41
+ properties: {
42
+ prompt: { type: 'string', description: 'Prompt for the design run.' },
43
+ output: {
44
+ type: 'object',
45
+ description: 'Optional output controls. If omitted, the system tries to infer the best kind from the prompt.',
46
+ properties: {
47
+ designKind: {
48
+ type: 'string',
49
+ description: 'What to generate. Use html for websites/UIs; 3dasset for GLB output.',
50
+ enum: ['auto', 'logo', 'icon', 'graphic', 'photo', 'background', '3dasset', 'html'],
51
+ },
52
+ format: {
53
+ type: 'string',
54
+ description: 'Optional format hint for image outputs.',
55
+ enum: ['png', 'webp'],
56
+ },
57
+ assetFormats: {
58
+ type: 'array',
59
+ description: 'Optional formats for 3d assets (glb is always produced).',
60
+ items: { type: 'string', enum: ['glb', 'fbx'] },
61
+ },
62
+ },
63
+ additionalProperties: true,
64
+ },
65
+ style: {
66
+ type: 'string',
67
+ description: 'Optional style string appended to the prompt (e.g. “minimal, Swiss, high-contrast”).',
68
+ },
69
+ referenceUrls: {
70
+ type: 'array',
71
+ description: 'Optional web-accessible URLs to use as visual reference/inspiration.',
72
+ items: { type: 'string' },
73
+ maxItems: 8,
74
+ },
75
+ references: {
76
+ type: 'array',
77
+ description: 'Optional structured references (advanced). Most users should prefer `sourceImages` or `referenceUrls`.',
78
+ items: {
79
+ type: 'object',
80
+ properties: {
81
+ type: { type: 'string', enum: ['url', 'path'] },
82
+ url: { type: 'string' },
83
+ path: { type: 'string' },
84
+ filename: { type: 'string' },
85
+ userProvided: { type: 'boolean' },
86
+ },
87
+ required: ['type'],
88
+ additionalProperties: true,
89
+ },
90
+ maxItems: 8,
91
+ },
92
+ sourceImages: {
93
+ type: 'array',
94
+ description: 'Optional images to upload to Every Design and use as references. Supports local file paths, URLs, and base64.',
95
+ items: {
96
+ type: 'object',
97
+ properties: {
98
+ type: { type: 'string', enum: ['path', 'url', 'base64'] },
99
+ path: { type: 'string', description: 'Local file path (png/jpg).', },
100
+ url: { type: 'string', description: 'Public URL of an image.', },
101
+ data: { type: 'string', description: 'Base64 payload (optionally a data: URL).', },
102
+ mime: { type: 'string', description: 'MIME type for base64 data (e.g. image/png).', },
103
+ filename: { type: 'string', description: 'Optional filename override.', },
104
+ },
105
+ required: ['type'],
106
+ additionalProperties: false,
107
+ },
108
+ maxItems: 8,
109
+ },
110
+ config: {
111
+ type: 'object',
112
+ description: 'Advanced pass-through config merged with the convenience fields above. Useful keys include: ' +
113
+ '`output` (designKind/format/assetFormats), `references` (url/path refs), `imageLoop`, `codeLoop`, and `refinementLoop`.',
114
+ additionalProperties: true,
115
+ },
116
+ },
117
+ required: ['prompt'],
118
+ additionalProperties: false,
119
+ },
120
+ },
121
+ {
122
+ name: 'design.list',
123
+ description: 'List recent design runs for the currently selected company (chosen during auth login).',
124
+ inputSchema: {
125
+ type: 'object',
126
+ properties: {
127
+ page: { type: 'number', description: 'Page number (default 1).' },
128
+ limit: { type: 'number', description: 'Page size (default 20, max 50).' },
129
+ },
130
+ additionalProperties: false,
131
+ },
132
+ },
133
+ {
134
+ name: 'design.get',
135
+ description: 'Fetch a single design run by id (status, prompt, timestamps, etc).',
136
+ inputSchema: {
137
+ type: 'object',
138
+ properties: {
139
+ runId: { type: 'string' },
140
+ },
141
+ required: ['runId'],
142
+ additionalProperties: false,
143
+ },
144
+ },
145
+ {
146
+ name: 'design.wait',
147
+ description: 'Wait for a run to finish by polling until status is no longer pending/running. Returns the final run object.',
148
+ inputSchema: {
149
+ type: 'object',
150
+ properties: {
151
+ runId: { type: 'string' },
152
+ timeoutSeconds: { type: 'number', description: 'Max wait time (default 900).' },
153
+ intervalSeconds: { type: 'number', description: 'Polling interval (default 5).' },
154
+ },
155
+ required: ['runId'],
156
+ additionalProperties: false,
157
+ },
158
+ },
159
+ {
160
+ name: 'design.events',
161
+ description: 'Fetch structured events/logs for a run (useful for debugging failures).',
162
+ inputSchema: {
163
+ type: 'object',
164
+ properties: {
165
+ runId: { type: 'string' },
166
+ },
167
+ required: ['runId'],
168
+ additionalProperties: false,
169
+ },
170
+ },
171
+ {
172
+ name: 'design.artifacts.list',
173
+ description: 'List artifacts for a run (e.g. png/webp/html/css/glb, previews, logs).',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ runId: { type: 'string' },
178
+ },
179
+ required: ['runId'],
180
+ additionalProperties: false,
181
+ },
182
+ },
183
+ {
184
+ name: 'design.artifacts.download',
185
+ description: 'Download an artifact to a local cache directory and return the file path (for opening/viewing locally).',
186
+ inputSchema: {
187
+ type: 'object',
188
+ properties: {
189
+ runId: { type: 'string' },
190
+ artifactId: { type: 'string' },
191
+ },
192
+ required: ['runId', 'artifactId'],
193
+ additionalProperties: false,
194
+ },
195
+ },
196
+ ],
197
+ }));
198
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
199
+ const tool = request.params.name;
200
+ const input = request.params.arguments;
201
+ try {
202
+ switch (tool) {
203
+ case 'design.create': {
204
+ const prompt = String(input?.prompt ?? '').trim();
205
+ if (!prompt)
206
+ throw new Error('Missing required argument: prompt');
207
+ const cfgBase = input?.config && typeof input.config === 'object' && !Array.isArray(input.config)
208
+ ? { ...input.config }
209
+ : {};
210
+ if (typeof input?.style === 'string' && input.style.trim()) {
211
+ cfgBase.style = input.style.trim();
212
+ }
213
+ const outputInput = input?.output && typeof input.output === 'object' && !Array.isArray(input.output)
214
+ ? input.output
215
+ : undefined;
216
+ if (outputInput) {
217
+ const merged = { ...cfgBase.output, ...outputInput };
218
+ const maybeKind = typeof merged.designKind === 'string' ? merged.designKind.trim().toLowerCase() : '';
219
+ if (maybeKind === 'auto') {
220
+ delete merged.designKind;
221
+ }
222
+ cfgBase.output = merged;
223
+ }
224
+ const refs = [];
225
+ if (Array.isArray(cfgBase.references)) {
226
+ for (const ref of cfgBase.references) {
227
+ if (!ref || typeof ref !== 'object')
228
+ continue;
229
+ refs.push({ ...ref });
230
+ }
231
+ }
232
+ if (Array.isArray(input?.referenceUrls)) {
233
+ for (const raw of input.referenceUrls) {
234
+ if (typeof raw !== 'string')
235
+ continue;
236
+ const url = raw.trim();
237
+ if (!url)
238
+ continue;
239
+ refs.push({ type: 'url', url, userProvided: true });
240
+ }
241
+ }
242
+ if (Array.isArray(input?.references)) {
243
+ for (const ref of input.references) {
244
+ if (!ref || typeof ref !== 'object')
245
+ continue;
246
+ refs.push({ ...ref });
247
+ }
248
+ }
249
+ if (Array.isArray(input?.sourceImages) && input.sourceImages.length > 0) {
250
+ const uploadedRefs = await client.uploadSourceImages(input.sourceImages);
251
+ for (const ref of uploadedRefs) {
252
+ refs.push(ref);
253
+ }
254
+ }
255
+ if (refs.length > 0) {
256
+ cfgBase.references = refs;
257
+ }
258
+ const created = await client.createRun({ prompt, config: Object.keys(cfgBase).length ? cfgBase : undefined });
259
+ return { content: [{ type: 'text', text: pretty(created) }] };
260
+ }
261
+ case 'design.list': {
262
+ const page = typeof input?.page === 'number' ? input.page : undefined;
263
+ const limit = typeof input?.limit === 'number' ? input.limit : undefined;
264
+ const runs = await client.listRuns({ page, limit });
265
+ return { content: [{ type: 'text', text: pretty(runs) }] };
266
+ }
267
+ case 'design.get': {
268
+ const runId = String(input?.runId ?? '').trim();
269
+ if (!runId)
270
+ throw new Error('Missing required argument: runId');
271
+ const run = await client.getRun(runId);
272
+ return { content: [{ type: 'text', text: pretty(run) }] };
273
+ }
274
+ case 'design.wait': {
275
+ const runId = String(input?.runId ?? '').trim();
276
+ if (!runId)
277
+ throw new Error('Missing required argument: runId');
278
+ const timeoutSeconds = typeof input?.timeoutSeconds === 'number' ? input.timeoutSeconds : 900;
279
+ const intervalSeconds = typeof input?.intervalSeconds === 'number' ? input.intervalSeconds : 5;
280
+ const run = await waitForRun(client, runId, { timeoutSeconds, intervalSeconds });
281
+ return { content: [{ type: 'text', text: pretty(run) }] };
282
+ }
283
+ case 'design.events': {
284
+ const runId = String(input?.runId ?? '').trim();
285
+ if (!runId)
286
+ throw new Error('Missing required argument: runId');
287
+ const events = await client.getRunEvents(runId);
288
+ return { content: [{ type: 'text', text: pretty(events) }] };
289
+ }
290
+ case 'design.artifacts.list': {
291
+ const runId = String(input?.runId ?? '').trim();
292
+ if (!runId)
293
+ throw new Error('Missing required argument: runId');
294
+ const artifacts = await client.listArtifacts(runId);
295
+ return { content: [{ type: 'text', text: pretty(artifacts) }] };
296
+ }
297
+ case 'design.artifacts.download': {
298
+ const runId = String(input?.runId ?? '').trim();
299
+ const artifactId = String(input?.artifactId ?? '').trim();
300
+ if (!runId)
301
+ throw new Error('Missing required argument: runId');
302
+ if (!artifactId)
303
+ throw new Error('Missing required argument: artifactId');
304
+ let fileNameHint;
305
+ try {
306
+ const list = await client.listArtifacts(runId);
307
+ const found = list?.artifacts?.find?.((entry) => String(entry?.id ?? '') === artifactId);
308
+ const storageKey = typeof found?.storageKey === 'string' ? found.storageKey : '';
309
+ if (storageKey) {
310
+ fileNameHint = storageKey.split('/').pop() || undefined;
311
+ }
312
+ }
313
+ catch {
314
+ // Best-effort.
315
+ }
316
+ const artifact = await client.downloadArtifactToCache(runId, artifactId, { fileNameHint });
317
+ return { content: [{ type: 'text', text: pretty(artifact) }] };
318
+ }
319
+ default:
320
+ throw new Error(`Unknown tool: ${tool}`);
321
+ }
322
+ }
323
+ catch (error) {
324
+ const message = error instanceof Error ? error.message : String(error);
325
+ return { content: [{ type: 'text', text: `Error: ${message}` }], isError: true };
326
+ }
327
+ });
328
+ const transport = new StdioServerTransport();
329
+ await server.connect(transport);
330
+ }
331
+ async function waitForRun(client, runId, options) {
332
+ const terminalStates = new Set(['completed', 'complete', 'failed', 'cancelled', 'canceled', 'error']);
333
+ const activeStates = new Set(['pending', 'running', 'queued']);
334
+ const deadline = Date.now() + options.timeoutSeconds * 1000;
335
+ let lastStatus = '';
336
+ while (Date.now() < deadline) {
337
+ const run = await client.getRun(runId);
338
+ const status = String(run?.run?.status ?? run?.status ?? '').toLowerCase();
339
+ if (status && status !== lastStatus) {
340
+ console.error(`[design.wait] status=${status}`);
341
+ lastStatus = status;
342
+ }
343
+ if (terminalStates.has(status)) {
344
+ return run;
345
+ }
346
+ if (status && !activeStates.has(status)) {
347
+ // Unknown status: return immediately.
348
+ return run;
349
+ }
350
+ await new Promise((resolve) => setTimeout(resolve, options.intervalSeconds * 1000));
351
+ }
352
+ throw new Error(`Timed out after ${options.timeoutSeconds}s waiting for run ${runId}`);
353
+ }
354
+ function pretty(value) {
355
+ return JSON.stringify(value, null, 2);
356
+ }
357
+ async function resolvePackageVersion() {
358
+ try {
359
+ const pkgPath = fileURLToPath(new URL('../package.json', import.meta.url));
360
+ const raw = await readFile(pkgPath, 'utf8');
361
+ const parsed = JSON.parse(raw);
362
+ return typeof parsed?.version === 'string' && parsed.version.trim() ? parsed.version.trim() : '0.0.0';
363
+ }
364
+ catch {
365
+ return '0.0.0';
366
+ }
367
+ }
368
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@just-every/design",
3
+ "version": "0.1.1",
4
+ "type": "module",
5
+ "description": "MCP stdio server for design.justevery.com (Design App API)",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": "./dist/cli.js",
9
+ "files": [
10
+ "dist/**/*",
11
+ "README.md",
12
+ "package.json"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "start": "node dist/cli.js",
18
+ "test": "vitest",
19
+ "test:run": "vitest run",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "dependencies": {
23
+ "@modelcontextprotocol/sdk": "^1.0.4"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^22.10.2",
27
+ "typescript": "^5.8.3",
28
+ "vitest": "^3.2.4"
29
+ },
30
+ "keywords": [
31
+ "mcp",
32
+ "mcp-server",
33
+ "design",
34
+ "just-every",
35
+ "cloudflare",
36
+ "daytona"
37
+ ],
38
+ "author": "Just Every",
39
+ "license": "MIT",
40
+ "engines": {
41
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
42
+ }
43
+ }