@mise-en-scene/server 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.
Files changed (98) hide show
  1. package/README.md +221 -0
  2. package/dist/export/index.d.ts +10 -0
  3. package/dist/export/index.d.ts.map +1 -0
  4. package/dist/export/index.js +53 -0
  5. package/dist/export/index.js.map +1 -0
  6. package/dist/export/pdf-export.d.ts +8 -0
  7. package/dist/export/pdf-export.d.ts.map +1 -0
  8. package/dist/export/pdf-export.js +17 -0
  9. package/dist/export/pdf-export.js.map +1 -0
  10. package/dist/export/presets.d.ts +4 -0
  11. package/dist/export/presets.d.ts.map +1 -0
  12. package/dist/export/presets.js +22 -0
  13. package/dist/export/presets.js.map +1 -0
  14. package/dist/export/puppeteer-manager.d.ts +8 -0
  15. package/dist/export/puppeteer-manager.d.ts.map +1 -0
  16. package/dist/export/puppeteer-manager.js +23 -0
  17. package/dist/export/puppeteer-manager.js.map +1 -0
  18. package/dist/export/raster-export.d.ts +11 -0
  19. package/dist/export/raster-export.d.ts.map +1 -0
  20. package/dist/export/raster-export.js +22 -0
  21. package/dist/export/raster-export.js.map +1 -0
  22. package/dist/export/svg-export.d.ts +2 -0
  23. package/dist/export/svg-export.d.ts.map +1 -0
  24. package/dist/export/svg-export.js +24 -0
  25. package/dist/export/svg-export.js.map +1 -0
  26. package/dist/feedback.d.ts +4 -0
  27. package/dist/feedback.d.ts.map +1 -0
  28. package/dist/feedback.js +23 -0
  29. package/dist/feedback.js.map +1 -0
  30. package/dist/http-server.d.ts +15 -0
  31. package/dist/http-server.d.ts.map +1 -0
  32. package/dist/http-server.js +113 -0
  33. package/dist/http-server.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +30 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/mcp-server.d.ts +435 -0
  39. package/dist/mcp-server.d.ts.map +1 -0
  40. package/dist/mcp-server.js +220 -0
  41. package/dist/mcp-server.js.map +1 -0
  42. package/dist/preview.d.ts +2 -0
  43. package/dist/preview.d.ts.map +1 -0
  44. package/dist/preview.js +12 -0
  45. package/dist/preview.js.map +1 -0
  46. package/dist/screenshot.d.ts +7 -0
  47. package/dist/screenshot.d.ts.map +1 -0
  48. package/dist/screenshot.js +20 -0
  49. package/dist/screenshot.js.map +1 -0
  50. package/dist/types.d.ts +84 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/typography/analyze-url.d.ts +10 -0
  55. package/dist/typography/analyze-url.d.ts.map +1 -0
  56. package/dist/typography/analyze-url.js +28 -0
  57. package/dist/typography/analyze-url.js.map +1 -0
  58. package/dist/typography/classify.d.ts +9 -0
  59. package/dist/typography/classify.d.ts.map +1 -0
  60. package/dist/typography/classify.js +15 -0
  61. package/dist/typography/classify.js.map +1 -0
  62. package/dist/typography/embed.d.ts +5 -0
  63. package/dist/typography/embed.d.ts.map +1 -0
  64. package/dist/typography/embed.js +33 -0
  65. package/dist/typography/embed.js.map +1 -0
  66. package/dist/typography/mood-match.d.ts +3 -0
  67. package/dist/typography/mood-match.d.ts.map +1 -0
  68. package/dist/typography/mood-match.js +21 -0
  69. package/dist/typography/mood-match.js.map +1 -0
  70. package/dist/typography/registry.d.ts +23 -0
  71. package/dist/typography/registry.d.ts.map +1 -0
  72. package/dist/typography/registry.js +103 -0
  73. package/dist/typography/registry.js.map +1 -0
  74. package/dist/typography/scale.d.ts +3 -0
  75. package/dist/typography/scale.d.ts.map +1 -0
  76. package/dist/typography/scale.js +45 -0
  77. package/dist/typography/scale.js.map +1 -0
  78. package/dist/typography/suggest.d.ts +9 -0
  79. package/dist/typography/suggest.d.ts.map +1 -0
  80. package/dist/typography/suggest.js +21 -0
  81. package/dist/typography/suggest.js.map +1 -0
  82. package/dist/versioning/gallery.d.ts +3 -0
  83. package/dist/versioning/gallery.d.ts.map +1 -0
  84. package/dist/versioning/gallery.js +57 -0
  85. package/dist/versioning/gallery.js.map +1 -0
  86. package/dist/versioning/versions.d.ts +19 -0
  87. package/dist/versioning/versions.d.ts.map +1 -0
  88. package/dist/versioning/versions.js +91 -0
  89. package/dist/versioning/versions.js.map +1 -0
  90. package/dist/watcher.d.ts +6 -0
  91. package/dist/watcher.d.ts.map +1 -0
  92. package/dist/watcher.js +15 -0
  93. package/dist/watcher.js.map +1 -0
  94. package/dist/websocket.d.ts +13 -0
  95. package/dist/websocket.d.ts.map +1 -0
  96. package/dist/websocket.js +30 -0
  97. package/dist/websocket.js.map +1 -0
  98. package/package.json +50 -0
