@eamonboyle/mssql-mcp 1.0.0 → 1.2.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 (133) hide show
  1. package/README.md +153 -36
  2. package/dist/__tests__/ExplainQueryTool.test.d.ts +2 -0
  3. package/dist/__tests__/ExplainQueryTool.test.d.ts.map +1 -0
  4. package/dist/__tests__/ExplainQueryTool.test.js +96 -0
  5. package/dist/__tests__/ExplainQueryTool.test.js.map +1 -0
  6. package/dist/__tests__/config.test.d.ts +2 -0
  7. package/dist/__tests__/config.test.d.ts.map +1 -0
  8. package/dist/__tests__/config.test.js +29 -0
  9. package/dist/__tests__/config.test.js.map +1 -0
  10. package/dist/__tests__/db.test.d.ts +2 -0
  11. package/dist/__tests__/db.test.d.ts.map +1 -0
  12. package/dist/__tests__/db.test.js +204 -0
  13. package/dist/__tests__/db.test.js.map +1 -0
  14. package/dist/__tests__/promptRegistry.test.d.ts +2 -0
  15. package/dist/__tests__/promptRegistry.test.d.ts.map +1 -0
  16. package/dist/__tests__/promptRegistry.test.js +40 -0
  17. package/dist/__tests__/promptRegistry.test.js.map +1 -0
  18. package/dist/__tests__/resourceRegistry.test.d.ts +2 -0
  19. package/dist/__tests__/resourceRegistry.test.d.ts.map +1 -0
  20. package/dist/__tests__/resourceRegistry.test.js +40 -0
  21. package/dist/__tests__/resourceRegistry.test.js.map +1 -0
  22. package/dist/__tests__/schema.test.d.ts +2 -0
  23. package/dist/__tests__/schema.test.d.ts.map +1 -0
  24. package/dist/__tests__/schema.test.js +130 -0
  25. package/dist/__tests__/schema.test.js.map +1 -0
  26. package/dist/__tests__/sql.test.d.ts +2 -0
  27. package/dist/__tests__/sql.test.d.ts.map +1 -0
  28. package/dist/__tests__/sql.test.js +35 -0
  29. package/dist/__tests__/sql.test.js.map +1 -0
  30. package/dist/__tests__/toolRegistry.test.d.ts +2 -0
  31. package/dist/__tests__/toolRegistry.test.d.ts.map +1 -0
  32. package/dist/__tests__/toolRegistry.test.js +47 -0
  33. package/dist/__tests__/toolRegistry.test.js.map +1 -0
  34. package/dist/__tests__/validation.test.d.ts +2 -0
  35. package/dist/__tests__/validation.test.d.ts.map +1 -0
  36. package/dist/__tests__/validation.test.js +111 -0
  37. package/dist/__tests__/validation.test.js.map +1 -0
  38. package/dist/__tests__/writeTools.test.d.ts +2 -0
  39. package/dist/__tests__/writeTools.test.d.ts.map +1 -0
  40. package/dist/__tests__/writeTools.test.js +115 -0
  41. package/dist/__tests__/writeTools.test.js.map +1 -0
  42. package/dist/config.d.ts +5 -0
  43. package/dist/config.d.ts.map +1 -0
  44. package/dist/config.js +34 -0
  45. package/dist/config.js.map +1 -0
  46. package/dist/db.d.ts +28 -24
  47. package/dist/db.d.ts.map +1 -1
  48. package/dist/db.js +144 -89
  49. package/dist/db.js.map +1 -1
  50. package/dist/index.d.ts +2 -2
  51. package/dist/index.js +70 -105
  52. package/dist/index.js.map +1 -1
  53. package/dist/promptRegistry.d.ts +16 -0
  54. package/dist/promptRegistry.d.ts.map +1 -0
  55. package/dist/promptRegistry.js +107 -0
  56. package/dist/promptRegistry.js.map +1 -0
  57. package/dist/resourceRegistry.d.ts +12 -0
  58. package/dist/resourceRegistry.d.ts.map +1 -0
  59. package/dist/resourceRegistry.js +172 -0
  60. package/dist/resourceRegistry.js.map +1 -0
  61. package/dist/schema.d.ts +41 -0
  62. package/dist/schema.d.ts.map +1 -0
  63. package/dist/schema.js +211 -0
  64. package/dist/schema.js.map +1 -0
  65. package/dist/sql.d.ts +7 -0
  66. package/dist/sql.d.ts.map +1 -0
  67. package/dist/sql.js +73 -0
  68. package/dist/sql.js.map +1 -0
  69. package/dist/toolRegistry.d.ts +16 -0
  70. package/dist/toolRegistry.d.ts.map +1 -0
  71. package/dist/toolRegistry.js +401 -0
  72. package/dist/toolRegistry.js.map +1 -0
  73. package/dist/tools/CreateIndexTool.d.ts +30 -23
  74. package/dist/tools/CreateIndexTool.d.ts.map +1 -1
  75. package/dist/tools/CreateIndexTool.js +47 -71
  76. package/dist/tools/CreateIndexTool.js.map +1 -1
  77. package/dist/tools/CreateTableTool.d.ts +18 -11
  78. package/dist/tools/CreateTableTool.d.ts.map +1 -1
  79. package/dist/tools/CreateTableTool.js +37 -56
  80. package/dist/tools/CreateTableTool.js.map +1 -1
  81. package/dist/tools/DeleteDataTool.d.ts +22 -0
  82. package/dist/tools/DeleteDataTool.d.ts.map +1 -0
  83. package/dist/tools/DeleteDataTool.js +35 -0
  84. package/dist/tools/DeleteDataTool.js.map +1 -0
  85. package/dist/tools/DescribeObjectTool.d.ts +21 -0
  86. package/dist/tools/DescribeObjectTool.d.ts.map +1 -0
  87. package/dist/tools/DescribeObjectTool.js +31 -0
  88. package/dist/tools/DescribeObjectTool.js.map +1 -0
  89. package/dist/tools/DescribeTableTool.d.ts +19 -20
  90. package/dist/tools/DescribeTableTool.d.ts.map +1 -1
  91. package/dist/tools/DescribeTableTool.js +23 -41
  92. package/dist/tools/DescribeTableTool.js.map +1 -1
  93. package/dist/tools/DropTableTool.d.ts +13 -11
  94. package/dist/tools/DropTableTool.d.ts.map +1 -1
  95. package/dist/tools/DropTableTool.js +30 -44
  96. package/dist/tools/DropTableTool.js.map +1 -1
  97. package/dist/tools/ExplainQueryTool.d.ts +32 -0
  98. package/dist/tools/ExplainQueryTool.d.ts.map +1 -0
  99. package/dist/tools/ExplainQueryTool.js +102 -0
  100. package/dist/tools/ExplainQueryTool.js.map +1 -0
  101. package/dist/tools/InsertDataTool.d.ts +20 -16
  102. package/dist/tools/InsertDataTool.d.ts.map +1 -1
  103. package/dist/tools/InsertDataTool.js +91 -108
  104. package/dist/tools/InsertDataTool.js.map +1 -1
  105. package/dist/tools/ListObjectsTool.d.ts +20 -0
  106. package/dist/tools/ListObjectsTool.d.ts.map +1 -0
  107. package/dist/tools/ListObjectsTool.js +26 -0
  108. package/dist/tools/ListObjectsTool.js.map +1 -0
  109. package/dist/tools/ListTableTool.d.ts +20 -16
  110. package/dist/tools/ListTableTool.d.ts.map +1 -1
  111. package/dist/tools/ListTableTool.js +32 -49
  112. package/dist/tools/ListTableTool.js.map +1 -1
  113. package/dist/tools/ReadDataTool.d.ts +35 -41
  114. package/dist/tools/ReadDataTool.d.ts.map +1 -1
  115. package/dist/tools/ReadDataTool.js +92 -228
  116. package/dist/tools/ReadDataTool.js.map +1 -1
  117. package/dist/tools/SearchDataTool.d.ts +27 -0
  118. package/dist/tools/SearchDataTool.d.ts.map +1 -0
  119. package/dist/tools/SearchDataTool.js +61 -0
  120. package/dist/tools/SearchDataTool.js.map +1 -0
  121. package/dist/tools/UpdateDataTool.d.ts +21 -16
  122. package/dist/tools/UpdateDataTool.d.ts.map +1 -1
  123. package/dist/tools/UpdateDataTool.js +45 -65
  124. package/dist/tools/UpdateDataTool.js.map +1 -1
  125. package/dist/validation.d.ts +14 -0
  126. package/dist/validation.d.ts.map +1 -0
  127. package/dist/validation.js +134 -0
  128. package/dist/validation.js.map +1 -0
  129. package/dist/writeSafety.d.ts +21 -0
  130. package/dist/writeSafety.d.ts.map +1 -0
  131. package/dist/writeSafety.js +169 -0
  132. package/dist/writeSafety.js.map +1 -0
  133. package/package.json +17 -6
