@eamonboyle/mssql-mcp 1.1.0 → 1.3.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 (144) hide show
  1. package/README.md +169 -22
  2. package/dist/config.d.ts +13 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +74 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/db.d.ts +29 -24
  7. package/dist/db.d.ts.map +1 -1
  8. package/dist/db.js +144 -112
  9. package/dist/db.js.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.js +382 -122
  12. package/dist/index.js.map +1 -1
  13. package/dist/mcpResults.d.ts +49 -0
  14. package/dist/mcpResults.d.ts.map +1 -0
  15. package/dist/mcpResults.js +246 -0
  16. package/dist/mcpResults.js.map +1 -0
  17. package/dist/promptRegistry.d.ts +16 -0
  18. package/dist/promptRegistry.d.ts.map +1 -0
  19. package/dist/promptRegistry.js +112 -0
  20. package/dist/promptRegistry.js.map +1 -0
  21. package/dist/resourceRegistry.d.ts +14 -0
  22. package/dist/resourceRegistry.d.ts.map +1 -0
  23. package/dist/resourceRegistry.js +311 -0
  24. package/dist/resourceRegistry.js.map +1 -0
  25. package/dist/schema.d.ts +57 -0
  26. package/dist/schema.d.ts.map +1 -0
  27. package/dist/schema.js +390 -0
  28. package/dist/schema.js.map +1 -0
  29. package/dist/serverState.d.ts +28 -0
  30. package/dist/serverState.d.ts.map +1 -0
  31. package/dist/serverState.js +99 -0
  32. package/dist/serverState.js.map +1 -0
  33. package/dist/sql.d.ts +7 -0
  34. package/dist/sql.d.ts.map +1 -0
  35. package/dist/sql.js +73 -0
  36. package/dist/sql.js.map +1 -0
  37. package/dist/toolRegistry.d.ts +20 -0
  38. package/dist/toolRegistry.d.ts.map +1 -0
  39. package/dist/toolRegistry.js +547 -0
  40. package/dist/toolRegistry.js.map +1 -0
  41. package/dist/tools/AnalyzeTableTool.d.ts +37 -0
  42. package/dist/tools/AnalyzeTableTool.d.ts.map +1 -0
  43. package/dist/tools/AnalyzeTableTool.js +81 -0
  44. package/dist/tools/AnalyzeTableTool.js.map +1 -0
  45. package/dist/tools/CreateIndexTool.d.ts +30 -23
  46. package/dist/tools/CreateIndexTool.d.ts.map +1 -1
  47. package/dist/tools/CreateIndexTool.js +47 -77
  48. package/dist/tools/CreateIndexTool.js.map +1 -1
  49. package/dist/tools/CreateTableTool.d.ts +18 -11
  50. package/dist/tools/CreateTableTool.d.ts.map +1 -1
  51. package/dist/tools/CreateTableTool.js +37 -61
  52. package/dist/tools/CreateTableTool.js.map +1 -1
  53. package/dist/tools/DeleteDataTool.d.ts +22 -0
  54. package/dist/tools/DeleteDataTool.d.ts.map +1 -0
  55. package/dist/tools/DeleteDataTool.js +38 -0
  56. package/dist/tools/DeleteDataTool.js.map +1 -0
  57. package/dist/tools/DescribeObjectTool.d.ts +21 -0
  58. package/dist/tools/DescribeObjectTool.d.ts.map +1 -0
  59. package/dist/tools/DescribeObjectTool.js +31 -0
  60. package/dist/tools/DescribeObjectTool.js.map +1 -0
  61. package/dist/tools/DescribeRelationshipsTool.d.ts +20 -0
  62. package/dist/tools/DescribeRelationshipsTool.d.ts.map +1 -0
  63. package/dist/tools/DescribeRelationshipsTool.js +24 -0
  64. package/dist/tools/DescribeRelationshipsTool.js.map +1 -0
  65. package/dist/tools/DescribeTableTool.d.ts +19 -20
  66. package/dist/tools/DescribeTableTool.d.ts.map +1 -1
  67. package/dist/tools/DescribeTableTool.js +23 -44
  68. package/dist/tools/DescribeTableTool.js.map +1 -1
  69. package/dist/tools/DropTableTool.d.ts +13 -11
  70. package/dist/tools/DropTableTool.d.ts.map +1 -1
  71. package/dist/tools/DropTableTool.js +30 -44
  72. package/dist/tools/DropTableTool.js.map +1 -1
  73. package/dist/tools/ExplainQueryTool.d.ts +32 -0
  74. package/dist/tools/ExplainQueryTool.d.ts.map +1 -0
  75. package/dist/tools/ExplainQueryTool.js +102 -0
  76. package/dist/tools/ExplainQueryTool.js.map +1 -0
  77. package/dist/tools/InsertDataTool.d.ts +20 -16
  78. package/dist/tools/InsertDataTool.d.ts.map +1 -1
  79. package/dist/tools/InsertDataTool.js +91 -108
  80. package/dist/tools/InsertDataTool.js.map +1 -1
  81. package/dist/tools/ListDatabasesTool.d.ts +16 -0
  82. package/dist/tools/ListDatabasesTool.d.ts.map +1 -0
  83. package/dist/tools/ListDatabasesTool.js +26 -0
  84. package/dist/tools/ListDatabasesTool.js.map +1 -0
  85. package/dist/tools/ListForeignKeysTool.d.ts +19 -0
  86. package/dist/tools/ListForeignKeysTool.d.ts.map +1 -0
  87. package/dist/tools/ListForeignKeysTool.js +24 -0
  88. package/dist/tools/ListForeignKeysTool.js.map +1 -0
  89. package/dist/tools/ListObjectsTool.d.ts +20 -0
  90. package/dist/tools/ListObjectsTool.d.ts.map +1 -0
  91. package/dist/tools/ListObjectsTool.js +26 -0
  92. package/dist/tools/ListObjectsTool.js.map +1 -0
  93. package/dist/tools/ListTableTool.d.ts +20 -16
  94. package/dist/tools/ListTableTool.d.ts.map +1 -1
  95. package/dist/tools/ListTableTool.js +32 -51
  96. package/dist/tools/ListTableTool.js.map +1 -1
  97. package/dist/tools/PreviewDeleteTool.d.ts +28 -0
  98. package/dist/tools/PreviewDeleteTool.d.ts.map +1 -0
  99. package/dist/tools/PreviewDeleteTool.js +31 -0
  100. package/dist/tools/PreviewDeleteTool.js.map +1 -0
  101. package/dist/tools/PreviewUpdateTool.d.ts +30 -0
  102. package/dist/tools/PreviewUpdateTool.d.ts.map +1 -0
  103. package/dist/tools/PreviewUpdateTool.js +34 -0
  104. package/dist/tools/PreviewUpdateTool.js.map +1 -0
  105. package/dist/tools/ReadDataTool.d.ts +35 -33
  106. package/dist/tools/ReadDataTool.d.ts.map +1 -1
  107. package/dist/tools/ReadDataTool.js +92 -105
  108. package/dist/tools/ReadDataTool.js.map +1 -1
  109. package/dist/tools/SearchDataTool.d.ts +27 -0
  110. package/dist/tools/SearchDataTool.d.ts.map +1 -0
  111. package/dist/tools/SearchDataTool.js +61 -0
  112. package/dist/tools/SearchDataTool.js.map +1 -0
  113. package/dist/tools/UpdateDataTool.d.ts +22 -16
  114. package/dist/tools/UpdateDataTool.d.ts.map +1 -1
  115. package/dist/tools/UpdateDataTool.js +48 -65
  116. package/dist/tools/UpdateDataTool.js.map +1 -1
  117. package/dist/validation.d.ts +13 -13
  118. package/dist/validation.js +133 -133
  119. package/dist/validation.js.map +1 -1
  120. package/dist/writePreview.d.ts +20 -0
  121. package/dist/writePreview.d.ts.map +1 -0
  122. package/dist/writePreview.js +27 -0
  123. package/dist/writePreview.js.map +1 -0
  124. package/dist/writePreviewGrant.d.ts +18 -0
  125. package/dist/writePreviewGrant.d.ts.map +1 -0
  126. package/dist/writePreviewGrant.js +71 -0
  127. package/dist/writePreviewGrant.js.map +1 -0
  128. package/dist/writePreviewGrantStore.d.ts +10 -0
  129. package/dist/writePreviewGrantStore.d.ts.map +1 -0
  130. package/dist/writePreviewGrantStore.js +47 -0
  131. package/dist/writePreviewGrantStore.js.map +1 -0
  132. package/dist/writeSafety.d.ts +21 -0
  133. package/dist/writeSafety.d.ts.map +1 -0
  134. package/dist/writeSafety.js +169 -0
  135. package/dist/writeSafety.js.map +1 -0
  136. package/package.json +6 -5
  137. package/dist/__tests__/db.test.d.ts +0 -2
  138. package/dist/__tests__/db.test.d.ts.map +0 -1
  139. package/dist/__tests__/db.test.js +0 -204
  140. package/dist/__tests__/db.test.js.map +0 -1
  141. package/dist/__tests__/validation.test.d.ts +0 -2
  142. package/dist/__tests__/validation.test.d.ts.map +0 -1
  143. package/dist/__tests__/validation.test.js +0 -111
  144. package/dist/__tests__/validation.test.js.map +0 -1