@@ -0,0 +1,113 @@
1
+ import http from 'http';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { generateGalleryHtml } from './versioning/gallery.js';
6
+ export function getNewestHtmlFile(dir) {
7
+ if (!fs.existsSync(dir))
8
+ return null;
9
+ const files = fs
10
+ .readdirSync(dir)
11
+ .filter((f) => f.endsWith('.html') && !f.startsWith('.'))
12
+ .map((f) => ({
13
+ name: f,
14
+ mtime: fs.statSync(path.join(dir, f)).mtimeMs,
15
+ }))
16
+ .sort((a, b) => b.mtime - a.mtime);
17
+ return files.length > 0 ? files[0].name : null;
18
+ }
19
+ function wrapWithRuntime(html, wsPort) {
20
+ const isFullDoc = html.trimStart().startsWith('<!DOCTYPE') || html.trimStart().startsWith('<html');
21
+ const runtimeScript = `<script src="/mise-en-scene.js"></script>\n<script>window.__MISE_WS_PORT = ${wsPort};</script>`;
22
+ if (isFullDoc) {
23
+ if (html.includes('</body>')) {
24
+ return html.replace('</body>', `${runtimeScript}\n</body>`);
25
+ }
26
+ return html + '\n' + runtimeScript;
27
+ }
28
+ return `<!DOCTYPE html>
29
+ <html lang="en">
30
+ <head>
31
+ <meta charset="UTF-8">
32
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
33
+ <title>Mise en Scene</title>
34
+ <link rel="stylesheet" href="/styles.css">
35
+ </head>
36
+ <body>
37
+ <div id="mise-root">${html}</div>
38
+ ${runtimeScript}
39
+ </body>
40
+ </html>`;
41
+ }
42
+ export async function createHttpServer(opts) {
43
+ const { designDir, host = '127.0.0.1' } = opts;
44
+ const clientDir = path.join(path.dirname(fileURLToPath(import.meta.url)), 'client');
45
+ const server = http.createServer((req, res) => {
46
+ const url = new URL(req.url ?? '/', `http://${host}`);
47
+ if (url.pathname === '/mise-en-scene.js') {
48
+ const jsPath = path.join(clientDir, 'mise-en-scene.js');
49
+ if (fs.existsSync(jsPath)) {
50
+ res.writeHead(200, { 'Content-Type': 'application/javascript' });
51
+ res.end(fs.readFileSync(jsPath, 'utf-8'));
52
+ }
53
+ else {
54
+ res.writeHead(200, { 'Content-Type': 'application/javascript' });
55
+ res.end('// mise-en-scene runtime placeholder');
56
+ }
57
+ return;
58
+ }
59
+ if (url.pathname === '/styles.css') {
60
+ const cssPath = path.join(clientDir, 'styles.css');
61
+ if (fs.existsSync(cssPath)) {
62
+ res.writeHead(200, { 'Content-Type': 'text/css' });
63
+ res.end(fs.readFileSync(cssPath, 'utf-8'));
64
+ }
65
+ else {
66
+ res.writeHead(200, { 'Content-Type': 'text/css' });
67
+ res.end('/* mise-en-scene styles placeholder */');
68
+ }
69
+ return;
70
+ }
71
+ if (url.pathname === '/gallery') {
72
+ const metaPath = path.join(designDir, '..', 'meta.json');
73
+ let meta = { branches: {}, stars: [], current: { branch: 'main', version: 0 } };
74
+ if (fs.existsSync(metaPath)) {
75
+ try {
76
+ meta = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
77
+ }
78
+ catch { }
79
+ }
80
+ const serverPort = server.address()?.port ?? opts.port;
81
+ const galleryHtml = generateGalleryHtml(meta, serverPort);
82
+ res.writeHead(200, { 'Content-Type': 'text/html' });
83
+ res.end(galleryHtml);
84
+ return;
85
+ }
86
+ if (url.pathname === '/') {
87
+ const newest = getNewestHtmlFile(designDir);
88
+ if (!newest) {
89
+ res.writeHead(200, { 'Content-Type': 'text/html' });
90
+ res.end('<html><body><h1>No designs yet</h1><p>Waiting for first design...</p></body></html>');
91
+ return;
92
+ }
93
+ const html = fs.readFileSync(path.join(designDir, newest), 'utf-8');
94
+ const actualPort = server.address()?.port ?? opts.port;
95
+ res.writeHead(200, { 'Content-Type': 'text/html' });
96
+ res.end(wrapWithRuntime(html, actualPort));
97
+ return;
98
+ }
99
+ res.writeHead(404);
100
+ res.end('Not found');
101
+ });
102
+ return new Promise((resolve) => {
103
+ server.listen(opts.port, host, () => {
104
+ const addr = server.address();
105
+ resolve({
106
+ port: addr.port,
107
+ server,
108
+ close: () => new Promise((r) => server.close(() => r())),
109
+ });
110
+ });
111
+ });
112
+ }
113
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
5
+ import { createStudioHandlers, getStudioTools } from './mcp-server.js';
6
+ import path from 'path';
7
+ import fs from 'fs';
8
+ const PORT = parseInt(process.env.MISE_PORT ?? '3333', 10);
9
+ const DESIGN_DIR = process.env.MISE_DESIGN_DIR ?? path.join(process.cwd(), 'mise-en-scene', 'main');
10
+ fs.mkdirSync(DESIGN_DIR, { recursive: true });
11
+ const server = new Server({ name: 'mise-en-scene-server', version: '0.1.0' }, { capabilities: { tools: {} } });
12
+ let studioHandlers;
13
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: getStudioTools() }));
14
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
15
+ if (!studioHandlers) {
16
+ const studio = await createStudioHandlers({ port: PORT, designDir: DESIGN_DIR });
17
+ studioHandlers = studio.handlers;
18
+ }
19
+ const { name, arguments: args } = request.params;
20
+ const handler = studioHandlers[name];
21
+ if (!handler)
22
+ return { content: [{ type: 'text', text: `Unknown tool: ${name}` }] };
23
+ return handler(args);
24
+ });
25
+ async function main() {
26
+ const transport = new StdioServerTransport();
27
+ await server.connect(transport);
28
+ }
29
+ main().catch(console.error);
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;AACpG,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAE9C,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,EAAE,EAClD,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;AAEF,IAAI,cAAmB,CAAC;AAExB,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;AAE5F,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QACjF,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;IACnC,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACjD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;IACpF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AACD,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,435 @@
1
+ interface StudioOptions {
2
+ port: number;
3
+ designDir: string;
4
+ host?: string;
5
+ }
6
+ type ToolContent = {
7
+ type: 'text';
8
+ text: string;
9
+ } | {
10
+ type: 'image';
11
+ data: string;
12
+ mimeType: string;
13
+ };
14
+ interface ToolResult {
15
+ content: ToolContent[];
16
+ }
17
+ export declare function createStudioHandlers(opts: StudioOptions): Promise<{
18
+ handlers: {
19
+ studio_preview(args: {
20
+ html: string;
21
+ filename: string;
22
+ }): Promise<ToolResult>;
23
+ studio_feedback(): Promise<ToolResult>;
24
+ studio_export(args: {
25
+ format: "svg" | "png" | "jpg" | "pdf";
26
+ width?: number;
27
+ height?: number;
28
+ dpi?: number;
29
+ quality?: number;
30
+ preset?: string;
31
+ }): Promise<ToolResult>;
32
+ studio_screenshot(args: {
33
+ selector?: string;
34
+ }): Promise<ToolResult>;
35
+ studio_branch(args: {
36
+ name: string;
37
+ from_branch?: string;
38
+ from_version?: number;
39
+ }): Promise<ToolResult>;
40
+ studio_checkout(args: {
41
+ branch: string;
42
+ version?: number;
43
+ }): Promise<ToolResult>;
44
+ studio_gallery(): Promise<ToolResult>;
45
+ studio_font_suggest(args: {
46
+ mood: string;
47
+ context?: string;
48
+ }): Promise<ToolResult>;
49
+ studio_font_analyze_url(args: {
50
+ url: string;
51
+ }): Promise<ToolResult>;
52
+ studio_font_scale(args: {
53
+ base_size?: number;
54
+ ratio?: number;
55
+ }): Promise<ToolResult>;
56
+ studio_font_embed(args: {
57
+ fonts: Array<{
58
+ family: string;
59
+ weight?: number;
60
+ style?: string;
61
+ url: string;
62
+ }>;
63
+ }): Promise<ToolResult>;
64
+ shutdown(): Promise<void>;
65
+ };
66
+ port: number;
67
+ wsPort: number;
68
+ }>;
69
+ export declare function getStudioTools(): ({
70
+ name: string;
71
+ description: string;
72
+ inputSchema: {
73
+ type: string;
74
+ properties: {
75
+ html: {
76
+ type: string;
77
+ description: string;
78
+ };
79
+ filename: {
80
+ type: string;
81
+ description: string;
82
+ };
83
+ format?: undefined;
84
+ width?: undefined;
85
+ height?: undefined;
86
+ dpi?: undefined;
87
+ quality?: undefined;
88
+ preset?: undefined;
89
+ selector?: undefined;
90
+ name?: undefined;
91
+ from_branch?: undefined;
92
+ from_version?: undefined;
93
+ branch?: undefined;
94
+ version?: undefined;
95
+ mood?: undefined;
96
+ context?: undefined;
97
+ url?: undefined;
98
+ base_size?: undefined;
99
+ ratio?: undefined;
100
+ fonts?: undefined;
101
+ };
102
+ required: string[];
103
+ };
104
+ } | {
105
+ name: string;
106
+ description: string;
107
+ inputSchema: {
108
+ type: string;
109
+ properties: {
110
+ html?: undefined;
111
+ filename?: undefined;
112
+ format?: undefined;
113
+ width?: undefined;
114
+ height?: undefined;
115
+ dpi?: undefined;
116
+ quality?: undefined;
117
+ preset?: undefined;
118
+ selector?: undefined;
119
+ name?: undefined;
120
+ from_branch?: undefined;
121
+ from_version?: undefined;
122
+ branch?: undefined;
123
+ version?: undefined;
124
+ mood?: undefined;
125
+ context?: undefined;
126
+ url?: undefined;
127
+ base_size?: undefined;
128
+ ratio?: undefined;
129
+ fonts?: undefined;
130
+ };
131
+ required?: undefined;
132
+ };
133
+ } | {
134
+ name: string;
135
+ description: string;
136
+ inputSchema: {
137
+ type: string;
138
+ properties: {
139
+ format: {
140
+ type: string;
141
+ enum: string[];
142
+ };
143
+ width: {
144
+ type: string;
145
+ };
146
+ height: {
147
+ type: string;
148
+ };
149
+ dpi: {
150
+ type: string;
151
+ };
152
+ quality: {
153
+ type: string;
154
+ };
155
+ preset: {
156
+ type: string;
157
+ };
158
+ html?: undefined;
159
+ filename?: undefined;
160
+ selector?: undefined;
161
+ name?: undefined;
162
+ from_branch?: undefined;
163
+ from_version?: undefined;
164
+ branch?: undefined;
165
+ version?: undefined;
166
+ mood?: undefined;
167
+ context?: undefined;
168
+ url?: undefined;
169
+ base_size?: undefined;
170
+ ratio?: undefined;
171
+ fonts?: undefined;
172
+ };
173
+ required: string[];
174
+ };
175
+ } | {
176
+ name: string;
177
+ description: string;
178
+ inputSchema: {
179
+ type: string;
180
+ properties: {
181
+ selector: {
182
+ type: string;
183
+ };
184
+ html?: undefined;
185
+ filename?: undefined;
186
+ format?: undefined;
187
+ width?: undefined;
188
+ height?: undefined;
189
+ dpi?: undefined;
190
+ quality?: undefined;
191
+ preset?: undefined;
192
+ name?: undefined;
193
+ from_branch?: undefined;
194
+ from_version?: undefined;
195
+ branch?: undefined;
196
+ version?: undefined;
197
+ mood?: undefined;
198
+ context?: undefined;
199
+ url?: undefined;
200
+ base_size?: undefined;
201
+ ratio?: undefined;
202
+ fonts?: undefined;
203
+ };
204
+ required?: undefined;
205
+ };
206
+ } | {
207
+ name: string;
208
+ description: string;
209
+ inputSchema: {
210
+ type: string;
211
+ properties: {
212
+ name: {
213
+ type: string;
214
+ description: string;
215
+ };
216
+ from_branch: {
217
+ type: string;
218
+ description: string;
219
+ };
220
+ from_version: {
221
+ type: string;
222
+ description: string;
223
+ };
224
+ html?: undefined;
225
+ filename?: undefined;
226
+ format?: undefined;
227
+ width?: undefined;
228
+ height?: undefined;
229
+ dpi?: undefined;
230
+ quality?: undefined;
231
+ preset?: undefined;
232
+ selector?: undefined;
233
+ branch?: undefined;
234
+ version?: undefined;
235
+ mood?: undefined;
236
+ context?: undefined;
237
+ url?: undefined;
238
+ base_size?: undefined;
239
+ ratio?: undefined;
240
+ fonts?: undefined;
241
+ };
242
+ required: string[];
243
+ };
244
+ } | {
245
+ name: string;
246
+ description: string;
247
+ inputSchema: {
248
+ type: string;
249
+ properties: {
250
+ branch: {
251
+ type: string;
252
+ description: string;
253
+ };
254
+ version: {
255
+ type: string;
256
+ description: string;
257
+ };
258
+ html?: undefined;
259
+ filename?: undefined;
260
+ format?: undefined;
261
+ width?: undefined;
262
+ height?: undefined;
263
+ dpi?: undefined;
264
+ quality?: undefined;
265
+ preset?: undefined;
266
+ selector?: undefined;
267
+ name?: undefined;
268
+ from_branch?: undefined;
269
+ from_version?: undefined;
270
+ mood?: undefined;
271
+ context?: undefined;
272
+ url?: undefined;
273
+ base_size?: undefined;
274
+ ratio?: undefined;
275
+ fonts?: undefined;
276
+ };
277
+ required: string[];
278
+ };
279
+ } | {
280
+ name: string;
281
+ description: string;
282
+ inputSchema: {
283
+ type: string;
284
+ properties: {
285
+ mood: {
286
+ type: string;
287
+ description: string;
288
+ };
289
+ context: {
290
+ type: string;
291
+ description: string;
292
+ };
293
+ html?: undefined;
294
+ filename?: undefined;
295
+ format?: undefined;
296
+ width?: undefined;
297
+ height?: undefined;
298
+ dpi?: undefined;
299
+ quality?: undefined;
300
+ preset?: undefined;
301
+ selector?: undefined;
302
+ name?: undefined;
303
+ from_branch?: undefined;
304
+ from_version?: undefined;
305
+ branch?: undefined;
306
+ version?: undefined;
307
+ url?: undefined;
308
+ base_size?: undefined;
309
+ ratio?: undefined;
310
+ fonts?: undefined;
311
+ };
312
+ required: string[];
313
+ };
314
+ } | {
315
+ name: string;
316
+ description: string;
317
+ inputSchema: {
318
+ type: string;
319
+ properties: {
320
+ url: {
321
+ type: string;
322
+ description: string;
323
+ };
324
+ html?: undefined;
325
+ filename?: undefined;
326
+ format?: undefined;
327
+ width?: undefined;
328
+ height?: undefined;
329
+ dpi?: undefined;
330
+ quality?: undefined;
331
+ preset?: undefined;
332
+ selector?: undefined;
333
+ name?: undefined;
334
+ from_branch?: undefined;
335
+ from_version?: undefined;
336
+ branch?: undefined;
337
+ version?: undefined;
338
+ mood?: undefined;
339
+ context?: undefined;
340
+ base_size?: undefined;
341
+ ratio?: undefined;
342
+ fonts?: undefined;
343
+ };
344
+ required: string[];
345
+ };
346
+ } | {
347
+ name: string;
348
+ description: string;
349
+ inputSchema: {
350
+ type: string;
351
+ properties: {
352
+ base_size: {
353
+ type: string;
354
+ description: string;
355
+ default: number;
356
+ };
357
+ ratio: {
358
+ type: string;
359
+ description: string;
360
+ default: number;
361
+ };
362
+ html?: undefined;
363
+ filename?: undefined;
364
+ format?: undefined;
365
+ width?: undefined;
366
+ height?: undefined;
367
+ dpi?: undefined;
368
+ quality?: undefined;
369
+ preset?: undefined;
370
+ selector?: undefined;
371
+ name?: undefined;
372
+ from_branch?: undefined;
373
+ from_version?: undefined;
374
+ branch?: undefined;
375
+ version?: undefined;
376
+ mood?: undefined;
377
+ context?: undefined;
378
+ url?: undefined;
379
+ fonts?: undefined;
380
+ };
381
+ required?: undefined;
382
+ };
383
+ } | {
384
+ name: string;
385
+ description: string;
386
+ inputSchema: {
387
+ type: string;
388
+ properties: {
389
+ fonts: {
390
+ type: string;
391
+ items: {
392
+ type: string;
393
+ properties: {
394
+ family: {
395
+ type: string;
396
+ };
397
+ weight: {
398
+ type: string;
399
+ };
400
+ style: {
401
+ type: string;
402
+ };
403
+ url: {
404
+ type: string;
405
+ description: string;
406
+ };
407
+ };
408
+ required: string[];
409
+ };
410
+ };
411
+ html?: undefined;
412
+ filename?: undefined;
413
+ format?: undefined;
414
+ width?: undefined;
415
+ height?: undefined;
416
+ dpi?: undefined;
417
+ quality?: undefined;
418
+ preset?: undefined;
419
+ selector?: undefined;
420
+ name?: undefined;
421
+ from_branch?: undefined;
422
+ from_version?: undefined;
423
+ branch?: undefined;
424
+ version?: undefined;
425
+ mood?: undefined;
426
+ context?: undefined;
427
+ url?: undefined;
428
+ base_size?: undefined;
429
+ ratio?: undefined;
430
+ };
431
+ required: string[];
432
+ };
433
+ })[];
434
+ export {};
435
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAcA,UAAU,aAAa;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CAAE;AAE3E,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AACtG,UAAU,UAAU;IAAG,OAAO,EAAE,WAAW,EAAE,CAAC;CAAE;AAIhD,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,aAAa;;6BAU/B;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,UAAU,CAAC;2BAK1D,OAAO,CAAC,UAAU,CAAC;4BAKlB;YAAE,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,UAAU,CAAC;gCAQ7I;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,UAAU,CAAC;4BAI/C;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,UAAU,CAAC;8BAIjF;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,UAAU,CAAC;0BAI9D,OAAO,CAAC,UAAU,CAAC;kCAGX;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,UAAU,CAAC;sCAIpD;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,UAAU,CAAC;gCAI3C;YAAE,SAAS,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,UAAU,CAAC;gCAI5D;YAAE,KAAK,EAAE,KAAK,CAAC;gBAAE,MAAM,EAAE,MAAM,CAAC;gBAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAAC,KAAK,CAAC,EAAE,MAAM,CAAC;gBAAC,GAAG,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GAAG,OAAO,CAAC,UAAU,CAAC;oBAIpH,OAAO,CAAC,IAAI,CAAC;;;;GAQlC;AAED,wBAAgB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAqI7B"}