@@ -1,45 +1,31 @@
1
- import { getSqlRequest } from "../db.js";
2
- export class DropTableTool {
3
- constructor() {
4
- this.name = "drop_table";
5
- this.description = "Drops a table from the MSSQL Database.";
6
- this.inputSchema = {
7
- type: "object",
8
- properties: {
9
- tableName: { type: "string", description: "Name of the table to drop" },
10
- databaseName: {
11
- type: "string",
12
- description: "Name of the database to use (optional). Omit to use the default database."
13
- },
14
- },
15
- required: ["tableName"],
16
- };
17
- }
18
- async run(params) {
19
- try {
20
- const { tableName, databaseName } = params;
21
- const { request, error } = await getSqlRequest(databaseName);
22
- if (error) {
23
- return { success: false, message: error };
24
- }
25
- // Basic validation to prevent SQL injection
26
- if (!/^[\w\d_]+$/.test(tableName)) {
27
- throw new Error("Invalid table name.");
28
- }
29
- const query = `DROP TABLE [${tableName}]`;
30
- await request.query(query);
31
- return {
32
- success: true,
33
- message: `Table '${tableName}' dropped successfully.`
34
- };
35
- }
36
- catch (error) {
37
- console.error("Error dropping table:", error);
38
- return {
39
- success: false,
40
- message: `Failed to drop table: ${error}`
41
- };
42
- }
43
- }
44
- }
1
+ import { getSqlRequest } from "../db.js";
2
+ import { buildQualifiedName } from "../sql.js";
3
+ export class DropTableTool {
4
+ constructor() {
5
+ this.name = "drop_table";
6
+ this.description = "Drops a table from the MSSQL Database.";
7
+ }
8
+ async run(params) {
9
+ try {
10
+ const { tableName, databaseName } = params;
11
+ const { request, error } = await getSqlRequest(databaseName);
12
+ if (error) {
13
+ return { success: false, message: error };
14
+ }
15
+ const query = `DROP TABLE ${buildQualifiedName(tableName)}`;
16
+ await request.query(query);
17
+ return {
18
+ success: true,
19
+ message: `Table '${tableName}' dropped successfully.`,
20
+ };
21
+ }
22
+ catch (error) {
23
+ console.error("Error dropping table:", error);
24
+ return {
25
+ success: false,
26
+ message: `Failed to drop table: ${error}`,
27
+ };
28
+ }
29
+ }
30
+ }
45
31
  //# sourceMappingURL=DropTableTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropTableTool.js","sourceRoot":"","sources":["../../src/tools/DropTableTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,aAAa;IAA1B;QAEE,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GAAG,wCAAwC,CAAC;QACvD,gBAAW,GAAG;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;gBACvE,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2EAA2E;iBACzF;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC;SACjB,CAAC;IA6BX,CAAC;IA3BC,KAAK,CAAC,GAAG,CAAC,MAAW;QACnB,IAAI;YACF,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YAE3C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,KAAK,EAAE;gBACT,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;aAC3C;YAED,4CAA4C;YAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBACjC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;aACxC;YACD,MAAM,KAAK,GAAG,eAAe,SAAS,GAAG,CAAC;YAC1C,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,UAAU,SAAS,yBAAyB;aACtD,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yBAAyB,KAAK,EAAE;aAC1C,CAAC;SACH;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"DropTableTool.js","sourceRoot":"","sources":["../../src/tools/DropTableTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAO/C,MAAM,OAAO,aAAa;IAA1B;QACE,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GAAG,wCAAwC,CAAC;IAyBzD,CAAC;IAvBC,KAAK,CAAC,GAAG,CAAC,MAAuB;QAC/B,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YAE3C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YAC5C,CAAC;YAED,MAAM,KAAK,GAAG,cAAc,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5D,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,UAAU,SAAS,yBAAyB;aACtD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yBAAyB,KAAK,EAAE;aAC1C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ import sql from "mssql";
