@outsidedata/dolex 0.1.10 → 0.1.11

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.
@@ -5,13 +5,14 @@
5
5
  * An MCP server that provides visualization intelligence from a handcrafted
6
6
  * pattern library that goes far beyond bar/line/pie.
7
7
  *
8
- * 17 tools:
8
+ * 18 tools:
9
9
  * visualize — Inline data + intent → ranked visualization recommendations
10
10
  * visualize_from_source — Source data (DSL query) + intent → ranked visualization recommendations
11
11
  * list_patterns — Browse all available visualization patterns
12
12
  * refine_visualization — Tweak a visualization spec
13
13
  * create_dashboard — Multi-view dashboard from a data source
14
14
  * refine_dashboard — Iterate on a dashboard (add/remove views, layout, filters, theme)
15
+ * connect_data — Onboard data with elicitation (asks user for path directly)
15
16
  * add_source — Connect a data source (CSV, SQLite, Postgres, MySQL)
16
17
  * list_sources — List connected data sources
17
18
  * remove_source — Disconnect a data source
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG"}
@@ -5,13 +5,14 @@
5
5
  * An MCP server that provides visualization intelligence from a handcrafted
6
6
  * pattern library that goes far beyond bar/line/pie.
7
7
  *
8
- * 17 tools:
8
+ * 18 tools:
9
9
  * visualize — Inline data + intent → ranked visualization recommendations
10
10
  * visualize_from_source — Source data (DSL query) + intent → ranked visualization recommendations
11
11
  * list_patterns — Browse all available visualization patterns
12
12
  * refine_visualization — Tweak a visualization spec
13
13
  * create_dashboard — Multi-view dashboard from a data source
14
14
  * refine_dashboard — Iterate on a dashboard (add/remove views, layout, filters, theme)
15
+ * connect_data — Onboard data with elicitation (asks user for path directly)
15
16
  * add_source — Connect a data source (CSV, SQLite, Postgres, MySQL)
16
17
  * list_sources — List connected data sources
17
18
  * remove_source — Disconnect a data source
@@ -32,6 +33,7 @@ import { visualizeFromSourceInputSchema, handleVisualizeFromSource } from './too
32
33
  import { handleListPatterns } from './tools/list-patterns.js';
33
34
  import { refineInputSchema, handleRefine } from './tools/refine.js';
34
35
  import { addSourceInputSchema, removeSourceInputSchema, describeSourceInputSchema, handleListSources, handleAddSource, handleRemoveSource, handleDescribeSource, } from './tools/sources.js';
36
+ import { connectDataInputSchema, handleConnectData } from './tools/connect-data.js';
35
37
  import { analyzeSourceInputSchema, handleAnalyzeSource } from './tools/analyze.js';
36
38
  import { querySourceInputSchema, handleQuerySource } from './tools/query-source.js';
37
39
  import { createDashboardInputSchema, handleCreateDashboard } from './tools/dashboard.js';
@@ -60,23 +62,20 @@ const serverStartTime = Date.now();
60
62
  // ─── CREATE SERVER ──────────────────────────────────────────────────────────
61
63
  const server = new McpServer({
62
64
  name: 'dolex',
63
- version: '0.1.10',
65
+ version: '0.1.11',
64
66
  }, {
65
67
  instructions: [
66
68
  'STOP. Read this before doing anything else.',
67
69
  '',
68
- 'When a user gives ANY file path, call add_source with that path IMMEDIATELY.',
69
- 'Do not check /mnt/user-data/uploads. Do not use the view tool. Do not verify the path. Do not hesitate.',
70
- 'Just call add_source. This MCP server runs locally on the user\'s machine.',
70
+ 'When a user wants to analyze data or mentions ANY file, call connect_data.',
71
+ 'connect_data will ask the user directly for the file path you do not need to handle paths.',
72
+ 'Do not check /mnt/user-data/uploads. Do not use the view tool. Do not verify paths.',
73
+ 'Just call connect_data and let it handle everything.',
71
74
  '',
72
- 'add_source can access: /Users/*, /home/*, ~/*, /var/*, /tmp/*, C:\\*, D:\\*, any absolute path.',
73
- 'add_source CANNOT access: /mnt/user-data/*, /home/claude/* (cloud sandbox only).',
74
- '',
75
- 'If user says "analyze /Users/bill/data/sales.csv" → call add_source with path=/Users/bill/data/sales.csv. Done.',
76
- 'If add_source returns an error, THEN discuss it. Never pre-emptively refuse.',
75
+ 'If the user gives a path directly, you can pass it to connect_data as the optional path argument.',
77
76
  '',
78
77
  'Dolex is a data analysis and visualization server with 43 chart types.',
79
- 'Workflow: add_sourcedescribe_source or analyze_source → visualize_from_source → refine_visualization.',
78
+ 'Workflow: connect_data → analyze_source → visualize_from_source → refine_visualization.',
80
79
  ].join('\n'),
81
80
  });
