@quarri/claude-data-tools 1.2.7 → 1.3.1

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.
package/dist/index.js CHANGED
@@ -410,16 +410,18 @@ function formatToolResponse(toolName, result) {
410
410
  * Main entry point
411
411
  */
412
412
  async function main() {
413
- // Check for initial health check
414
- const health = await client.healthCheck();
415
- if (!health.success) {
416
- console.error('Warning: Could not connect to Quarri API');
417
- }
418
- // Create transport
413
+ // Create transport and connect immediately - don't block on health check
419
414
  const transport = new stdio_js_1.StdioServerTransport();
420
- // Connect server to transport
421
415
  await server.connect(transport);
422
416
  console.error('Quarri MCP server started');
417
+ // Non-blocking health check after server is ready
418
+ client.healthCheck().then((health) => {
419
+ if (!health.success) {
420
+ console.error('Warning: Could not connect to Quarri API');
421
+ }
422
+ }).catch(() => {
423
+ console.error('Warning: Health check failed');
424
+ });
423
425
  }
424
426
  // Run the server
425
427
  main().catch((error) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quarri/claude-data-tools",
3
- "version": "1.2.7",
3
+ "version": "1.3.1",
4
4
  "description": "Quarri Data Assistant - Natural language data analysis with Quarri",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,14 +1,14 @@
1
1
  ---
2
- description: Generate interactive Plotly charts rendered as MCP UI resources
2
+ description: Generate interactive Plotly charts as HTML files
3
3
  globs:
4
4
  alwaysApply: false
5
5
  ---
6
6
 
7
7
  # /quarri-chart - Interactive Chart Generation
8
8
 
9
- Generate data visualizations as interactive **Plotly.js** charts using MCP UI resources.
9
+ Generate data visualizations as interactive **Plotly.js** HTML files that open in the browser.
10
10
 
11
- **IMPORTANT**: Always use Plotly.js format. Do NOT generate React components, Recharts, Chart.js, or any other charting library. The MCP UI renderer only supports Plotly.js configuration objects.
11
+ **IMPORTANT**: Always generate HTML files with Plotly.js from CDN. Do NOT generate React components, inline JSON, or any other format.
12
12
 
13
13
  ## When to Use
14
14
 
@@ -33,7 +33,7 @@ Use `/quarri-chart` when users want visualizations:
33
33
 
34
34
  ```sql
35
35
  -- BAD: Returns potentially thousands of products
36
- SELECT product_name, SUM(sales) FROM orders GROUP BY product_name
36
+ SELECT product_name, SUM(sales) FROM quarri.schema GROUP BY product_name
37
37
 
38
38
  -- GOOD: Top 10 + Other
39
39
  WITH ranked AS (
@@ -54,7 +54,7 @@ ORDER BY total_sales DESC
54
54
 
55
55
  ```sql
56
56
  -- BAD: Daily data for 5 years = 1800+ points
57
- SELECT order_date, SUM(sales) FROM orders GROUP BY order_date
57
+ SELECT order_date, SUM(sales) FROM quarri.schema GROUP BY order_date
58
58
 
59
59
  -- GOOD: Aggregate to months
60
60
  SELECT DATE_TRUNC('month', order_date) as month, SUM(sales) as total_sales
@@ -66,6 +66,9 @@ ORDER BY month
66
66
  ## Primary Workflow
67
67
 
68
68
  ### Step 1: Query the data (with appropriate aggregation)
69
+
70
+ Use `quarri_execute_sql` to get the data:
71
+
69
72
  ```sql
70
73
  SELECT category, SUM(sales) as total_sales
71
74
  FROM quarri.schema
@@ -74,31 +77,386 @@ ORDER BY total_sales DESC
74
77
  LIMIT 20
75
78
  ```
76
79
 
77
- ### Step 2: Return chart as MCP UI resource
78
-
79
- After getting the data, construct a **Plotly.js** configuration and include it in your response. The chart will be rendered as an interactive UI component.
80
-
81
- **Example Plotly config for bar chart:**
82
- ```json
83
- {
84
- "data": [{
85
- "x": ["Category A", "Category B", "Category C"],
86
- "y": [450000, 380000, 290000],
87
- "type": "bar",
88
- "marker": { "color": "#4F46E5" }
89
- }],
90
- "layout": {
91
- "title": "Sales by Category",
92
- "xaxis": { "title": "Category" },
93
- "yaxis": { "title": "Sales ($)", "tickformat": "$,.0f" }
94
- }
95
- }
80
+ ### Step 2: Generate HTML file with Plotly
81
+
82
+ Write an HTML file that:
83
+ 1. Loads Plotly.js from CDN
84
+ 2. Embeds the query results as a JavaScript data array
85
+ 3. Builds Plotly traces from the data
86
+ 4. Renders the chart
87
+
88
+ ### Step 3: Open in browser
89
+
90
+ Use `open <filepath>` (macOS) or `xdg-open <filepath>` (Linux) to display the chart.
91
+
92
+ ## HTML Template
93
+
94
+ Use this template structure for all charts:
95
+
96
+ ```html
97
+ <!DOCTYPE html>
98
+ <html lang="en">
99
+ <head>
100
+ <meta charset="UTF-8">
101
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
102
+ <title>CHART_TITLE</title>
103
+ <script src="https://cdn.plot.ly/plotly-2.27.0.min.js"></script>
104
+ <style>
105
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f8fafc; }
106
+ #chart { width: 100%; height: 600px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
107
+ h1 { color: #1e293b; font-size: 1.5rem; margin-bottom: 16px; }
108
+ </style>
109
+ </head>
110
+ <body>
111
+ <h1>CHART_TITLE</h1>
112
+ <div id="chart"></div>
113
+ <script>
114
+ // Data from query results
115
+ const data = DATA_ARRAY;
116
+
117
+ // Build Plotly traces
118
+ const traces = [TRACE_CONFIG];
119
+
120
+ // Layout configuration
121
+ const layout = LAYOUT_CONFIG;
122
+
123
+ // Render chart
124
+ Plotly.newPlot('chart', traces, layout, { responsive: true });
125
+ </script>
126
+ </body>
127
+ </html>
128
+ ```
129
+
130
+ ## Complete Examples
131
+
132
+ ### Bar Chart Example
133
+
134
+ **Query:**
135
+ ```sql
136
+ SELECT category, SUM(sales) as total_sales
137
+ FROM quarri.schema
138
+ GROUP BY category
139
+ ORDER BY total_sales DESC
140
+ ```
141
+
142
+ **HTML file to write:**
143
+ ```html
144
+ <!DOCTYPE html>
145
+ <html lang="en">
146
+ <head>
147
+ <meta charset="UTF-8">
148
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
149
+ <title>Sales by Category</title>
150
+ <script src="https://cdn.plot.ly/plotly-2.27.0.min.js"></script>
151
+ <style>
152
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f8fafc; }
153
+ #chart { width: 100%; height: 600px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
154
+ h1 { color: #1e293b; font-size: 1.5rem; margin-bottom: 16px; }
155
+ </style>
156
+ </head>
157
+ <body>
158
+ <h1>Sales by Category</h1>
159
+ <div id="chart"></div>
160
+ <script>
161
+ const data = [
162
+ { category: "Technology", total_sales: 836154.03 },
163
+ { category: "Furniture", total_sales: 741999.80 },
164
+ { category: "Office Supplies", total_sales: 719047.03 }
165
+ ];
166
+
167
+ const traces = [{
168
+ x: data.map(d => d.category),
169
+ y: data.map(d => d.total_sales),
170
+ type: 'bar',
171
+ marker: { color: '#4F46E5' },
172
+ text: data.map(d => '$' + (d.total_sales / 1000).toFixed(0) + 'K'),
173
+ textposition: 'auto'
174
+ }];
175
+
176
+ const layout = {
177
+ xaxis: { title: 'Category' },
178
+ yaxis: { title: 'Sales ($)', tickformat: '$,.0f' },
179
+ margin: { t: 20, r: 20, b: 60, l: 80 }
180
+ };
181
+
182
+ Plotly.newPlot('chart', traces, layout, { responsive: true });
183
+ </script>
184
+ </body>
185
+ </html>
186
+ ```
187
+
188
+ ### Line Chart Example (Time Series)
189
+
190
+ **Query:**
191
+ ```sql
192
+ SELECT DATE_TRUNC('month', order_date) as month, SUM(sales) as total_sales
193
+ FROM quarri.schema
194
+ GROUP BY DATE_TRUNC('month', order_date)
195
+ ORDER BY month
196
+ ```
197
+
198
+ **HTML file to write:**
199
+ ```html
200
+ <!DOCTYPE html>
201
+ <html lang="en">
202
+ <head>
203
+ <meta charset="UTF-8">
204
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
205
+ <title>Monthly Sales Trend</title>
206
+ <script src="https://cdn.plot.ly/plotly-2.27.0.min.js"></script>
207
+ <style>
208
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f8fafc; }
209
+ #chart { width: 100%; height: 600px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
210
+ h1 { color: #1e293b; font-size: 1.5rem; margin-bottom: 16px; }
211
+ </style>
212
+ </head>
213
+ <body>
214
+ <h1>Monthly Sales Trend</h1>
215
+ <div id="chart"></div>
216
+ <script>
217
+ const data = [
218
+ { month: "2021-01-01", total_sales: 94925.57 },
219
+ { month: "2021-02-01", total_sales: 59751.25 },
220
+ { month: "2021-03-01", total_sales: 115973.79 }
221
+ // ... more data points
222
+ ];
223
+
224
+ const traces = [{
225
+ x: data.map(d => d.month),
226
+ y: data.map(d => d.total_sales),
227
+ type: 'scatter',
228
+ mode: 'lines+markers',
229
+ line: { color: '#4F46E5', width: 3 },
230
+ marker: { size: 8 }
231
+ }];
232
+
233
+ const layout = {
234
+ xaxis: { title: 'Month' },
235
+ yaxis: { title: 'Sales ($)', tickformat: '$,.0f' },
236
+ margin: { t: 20, r: 20, b: 60, l: 80 }
237
+ };
238
+
239
+ Plotly.newPlot('chart', traces, layout, { responsive: true });
240
+ </script>
241
+ </body>
242
+ </html>
243
+ ```
244
+
245
+ ### Multi-Series Line Chart
246
+
247
+ **Query:**
248
+ ```sql
249
+ SELECT DATE_TRUNC('month', order_date) as month, category, SUM(sales) as total_sales
250
+ FROM quarri.schema
251
+ GROUP BY DATE_TRUNC('month', order_date), category
252
+ ORDER BY month, category
253
+ ```
254
+
255
+ **HTML file to write:**
256
+ ```html
257
+ <!DOCTYPE html>
258
+ <html lang="en">
259
+ <head>
260
+ <meta charset="UTF-8">
261
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
262
+ <title>Sales Trend by Category</title>
263
+ <script src="https://cdn.plot.ly/plotly-2.27.0.min.js"></script>
264
+ <style>
265
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f8fafc; }
266
+ #chart { width: 100%; height: 600px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
267
+ h1 { color: #1e293b; font-size: 1.5rem; margin-bottom: 16px; }
268
+ </style>
269
+ </head>
270
+ <body>
271
+ <h1>Sales Trend by Category</h1>
272
+ <div id="chart"></div>
273
+ <script>
274
+ const data = [
275
+ { month: "2021-01-01", category: "Furniture", total_sales: 28262.03 },
276
+ { month: "2021-01-01", category: "Office Supplies", total_sales: 21879.28 },
277
+ { month: "2021-01-01", category: "Technology", total_sales: 44784.26 }
278
+ // ... more data points
279
+ ];
280
+
281
+ // Group by category
282
+ const categories = [...new Set(data.map(d => d.category))];
283
+ const colors = ['#4F46E5', '#10B981', '#F59E0B', '#EF4444', '#8B5CF6'];
284
+
285
+ const traces = categories.map((cat, i) => {
286
+ const catData = data.filter(d => d.category === cat);
287
+ return {
288
+ x: catData.map(d => d.month),
289
+ y: catData.map(d => d.total_sales),
290
+ name: cat,
291
+ type: 'scatter',
292
+ mode: 'lines+markers',
293
+ line: { color: colors[i % colors.length], width: 2 }
294
+ };
295
+ });
296
+
297
+ const layout = {
298
+ xaxis: { title: 'Month' },
299
+ yaxis: { title: 'Sales ($)', tickformat: '$,.0f' },
300
+ margin: { t: 20, r: 20, b: 60, l: 80 },
301
+ legend: { orientation: 'h', y: -0.15 }
302
+ };
303
+
304
+ Plotly.newPlot('chart', traces, layout, { responsive: true });
305
+ </script>
306
+ </body>
307
+ </html>
96
308
  ```
97
309
 
98
- The response should include this as a resource block with:
99
- - URI: `ui://quarri/chart`
100
- - MIME type: `application/vnd.quarri.chart+json`
101
- - Content: JSON with `type: "chart"` and `plotly: { data, layout }`
310
+ ### Horizontal Bar Chart (Many Categories)
311
+
312
+ **HTML file to write:**
313
+ ```html
314
+ <!DOCTYPE html>
315
+ <html lang="en">
316
+ <head>
317
+ <meta charset="UTF-8">
318
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
319
+ <title>Top 10 Products by Sales</title>
320
+ <script src="https://cdn.plot.ly/plotly-2.27.0.min.js"></script>
321
+ <style>
322
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f8fafc; }
323
+ #chart { width: 100%; height: 600px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
324
+ h1 { color: #1e293b; font-size: 1.5rem; margin-bottom: 16px; }
325
+ </style>
326
+ </head>
327
+ <body>
328
+ <h1>Top 10 Products by Sales</h1>
329
+ <div id="chart"></div>
330
+ <script>
331
+ const data = [
332
+ { product_name: "Canon imageCLASS 2200", total_sales: 61599.82 },
333
+ { product_name: "Fellowes PB500", total_sales: 27453.38 }
334
+ // ... more products
335
+ ];
336
+
337
+ // Reverse for horizontal bar (top item at top)
338
+ const sorted = [...data].reverse();
339
+
340
+ const traces = [{
341
+ y: sorted.map(d => d.product_name),
342
+ x: sorted.map(d => d.total_sales),
343
+ type: 'bar',
344
+ orientation: 'h',
345
+ marker: { color: '#4F46E5' }
346
+ }];
347
+
348
+ const layout = {
349
+ xaxis: { title: 'Sales ($)', tickformat: '$,.0f' },
350
+ margin: { t: 20, r: 20, b: 60, l: 200 }
351
+ };
352
+
353
+ Plotly.newPlot('chart', traces, layout, { responsive: true });
354
+ </script>
355
+ </body>
356
+ </html>
357
+ ```
358
+
359
+ ### Pie/Donut Chart
360
+
361
+ **HTML file to write:**
362
+ ```html
363
+ <!DOCTYPE html>
364
+ <html lang="en">
365
+ <head>
366
+ <meta charset="UTF-8">
367
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
368
+ <title>Sales Distribution</title>
369
+ <script src="https://cdn.plot.ly/plotly-2.27.0.min.js"></script>
370
+ <style>
371
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f8fafc; }
372
+ #chart { width: 100%; height: 600px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
373
+ h1 { color: #1e293b; font-size: 1.5rem; margin-bottom: 16px; }
374
+ </style>
375
+ </head>
376
+ <body>
377
+ <h1>Sales Distribution by Category</h1>
378
+ <div id="chart"></div>
379
+ <script>
380
+ const data = [
381
+ { category: "Technology", total_sales: 836154.03 },
382
+ { category: "Furniture", total_sales: 741999.80 },
383
+ { category: "Office Supplies", total_sales: 719047.03 }
384
+ ];
385
+
386
+ const traces = [{
387
+ labels: data.map(d => d.category),
388
+ values: data.map(d => d.total_sales),
389
+ type: 'pie',
390
+ hole: 0.4,
391
+ marker: { colors: ['#4F46E5', '#10B981', '#F59E0B'] },
392
+ textinfo: 'label+percent'
393
+ }];
394
+
395
+ const layout = {
396
+ margin: { t: 20, r: 20, b: 20, l: 20 },
397
+ showlegend: true
398
+ };
399
+
400
+ Plotly.newPlot('chart', traces, layout, { responsive: true });
401
+ </script>
402
+ </body>
403
+ </html>
404
+ ```
405
+
406
+ ### Grouped Bar Chart
407
+
408
+ **HTML file to write:**
409
+ ```html
410
+ <!DOCTYPE html>
411
+ <html lang="en">
412
+ <head>
413
+ <meta charset="UTF-8">
414
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
415
+ <title>Year over Year Comparison</title>
416
+ <script src="https://cdn.plot.ly/plotly-2.27.0.min.js"></script>
417
+ <style>
418
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f8fafc; }
419
+ #chart { width: 100%; height: 600px; background: white; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); }
420
+ h1 { color: #1e293b; font-size: 1.5rem; margin-bottom: 16px; }
421
+ </style>
422
+ </head>
423
+ <body>
424
+ <h1>Year over Year Comparison</h1>
425
+ <div id="chart"></div>
426
+ <script>
427
+ const data = [
428
+ { year: 2023, quarter: "Q1", sales: 120000 },
429
+ { year: 2023, quarter: "Q2", sales: 150000 },
430
+ { year: 2024, quarter: "Q1", sales: 140000 },
431
+ { year: 2024, quarter: "Q2", sales: 165000 }
432
+ ];
433
+
434
+ const years = [...new Set(data.map(d => d.year))];
435
+ const colors = ['#4F46E5', '#10B981'];
436
+
437
+ const traces = years.map((year, i) => {
438
+ const yearData = data.filter(d => d.year === year);
439
+ return {
440
+ x: yearData.map(d => d.quarter),
441
+ y: yearData.map(d => d.sales),
442
+ name: String(year),
443
+ type: 'bar',
444
+ marker: { color: colors[i] }
445
+ };
446
+ });
447
+
448
+ const layout = {
449
+ barmode: 'group',
450
+ xaxis: { title: 'Quarter' },
451
+ yaxis: { title: 'Sales ($)', tickformat: '$,.0f' },
452
+ margin: { t: 20, r: 20, b: 60, l: 80 }
453
+ };
454
+
455
+ Plotly.newPlot('chart', traces, layout, { responsive: true });
456
+ </script>
457
+ </body>
458
+ </html>
459
+ ```
102
460
 
103
461
  ## Chart Type Selection
104
462
 
@@ -129,158 +487,6 @@ START: What is the primary analysis goal?
129
487
  └─→ Two numeric → SCATTER PLOT
130
488
  ```
131
489
 
132
- ## Plotly Templates
133
-
134
- ### Bar Chart
135
- ```javascript
136
- {
137
- "data": [{
138
- "x": ["Category A", "Category B", "Category C"],
139
- "y": [450000, 380000, 290000],
140
- "type": "bar",
141
- "marker": {
142
- "color": ["#4F46E5", "#7C3AED", "#A78BFA"]
143
- },
144
- "text": ["$450K", "$380K", "$290K"],
145
- "textposition": "auto"
146
- }],
147
- "layout": {
148
- "title": "Sales by Category",
149
- "xaxis": { "title": "Category" },
150
- "yaxis": { "title": "Sales ($)", "tickformat": "$,.0f" }
151
- }
152
- }
153
- ```
154
-
155
- ### Horizontal Bar (many categories)
156
- ```javascript
157
- {
158
- "data": [{
159
- "y": ["Product A", "Product B", "Product C", "Product D", "Product E"],
160
- "x": [85000, 72000, 65000, 58000, 45000],
161
- "type": "bar",
162
- "orientation": "h",
163
- "marker": { "color": "#4F46E5" }
164
- }],
165
- "layout": {
166
- "title": "Top Products by Revenue",
167
- "xaxis": { "title": "Revenue ($)", "tickformat": "$,.0f" },
168
- "margin": { "l": 120 }
169
- }
170
- }
171
- ```
172
-
173
- ### Line Chart (time series)
174
- ```javascript
175
- {
176
- "data": [{
177
- "x": ["2024-01", "2024-02", "2024-03", "2024-04", "2024-05", "2024-06"],
178
- "y": [120000, 135000, 128000, 145000, 160000, 175000],
179
- "type": "scatter",
180
- "mode": "lines+markers",
181
- "line": { "color": "#4F46E5", "width": 3 },
182
- "marker": { "size": 8 }
183
- }],
184
- "layout": {
185
- "title": "Monthly Revenue Trend",
186
- "xaxis": { "title": "Month" },
187
- "yaxis": { "title": "Revenue ($)", "tickformat": "$,.0f" }
188
- }
189
- }
190
- ```
191
-
192
- ### Multi-Line Chart
193
- ```javascript
194
- {
195
- "data": [
196
- {
197
- "x": ["Jan", "Feb", "Mar", "Apr"],
198
- "y": [100, 120, 115, 140],
199
- "name": "Product A",
200
- "type": "scatter",
201
- "mode": "lines+markers"
202
- },
203
- {
204
- "x": ["Jan", "Feb", "Mar", "Apr"],
205
- "y": [80, 95, 110, 120],
206
- "name": "Product B",
207
- "type": "scatter",
208
- "mode": "lines+markers"
209
- }
210
- ],
211
- "layout": {
212
- "title": "Product Comparison",
213
- "xaxis": { "title": "Month" },
214
- "yaxis": { "title": "Sales" }
215
- }
216
- }
217
- ```
218
-
219
- ### Pie/Donut Chart
220
- ```javascript
221
- {
222
- "data": [{
223
- "labels": ["Technology", "Furniture", "Office Supplies"],
224
- "values": [5471124, 4730801, 4144724],
225
- "type": "pie",
226
- "hole": 0.4,
227
- "marker": {
228
- "colors": ["#4F46E5", "#10B981", "#F59E0B"]
229
- },
230
- "textinfo": "label+percent"
231
- }],
232
- "layout": {
233
- "title": "Sales Distribution by Category"
234
- }
235
- }
236
- ```
237
-
238
- ### Scatter Plot
239
- ```javascript
240
- {
241
- "data": [{
242
- "x": [/* x values */],
243
- "y": [/* y values */],
244
- "mode": "markers",
245
- "type": "scatter",
246
- "marker": {
247
- "size": 10,
248
- "color": "#4F46E5",
249
- "opacity": 0.7
250
- }
251
- }],
252
- "layout": {
253
- "title": "Correlation Analysis",
254
- "xaxis": { "title": "Variable X" },
255
- "yaxis": { "title": "Variable Y" }
256
- }
257
- }
258
- ```
259
-
260
- ### Grouped Bar Chart
261
- ```javascript
262
- {
263
- "data": [
264
- {
265
- "x": ["Q1", "Q2", "Q3", "Q4"],
266
- "y": [120, 150, 180, 200],
267
- "name": "2023",
268
- "type": "bar"
269
- },
270
- {
271
- "x": ["Q1", "Q2", "Q3", "Q4"],
272
- "y": [140, 165, 195, 220],
273
- "name": "2024",
274
- "type": "bar"
275
- }
276
- ],
277
- "layout": {
278
- "title": "Year over Year Comparison",
279
- "barmode": "group"
280
- }
281
- }
282
- ```
283
-
284
490
  ## Color Palettes
285
491
 
286
492
  ```javascript
@@ -313,41 +519,36 @@ tickformat: '.1%' // 45.2%
313
519
  tickformat: '~s' // 1.2M, 3.4K
314
520
  ```
315
521
 
316
- ## MCP UI Resource Format
522
+ ## File Output
317
523
 
318
- The chart should be returned as an MCP UI resource with the following structure:
319
-
320
- ```json
321
- {
322
- "type": "chart",
323
- "title": "Chart Title",
324
- "plotly": {
325
- "data": [/* Plotly data traces */],
326
- "layout": {/* Plotly layout config */}
327
- }
328
- }
524
+ **Always write to a descriptive filename:**
525
+ ```
526
+ /tmp/quarri-chart-sales-by-category.html
527
+ /tmp/quarri-chart-monthly-trend.html
528
+ /tmp/quarri-chart-top-products.html
329
529
  ```
330
530
 
331
- This is automatically rendered by Claude Code when you include the resource block in your response.
332
-
333
- ## Alternative Outputs
531
+ **Then open in browser:**
532
+ ```bash
533
+ # macOS
534
+ open /tmp/quarri-chart-sales-by-category.html
334
535
 
335
- ### QuickChart URL (for sharing/embedding)
336
- When user specifically needs a URL:
337
- ```
338
- https://quickchart.io/chart?c={type:'bar',data:{labels:['A','B','C'],datasets:[{data:[10,20,15]}]}}
536
+ # Linux
537
+ xdg-open /tmp/quarri-chart-sales-by-category.html
339
538
  ```
340
539
 
341
- ### ASCII Chart (terminal only)
342
- When user is in a terminal-only environment:
343
- ```
344
- Sales by Category
540
+ ## Validation Checklist
345
541
 
346
- Technology |████████████████████████████████████████ $5.47M
347
- Furniture |██████████████████████████████████ $4.73M
348
- Office Supplies |██████████████████████████████ $4.14M
349
- 0 $3M $6M
350
- ```
542
+ Before generating a chart, verify:
543
+
544
+ 1. **Format**: Generating an HTML file with Plotly.js from CDN
545
+ 2. **Data embedded**: Query results are in a `const data = [...]` JavaScript array
546
+ 3. **Data points**: ≤ 500 points total (aggregate or sample if more)
547
+ 4. **Categories**: ≤ 20 categories (use Top N + Other if more)
548
+ 5. **Time granularity**: Appropriate for date range (don't show daily for multi-year)
549
+ 6. **Aggregation**: Never chart raw transactions - always GROUP BY
550
+ 7. **File written**: HTML file saved to /tmp/quarri-chart-*.html
551
+ 8. **Browser opened**: File opened with `open` or `xdg-open`
351
552
 
352
553
  ## Integration
353
554
 
@@ -355,29 +556,3 @@ Charts work best when combined with:
355
556
  - `/quarri-query`: Get data first, then visualize
356
557
  - `/quarri-analyze`: Called as part of full analysis pipeline
357
558
  - `/quarri-insights`: Visual support for statistical findings
358
-
359
- ## Validation Checklist
360
-
361
- Before generating a chart, verify:
362
-
363
- 1. **Library**: Using Plotly.js format (NOT React, Recharts, Chart.js, D3, or others)
364
- 2. **Data points**: ≤ 500 points total (aggregate or sample if more)
365
- 3. **Categories**: ≤ 20 categories (use Top N + Other if more)
366
- 4. **Time granularity**: Appropriate for date range (don't show daily for multi-year)
367
- 5. **Aggregation**: Never chart raw transactions - always GROUP BY
368
-
369
- **Output format must be:**
370
- ```json
371
- {
372
- "data": [{ /* Plotly trace */ }],
373
- "layout": { /* Plotly layout */ }
374
- }
375
- ```
376
-
377
- **NOT:**
378
- ```jsx
379
- // WRONG - Do not generate React components
380
- <BarChart data={data}>
381
- <Bar dataKey="value" />
382
- </BarChart>
383
- ```