@eamonboyle/mssql-mcp 1.1.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.
- package/README.md +134 -22
- package/dist/__tests__/ExplainQueryTool.test.d.ts +2 -0
- package/dist/__tests__/ExplainQueryTool.test.d.ts.map +1 -0
- package/dist/__tests__/ExplainQueryTool.test.js +96 -0
- package/dist/__tests__/ExplainQueryTool.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +29 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/db.test.d.ts +1 -1
- package/dist/__tests__/db.test.js +203 -203
- package/dist/__tests__/promptRegistry.test.d.ts +2 -0
- package/dist/__tests__/promptRegistry.test.d.ts.map +1 -0
- package/dist/__tests__/promptRegistry.test.js +40 -0
- package/dist/__tests__/promptRegistry.test.js.map +1 -0
- package/dist/__tests__/resourceRegistry.test.d.ts +2 -0
- package/dist/__tests__/resourceRegistry.test.d.ts.map +1 -0
- package/dist/__tests__/resourceRegistry.test.js +40 -0
- package/dist/__tests__/resourceRegistry.test.js.map +1 -0
- package/dist/__tests__/schema.test.d.ts +2 -0
- package/dist/__tests__/schema.test.d.ts.map +1 -0
- package/dist/__tests__/schema.test.js +130 -0
- package/dist/__tests__/schema.test.js.map +1 -0
- package/dist/__tests__/sql.test.d.ts +2 -0
- package/dist/__tests__/sql.test.d.ts.map +1 -0
- package/dist/__tests__/sql.test.js +35 -0
- package/dist/__tests__/sql.test.js.map +1 -0
- package/dist/__tests__/toolRegistry.test.d.ts +2 -0
- package/dist/__tests__/toolRegistry.test.d.ts.map +1 -0
- package/dist/__tests__/toolRegistry.test.js +47 -0
- package/dist/__tests__/toolRegistry.test.js.map +1 -0
- package/dist/__tests__/validation.test.d.ts +1 -1
- package/dist/__tests__/validation.test.js +110 -110
- package/dist/__tests__/validation.test.js.map +1 -1
- package/dist/__tests__/writeTools.test.d.ts +2 -0
- package/dist/__tests__/writeTools.test.d.ts.map +1 -0
- package/dist/__tests__/writeTools.test.js +115 -0
- package/dist/__tests__/writeTools.test.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +34 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +28 -24
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +144 -112
- package/dist/db.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +70 -122
- package/dist/index.js.map +1 -1
- package/dist/promptRegistry.d.ts +16 -0
- package/dist/promptRegistry.d.ts.map +1 -0
- package/dist/promptRegistry.js +107 -0
- package/dist/promptRegistry.js.map +1 -0
- package/dist/resourceRegistry.d.ts +12 -0
- package/dist/resourceRegistry.d.ts.map +1 -0
- package/dist/resourceRegistry.js +172 -0
- package/dist/resourceRegistry.js.map +1 -0
- package/dist/schema.d.ts +41 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +211 -0
- package/dist/schema.js.map +1 -0
- package/dist/sql.d.ts +7 -0
- package/dist/sql.d.ts.map +1 -0
- package/dist/sql.js +73 -0
- package/dist/sql.js.map +1 -0
- package/dist/toolRegistry.d.ts +16 -0
- package/dist/toolRegistry.d.ts.map +1 -0
- package/dist/toolRegistry.js +401 -0
- package/dist/toolRegistry.js.map +1 -0
- package/dist/tools/CreateIndexTool.d.ts +30 -23
- package/dist/tools/CreateIndexTool.d.ts.map +1 -1
- package/dist/tools/CreateIndexTool.js +47 -77
- package/dist/tools/CreateIndexTool.js.map +1 -1
- package/dist/tools/CreateTableTool.d.ts +18 -11
- package/dist/tools/CreateTableTool.d.ts.map +1 -1
- package/dist/tools/CreateTableTool.js +37 -61
- package/dist/tools/CreateTableTool.js.map +1 -1
- package/dist/tools/DeleteDataTool.d.ts +22 -0
- package/dist/tools/DeleteDataTool.d.ts.map +1 -0
- package/dist/tools/DeleteDataTool.js +35 -0
- package/dist/tools/DeleteDataTool.js.map +1 -0
- package/dist/tools/DescribeObjectTool.d.ts +21 -0
- package/dist/tools/DescribeObjectTool.d.ts.map +1 -0
- package/dist/tools/DescribeObjectTool.js +31 -0
- package/dist/tools/DescribeObjectTool.js.map +1 -0
- package/dist/tools/DescribeTableTool.d.ts +19 -20
- package/dist/tools/DescribeTableTool.d.ts.map +1 -1
- package/dist/tools/DescribeTableTool.js +23 -44
- package/dist/tools/DescribeTableTool.js.map +1 -1
- package/dist/tools/DropTableTool.d.ts +13 -11
- package/dist/tools/DropTableTool.d.ts.map +1 -1
- package/dist/tools/DropTableTool.js +30 -44
- package/dist/tools/DropTableTool.js.map +1 -1
- package/dist/tools/ExplainQueryTool.d.ts +32 -0
- package/dist/tools/ExplainQueryTool.d.ts.map +1 -0
- package/dist/tools/ExplainQueryTool.js +102 -0
- package/dist/tools/ExplainQueryTool.js.map +1 -0
- package/dist/tools/InsertDataTool.d.ts +20 -16
- package/dist/tools/InsertDataTool.d.ts.map +1 -1
- package/dist/tools/InsertDataTool.js +91 -108
- package/dist/tools/InsertDataTool.js.map +1 -1
- package/dist/tools/ListObjectsTool.d.ts +20 -0
- package/dist/tools/ListObjectsTool.d.ts.map +1 -0
- package/dist/tools/ListObjectsTool.js +26 -0
- package/dist/tools/ListObjectsTool.js.map +1 -0
- package/dist/tools/ListTableTool.d.ts +20 -16
- package/dist/tools/ListTableTool.d.ts.map +1 -1
- package/dist/tools/ListTableTool.js +32 -51
- package/dist/tools/ListTableTool.js.map +1 -1
- package/dist/tools/ReadDataTool.d.ts +35 -33
- package/dist/tools/ReadDataTool.d.ts.map +1 -1
- package/dist/tools/ReadDataTool.js +92 -105
- package/dist/tools/ReadDataTool.js.map +1 -1
- package/dist/tools/SearchDataTool.d.ts +27 -0
- package/dist/tools/SearchDataTool.d.ts.map +1 -0
- package/dist/tools/SearchDataTool.js +61 -0
- package/dist/tools/SearchDataTool.js.map +1 -0
- package/dist/tools/UpdateDataTool.d.ts +21 -16
- package/dist/tools/UpdateDataTool.d.ts.map +1 -1
- package/dist/tools/UpdateDataTool.js +45 -65
- package/dist/tools/UpdateDataTool.js.map +1 -1
- package/dist/validation.d.ts +13 -13
- package/dist/validation.js +133 -133
- package/dist/validation.js.map +1 -1
- package/dist/writeSafety.d.ts +21 -0
- package/dist/writeSafety.d.ts.map +1 -0
- package/dist/writeSafety.js +169 -0
- package/dist/writeSafety.js.map +1 -0
- package/package.json +5 -4
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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":"
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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":"
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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":"
|
|
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"}
|
|
@@ -1,52 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export class ListTableTool {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.name = "list_table";
|
|
5
|
-
this.description = "Lists tables in an MSSQL Database, or list tables in specific schemas";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
? `AND TABLE_SCHEMA IN (${parameters.map((p) => `'${p}'`).join(", ")})`
|
|
34
|
-
: "";
|
|
35
|
-
const query = `SELECT TABLE_SCHEMA + '.' + TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ${schemaFilter} ORDER BY TABLE_SCHEMA, TABLE_NAME`;
|
|
36
|
-
const result = await request.query(query);
|
|
37
|
-
return {
|
|
38
|
-
success: true,
|
|
39
|
-
message: `List tables executed successfully`,
|
|
40
|
-
items: result.recordset,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
console.error("Error listing tables:", error);
|
|
45
|
-
return {
|
|
46
|
-
success: false,
|
|
47
|
-
message: `Failed to list tables: ${error}`,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
1
|
+
import { listDatabaseTables } from "../schema.js";
|
|
2
|
+
export class ListTableTool {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.name = "list_table";
|
|
5
|
+
this.description = "Lists tables in an MSSQL Database, or list tables in specific schemas";
|
|
6
|
+
}
|
|
7
|
+
async run(params = {}) {
|
|
8
|
+
try {
|
|
9
|
+
const { parameters, databaseName } = params;
|
|
10
|
+
const schemaNames = Array.isArray(parameters)
|
|
11
|
+
? parameters.filter((value) => typeof value === "string")
|
|
12
|
+
: [];
|
|
13
|
+
const tables = schemaNames.length > 0
|
|
14
|
+
? (await Promise.all(schemaNames.map((schemaName) => listDatabaseTables(databaseName, schemaName)))).flat()
|
|
15
|
+
: await listDatabaseTables(databaseName);
|
|
16
|
+
return {
|
|
17
|
+
success: true,
|
|
18
|
+
message: `List tables executed successfully`,
|
|
19
|
+
items: tables.map((table) => ({
|
|
20
|
+
name: `${table.schemaName}.${table.tableName}`,
|
|
21
|
+
})),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error("Error listing tables:", error);
|
|
26
|
+
return {
|
|
27
|
+
success: false,
|
|
28
|
+
message: `Failed to list tables: ${error}`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
52
33
|
//# sourceMappingURL=ListTableTool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListTableTool.js","sourceRoot":"","sources":["../../src/tools/ListTableTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ListTableTool.js","sourceRoot":"","sources":["../../src/tools/ListTableTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOlD,MAAM,OAAO,aAAa;IAA1B;QACE,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GACT,uEAAuE,CAAC;IAmC5E,CAAC;IAjCC,KAAK,CAAC,GAAG,CAAC,SAA0B,EAAE;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;YAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC3C,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;gBAClE,CAAC,CAAC,EAAE,CAAC;YAEP,MAAM,MAAM,GACV,WAAW,CAAC,MAAM,GAAG,CAAC;gBACpB,CAAC,CAAC,CACE,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC7B,kBAAkB,CAAC,YAAY,EAAE,UAAU,CAAC,CAC7C,CACF,CACF,CAAC,IAAI,EAAE;gBACV,CAAC,CAAC,MAAM,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAE7C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,mCAAmC;gBAC5C,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC5B,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,SAAS,EAAE;iBAC/C,CAAC,CAAC;aACJ,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,0BAA0B,KAAK,EAAE;aAC3C,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
* @
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
1
|
+
interface ReadDataParams {
|
|
2
|
+
query: string;
|
|
3
|
+
databaseName?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class ReadDataTool {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
/**
|
|
9
|
+
* Sanitizes the query result to prevent any potential security issues
|
|
10
|
+
* @param data The query result data
|
|
11
|
+
* @returns Sanitized data
|
|
12
|
+
*/
|
|
13
|
+
private sanitizeResult;
|
|
14
|
+
/**
|
|
15
|
+
* Executes the validated SQL query
|
|
16
|
+
* @param params Query parameters
|
|
17
|
+
* @returns Query execution result
|
|
18
|
+
*/
|
|
19
|
+
run(params: ReadDataParams): Promise<{
|
|
20
|
+
success: boolean;
|
|
21
|
+
message: string;
|
|
22
|
+
error: string;
|
|
23
|
+
data?: undefined;
|
|
24
|
+
recordCount?: undefined;
|
|
25
|
+
totalRecords?: undefined;
|
|
26
|
+
} | {
|
|
27
|
+
success: boolean;
|
|
28
|
+
message: string;
|
|
29
|
+
data: unknown[];
|
|
30
|
+
recordCount: number;
|
|
31
|
+
totalRecords: number;
|
|
32
|
+
error?: undefined;
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
34
36
|
//# sourceMappingURL=ReadDataTool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReadDataTool.d.ts","sourceRoot":"","sources":["../../src/tools/ReadDataTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReadDataTool.d.ts","sourceRoot":"","sources":["../../src/tools/ReadDataTool.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IACvB,IAAI,SAAe;IACnB,WAAW,SACsJ;IAEjK;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA+BtB;;;;OAIG;IACG,GAAG,CAAC,MAAM,EAAE,cAAc;;;;;;;;;;;;;;;CA6DjC"}
|