truss-db-mcp 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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +79 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/ai-query.d.ts +7 -0
  8. package/dist/lib/ai-query.d.ts.map +1 -0
  9. package/dist/lib/ai-query.js +224 -0
  10. package/dist/lib/ai-query.js.map +1 -0
  11. package/dist/lib/config.d.ts +4 -0
  12. package/dist/lib/config.d.ts.map +1 -0
  13. package/dist/lib/config.js +30 -0
  14. package/dist/lib/config.js.map +1 -0
  15. package/dist/lib/connection.d.ts +14 -0
  16. package/dist/lib/connection.d.ts.map +1 -0
  17. package/dist/lib/connection.js +175 -0
  18. package/dist/lib/connection.js.map +1 -0
  19. package/dist/lib/license.d.ts +4 -0
  20. package/dist/lib/license.d.ts.map +1 -0
  21. package/dist/lib/license.js +94 -0
  22. package/dist/lib/license.js.map +1 -0
  23. package/dist/lib/query-optimizer.d.ts +3 -0
  24. package/dist/lib/query-optimizer.d.ts.map +1 -0
  25. package/dist/lib/query-optimizer.js +155 -0
  26. package/dist/lib/query-optimizer.js.map +1 -0
  27. package/dist/tools/connect.d.ts +3 -0
  28. package/dist/tools/connect.d.ts.map +1 -0
  29. package/dist/tools/connect.js +37 -0
  30. package/dist/tools/connect.js.map +1 -0
  31. package/dist/tools/describe-table.d.ts +3 -0
  32. package/dist/tools/describe-table.d.ts.map +1 -0
  33. package/dist/tools/describe-table.js +60 -0
  34. package/dist/tools/describe-table.js.map +1 -0
  35. package/dist/tools/export-data.d.ts +3 -0
  36. package/dist/tools/export-data.d.ts.map +1 -0
  37. package/dist/tools/export-data.js +68 -0
  38. package/dist/tools/export-data.js.map +1 -0
  39. package/dist/tools/generate-migration.d.ts +3 -0
  40. package/dist/tools/generate-migration.d.ts.map +1 -0
  41. package/dist/tools/generate-migration.js +36 -0
  42. package/dist/tools/generate-migration.js.map +1 -0
  43. package/dist/tools/list-tables.d.ts +3 -0
  44. package/dist/tools/list-tables.d.ts.map +1 -0
  45. package/dist/tools/list-tables.js +45 -0
  46. package/dist/tools/list-tables.js.map +1 -0
  47. package/dist/tools/natural-language-query.d.ts +3 -0
  48. package/dist/tools/natural-language-query.d.ts.map +1 -0
  49. package/dist/tools/natural-language-query.js +53 -0
  50. package/dist/tools/natural-language-query.js.map +1 -0
  51. package/dist/tools/optimize-query.d.ts +3 -0
  52. package/dist/tools/optimize-query.d.ts.map +1 -0
  53. package/dist/tools/optimize-query.js +51 -0
  54. package/dist/tools/optimize-query.js.map +1 -0
  55. package/dist/tools/query.d.ts +3 -0
  56. package/dist/tools/query.d.ts.map +1 -0
  57. package/dist/tools/query.js +79 -0
  58. package/dist/tools/query.js.map +1 -0
  59. package/dist/types.d.ts +86 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +3 -0
  62. package/dist/types.js.map +1 -0
  63. package/evals/eval-query.ts +356 -0
  64. package/evals/run-evals.ts +36 -0
  65. package/evals/test.db +0 -0
  66. package/glama.json +4 -0
  67. package/package.json +47 -0
  68. package/smithery.yaml +18 -0
  69. package/src/index.ts +99 -0
  70. package/src/lib/ai-query.ts +274 -0
  71. package/src/lib/config.ts +33 -0
  72. package/src/lib/connection.ts +263 -0
  73. package/src/lib/license.ts +118 -0
  74. package/src/lib/query-optimizer.ts +191 -0
  75. package/src/tools/connect.ts +43 -0
  76. package/src/tools/describe-table.ts +67 -0
  77. package/src/tools/export-data.ts +81 -0
  78. package/src/tools/generate-migration.ts +43 -0
  79. package/src/tools/list-tables.ts +52 -0
  80. package/src/tools/natural-language-query.ts +61 -0
  81. package/src/tools/optimize-query.ts +59 -0
  82. package/src/tools/query.ts +89 -0
  83. package/src/types.ts +115 -0
  84. package/tsconfig.json +19 -0
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ import { executeReadOnlyQuery, isConnected } from '../lib/connection.js';
3
+ import { requirePro } from '../lib/license.js';
4
+ function toCsv(rows, columns) {
5
+ if (rows.length === 0)
6
+ return '';
7
+ const header = columns.map(escapeCsvField).join(',');
8
+ const dataRows = rows.map(row => columns.map(col => escapeCsvField(String(row[col] ?? ''))).join(','));
9
+ return [header, ...dataRows].join('\n');
10
+ }
11
+ function escapeCsvField(field) {
12
+ if (field.includes(',') || field.includes('"') || field.includes('\n')) {
13
+ return `"${field.replace(/"/g, '""')}"`;
14
+ }
15
+ return field;
16
+ }
17
+ export function registerExportData(server) {
18
+ server.tool('export_data', 'Export query results as CSV or JSON. Requires Pro license.', {
19
+ sql: z.string().describe('SELECT query to export'),
20
+ format: z.enum(['csv', 'json']).describe('Export format: csv or json'),
21
+ }, async ({ sql, format }) => {
22
+ try {
23
+ await requirePro();
24
+ if (!isConnected()) {
25
+ return {
26
+ content: [{
27
+ type: 'text',
28
+ text: JSON.stringify({
29
+ error: 'No database connected. Use the connect tool first.',
30
+ }),
31
+ }],
32
+ isError: true,
33
+ };
34
+ }
35
+ // Always read-only for exports
36
+ const result = executeReadOnlyQuery(sql);
37
+ let data;
38
+ if (format === 'csv') {
39
+ data = toCsv(result.rows, result.columns);
40
+ }
41
+ else {
42
+ data = JSON.stringify(result.rows, null, 2);
43
+ }
44
+ return {
45
+ content: [{
46
+ type: 'text',
47
+ text: JSON.stringify({
48
+ data,
49
+ row_count: result.rowCount,
50
+ format,
51
+ }, null, 2),
52
+ }],
53
+ };
54
+ }
55
+ catch (err) {
56
+ return {
57
+ content: [{
58
+ type: 'text',
59
+ text: JSON.stringify({
60
+ error: err instanceof Error ? err.message : String(err),
61
+ }),
62
+ }],
63
+ isError: true,
64
+ };
65
+ }
66
+ });
67
+ }
68
+ //# sourceMappingURL=export-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-data.js","sourceRoot":"","sources":["../../src/tools/export-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerGenerateMigration(server: McpServer): void;
3
+ //# sourceMappingURL=generate-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-migration.d.ts","sourceRoot":"","sources":["../../src/tools/generate-migration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqCjE"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ import { requirePro } from '../lib/license.js';
3
+ import { generateMigrationSql } from '../lib/ai-query.js';
4
+ export function registerGenerateMigration(server) {
5
+ server.tool('generate_migration', 'Generate SQL migration (up + down) from a natural language description. Requires Pro license and AI API key.', {
6
+ description: z.string().describe('Description of the database change (e.g. "add email column to users table")'),
7
+ dialect: z.enum(['sqlite', 'postgresql', 'mysql']).optional().describe('SQL dialect (default: sqlite)'),
8
+ }, async ({ description, dialect }) => {
9
+ try {
10
+ await requirePro();
11
+ const result = await generateMigrationSql(description, dialect ?? 'sqlite');
12
+ return {
13
+ content: [{
14
+ type: 'text',
15
+ text: JSON.stringify({
16
+ up_sql: result.upSql,
17
+ down_sql: result.downSql,
18
+ dialect: dialect ?? 'sqlite',
19
+ }, null, 2),
20
+ }],
21
+ };
22
+ }
23
+ catch (err) {
24
+ return {
25
+ content: [{
26
+ type: 'text',
27
+ text: JSON.stringify({
28
+ error: err instanceof Error ? err.message : String(err),
29
+ }),
30
+ }],
31
+ isError: true,
32
+ };
33
+ }
34
+ });
35
+ }
36
+ //# sourceMappingURL=generate-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-migration.js","sourceRoot":"","sources":["../../src/tools/generate-migration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,8GAA8G,EAC9G;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;QAC/G,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACxG,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,UAAU,EAAE,CAAC;YAEnB,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,OAAO,IAAI,QAAQ,CAAC,CAAC;YAE5E,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,MAAM,EAAE,MAAM,CAAC,KAAK;4BACpB,QAAQ,EAAE,MAAM,CAAC,OAAO;4BACxB,OAAO,EAAE,OAAO,IAAI,QAAQ;yBAC7B,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;yBACxD,CAAC;qBACH,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerListTables(server: McpServer): void;
3
+ //# sourceMappingURL=list-tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tables.d.ts","sourceRoot":"","sources":["../../src/tools/list-tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgD1D"}
@@ -0,0 +1,45 @@
1
+ import { listTables, isConnected } from '../lib/connection.js';
2
+ export function registerListTables(server) {
3
+ server.tool('list_tables', 'List all tables in the connected database with row counts and column info.', {}, async () => {
4
+ try {
5
+ if (!isConnected()) {
6
+ return {
7
+ content: [{
8
+ type: 'text',
9
+ text: JSON.stringify({
10
+ error: 'No database connected. Use the connect tool first.',
11
+ }),
12
+ }],
13
+ isError: true,
14
+ };
15
+ }
16
+ const tables = listTables();
17
+ return {
18
+ content: [{
19
+ type: 'text',
20
+ text: JSON.stringify(tables.map(t => ({
21
+ name: t.name,
22
+ columns: t.columns.map(c => ({
23
+ name: c.name,
24
+ type: c.type,
25
+ nullable: c.nullable,
26
+ })),
27
+ row_count: t.rowCount,
28
+ })), null, 2),
29
+ }],
30
+ };
31
+ }
32
+ catch (err) {
33
+ return {
34
+ content: [{
35
+ type: 'text',
36
+ text: JSON.stringify({
37
+ error: err instanceof Error ? err.message : String(err),
38
+ }),
39
+ }],
40
+ isError: true,
41
+ };
42
+ }
43
+ });
44
+ }
45
+ //# sourceMappingURL=list-tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tables.js","sourceRoot":"","sources":["../../src/tools/list-tables.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,IAAI,CACT,aAAa,EACb,4EAA4E,EAC5E,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACnB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,oDAAoD;6BAC5D,CAAC;yBACH,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAE5B,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACpC,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gCAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;gCACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gCACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;6BACrB,CAAC,CAAC;4BACH,SAAS,EAAE,CAAC,CAAC,QAAQ;yBACtB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;qBACd,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;yBACxD,CAAC;qBACH,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerNaturalLanguageQuery(server: McpServer): void;
3
+ //# sourceMappingURL=natural-language-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"natural-language-query.d.ts","sourceRoot":"","sources":["../../src/tools/natural-language-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsDpE"}
@@ -0,0 +1,53 @@
1
+ import { z } from 'zod';
2
+ import { isConnected } from '../lib/connection.js';
3
+ import { requirePro } from '../lib/license.js';
4
+ import { naturalLanguageToSql } from '../lib/ai-query.js';
5
+ export function registerNaturalLanguageQuery(server) {
6
+ server.tool('natural_language_query', 'Convert a natural language question to SQL and execute it. Requires Pro license and ANTHROPIC_API_KEY or OPENAI_API_KEY.', {
7
+ question: z.string().describe('Natural language question about your data'),
8
+ tables: z.array(z.string()).optional().describe('Limit query generation to these tables'),
9
+ }, async ({ question, tables }) => {
10
+ try {
11
+ await requirePro();
12
+ if (!isConnected()) {
13
+ return {
14
+ content: [{
15
+ type: 'text',
16
+ text: JSON.stringify({
17
+ error: 'No database connected. Use the connect tool first.',
18
+ }),
19
+ }],
20
+ isError: true,
21
+ };
22
+ }
23
+ const result = await naturalLanguageToSql(question, tables);
24
+ return {
25
+ content: [{
26
+ type: 'text',
27
+ text: JSON.stringify({
28
+ sql: result.sql,
29
+ explanation: result.explanation,
30
+ results: {
31
+ rows: result.results.rows,
32
+ columns: result.results.columns,
33
+ row_count: result.results.rowCount,
34
+ execution_time_ms: result.results.executionTimeMs,
35
+ },
36
+ }, null, 2),
37
+ }],
38
+ };
39
+ }
40
+ catch (err) {
41
+ return {
42
+ content: [{
43
+ type: 'text',
44
+ text: JSON.stringify({
45
+ error: err instanceof Error ? err.message : String(err),
46
+ }),
47
+ }],
48
+ isError: true,
49
+ };
50
+ }
51
+ });
52
+ }
53
+ //# sourceMappingURL=natural-language-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"natural-language-query.js","sourceRoot":"","sources":["../../src/tools/natural-language-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,0HAA0H,EAC1H;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAC1E,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KAC1F,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,UAAU,EAAE,CAAC;YAEnB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACnB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,oDAAoD;6BAC5D,CAAC;yBACH,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE5D,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,GAAG,EAAE,MAAM,CAAC,GAAG;4BACf,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,OAAO,EAAE;gCACP,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;gCACzB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO;gCAC/B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;gCAClC,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe;6BAClD;yBACF,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;yBACxD,CAAC;qBACH,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerOptimizeQuery(server: McpServer): void;
3
+ //# sourceMappingURL=optimize-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize-query.d.ts","sourceRoot":"","sources":["../../src/tools/optimize-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoD7D"}
@@ -0,0 +1,51 @@
1
+ import { z } from 'zod';
2
+ import { isConnected } from '../lib/connection.js';
3
+ import { requirePro } from '../lib/license.js';
4
+ import { optimizeQuery } from '../lib/query-optimizer.js';
5
+ export function registerOptimizeQuery(server) {
6
+ server.tool('optimize_query', 'Analyze a SQL query for performance issues. Shows EXPLAIN plan, suggests indexes, and estimates improvement. Requires Pro license.', {
7
+ sql: z.string().describe('SQL query to analyze'),
8
+ }, async ({ sql }) => {
9
+ try {
10
+ await requirePro();
11
+ if (!isConnected()) {
12
+ return {
13
+ content: [{
14
+ type: 'text',
15
+ text: JSON.stringify({
16
+ error: 'No database connected. Use the connect tool first.',
17
+ }),
18
+ }],
19
+ isError: true,
20
+ };
21
+ }
22
+ const result = optimizeQuery(sql);
23
+ return {
24
+ content: [{
25
+ type: 'text',
26
+ text: JSON.stringify({
27
+ explain_plan: result.explainPlan,
28
+ suggestions: result.suggestions.map(s => ({
29
+ type: s.type,
30
+ description: s.description,
31
+ ...(s.sql ? { suggested_sql: s.sql } : {}),
32
+ })),
33
+ estimated_improvement: result.estimatedImprovement,
34
+ }, null, 2),
35
+ }],
36
+ };
37
+ }
38
+ catch (err) {
39
+ return {
40
+ content: [{
41
+ type: 'text',
42
+ text: JSON.stringify({
43
+ error: err instanceof Error ? err.message : String(err),
44
+ }),
45
+ }],
46
+ isError: true,
47
+ };
48
+ }
49
+ });
50
+ }
51
+ //# sourceMappingURL=optimize-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize-query.js","sourceRoot":"","sources":["../../src/tools/optimize-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,oIAAoI,EACpI;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACjD,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QAChB,IAAI,CAAC;YACH,MAAM,UAAU,EAAE,CAAC;YAEnB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACnB,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,oDAAoD;6BAC5D,CAAC;yBACH,CAAC;oBACF,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YAElC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,YAAY,EAAE,MAAM,CAAC,WAAW;4BAChC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gCACxC,IAAI,EAAE,CAAC,CAAC,IAAI;gCACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gCAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BAC3C,CAAC,CAAC;4BACH,qBAAqB,EAAE,MAAM,CAAC,oBAAoB;yBACnD,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ,CAAC;aACH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;yBACxD,CAAC;qBACH,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerQuery(server: McpServer): void;
3
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmFrD"}
@@ -0,0 +1,79 @@
1
+ import { z } from 'zod';
2
+ import { executeReadOnlyQuery, executeQuery, isConnected, isWriteQuery } from '../lib/connection.js';
3
+ import { getLicenseStatus } from '../lib/license.js';
4
+ export function registerQuery(server) {
5
+ server.tool('query', 'Execute a SQL query. Free tier: SELECT only. Pro tier: full read/write with confirmation flag.', {
6
+ sql: z.string().describe('SQL query to execute'),
7
+ params: z.array(z.unknown()).optional().describe('Query parameters for prepared statement'),
8
+ confirm_write: z.boolean().optional().describe('Set to true to confirm write operations (Pro tier only)'),
9
+ }, async ({ sql, params, confirm_write }) => {
10
+ try {
11
+ if (!isConnected()) {
12
+ return {
13
+ content: [{
14
+ type: 'text',
15
+ text: JSON.stringify({
16
+ error: 'No database connected. Use the connect tool first.',
17
+ }),
18
+ }],
19
+ isError: true,
20
+ };
21
+ }
22
+ const license = await getLicenseStatus();
23
+ const isWrite = isWriteQuery(sql);
24
+ // Free tier: read-only only
25
+ if (license.tier === 'free') {
26
+ const result = executeReadOnlyQuery(sql, params ?? []);
27
+ return {
28
+ content: [{
29
+ type: 'text',
30
+ text: JSON.stringify({
31
+ rows: result.rows,
32
+ columns: result.columns,
33
+ row_count: result.rowCount,
34
+ execution_time_ms: result.executionTimeMs,
35
+ }, null, 2),
36
+ }],
37
+ };
38
+ }
39
+ // Pro tier: write operations require confirmation
40
+ if (isWrite && !confirm_write) {
41
+ return {
42
+ content: [{
43
+ type: 'text',
44
+ text: JSON.stringify({
45
+ warning: 'This is a write operation. Set confirm_write: true to execute.',
46
+ sql: sql,
47
+ operation_type: sql.trim().split(/\s+/)[0].toUpperCase(),
48
+ }, null, 2),
49
+ }],
50
+ };
51
+ }
52
+ const result = executeQuery(sql, params ?? []);
53
+ return {
54
+ content: [{
55
+ type: 'text',
56
+ text: JSON.stringify({
57
+ rows: result.rows,
58
+ columns: result.columns,
59
+ row_count: result.rowCount,
60
+ execution_time_ms: result.executionTimeMs,
61
+ ...(isWrite ? { write_operation: true } : {}),
62
+ }, null, 2),
63
+ }],
64
+ };
65
+ }
66
+ catch (err) {
67
+ return {
68
+ content: [{
69
+ type: 'text',
70
+ text: JSON.stringify({
71
+ error: err instanceof Error ? err.message : String(err),
72
+ }),
73
+ }],
74
+ isError: true,
75
+ };
76
+ }
77
+ });
78
+ }
79
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ export type LicenseTier = 'free' | 'pro';
2
+ export interface LicenseStatus {
3
+ tier: LicenseTier;
4
+ valid: boolean;
5
+ expiresAt: string | null;
6
+ }
7
+ export interface TrussConfig {
8
+ licenseKey?: string;
9
+ databaseUrl?: string;
10
+ dbHost?: string;
11
+ dbPort?: number;
12
+ dbName?: string;
13
+ dbUser?: string;
14
+ dbPassword?: string;
15
+ anthropicApiKey?: string;
16
+ openaiApiKey?: string;
17
+ trussApiBaseUrl: string;
18
+ dataDir: string;
19
+ }
20
+ export type DatabaseDialect = 'sqlite' | 'postgresql' | 'mysql';
21
+ export interface ColumnInfo {
22
+ name: string;
23
+ type: string;
24
+ nullable: boolean;
25
+ defaultValue: string | null;
26
+ primaryKey: boolean;
27
+ }
28
+ export interface IndexInfo {
29
+ name: string;
30
+ columns: string[];
31
+ unique: boolean;
32
+ }
33
+ export interface ForeignKeyInfo {
34
+ column: string;
35
+ referencedTable: string;
36
+ referencedColumn: string;
37
+ }
38
+ export interface TableInfo {
39
+ name: string;
40
+ columns: ColumnInfo[];
41
+ rowCount: number;
42
+ }
43
+ export interface TableSchema extends TableInfo {
44
+ indexes: IndexInfo[];
45
+ foreignKeys: ForeignKeyInfo[];
46
+ createSql: string;
47
+ }
48
+ export interface QueryResult {
49
+ rows: Record<string, unknown>[];
50
+ columns: string[];
51
+ rowCount: number;
52
+ executionTimeMs: number;
53
+ }
54
+ export interface ConnectionInfo {
55
+ connected: boolean;
56
+ dialect: DatabaseDialect;
57
+ tables: string[];
58
+ version: string;
59
+ path?: string;
60
+ }
61
+ export interface NaturalLanguageQueryResult {
62
+ sql: string;
63
+ explanation: string;
64
+ results: QueryResult;
65
+ }
66
+ export interface OptimizationSuggestion {
67
+ type: 'index' | 'rewrite' | 'warning';
68
+ description: string;
69
+ sql?: string;
70
+ }
71
+ export interface QueryOptimizationResult {
72
+ explainPlan: string;
73
+ suggestions: OptimizationSuggestion[];
74
+ estimatedImprovement: string;
75
+ }
76
+ export interface MigrationResult {
77
+ upSql: string;
78
+ downSql: string;
79
+ }
80
+ export type ExportFormat = 'csv' | 'json';
81
+ export interface ExportResult {
82
+ data: string;
83
+ rowCount: number;
84
+ format: ExportFormat;
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // ── License Types ────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE"}