@pilat/mcp-datalink 1.0.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.
Files changed (95) hide show
  1. package/README.md +442 -0
  2. package/databases.example.json +18 -0
  3. package/dist/__integration__/global-setup.d.ts +8 -0
  4. package/dist/__integration__/global-setup.d.ts.map +1 -0
  5. package/dist/__integration__/global-setup.js +34 -0
  6. package/dist/__integration__/global-setup.js.map +1 -0
  7. package/dist/__integration__/global-teardown.d.ts +8 -0
  8. package/dist/__integration__/global-teardown.d.ts.map +1 -0
  9. package/dist/__integration__/global-teardown.js +17 -0
  10. package/dist/__integration__/global-teardown.js.map +1 -0
  11. package/dist/__integration__/helpers.d.ts +58 -0
  12. package/dist/__integration__/helpers.d.ts.map +1 -0
  13. package/dist/__integration__/helpers.js +568 -0
  14. package/dist/__integration__/helpers.js.map +1 -0
  15. package/dist/__integration__/setup.d.ts +79 -0
  16. package/dist/__integration__/setup.d.ts.map +1 -0
  17. package/dist/__integration__/setup.js +230 -0
  18. package/dist/__integration__/setup.js.map +1 -0
  19. package/dist/adapters/factory.d.ts +40 -0
  20. package/dist/adapters/factory.d.ts.map +1 -0
  21. package/dist/adapters/factory.js +114 -0
  22. package/dist/adapters/factory.js.map +1 -0
  23. package/dist/adapters/index.d.ts +31 -0
  24. package/dist/adapters/index.d.ts.map +1 -0
  25. package/dist/adapters/index.js +34 -0
  26. package/dist/adapters/index.js.map +1 -0
  27. package/dist/adapters/mysql/adapter.d.ts +61 -0
  28. package/dist/adapters/mysql/adapter.d.ts.map +1 -0
  29. package/dist/adapters/mysql/adapter.js +567 -0
  30. package/dist/adapters/mysql/adapter.js.map +1 -0
  31. package/dist/adapters/postgresql/adapter.d.ts +52 -0
  32. package/dist/adapters/postgresql/adapter.d.ts.map +1 -0
  33. package/dist/adapters/postgresql/adapter.js +429 -0
  34. package/dist/adapters/postgresql/adapter.js.map +1 -0
  35. package/dist/adapters/sqlite/adapter.d.ts +56 -0
  36. package/dist/adapters/sqlite/adapter.d.ts.map +1 -0
  37. package/dist/adapters/sqlite/adapter.js +582 -0
  38. package/dist/adapters/sqlite/adapter.js.map +1 -0
  39. package/dist/adapters/types.d.ts +155 -0
  40. package/dist/adapters/types.d.ts.map +1 -0
  41. package/dist/adapters/types.js +7 -0
  42. package/dist/adapters/types.js.map +1 -0
  43. package/dist/config/loader.d.ts +11 -0
  44. package/dist/config/loader.d.ts.map +1 -0
  45. package/dist/config/loader.js +127 -0
  46. package/dist/config/loader.js.map +1 -0
  47. package/dist/index.d.ts +8 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +38 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/server.d.ts +21 -0
  52. package/dist/server.d.ts.map +1 -0
  53. package/dist/server.js +191 -0
  54. package/dist/server.js.map +1 -0
  55. package/dist/tools/describe-table.d.ts +11 -0
  56. package/dist/tools/describe-table.d.ts.map +1 -0
  57. package/dist/tools/describe-table.js +23 -0
  58. package/dist/tools/describe-table.js.map +1 -0
  59. package/dist/tools/execute.d.ts +22 -0
  60. package/dist/tools/execute.d.ts.map +1 -0
  61. package/dist/tools/execute.js +48 -0
  62. package/dist/tools/execute.js.map +1 -0
  63. package/dist/tools/explain.d.ts +25 -0
  64. package/dist/tools/explain.d.ts.map +1 -0
  65. package/dist/tools/explain.js +81 -0
  66. package/dist/tools/explain.js.map +1 -0
  67. package/dist/tools/list-databases.d.ts +18 -0
  68. package/dist/tools/list-databases.d.ts.map +1 -0
  69. package/dist/tools/list-databases.js +17 -0
  70. package/dist/tools/list-databases.js.map +1 -0
  71. package/dist/tools/list-tables.d.ts +22 -0
  72. package/dist/tools/list-tables.d.ts.map +1 -0
  73. package/dist/tools/list-tables.js +43 -0
  74. package/dist/tools/list-tables.js.map +1 -0
  75. package/dist/tools/query.d.ts +25 -0
  76. package/dist/tools/query.d.ts.map +1 -0
  77. package/dist/tools/query.js +109 -0
  78. package/dist/tools/query.js.map +1 -0
  79. package/dist/types.d.ts +93 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +5 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/utils/errors.d.ts +22 -0
  84. package/dist/utils/errors.d.ts.map +1 -0
  85. package/dist/utils/errors.js +41 -0
  86. package/dist/utils/errors.js.map +1 -0
  87. package/dist/utils/formatter.d.ts +13 -0
  88. package/dist/utils/formatter.d.ts.map +1 -0
  89. package/dist/utils/formatter.js +56 -0
  90. package/dist/utils/formatter.js.map +1 -0
  91. package/dist/utils/truncate.d.ts +37 -0
  92. package/dist/utils/truncate.d.ts.map +1 -0
  93. package/dist/utils/truncate.js +91 -0
  94. package/dist/utils/truncate.js.map +1 -0
  95. package/package.json +65 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,wBAAwB;IACxB,WAAW,EAAE,aAAa;IAC1B,eAAe,EAAE,iBAAiB;IAClC,aAAa,EAAE,eAAe;IAE9B,kBAAkB;IAClB,iBAAiB,EAAE,mBAAmB;IACtC,aAAa,EAAE,eAAe;IAC9B,kBAAkB,EAAE,oBAAoB;IAExC,uBAAuB;IACvB,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAEhC,gBAAgB;IAChB,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAIX,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnB,IAAI,CAAgB;IACpB,OAAO,CAA2B;IAElD,YAAY,IAAmB,EAAE,OAAe,EAAE,OAAiC;QACjF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,oCAAoC;QACpC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Formatting utilities for query results
