@elad-nofy/mssql-mcp 1.0.2 → 1.0.3
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/mssqlClient.d.ts +6 -4
- package/dist/mssqlClient.d.ts.map +1 -1
- package/dist/mssqlClient.js +49 -20
- package/dist/mssqlClient.js.map +1 -1
- package/dist/tools/availability.d.ts +30 -10
- package/dist/tools/availability.d.ts.map +1 -1
- package/dist/tools/availability.js +18 -12
- package/dist/tools/availability.js.map +1 -1
- package/dist/tools/connection.d.ts +26 -5
- package/dist/tools/connection.d.ts.map +1 -1
- package/dist/tools/connection.js +14 -8
- package/dist/tools/connection.js.map +1 -1
- package/dist/tools/health.d.ts +42 -10
- package/dist/tools/health.d.ts.map +1 -1
- package/dist/tools/health.js +22 -13
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/jobs.d.ts +25 -5
- package/dist/tools/jobs.d.ts.map +1 -1
- package/dist/tools/jobs.js +12 -6
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/performance.d.ts +26 -6
- package/dist/tools/performance.d.ts.map +1 -1
- package/dist/tools/performance.js +12 -6
- package/dist/tools/performance.js.map +1 -1
- package/dist/tools/queries.d.ts +15 -3
- package/dist/tools/queries.d.ts.map +1 -1
- package/dist/tools/queries.js +7 -3
- package/dist/tools/queries.js.map +1 -1
- package/dist/tools/schema.d.ts +45 -9
- package/dist/tools/schema.d.ts.map +1 -1
- package/dist/tools/schema.js +19 -9
- package/dist/tools/schema.js.map +1 -1
- package/package.json +1 -1
package/dist/tools/health.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
const serverParam = z.string().optional().describe('SQL Server instance (e.g., "server\\instance" or "server,port"). Uses default if not specified.');
|
|
2
3
|
export const healthTools = {
|
|
3
4
|
get_database_states: {
|
|
4
5
|
description: 'Get the health status of all databases including any that are offline, recovering, or suspect',
|
|
5
|
-
inputSchema: z.object({
|
|
6
|
-
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
server: serverParam,
|
|
8
|
+
}),
|
|
9
|
+
handler: async (client, args) => {
|
|
7
10
|
const query = `
|
|
8
11
|
SELECT
|
|
9
12
|
name,
|
|
@@ -26,7 +29,7 @@ export const healthTools = {
|
|
|
26
29
|
CASE WHEN state_desc != 'ONLINE' THEN 0 ELSE 1 END,
|
|
27
30
|
name
|
|
28
31
|
`;
|
|
29
|
-
const result = await client.query(query);
|
|
32
|
+
const result = await client.query(query, undefined, args.server);
|
|
30
33
|
const critical = result.filter((r) => r.health_status === 'CRITICAL');
|
|
31
34
|
const warning = result.filter((r) => r.health_status === 'WARNING');
|
|
32
35
|
return {
|
|
@@ -43,6 +46,7 @@ export const healthTools = {
|
|
|
43
46
|
get_disk_space: {
|
|
44
47
|
description: 'Get disk space usage for all database files including data and log files',
|
|
45
48
|
inputSchema: z.object({
|
|
49
|
+
server: serverParam,
|
|
46
50
|
database: z.string().optional().describe('Specific database to check (optional, checks all if not specified)'),
|
|
47
51
|
}),
|
|
48
52
|
handler: async (client, args) => {
|
|
@@ -71,13 +75,15 @@ export const healthTools = {
|
|
|
71
75
|
${dbFilter}
|
|
72
76
|
ORDER BY database_name, type_desc
|
|
73
77
|
`;
|
|
74
|
-
return await client.query(query);
|
|
78
|
+
return await client.query(query, undefined, args.server);
|
|
75
79
|
},
|
|
76
80
|
},
|
|
77
81
|
get_memory_usage: {
|
|
78
82
|
description: 'Get SQL Server memory usage including buffer pool, plan cache, and other memory clerks',
|
|
79
|
-
inputSchema: z.object({
|
|
80
|
-
|
|
83
|
+
inputSchema: z.object({
|
|
84
|
+
server: serverParam,
|
|
85
|
+
}),
|
|
86
|
+
handler: async (client, args) => {
|
|
81
87
|
const query = `
|
|
82
88
|
SELECT
|
|
83
89
|
type as memory_clerk_type,
|
|
@@ -88,7 +94,7 @@ export const healthTools = {
|
|
|
88
94
|
WHERE pages_kb > 0
|
|
89
95
|
ORDER BY pages_kb DESC
|
|
90
96
|
`;
|
|
91
|
-
const clerks = await client.query(query);
|
|
97
|
+
const clerks = await client.query(query, undefined, args.server);
|
|
92
98
|
// Get overall memory status
|
|
93
99
|
const memoryQuery = `
|
|
94
100
|
SELECT
|
|
@@ -98,7 +104,7 @@ export const healthTools = {
|
|
|
98
104
|
visible_target_kb / 1024 as visible_target_mb
|
|
99
105
|
FROM sys.dm_os_sys_info
|
|
100
106
|
`;
|
|
101
|
-
const memoryInfo = await client.query(memoryQuery);
|
|
107
|
+
const memoryInfo = await client.query(memoryQuery, undefined, args.server);
|
|
102
108
|
// Get buffer pool usage
|
|
103
109
|
const bufferQuery = `
|
|
104
110
|
SELECT
|
|
@@ -108,7 +114,7 @@ export const healthTools = {
|
|
|
108
114
|
GROUP BY database_id
|
|
109
115
|
ORDER BY COUNT(*) DESC
|
|
110
116
|
`;
|
|
111
|
-
const bufferUsage = await client.query(bufferQuery);
|
|
117
|
+
const bufferUsage = await client.query(bufferQuery, undefined, args.server);
|
|
112
118
|
return {
|
|
113
119
|
serverMemory: memoryInfo[0],
|
|
114
120
|
topMemoryClerks: clerks.slice(0, 15),
|
|
@@ -118,12 +124,14 @@ export const healthTools = {
|
|
|
118
124
|
},
|
|
119
125
|
get_log_space: {
|
|
120
126
|
description: 'Get transaction log space usage for all databases',
|
|
121
|
-
inputSchema: z.object({
|
|
122
|
-
|
|
127
|
+
inputSchema: z.object({
|
|
128
|
+
server: serverParam,
|
|
129
|
+
}),
|
|
130
|
+
handler: async (client, args) => {
|
|
123
131
|
const query = `
|
|
124
132
|
DBCC SQLPERF(LOGSPACE) WITH NO_INFOMSGS
|
|
125
133
|
`;
|
|
126
|
-
const result = await client.query(query);
|
|
134
|
+
const result = await client.query(query, undefined, args.server);
|
|
127
135
|
// Add health assessment
|
|
128
136
|
const assessed = result.map((r) => ({
|
|
129
137
|
...r,
|
|
@@ -145,6 +153,7 @@ export const healthTools = {
|
|
|
145
153
|
get_backup_status: {
|
|
146
154
|
description: 'Get last backup information for all databases',
|
|
147
155
|
inputSchema: z.object({
|
|
156
|
+
server: serverParam,
|
|
148
157
|
maxAgeDays: z.number().optional().default(7).describe('Flag databases with no backup in this many days as warning'),
|
|
149
158
|
}),
|
|
150
159
|
handler: async (client, args) => {
|
|
@@ -166,7 +175,7 @@ export const healthTools = {
|
|
|
166
175
|
CASE WHEN MAX(CASE WHEN b.type = 'D' THEN b.backup_finish_date END) IS NULL THEN 0 ELSE 1 END,
|
|
167
176
|
MAX(CASE WHEN b.type = 'D' THEN b.backup_finish_date END)
|
|
168
177
|
`;
|
|
169
|
-
const result = await client.query(query);
|
|
178
|
+
const result = await client.query(query, undefined, args.server);
|
|
170
179
|
// Add health assessment
|
|
171
180
|
const maxAge = args.maxAgeDays || 7;
|
|
172
181
|
const assessed = result.map((r) => ({
|
package/dist/tools/health.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,mBAAmB,EAAE;QACnB,WAAW,EAAE,+FAA+F;QAC5G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/jobs.d.ts
CHANGED
|
@@ -4,50 +4,70 @@ export declare const jobTools: {
|
|
|
4
4
|
list_jobs: {
|
|
5
5
|
description: string;
|
|
6
6
|
inputSchema: z.ZodObject<{
|
|
7
|
+
server: z.ZodOptional<z.ZodString>;
|
|
7
8
|
enabledOnly: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
8
9
|
}, "strip", z.ZodTypeAny, {
|
|
9
10
|
enabledOnly: boolean;
|
|
11
|
+
server?: string | undefined;
|
|
10
12
|
}, {
|
|
13
|
+
server?: string | undefined;
|
|
11
14
|
enabledOnly?: boolean | undefined;
|
|
12
15
|
}>;
|
|
13
16
|
handler: (client: MssqlClient, args: {
|
|
17
|
+
server?: string;
|
|
14
18
|
enabledOnly?: boolean;
|
|
15
|
-
}) => Promise<
|
|
19
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
16
20
|
};
|
|
17
21
|
get_running_jobs: {
|
|
18
22
|
description: string;
|
|
19
|
-
inputSchema: z.ZodObject<{
|
|
20
|
-
|
|
23
|
+
inputSchema: z.ZodObject<{
|
|
24
|
+
server: z.ZodOptional<z.ZodString>;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
server?: string | undefined;
|
|
27
|
+
}, {
|
|
28
|
+
server?: string | undefined;
|
|
29
|
+
}>;
|
|
30
|
+
handler: (client: MssqlClient, args: {
|
|
31
|
+
server?: string;
|
|
32
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
21
33
|
};
|
|
22
34
|
get_failed_jobs: {
|
|
23
35
|
description: string;
|
|
24
36
|
inputSchema: z.ZodObject<{
|
|
37
|
+
server: z.ZodOptional<z.ZodString>;
|
|
25
38
|
hours: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
26
39
|
}, "strip", z.ZodTypeAny, {
|
|
27
40
|
hours: number;
|
|
41
|
+
server?: string | undefined;
|
|
28
42
|
}, {
|
|
43
|
+
server?: string | undefined;
|
|
29
44
|
hours?: number | undefined;
|
|
30
45
|
}>;
|
|
31
46
|
handler: (client: MssqlClient, args: {
|
|
47
|
+
server?: string;
|
|
32
48
|
hours?: number;
|
|
33
|
-
}) => Promise<
|
|
49
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
34
50
|
};
|
|
35
51
|
get_job_history: {
|
|
36
52
|
description: string;
|
|
37
53
|
inputSchema: z.ZodObject<{
|
|
54
|
+
server: z.ZodOptional<z.ZodString>;
|
|
38
55
|
jobName: z.ZodString;
|
|
39
56
|
top: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
40
57
|
}, "strip", z.ZodTypeAny, {
|
|
41
58
|
top: number;
|
|
42
59
|
jobName: string;
|
|
60
|
+
server?: string | undefined;
|
|
43
61
|
}, {
|
|
44
62
|
jobName: string;
|
|
63
|
+
server?: string | undefined;
|
|
45
64
|
top?: number | undefined;
|
|
46
65
|
}>;
|
|
47
66
|
handler: (client: MssqlClient, args: {
|
|
67
|
+
server?: string;
|
|
48
68
|
jobName: string;
|
|
49
69
|
top?: number;
|
|
50
|
-
}) => Promise<
|
|
70
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
51
71
|
};
|
|
52
72
|
};
|
|
53
73
|
//# sourceMappingURL=jobs.d.ts.map
|
package/dist/tools/jobs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;0BAOO,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;;;;;;;0BAmE7D,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;0BA+BtC,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;0BAoCtD,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE;;CA8BhG,CAAC"}
|
package/dist/tools/jobs.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
const serverParam = z.string().optional().describe('SQL Server instance (e.g., "server\\instance" or "server,port"). Uses default if not specified.');
|
|
2
3
|
export const jobTools = {
|
|
3
4
|
list_jobs: {
|
|
4
5
|
description: 'List all SQL Server Agent jobs with their status and schedule',
|
|
5
6
|
inputSchema: z.object({
|
|
7
|
+
server: serverParam,
|
|
6
8
|
enabledOnly: z.boolean().optional().default(false).describe('Only show enabled jobs'),
|
|
7
9
|
}),
|
|
8
10
|
handler: async (client, args) => {
|
|
@@ -61,13 +63,15 @@ export const jobTools = {
|
|
|
61
63
|
${enabledFilter}
|
|
62
64
|
ORDER BY j.name
|
|
63
65
|
`;
|
|
64
|
-
return await client.query(query);
|
|
66
|
+
return await client.query(query, undefined, args.server);
|
|
65
67
|
},
|
|
66
68
|
},
|
|
67
69
|
get_running_jobs: {
|
|
68
70
|
description: 'Get currently executing SQL Server Agent jobs',
|
|
69
|
-
inputSchema: z.object({
|
|
70
|
-
|
|
71
|
+
inputSchema: z.object({
|
|
72
|
+
server: serverParam,
|
|
73
|
+
}),
|
|
74
|
+
handler: async (client, args) => {
|
|
71
75
|
const query = `
|
|
72
76
|
SELECT
|
|
73
77
|
j.name as job_name,
|
|
@@ -87,12 +91,13 @@ export const jobTools = {
|
|
|
87
91
|
AND ja.stop_execution_date IS NULL
|
|
88
92
|
ORDER BY ja.start_execution_date
|
|
89
93
|
`;
|
|
90
|
-
return await client.query(query);
|
|
94
|
+
return await client.query(query, undefined, args.server);
|
|
91
95
|
},
|
|
92
96
|
},
|
|
93
97
|
get_failed_jobs: {
|
|
94
98
|
description: 'Get jobs that failed in their last execution or recent history',
|
|
95
99
|
inputSchema: z.object({
|
|
100
|
+
server: serverParam,
|
|
96
101
|
hours: z.number().optional().default(24).describe('Look back this many hours for failures'),
|
|
97
102
|
}),
|
|
98
103
|
handler: async (client, args) => {
|
|
@@ -119,12 +124,13 @@ export const jobTools = {
|
|
|
119
124
|
AS DATETIME) > DATEADD(HOUR, -${args.hours || 24}, GETDATE())
|
|
120
125
|
ORDER BY h.run_date DESC, h.run_time DESC
|
|
121
126
|
`;
|
|
122
|
-
return await client.query(query);
|
|
127
|
+
return await client.query(query, undefined, args.server);
|
|
123
128
|
},
|
|
124
129
|
},
|
|
125
130
|
get_job_history: {
|
|
126
131
|
description: 'Get execution history for a specific job',
|
|
127
132
|
inputSchema: z.object({
|
|
133
|
+
server: serverParam,
|
|
128
134
|
jobName: z.string().describe('Name of the job'),
|
|
129
135
|
top: z.number().optional().default(50).describe('Number of history records to return'),
|
|
130
136
|
}),
|
|
@@ -154,7 +160,7 @@ export const jobTools = {
|
|
|
154
160
|
WHERE j.name = @jobName
|
|
155
161
|
ORDER BY h.run_date DESC, h.run_time DESC, h.step_id
|
|
156
162
|
`;
|
|
157
|
-
return await client.query(query, { jobName: args.jobName });
|
|
163
|
+
return await client.query(query, { jobName: args.jobName }, args.server);
|
|
158
164
|
},
|
|
159
165
|
},
|
|
160
166
|
};
|
package/dist/tools/jobs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,SAAS,EAAE;QACT,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SACtF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iGAAiG,CAAC,CAAC;AAEtJ,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,SAAS,EAAE;QACT,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SACtF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAgD,EAAE,EAAE;YACvF,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;YAElE,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAmDV,aAAa;;OAEhB,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,WAAW;SACpB,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAyB,EAAE,EAAE;YAChE,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;OAkBb,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;KACF;IAED,eAAe,EAAE;QACf,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SAC5F,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAyC,EAAE,EAAE;YAChF,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;wCAoBoB,IAAI,CAAC,KAAK,IAAI,EAAE;;OAEjD,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;KACF;IAED,eAAe,EAAE;QACf,WAAW,EAAE,0CAA0C;QACvD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC/C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;SACvF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAwD,EAAE,EAAE;YAC/F,MAAM,KAAK,GAAG;qBACC,IAAI,CAAC,GAAG,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;OAuB5B,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3E,CAAC;KACF;CACF,CAAC"}
|
|
@@ -3,58 +3,78 @@ import { MssqlClient } from '../mssqlClient.js';
|
|
|
3
3
|
export declare const performanceTools: {
|
|
4
4
|
get_blocking: {
|
|
5
5
|
description: string;
|
|
6
|
-
inputSchema: z.ZodObject<{
|
|
7
|
-
|
|
6
|
+
inputSchema: z.ZodObject<{
|
|
7
|
+
server: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
server?: string | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
server?: string | undefined;
|
|
12
|
+
}>;
|
|
13
|
+
handler: (client: MssqlClient, args: {
|
|
14
|
+
server?: string;
|
|
15
|
+
}) => Promise<{
|
|
8
16
|
blockingCount: number;
|
|
9
|
-
chains:
|
|
17
|
+
chains: Record<string, unknown>[];
|
|
10
18
|
}>;
|
|
11
19
|
};
|
|
12
20
|
get_wait_stats: {
|
|
13
21
|
description: string;
|
|
14
22
|
inputSchema: z.ZodObject<{
|
|
23
|
+
server: z.ZodOptional<z.ZodString>;
|
|
15
24
|
top: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
16
25
|
excludeIdle: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
17
26
|
}, "strip", z.ZodTypeAny, {
|
|
18
27
|
top: number;
|
|
19
28
|
excludeIdle: boolean;
|
|
29
|
+
server?: string | undefined;
|
|
20
30
|
}, {
|
|
31
|
+
server?: string | undefined;
|
|
21
32
|
top?: number | undefined;
|
|
22
33
|
excludeIdle?: boolean | undefined;
|
|
23
34
|
}>;
|
|
24
35
|
handler: (client: MssqlClient, args: {
|
|
36
|
+
server?: string;
|
|
25
37
|
top?: number;
|
|
26
38
|
excludeIdle?: boolean;
|
|
27
|
-
}) => Promise<
|
|
39
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
28
40
|
};
|
|
29
41
|
get_cpu_usage: {
|
|
30
42
|
description: string;
|
|
31
43
|
inputSchema: z.ZodObject<{
|
|
44
|
+
server: z.ZodOptional<z.ZodString>;
|
|
32
45
|
minutes: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
33
46
|
}, "strip", z.ZodTypeAny, {
|
|
34
47
|
minutes: number;
|
|
48
|
+
server?: string | undefined;
|
|
35
49
|
}, {
|
|
50
|
+
server?: string | undefined;
|
|
36
51
|
minutes?: number | undefined;
|
|
37
52
|
}>;
|
|
38
53
|
handler: (client: MssqlClient, args: {
|
|
54
|
+
server?: string;
|
|
39
55
|
minutes?: number;
|
|
40
|
-
}) => Promise<
|
|
56
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
41
57
|
};
|
|
42
58
|
get_index_usage: {
|
|
43
59
|
description: string;
|
|
44
60
|
inputSchema: z.ZodObject<{
|
|
61
|
+
server: z.ZodOptional<z.ZodString>;
|
|
45
62
|
database: z.ZodString;
|
|
46
63
|
showUnused: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
47
64
|
}, "strip", z.ZodTypeAny, {
|
|
48
65
|
database: string;
|
|
49
66
|
showUnused: boolean;
|
|
67
|
+
server?: string | undefined;
|
|
50
68
|
}, {
|
|
51
69
|
database: string;
|
|
70
|
+
server?: string | undefined;
|
|
52
71
|
showUnused?: boolean | undefined;
|
|
53
72
|
}>;
|
|
54
73
|
handler: (client: MssqlClient, args: {
|
|
74
|
+
server?: string;
|
|
55
75
|
database: string;
|
|
56
76
|
showUnused?: boolean;
|
|
57
|
-
}) => Promise<
|
|
77
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
58
78
|
};
|
|
59
79
|
};
|
|
60
80
|
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/tools/performance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/tools/performance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,eAAO,MAAM,gBAAgB;;;;;;;;;;0BAMD,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;0BAqDtC,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;;;;;;;;;;0BA4C3E,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;0BAoCxD,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE;;CAkCzG,CAAC"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
const serverParam = z.string().optional().describe('SQL Server instance (e.g., "server\\instance" or "server,port"). Uses default if not specified.');
|
|
2
3
|
export const performanceTools = {
|
|
3
4
|
get_blocking: {
|
|
4
5
|
description: 'Get current blocking chains showing blocked and blocking sessions',
|
|
5
|
-
inputSchema: z.object({
|
|
6
|
-
|
|
6
|
+
inputSchema: z.object({
|
|
7
|
+
server: serverParam,
|
|
8
|
+
}),
|
|
9
|
+
handler: async (client, args) => {
|
|
7
10
|
const query = `
|
|
8
11
|
WITH BlockingTree AS (
|
|
9
12
|
SELECT
|
|
@@ -40,7 +43,7 @@ export const performanceTools = {
|
|
|
40
43
|
LEFT JOIN sys.dm_exec_connections bc ON bt.blocking_session_id = bc.session_id
|
|
41
44
|
ORDER BY bt.wait_time_seconds DESC
|
|
42
45
|
`;
|
|
43
|
-
const result = await client.query(query);
|
|
46
|
+
const result = await client.query(query, undefined, args.server);
|
|
44
47
|
return {
|
|
45
48
|
blockingCount: result.length,
|
|
46
49
|
chains: result,
|
|
@@ -50,6 +53,7 @@ export const performanceTools = {
|
|
|
50
53
|
get_wait_stats: {
|
|
51
54
|
description: 'Get aggregated wait statistics to identify performance bottlenecks',
|
|
52
55
|
inputSchema: z.object({
|
|
56
|
+
server: serverParam,
|
|
53
57
|
top: z.number().optional().default(20).describe('Number of top waits to return'),
|
|
54
58
|
excludeIdle: z.boolean().optional().default(true).describe('Exclude idle and benign waits'),
|
|
55
59
|
}),
|
|
@@ -85,12 +89,13 @@ export const performanceTools = {
|
|
|
85
89
|
${excludeFilter}
|
|
86
90
|
ORDER BY wait_time_ms DESC
|
|
87
91
|
`;
|
|
88
|
-
return await client.query(query);
|
|
92
|
+
return await client.query(query, undefined, args.server);
|
|
89
93
|
},
|
|
90
94
|
},
|
|
91
95
|
get_cpu_usage: {
|
|
92
96
|
description: 'Get CPU usage history for SQL Server from ring buffer',
|
|
93
97
|
inputSchema: z.object({
|
|
98
|
+
server: serverParam,
|
|
94
99
|
minutes: z.number().optional().default(30).describe('Minutes of history to retrieve'),
|
|
95
100
|
}),
|
|
96
101
|
handler: async (client, args) => {
|
|
@@ -117,12 +122,13 @@ export const performanceTools = {
|
|
|
117
122
|
) AS y
|
|
118
123
|
ORDER BY record_id DESC
|
|
119
124
|
`;
|
|
120
|
-
return await client.query(query);
|
|
125
|
+
return await client.query(query, undefined, args.server);
|
|
121
126
|
},
|
|
122
127
|
},
|
|
123
128
|
get_index_usage: {
|
|
124
129
|
description: 'Get index usage statistics to identify unused or missing indexes',
|
|
125
130
|
inputSchema: z.object({
|
|
131
|
+
server: serverParam,
|
|
126
132
|
database: z.string().describe('Database name to analyze'),
|
|
127
133
|
showUnused: z.boolean().optional().default(true).describe('Include unused indexes'),
|
|
128
134
|
}),
|
|
@@ -155,7 +161,7 @@ export const performanceTools = {
|
|
|
155
161
|
${unusedFilter}
|
|
156
162
|
ORDER BY (ISNULL(s.user_seeks, 0) + ISNULL(s.user_scans, 0) + ISNULL(s.user_lookups, 0)) ASC
|
|
157
163
|
`;
|
|
158
|
-
return await client.query(query);
|
|
164
|
+
return await client.query(query, undefined, args.server);
|
|
159
165
|
},
|
|
160
166
|
},
|
|
161
167
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/tools/performance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,YAAY,EAAE;QACZ,WAAW,EAAE,mEAAmE;QAChF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/tools/performance.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/queries.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare const queryTools: {
|
|
|
4
4
|
execute_query: {
|
|
5
5
|
description: string;
|
|
6
6
|
inputSchema: z.ZodObject<{
|
|
7
|
+
server: z.ZodOptional<z.ZodString>;
|
|
7
8
|
query: z.ZodString;
|
|
8
9
|
database: z.ZodOptional<z.ZodString>;
|
|
9
10
|
maxRows: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -11,49 +12,60 @@ export declare const queryTools: {
|
|
|
11
12
|
query: string;
|
|
12
13
|
maxRows: number;
|
|
13
14
|
database?: string | undefined;
|
|
15
|
+
server?: string | undefined;
|
|
14
16
|
}, {
|
|
15
17
|
query: string;
|
|
16
18
|
database?: string | undefined;
|
|
19
|
+
server?: string | undefined;
|
|
17
20
|
maxRows?: number | undefined;
|
|
18
21
|
}>;
|
|
19
22
|
handler: (client: MssqlClient, args: {
|
|
23
|
+
server?: string;
|
|
20
24
|
query: string;
|
|
21
25
|
database?: string;
|
|
22
26
|
maxRows?: number;
|
|
23
27
|
}) => Promise<{
|
|
24
28
|
rowCount: number;
|
|
25
|
-
rows:
|
|
29
|
+
rows: Record<string, unknown>[];
|
|
26
30
|
}>;
|
|
27
31
|
};
|
|
28
32
|
get_expensive_queries: {
|
|
29
33
|
description: string;
|
|
30
34
|
inputSchema: z.ZodObject<{
|
|
35
|
+
server: z.ZodOptional<z.ZodString>;
|
|
31
36
|
metric: z.ZodDefault<z.ZodOptional<z.ZodEnum<["cpu", "reads", "writes", "duration", "executions"]>>>;
|
|
32
37
|
top: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
33
38
|
}, "strip", z.ZodTypeAny, {
|
|
34
39
|
metric: "cpu" | "reads" | "writes" | "duration" | "executions";
|
|
35
40
|
top: number;
|
|
41
|
+
server?: string | undefined;
|
|
36
42
|
}, {
|
|
43
|
+
server?: string | undefined;
|
|
37
44
|
metric?: "cpu" | "reads" | "writes" | "duration" | "executions" | undefined;
|
|
38
45
|
top?: number | undefined;
|
|
39
46
|
}>;
|
|
40
47
|
handler: (client: MssqlClient, args: {
|
|
48
|
+
server?: string;
|
|
41
49
|
metric?: string;
|
|
42
50
|
top?: number;
|
|
43
|
-
}) => Promise<
|
|
51
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
44
52
|
};
|
|
45
53
|
get_running_queries: {
|
|
46
54
|
description: string;
|
|
47
55
|
inputSchema: z.ZodObject<{
|
|
56
|
+
server: z.ZodOptional<z.ZodString>;
|
|
48
57
|
includeSystem: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
49
58
|
}, "strip", z.ZodTypeAny, {
|
|
50
59
|
includeSystem: boolean;
|
|
60
|
+
server?: string | undefined;
|
|
51
61
|
}, {
|
|
62
|
+
server?: string | undefined;
|
|
52
63
|
includeSystem?: boolean | undefined;
|
|
53
64
|
}>;
|
|
54
65
|
handler: (client: MssqlClient, args: {
|
|
66
|
+
server?: string;
|
|
55
67
|
includeSystem?: boolean;
|
|
56
|
-
}) => Promise<
|
|
68
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
57
69
|
};
|
|
58
70
|
};
|
|
59
71
|
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/tools/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/tools/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;0BASK,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;0BA2C1F,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;0BA4CrE,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,OAAO,CAAA;SAAE;;CAyC1F,CAAC"}
|
package/dist/tools/queries.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
const serverParam = z.string().optional().describe('SQL Server instance (e.g., "server\\instance" or "server,port"). Uses default if not specified.');
|
|
2
3
|
export const queryTools = {
|
|
3
4
|
execute_query: {
|
|
4
5
|
description: 'Execute a read-only SQL query. Only SELECT statements are allowed for safety.',
|
|
5
6
|
inputSchema: z.object({
|
|
7
|
+
server: serverParam,
|
|
6
8
|
query: z.string().describe('The SQL SELECT query to execute'),
|
|
7
9
|
database: z.string().optional().describe('Database to run the query against (optional, uses default if not specified)'),
|
|
8
10
|
maxRows: z.number().optional().default(1000).describe('Maximum rows to return (default: 1000)'),
|
|
@@ -29,7 +31,7 @@ export const queryTools = {
|
|
|
29
31
|
if (args.database) {
|
|
30
32
|
finalQuery = `USE [${args.database}]; ${finalQuery}`;
|
|
31
33
|
}
|
|
32
|
-
const result = await client.query(finalQuery);
|
|
34
|
+
const result = await client.query(finalQuery, undefined, args.server);
|
|
33
35
|
return {
|
|
34
36
|
rowCount: result.length,
|
|
35
37
|
rows: result,
|
|
@@ -39,6 +41,7 @@ export const queryTools = {
|
|
|
39
41
|
get_expensive_queries: {
|
|
40
42
|
description: 'Get the most resource-intensive queries from the query store or plan cache',
|
|
41
43
|
inputSchema: z.object({
|
|
44
|
+
server: serverParam,
|
|
42
45
|
metric: z.enum(['cpu', 'reads', 'writes', 'duration', 'executions']).optional().default('cpu')
|
|
43
46
|
.describe('Metric to sort by'),
|
|
44
47
|
top: z.number().optional().default(20).describe('Number of queries to return'),
|
|
@@ -74,12 +77,13 @@ export const queryTools = {
|
|
|
74
77
|
WHERE qs.execution_count > 0
|
|
75
78
|
ORDER BY ${orderBy} DESC
|
|
76
79
|
`;
|
|
77
|
-
return await client.query(query);
|
|
80
|
+
return await client.query(query, undefined, args.server);
|
|
78
81
|
},
|
|
79
82
|
},
|
|
80
83
|
get_running_queries: {
|
|
81
84
|
description: 'Get currently executing queries with their status and resource usage',
|
|
82
85
|
inputSchema: z.object({
|
|
86
|
+
server: serverParam,
|
|
83
87
|
includeSystem: z.boolean().optional().default(false).describe('Include system processes'),
|
|
84
88
|
}),
|
|
85
89
|
handler: async (client, args) => {
|
|
@@ -118,7 +122,7 @@ export const queryTools = {
|
|
|
118
122
|
${systemFilter}
|
|
119
123
|
ORDER BY r.total_elapsed_time DESC
|
|
120
124
|
`;
|
|
121
|
-
return await client.query(query);
|
|
125
|
+
return await client.query(query, undefined, args.server);
|
|
122
126
|
},
|
|
123
127
|
},
|
|
124
128
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/tools/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,aAAa,EAAE;QACb,WAAW,EAAE,+EAA+E;QAC5F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YAC7D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;YACvH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SAChG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/tools/queries.ts"],"names":[],"mappings":"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"}
|