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,230 @@
1
+ import { z } from 'zod';
2
+ import { executeJsxHeavy } from '../../executor/jsx-runner.js';
3
+ const jsxCode = `
4
+ var preflight = preflightChecks();
5
+ if (preflight) {
6
+ writeResultFile(RESULT_PATH, preflight);
7
+ } else {
8
+ try {
9
+ var params = readParamsFile(PARAMS_PATH);
10
+ var doc = app.activeDocument;
11
+ var coordSystem = params.coordinate_system || "artboard-web";
12
+ var target = params.target;
13
+ var format = params.format;
14
+ var outputPath = params.output_path;
15
+ var scale = params.scale || 1;
16
+ var svgOpts = params.svg_options || {};
17
+ var rasterOpts = params.raster_options || {};
18
+
19
+
20
+ // --- Target resolution ---
21
+ var targetType = "unknown";
22
+ var artboardIndex = -1;
23
+
24
+ if (target === "selection") {
25
+ targetType = "selection";
26
+ if (!doc.selection || doc.selection.length === 0) {
27
+ writeResultFile(RESULT_PATH, { error: true, message: "No objects are selected" });
28
+ targetType = "error";
29
+ }
30
+ } else if (target.indexOf("artboard:") === 0) {
31
+ targetType = "artboard";
32
+ artboardIndex = parseInt(target.replace("artboard:", ""), 10);
33
+ if (isNaN(artboardIndex) || artboardIndex < 0 || artboardIndex >= doc.artboards.length) {
34
+ writeResultFile(RESULT_PATH, {
35
+ error: true,
36
+ message: "Artboard index " + artboardIndex + " is out of range (0-" + (doc.artboards.length - 1) + ")"
37
+ });
38
+ targetType = "error";
39
+ }
40
+ } else {
41
+ // UUID target — find and select (UUID は item.note に格納)
42
+ targetType = "uuid";
43
+ function findByUUID(items, uuid) {
44
+ for (var i = 0; i < items.length; i++) {
45
+ var item = items[i];
46
+ try {
47
+ if (item.note === uuid) return item;
48
+ } catch(ex) {}
49
+ if (item.typename === "GroupItem") {
50
+ try {
51
+ var child = findByUUID(item.pageItems, uuid);
52
+ if (child) return child;
53
+ } catch(ex2) {}
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ // 全レイヤーを走査
59
+ var targetItem = null;
60
+ for (var li = 0; li < doc.layers.length; li++) {
61
+ targetItem = findByUUID(doc.layers[li].pageItems, target);
62
+ if (targetItem) break;
63
+ }
64
+ if (!targetItem) {
65
+ writeResultFile(RESULT_PATH, { error: true, message: "No object found matching UUID: " + target });
66
+ targetType = "error";
67
+ } else {
68
+ doc.selection = null;
69
+ targetItem.selected = true;
70
+ targetType = "selection";
71
+ }
72
+ }
73
+
74
+ if (targetType !== "error") {
75
+ var outFile = new File(outputPath);
76
+
77
+ if (format === "svg") {
78
+ var opts = new ExportOptionsSVG();
79
+ opts.fontSubsetting = SVGFontSubsetting.None;
80
+
81
+ if (svgOpts.text_outline === true) {
82
+ opts.fontType = SVGFontType.OUTLINEFONT;
83
+ }
84
+ if (svgOpts.css_properties === true) {
85
+ opts.cssProperties = SVGCSSPropertyLocation.STYLEELEMENTS;
86
+ } else {
87
+ opts.cssProperties = SVGCSSPropertyLocation.PRESENTATIONATTRIBUTES;
88
+ }
89
+ if (typeof svgOpts.embed_images !== "undefined") {
90
+ opts.embedRasterImages = svgOpts.embed_images;
91
+ }
92
+ if (svgOpts.id_naming === "layer") {
93
+ opts.idType = SVGIdType.SVGIDMINIMAL;
94
+ } else if (svgOpts.id_naming === "object") {
95
+ opts.idType = SVGIdType.SVGIDUNIQUE;
96
+ } else {
97
+ opts.idType = SVGIdType.SVGIDREGULAR;
98
+ }
99
+ if (typeof svgOpts.decimal_places === "number") {
100
+ opts.coordinatePrecision = svgOpts.decimal_places;
101
+ }
102
+ if (typeof svgOpts.clean_metadata !== "undefined" && svgOpts.clean_metadata === false) {
103
+ // default includes metadata; only skip if explicitly false
104
+ }
105
+
106
+ if (targetType === "artboard") {
107
+ doc.artboards.setActiveArtboardIndex(artboardIndex);
108
+ opts.artBoardClipping = true;
109
+ opts.saveMultipleArtboards = true;
110
+ opts.artboardRange = String(artboardIndex + 1);
111
+ } else if (targetType === "selection") {
112
+ opts.artBoardClipping = false;
113
+ }
114
+
115
+ doc.exportFile(outFile, ExportType.SVG, opts);
116
+
117
+ } else if (format === "png") {
118
+ var pngOpts = new ExportOptionsPNG24();
119
+ var dpi = (rasterOpts.dpi || 72) * scale;
120
+ pngOpts.horizontalScale = (dpi / 72) * 100;
121
+ pngOpts.verticalScale = (dpi / 72) * 100;
122
+ pngOpts.antiAliasing = (typeof rasterOpts.antialiasing !== "undefined") ? rasterOpts.antialiasing : true;
123
+
124
+ if (rasterOpts.background === "transparent") {
125
+ pngOpts.transparency = true;
126
+ } else {
127
+ pngOpts.transparency = false;
128
+ }
129
+
130
+ if (targetType === "artboard") {
131
+ doc.artboards.setActiveArtboardIndex(artboardIndex);
132
+ pngOpts.artBoardClipping = true;
133
+ pngOpts.saveMultipleArtboards = true;
134
+ pngOpts.artboardRange = String(artboardIndex + 1);
135
+ } else if (targetType === "selection") {
136
+ pngOpts.artBoardClipping = false;
137
+ }
138
+
139
+ doc.exportFile(outFile, ExportType.PNG24, pngOpts);
140
+
141
+ } else if (format === "jpg") {
142
+ var jpgOpts = new ExportOptionsJPEG();
143
+ var jpgDpi = (rasterOpts.dpi || 72) * scale;
144
+ jpgOpts.horizontalScale = (jpgDpi / 72) * 100;
145
+ jpgOpts.verticalScale = (jpgDpi / 72) * 100;
146
+ jpgOpts.antiAliasing = (typeof rasterOpts.antialiasing !== "undefined") ? rasterOpts.antialiasing : true;
147
+ jpgOpts.qualitySetting = 80;
148
+
149
+ if (targetType === "artboard") {
150
+ doc.artboards.setActiveArtboardIndex(artboardIndex);
151
+ jpgOpts.artBoardClipping = true;
152
+ jpgOpts.saveMultipleArtboards = true;
153
+ jpgOpts.artboardRange = String(artboardIndex + 1);
154
+ } else if (targetType === "selection") {
155
+ jpgOpts.artBoardClipping = false;
156
+ }
157
+
158
+ doc.exportFile(outFile, ExportType.JPEG, jpgOpts);
159
+
160
+ // WebP は ExtendScript API 非対応のため無効化
161
+ // } else if (format === "webp") { ... }
162
+ }
163
+
164
+ if (targetType !== "error" && targetType !== "done") {
165
+ writeResultFile(RESULT_PATH, { success: true, output_path: outputPath });
166
+ }
167
+
168
+ }
169
+ } catch (e) {
170
+ writeResultFile(RESULT_PATH, { error: true, message: "Export failed: " + e.message, line: e.line });
171
+ }
172
+ }
173
+ `;
174
+ export function register(server) {
175
+ server.registerTool('export', {
176
+ title: 'Export',
177
+ description: 'Export objects, groups, artboards, or selection',
178
+ inputSchema: {
179
+ target: z
180
+ .string()
181
+ .describe('UUID, "artboard:<index>", or "selection"'),
182
+ // WebP is not supported by ExtendScript API
183
+ // format: z.enum(['svg', 'png', 'webp', 'jpg']).describe('Export format'),
184
+ format: z.enum(['svg', 'png', 'jpg']).describe('Export format'),
185
+ output_path: z.string().describe('Output file path'),
186
+ scale: z.number().optional().default(1).describe('Scale factor'),
187
+ svg_options: z
188
+ .object({
189
+ text_outline: z.boolean().optional().describe('Convert text to outlines'),
190
+ css_properties: z.boolean().optional().describe('Export as CSS properties'),
191
+ embed_images: z.boolean().optional().describe('Embed raster images'),
192
+ id_naming: z
193
+ .enum(['layer', 'object', 'auto'])
194
+ .optional()
195
+ .describe('ID naming scheme'),
196
+ decimal_places: z.number().optional().describe('Decimal places'),
197
+ responsive: z.boolean().optional().describe('Responsive SVG (unofficial)'),
198
+ clean_metadata: z.boolean().optional().describe('Remove metadata'),
199
+ })
200
+ .optional()
201
+ .describe('SVG export options'),
202
+ raster_options: z
203
+ .object({
204
+ dpi: z.number().optional().describe('Resolution (DPI)'),
205
+ background: z
206
+ .string()
207
+ .optional()
208
+ .describe('"transparent", "white", or color code'),
209
+ antialiasing: z.boolean().optional().describe('Anti-aliasing'),
210
+ })
211
+ .optional()
212
+ .describe('Raster export options'),
213
+ coordinate_system: z
214
+ .enum(['artboard-web', 'document'])
215
+ .optional()
216
+ .default('artboard-web')
217
+ .describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
218
+ },
219
+ annotations: {
220
+ readOnlyHint: false,
221
+ destructiveHint: false,
222
+ idempotentHint: true,
223
+ openWorldHint: false,
224
+ },
225
+ }, async (params) => {
226
+ const result = await executeJsxHeavy(jsxCode, params);
227
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
228
+ });
229
+ }
230
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/tools/export/export.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Kf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,0CAA0C,CAAC;YACvD,4CAA4C;YAC5C,2EAA2E;YAC3E,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACpD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;YAChE,WAAW,EAAE,CAAC;iBACX,MAAM,CAAC;gBACN,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBACzE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBAC3E,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACpE,SAAS,EAAE,CAAC;qBACT,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;qBACjC,QAAQ,EAAE;qBACV,QAAQ,CAAC,kBAAkB,CAAC;gBAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAChE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBAC1E,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;aACnE,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,oBAAoB,CAAC;YACjC,cAAc,EAAE,CAAC;iBACd,MAAM,CAAC;gBACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBACvD,UAAU,EAAE,CAAC;qBACV,MAAM,EAAE;qBACR,QAAQ,EAAE;qBACV,QAAQ,CAAC,uCAAuC,CAAC;gBACpD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;aAC/D,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,uBAAuB,CAAC;YACpC,iBAAiB,EAAE,CAAC;iBACjB,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;iBAClC,QAAQ,EAAE;iBACV,OAAO,CAAC,cAAc,CAAC;iBACvB,QAAQ,CAAC,sGAAsG,CAAC;SACpH;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=apply-color-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-color-profile.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/apply-color-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8DpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6BhD"}
@@ -0,0 +1,86 @@
1
+ import { z } from 'zod';
2
+ import { executeJsx } from '../../executor/jsx-runner.js';
3
+ const jsxCode = `
4
+ var preflight = preflightChecks();
5
+ if (preflight) {
6
+ writeResultFile(RESULT_PATH, preflight);
7
+ } else {
8
+ try {
9
+ var params = readParamsFile(PARAMS_PATH);
10
+ var doc = app.activeDocument;
11
+ var profile = params.profile;
12
+ var intent = params.intent;
13
+
14
+ var oldProfile = "";
15
+ try {
16
+ oldProfile = doc.colorProfileName;
17
+ } catch(e) {
18
+ oldProfile = "(unavailable)";
19
+ }
20
+
21
+ // Map intent string to RenderingIntent enum
22
+ var renderIntent = null;
23
+ if (intent === "perceptual") {
24
+ renderIntent = RenderingIntent.PERCEPTUAL;
25
+ } else if (intent === "relative") {
26
+ renderIntent = RenderingIntent.RELATIVECOLORIMETRIC;
27
+ } else if (intent === "saturation") {
28
+ renderIntent = RenderingIntent.SATURATION;
29
+ } else if (intent === "absolute") {
30
+ renderIntent = RenderingIntent.ABSOLUTECOLORIMETRIC;
31
+ }
32
+
33
+ // ExtendScript does not provide a single-call color conversion API.
34
+ // We can assign a color profile name to embed/change the profile.
35
+ // For full ICC-based conversion, manual workflow or actions are needed.
36
+ var note = "";
37
+ var hasError = false;
38
+ try {
39
+ doc.colorProfileName = profile;
40
+ note = "Profile assigned. ICC conversion (color value recalculation) is not directly supported due to ExtendScript limitations. For full conversion, use Edit > Convert to Profile in Illustrator.";
41
+ } catch(e) {
42
+ hasError = true;
43
+ writeResultFile(RESULT_PATH, { error: true, message: "Failed to apply profile: " + e.message, line: e.line });
44
+ }
45
+
46
+ if (!hasError) {
47
+ writeResultFile(RESULT_PATH, {
48
+ success: true,
49
+ previousProfile: oldProfile,
50
+ newProfile: profile,
51
+ intent: intent,
52
+ note: note
53
+ });
54
+ }
55
+ } catch (e) {
56
+ writeResultFile(RESULT_PATH, { error: true, message: "Failed to operate color profile: " + e.message, line: e.line });
57
+ }
58
+ }
59
+ `;
60
+ export function register(server) {
61
+ server.registerTool('apply_color_profile', {
62
+ title: 'Apply Color Profile',
63
+ description: 'Apply or convert color profile',
64
+ inputSchema: {
65
+ profile: z.string().describe('Color profile name or path'),
66
+ intent: z
67
+ .enum(['perceptual', 'relative', 'saturation', 'absolute'])
68
+ .describe('Rendering intent'),
69
+ coordinate_system: z
70
+ .enum(['artboard-web', 'document'])
71
+ .optional()
72
+ .default('artboard-web')
73
+ .describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
74
+ },
75
+ annotations: {
76
+ readOnlyHint: false,
77
+ destructiveHint: true,
78
+ idempotentHint: true,
79
+ openWorldHint: false,
80
+ },
81
+ }, async (params) => {
82
+ const result = await executeJsx(jsxCode, params);
83
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
84
+ });
85
+ }
86
+ //# sourceMappingURL=apply-color-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-color-profile.js","sourceRoot":"","sources":["../../../src/tools/modify/apply-color-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,gCAAgC;QAC7C,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC1D,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;iBAC1D,QAAQ,CAAC,kBAAkB,CAAC;YAC/B,iBAAiB,EAAE,CAAC;iBACjB,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;iBAClC,QAAQ,EAAE;iBACV,OAAO,CAAC,cAAc,CAAC;iBACvB,QAAQ,CAAC,sGAAsG,CAAC;SACpH;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,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,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=convert-to-outlines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-to-outlines.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/convert-to-outlines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwGpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4BhD"}
@@ -0,0 +1,127 @@
1
+ import { z } from 'zod';
2
+ import { executeJsx } from '../../executor/jsx-runner.js';
3
+ const jsxCode = `
4
+ var preflight = preflightChecks();
5
+ if (preflight) {
6
+ writeResultFile(RESULT_PATH, preflight);
7
+ } else {
8
+ try {
9
+ var params = readParamsFile(PARAMS_PATH);
10
+ var doc = app.activeDocument;
11
+ var target = params.target;
12
+ var count = 0;
13
+ var hasError = false;
14
+
15
+ function createColor(colorObj) {
16
+ if (!colorObj || colorObj.type === "none") return new NoColor();
17
+ if (colorObj.type === "cmyk") {
18
+ var c = new CMYKColor();
19
+ c.cyan = (typeof colorObj.c === "number") ? colorObj.c : 0;
20
+ c.magenta = (typeof colorObj.m === "number") ? colorObj.m : 0;
21
+ c.yellow = (typeof colorObj.y === "number") ? colorObj.y : 0;
22
+ c.black = (typeof colorObj.k === "number") ? colorObj.k : 0;
23
+ return c;
24
+ }
25
+ if (colorObj.type === "rgb") {
26
+ var c = new RGBColor();
27
+ c.red = (typeof colorObj.r === "number") ? colorObj.r : 0;
28
+ c.green = (typeof colorObj.g === "number") ? colorObj.g : 0;
29
+ c.blue = (typeof colorObj.b === "number") ? colorObj.b : 0;
30
+ return c;
31
+ }
32
+ return new NoColor();
33
+ }
34
+
35
+ function findItemByUUID(uuid) {
36
+ var doc = app.activeDocument;
37
+ function search(items) {
38
+ for (var i = 0; i < items.length; i++) {
39
+ var item = items[i];
40
+ try {
41
+ if (item.note === uuid) return item;
42
+ } catch(e) {}
43
+ if (item.typename === "GroupItem") {
44
+ var found = search(item.pageItems);
45
+ if (found) return found;
46
+ }
47
+ }
48
+ return null;
49
+ }
50
+ for (var li = 0; li < doc.layers.length; li++) {
51
+ var found = search(doc.layers[li].pageItems);
52
+ if (found) return found;
53
+ }
54
+ return null;
55
+ }
56
+
57
+ if (target === "selection") {
58
+ var sel = doc.selection;
59
+ if (sel && sel.length > 0) {
60
+ for (var i = sel.length - 1; i >= 0; i--) {
61
+ try {
62
+ if (sel[i].typename === "TextFrame") {
63
+ sel[i].createOutline();
64
+ count++;
65
+ }
66
+ } catch(e) {}
67
+ }
68
+ }
69
+ } else if (target === "all") {
70
+ var frames = doc.textFrames;
71
+ for (var i = frames.length - 1; i >= 0; i--) {
72
+ try {
73
+ frames[i].createOutline();
74
+ count++;
75
+ } catch(e) {}
76
+ }
77
+ } else {
78
+ // target is a layer name
79
+ try {
80
+ var layer = doc.layers.getByName(target);
81
+ var frames = layer.textFrames;
82
+ for (var i = frames.length - 1; i >= 0; i--) {
83
+ try {
84
+ frames[i].createOutline();
85
+ count++;
86
+ } catch(e) {}
87
+ }
88
+ } catch(e) {
89
+ hasError = true;
90
+ writeResultFile(RESULT_PATH, { error: true, message: "Layer not found: " + target });
91
+ }
92
+ }
93
+
94
+ if (!hasError) {
95
+ writeResultFile(RESULT_PATH, { success: true, convertedCount: count });
96
+ }
97
+ } catch (e) {
98
+ writeResultFile(RESULT_PATH, { error: true, message: "Failed to convert to outlines: " + e.message, line: e.line });
99
+ }
100
+ }
101
+ `;
102
+ export function register(server) {
103
+ server.registerTool('convert_to_outlines', {
104
+ title: 'Convert to Outlines',
105
+ description: 'Convert text to outlines',
106
+ inputSchema: {
107
+ target: z
108
+ .string()
109
+ .describe('Target: "selection" (selected), "all" (all text), or layer name'),
110
+ coordinate_system: z
111
+ .enum(['artboard-web', 'document'])
112
+ .optional()
113
+ .default('artboard-web')
114
+ .describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
115
+ },
116
+ annotations: {
117
+ readOnlyHint: false,
118
+ destructiveHint: true,
119
+ idempotentHint: false,
120
+ openWorldHint: false,
121
+ },
122
+ }, async (params) => {
123
+ const result = await executeJsx(jsxCode, params);
124
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
125
+ });
126
+ }
127
+ //# sourceMappingURL=convert-to-outlines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-to-outlines.js","sourceRoot":"","sources":["../../../src/tools/modify/convert-to-outlines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkGf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,iEAAiE,CAAC;YAC9E,iBAAiB,EAAE,CAAC;iBACjB,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;iBAClC,QAAQ,EAAE;iBACV,OAAO,CAAC,cAAc,CAAC;iBACvB,QAAQ,CAAC,sGAAsG,CAAC;SACpH;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,KAAK;YACrB,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,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=create-ellipse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-ellipse.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/create-ellipse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsGpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuChD"}
@@ -0,0 +1,135 @@
1
+ import { z } from 'zod';
2
+ import { executeJsx } from '../../executor/jsx-runner.js';
3
+ const jsxCode = `
4
+ var preflight = preflightChecks();
5
+ if (preflight) {
6
+ writeResultFile(RESULT_PATH, preflight);
7
+ } else {
8
+ try {
9
+ var params = readParamsFile(PARAMS_PATH);
10
+ var doc = app.activeDocument;
11
+ var coordSystem = params.coordinate_system || "artboard-web";
12
+
13
+ function createColor(colorObj) {
14
+ if (!colorObj || colorObj.type === "none") return new NoColor();
15
+ if (colorObj.type === "cmyk") {
16
+ var c = new CMYKColor();
17
+ c.cyan = (typeof colorObj.c === "number") ? colorObj.c : 0;
18
+ c.magenta = (typeof colorObj.m === "number") ? colorObj.m : 0;
19
+ c.yellow = (typeof colorObj.y === "number") ? colorObj.y : 0;
20
+ c.black = (typeof colorObj.k === "number") ? colorObj.k : 0;
21
+ return c;
22
+ }
23
+ if (colorObj.type === "rgb") {
24
+ var c = new RGBColor();
25
+ c.red = (typeof colorObj.r === "number") ? colorObj.r : 0;
26
+ c.green = (typeof colorObj.g === "number") ? colorObj.g : 0;
27
+ c.blue = (typeof colorObj.b === "number") ? colorObj.b : 0;
28
+ return c;
29
+ }
30
+ return new NoColor();
31
+ }
32
+
33
+ var inputX = params.x;
34
+ var inputY = params.y;
35
+ var w = params.width;
36
+ var h = params.height;
37
+
38
+ var left = inputX;
39
+ var top;
40
+ if (coordSystem === "artboard-web") {
41
+ var ab = doc.artboards[doc.artboards.getActiveArtboardIndex()];
42
+ var abRect = ab.artboardRect;
43
+ left = abRect[0] + inputX;
44
+ top = abRect[1] + (-inputY);
45
+ } else {
46
+ top = inputY;
47
+ }
48
+
49
+ var targetLayer = doc.activeLayer;
50
+ if (params.layer_name) {
51
+ try {
52
+ targetLayer = doc.layers.getByName(params.layer_name);
53
+ } catch (e) {
54
+ targetLayer = doc.layers.add();
55
+ targetLayer.name = params.layer_name;
56
+ }
57
+ }
58
+
59
+ var ellipse = targetLayer.pathItems.ellipse(top, left, w, h);
60
+
61
+ if (params.fill) {
62
+ ellipse.filled = true;
63
+ ellipse.fillColor = createColor(params.fill);
64
+ }
65
+
66
+ if (params.stroke) {
67
+ ellipse.stroked = true;
68
+ if (params.stroke.color) {
69
+ ellipse.strokeColor = createColor(params.stroke.color);
70
+ }
71
+ if (typeof params.stroke.width === "number") {
72
+ ellipse.strokeWidth = params.stroke.width;
73
+ }
74
+ }
75
+
76
+ if (params.name) {
77
+ ellipse.name = params.name;
78
+ }
79
+
80
+ var uuid = ensureUUID(ellipse);
81
+ writeResultFile(RESULT_PATH, { uuid: uuid });
82
+ } catch (e) {
83
+ writeResultFile(RESULT_PATH, { error: true, message: "Failed to create ellipse: " + e.message, line: e.line });
84
+ }
85
+ }
86
+ `;
87
+ const colorSchema = z
88
+ .object({
89
+ type: z.enum(['cmyk', 'rgb', 'none']).describe('Color type'),
90
+ c: z.number().optional(),
91
+ m: z.number().optional(),
92
+ y: z.number().optional(),
93
+ k: z.number().optional(),
94
+ r: z.number().optional(),
95
+ g: z.number().optional(),
96
+ b: z.number().optional(),
97
+ })
98
+ .optional();
99
+ export function register(server) {
100
+ server.registerTool('create_ellipse', {
101
+ title: 'Create Ellipse',
102
+ description: 'Create an ellipse',
103
+ inputSchema: {
104
+ x: z.number().describe('Bounding box top-left X coordinate'),
105
+ y: z.number().describe('Bounding box top-left Y coordinate'),
106
+ width: z.number().describe('Width'),
107
+ height: z.number().describe('Height'),
108
+ fill: colorSchema.describe('Fill color'),
109
+ stroke: z
110
+ .object({
111
+ color: colorSchema.describe('Stroke color'),
112
+ width: z.number().describe('Stroke width'),
113
+ })
114
+ .optional()
115
+ .describe('Stroke settings'),
116
+ layer_name: z.string().optional().describe('Target layer name'),
117
+ name: z.string().optional().describe('Object name'),
118
+ coordinate_system: z
119
+ .enum(['artboard-web', 'document'])
120
+ .optional()
121
+ .default('artboard-web')
122
+ .describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
123
+ },
124
+ annotations: {
125
+ readOnlyHint: false,
126
+ destructiveHint: false,
127
+ idempotentHint: false,
128
+ openWorldHint: false,
129
+ },
130
+ }, async (params) => {
131
+ const result = await executeJsx(jsxCode, params);
132
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
133
+ });
134
+ }
135
+ //# sourceMappingURL=create-ellipse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-ellipse.js","sourceRoot":"","sources":["../../../src/tools/modify/create-ellipse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=create-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-line.d.ts","sourceRoot":"","sources":["../../../src/tools/modify/create-line.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkHpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0ChD"}