@@ -0,0 +1,81 @@
1
+ import { analyzeTable } from "../schema.js";
2
+ function formatScalar(value) {
3
+ if (value === null || value === undefined) {
4
+ return "n/a";
5
+ }
6
+ if (typeof value === "bigint") {
7
+ return value.toString();
8
+ }
9
+ if (typeof value === "number" && Number.isFinite(value)) {
10
+ return Number.isInteger(value)
11
+ ? String(value)
12
+ : value.toLocaleString(undefined, { maximumFractionDigits: 4 });
13
+ }
14
+ return String(value);
15
+ }
16
+ export function formatAnalyzeTableText(data) {
17
+ const s = data.summary;
18
+ if (!s) {
19
+ return "";
20
+ }
21
+ const schema = formatScalar(s.schemaName);
22
+ const table = formatScalar(s.tableName);
23
+ const lines = [
24
+ `Table: ${schema}.${table}`,
25
+ `Estimated rows: ${formatScalar(s.rowCount)}`,
26
+ `Reserved: ${formatScalar(s.reservedMB)} MB`,
27
+ `Used: ${formatScalar(s.usedMB)} MB`,
28
+ "",
29
+ "Indexes:",
30
+ ];
31
+ if (data.indexes.length === 0) {
32
+ lines.push(" (none)");
33
+ }
34
+ else {
35
+ for (const idx of data.indexes) {
36
+ const name = idx.name != null ? formatScalar(idx.name) : "(unnamed)";
37
+ const type = idx.type != null ? formatScalar(idx.type) : "?";
38
+ const tags = [];
39
+ if (idx.isPrimaryKey === true || idx.isPrimaryKey === 1) {
40
+ tags.push("primary key");
41
+ }
42
+ if (idx.isUnique === true || idx.isUnique === 1) {
43
+ tags.push("unique");
44
+ }
45
+ const tagPart = tags.length > 0 ? ` (${tags.join(", ")})` : "";
46
+ lines.push(` - ${name}: ${type}${tagPart}`);
47
+ }
48
+ }
49
+ return lines.join("\n");
50
+ }
51
+ export class AnalyzeTableTool {
52
+ constructor() {
53
+ this.name = "analyze_table";
54
+ this.description = "Summarizes row counts, storage, and indexes for a table.";
55
+ }
56
+ async run(params) {
57
+ try {
58
+ const data = await analyzeTable(params.tableName, params.databaseName, params.schemaName);
59
+ if (!data.summary) {
60
+ return {
61
+ success: true,
62
+ message: `No table named '${params.tableName}' was found.`,
63
+ data,
64
+ };
65
+ }
66
+ const detail = formatAnalyzeTableText(data);
67
+ return {
68
+ success: true,
69
+ message: `Analyzed ${params.tableName} successfully.\n\n${detail}`,
70
+ data,
71
+ };
72
+ }
73
+ catch (error) {
74
+ return {
75
+ success: false,
76
+ message: `Failed to analyze table: ${error}`,
77
+ };
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=AnalyzeTableTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyzeTableTool.js","sourceRoot":"","sources":["../../src/tools/AnalyzeTableTool.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,31 @@
1
- import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
- export declare class CreateIndexTool 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
- details?: undefined;
11
- } | {
12
- success: boolean;
13
- message: string;
14
- details: {
15
- schemaName: any;
16
- tableName: any;
17
- indexName: any;
18
- columnNames: any;
19
- isUnique: any;
20
- isClustered: any;
21
- };
22
- }>;
23
- }
1
+ interface CreateIndexParams {
2
+ schemaName?: string;
3
+ tableName: string;
4
+ indexName: string;
5
+ columns: string[];
6
+ isUnique?: boolean;
7
+ isClustered?: boolean;
8
+ databaseName?: string;
9
+ }
10
+ export declare class CreateIndexTool {
11
+ name: string;
12
+ description: string;
13
+ run(params: CreateIndexParams): Promise<{
14
+ success: boolean;
15
+ message: string;
16
+ details?: undefined;
17
+ } | {
18
+ success: boolean;
19
+ message: string;
20
+ details: {
21
+ schemaName: string | undefined;
22
+ tableName: string;
23
+ indexName: string;
24
+ columnNames: string;
25
+ isUnique: boolean;
26
+ isClustered: boolean;
27
+ };
28
+ }>;
29
+ }
30
+ export {};
24
31
  //# sourceMappingURL=CreateIndexTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateIndexTool.d.ts","sourceRoot":"","sources":["../../src/tools/CreateIndexTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,qBAAa,eAAgB,YAAW,IAAI;IAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAkB;IACtB,WAAW,SACsE;IACjF,WAAW,MAmCF;IAEH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;CA8CtB"}
1
+ {"version":3,"file":"CreateIndexTool.d.ts","sourceRoot":"","sources":["../../src/tools/CreateIndexTool.ts"],"names":[],"mappings":"AAGA,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IAC1B,IAAI,SAAkB;IACtB,WAAW,SACsE;IAE3E,GAAG,CAAC,MAAM,EAAE,iBAAiB;;;;;;;;;;;;;;;;CAkDpC"}
@@ -1,78 +1,48 @@
1
- import { getSqlRequest } from "../db.js";
2
- export class CreateIndexTool {
3
- constructor() {
4
- this.name = "create_index";
5
- this.description = "Creates an index on a specified column or columns in an MSSQL Database table";
6
- this.inputSchema = {
7
- type: "object",
8
- properties: {
9
- schemaName: {
10
- type: "string",
11
- description: "Name of the schema containing the table",
12
- },
13
- tableName: {
14
- type: "string",
15
- description: "Name of the table to create index on",
16
- },
17
- indexName: { type: "string", description: "Name for the new index" },
18
- columns: {
19
- type: "array",
20
- items: { type: "string" },
21
- description: "Array of column names to include in the index",
22
- },
23
- isUnique: {
24
- type: "boolean",
25
- description: "Whether the index should enforce uniqueness (default: false)",
26
- default: false,
27
- },
28
- isClustered: {
29
- type: "boolean",
30
- description: "Whether the index should be clustered (default: false)",
31
- default: false,
32
- },
33
- databaseName: {
34
- type: "string",
35
- description: "Name of the database to use (optional). Omit to use the default configured database.",
36
- },
37
- },
38
- required: ["tableName", "indexName", "columns"],
39
- };
40
- }
41
- async run(params) {
42
- try {
43
- const { schemaName, tableName, indexName, columns, databaseName, isUnique = false, isClustered = false, } = params;
44
- const { request, error } = await getSqlRequest(databaseName);
45
- if (error) {
46
- return { success: false, message: error };
47
- }
48
- let indexType = isClustered ? "CLUSTERED" : "NONCLUSTERED";
49
- if (isUnique) {
50
- indexType = `UNIQUE ${indexType}`;
51
- }
52
- const columnNames = columns.join(", ");
53
- const tableRef = schemaName ? `${schemaName}.${tableName}` : tableName;
54
- const query = `CREATE ${indexType} INDEX ${indexName} ON ${tableRef} (${columnNames})`;
55
- await request.query(query);
56
- return {
57
- success: true,
58
- message: `Index [${indexName}] created successfully on table [${tableRef}]`,
59
- details: {
60
- schemaName: schemaName || undefined,
61
- tableName,
62
- indexName,
63
- columnNames,
64
- isUnique,
65
- isClustered,
66
- },
67
- };
68
- }
69
- catch (error) {
70
- console.error("Error creating index:", error);
71
- return {
72
- success: false,
73
- message: `Failed to create index: ${error}`,
74
- };
75
- }
76
- }
77
- }
1
+ import { getSqlRequest } from "../db.js";
2
+ import { buildQualifiedName, quoteIdentifier } from "../sql.js";
3
+ export class CreateIndexTool {
4
+ constructor() {
5
+ this.name = "create_index";
6
+ this.description = "Creates an index on a specified column or columns in an MSSQL Database table";
7
+ }
8
+ async run(params) {
9
+ try {
10
+ const { schemaName, tableName, indexName, columns, databaseName, isUnique = false, isClustered = false, } = params;
11
+ const { request, error } = await getSqlRequest(databaseName);
12
+ if (error) {
13
+ return { success: false, message: error };
14
+ }
15
+ let indexType = isClustered ? "CLUSTERED" : "NONCLUSTERED";
16
+ if (isUnique) {
17
+ indexType = `UNIQUE ${indexType}`;
18
+ }
19
+ if (!Array.isArray(columns) || columns.length === 0) {
20
+ throw new Error("At least one column is required to create an index.");
21
+ }
22
+ const columnNames = columns.map((columnName) => quoteIdentifier(columnName)).join(", ");
23
+ const tableRef = buildQualifiedName(tableName, schemaName);
24
+ const query = `CREATE ${indexType} INDEX ${quoteIdentifier(indexName)} ON ${tableRef} (${columnNames})`;
25
+ await request.query(query);
26
+ return {
27
+ success: true,
28
+ message: `Index [${indexName}] created successfully on table [${tableRef}]`,
29
+ details: {
30
+ schemaName: schemaName || undefined,
31
+ tableName,
32
+ indexName,
33
+ columnNames,
34
+ isUnique,
35
+ isClustered,
36
+ },
37
+ };
38
+ }
39
+ catch (error) {
40
+ console.error("Error creating index:", error);
41
+ return {
42
+ success: false,
43
+ message: `Failed to create index: ${error}`,
44
+ };
45
+ }
46
+ }
47
+ }
78
48
  //# sourceMappingURL=CreateIndexTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateIndexTool.js","sourceRoot":"","sources":["../../src/tools/CreateIndexTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,eAAe;IAA5B;QAEE,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GACT,8EAA8E,CAAC;QACjF,gBAAW,GAAG;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yCAAyC;iBACvD;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;iBACpD;gBACD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;gBACpE,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EAAE,+CAA+C;iBAC7D;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,SAAS;oBACf,WAAW,EACT,8DAA8D;oBAChE,OAAO,EAAE,KAAK;iBACf;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,wDAAwD;oBACrE,OAAO,EAAE,KAAK;iBACf;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,sFAAsF;iBACzF;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,CAAC;SACzC,CAAC;IAgDX,CAAC;IA9CC,KAAK,CAAC,GAAG,CAAC,MAAW;QACnB,IAAI;YACF,MAAM,EACJ,UAAU,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,YAAY,EACZ,QAAQ,GAAG,KAAK,EAChB,WAAW,GAAG,KAAK,GACpB,GAAG,MAAM,CAAC;YAEX,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,IAAI,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;YAC3D,IAAI,QAAQ,EAAE;gBACZ,SAAS,GAAG,UAAU,SAAS,EAAE,CAAC;aACnC;YACD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,MAAM,KAAK,GAAG,UAAU,SAAS,UAAU,SAAS,OAAO,QAAQ,KAAK,WAAW,GAAG,CAAC;YACvF,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE3B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,UAAU,SAAS,oCAAoC,QAAQ,GAAG;gBAC3E,OAAO,EAAE;oBACP,UAAU,EAAE,UAAU,IAAI,SAAS;oBACnC,SAAS;oBACT,SAAS;oBACT,WAAW;oBACX,QAAQ;oBACR,WAAW;iBACZ;aACF,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,2BAA2B,KAAK,EAAE;aAC5C,CAAC;SACH;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"CreateIndexTool.js","sourceRoot":"","sources":["../../src/tools/CreateIndexTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAYhE,MAAM,OAAO,eAAe;IAA5B;QACE,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GACT,8EAA8E,CAAC;IAoDnF,CAAC;IAlDC,KAAK,CAAC,GAAG,CAAC,MAAyB;QACjC,IAAI,CAAC;YACH,MAAM,EACJ,UAAU,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,YAAY,EACZ,QAAQ,GAAG,KAAK,EAChB,WAAW,GAAG,KAAK,GACpB,GAAG,MAAM,CAAC;YAEX,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,IAAI,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC;YAC3D,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS,GAAG,UAAU,SAAS,EAAE,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,UAAU,SAAS,UAAU,eAAe,CAAC,SAAS,CAAC,OAAO,QAAQ,KAAK,WAAW,GAAG,CAAC;YACxG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE3B,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,UAAU,SAAS,oCAAoC,QAAQ,GAAG;gBAC3E,OAAO,EAAE;oBACP,UAAU,EAAE,UAAU,IAAI,SAAS;oBACnC,SAAS;oBACT,SAAS;oBACT,WAAW;oBACX,QAAQ;oBACR,WAAW;iBACZ;aACF,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,2BAA2B,KAAK,EAAE;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -1,12 +1,19 @@
1
- import { Tool } from "@modelcontextprotocol/sdk/types.js";
2
- export declare class CreateTableTool 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
- }>;
11
- }
1
+ import { type SqlTypeDeclaration } from "../writeSafety.js";
2
+ interface CreateTableParams {
3
+ schemaName?: string;
4
+ tableName: string;
5
+ columns: Array<{
6
+ name: string;
7
+ } & SqlTypeDeclaration>;
8
+ databaseName?: string;
9
+ }
10
+ export declare class CreateTableTool {
11
+ name: string;
12
+ description: string;
13
+ run(params: CreateTableParams): Promise<{
14
+ success: boolean;
15
+ message: string;
16
+ }>;
17
+ }
18
+ export {};
12
19
  //# sourceMappingURL=CreateTableTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateTableTool.d.ts","sourceRoot":"","sources":["../../src/tools/CreateTableTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,qBAAa,eAAgB,YAAW,IAAI;IAC1C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAkB;IACtB,WAAW,SAC+D;IAC1E,WAAW,MA4BF;IAEH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;CA6BtB"}