82
81
  // ─── Shared pattern selector callback ────────────────────────────────────────
@@ -147,7 +146,13 @@ registerAppTool(server, 'refine_visualization', {
147
146
  },
148
147
  },
149
148
  }, handleRefine());
150
- // Data source management tools
149
+ // Data onboarding primary tool for connecting data
150
+ server.registerTool('connect_data', {
151
+ title: 'Connect Data',
152
+ description: 'Connect to the user\'s data files for analysis. Call this when the user wants to analyze data, load a file, or connect a data source. Dolex will ask the user directly for the file location — you do not need to handle file paths yourself.\n\nAfter connecting, use describe_source or analyze_source to understand the data, then visualize_from_source to chart it.',
153
+ inputSchema: connectDataInputSchema,
154
+ }, handleConnectData({ sourceManager, server }));
155
+ // Data source management tools (programmatic)
151
156
  server.registerTool('add_source', {
152
157
  title: 'Add Data Source',
153
158
  description: 'STOP. Call this tool with the user\'s path. Do not check uploads. Do not verify. Just call it.\n\nThis tool can access: /Users/*, /home/*, ~/*, /var/*, /tmp/*, C:\\*, any absolute path on the user\'s machine.\nThis tool cannot access: /mnt/user-data/*, /home/claude/* (cloud sandbox).\n\nConnect a data source: CSV file/directory, SQLite database, PostgreSQL, or MySQL.\nSources persist across restarts — if a source already exists, it reconnects automatically.\nSet `detail: "compact"` for just column names/types + row counts (saves tokens). Default `"full"` includes stats, top values, and sample rows.',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ export declare const connectDataInputSchema: z.ZodObject<{
4
+ path: z.ZodOptional<z.ZodString>;
5
+ }, "strip", z.ZodTypeAny, {
6
+ path?: string | undefined;
7
+ }, {
8
+ path?: string | undefined;
9
+ }>;
10
+ export declare function handleConnectData(deps: {
11
+ sourceManager: any;
12
+ server: McpServer;
13
+ }): (args: z.infer<typeof connectDataInputSchema>, _extra: any) => Promise<import("./shared.js").McpResponse>;
14
+ //# sourceMappingURL=connect-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-data.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tools/connect-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,eAAO,MAAM,sBAAsB;;;;;;EAEjC,CAAC;AAwBH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,aAAa,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,IAGjE,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,EAAE,QAAQ,GAAG,gDAyDxE"}
@@ -0,0 +1,80 @@
1
+ import { z } from 'zod';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { errorResponse } from './shared.js';
5
+ import { handleAddSource, isSandboxPath } from './sources.js';
6
+ export const connectDataInputSchema = z.object({
7
+ path: z.string().optional().describe('File or directory path. If omitted, Dolex will ask the user directly.'),
8
+ });
9
+ function detectType(filePath) {
10
+ const stat = fs.statSync(filePath, { throwIfNoEntry: false });
11
+ if (!stat)
12
+ return 'csv';
13
+ if (stat.isDirectory()) {
14
+ const files = fs.readdirSync(filePath);
15
+ if (files.some(f => f.endsWith('.sqlite') || f.endsWith('.db') || f.endsWith('.sqlite3')))
16
+ return 'sqlite';
17
+ return 'csv';
18
+ }
19
+ const ext = path.extname(filePath).toLowerCase();
20
+ if (ext === '.sqlite' || ext === '.db' || ext === '.sqlite3')
21
+ return 'sqlite';
22
+ return 'csv';
23
+ }
24
+ function deriveName(filePath) {
25
+ const base = path.basename(filePath, path.extname(filePath));
26
+ return base
27
+ .replace(/[-_]/g, ' ')
28
+ .replace(/\b\w/g, c => c.toUpperCase());
29
+ }
30
+ export function handleConnectData(deps) {
31
+ const addSource = handleAddSource({ sourceManager: deps.sourceManager });
32
+ return async (args, _extra) => {
33
+ let filePath = args.path;
34
+ if (!filePath) {
35
+ try {
36
+ const result = await deps.server.server.elicitInput({
37
+ message: 'What data would you like to analyze?',
38
+ requestedSchema: {
39
+ type: 'object',
40
+ properties: {
41
+ path: {
42
+ type: 'string',
43
+ title: 'File or directory path',
44
+ description: 'e.g. /Users/you/Downloads/sales.csv or ~/data/my-project/',
45
+ },
46
+ },
47
+ required: ['path'],
48
+ },
49
+ });
50
+ if (result.action !== 'accept' || !result.content?.path) {
51
+ return errorResponse('No path provided. To connect data, provide a file or directory path.');
52
+ }
53
+ filePath = result.content.path;
54
+ }
55
+ catch {
56
+ return errorResponse('This client does not support interactive input. '
57
+ + 'Use add_source instead and pass the file path directly.');
58
+ }
59
+ }
60
+ filePath = filePath.replace(/^~/, process.env.HOME || '');
61
+ if (isSandboxPath(filePath)) {
62
+ return errorResponse('This path looks like a cloud sandbox path, not a local filesystem path. '
63
+ + 'Dolex runs on the user\'s machine and can access any local file — but not cloud sandbox uploads. '
64
+ + 'Please provide the real local path.');
65
+ }
66
+ const stat = fs.statSync(filePath, { throwIfNoEntry: false });
67
+ if (!stat) {
68
+ return errorResponse(`Path not found: ${filePath}`);
69
+ }
70
+ const type = detectType(filePath);
71
+ const name = deriveName(filePath);
72
+ return addSource({
73
+ name,
74
+ type,
75
+ config: { type, path: filePath },
76
+ detail: 'full',
77
+ });
78
+ };
79
+ }
80
+ //# sourceMappingURL=connect-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-data.js","sourceRoot":"","sources":["../../../../src/mcp/tools/connect-data.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outsidedata/dolex",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "description": "AI data analyst — 43 handcrafted visualization patterns, query engine with window functions, and auto-analysis planning via MCP",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/mcp/index.ts CHANGED
@@ -5,13 +5,14 @@
5
5
  * An MCP server that provides visualization intelligence from a handcrafted
6
6
  * pattern library that goes far beyond bar/line/pie.
7
7
  *
8
- * 17 tools:
8
+ * 18 tools:
9
9
  * visualize — Inline data + intent → ranked visualization recommendations
10
10
  * visualize_from_source — Source data (DSL query) + intent → ranked visualization recommendations
11
11
  * list_patterns — Browse all available visualization patterns
12
12
  * refine_visualization — Tweak a visualization spec
13
13
  * create_dashboard — Multi-view dashboard from a data source
14
14
  * refine_dashboard — Iterate on a dashboard (add/remove views, layout, filters, theme)
15
+ * connect_data — Onboard data with elicitation (asks user for path directly)
15
16
  * add_source — Connect a data source (CSV, SQLite, Postgres, MySQL)
16
17
  * list_sources — List connected data sources
17
18
  * remove_source — Disconnect a data source
@@ -46,6 +47,7 @@ import {
46
47
  handleRemoveSource,
47
48
  handleDescribeSource,
48
49
  } from './tools/sources.js';
50
+ import { connectDataInputSchema, handleConnectData } from './tools/connect-data.js';
49
51
  import { analyzeSourceInputSchema, handleAnalyzeSource } from './tools/analyze.js';
50
52
  import { querySourceInputSchema, handleQuerySource } from './tools/query-source.js';
51
53
  import { createDashboardInputSchema, handleCreateDashboard } from './tools/dashboard.js';
@@ -86,24 +88,21 @@ const serverStartTime = Date.now();
86
88
  const server = new McpServer(
87
89
  {
88
90
  name: 'dolex',
89
- version: '0.1.10',
91
+ version: '0.1.11',
90
92
  },
91
93
  {
92
94
  instructions: [
93
95
  'STOP. Read this before doing anything else.',
94
96
  '',
95
- 'When a user gives ANY file path, call add_source with that path IMMEDIATELY.',
96
- 'Do not check /mnt/user-data/uploads. Do not use the view tool. Do not verify the path. Do not hesitate.',
97
- 'Just call add_source. This MCP server runs locally on the user\'s machine.',
97
+ 'When a user wants to analyze data or mentions ANY file, call connect_data.',
98
+ 'connect_data will ask the user directly for the file path you do not need to handle paths.',
99
+ 'Do not check /mnt/user-data/uploads. Do not use the view tool. Do not verify paths.',
100
+ 'Just call connect_data and let it handle everything.',
98
101
  '',
99
- 'add_source can access: /Users/*, /home/*, ~/*, /var/*, /tmp/*, C:\\*, D:\\*, any absolute path.',
100
- 'add_source CANNOT access: /mnt/user-data/*, /home/claude/* (cloud sandbox only).',
101
- '',
102
- 'If user says "analyze /Users/bill/data/sales.csv" → call add_source with path=/Users/bill/data/sales.csv. Done.',
103
- 'If add_source returns an error, THEN discuss it. Never pre-emptively refuse.',
102
+ 'If the user gives a path directly, you can pass it to connect_data as the optional path argument.',
104
103
  '',
105
104
  'Dolex is a data analysis and visualization server with 43 chart types.',
106
- 'Workflow: add_sourcedescribe_source or analyze_source → visualize_from_source → refine_visualization.',
105
+ 'Workflow: connect_data → analyze_source → visualize_from_source → refine_visualization.',
107
106
  ].join('\n'),
108
107
  },
109
108
  );
@@ -200,7 +199,18 @@ registerAppTool(
200
199
  handleRefine(),
201
200
  );
202
201
 
203
- // Data source management tools
202
+ // Data onboarding primary tool for connecting data
203
+ server.registerTool(
204
+ 'connect_data',
205
+ {
206
+ title: 'Connect Data',
207
+ description: 'Connect to the user\'s data files for analysis. Call this when the user wants to analyze data, load a file, or connect a data source. Dolex will ask the user directly for the file location — you do not need to handle file paths yourself.\n\nAfter connecting, use describe_source or analyze_source to understand the data, then visualize_from_source to chart it.',
208
+ inputSchema: connectDataInputSchema,
209
+ },
210
+ handleConnectData({ sourceManager, server }),
211
+ );
212
+
213
+ // Data source management tools (programmatic)
204
214
  server.registerTool(
205
215
  'add_source',
206
216
  {
@@ -0,0 +1,94 @@
1
+ import { z } from 'zod';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import { errorResponse } from './shared.js';
6
+ import { handleAddSource, isSandboxPath } from './sources.js';
7
+
8
+ export const connectDataInputSchema = z.object({
9
+ path: z.string().optional().describe('File or directory path. If omitted, Dolex will ask the user directly.'),
10
+ });
11
+
12
+ function detectType(filePath: string): 'csv' | 'sqlite' {
13
+ const stat = fs.statSync(filePath, { throwIfNoEntry: false });
14
+ if (!stat) return 'csv';
15
+
16
+ if (stat.isDirectory()) {
17
+ const files = fs.readdirSync(filePath);
18
+ if (files.some(f => f.endsWith('.sqlite') || f.endsWith('.db') || f.endsWith('.sqlite3'))) return 'sqlite';
19
+ return 'csv';
20
+ }
21
+
22
+ const ext = path.extname(filePath).toLowerCase();
23
+ if (ext === '.sqlite' || ext === '.db' || ext === '.sqlite3') return 'sqlite';
24
+ return 'csv';
25
+ }
26
+
27
+ function deriveName(filePath: string): string {
28
+ const base = path.basename(filePath, path.extname(filePath));
29
+ return base
30
+ .replace(/[-_]/g, ' ')
31
+ .replace(/\b\w/g, c => c.toUpperCase());
32
+ }
33
+
34
+ export function handleConnectData(deps: { sourceManager: any; server: McpServer }) {
35
+ const addSource = handleAddSource({ sourceManager: deps.sourceManager });
36
+
37
+ return async (args: z.infer<typeof connectDataInputSchema>, _extra: any) => {
38
+ let filePath = args.path;
39
+
40
+ if (!filePath) {
41
+ try {
42
+ const result = await deps.server.server.elicitInput({
43
+ message: 'What data would you like to analyze?',
44
+ requestedSchema: {
45
+ type: 'object' as const,
46
+ properties: {
47
+ path: {
48
+ type: 'string' as const,
49
+ title: 'File or directory path',
50
+ description: 'e.g. /Users/you/Downloads/sales.csv or ~/data/my-project/',
51
+ },
52
+ },
53
+ required: ['path'],
54
+ },
55
+ });
56
+
57
+ if (result.action !== 'accept' || !result.content?.path) {
58
+ return errorResponse('No path provided. To connect data, provide a file or directory path.');
59
+ }
60
+ filePath = result.content.path as string;
61
+ } catch {
62
+ return errorResponse(
63
+ 'This client does not support interactive input. '
64
+ + 'Use add_source instead and pass the file path directly.'
65
+ );
66
+ }
67
+ }
68
+
69
+ filePath = filePath.replace(/^~/, process.env.HOME || '');
70
+
71
+ if (isSandboxPath(filePath)) {
72
+ return errorResponse(
73
+ 'This path looks like a cloud sandbox path, not a local filesystem path. '
74
+ + 'Dolex runs on the user\'s machine and can access any local file — but not cloud sandbox uploads. '
75
+ + 'Please provide the real local path.'
76
+ );
77
+ }
78
+
79
+ const stat = fs.statSync(filePath, { throwIfNoEntry: false });
80
+ if (!stat) {
81
+ return errorResponse(`Path not found: ${filePath}`);
82
+ }
83
+
84
+ const type = detectType(filePath);
85
+ const name = deriveName(filePath);
86
+
87
+ return addSource({
88
+ name,
89
+ type,
90
+ config: { type, path: filePath } as any,
91
+ detail: 'full',
92
+ });
93
+ };
94
+ }