2
+ interface ExplainQueryParams {
3
+ query: string;
4
+ databaseName?: string;
5
+ }
6
+ export declare class ExplainQueryTool {
7
+ name: string;
8
+ description: string;
9
+ run(params: ExplainQueryParams): Promise<{
10
+ success: boolean;
11
+ message: string;
12
+ error: string;
13
+ planXml?: undefined;
14
+ recordsets?: undefined;
15
+ } | {
16
+ success: boolean;
17
+ message: string;
18
+ error?: undefined;
19
+ planXml?: undefined;
20
+ recordsets?: undefined;
21
+ } | {
22
+ success: boolean;
23
+ message: string;
24
+ planXml: string | null;
25
+ recordsets: {
26
+ [x: string]: sql.IRecordSet<any>;
27
+ } | sql.IRecordSet<any>[] | undefined;
28
+ error?: undefined;
29
+ }>;
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=ExplainQueryTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExplainQueryTool.d.ts","sourceRoot":"","sources":["../../src/tools/ExplainQueryTool.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AAIxB,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAyCD,qBAAa,gBAAgB;IAC3B,IAAI,SAAmB;IACvB,WAAW,SAC6F;IAElG,GAAG,CAAC,MAAM,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;;;;CA+DrC"}
@@ -0,0 +1,102 @@
1
+ import { getDedicatedSqlPool } from "../db.js";
2
+ import { validateReadQuery } from "../validation.js";
3
+ function cellLooksLikeShowPlanXml(value) {
4
+ if (typeof value === "string" && value.trimStart().startsWith("<")) {
5
+ return value;
6
+ }
7
+ if (Buffer.isBuffer(value)) {
8
+ const s = value.toString("utf16le").trimStart();
9
+ if (s.startsWith("<")) {
10
+ return s;
11
+ }
12
+ }
13
+ return null;
14
+ }
15
+ function extractPlanXml(recordsets) {
16
+ if (!Array.isArray(recordsets)) {
17
+ return null;
18
+ }
19
+ for (const recordset of recordsets) {
20
+ if (!Array.isArray(recordset)) {
21
+ continue;
22
+ }
23
+ const firstRow = recordset[0];
24
+ if (!firstRow || typeof firstRow !== "object") {
25
+ continue;
26
+ }
27
+ for (const value of Object.values(firstRow)) {
28
+ const xml = cellLooksLikeShowPlanXml(value);
29
+ if (xml) {
30
+ return xml;
31
+ }
32
+ }
33
+ }
34
+ return null;
35
+ }
36
+ export class ExplainQueryTool {
37
+ constructor() {
38
+ this.name = "explain_query";
39
+ this.description = "Returns an estimated SQL Server execution plan for a validated SELECT query without modifying data.";
40
+ }
41
+ async run(params) {
42
+ let pool;
43
+ let showplanEnabled = false;
44
+ try {
45
+ const { query, databaseName } = params;
46
+ const validation = validateReadQuery(query);
47
+ if (!validation.isValid) {
48
+ return {
49
+ success: false,
50
+ message: `Security validation failed: ${validation.error}`,
51
+ error: "SECURITY_VALIDATION_FAILED",
52
+ };
53
+ }
54
+ const { pool: dedicatedPool, error } = await getDedicatedSqlPool(databaseName);
55
+ if (error) {
56
+ return { success: false, message: error };
57
+ }
58
+ pool = dedicatedPool;
59
+ // Same pattern as SSMS: separate batches on one session, no explicit transaction.
60
+ // BEGIN TRANSACTION can prevent SHOWPLAN_XML from affecting the following SELECT.
61
+ // Use batch() so batches go through execSqlBatch (closer to SSMS client batch boundaries).
62
+ await pool.request().batch("SET SHOWPLAN_XML ON");
63
+ showplanEnabled = true;
64
+ const planResult = await pool.request().batch(query);
65
+ const planXml = extractPlanXml(planResult.recordsets);
66
+ return {
67
+ success: true,
68
+ message: planXml
69
+ ? "Estimated execution plan generated successfully."
70
+ : "Execution plan request completed, but no XML plan was returned.",
71
+ planXml,
72
+ recordsets: planXml ? undefined : planResult.recordsets,
73
+ };
74
+ }
75
+ catch (error) {
76
+ console.error("Error explaining query:", error);
77
+ return {
78
+ success: false,
79
+ message: `Failed to explain query: ${error}`,
80
+ };
81
+ }
82
+ finally {
83
+ if (pool && showplanEnabled) {
84
+ try {
85
+ await pool.request().batch("SET SHOWPLAN_XML OFF");
86
+ }
87
+ catch (cleanupError) {
88
+ console.error("Failed to disable SHOWPLAN_XML:", cleanupError);
89
+ }
90
+ }
91
+ if (pool) {
92
+ try {
93
+ await pool.close();
94
+ }
95
+ catch {
96
+ // Ignore pool close errors during cleanup.
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=ExplainQueryTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExplainQueryTool.js","sourceRoot":"","sources":["../../src/tools/ExplainQueryTool.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,21 @@
1
- import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
- export declare class InsertDataTool implements Tool {
3
- [key: string]: any;
4
- name: string;
5
- description: string;
6
- inputSchema: any;
7
- run(params: any): Promise<{
8
- success: boolean;
9
- message: string;
10
- recordsInserted?: undefined;
11
- } | {
12
- success: boolean;
13
- message: string;
14
- recordsInserted: number;
15
- }>;
16
- }
1
+ type InsertRow = Record<string, unknown>;
2
+ interface InsertDataParams {
3
+ tableName: string;
4
+ data: InsertRow | InsertRow[];
5
+ databaseName?: string;
6
+ }
7
+ export declare class InsertDataTool {
8
+ name: string;
9
+ description: string;
10
+ run(params: InsertDataParams): Promise<{
11
+ success: boolean;
12
+ message: string;
13
+ recordsInserted?: undefined;
14
+ } | {
15
+ success: boolean;
16
+ message: string;
17
+ recordsInserted: number;
18
+ }>;
19
+ }
20
+ export {};
17
21
  //# sourceMappingURL=InsertDataTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InsertDataTool.d.ts","sourceRoot":"","sources":["../../src/tools/InsertDataTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,qBAAa,cAAe,YAAW,IAAI;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAiB;IACrB,WAAW,SA0CyD;IACpE,WAAW,MA0BF;IACH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;CA0EtB"}
1
+ {"version":3,"file":"InsertDataTool.d.ts","sourceRoot":"","sources":["../../src/tools/InsertDataTool.ts"],"names":[],"mappings":"AAGA,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzC,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,IAAI,SAAiB;IACrB,WAAW,SA0CyD;IAE9D,GAAG,CAAC,MAAM,EAAE,gBAAgB;;;;;;;;;CAqFnC"}
@@ -1,7 +1,8 @@
1
- import { getSqlRequest } from "../db.js";
2
- export class InsertDataTool {
3
- constructor() {
4
- this.name = "insert_data";
1
+ import { getSqlRequest } from "../db.js";
2
+ import { buildQualifiedName, quoteIdentifier } from "../sql.js";
3
+ export class InsertDataTool {
4
+ constructor() {
5
+ this.name = "insert_data";
5
6
  this.description = `Inserts data into an MSSQL Database table. Supports both single record insertion and multiple record insertion using standard SQL INSERT with VALUES clause.
6
7
  FORMAT EXAMPLES:
7
8
  Single Record Insert:
@@ -44,108 +45,90 @@ IMPORTANT RULES:
44
45
  - All objects in array must have identical column names
45
46
  - Column names must match the actual database table columns exactly
46
47
  - Values should match the expected data types (string, number, boolean, date)
47
- - Use proper date format for date columns (YYYY-MM-DD or ISO format)`;
48
- this.inputSchema = {
49
- type: "object",
50
- properties: {
51
- tableName: {
52
- type: "string",
53
- description: "Name of the table to insert data into"
54
- },
55
- data: {
56
- oneOf: [
57
- {
58
- type: "object",
59
- description: "Single record data object with column names as keys and values as the data to insert. Example: {\"name\": \"John\", \"age\": 30}"
60
- },
61
- {
62
- type: "array",
63
- items: { type: "object" },
64
- description: "Array of data objects for multiple record insertion. Each object must have identical column structure. Example: [{\"name\": \"John\", \"age\": 30}, {\"name\": \"Jane\", \"age\": 25}]"
65
- }
66
- ]
67
- },
68
- databaseName: {
69
- type: "string",
70
- description: "Name of the database to use (optional). Omit to use the default database."
71
- },
72
- },
73
- required: ["tableName", "data"],
74
- };
75
- }
76
- async run(params) {
77
- try {
78
- const { tableName, data, databaseName } = params;
79
- const { request, error } = await getSqlRequest(databaseName);
80
- if (error) {
81
- return { success: false, message: error };
82
- }
83
- // Check if data is an array (multiple records) or single object
84
- const isMultipleRecords = Array.isArray(data);
85
- const records = isMultipleRecords ? data : [data];
86
- if (records.length === 0) {
87
- return {
88
- success: false,
89
- message: "No data provided for insertion",
90
- };
91
- }
92
- // Validate that all records have the same columns
93
- const firstRecordColumns = Object.keys(records[0]).sort();
94
- for (let i = 1; i < records.length; i++) {
95
- const currentColumns = Object.keys(records[i]).sort();
96
- if (JSON.stringify(firstRecordColumns) !== JSON.stringify(currentColumns)) {
97
- return {
98
- success: false,
99
- message: `Column mismatch: Record ${i + 1} has different columns than the first record. Expected columns: [${firstRecordColumns.join(', ')}], but got: [${currentColumns.join(', ')}]`,
100
- };
101
- }
102
- }
103
- const columns = firstRecordColumns.join(", ");
104
- if (isMultipleRecords) {
105
- // Multiple records insert using VALUES clause - works for 1 or more records
106
- const valueClauses = [];
107
- records.forEach((record, recordIndex) => {
108
- const valueParams = firstRecordColumns
109
- .map((column, columnIndex) => `@value${recordIndex}_${columnIndex}`)
110
- .join(", ");
111
- valueClauses.push(`(${valueParams})`);
112
- // Add parameters for this record
113
- firstRecordColumns.forEach((column, columnIndex) => {
114
- request.input(`value${recordIndex}_${columnIndex}`, record[column]);
115
- });
116
- });
117
- const query = `INSERT INTO ${tableName} (${columns}) VALUES ${valueClauses.join(", ")}`;
118
- await request.query(query);
119
- return {
120
- success: true,
121
- message: `Successfully inserted ${records.length} record${records.length > 1 ? 's' : ''} into ${tableName}`,
122
- recordsInserted: records.length,
123
- };
124
- }
125
- else {
126
- // Single record insert (when data is passed as single object)
127
- const values = firstRecordColumns
128
- .map((column, index) => `@value${index}`)
129
- .join(", ");
130
- firstRecordColumns.forEach((column, index) => {
131
- request.input(`value${index}`, records[0][column]);
132
- });
133
- const query = `INSERT INTO ${tableName} (${columns}) VALUES (${values})`;
134
- await request.query(query);
135
- return {
136
- success: true,
137
- message: `Successfully inserted 1 record into ${tableName}`,
138
- recordsInserted: 1,
139
- };
140
- }
141
- }
142
- catch (error) {
143
- console.error("Error inserting data:", error);
144
- return {
145
- success: false,
146
- message: `Failed to insert data: ${error}`,
147
- };
148
- }
149
- }
150
- }
48
+ - Use proper date format for date columns (YYYY-MM-DD or ISO format)`;
49
+ }
50
+ async run(params) {
51
+ try {
52
+ const { tableName, data, databaseName } = params;
53
+ const { request, error } = await getSqlRequest(databaseName);
54
+ if (error) {
55
+ return { success: false, message: error };
56
+ }
57
+ // Check if data is an array (multiple records) or single object
58
+ const isMultipleRecords = Array.isArray(data);
59
+ const records = isMultipleRecords ? data : [data];
60
+ if (records.length === 0) {
61
+ return {
62
+ success: false,
63
+ message: "No data provided for insertion",
64
+ };
65
+ }
66
+ // Validate that all records have the same columns
67
+ const firstRecordColumns = Object.keys(records[0]).sort();
68
+ if (firstRecordColumns.length === 0) {
69
+ return {
70
+ success: false,
71
+ message: "At least one column is required for insertion",
72
+ };
73
+ }
74
+ for (let i = 1; i < records.length; i++) {
75
+ const currentColumns = Object.keys(records[i]).sort();
76
+ if (JSON.stringify(firstRecordColumns) !== JSON.stringify(currentColumns)) {
77
+ return {
78
+ success: false,
79
+ message: `Column mismatch: Record ${i + 1} has different columns than the first record. Expected columns: [${firstRecordColumns.join(", ")}], but got: [${currentColumns.join(", ")}]`,
80
+ };
81
+ }
82
+ }
83
+ const qualifiedTableName = buildQualifiedName(tableName);
84
+ const columns = firstRecordColumns
85
+ .map((columnName) => quoteIdentifier(columnName))
86
+ .join(", ");
87
+ if (isMultipleRecords) {
88
+ // Multiple records insert using VALUES clause - works for 1 or more records
89
+ const valueClauses = [];
90
+ records.forEach((record, recordIndex) => {
91
+ const valueParams = firstRecordColumns
92
+ .map((column, columnIndex) => `@value${recordIndex}_${columnIndex}`)
93
+ .join(", ");
94
+ valueClauses.push(`(${valueParams})`);
95
+ // Add parameters for this record
96
+ firstRecordColumns.forEach((column, columnIndex) => {
97
+ request.input(`value${recordIndex}_${columnIndex}`, record[column]);
98
+ });
99
+ });
100
+ const query = `INSERT INTO ${qualifiedTableName} (${columns}) VALUES ${valueClauses.join(", ")}`;
101
+ await request.query(query);
102
+ return {
103
+ success: true,
104
+ message: `Successfully inserted ${records.length} record${records.length > 1 ? "s" : ""} into ${tableName}`,
105
+ recordsInserted: records.length,
106
+ };
107
+ }
108
+ else {
109
+ // Single record insert (when data is passed as single object)
110
+ const values = firstRecordColumns
111
+ .map((column, index) => `@value${index}`)
112
+ .join(", ");
113
+ firstRecordColumns.forEach((column, index) => {
114
+ request.input(`value${index}`, records[0][column]);
115
+ });
116
+ const query = `INSERT INTO ${qualifiedTableName} (${columns}) VALUES (${values})`;
117
+ await request.query(query);
118
+ return {
119
+ success: true,
120
+ message: `Successfully inserted 1 record into ${tableName}`,
121
+ recordsInserted: 1,
122
+ };
123
+ }
124
+ }
125
+ catch (error) {
126
+ console.error("Error inserting data:", error);
127
+ return {
128
+ success: false,
129
+ message: `Failed to insert data: ${error}`,
130
+ };
131
+ }
132
+ }
133
+ }
151
134
  //# sourceMappingURL=InsertDataTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InsertDataTool.js","sourceRoot":"","sources":["../../src/tools/InsertDataTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InsertDataTool.js","sourceRoot":"","sources":["../../src/tools/InsertDataTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ interface ListObjectsParams {
2
+ objectTypes?: string[];
3
+ schemaName?: string;
4
+ databaseName?: string;
5
+ }
6
+ export declare class ListObjectsTool {
7
+ name: string;
8
+ description: string;
9
+ run(params: ListObjectsParams): Promise<{
10
+ success: boolean;
11
+ message: string;
12
+ objects: import("../schema.js").DatabaseObjectSummary[];
13
+ } | {
14
+ success: boolean;
15
+ message: string;
16
+ objects?: undefined;
17
+ }>;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=ListObjectsTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListObjectsTool.d.ts","sourceRoot":"","sources":["../../src/tools/ListObjectsTool.ts"],"names":[],"mappings":"AAEA,UAAU,iBAAiB;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IAC1B,IAAI,SAAkB;IACtB,WAAW,SAC0E;IAE/E,GAAG,CAAC,MAAM,EAAE,iBAAiB;;;;;;;;;CAsBpC"}
@@ -0,0 +1,26 @@
1
+ import { listDatabaseObjects } from "../schema.js";
2
+ export class ListObjectsTool {
3
+ constructor() {
4
+ this.name = "list_objects";
5
+ this.description = "Lists schema objects such as tables, views, procedures, functions, and triggers.";
6
+ }
7
+ async run(params) {
8
+ try {
9
+ const { objectTypes, schemaName, databaseName } = params;
10
+ const objects = await listDatabaseObjects(databaseName, objectTypes, schemaName);
11
+ return {
12
+ success: true,
13
+ message: `Listed ${objects.length} object(s).`,
14
+ objects,
15
+ };
16
+ }
17
+ catch (error) {
18
+ console.error("Error listing objects:", error);
19
+ return {
20
+ success: false,
21
+ message: `Failed to list objects: ${error}`,
22
+ };
23
+ }
24
+ }
25
+ }
26
+ //# sourceMappingURL=ListObjectsTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListObjectsTool.js","sourceRoot":"","sources":["../../src/tools/ListObjectsTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAQnD,MAAM,OAAO,eAAe;IAA5B;QACE,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GACT,kFAAkF,CAAC;IAwBvF,CAAC;IAtBC,KAAK,CAAC,GAAG,CAAC,MAAyB;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YACzD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CACvC,YAAY,EACZ,WAAW,EACX,UAAU,CACX,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,UAAU,OAAO,CAAC,MAAM,aAAa;gBAC9C,OAAO;aACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,2BAA2B,KAAK,EAAE;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -1,17 +1,21 @@
1
- import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
- export declare class ListTableTool implements Tool {
3
- [key: string]: any;
4
- name: string;
5
- description: string;
6
- inputSchema: any;
7
- run(params: any): Promise<{
8
- success: boolean;
9
- message: string;
10
- items?: undefined;
11
- } | {
12
- success: boolean;
13
- message: string;
14
- items: import("mssql").IRecordSet<any>;
15
- }>;
16
- }
1
+ interface ListTableParams {
2
+ parameters?: string[];
3
+ databaseName?: string;
4
+ }
5
+ export declare class ListTableTool {
6
+ name: string;
7
+ description: string;
8
+ run(params?: ListTableParams): Promise<{
9
+ success: boolean;
10
+ message: string;
11
+ items: {
12
+ name: string;
13
+ }[];
14
+ } | {
15
+ success: boolean;
16
+ message: string;
17
+ items?: undefined;
18
+ }>;
19
+ }
20
+ export {};
17
21
  //# sourceMappingURL=ListTableTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListTableTool.d.ts","sourceRoot":"","sources":["../../src/tools/ListTableTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,qBAAa,aAAc,YAAW,IAAI;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAgB;IACpB,WAAW,SAA2E;IACtF,WAAW,MAiBF;IAEH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;CAwBtB"}
1
+ {"version":3,"file":"ListTableTool.d.ts","sourceRoot":"","sources":["../../src/tools/ListTableTool.ts"],"names":[],"mappings":"AAEA,UAAU,eAAe;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,IAAI,SAAgB;IACpB,WAAW,SAC+D;IAEpE,GAAG,CAAC,MAAM,GAAE,eAAoB;;;;;;;;;;;CAiCvC"}