1
+ {"version":3,"file":"CreateTableTool.d.ts","sourceRoot":"","sources":["../../src/tools/CreateTableTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,iBAAiB;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,CAAC,CAAC;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IAC1B,IAAI,SAAkB;IACtB,WAAW,SAC+D;IAEpE,GAAG,CAAC,MAAM,EAAE,iBAAiB;;;;CA6BpC"}
@@ -1,62 +1,38 @@
1
- import { getSqlRequest } from "../db.js";
2
- export class CreateTableTool {
3
- constructor() {
4
- this.name = "create_table";
5
- this.description = "Creates a new table in the MSSQL Database with the specified columns.";
6
- this.inputSchema = {
7
- type: "object",
8
- properties: {
9
- tableName: { type: "string", description: "Name of the table to create" },
10
- columns: {
11
- type: "array",
12
- description: "Array of column definitions (e.g., [{ name: 'id', type: 'INT PRIMARY KEY' }, ...])",
13
- items: {
14
- type: "object",
15
- properties: {
16
- name: { type: "string", description: "Column name" },
17
- type: {
18
- type: "string",
19
- description: "SQL type and constraints (e.g., 'INT PRIMARY KEY', 'NVARCHAR(255) NOT NULL')",
20
- },
21
- },
22
- required: ["name", "type"],
23
- },
24
- },
25
- databaseName: {
26
- type: "string",
27
- description: "Name of the database to use (optional). Omit to use the default configured database.",
28
- },
29
- },
30
- required: ["tableName", "columns"],
31
- };
32
- }
33
- async run(params) {
34
- try {
35
- const { tableName, columns, databaseName } = params;
36
- const { request, error } = await getSqlRequest(databaseName);
37
- if (error) {
38
- return { success: false, message: error };
39
- }
40
- if (!Array.isArray(columns) || columns.length === 0) {
41
- throw new Error("'columns' must be a non-empty array");
42
- }
43
- const columnDefs = columns
44
- .map((col) => `[${col.name}] ${col.type}`)
45
- .join(", ");
46
- const query = `CREATE TABLE [${tableName}] (${columnDefs})`;
47
- await request.query(query);
48
- return {
49
- success: true,
50
- message: `Table '${tableName}' created successfully.`,
51
- };
52
- }
53
- catch (error) {
54
- console.error("Error creating table:", error);
55
- return {
56
- success: false,
57
- message: `Failed to create table: ${error}`,
58
- };
59
- }
60
- }
61
- }
1
+ import { getSqlRequest } from "../db.js";
2
+ import { buildQualifiedName } from "../sql.js";
3
+ import { buildCreateColumnDefinition, } from "../writeSafety.js";
4
+ export class CreateTableTool {
5
+ constructor() {
6
+ this.name = "create_table";
7
+ this.description = "Creates a new table in the MSSQL Database with the specified columns.";
8
+ }
9
+ async run(params) {
10
+ try {
11
+ const { schemaName, tableName, columns, databaseName } = params;
12
+ const { request, error } = await getSqlRequest(databaseName);
13
+ if (error) {
14
+ return { success: false, message: error };
15
+ }
16
+ if (!Array.isArray(columns) || columns.length === 0) {
17
+ throw new Error("'columns' must be a non-empty array");
18
+ }
19
+ const columnDefs = columns
20
+ .map((col) => buildCreateColumnDefinition(col.name, col))
21
+ .join(", ");
22
+ const query = `CREATE TABLE ${buildQualifiedName(tableName, schemaName)} (${columnDefs})`;
23
+ await request.query(query);
24
+ return {
25
+ success: true,
26
+ message: `Table '${tableName}' created successfully.`,
27
+ };
28
+ }
29
+ catch (error) {
30
+ console.error("Error creating table:", error);
31
+ return {
32
+ success: false,
33
+ message: `Failed to create table: ${error}`,
34
+ };
35
+ }
36
+ }
37
+ }
62
38
  //# sourceMappingURL=CreateTableTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CreateTableTool.js","sourceRoot":"","sources":["../../src/tools/CreateTableTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,eAAe;IAA5B;QAEE,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GACT,uEAAuE,CAAC;QAC1E,gBAAW,GAAG;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;gBACzE,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,WAAW,EACT,oFAAoF;oBACtF,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;4BACpD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,WAAW,EACT,8EAA8E;6BACjF;yBACF;wBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;qBAC3B;iBACF;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,sFAAsF;iBACzF;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC;SAC5B,CAAC;IA+BX,CAAC;IA7BC,KAAK,CAAC,GAAG,CAAC,MAAW;QACnB,IAAI;YACF,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YAEpD,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,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;aACxD;YACD,MAAM,UAAU,GAAG,OAAO;iBACvB,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;iBAC9C,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,iBAAiB,SAAS,MAAM,UAAU,GAAG,CAAC;YAC5D,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,2BAA2B,KAAK,EAAE;aAC5C,CAAC;SACH;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"CreateTableTool.js","sourceRoot":"","sources":["../../src/tools/CreateTableTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,2BAA2B,GAE5B,MAAM,mBAAmB,CAAC;AAS3B,MAAM,OAAO,eAAe;IAA5B;QACE,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GACT,uEAAuE,CAAC;IA+B5E,CAAC;IA7BC,KAAK,CAAC,GAAG,CAAC,MAAyB;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YAEhE,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,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YACD,MAAM,UAAU,GAAG,OAAO;iBACvB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBACxD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,gBAAgB,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,UAAU,GAAG,CAAC;YAC1F,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,2BAA2B,KAAK,EAAE;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { type SqlFilter } from "../writeSafety.js";
2
+ interface DeleteDataParams {
3
+ tableName: string;
4
+ schemaName?: string;
5
+ filters: SqlFilter[];
6
+ databaseName?: string;
7
+ }
8
+ export declare class DeleteDataTool {
9
+ name: string;
10
+ description: string;
11
+ run(params: DeleteDataParams): Promise<{
12
+ success: boolean;
13
+ message: string;
14
+ rowsAffected?: undefined;
15
+ } | {
16
+ success: boolean;
17
+ message: string;
18
+ rowsAffected: number;
19
+ }>;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=DeleteDataTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeleteDataTool.d.ts","sourceRoot":"","sources":["../../src/tools/DeleteDataTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAElF,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,IAAI,SAAiB;IACrB,WAAW,SAC6D;IAElE,GAAG,CAAC,MAAM,EAAE,gBAAgB;;;;;;;;;CAqCnC"}
@@ -0,0 +1,38 @@
1
+ import { getMaxWriteRows } from "../config.js";
2
+ import { getSqlRequest } from "../db.js";
3
+ import { buildQualifiedName } from "../sql.js";
4
+ import { buildParameterizedWhereClause } from "../writeSafety.js";
5
+ export class DeleteDataTool {
6
+ constructor() {
7
+ this.name = "delete_data";
8
+ this.description = "Deletes rows from an MSSQL table using required structured filters.";
9
+ }
10
+ async run(params) {
11
+ let query;
12
+ try {
13
+ const { tableName, schemaName, filters, databaseName } = params;
14
+ const { request, error } = await getSqlRequest(databaseName);
15
+ if (error) {
16
+ return { success: false, message: error };
17
+ }
18
+ const whereClause = buildParameterizedWhereClause(filters, (name, value) => request.input(name, value), "delete_filter");
19
+ query = `DELETE FROM ${buildQualifiedName(tableName, schemaName)} WHERE ${whereClause}`;
20
+ const maxRows = getMaxWriteRows();
21
+ request.input("mcp_rowcap", maxRows);
22
+ const result = await request.query(`SET ROWCOUNT @mcp_rowcap;\n${query}\nSET ROWCOUNT 0;`);
23
+ return {
24
+ success: true,
25
+ message: `Delete completed successfully. ${result.rowsAffected[0]} row(s) affected`,
26
+ rowsAffected: result.rowsAffected[0],
27
+ };
28
+ }
29
+ catch (error) {
30
+ console.error("Error deleting data:", error);
31
+ return {
32
+ success: false,
33
+ message: `Failed to delete data${query ? ` with '${query}'` : ""}: ${error}`,
34
+ };
35
+ }
36
+ }
37
+ }
38
+ //# sourceMappingURL=DeleteDataTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeleteDataTool.js","sourceRoot":"","sources":["../../src/tools/DeleteDataTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,6BAA6B,EAAkB,MAAM,mBAAmB,CAAC;AASlF,MAAM,OAAO,cAAc;IAA3B;QACE,SAAI,GAAG,aAAa,CAAC;QACrB,gBAAW,GACT,qEAAqE,CAAC;IAuC1E,CAAC;IArCC,KAAK,CAAC,GAAG,CAAC,MAAwB;QAChC,IAAI,KAAyB,CAAC;QAE9B,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YAEhE,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,WAAW,GAAG,6BAA6B,CAC/C,OAAO,EACP,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAC3C,eAAe,CAChB,CAAC;YAEF,KAAK,GAAG,eAAe,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,UAAU,WAAW,EAAE,CAAC;YACxF,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAChC,8BAA8B,KAAK,mBAAmB,CACvD,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,kCAAkC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB;gBACnF,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;aACrC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,wBAAwB,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,EAAE;aAC7E,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ interface DescribeObjectParams {
2
+ objectName: string;
3
+ objectTypes?: string[];
4
+ schemaName?: string;
5
+ databaseName?: string;
6
+ }
7
+ export declare class DescribeObjectTool {
8
+ name: string;
9
+ description: string;
10
+ run(params: DescribeObjectParams): Promise<{
11
+ success: boolean;
12
+ message: string;
13
+ object?: undefined;
14
+ } | {
15
+ success: boolean;
16
+ object: import("../schema.js").DatabaseObjectDescription;
17
+ message?: undefined;
18
+ }>;
19
+ }
20
+ export {};
21
+ //# sourceMappingURL=DescribeObjectTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DescribeObjectTool.d.ts","sourceRoot":"","sources":["../../src/tools/DescribeObjectTool.ts"],"names":[],"mappings":"AAEA,UAAU,oBAAoB;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,kBAAkB;IAC7B,IAAI,SAAqB;IACzB,WAAW,SACoG;IAEzG,GAAG,CAAC,MAAM,EAAE,oBAAoB;;;;;;;;;CA6BvC"}
@@ -0,0 +1,31 @@
1
+ import { describeDatabaseObject } from "../schema.js";
2
+ export class DescribeObjectTool {
3
+ constructor() {
4
+ this.name = "describe_object";
5
+ this.description = "Describes a table, view, procedure, function, or trigger, including columns and definition when available.";
6
+ }
7
+ async run(params) {
8
+ try {
9
+ const { objectName, objectTypes, schemaName, databaseName } = params;
10
+ const object = await describeDatabaseObject(objectName, databaseName, schemaName, objectTypes);
11
+ if (!object) {
12
+ return {
13
+ success: false,
14
+ message: `No object named '${objectName}' was found.`,
15
+ };
16
+ }
17
+ return {
18
+ success: true,
19
+ object,
20
+ };
21
+ }
22
+ catch (error) {
23
+ console.error("Error describing object:", error);
24
+ return {
25
+ success: false,
26
+ message: `Failed to describe object: ${error}`,
27
+ };
28
+ }
29
+ }
30
+ }
31
+ //# sourceMappingURL=DescribeObjectTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DescribeObjectTool.js","sourceRoot":"","sources":["../../src/tools/DescribeObjectTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAStD,MAAM,OAAO,kBAAkB;IAA/B;QACE,SAAI,GAAG,iBAAiB,CAAC;QACzB,gBAAW,GACT,4GAA4G,CAAC;IA+BjH,CAAC;IA7BC,KAAK,CAAC,GAAG,CAAC,MAA4B;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,UAAU,EACV,YAAY,EACZ,UAAU,EACV,WAAW,CACZ,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,oBAAoB,UAAU,cAAc;iBACtD,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,8BAA8B,KAAK,EAAE;aAC/C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ interface DescribeRelationshipsParams {
2
+ tableName: string;
3
+ schemaName?: string;
4
+ databaseName?: string;
5
+ }
6
+ export declare class DescribeRelationshipsTool {
7
+ name: string;
8
+ description: string;
9
+ run(params: DescribeRelationshipsParams): Promise<{
10
+ success: boolean;
11
+ message: string;
12
+ data: any[];
13
+ } | {
14
+ success: boolean;
15
+ message: string;
16
+ data?: undefined;
17
+ }>;
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=DescribeRelationshipsTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DescribeRelationshipsTool.d.ts","sourceRoot":"","sources":["../../src/tools/DescribeRelationshipsTool.ts"],"names":[],"mappings":"AAEA,UAAU,2BAA2B;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,yBAAyB;IACpC,IAAI,SAA4B;IAChC,WAAW,SACgE;IAErE,GAAG,CAAC,MAAM,EAAE,2BAA2B;;;;;;;;;CAmB9C"}
@@ -0,0 +1,24 @@
1
+ import { describeRelationships } from "../schema.js";
2
+ export class DescribeRelationshipsTool {
3
+ constructor() {
4
+ this.name = "describe_relationships";
5
+ this.description = "Describes incoming and outgoing foreign key relationships for a table.";
6
+ }
7
+ async run(params) {
8
+ try {
9
+ const data = await describeRelationships(params.tableName, params.databaseName, params.schemaName);
10
+ return {
11
+ success: true,
12
+ message: `Found ${data.length} relationship row(s) for ${params.tableName}.`,
13
+ data,
14
+ };
15
+ }
16
+ catch (error) {
17
+ return {
18
+ success: false,
19
+ message: `Failed to describe relationships: ${error}`,
20
+ };
21
+ }
22
+ }
23
+ }
24
+ //# sourceMappingURL=DescribeRelationshipsTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DescribeRelationshipsTool.js","sourceRoot":"","sources":["../../src/tools/DescribeRelationshipsTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAQrD,MAAM,OAAO,yBAAyB;IAAtC;QACE,SAAI,GAAG,wBAAwB,CAAC;QAChC,gBAAW,GACT,wEAAwE,CAAC;IAqB7E,CAAC;IAnBC,KAAK,CAAC,GAAG,CAAC,MAAmC;QAC3C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,qBAAqB,CACtC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,UAAU,CAClB,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,SAAS,IAAI,CAAC,MAAM,4BAA4B,MAAM,CAAC,SAAS,GAAG;gBAC5E,IAAI;aACL,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,qCAAqC,KAAK,EAAE;aACtD,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}