illustrator-mcp-server 1.0.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 (133) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +270 -0
  3. package/README.md +253 -0
  4. package/dist/executor/file-transport.d.ts +19 -0
  5. package/dist/executor/file-transport.d.ts.map +1 -0
  6. package/dist/executor/file-transport.js +55 -0
  7. package/dist/executor/file-transport.js.map +1 -0
  8. package/dist/executor/jsx-runner.d.ts +18 -0
  9. package/dist/executor/jsx-runner.d.ts.map +1 -0
  10. package/dist/executor/jsx-runner.js +95 -0
  11. package/dist/executor/jsx-runner.js.map +1 -0
  12. package/dist/index.d.ts +3 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +22 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/jsx/helpers/common.jsx +320 -0
  17. package/dist/server.d.ts +3 -0
  18. package/dist/server.d.ts.map +1 -0
  19. package/dist/server.js +11 -0
  20. package/dist/server.js.map +1 -0
  21. package/dist/tools/export/export-pdf.d.ts +3 -0
  22. package/dist/tools/export/export-pdf.d.ts.map +1 -0
  23. package/dist/tools/export/export-pdf.js +153 -0
  24. package/dist/tools/export/export-pdf.js.map +1 -0
  25. package/dist/tools/export/export.d.ts +3 -0
  26. package/dist/tools/export/export.d.ts.map +1 -0
  27. package/dist/tools/export/export.js +230 -0
  28. package/dist/tools/export/export.js.map +1 -0
  29. package/dist/tools/modify/apply-color-profile.d.ts +3 -0
  30. package/dist/tools/modify/apply-color-profile.d.ts.map +1 -0
  31. package/dist/tools/modify/apply-color-profile.js +86 -0
  32. package/dist/tools/modify/apply-color-profile.js.map +1 -0
  33. package/dist/tools/modify/convert-to-outlines.d.ts +3 -0
  34. package/dist/tools/modify/convert-to-outlines.d.ts.map +1 -0
  35. package/dist/tools/modify/convert-to-outlines.js +127 -0
  36. package/dist/tools/modify/convert-to-outlines.js.map +1 -0
  37. package/dist/tools/modify/create-ellipse.d.ts +3 -0
  38. package/dist/tools/modify/create-ellipse.d.ts.map +1 -0
  39. package/dist/tools/modify/create-ellipse.js +135 -0
  40. package/dist/tools/modify/create-ellipse.js.map +1 -0
  41. package/dist/tools/modify/create-line.d.ts +3 -0
  42. package/dist/tools/modify/create-line.d.ts.map +1 -0
  43. package/dist/tools/modify/create-line.js +150 -0
  44. package/dist/tools/modify/create-line.js.map +1 -0
  45. package/dist/tools/modify/create-path.d.ts +3 -0
  46. package/dist/tools/modify/create-path.d.ts.map +1 -0
  47. package/dist/tools/modify/create-path.js +192 -0
  48. package/dist/tools/modify/create-path.js.map +1 -0
  49. package/dist/tools/modify/create-rectangle.d.ts +3 -0
  50. package/dist/tools/modify/create-rectangle.d.ts.map +1 -0
  51. package/dist/tools/modify/create-rectangle.js +142 -0
  52. package/dist/tools/modify/create-rectangle.js.map +1 -0
  53. package/dist/tools/modify/create-text-frame.d.ts +3 -0
  54. package/dist/tools/modify/create-text-frame.d.ts.map +1 -0
  55. package/dist/tools/modify/create-text-frame.js +154 -0
  56. package/dist/tools/modify/create-text-frame.js.map +1 -0
  57. package/dist/tools/modify/modify-object.d.ts +3 -0
  58. package/dist/tools/modify/modify-object.d.ts.map +1 -0
  59. package/dist/tools/modify/modify-object.js +224 -0
  60. package/dist/tools/modify/modify-object.js.map +1 -0
  61. package/dist/tools/read/find-objects.d.ts +3 -0
  62. package/dist/tools/read/find-objects.d.ts.map +1 -0
  63. package/dist/tools/read/find-objects.js +220 -0
  64. package/dist/tools/read/find-objects.js.map +1 -0
  65. package/dist/tools/read/get-artboards.d.ts +3 -0
  66. package/dist/tools/read/get-artboards.d.ts.map +1 -0
  67. package/dist/tools/read/get-artboards.js +85 -0
  68. package/dist/tools/read/get-artboards.js.map +1 -0
  69. package/dist/tools/read/get-colors.d.ts +3 -0
  70. package/dist/tools/read/get-colors.d.ts.map +1 -0
  71. package/dist/tools/read/get-colors.js +184 -0
  72. package/dist/tools/read/get-colors.js.map +1 -0
  73. package/dist/tools/read/get-document-info.d.ts +3 -0
  74. package/dist/tools/read/get-document-info.d.ts.map +1 -0
  75. package/dist/tools/read/get-document-info.js +134 -0
  76. package/dist/tools/read/get-document-info.js.map +1 -0
  77. package/dist/tools/read/get-document-structure.d.ts +3 -0
  78. package/dist/tools/read/get-document-structure.d.ts.map +1 -0
  79. package/dist/tools/read/get-document-structure.js +125 -0
  80. package/dist/tools/read/get-document-structure.js.map +1 -0
  81. package/dist/tools/read/get-effects.d.ts +3 -0
  82. package/dist/tools/read/get-effects.d.ts.map +1 -0
  83. package/dist/tools/read/get-effects.js +187 -0
  84. package/dist/tools/read/get-effects.js.map +1 -0
  85. package/dist/tools/read/get-groups.d.ts +3 -0
  86. package/dist/tools/read/get-groups.d.ts.map +1 -0
  87. package/dist/tools/read/get-groups.js +174 -0
  88. package/dist/tools/read/get-groups.js.map +1 -0
  89. package/dist/tools/read/get-guidelines.d.ts +3 -0
  90. package/dist/tools/read/get-guidelines.d.ts.map +1 -0
  91. package/dist/tools/read/get-guidelines.js +100 -0
  92. package/dist/tools/read/get-guidelines.js.map +1 -0
  93. package/dist/tools/read/get-images.d.ts +3 -0
  94. package/dist/tools/read/get-images.d.ts.map +1 -0
  95. package/dist/tools/read/get-images.js +160 -0
  96. package/dist/tools/read/get-images.js.map +1 -0
  97. package/dist/tools/read/get-layers.d.ts +3 -0
  98. package/dist/tools/read/get-layers.d.ts.map +1 -0
  99. package/dist/tools/read/get-layers.js +112 -0
  100. package/dist/tools/read/get-layers.js.map +1 -0
  101. package/dist/tools/read/get-overprint-info.d.ts +3 -0
  102. package/dist/tools/read/get-overprint-info.d.ts.map +1 -0
  103. package/dist/tools/read/get-overprint-info.js +109 -0
  104. package/dist/tools/read/get-overprint-info.js.map +1 -0
  105. package/dist/tools/read/get-path-items.d.ts +3 -0
  106. package/dist/tools/read/get-path-items.d.ts.map +1 -0
  107. package/dist/tools/read/get-path-items.js +252 -0
  108. package/dist/tools/read/get-path-items.js.map +1 -0
  109. package/dist/tools/read/get-selection.d.ts +3 -0
  110. package/dist/tools/read/get-selection.d.ts.map +1 -0
  111. package/dist/tools/read/get-selection.js +177 -0
  112. package/dist/tools/read/get-selection.js.map +1 -0
  113. package/dist/tools/read/get-symbols.d.ts +3 -0
  114. package/dist/tools/read/get-symbols.d.ts.map +1 -0
  115. package/dist/tools/read/get-symbols.js +101 -0
  116. package/dist/tools/read/get-symbols.js.map +1 -0
  117. package/dist/tools/read/get-text-frame-detail.d.ts +3 -0
  118. package/dist/tools/read/get-text-frame-detail.d.ts.map +1 -0
  119. package/dist/tools/read/get-text-frame-detail.js +184 -0
  120. package/dist/tools/read/get-text-frame-detail.js.map +1 -0
  121. package/dist/tools/read/list-text-frames.d.ts +3 -0
  122. package/dist/tools/read/list-text-frames.d.ts.map +1 -0
  123. package/dist/tools/read/list-text-frames.js +177 -0
  124. package/dist/tools/read/list-text-frames.js.map +1 -0
  125. package/dist/tools/registry.d.ts +3 -0
  126. package/dist/tools/registry.d.ts.map +1 -0
  127. package/dist/tools/registry.js +65 -0
  128. package/dist/tools/registry.js.map +1 -0
  129. package/dist/tools/utility/preflight-check.d.ts +3 -0
  130. package/dist/tools/utility/preflight-check.d.ts.map +1 -0
  131. package/dist/tools/utility/preflight-check.js +337 -0
  132. package/dist/tools/utility/preflight-check.js.map +1 -0
  133. package/package.json +54 -0
