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,184 @@
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 && params.coordinate_system) ? params.coordinate_system : "artboard-web";
12
+ var targetUUID = params.uuid;
13
+
14
+ if (!targetUUID) {
15
+ writeResultFile(RESULT_PATH, { error: true, message: "uuid parameter is required" });
16
+ } else {
17
+ // textFrames を走査して UUID が一致するテキストフレームを探す
18
+ var found = null;
19
+ for (var i = 0; i < doc.textFrames.length; i++) {
20
+ var item = doc.textFrames[i];
21
+ var itemUUID = ensureUUID(item);
22
+ if (itemUUID === targetUUID) {
23
+ found = item;
24
+ break;
25
+ }
26
+ }
27
+
28
+ if (!found) {
29
+ writeResultFile(RESULT_PATH, {
30
+ error: true,
31
+ message: "No text frame found matching UUID: " + targetUUID
32
+ });
33
+ } else {
34
+ var tf = found;
35
+
36
+ // テキスト種別
37
+ var textKind = "unknown";
38
+ if (tf.kind === TextType.POINTTEXT) {
39
+ textKind = "point";
40
+ } else if (tf.kind === TextType.AREATEXT) {
41
+ textKind = "area";
42
+ } else if (tf.kind === TextType.PATHTEXT) {
43
+ textKind = "path";
44
+ }
45
+
46
+ // 座標
47
+ var itemAbIdx = getArtboardIndexForItem(tf);
48
+ var boundsAbRect = null;
49
+ if (coordSystem === "artboard-web" && itemAbIdx >= 0) {
50
+ boundsAbRect = doc.artboards[itemAbIdx].artboardRect;
51
+ }
52
+ var bounds = getBounds(tf, coordSystem, boundsAbRect);
53
+
54
+ // 文字属性(各 textRange ごと)
55
+ var charAttrs = [];
56
+ for (var ri = 0; ri < tf.textRanges.length; ri++) {
57
+ var tr = tf.textRanges[ri];
58
+ var ca = tr.characterAttributes;
59
+ var charInfo = {
60
+ text: tr.contents,
61
+ fontFamily: "",
62
+ fontStyle: "",
63
+ fontSize: 0,
64
+ color: { type: "none" },
65
+ kerning: 0,
66
+ tracking: 0,
67
+ baselineShift: 0,
68
+ horizontalScale: 100,
69
+ verticalScale: 100,
70
+ characterStyle: ""
71
+ };
72
+
73
+ try { charInfo.fontFamily = ca.textFont.family; } catch (e) {}
74
+ try { charInfo.fontStyle = ca.textFont.style; } catch (e) {}
75
+ try { charInfo.fontSize = ca.size; } catch (e) {}
76
+ try { charInfo.color = colorToObject(ca.fillColor); } catch (e) {}
77
+ try { charInfo.kerning = ca.kerningMethod ? ca.kerningMethod : 0; } catch (e) {}
78
+ try { charInfo.tracking = ca.tracking; } catch (e) {}
79
+ try { charInfo.baselineShift = ca.baselineShift; } catch (e) {}
80
+ try { charInfo.horizontalScale = ca.horizontalScale; } catch (e) {}
81
+ try { charInfo.verticalScale = ca.verticalScale; } catch (e) {}
82
+ try {
83
+ if (ca.characterStyle) {
84
+ charInfo.characterStyle = ca.characterStyle.name || "";
85
+ }
86
+ } catch (e) {}
87
+
88
+ charAttrs.push(charInfo);
89
+ }
90
+
91
+ // 段落属性(各段落ごと)
92
+ var paraAttrs = [];
93
+ for (var pi = 0; pi < tf.paragraphs.length; pi++) {
94
+ var para = tf.paragraphs[pi];
95
+ var pa = para.paragraphAttributes;
96
+ var paraInfo = {
97
+ text: para.contents,
98
+ leading: 0,
99
+ autoLeading: false,
100
+ firstLineIndent: 0,
101
+ leftIndent: 0,
102
+ rightIndent: 0,
103
+ spaceBefore: 0,
104
+ spaceAfter: 0,
105
+ justification: "left",
106
+ hyphenation: false,
107
+ paragraphStyle: ""
108
+ };
109
+
110
+ try { paraInfo.leading = pa.leading; } catch (e) {}
111
+ try { paraInfo.autoLeading = pa.autoLeading; } catch (e) {}
112
+ try { paraInfo.firstLineIndent = pa.firstLineIndent; } catch (e) {}
113
+ try { paraInfo.leftIndent = pa.leftIndent; } catch (e) {}
114
+ try { paraInfo.rightIndent = pa.rightIndent; } catch (e) {}
115
+ try { paraInfo.spaceBefore = pa.spaceBefore; } catch (e) {}
116
+ try { paraInfo.spaceAfter = pa.spaceAfter; } catch (e) {}
117
+ try {
118
+ var j = pa.justification;
119
+ if (j === Justification.LEFT) paraInfo.justification = "left";
120
+ else if (j === Justification.CENTER) paraInfo.justification = "center";
121
+ else if (j === Justification.RIGHT) paraInfo.justification = "right";
122
+ else if (j === Justification.FULLJUSTIFYLASTLINELEFT) paraInfo.justification = "justify-left";
123
+ else if (j === Justification.FULLJUSTIFYLASTLINECENTER) paraInfo.justification = "justify-center";
124
+ else if (j === Justification.FULLJUSTIFYLASTLINERIGHT) paraInfo.justification = "justify-right";
125
+ else if (j === Justification.FULLJUSTIFY) paraInfo.justification = "justify-all";
126
+ else paraInfo.justification = j.toString();
127
+ } catch (e) {}
128
+ try { paraInfo.hyphenation = pa.hyphenation; } catch (e) {}
129
+ try {
130
+ if (pa.paragraphStyle) {
131
+ paraInfo.paragraphStyle = pa.paragraphStyle.name || "";
132
+ }
133
+ } catch (e) {}
134
+
135
+ paraAttrs.push(paraInfo);
136
+ }
137
+
138
+ var result = {
139
+ uuid: targetUUID,
140
+ contents: tf.contents,
141
+ x: bounds.x,
142
+ y: bounds.y,
143
+ width: bounds.width,
144
+ height: bounds.height,
145
+ textKind: textKind,
146
+ zIndex: getZIndex(tf),
147
+ artboardIndex: itemAbIdx,
148
+ coordinateSystem: coordSystem,
149
+ characterAttributes: charAttrs,
150
+ paragraphAttributes: paraAttrs
151
+ };
152
+
153
+ writeResultFile(RESULT_PATH, result);
154
+ }
155
+ }
156
+ } catch (e) {
157
+ writeResultFile(RESULT_PATH, { error: true, message: "Failed to get text frame detail: " + e.message, line: e.line });
158
+ }
159
+ }
160
+ `;
161
+ export function register(server) {
162
+ server.registerTool('get_text_frame_detail', {
163
+ title: 'Get Text Frame Detail',
164
+ description: 'Get detailed attributes of a specific text frame',
165
+ inputSchema: {
166
+ uuid: z.string().describe('UUID of the target text frame'),
167
+ coordinate_system: z
168
+ .enum(['artboard-web', 'document'])
169
+ .optional()
170
+ .default('artboard-web')
171
+ .describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
172
+ },
173
+ annotations: {
174
+ readOnlyHint: true,
175
+ destructiveHint: false,
176
+ idempotentHint: true,
177
+ openWorldHint: false,
178
+ },
179
+ }, async (params) => {
180
+ const result = await executeJsx(jsxCode, params);
181
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
182
+ });
183
+ }
184
+ //# sourceMappingURL=get-text-frame-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-text-frame-detail.js","sourceRoot":"","sources":["../../../src/tools/read/get-text-frame-detail.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Jf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,kDAAkD;QAC/D,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC1D,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,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,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=list-text-frames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-text-frames.d.ts","sourceRoot":"","sources":["../../../src/tools/read/list-text-frames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2JpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2BhD"}
@@ -0,0 +1,177 @@
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 && params.coordinate_system) ? params.coordinate_system : "artboard-web";
12
+ var filterLayer = (params && params.layer_name) ? params.layer_name : null;
13
+ var filterArtboard = (params && typeof params.artboard_index === "number") ? params.artboard_index : null;
14
+
15
+ // アートボードインデックスの範囲チェック
16
+ if (filterArtboard !== null && (filterArtboard < 0 || filterArtboard >= doc.artboards.length)) {
17
+ writeResultFile(RESULT_PATH, {
18
+ error: true,
19
+ message: "Artboard index " + filterArtboard + " is out of range (0-" + (doc.artboards.length - 1) + ")"
20
+ });
21
+ } else {
22
+
23
+ // テキストフレームのソースを決定
24
+ var sourceFrames = null;
25
+ if (filterLayer) {
26
+ var targetLayer = null;
27
+ for (var li = 0; li < doc.layers.length; li++) {
28
+ if (doc.layers[li].name === filterLayer) {
29
+ targetLayer = doc.layers[li];
30
+ break;
31
+ }
32
+ }
33
+ if (!targetLayer) {
34
+ writeResultFile(RESULT_PATH, {
35
+ error: true,
36
+ message: "Layer '" + filterLayer + "' not found"
37
+ });
38
+ sourceFrames = null;
39
+ } else {
40
+ sourceFrames = targetLayer.textFrames;
41
+ }
42
+ } else {
43
+ sourceFrames = doc.textFrames;
44
+ }
45
+
46
+ if (sourceFrames !== null) {
47
+ // アートボード矩形の取得(座標変換用)
48
+ var artboardRect = null;
49
+ if (filterArtboard !== null) {
50
+ artboardRect = doc.artboards[filterArtboard].artboardRect;
51
+ }
52
+
53
+ var textFrames = [];
54
+ for (var i = 0; i < sourceFrames.length; i++) {
55
+ var tf = sourceFrames[i];
56
+
57
+ // アートボードフィルタリング
58
+ if (filterArtboard !== null) {
59
+ var abIdx = getArtboardIndexForItem(tf);
60
+ if (abIdx !== filterArtboard) continue;
61
+ }
62
+
63
+ // テキスト種別
64
+ var textKind = "unknown";
65
+ if (tf.kind === TextType.POINTTEXT) {
66
+ textKind = "point";
67
+ } else if (tf.kind === TextType.AREATEXT) {
68
+ textKind = "area";
69
+ } else if (tf.kind === TextType.PATHTEXT) {
70
+ textKind = "path";
71
+ }
72
+
73
+ // 座標変換用のアートボード矩形
74
+ var boundsAbRect = artboardRect;
75
+ if (!boundsAbRect && coordSystem === "artboard-web") {
76
+ var itemAbIdx = getArtboardIndexForItem(tf);
77
+ if (itemAbIdx >= 0) {
78
+ boundsAbRect = doc.artboards[itemAbIdx].artboardRect;
79
+ }
80
+ }
81
+
82
+ var bounds = getBounds(tf, coordSystem, boundsAbRect);
83
+
84
+ // フォント情報(先頭 textRange)
85
+ var fontFamily = "";
86
+ var fontSize = 0;
87
+ try {
88
+ if (tf.textRanges.length > 0) {
89
+ var firstRange = tf.textRanges[0];
90
+ fontFamily = firstRange.characterAttributes.textFont.family;
91
+ fontSize = firstRange.characterAttributes.size;
92
+ }
93
+ } catch (e) {
94
+ // フォント情報が取得できない場合は空のまま
95
+ }
96
+
97
+ // 段落スタイル名
98
+ var paragraphStyleName = "";
99
+ try {
100
+ if (tf.textRanges.length > 0) {
101
+ var pStyle = tf.textRanges[0].paragraphAttributes.paragraphStyle;
102
+ if (pStyle) {
103
+ paragraphStyleName = pStyle.name || "";
104
+ }
105
+ }
106
+ } catch (e) {
107
+ // 段落スタイルが未設定の場合
108
+ }
109
+
110
+ // 文字スタイル名
111
+ var characterStyleName = "";
112
+ try {
113
+ if (tf.textRanges.length > 0) {
114
+ var cStyle = tf.textRanges[0].characterAttributes.characterStyle;
115
+ if (cStyle) {
116
+ characterStyleName = cStyle.name || "";
117
+ }
118
+ }
119
+ } catch (e) {
120
+ // 文字スタイルが未設定の場合
121
+ }
122
+
123
+ var info = {
124
+ uuid: ensureUUID(tf),
125
+ zIndex: getZIndex(tf),
126
+ contents: tf.contents,
127
+ x: bounds.x,
128
+ y: bounds.y,
129
+ width: bounds.width,
130
+ height: bounds.height,
131
+ textKind: textKind,
132
+ fontFamily: fontFamily,
133
+ fontSize: fontSize,
134
+ paragraphStyle: paragraphStyleName,
135
+ characterStyle: characterStyleName
136
+ };
137
+
138
+ textFrames.push(info);
139
+ }
140
+
141
+ writeResultFile(RESULT_PATH, {
142
+ coordinateSystem: coordSystem,
143
+ count: textFrames.length,
144
+ textFrames: textFrames
145
+ });
146
+ }
147
+ }
148
+ } catch (e) {
149
+ writeResultFile(RESULT_PATH, { error: true, message: "Failed to list text frames: " + e.message, line: e.line });
150
+ }
151
+ }
152
+ `;
153
+ export function register(server) {
154
+ server.registerTool('list_text_frames', {
155
+ title: 'List Text Frames',
156
+ description: 'List text frames with summary-level information',
157
+ inputSchema: {
158
+ layer_name: z.string().optional().describe('Filter by layer name'),
159
+ artboard_index: z.number().int().min(0).optional().describe('Filter by artboard index (0-based integer)'),
160
+ coordinate_system: z
161
+ .enum(['artboard-web', 'document'])
162
+ .optional()
163
+ .default('artboard-web')
164
+ .describe('Coordinate system (artboard-web: artboard-relative Y-down, document: native Illustrator coordinates)'),
165
+ },
166
+ annotations: {
167
+ readOnlyHint: true,
168
+ destructiveHint: false,
169
+ idempotentHint: true,
170
+ openWorldHint: false,
171
+ },
172
+ }, async (params) => {
173
+ const result = await executeJsx(jsxCode, params);
174
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
175
+ });
176
+ }
177
+ //# sourceMappingURL=list-text-frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-text-frames.js","sourceRoot":"","sources":["../../../src/tools/read/list-text-frames.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqJf,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE;YACX,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAClE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACzG,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,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,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 registerAllTools(server: McpServer): void;
3
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqCpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmCxD"}
@@ -0,0 +1,65 @@
1
+ // Phase 1: 基本読み取りツール
2
+ import { register as registerGetDocumentInfo } from './read/get-document-info.js';
3
+ import { register as registerGetArtboards } from './read/get-artboards.js';
4
+ import { register as registerGetLayers } from './read/get-layers.js';
5
+ import { register as registerGetSelection } from './read/get-selection.js';
6
+ import { register as registerListTextFrames } from './read/list-text-frames.js';
7
+ // Phase 2: 読み取り系ツール(Web実装向け)
8
+ import { register as registerGetTextFrameDetail } from './read/get-text-frame-detail.js';
9
+ import { register as registerGetColors } from './read/get-colors.js';
10
+ import { register as registerGetPathItems } from './read/get-path-items.js';
11
+ import { register as registerGetGuidelines } from './read/get-guidelines.js';
12
+ import { register as registerGetGroups } from './read/get-groups.js';
13
+ import { register as registerGetEffects } from './read/get-effects.js';
14
+ import { register as registerGetImages } from './read/get-images.js';
15
+ import { register as registerGetSymbols } from './read/get-symbols.js';
16
+ import { register as registerGetDocumentStructure } from './read/get-document-structure.js';
17
+ import { register as registerFindObjects } from './read/find-objects.js';
18
+ // Phase 3: 書き出し + 印刷向け読み取り
19
+ import { register as registerExport } from './export/export.js';
20
+ import { register as registerExportPdf } from './export/export-pdf.js';
21
+ import { register as registerGetOverprintInfo } from './read/get-overprint-info.js';
22
+ import { register as registerPreflightCheck } from './utility/preflight-check.js';
23
+ // Phase 4: 操作系ツール
24
+ import { register as registerCreateRectangle } from './modify/create-rectangle.js';
25
+ import { register as registerCreateEllipse } from './modify/create-ellipse.js';
26
+ import { register as registerCreateLine } from './modify/create-line.js';
27
+ import { register as registerCreateTextFrame } from './modify/create-text-frame.js';
28
+ import { register as registerCreatePath } from './modify/create-path.js';
29
+ import { register as registerModifyObject } from './modify/modify-object.js';
30
+ import { register as registerConvertToOutlines } from './modify/convert-to-outlines.js';
31
+ import { register as registerApplyColorProfile } from './modify/apply-color-profile.js';
32
+ export function registerAllTools(server) {
33
+ // Phase 1: 基本読み取りツール
34
+ registerGetDocumentInfo(server);
35
+ registerGetArtboards(server);
36
+ registerGetLayers(server);
37
+ registerGetSelection(server);
38
+ registerListTextFrames(server);
39
+ // Phase 2: 読み取り系ツール
40
+ registerGetTextFrameDetail(server);
41
+ registerGetColors(server);
42
+ registerGetPathItems(server);
43
+ registerGetGuidelines(server);
44
+ registerGetGroups(server);
45
+ registerGetEffects(server);
46
+ registerGetImages(server);
47
+ registerGetSymbols(server);
48
+ registerGetDocumentStructure(server);
49
+ registerFindObjects(server);
50
+ // Phase 3: 書き出し + 印刷向け
51
+ registerExport(server);
52
+ registerExportPdf(server);
53
+ registerGetOverprintInfo(server);
54
+ registerPreflightCheck(server);
55
+ // Phase 4: 操作系
56
+ registerCreateRectangle(server);
57
+ registerCreateEllipse(server);
58
+ registerCreateLine(server);
59
+ registerCreateTextFrame(server);
60
+ registerCreatePath(server);
61
+ registerModifyObject(server);
62
+ registerConvertToOutlines(server);
63
+ registerApplyColorProfile(server);
64
+ }
65
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.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=preflight-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight-check.d.ts","sourceRoot":"","sources":["../../../src/tools/utility/preflight-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4TpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0BhD"}