3
+ */
4
+ /**
5
+ * Format a single value for display
6
+ * Handles null, dates, objects, and primitive values
7
+ */
8
+ export declare function formatValue(value: unknown): string;
9
+ /**
10
+ * Format query results as a Markdown table
11
+ */
12
+ export declare function formatAsMarkdownTable(columns: string[], rows: (string | null)[][]): string;
13
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAsBlD;AASD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,GACxB,MAAM,CAyBR"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Formatting utilities for query results
3
+ */
4
+ /**
5
+ * Format a single value for display
6
+ * Handles null, dates, objects, and primitive values
7
+ */
8
+ export function formatValue(value) {
9
+ if (value === null || value === undefined) {
10
+ return 'NULL';
11
+ }
12
+ if (typeof value === 'string') {
13
+ return value;
14
+ }
15
+ if (typeof value === 'number' || typeof value === 'boolean') {
16
+ return String(value);
17
+ }
18
+ if (value instanceof Date) {
19
+ return value.toISOString();
20
+ }
21
+ if (typeof value === 'object') {
22
+ return JSON.stringify(value);
23
+ }
24
+ return String(value);
25
+ }
26
+ /**
27
+ * Escape pipe characters in cell content for Markdown tables
28
+ */
29
+ function escapeForMarkdown(value) {
30
+ return value.replace(/\|/g, '\\|');
31
+ }
32
+ /**
33
+ * Format query results as a Markdown table
34
+ */
35
+ export function formatAsMarkdownTable(columns, rows) {
36
+ if (columns.length === 0) {
37
+ return '';
38
+ }
39
+ const lines = [];
40
+ // Header row
41
+ const headerCells = columns.map((col) => escapeForMarkdown(col));
42
+ lines.push('| ' + headerCells.join(' | ') + ' |');
43
+ // Alignment row
44
+ const alignmentCells = columns.map(() => '---');
45
+ lines.push('| ' + alignmentCells.join(' | ') + ' |');
46
+ // Data rows
47
+ for (const row of rows) {
48
+ const cells = row.map((cell) => {
49
+ const value = cell === null ? 'NULL' : cell;
50
+ return escapeForMarkdown(value);
51
+ });
52
+ lines.push('| ' + cells.join(' | ') + ' |');
53
+ }
54
+ return lines.join('\n');
55
+ }
56
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAiB,EACjB,IAAyB;IAEzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,aAAa;IACb,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAElD,gBAAgB;IAChB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAErD,YAAY;IACZ,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5C,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Truncation utilities for limiting MCP response sizes
3
+ */
4
+ export interface TruncationInfo {
5
+ truncated: boolean;
6
+ truncationReason?: 'maxRows' | 'maxCellLength' | 'maxTotalSize' | 'maxColumns';
7
+ totalAvailable?: number;
8
+ returned?: number;
9
+ hint?: string;
10
+ }
11
+ /**
12
+ * Truncate array of rows to maxRows limit
13
+ */
14
+ export declare function truncateRows(rows: unknown[][], maxRows: number, totalAvailable?: number): {
15
+ rows: unknown[][];
16
+ info: TruncationInfo;
17
+ };
18
+ /**
19
+ * Truncate individual cell value to maxLength
20
+ */
21
+ export declare function truncateCell(value: unknown, maxLength: number): {
22
+ value: string;
23
+ truncated: boolean;
24
+ originalLength?: number;
25
+ };
26
+ /**
27
+ * Truncate columns array to maxColumns limit
28
+ */
29
+ export declare function truncateColumns(columns: string[], maxColumns: number): {
30
+ columns: string[];
31
+ truncated: boolean;
32
+ };
33
+ /**
34
+ * Check if total response size exceeds maxSize
35
+ */
36
+ export declare function checkTotalSize(data: string, maxSize: number): TruncationInfo;
37
+ //# sourceMappingURL=truncate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../src/utils/truncate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,SAAS,GAAG,eAAe,GAAG,cAAc,GAAG,YAAY,CAAC;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EAAE,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,MAAM,GACtB;IAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAoB7C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CA8BhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,EAAE,MAAM,GACjB;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAY3C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,cAAc,CAYhB"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Truncation utilities for limiting MCP response sizes
3
+ */
4
+ /**
5
+ * Truncate array of rows to maxRows limit
6
+ */
7
+ export function truncateRows(rows, maxRows, totalAvailable) {
8
+ const available = totalAvailable ?? rows.length;
9
+ if (rows.length <= maxRows) {
10
+ return {
11
+ rows,
12
+ info: { truncated: false },
13
+ };
14
+ }
15
+ return {
16
+ rows: rows.slice(0, maxRows),
17
+ info: {
18
+ truncated: true,
19
+ truncationReason: 'maxRows',
20
+ totalAvailable: available,
21
+ returned: maxRows,
22
+ hint: 'Use LIMIT/OFFSET or WHERE clause to paginate',
23
+ },
24
+ };
25
+ }
26
+ /**
27
+ * Truncate individual cell value to maxLength
28
+ */
29
+ export function truncateCell(value, maxLength) {
30
+ // Convert value to string
31
+ let stringValue;
32
+ if (value === null || value === undefined) {
33
+ stringValue = 'NULL';
34
+ }
35
+ else if (typeof value === 'string') {
36
+ stringValue = value;
37
+ }
38
+ else if (typeof value === 'number' || typeof value === 'boolean') {
39
+ stringValue = String(value);
40
+ }
41
+ else if (value instanceof Date) {
42
+ stringValue = value.toISOString();
43
+ }
44
+ else if (typeof value === 'object') {
45
+ stringValue = JSON.stringify(value);
46
+ }
47
+ else {
48
+ stringValue = String(value);
49
+ }
50
+ if (stringValue.length <= maxLength) {
51
+ return {
52
+ value: stringValue,
53
+ truncated: false,
54
+ };
55
+ }
56
+ return {
57
+ value: stringValue.slice(0, maxLength) + '...',
58
+ truncated: true,
59
+ originalLength: stringValue.length,
60
+ };
61
+ }
62
+ /**
63
+ * Truncate columns array to maxColumns limit
64
+ */
65
+ export function truncateColumns(columns, maxColumns) {
66
+ if (columns.length <= maxColumns) {
67
+ return {
68
+ columns,
69
+ truncated: false,
70
+ };
71
+ }
72
+ return {
73
+ columns: columns.slice(0, maxColumns),
74
+ truncated: true,
75
+ };
76
+ }
77
+ /**
78
+ * Check if total response size exceeds maxSize
79
+ */
80
+ export function checkTotalSize(data, maxSize) {
81
+ const byteLength = Buffer.byteLength(data, 'utf8');
82
+ if (byteLength <= maxSize) {
83
+ return { truncated: false };
84
+ }
85
+ return {
86
+ truncated: true,
87
+ truncationReason: 'maxTotalSize',
88
+ hint: 'Use LIMIT/OFFSET or WHERE clause to paginate',
89
+ };
90
+ }
91
+ //# sourceMappingURL=truncate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../src/utils/truncate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAiB,EACjB,OAAe,EACf,cAAuB;IAEvB,MAAM,SAAS,GAAG,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC;IAEhD,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI;YACJ,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAC3B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;QAC5B,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI;YACf,gBAAgB,EAAE,SAAS;YAC3B,cAAc,EAAE,SAAS;YACzB,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,8CAA8C;SACrD;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAc,EACd,SAAiB;IAEjB,0BAA0B;IAC1B,IAAI,WAAmB,CAAC;IAExB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,WAAW,GAAG,MAAM,CAAC;IACvB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACnE,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QACjC,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QACpC,OAAO;YACL,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK;QAC9C,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,WAAW,CAAC,MAAM;KACnC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAiB,EACjB,UAAkB;IAElB,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QACjC,OAAO;YACL,OAAO;YACP,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;QACrC,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,OAAe;IAEf,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAEnD,IAAI,UAAU,IAAI,OAAO,EAAE,CAAC;QAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,cAAc;QAChC,IAAI,EAAE,8CAA8C;KACrD,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@pilat/mcp-datalink",
3
+ "version": "1.0.1",
4
+ "description": "MCP server for secure database access (PostgreSQL, MySQL, SQLite)",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "mcp-datalink": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "test": "vitest",
15
+ "test:unit": "vitest --run --exclude 'src/__integration__/**'",
16
+ "test:integration": "vitest run --config vitest.config.integration.ts",
17
+ "test:integration:watch": "vitest --config vitest.config.integration.ts",
18
+ "test:coverage": "vitest --coverage",
19
+ "lint": "eslint src",
20
+ "typecheck": "tsc --noEmit"
21
+ },
22
+ "keywords": [
23
+ "mcp",
24
+ "database",
25
+ "postgresql",
26
+ "mysql",
27
+ "sqlite",
28
+ "claude",
29
+ "claude-code",
30
+ "model-context-protocol"
31
+ ],
32
+ "author": "pilat",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/pilat/mcp-datalink"
36
+ },
37
+ "license": "MIT",
38
+ "files": [
39
+ "dist",
40
+ "databases.example.json"
41
+ ],
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
45
+ "engines": {
46
+ "node": ">=20.0.0"
47
+ },
48
+ "dependencies": {
49
+ "@modelcontextprotocol/sdk": "^1.0.0",
50
+ "better-sqlite3": "^11.7.0",
51
+ "mysql2": "^3.6.0",
52
+ "pg": "^8.11.0",
53
+ "pgsql-ast-parser": "^12.0.0"
54
+ },
55
+ "devDependencies": {
56
+ "@testcontainers/mysql": "^11.11.0",
57
+ "@testcontainers/postgresql": "^11.11.0",
58
+ "@types/better-sqlite3": "^7.6.0",
59
+ "@types/node": "^20.0.0",
60
+ "@types/pg": "^8.11.0",
61
+ "testcontainers": "^11.11.0",
62
+ "typescript": "^5.3.0",
63
+ "vitest": "^1.0.0"
64
+ }
65
+ }