@@ -0,0 +1,337 @@
1
+ import { z } from 'zod';
2
+ import { executeJsx } from '../../executor/jsx-runner.js';
3
+ const jsxCode = `
4
+ try {
5
+ var err = preflightChecks();
6
+ if (err) {
7
+ writeResultFile(RESULT_PATH, err);
8
+ } else {
9
+ var params = readParamsFile(PARAMS_PATH);
10
+ var coordSystem = (params && params.coordinate_system) ? params.coordinate_system : "artboard-web";
11
+ var doc = app.activeDocument;
12
+ var results = [];
13
+ var docColorSpace = doc.documentColorSpace;
14
+ var isCMYKDoc = (docColorSpace === DocumentColorSpace.CMYK);
15
+
16
+ // Helper: check if a color is RGB type
17
+ function isRGBColor(color) {
18
+ try {
19
+ if (color.typename === "RGBColor") return true;
20
+ } catch(e) {}
21
+ return false;
22
+ }
23
+
24
+ // Helper: check if color is white
25
+ function isWhiteColor(color) {
26
+ try {
27
+ if (color.typename === "CMYKColor") {
28
+ if (color.cyan === 0 && color.magenta === 0 && color.yellow === 0 && color.black === 0) return true;
29
+ } else if (color.typename === "RGBColor") {
30
+ if (color.red === 255 && color.green === 255 && color.blue === 255) return true;
31
+ } else if (color.typename === "GrayColor") {
32
+ if (color.gray === 0) return true;
33
+ }
34
+ } catch(e) {}
35
+ return false;
36
+ }
37
+
38
+ // Helper: get parent layer name
39
+ function getParentLayerName(item) {
40
+ var current = item.parent;
41
+ while (current) {
42
+ if (current.typename === "Layer") return current.name;
43
+ current = current.parent;
44
+ }
45
+ return "";
46
+ }
47
+
48
+ // Helper: recursive iteration over all page items
49
+ function iterateAllItems(container, callback) {
50
+ for (var i = 0; i < container.pageItems.length; i++) {
51
+ var item = container.pageItems[i];
52
+ try {
53
+ callback(item);
54
+ if (item.typename === "GroupItem") {
55
+ iterateAllItems(item, callback);
56
+ }
57
+ } catch(e) {}
58
+ }
59
+ }
60
+
61
+ // 1. RGB color in CMYK document
62
+ if (isCMYKDoc) {
63
+ for (var layerIdx = 0; layerIdx < doc.layers.length; layerIdx++) {
64
+ iterateAllItems(doc.layers[layerIdx], function(item) {
65
+ if (item.typename === "PathItem") {
66
+ try {
67
+ if (item.filled && isRGBColor(item.fillColor)) {
68
+ var uuid = ensureUUID(item);
69
+ results.push({
70
+ level: "error",
71
+ category: "rgb_in_cmyk",
72
+ message: "RGB fill color detected in CMYK document",
73
+ uuid: uuid,
74
+ details: { name: item.name || "", layerName: getParentLayerName(item), attribute: "fill" }
75
+ });
76
+ }
77
+ } catch(e) {}
78
+ try {
79
+ if (item.stroked && isRGBColor(item.strokeColor)) {
80
+ var uuid2 = ensureUUID(item);
81
+ results.push({
82
+ level: "error",
83
+ category: "rgb_in_cmyk",
84
+ message: "RGB stroke color detected in CMYK document",
85
+ uuid: uuid2,
86
+ details: { name: item.name || "", layerName: getParentLayerName(item), attribute: "stroke" }
87
+ });
88
+ }
89
+ } catch(e) {}
90
+ }
91
+ });
92
+ }
93
+ }
94
+
95
+ // 2. Broken links — placedItems
96
+ try {
97
+ for (var pi = 0; pi < doc.placedItems.length; pi++) {
98
+ var placed = doc.placedItems[pi];
99
+ try {
100
+ var f = placed.file;
101
+ if (!f.exists) {
102
+ var uuid3 = ensureUUID(placed);
103
+ results.push({
104
+ level: "error",
105
+ category: "broken_link",
106
+ message: "Broken link detected",
107
+ uuid: uuid3,
108
+ details: { name: placed.name || "", filePath: f.fsName }
109
+ });
110
+ }
111
+ } catch(e) {
112
+ var uuid3b = ensureUUID(placed);
113
+ results.push({
114
+ level: "error",
115
+ category: "broken_link",
116
+ message: "Cannot access linked file",
117
+ uuid: uuid3b,
118
+ details: { name: placed.name || "" }
119
+ });
120
+ }
121
+ }
122
+ } catch(e) {}
123
+
124
+ // 3. Low resolution images (< 300dpi)
125
+ try {
126
+ for (var ri = 0; ri < doc.rasterItems.length; ri++) {
127
+ var raster = doc.rasterItems[ri];
128
+ try {
129
+ var bounds = raster.geometricBounds;
130
+ var widthPt = bounds[2] - bounds[0];
131
+ var heightPt = bounds[3] - bounds[1];
132
+ if (widthPt < 0) widthPt = -widthPt;
133
+ if (heightPt < 0) heightPt = -heightPt;
134
+
135
+ var matrix = raster.matrix;
136
+ var ppiH = 72;
137
+ var ppiV = 72;
138
+ try {
139
+ var srcW = raster.imageColorSpace ? raster.matrix.mValueA : 1;
140
+ var srcH = raster.imageColorSpace ? raster.matrix.mValueD : 1;
141
+ } catch(e2) {}
142
+
143
+ // Use a simpler approach: compare pixel dimensions to point dimensions
144
+ // Points to inches: divide by 72
145
+ // If we can get bounding box in points and original pixel size, we can compute effective DPI
146
+ // Unfortunately ExtendScript rasterItem doesn't directly expose pixel dimensions reliably
147
+ // We check if the item has a lower than expected resolution by examining its properties
148
+ var effectivePPI = 0;
149
+ try {
150
+ // Try to compute effective resolution from the object dimensions
151
+ // raster items have an overprint property but no direct pixel dimension
152
+ // Heuristic: if the item appears large at screen resolution, flag it
153
+ var widthInches = widthPt / 72;
154
+ var heightInches = heightPt / 72;
155
+ // Cannot reliably determine pixel dimensions in ES3, so skip exact DPI calc
156
+ // Instead just note as info
157
+ if (widthInches > 0 || heightInches > 0) {
158
+ var uuid4 = ensureUUID(raster);
159
+ results.push({
160
+ level: "warning",
161
+ category: "image_resolution",
162
+ message: "Please verify raster image resolution (exact DPI calculation unavailable due to API limitations)",
163
+ uuid: uuid4,
164
+ details: { name: raster.name || "", widthPt: widthPt, heightPt: heightPt }
165
+ });
166
+ }
167
+ } catch(e2) {}
168
+ } catch(e) {}
169
+ }
170
+ } catch(e) {}
171
+
172
+ // 4. Non-outlined fonts (textFrames exist)
173
+ try {
174
+ if (doc.textFrames.length > 0) {
175
+ var fontNames = [];
176
+ for (var tf = 0; tf < doc.textFrames.length; tf++) {
177
+ try {
178
+ var textFrame = doc.textFrames[tf];
179
+ var uuid5 = ensureUUID(textFrame);
180
+ var fontName = "";
181
+ try {
182
+ if (textFrame.textRanges.length > 0) {
183
+ fontName = textFrame.textRanges[0].characterAttributes.textFont.name;
184
+ }
185
+ } catch(e2) {}
186
+ results.push({
187
+ level: "warning",
188
+ category: "non_outlined_text",
189
+ message: "Non-outlined text detected",
190
+ uuid: uuid5,
191
+ details: { name: textFrame.name || "", contents: textFrame.contents.substring(0, 50), font: fontName }
192
+ });
193
+ } catch(e) {}
194
+ }
195
+ }
196
+ } catch(e) {}
197
+
198
+ // 5. White overprint
199
+ for (var layerIdx2 = 0; layerIdx2 < doc.layers.length; layerIdx2++) {
200
+ iterateAllItems(doc.layers[layerIdx2], function(item) {
201
+ if (item.typename === "PathItem") {
202
+ try {
203
+ var hasFillOP = false;
204
+ var hasStrokeOP = false;
205
+ try { hasFillOP = item.fillOverprint; } catch(e2) {}
206
+ try { hasStrokeOP = item.strokeOverprint; } catch(e2) {}
207
+
208
+ if (hasFillOP && item.filled) {
209
+ try {
210
+ if (isWhiteColor(item.fillColor)) {
211
+ var uuid6 = ensureUUID(item);
212
+ results.push({
213
+ level: "error",
214
+ category: "white_overprint",
215
+ message: "White fill has overprint enabled (may disappear when printed)",
216
+ uuid: uuid6,
217
+ details: { name: item.name || "", layerName: getParentLayerName(item), attribute: "fill" }
218
+ });
219
+ }
220
+ } catch(e2) {}
221
+ }
222
+
223
+ if (hasStrokeOP && item.stroked) {
224
+ try {
225
+ if (isWhiteColor(item.strokeColor)) {
226
+ var uuid7 = ensureUUID(item);
227
+ results.push({
228
+ level: "error",
229
+ category: "white_overprint",
230
+ message: "White stroke has overprint enabled (may disappear when printed)",
231
+ uuid: uuid7,
232
+ details: { name: item.name || "", layerName: getParentLayerName(item), attribute: "stroke" }
233
+ });
234
+ }
235
+ } catch(e2) {}
236
+ }
237
+ } catch(e) {}
238
+ }
239
+ });
240
+ }
241
+
242
+ // 6. Bleed — cannot check via API
243
+ results.push({
244
+ level: "info",
245
+ category: "bleed",
246
+ message: "Bleed settings cannot be verified via API. Please check manually.",
247
+ uuid: null,
248
+ details: {}
249
+ });
250
+
251
+ // 7. Spot colors
252
+ try {
253
+ if (doc.spots.length > 1) {
254
+ // spots[0] is always the default registration color
255
+ for (var si = 1; si < doc.spots.length; si++) {
256
+ var spot = doc.spots[si];
257
+ try {
258
+ results.push({
259
+ level: "warning",
260
+ category: "spot_color",
261
+ message: "Spot color in use: " + spot.name,
262
+ uuid: null,
263
+ details: { spotName: spot.name, colorType: spot.spotKind.toString() }
264
+ });
265
+ } catch(e) {}
266
+ }
267
+ }
268
+ } catch(e) {}
269
+
270
+ // 8. Transparency (opacity < 100 or blendingMode !== normal)
271
+ for (var layerIdx3 = 0; layerIdx3 < doc.layers.length; layerIdx3++) {
272
+ iterateAllItems(doc.layers[layerIdx3], function(item) {
273
+ try {
274
+ var hasTransparency = false;
275
+ var reason = "";
276
+ try {
277
+ if (item.opacity < 100) {
278
+ hasTransparency = true;
279
+ reason = "opacity: " + item.opacity + "%";
280
+ }
281
+ } catch(e2) {}
282
+ try {
283
+ if (item.blendingMode !== BlendModes.NORMAL) {
284
+ hasTransparency = true;
285
+ reason = reason ? (reason + ", blendingMode: " + item.blendingMode) : ("blendingMode: " + item.blendingMode);
286
+ }
287
+ } catch(e2) {}
288
+
289
+ if (hasTransparency) {
290
+ var uuid8 = ensureUUID(item);
291
+ results.push({
292
+ level: "warning",
293
+ category: "transparency",
294
+ message: "Transparency effect in use",
295
+ uuid: uuid8,
296
+ details: { name: item.name || "", layerName: getParentLayerName(item), reason: reason }
297
+ });
298
+ }
299
+ } catch(e) {}
300
+ });
301
+ }
302
+
303
+ writeResultFile(RESULT_PATH, {
304
+ coordinateSystem: coordSystem,
305
+ documentColorSpace: isCMYKDoc ? "CMYK" : "RGB",
306
+ checkCount: results.length,
307
+ results: results
308
+ });
309
+ }
310
+ } catch (e) {
311
+ writeResultFile(RESULT_PATH, { error: true, message: e.message, line: e.line });
312
+ }
313
+ `;
314
+ export function register(server) {
315
+ server.registerTool('preflight_check', {
316
+ title: 'Preflight Check',
317
+ description: 'Run pre-press quality checks',
318
+ inputSchema: {
319
+ coordinate_system: z
320
+ .enum(['artboard-web', 'document'])
321
+ .optional()
322
+ .default('artboard-web'),
323
+ },
324
+ annotations: {
325
+ readOnlyHint: true,
326
+ destructiveHint: false,
327
+ idempotentHint: true,
328
+ openWorldHint: false,
329
+ },
330
+ }, async (params) => {
331
+ const result = await executeJsx(jsxCode, params);
332
+ return {
333
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
334
+ };
335
+ });
336
+ }
337
+ //# sourceMappingURL=preflight-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight-check.js","sourceRoot":"","sources":["../../../src/tools/utility/preflight-check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsTf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,8BAA8B;QAC3C,WAAW,EAAE;YACX,iBAAiB,EAAE,CAAC;iBACjB,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;iBAClC,QAAQ,EAAE;iBACV,OAAO,CAAC,cAAc,CAAC;SAC3B;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "illustrator-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "MCP server for reading, manipulating, and exporting Adobe Illustrator design data",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "illustrator-mcp-server": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist/**/*"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc && cp -r src/jsx dist/",
15
+ "dev": "cp -r src/jsx dist/ 2>/dev/null; tsc --watch",
16
+ "start": "node dist/index.js",
17
+ "prepublishOnly": "npm run build",
18
+ "test": "vitest run",
19
+ "test:watch": "vitest"
20
+ },
21
+ "keywords": [
22
+ "mcp",
23
+ "model-context-protocol",
24
+ "illustrator",
25
+ "adobe",
26
+ "extendscript",
27
+ "jsx",
28
+ "design",
29
+ "svg"
30
+ ],
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/ie3jp/illustrator-mcp-server.git"
35
+ },
36
+ "homepage": "https://github.com/ie3jp/illustrator-mcp-server",
37
+ "bugs": {
38
+ "url": "https://github.com/ie3jp/illustrator-mcp-server/issues"
39
+ },
40
+ "os": ["darwin"],
41
+ "engines": {
42
+ "node": ">=20.0.0"
43
+ },
44
+ "dependencies": {
45
+ "@modelcontextprotocol/sdk": "^1.27.1",
46
+ "p-limit": "^7.3.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "^25.5.0",
50
+ "tsx": "^4.21.0",
51
+ "typescript": "^5.9.3",
52
+ "vitest": "^3.2.4"
53
+ }
54
+ }