@connorbritain/mssql-mcp-server 0.3.6 → 0.4.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.
- package/dist/index.js +6 -751
- package/dist/index.js.map +1 -1
- package/package.json +2 -5
- package/dist/audit/AuditLogger.d.ts +0 -37
- package/dist/audit/AuditLogger.d.ts.map +0 -1
- package/dist/audit/AuditLogger.js +0 -145
- package/dist/audit/AuditLogger.js.map +0 -1
- package/dist/config/EnvironmentManager.d.ts +0 -75
- package/dist/config/EnvironmentManager.d.ts.map +0 -1
- package/dist/config/EnvironmentManager.js +0 -305
- package/dist/config/EnvironmentManager.js.map +0 -1
- package/dist/config/ScriptManager.d.ts +0 -69
- package/dist/config/ScriptManager.d.ts.map +0 -1
- package/dist/config/ScriptManager.js +0 -166
- package/dist/config/ScriptManager.js.map +0 -1
- package/dist/config/SecretResolver.d.ts +0 -66
- package/dist/config/SecretResolver.d.ts.map +0 -1
- package/dist/config/SecretResolver.js +0 -230
- package/dist/config/SecretResolver.js.map +0 -1
- package/dist/tools/CreateIndexTool.d.ts +0 -24
- package/dist/tools/CreateIndexTool.d.ts.map +0 -1
- package/dist/tools/CreateIndexTool.js +0 -64
- package/dist/tools/CreateIndexTool.js.map +0 -1
- package/dist/tools/CreateTableTool.d.ts +0 -12
- package/dist/tools/CreateTableTool.d.ts.map +0 -1
- package/dist/tools/CreateTableTool.js +0 -49
- package/dist/tools/CreateTableTool.js.map +0 -1
- package/dist/tools/DeleteDataTool.d.ts +0 -56
- package/dist/tools/DeleteDataTool.d.ts.map +0 -1
- package/dist/tools/DeleteDataTool.js +0 -103
- package/dist/tools/DeleteDataTool.js.map +0 -1
- package/dist/tools/DescribeTableTool.d.ts +0 -32
- package/dist/tools/DescribeTableTool.d.ts.map +0 -1
- package/dist/tools/DescribeTableTool.js +0 -108
- package/dist/tools/DescribeTableTool.js.map +0 -1
- package/dist/tools/DropTableTool.d.ts +0 -12
- package/dist/tools/DropTableTool.d.ts.map +0 -1
- package/dist/tools/DropTableTool.js +0 -37
- package/dist/tools/DropTableTool.js.map +0 -1
- package/dist/tools/ExplainQueryTool.d.ts +0 -24
- package/dist/tools/ExplainQueryTool.d.ts.map +0 -1
- package/dist/tools/ExplainQueryTool.js +0 -98
- package/dist/tools/ExplainQueryTool.js.map +0 -1
- package/dist/tools/InsertDataTool.d.ts +0 -17
- package/dist/tools/InsertDataTool.d.ts.map +0 -1
- package/dist/tools/InsertDataTool.js +0 -102
- package/dist/tools/InsertDataTool.js.map +0 -1
- package/dist/tools/InspectDependenciesTool.d.ts +0 -45
- package/dist/tools/InspectDependenciesTool.d.ts.map +0 -1
- package/dist/tools/InspectDependenciesTool.js +0 -215
- package/dist/tools/InspectDependenciesTool.js.map +0 -1
- package/dist/tools/ListDatabasesTool.d.ts +0 -27
- package/dist/tools/ListDatabasesTool.d.ts.map +0 -1
- package/dist/tools/ListDatabasesTool.js +0 -107
- package/dist/tools/ListDatabasesTool.js.map +0 -1
- package/dist/tools/ListEnvironmentsTool.d.ts +0 -49
- package/dist/tools/ListEnvironmentsTool.d.ts.map +0 -1
- package/dist/tools/ListEnvironmentsTool.js +0 -73
- package/dist/tools/ListEnvironmentsTool.js.map +0 -1
- package/dist/tools/ListScriptsTool.d.ts +0 -41
- package/dist/tools/ListScriptsTool.d.ts.map +0 -1
- package/dist/tools/ListScriptsTool.js +0 -86
- package/dist/tools/ListScriptsTool.js.map +0 -1
- package/dist/tools/ListTableTool.d.ts +0 -24
- package/dist/tools/ListTableTool.d.ts.map +0 -1
- package/dist/tools/ListTableTool.js +0 -85
- package/dist/tools/ListTableTool.js.map +0 -1
- package/dist/tools/ProfileTableTool.d.ts +0 -78
- package/dist/tools/ProfileTableTool.d.ts.map +0 -1
- package/dist/tools/ProfileTableTool.js +0 -373
- package/dist/tools/ProfileTableTool.js.map +0 -1
- package/dist/tools/ReadDataTool.d.ts +0 -61
- package/dist/tools/ReadDataTool.d.ts.map +0 -1
- package/dist/tools/ReadDataTool.js +0 -299
- package/dist/tools/ReadDataTool.js.map +0 -1
- package/dist/tools/RelationshipInspectorTool.d.ts +0 -46
- package/dist/tools/RelationshipInspectorTool.d.ts.map +0 -1
- package/dist/tools/RelationshipInspectorTool.js +0 -156
- package/dist/tools/RelationshipInspectorTool.js.map +0 -1
- package/dist/tools/RunScriptTool.d.ts +0 -215
- package/dist/tools/RunScriptTool.d.ts.map +0 -1
- package/dist/tools/RunScriptTool.js +0 -177
- package/dist/tools/RunScriptTool.js.map +0 -1
- package/dist/tools/SearchSchemaTool.d.ts +0 -88
- package/dist/tools/SearchSchemaTool.d.ts.map +0 -1
- package/dist/tools/SearchSchemaTool.js +0 -237
- package/dist/tools/SearchSchemaTool.js.map +0 -1
- package/dist/tools/TestConnectionTool.d.ts +0 -38
- package/dist/tools/TestConnectionTool.d.ts.map +0 -1
- package/dist/tools/TestConnectionTool.js +0 -156
- package/dist/tools/TestConnectionTool.js.map +0 -1
- package/dist/tools/UpdateDataTool.d.ts +0 -61
- package/dist/tools/UpdateDataTool.d.ts.map +0 -1
- package/dist/tools/UpdateDataTool.js +0 -117
- package/dist/tools/UpdateDataTool.js.map +0 -1
- package/dist/tools/ValidateEnvironmentConfigTool.d.ts +0 -51
- package/dist/tools/ValidateEnvironmentConfigTool.d.ts.map +0 -1
- package/dist/tools/ValidateEnvironmentConfigTool.js +0 -320
- package/dist/tools/ValidateEnvironmentConfigTool.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ExplainQueryTool.js","sourceRoot":"","sources":["../../src/tools/ExplainQueryTool.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,MAAM,OAAO,gBAAgB;IAA7B;QAEE,SAAI,GAAG,eAAe,CAAC;QACvB,gBAAW,GAAG,4FAA4F,CAAC;QAE3G,gBAAW,GAAG;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,mEAAmE;iBACjF;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2DAA2D;iBACzE;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,8EAA8E;iBAC5F;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACb,CAAC;IAqFX,CAAC;IAnFC,KAAK,CAAC,GAAG,CAAC,MAAW;QACnB,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QAEnE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,gDAAgD;gBACzD,KAAK,EAAE,eAAe;aACvB,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAEzD,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,WAAW,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAChD,eAAe,GAAG,IAAI,CAAC;YAEvB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAE1D,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAEhD,MAAM,OAAO,GAAG;gBACd,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,qCAAqC;gBAC9C,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC;aAC7B,CAAC;YAEF,IAAI,cAAc,IAAI,OAAO,EAAE,CAAC;gBAC9B,OAAO;oBACL,GAAG,OAAO;oBACV,OAAO;iBACR,CAAC;YACJ,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,4BAA4B,YAAY,EAAE;gBACnD,KAAK,EAAE,iBAAiB;aACzB,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC3C,MAAM,YAAY,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBACpD,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,GAAQ;QAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG;YACnB,aAAa;YACb,wCAAwC;YACxC,MAAM;SACP,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACjD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAC9D,CAAC;QAEF,OAAQ,QAA+B,IAAI,IAAI,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -1,17 +0,0 @@
|
|
|
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
|
-
}
|
|
17
|
-
//# sourceMappingURL=InsertDataTool.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InsertDataTool.d.ts","sourceRoot":"","sources":["../../src/tools/InsertDataTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,qBAAa,cAAe,YAAW,IAAI;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAiB;IACrB,WAAW,SAA0J;IACrK,WAAW,EAsBN,GAAG,CAAC;IACH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;CAqEtB"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import sql from "mssql";
|
|
2
|
-
export class InsertDataTool {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.name = "insert_data";
|
|
5
|
-
this.description = "Inserts one or more records into an MSSQL table. Pass data as an object (single) or array of objects (batch). Uses parameterized queries for safety.";
|
|
6
|
-
this.inputSchema = {
|
|
7
|
-
type: "object",
|
|
8
|
-
properties: {
|
|
9
|
-
tableName: {
|
|
10
|
-
type: "string",
|
|
11
|
-
description: "Name of the table to insert data into"
|
|
12
|
-
},
|
|
13
|
-
data: {
|
|
14
|
-
oneOf: [
|
|
15
|
-
{
|
|
16
|
-
type: "object",
|
|
17
|
-
description: "Single record data object with column names as keys and values as the data to insert. Example: {\"name\": \"John\", \"age\": 30}"
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
type: "array",
|
|
21
|
-
items: { type: "object" },
|
|
22
|
-
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}]"
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
required: ["tableName", "data"],
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
async run(params) {
|
|
31
|
-
try {
|
|
32
|
-
const { tableName, data } = params;
|
|
33
|
-
// Check if data is an array (multiple records) or single object
|
|
34
|
-
const isMultipleRecords = Array.isArray(data);
|
|
35
|
-
const records = isMultipleRecords ? data : [data];
|
|
36
|
-
if (records.length === 0) {
|
|
37
|
-
return {
|
|
38
|
-
success: false,
|
|
39
|
-
message: "No data provided for insertion",
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
// Validate that all records have the same columns
|
|
43
|
-
const firstRecordColumns = Object.keys(records[0]).sort();
|
|
44
|
-
for (let i = 1; i < records.length; i++) {
|
|
45
|
-
const currentColumns = Object.keys(records[i]).sort();
|
|
46
|
-
if (JSON.stringify(firstRecordColumns) !== JSON.stringify(currentColumns)) {
|
|
47
|
-
return {
|
|
48
|
-
success: false,
|
|
49
|
-
message: `Column mismatch: Record ${i + 1} has different columns than the first record. Expected columns: [${firstRecordColumns.join(', ')}], but got: [${currentColumns.join(', ')}]`,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
const columns = firstRecordColumns.join(", ");
|
|
54
|
-
const request = new sql.Request(params.pool);
|
|
55
|
-
if (isMultipleRecords) {
|
|
56
|
-
// Multiple records insert using VALUES clause - works for 1 or more records
|
|
57
|
-
const valueClauses = [];
|
|
58
|
-
records.forEach((record, recordIndex) => {
|
|
59
|
-
const valueParams = firstRecordColumns
|
|
60
|
-
.map((column, columnIndex) => `@value${recordIndex}_${columnIndex}`)
|
|
61
|
-
.join(", ");
|
|
62
|
-
valueClauses.push(`(${valueParams})`);
|
|
63
|
-
// Add parameters for this record
|
|
64
|
-
firstRecordColumns.forEach((column, columnIndex) => {
|
|
65
|
-
request.input(`value${recordIndex}_${columnIndex}`, record[column]);
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
const query = `INSERT INTO ${tableName} (${columns}) VALUES ${valueClauses.join(", ")}`;
|
|
69
|
-
await request.query(query);
|
|
70
|
-
return {
|
|
71
|
-
success: true,
|
|
72
|
-
message: `Successfully inserted ${records.length} record${records.length > 1 ? 's' : ''} into ${tableName}`,
|
|
73
|
-
recordsInserted: records.length,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
// Single record insert (when data is passed as single object)
|
|
78
|
-
const values = firstRecordColumns
|
|
79
|
-
.map((column, index) => `@value${index}`)
|
|
80
|
-
.join(", ");
|
|
81
|
-
firstRecordColumns.forEach((column, index) => {
|
|
82
|
-
request.input(`value${index}`, records[0][column]);
|
|
83
|
-
});
|
|
84
|
-
const query = `INSERT INTO ${tableName} (${columns}) VALUES (${values})`;
|
|
85
|
-
await request.query(query);
|
|
86
|
-
return {
|
|
87
|
-
success: true,
|
|
88
|
-
message: `Successfully inserted 1 record into ${tableName}`,
|
|
89
|
-
recordsInserted: 1,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
console.error("Error inserting data:", error);
|
|
95
|
-
return {
|
|
96
|
-
success: false,
|
|
97
|
-
message: `Failed to insert data: ${error}`,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=InsertDataTool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InsertDataTool.js","sourceRoot":"","sources":["../../src/tools/InsertDataTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
-
interface DependencyReference {
|
|
3
|
-
name: string;
|
|
4
|
-
schema: string;
|
|
5
|
-
type: string;
|
|
6
|
-
columns?: string[];
|
|
7
|
-
}
|
|
8
|
-
interface DependencyResult {
|
|
9
|
-
success: boolean;
|
|
10
|
-
object: string;
|
|
11
|
-
objectType?: string;
|
|
12
|
-
referencedBy?: {
|
|
13
|
-
views: DependencyReference[];
|
|
14
|
-
storedProcedures: DependencyReference[];
|
|
15
|
-
functions: DependencyReference[];
|
|
16
|
-
triggers: DependencyReference[];
|
|
17
|
-
foreignKeys: {
|
|
18
|
-
table: string;
|
|
19
|
-
schema: string;
|
|
20
|
-
column: string;
|
|
21
|
-
constraint: string;
|
|
22
|
-
}[];
|
|
23
|
-
};
|
|
24
|
-
references?: {
|
|
25
|
-
tables: DependencyReference[];
|
|
26
|
-
views: DependencyReference[];
|
|
27
|
-
functions: DependencyReference[];
|
|
28
|
-
};
|
|
29
|
-
message?: string;
|
|
30
|
-
error?: string;
|
|
31
|
-
hint?: string;
|
|
32
|
-
}
|
|
33
|
-
export declare class InspectDependenciesTool implements Tool {
|
|
34
|
-
[key: string]: any;
|
|
35
|
-
name: string;
|
|
36
|
-
description: string;
|
|
37
|
-
inputSchema: any;
|
|
38
|
-
run(params: {
|
|
39
|
-
objectName: string;
|
|
40
|
-
includeColumns?: boolean;
|
|
41
|
-
environment?: string;
|
|
42
|
-
}): Promise<DependencyResult>;
|
|
43
|
-
}
|
|
44
|
-
export {};
|
|
45
|
-
//# sourceMappingURL=InspectDependenciesTool.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InspectDependenciesTool.d.ts","sourceRoot":"","sources":["../../src/tools/InspectDependenciesTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAC7B,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;QACxC,SAAS,EAAE,mBAAmB,EAAE,CAAC;QACjC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;QAChC,WAAW,EAAE;YACX,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,MAAM,EAAE,MAAM,CAAC;YACf,UAAU,EAAE,MAAM,CAAC;SACpB,EAAE,CAAC;KACL,CAAC;IACF,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,mBAAmB,EAAE,CAAC;QAC9B,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAC7B,SAAS,EAAE,mBAAmB,EAAE,CAAC;KAClC,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,uBAAwB,YAAW,IAAI;IAClD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAA0B;IAC9B,WAAW,SAA0H;IAErI,WAAW,EAaN,GAAG,CAAC;IAEH,GAAG,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;CAsNzF"}
|
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import sql from "mssql";
|
|
2
|
-
export class InspectDependenciesTool {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.name = "inspect_dependencies";
|
|
5
|
-
this.description = "Shows what database objects depend on a table, view, or other object. Use for impact analysis before schema changes.";
|
|
6
|
-
this.inputSchema = {
|
|
7
|
-
type: "object",
|
|
8
|
-
properties: {
|
|
9
|
-
objectName: {
|
|
10
|
-
type: "string",
|
|
11
|
-
description: "Name of the object to inspect (e.g., 'dbo.Customers' or 'Customers')",
|
|
12
|
-
},
|
|
13
|
-
includeColumns: {
|
|
14
|
-
type: "boolean",
|
|
15
|
-
description: "Include column-level dependency details. Default: false",
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
required: ["objectName"],
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
async run(params) {
|
|
22
|
-
const { objectName, includeColumns = false } = params;
|
|
23
|
-
try {
|
|
24
|
-
// Parse schema and object name
|
|
25
|
-
const parts = objectName.split(".");
|
|
26
|
-
let schemaName = "dbo";
|
|
27
|
-
let objName = objectName;
|
|
28
|
-
if (parts.length === 2) {
|
|
29
|
-
schemaName = parts[0];
|
|
30
|
-
objName = parts[1];
|
|
31
|
-
}
|
|
32
|
-
const pool = sql.globalPool;
|
|
33
|
-
if (!pool) {
|
|
34
|
-
return {
|
|
35
|
-
success: false,
|
|
36
|
-
object: objectName,
|
|
37
|
-
error: "NO_CONNECTION",
|
|
38
|
-
message: "No database connection available.",
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
// First, get the object type
|
|
42
|
-
const objectTypeResult = await pool.request()
|
|
43
|
-
.input("schema", sql.NVarChar, schemaName)
|
|
44
|
-
.input("name", sql.NVarChar, objName)
|
|
45
|
-
.query(`
|
|
46
|
-
SELECT
|
|
47
|
-
o.type_desc AS objectType,
|
|
48
|
-
o.object_id AS objectId
|
|
49
|
-
FROM sys.objects o
|
|
50
|
-
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
|
|
51
|
-
WHERE s.name = @schema AND o.name = @name
|
|
52
|
-
`);
|
|
53
|
-
if (objectTypeResult.recordset.length === 0) {
|
|
54
|
-
return {
|
|
55
|
-
success: false,
|
|
56
|
-
object: objectName,
|
|
57
|
-
error: "OBJECT_NOT_FOUND",
|
|
58
|
-
message: `Object '${schemaName}.${objName}' not found.`,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
const objectType = objectTypeResult.recordset[0].objectType;
|
|
62
|
-
const objectId = objectTypeResult.recordset[0].objectId;
|
|
63
|
-
// Get objects that reference this object (what depends on this)
|
|
64
|
-
const referencedByResult = await pool.request()
|
|
65
|
-
.input("schema", sql.NVarChar, schemaName)
|
|
66
|
-
.input("name", sql.NVarChar, objName)
|
|
67
|
-
.query(`
|
|
68
|
-
SELECT DISTINCT
|
|
69
|
-
OBJECT_SCHEMA_NAME(d.referencing_id) AS referencingSchema,
|
|
70
|
-
OBJECT_NAME(d.referencing_id) AS referencingName,
|
|
71
|
-
o.type_desc AS referencingType
|
|
72
|
-
FROM sys.sql_expression_dependencies d
|
|
73
|
-
INNER JOIN sys.objects o ON d.referencing_id = o.object_id
|
|
74
|
-
WHERE d.referenced_schema_name = @schema
|
|
75
|
-
AND d.referenced_entity_name = @name
|
|
76
|
-
AND d.referencing_id != d.referenced_id
|
|
77
|
-
ORDER BY o.type_desc, referencingName
|
|
78
|
-
`);
|
|
79
|
-
// Get foreign keys pointing to this table (if it's a table)
|
|
80
|
-
let foreignKeys = [];
|
|
81
|
-
if (objectType === "USER_TABLE") {
|
|
82
|
-
const fkResult = await pool.request()
|
|
83
|
-
.input("objectId", sql.Int, objectId)
|
|
84
|
-
.query(`
|
|
85
|
-
SELECT
|
|
86
|
-
OBJECT_SCHEMA_NAME(fk.parent_object_id) AS referencingSchema,
|
|
87
|
-
OBJECT_NAME(fk.parent_object_id) AS referencingTable,
|
|
88
|
-
COL_NAME(fkc.parent_object_id, fkc.parent_column_id) AS referencingColumn,
|
|
89
|
-
fk.name AS constraintName
|
|
90
|
-
FROM sys.foreign_keys fk
|
|
91
|
-
INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
|
|
92
|
-
WHERE fk.referenced_object_id = @objectId
|
|
93
|
-
ORDER BY referencingTable, referencingColumn
|
|
94
|
-
`);
|
|
95
|
-
foreignKeys = fkResult.recordset;
|
|
96
|
-
}
|
|
97
|
-
// Get objects that this object references (what this depends on)
|
|
98
|
-
const referencesResult = await pool.request()
|
|
99
|
-
.input("schema", sql.NVarChar, schemaName)
|
|
100
|
-
.input("name", sql.NVarChar, objName)
|
|
101
|
-
.query(`
|
|
102
|
-
SELECT DISTINCT
|
|
103
|
-
d.referenced_schema_name AS referencedSchema,
|
|
104
|
-
d.referenced_entity_name AS referencedName,
|
|
105
|
-
COALESCE(o.type_desc, 'UNKNOWN') AS referencedType
|
|
106
|
-
FROM sys.sql_expression_dependencies d
|
|
107
|
-
LEFT JOIN sys.objects o ON d.referenced_id = o.object_id
|
|
108
|
-
WHERE OBJECT_SCHEMA_NAME(d.referencing_id) = @schema
|
|
109
|
-
AND OBJECT_NAME(d.referencing_id) = @name
|
|
110
|
-
AND d.referenced_entity_name IS NOT NULL
|
|
111
|
-
ORDER BY referencedType, referencedName
|
|
112
|
-
`);
|
|
113
|
-
// Categorize referencing objects
|
|
114
|
-
const views = [];
|
|
115
|
-
const storedProcedures = [];
|
|
116
|
-
const functions = [];
|
|
117
|
-
const triggers = [];
|
|
118
|
-
for (const row of referencedByResult.recordset) {
|
|
119
|
-
const ref = {
|
|
120
|
-
name: row.referencingName,
|
|
121
|
-
schema: row.referencingSchema,
|
|
122
|
-
type: row.referencingType,
|
|
123
|
-
};
|
|
124
|
-
switch (row.referencingType) {
|
|
125
|
-
case "VIEW":
|
|
126
|
-
views.push(ref);
|
|
127
|
-
break;
|
|
128
|
-
case "SQL_STORED_PROCEDURE":
|
|
129
|
-
storedProcedures.push(ref);
|
|
130
|
-
break;
|
|
131
|
-
case "SQL_SCALAR_FUNCTION":
|
|
132
|
-
case "SQL_TABLE_VALUED_FUNCTION":
|
|
133
|
-
case "SQL_INLINE_TABLE_VALUED_FUNCTION":
|
|
134
|
-
functions.push(ref);
|
|
135
|
-
break;
|
|
136
|
-
case "SQL_TRIGGER":
|
|
137
|
-
triggers.push(ref);
|
|
138
|
-
break;
|
|
139
|
-
default:
|
|
140
|
-
// Other types go to functions as catch-all
|
|
141
|
-
functions.push(ref);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// Categorize referenced objects
|
|
145
|
-
const referencedTables = [];
|
|
146
|
-
const referencedViews = [];
|
|
147
|
-
const referencedFunctions = [];
|
|
148
|
-
for (const row of referencesResult.recordset) {
|
|
149
|
-
const ref = {
|
|
150
|
-
name: row.referencedName,
|
|
151
|
-
schema: row.referencedSchema || "dbo",
|
|
152
|
-
type: row.referencedType,
|
|
153
|
-
};
|
|
154
|
-
switch (row.referencedType) {
|
|
155
|
-
case "USER_TABLE":
|
|
156
|
-
referencedTables.push(ref);
|
|
157
|
-
break;
|
|
158
|
-
case "VIEW":
|
|
159
|
-
referencedViews.push(ref);
|
|
160
|
-
break;
|
|
161
|
-
default:
|
|
162
|
-
referencedFunctions.push(ref);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
const result = {
|
|
166
|
-
success: true,
|
|
167
|
-
object: `${schemaName}.${objName}`,
|
|
168
|
-
objectType,
|
|
169
|
-
referencedBy: {
|
|
170
|
-
views,
|
|
171
|
-
storedProcedures,
|
|
172
|
-
functions,
|
|
173
|
-
triggers,
|
|
174
|
-
foreignKeys: foreignKeys.map((fk) => ({
|
|
175
|
-
table: fk.referencingTable,
|
|
176
|
-
schema: fk.referencingSchema,
|
|
177
|
-
column: fk.referencingColumn,
|
|
178
|
-
constraint: fk.constraintName,
|
|
179
|
-
})),
|
|
180
|
-
},
|
|
181
|
-
references: {
|
|
182
|
-
tables: referencedTables,
|
|
183
|
-
views: referencedViews,
|
|
184
|
-
functions: referencedFunctions,
|
|
185
|
-
},
|
|
186
|
-
};
|
|
187
|
-
// Add summary counts
|
|
188
|
-
const totalReferencedBy = views.length +
|
|
189
|
-
storedProcedures.length +
|
|
190
|
-
functions.length +
|
|
191
|
-
triggers.length +
|
|
192
|
-
foreignKeys.length;
|
|
193
|
-
const totalReferences = referencedTables.length + referencedViews.length + referencedFunctions.length;
|
|
194
|
-
if (totalReferencedBy === 0 && totalReferences === 0) {
|
|
195
|
-
result.message = `No dependencies found for '${schemaName}.${objName}'.`;
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
result.message = `Found ${totalReferencedBy} object(s) that reference this ${objectType.toLowerCase().replace(/_/g, " ")}, and ${totalReferences} object(s) that it references.`;
|
|
199
|
-
}
|
|
200
|
-
if (totalReferencedBy > 0) {
|
|
201
|
-
result.hint = "Modifying or dropping this object may affect the listed dependents.";
|
|
202
|
-
}
|
|
203
|
-
return result;
|
|
204
|
-
}
|
|
205
|
-
catch (error) {
|
|
206
|
-
return {
|
|
207
|
-
success: false,
|
|
208
|
-
object: objectName,
|
|
209
|
-
error: "QUERY_ERROR",
|
|
210
|
-
message: `Failed to inspect dependencies: ${error.message}`,
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
//# sourceMappingURL=InspectDependenciesTool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InspectDependenciesTool.js","sourceRoot":"","sources":["../../src/tools/InspectDependenciesTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
-
export declare class ListDatabasesTool 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
|
-
error: string;
|
|
11
|
-
environment?: undefined;
|
|
12
|
-
accessLevel?: undefined;
|
|
13
|
-
totalDatabases?: undefined;
|
|
14
|
-
accessibleDatabases?: undefined;
|
|
15
|
-
databases?: undefined;
|
|
16
|
-
} | {
|
|
17
|
-
success: boolean;
|
|
18
|
-
message: string;
|
|
19
|
-
environment: string;
|
|
20
|
-
accessLevel: "server";
|
|
21
|
-
totalDatabases: number;
|
|
22
|
-
accessibleDatabases: number;
|
|
23
|
-
databases: any[];
|
|
24
|
-
error?: undefined;
|
|
25
|
-
}>;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=ListDatabasesTool.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ListDatabasesTool.d.ts","sourceRoot":"","sources":["../../src/tools/ListDatabasesTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,qBAAa,iBAAkB,YAAW,IAAI;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAoB;IACxB,WAAW,SAAiH;IAC5H,WAAW,EAkBN,GAAG,CAAC;IAEH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;CAyFtB"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import sql from "mssql";
|
|
2
|
-
import { getEnvironmentManager } from "../config/EnvironmentManager.js";
|
|
3
|
-
export class ListDatabasesTool {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.name = "list_databases";
|
|
6
|
-
this.description = "Lists databases on the SQL Server instance. Requires server-level access. Filtered by environment policies.";
|
|
7
|
-
this.inputSchema = {
|
|
8
|
-
type: "object",
|
|
9
|
-
properties: {
|
|
10
|
-
environment: {
|
|
11
|
-
type: "string",
|
|
12
|
-
description: "Target environment name (optional, uses default if not specified)",
|
|
13
|
-
},
|
|
14
|
-
includeSystemDbs: {
|
|
15
|
-
type: "boolean",
|
|
16
|
-
description: "Include system databases (master, msdb, model, tempdb). Default: false",
|
|
17
|
-
},
|
|
18
|
-
stateFilter: {
|
|
19
|
-
type: "string",
|
|
20
|
-
enum: ["ONLINE", "OFFLINE", "RESTORING", "RECOVERING", "SUSPECT", "ALL"],
|
|
21
|
-
description: "Filter by database state. Default: ONLINE",
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
required: [],
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
async run(params) {
|
|
28
|
-
const { environment, includeSystemDbs = false, stateFilter = "ONLINE" } = params ?? {};
|
|
29
|
-
try {
|
|
30
|
-
const envManager = getEnvironmentManager();
|
|
31
|
-
const envConfig = envManager.getEnvironment(environment);
|
|
32
|
-
// Check if environment has server-level access
|
|
33
|
-
const accessLevel = envConfig.accessLevel ?? "database";
|
|
34
|
-
if (accessLevel !== "server") {
|
|
35
|
-
return {
|
|
36
|
-
success: false,
|
|
37
|
-
message: `Environment '${envConfig.name}' has database-level access only. ` +
|
|
38
|
-
`list_databases requires server-level access (accessLevel: "server").`,
|
|
39
|
-
error: "ACCESS_LEVEL_DENIED",
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
const request = new sql.Request(params.pool);
|
|
43
|
-
// Build the query
|
|
44
|
-
let query = `
|
|
45
|
-
SELECT
|
|
46
|
-
d.name AS database_name,
|
|
47
|
-
d.database_id,
|
|
48
|
-
d.state_desc AS state,
|
|
49
|
-
d.recovery_model_desc AS recovery_model,
|
|
50
|
-
d.compatibility_level,
|
|
51
|
-
d.collation_name,
|
|
52
|
-
d.create_date,
|
|
53
|
-
d.is_read_only,
|
|
54
|
-
CAST(SUM(mf.size) * 8.0 / 1024 AS DECIMAL(10,2)) AS size_mb
|
|
55
|
-
FROM sys.databases d
|
|
56
|
-
LEFT JOIN sys.master_files mf ON d.database_id = mf.database_id
|
|
57
|
-
WHERE 1=1
|
|
58
|
-
`;
|
|
59
|
-
// Filter by state
|
|
60
|
-
if (stateFilter && stateFilter !== "ALL") {
|
|
61
|
-
query += ` AND d.state_desc = '${stateFilter}'`;
|
|
62
|
-
}
|
|
63
|
-
// Exclude system databases if not requested
|
|
64
|
-
if (!includeSystemDbs) {
|
|
65
|
-
query += ` AND d.database_id > 4`; // System DBs have IDs 1-4
|
|
66
|
-
}
|
|
67
|
-
query += `
|
|
68
|
-
GROUP BY d.name, d.database_id, d.state_desc, d.recovery_model_desc,
|
|
69
|
-
d.compatibility_level, d.collation_name, d.create_date, d.is_read_only
|
|
70
|
-
ORDER BY d.name
|
|
71
|
-
`;
|
|
72
|
-
const result = await request.query(query);
|
|
73
|
-
// Filter results by allowedDatabases/deniedDatabases policies
|
|
74
|
-
const filteredDatabases = result.recordset.filter((db) => {
|
|
75
|
-
const check = envManager.isDatabaseAllowed(environment, db.database_name);
|
|
76
|
-
return check.allowed;
|
|
77
|
-
});
|
|
78
|
-
// Mark which databases are accessible vs restricted
|
|
79
|
-
const databases = result.recordset.map((db) => {
|
|
80
|
-
const check = envManager.isDatabaseAllowed(environment, db.database_name);
|
|
81
|
-
return {
|
|
82
|
-
...db,
|
|
83
|
-
accessible: check.allowed,
|
|
84
|
-
restriction_reason: check.reason,
|
|
85
|
-
};
|
|
86
|
-
});
|
|
87
|
-
return {
|
|
88
|
-
success: true,
|
|
89
|
-
message: `Found ${result.recordset.length} database(s), ${filteredDatabases.length} accessible`,
|
|
90
|
-
environment: envConfig.name,
|
|
91
|
-
accessLevel: accessLevel,
|
|
92
|
-
totalDatabases: result.recordset.length,
|
|
93
|
-
accessibleDatabases: filteredDatabases.length,
|
|
94
|
-
databases: databases,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
console.error("Error listing databases:", error);
|
|
99
|
-
return {
|
|
100
|
-
success: false,
|
|
101
|
-
message: `Failed to list databases: ${error}`,
|
|
102
|
-
error: "QUERY_FAILED",
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=ListDatabasesTool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ListDatabasesTool.js","sourceRoot":"","sources":["../../src/tools/ListDatabasesTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
-
export declare class ListEnvironmentsTool 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
|
-
defaultEnvironment: string | null;
|
|
11
|
-
environmentCount: number;
|
|
12
|
-
environments: ({
|
|
13
|
-
name: string;
|
|
14
|
-
description: string | null;
|
|
15
|
-
server: string;
|
|
16
|
-
database: string;
|
|
17
|
-
accessLevel: import("../config/EnvironmentManager.js").AccessLevel;
|
|
18
|
-
readonly: boolean;
|
|
19
|
-
tier: import("../config/EnvironmentManager.js").TierLevel | null;
|
|
20
|
-
} | {
|
|
21
|
-
authMode: "sql" | "windows" | "aad";
|
|
22
|
-
port: number;
|
|
23
|
-
allowedTools: string[] | null;
|
|
24
|
-
deniedTools: string[] | null;
|
|
25
|
-
allowedDatabases: string[] | "*" | null;
|
|
26
|
-
deniedDatabases: string[] | null;
|
|
27
|
-
allowedSchemas: string[] | null;
|
|
28
|
-
deniedSchemas: string[] | null;
|
|
29
|
-
maxRowsDefault: number | null;
|
|
30
|
-
requireApproval: boolean;
|
|
31
|
-
name: string;
|
|
32
|
-
description: string | null;
|
|
33
|
-
server: string;
|
|
34
|
-
database: string;
|
|
35
|
-
accessLevel: import("../config/EnvironmentManager.js").AccessLevel;
|
|
36
|
-
readonly: boolean;
|
|
37
|
-
tier: import("../config/EnvironmentManager.js").TierLevel | null;
|
|
38
|
-
})[];
|
|
39
|
-
error?: undefined;
|
|
40
|
-
} | {
|
|
41
|
-
success: boolean;
|
|
42
|
-
message: string;
|
|
43
|
-
error: string;
|
|
44
|
-
defaultEnvironment?: undefined;
|
|
45
|
-
environmentCount?: undefined;
|
|
46
|
-
environments?: undefined;
|
|
47
|
-
}>;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=ListEnvironmentsTool.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ListEnvironmentsTool.d.ts","sourceRoot":"","sources":["../../src/tools/ListEnvironmentsTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG1D,qBAAa,oBAAqB,YAAW,IAAI;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB,IAAI,SAAuB;IAC3B,WAAW,SAGuE;IAClF,WAAW,EASN,GAAG,CAAC;IAEH,GAAG,CAAC,MAAM,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DtB"}
|