@vint.tri/report_gen_mcp 1.7.27 → 1.7.29

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.
@@ -0,0 +1,76 @@
1
+ # Главная инструкция по работе с инструментом report_gen_mcp
2
+
3
+ **ЦЕЛЬ:** Генерация качественных, визуально насыщенных HTML-отчетов по запросу пользователя.
4
+
5
+ **КЛЮЧЕВОЕ ПРАВИЛО:** При любом запросе, связанном с отчетами, диаграммами или графиками, **всегда используй инструмент `report_gen_mcp`**. Не пытайся отвечать текстом или генерировать отчеты самостоятельно.
6
+
7
+ ---
8
+
9
+ ### **АЛГОРИТМ ДЕЙСТВИЙ**
10
+
11
+ **Шаг 1: Определи суть запроса**
12
+ - Пойми, о чем пользователь хочет получить отчет (например, "финансовые показатели Apple", "сравнение акций Tesla и Google").
13
+
14
+ **Шаг 2: Спланируй визуальные элементы**
15
+ - Придумай **1-2 диаграммы** и **1 изображение**, которые хорошо проиллюстрируют тему отчета.
16
+ - Для каждой диаграммы определи тип (`bar`, `line`, `pie` и т.д.) и данные.
17
+ - Для изображения придумай текстовый промпт для генерации.
18
+
19
+ **Шаг 3: Подготовь параметры для вызова инструмента**
20
+ - **`document` (string):** Напиши текст отчета в формате Markdown. Вставь в него плейсхолдеры для визуальных элементов, например: `[[chart:sales_chart]]` и `[[image:cover_image]]`.
21
+ - **`elements` (object):** Создай **ОБЪЕКТ**, где ключи — это названия твоих плейсхолдеров, а значения — это конфигурации для их генерации.
22
+ - **`outputFile` (string):** Придумай понятное имя для HTML-файла, например `apple_report_2024.html`.
23
+
24
+ **Шаг 4: Сформируй `elements` ПРАВИЛЬНО (КРИТИЧЕСКИ ВАЖНО!)**
25
+
26
+ - **`elements` — это ОБЪЕКТ, а не строка!**
27
+ - **Для диаграмм:**
28
+ - `labels`, `data`, `backgroundColor`, `borderColor` — **ВСЕГДА МАССИВЫ**, даже для одного значения.
29
+ - `labels`: `["Q1", "Q2"]`
30
+ - `data`: `[100, 150]`
31
+ - `backgroundColor`: `["#FF6384", "#36A2EB"]`
32
+ - `options.title`: **ВСЕГДА СТРОКА**. `"Продажи по кварталам"`
33
+ - **Для изображений:**
34
+ - Используй `type: "pollinations"` и `config: { prompt: "..." }`.
35
+
36
+ ---
37
+
38
+ ### **ИДЕАЛЬНЫЙ ПРИМЕР ВЫЗОВА**
39
+
40
+ ```json
41
+ {
42
+ "method": "generate-report",
43
+ "params": {
44
+ "document": "# Отчет о продажах\n\nАнализ квартальных продаж.\n\n[[chart:sales]]\n\nИзображение, отражающее успех:\n\n[[image:success_image]]",
45
+ "elements": {
46
+ "sales": {
47
+ "type": "bar",
48
+ "config": {
49
+ "labels": ["Q1", "Q2", "Q3", "Q4"],
50
+ "datasets": [{
51
+ "label": "Продажи 2024",
52
+ "data": [120, 150, 130, 180],
53
+ "backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0"]
54
+ }],
55
+ "options": {
56
+ "title": "Квартальные продажи"
57
+ }
58
+ }
59
+ },
60
+ "success_image": {
61
+ "type": "pollinations",
62
+ "config": {
63
+ "prompt": "business growth and financial success chart"
64
+ }
65
+ }
66
+ },
67
+ "outputFile": "sales_report_2024.html"
68
+ }
69
+ }
70
+ ```
71
+
72
+ ---
73
+
74
+ ### **Что делать после вызова?**
75
+
76
+ Инструмент вернет путь к файлу. Ты должен показать его пользователю вместе со ссылками для просмотра.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AA0fA;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgCjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAsgBA;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgCjD"}
package/dist/index.js CHANGED
@@ -103,7 +103,7 @@ if (process.argv.length === 2) {
103
103
  // No command specified, run in stdio mode using MCP SDK
104
104
  const mcpServer = new McpServer({
105
105
  name: "report_gen_mcp",
106
- version: "1.7.27"
106
+ version: "1.7.29"
107
107
  }, {
108
108
  // Disable health check to prevent automatic calls
109
109
  capabilities: {
@@ -182,19 +182,26 @@ if (process.argv.length === 2) {
182
182
  tempDirectory: z.string().optional().describe("Temporary directory for file storage (optional, will use REPORTS_DIR environment variable if set)"),
183
183
  },
184
184
  }, async (params) => {
185
- // Handle case where arguments might be sent as a JSON string by Claude desktop
185
+ // --- НАЧАЛО БЛОКА НАДЕЖНОЙ ОБРАБОТКИ ПАРАМЕТРОВ ---
186
186
  let processedParams = params;
187
- if (typeof params === 'string') {
188
- try {
189
- processedParams = JSON.parse(params);
187
+ try {
188
+ // Если параметры - это строка, парсим ее как JSON
189
+ if (typeof processedParams === 'string') {
190
+ processedParams = JSON.parse(processedParams);
190
191
  }
191
- catch (parseError) {
192
- throw new Error('Invalid JSON string in arguments');
192
+ // Если есть вложенный объект `arguments`, используем его
193
+ if (processedParams.arguments && typeof processedParams.arguments === 'object') {
194
+ processedParams = processedParams.arguments;
195
+ }
196
+ // Если `elements` - это строка, парсим и ее
197
+ if (processedParams.elements && typeof processedParams.elements === 'string') {
198
+ processedParams.elements = JSON.parse(processedParams.elements);
193
199
  }
194
200
  }
195
- else if (params.arguments && typeof params.arguments === 'object') {
196
- processedParams = params.arguments;
201
+ catch (e) {
202
+ throw new Error('Invalid JSON format in parameters. Ensure all parameters, especially "elements", are valid JSON.');
197
203
  }
204
+ // --- КОНЕЦ БЛОКА НАДЕЖНОЙ ОБРАБОТКИ ПАРАМЕТРОВ ---
198
205
  // Extract parameters correctly, ensuring outputFile is not nested within elements
199
206
  const { document, elements, charts, outputFile = 'report.html', tempDirectory } = processedParams;
200
207
  // Поддержка обратной совместимости: если переданы charts, используем их как elements
@@ -1 +1 @@
1
- {"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/reportGenerator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,EAAE,cAAc,EAAkB,MAAM,wBAAwB,CAAC;AAGxE,KAAK,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAI7E,UAAU,YAAY;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;CACb;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;CACb;AAED,KAAK,YAAY,GAAG,eAAe,GAAG,wBAAwB,CAAC;AAC/D,KAAK,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC;AA+DjD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM;;;GAmIvB"}
1
+ {"version":3,"file":"reportGenerator.d.ts","sourceRoot":"","sources":["../../src/utils/reportGenerator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,EAAE,cAAc,EAAkB,MAAM,wBAAwB,CAAC;AAGxE,KAAK,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAI7E,UAAU,YAAY;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;CACb;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;CACb;AAED,KAAK,YAAY,GAAG,eAAe,GAAG,wBAAwB,CAAC;AAC/D,KAAK,aAAa,GAAG,YAAY,GAAG,YAAY,CAAC;AA+DjD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACvC,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM;;;GA6IvB"}
@@ -63,8 +63,18 @@ export async function generateReport(document, elements, outputFile, tempDirecto
63
63
  const reportsDir = tempDirectory || process.env.REPORTS_DIR || os.tmpdir();
64
64
  await fs.ensureDir(reportsDir);
65
65
  const finalOutputFile = path.join(reportsDir, outputFile);
66
+ // Attempt to parse `elements` if it's a string
67
+ let parsedElements = elements;
68
+ if (typeof parsedElements === 'string') {
69
+ try {
70
+ parsedElements = JSON.parse(parsedElements);
71
+ }
72
+ catch (e) {
73
+ throw new Error('Failed to parse "elements" string. It must be a valid JSON object.');
74
+ }
75
+ }
66
76
  // Validate elements
67
- for (const [id, element] of Object.entries(elements)) {
77
+ for (const [id, element] of Object.entries(parsedElements)) {
68
78
  if (element.type in chartRenderers) {
69
79
  // Это диаграмма
70
80
  const chartElement = element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vint.tri/report_gen_mcp",
3
- "version": "1.7.27",
3
+ "version": "1.7.29",
4
4
  "description": "CLI tool for generating HTML reports with embedded charts and images",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -1,468 +0,0 @@
1
- # УЛУЧШЕННЫЕ Инструкции для ИИ по работе с инструментом report_gen_mcp
2
-
3
- **ВАЖНО:** ВСЕГДА ИСПОЛЬЗУЙТЕ ИНСТРУМЕНТ `report_gen_mcp` КАЖДЫЙ РАЗ, КОГДА ПОЛЬЗОВАТЕЛЬ ЗАПРАШИВАЕТ СОЗДАНИЕ ОТЧЕТА ИЛИ ВИЗУАЛИЗАЦИИ ДАННЫХ!
4
-
5
- Этот документ содержит специальные инструкции для ИИ при работе с инструментом `report_gen_mcp`, чтобы обеспечить правильное взаимодействие с пользователем после генерации отчетов.
6
-
7
- ## Обязательное использование инструмента
8
-
9
- **КЛЮЧЕВОЕ ПРАВИЛО:** КАЖДЫЙ РАЗ, КОГДА ПОЛЬЗОВАТЕЛЬ ХОЧЕТ ПОЛУЧИТЬ ОТЧЕТ, ВИЗУАЛИЗАЦИЮ ДАННЫХ, ДИАГРАММУ ИЛИ ГРАФИК, НЕЗАВИСИМО ОТ ФОРМАТА ЗАПРОСА, ВЫ ДОЛЖНЫ ИСПОЛЬЗОВАТЬ ИНСТРУМЕНТ `report_gen_mcp`!
10
-
11
- НЕ пытайтесь создавать отчеты самостоятельно или предлагать пользователю делать это вручную. ВСЕГДА используйте инструмент `report_gen_mcp`.
12
-
13
- ## Общие принципы работы
14
-
15
- При использовании инструмента `report_gen_mcp` для генерации отчетов, ИИ должен следовать определенному протоколу взаимодействия с пользователем, чтобы обеспечить полную и удобную работу с созданными отчетами.
16
-
17
- ## Поддерживаемые элементы отчета
18
-
19
- Инструмент поддерживает вставку в отчеты следующих элементов:
20
- 1. **Диаграммы** (charts) - различные типы графиков (bar, line, pie, doughnut, radar, polarArea)
21
- 2. **Изображения** (images) - два типа:
22
- - Сгенерированные сервисом pollinations.ai по текстовому описанию
23
- - По URL из интернета
24
-
25
- ## После генерации отчета
26
-
27
- После успешной генерации отчета с помощью метода `generate-report`, ИИ получает всю необходимую информацию напрямую в ответе от метода. Необходимо предоставить пользователю следующую информацию:
28
-
29
- ### 1. Предоставление информации пользователю
30
-
31
- Из ответа метода `generate-report` извлеките следующую информацию и предоставьте пользователю:
32
-
33
- 1. **Путь к файлу**: Абсолютный путь к созданному отчету
34
- 2. **Ссылка на файл**: Кликабельная file:// ссылка для открытия отчета в браузере
35
- 3. **Содержимое файла**: Полный текст HTML содержимого отчета
36
-
37
- Обязательно покажите пользователю содержимое файла, чтобы он мог сразу ознакомиться с результатом без необходимости открывать файл отдельно.
38
-
39
- Пример формата ответа пользователю:
40
- ```
41
- Отчет успешно создан!
42
-
43
- 📁 Путь к файлу: /полный/путь/к/отчету.html
44
- 🌐 Ссылка для открытия в браузере: file:///полный/путь/к/отчету.html
45
-
46
- 📄 Содержимое отчета:
47
- <!DOCTYPE html>
48
- <html>
49
- <head>
50
- <meta charset="UTF-8">
51
- <title>Report</title>
52
- <style>
53
- body { font-family: Arial, sans-serif; }
54
- .chart-container, .image-container { margin: 20px 0; }
55
- </style>
56
- <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
57
- </head>
58
- <body>
59
- <h1>Отчет</h1>
60
- <div class="chart-container">
61
- <!-- Chart.js chart code -->
62
- </div>
63
- <div class="image-container">
64
- <!-- Generated image -->
65
- <img src="https://image.pollinations.ai/prompt/красивый%20закат" alt="красивый закат">
66
- </div>
67
- </body>
68
- </html>
69
-
70
- Вы можете открыть отчет, кликнув на ссылку выше или скопировав путь к файлу.
71
- ```
72
-
73
- ### 2. Альтернативный подход (при необходимости)
74
-
75
- Если по какой-то причине информация не была получена напрямую из метода `generate-report`, можно использовать дополнительные инструменты:
76
-
77
- #### Получение информации о файле
78
-
79
- Используйте инструмент `get-report-url` для получения полной информации о созданном отчете:
80
-
81
- ```json
82
- {
83
- "method": "tools/call",
84
- "params": {
85
- "name": "get-report-url",
86
- "arguments": {
87
- "filePath": "/путь/к/созданному/отчету.html"
88
- }
89
- }
90
- }
91
- ```
92
-
93
- #### Прикрепление содержимого файла
94
-
95
- Для того чтобы пользователь мог сразу просмотреть содержимое отчета без необходимости открывать файл, используйте инструмент `get-report-file`:
96
-
97
- ```json
98
- {
99
- "method": "tools/call",
100
- "params": {
101
- "name": "get-report-file",
102
- "arguments": {
103
- "filePath": "/путь/к/созданному/отчету.html"
104
- }
105
- }
106
- }
107
- ```
108
-
109
- ## Формат данных для диаграмм (графиков)
110
-
111
- Очень важно правильно формировать данные для диаграмм, чтобы избежать ошибок. Ниже приведены точные требования к формату данных для каждого типа диаграмм.
112
-
113
- ### Общие правила для всех типов диаграмм
114
-
115
- 1. Все цветовые значения (`backgroundColor`, `borderColor`) должны быть представлены в виде **массивов строк**, даже если это один цвет.
116
- 2. Все числовые данные (`data`) должны быть представлены в виде массивов чисел.
117
- 3. Все текстовые метки (`labels`) должны быть представлены в виде массивов строк.
118
-
119
- ### Линейные диаграммы (line)
120
-
121
- ```json
122
- {
123
- "type": "line",
124
- "config": {
125
- "labels": ["Январь", "Февраль", "Март", "Апрель", "Май"],
126
- "datasets": [
127
- {
128
- "label": "Продажи (USD)",
129
- "data": [12000, 19000, 15000, 18000, 22000],
130
- "borderColor": ["rgba(54, 162, 235, 1)"], // ВАЖНО: массив, даже для одного цвета!
131
- "fill": false
132
- }
133
- ],
134
- "options": {
135
- "title": "Ежемесячные продажи"
136
- }
137
- }
138
- }
139
- ```
140
-
141
- **Важно**: `borderColor` должен быть массивом строк, даже если используется только один цвет.
142
-
143
- ### Столбчатые диаграммы (bar)
144
-
145
- ```json
146
- {
147
- "type": "bar",
148
- "config": {
149
- "labels": ["Январь", "Февраль", "Март", "Апрель", "Май"],
150
- "datasets": [
151
- {
152
- "label": "Продажи (USD)",
153
- "data": [12000, 19000, 15000, 18000, 22000],
154
- "backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"], // Массив цветов
155
- "borderColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"] // Массив цветов
156
- }
157
- ],
158
- "options": {
159
- "title": "Ежемесячные продажи"
160
- }
161
- }
162
- }
163
- ```
164
-
165
- **Важно**: `backgroundColor` и `borderColor` должны быть массивами строк, даже если используется только один цвет.
166
-
167
- ### Круговые диаграммы (pie)
168
-
169
- ```json
170
- {
171
- "type": "pie",
172
- "config": {
173
- "labels": ["Красный", "Синий", "Желтый", "Зеленый", "Фиолетовый"],
174
- "datasets": [
175
- {
176
- "data": [12, 19, 3, 5, 2],
177
- "backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"], // Массив цветов
178
- "borderColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"] // Массив цветов
179
- }
180
- ],
181
- "options": {
182
- "title": "Распределение по категориям"
183
- }
184
- }
185
- }
186
- ```
187
-
188
- **Важно**: `backgroundColor` и `borderColor` должны быть массивами строк, даже если используется только один цвет.
189
-
190
- ### Кольцевые диаграммы (doughnut)
191
-
192
- ```json
193
- {
194
- "type": "doughnut",
195
- "config": {
196
- "labels": ["Красный", "Синий", "Желтый", "Зеленый", "Фиолетовый"],
197
- "datasets": [
198
- {
199
- "data": [12, 19, 3, 5, 2],
200
- "backgroundColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"], // Массив цветов
201
- "borderColor": ["#FF6384", "#36A2EB", "#FFCE56", "#4BC0C0", "#9966FF"] // Массив цветов
202
- }
203
- ],
204
- "options": {
205
- "title": "Распределение по категориям"
206
- }
207
- }
208
- }
209
- ```
210
-
211
- **Важно**: `backgroundColor` и `borderColor` должны быть массивами строк, даже если используется только один цвет.
212
-
213
- ### Радарные диаграммы (radar)
214
-
215
- ```json
216
- {
217
- "type": "radar",
218
- "config": {
219
- "labels": ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"],
220
- "datasets": [
221
- {
222
- "label": "Person 1",
223
- "data": [65, 59, 90, 81, 56, 55, 40],
224
- "backgroundColor": ["rgba(255, 99, 132, 0.2)"], // Массив цветов
225
- "borderColor": ["rgba(255, 99, 132, 1)"] // Массив цветов
226
- }
227
- ],
228
- "options": {
229
- "title": "Радарная диаграмма"
230
- }
231
- }
232
- }
233
- ```
234
-
235
- **Важно**: `backgroundColor` и `borderColor` должны быть массивами строк, даже если используется только один цвет.
236
-
237
- ### Полярные диаграммы (polarArea)
238
-
239
- ```json
240
- {
241
- "type": "polarArea",
242
- "config": {
243
- "labels": ["Red", "Green", "Yellow", "Grey", "Blue"],
244
- "datasets": [
245
- {
246
- "data": [11, 16, 7, 3, 14],
247
- "backgroundColor": ["#FF6384", "#4BC0C0", "#FFCE56", "#E7E9ED", "#36A2EB"], // Массив цветов
248
- "borderColor": ["#FF6384", "#4BC0C0", "#FFCE56", "#E7E9ED", "#36A2EB"] // Массив цветов
249
- }
250
- ],
251
- "options": {
252
- "title": "Полярная диаграмма"
253
- }
254
- }
255
- }
256
- ```
257
-
258
- **Важно**: `backgroundColor` и `borderColor` должны быть массивами строк.
259
-
260
- ## Формат данных для изображений
261
-
262
- ### Изображения, сгенерированные pollinations.ai
263
-
264
- ```json
265
- {
266
- "type": "pollinations",
267
- "config": {
268
- "prompt": "красивый закат над океаном",
269
- "width": 512,
270
- "height": 512,
271
- "model": "flux",
272
- "seed": 12345,
273
- "nologo": true,
274
- "enhance": true
275
- }
276
- }
277
- ```
278
-
279
- ### Изображения по URL
280
-
281
- ```json
282
- {
283
- "type": "url",
284
- "config": {
285
- "url": "https://example.com/image.jpg",
286
- "alt": "Описание изображения",
287
- "width": 500,
288
- "height": 300
289
- }
290
- }
291
- ```
292
-
293
- ## ПРАВИЛА ФОРМАТИРОВАНИЯ ПАРАМЕТРОВ (КРИТИЧЕСКИ ВАЖНО!)
294
-
295
- ### 1. ПАРАМЕТР "elements" ДОЛЖЕН БЫТЬ ОБЪЕКТОМ!
296
-
297
- ❌ НЕПРАВИЛЬНО (это вызывает ошибку "Expected object, received string"):
298
- ```json
299
- {
300
- "method": "generate-report",
301
- "params": {
302
- "document": "# Отчет\n\n[[chart:mychart]]",
303
- "elements": "{ \"mychart\": { \"type\": \"bar\", \"config\": { \"labels\": [\"A\", \"B\", \"C\"], \"datasets\": [{ \"label\": \"Data\", \"data\": [1, 2, 3], \"backgroundColor\": [\"red\", \"green\", \"blue\"], \"borderColor\": [\"red\", \"green\", \"blue\"] }] } }",
304
- "outputFile": "report.html"
305
- }
306
- }
307
- ```
308
-
309
- ✅ ПРАВИЛЬНО (elements - это объект, а не строка):
310
- ```json
311
- {
312
- "method": "generate-report",
313
- "params": {
314
- "document": "# Отчет\n\n[[chart:mychart]]",
315
- "elements": {
316
- "mychart": {
317
- "type": "bar",
318
- "config": {
319
- "labels": ["A", "B", "C"],
320
- "datasets": [{
321
- "label": "Data",
322
- "data": [1, 2, 3],
323
- "backgroundColor": ["red", "green", "blue"],
324
- "borderColor": ["red", "green", "blue"]
325
- }]
326
- }
327
- }
328
- },
329
- "outputFile": "report.html"
330
- }
331
- }
332
- ```
333
-
334
- ### 2. ЦВЕТОВЫЕ ЗНАЧЕНИЯ ДОЛЖНЫ БЫТЬ МАССИВАМИ!
335
-
336
- ❌ НЕПРАВИЛЬНО (это вызывает ошибку):
337
- ```json
338
- "backgroundColor": "red"
339
- "borderColor": "blue"
340
- ```
341
-
342
- ✅ ПРАВИЛЬНО (всегда используйте массивы):
343
- ```json
344
- "backgroundColor": ["red"]
345
- "borderColor": ["blue"]
346
- ```
347
-
348
- ### 3. ЧИСЛОВЫЕ ДАННЫЕ ДОЛЖНЫ БЫТЬ МАССИВАМИ!
349
-
350
- ❌ НЕПРАВИЛЬНО:
351
- ```json
352
- "data": 10
353
- ```
354
-
355
- ✅ ПРАВИЛЬНО:
356
- ```json
357
- "data": [10]
358
- ```
359
-
360
- ### 4. ТЕКСТОВЫЕ МЕТКИ ДОЛЖНЫ БЫТЬ МАССИВАМИ!
361
-
362
- ❌ НЕПРАВИЛЬНО:
363
- ```json
364
- "labels": "Январь"
365
- ```
366
-
367
- ✅ ПРАВИЛЬНО:
368
- ```json
369
- "labels": ["Январь"]
370
- ```
371
-
372
- ## Пример полного взаимодействия
373
-
374
- Вот пример того, как должно выглядеть полное взаимодействие с пользователем после генерации отчета:
375
-
376
- 1. Генерация отчета:
377
- ```json
378
- {
379
- "method": "generate-report",
380
- "params": {
381
- "document": "# Отчет\n\n[[chart:mychart]]",
382
- "elements": {
383
- "mychart": {
384
- "type": "bar",
385
- "config": {
386
- "labels": ["A", "B", "C"],
387
- "datasets": [{
388
- "label": "Data",
389
- "data": [1, 2, 3],
390
- "backgroundColor": ["red", "green", "blue"],
391
- "borderColor": ["red", "green", "blue"]
392
- }]
393
- }
394
- }
395
- },
396
- "outputFile": "report.html"
397
- }
398
- }
399
- ```
400
-
401
- 2. Ответ от метода `generate-report` уже содержит всю необходимую информацию:
402
- ```json
403
- {
404
- "content": [
405
- {
406
- "type": "text",
407
- "text": "Report generated successfully.\n\nFOR THE NEURAL NETWORK: Please present the following information to the user:\n1. Path to file: /path/to/report.html\n2. Web browser link: file:///path/to/report.html\n3. File content:\n<!DOCTYPE html>\n<html>...</html>"
408
- }
409
- ]
410
- }
411
- ```
412
-
413
- 3. Ответ пользователю (на основе информации из ответа метода):
414
- ```
415
- Отчет успешно создан!
416
-
417
- 📁 Путь к файлу: /path/to/report.html
418
- 🌐 Ссылка для открытия в браузере: file:///path/to/report.html
419
-
420
- Содержимое отчета:
421
- <!DOCTYPE html>
422
- <html>
423
- <head>
424
- <meta charset="UTF-8">
425
- <title>Report</title>
426
- <style>
427
- body { font-family: Arial, sans-serif; }
428
- .chart-container { margin: 20px 0; }
429
- </style>
430
- <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
431
- </head>
432
- <body>
433
- <h1>Отчет</h1>
434
- <div class="chart-container">
435
- <!-- Chart.js chart code -->
436
- </div>
437
- </body>
438
- </html>
439
-
440
- Вы можете открыть отчет, кликнув на ссылку выше или скопировав путь к файлу.
441
- ```
442
-
443
- ## Частые ошибки и как их избежать
444
-
445
- 1. **Ошибка формата параметров**: Передача `elements` как строки вместо объекта
446
- - ❌ Неправильно: `"elements": "{\"mychart\":{...}}"`
447
- - ✅ Правильно: `"elements": {"mychart":{...}}"
448
-
449
- 2. **Ошибка формата цвета**: Передача `borderColor` или `backgroundColor` как строк вместо массивов
450
- - ❌ Неправильно: `"borderColor": "red"`
451
- - ✅ Правильно: `"borderColor": ["red"]`
452
-
453
- 3. **Ошибка формата данных**: Передача числовых данных как отдельных значений вместо массивов
454
- - ❌ Неправильно: `"data": 10`
455
- - ✅ Правильно: `"data": [10]`
456
-
457
- 4. **Ошибка формата меток**: Передача меток как отдельных значений вместо массивов
458
- - ❌ Неправильно: `"labels": "Январь"`
459
- - ✅ Правильно: `"labels": ["Январь"]"
460
-
461
- ## Дополнительные рекомендации
462
-
463
- 1. Всегда проверяйте успешность выполнения каждой операции перед переходом к следующему шагу
464
- 2. Если какой-либо шаг завершается ошибкой, сообщите пользователю об этом и предложите решение
465
- 3. Убедитесь, что все пути к файлам корректны и файлы действительно существуют
466
- 4. При работе с Claude Desktop используйте параметр `tempDirectory` при генерации отчетов для избежания проблем с правами доступа
467
-
468
- Следование этим инструкциям обеспечит качественное и полное взаимодействие с пользователем при работе с инструментом генерации отчетов.