@elad-nofy/mssql-mcp 1.0.1 → 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.
Files changed (43) hide show
  1. package/README.md +70 -1
  2. package/dist/config.d.ts +2 -2
  3. package/dist/config.js +4 -4
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.js +48 -16
  6. package/dist/index.js.map +1 -1
  7. package/dist/mssqlClient.d.ts +6 -4
  8. package/dist/mssqlClient.d.ts.map +1 -1
  9. package/dist/mssqlClient.js +49 -20
  10. package/dist/mssqlClient.js.map +1 -1
  11. package/dist/tools/availability.d.ts +30 -10
  12. package/dist/tools/availability.d.ts.map +1 -1
  13. package/dist/tools/availability.js +18 -12
  14. package/dist/tools/availability.js.map +1 -1
  15. package/dist/tools/connection.d.ts +26 -5
  16. package/dist/tools/connection.d.ts.map +1 -1
  17. package/dist/tools/connection.js +14 -8
  18. package/dist/tools/connection.js.map +1 -1
  19. package/dist/tools/health.d.ts +42 -10
  20. package/dist/tools/health.d.ts.map +1 -1
  21. package/dist/tools/health.js +22 -13
  22. package/dist/tools/health.js.map +1 -1
  23. package/dist/tools/index.d.ts +1 -0
  24. package/dist/tools/index.d.ts.map +1 -1
  25. package/dist/tools/index.js +1 -0
  26. package/dist/tools/index.js.map +1 -1
  27. package/dist/tools/jobs.d.ts +25 -5
  28. package/dist/tools/jobs.d.ts.map +1 -1
  29. package/dist/tools/jobs.js +12 -6
  30. package/dist/tools/jobs.js.map +1 -1
  31. package/dist/tools/performance.d.ts +26 -6
  32. package/dist/tools/performance.d.ts.map +1 -1
  33. package/dist/tools/performance.js +12 -6
  34. package/dist/tools/performance.js.map +1 -1
  35. package/dist/tools/queries.d.ts +15 -3
  36. package/dist/tools/queries.d.ts.map +1 -1
  37. package/dist/tools/queries.js +7 -3
  38. package/dist/tools/queries.js.map +1 -1
  39. package/dist/tools/schema.d.ts +230 -0
  40. package/dist/tools/schema.d.ts.map +1 -0
  41. package/dist/tools/schema.js +374 -0
  42. package/dist/tools/schema.js.map +1 -0
  43. package/package.json +1 -1
@@ -3,9 +3,18 @@ import { MssqlClient } from '../mssqlClient.js';
3
3
  export declare const connectionTools: {
4
4
  test_connection: {
5
5
  description: string;
6
- inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
7
- handler: (client: MssqlClient) => Promise<{
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
  success: boolean;
17
+ server: string;
9
18
  version?: string;
10
19
  error?: string;
11
20
  }>;
@@ -13,20 +22,32 @@ export declare const connectionTools: {
13
22
  list_databases: {
14
23
  description: string;
15
24
  inputSchema: z.ZodObject<{
25
+ server: z.ZodOptional<z.ZodString>;
16
26
  includeSystem: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
17
27
  }, "strip", z.ZodTypeAny, {
18
28
  includeSystem: boolean;
29
+ server?: string | undefined;
19
30
  }, {
31
+ server?: string | undefined;
20
32
  includeSystem?: boolean | undefined;
21
33
  }>;
22
34
  handler: (client: MssqlClient, args: {
35
+ server?: string;
23
36
  includeSystem?: boolean;
24
- }) => Promise<import("mssql").IRecordSet<unknown>[]>;
37
+ }) => Promise<Record<string, unknown>[]>;
25
38
  };
26
39
  get_server_info: {
27
40
  description: string;
28
- inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
29
- handler: (client: MssqlClient) => Promise<import("mssql").IRecordSet<unknown>>;
41
+ inputSchema: z.ZodObject<{
42
+ server: z.ZodOptional<z.ZodString>;
43
+ }, "strip", z.ZodTypeAny, {
44
+ server?: string | undefined;
45
+ }, {
46
+ server?: string | undefined;
47
+ }>;
48
+ handler: (client: MssqlClient, args: {
49
+ server?: string;
50
+ }) => Promise<Record<string, unknown>>;
30
51
  };
31
52
  };
32
53
  //# sourceMappingURL=connection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/tools/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAO,MAAM,eAAe;;;;0BAIA,WAAW;;;;;;;;;;;;;;;0BAWX,WAAW,QAAQ;YAAE,aAAa,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;0BA8B9C,WAAW;;CAoBtC,CAAC"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/tools/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD,eAAO,MAAM,eAAe;;;;;;;;;;0BAMA,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;0BAWtC,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;;;;;;;0BAgC/D,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;CAoBjE,CAAC"}
@@ -1,16 +1,20 @@
1
1
  import { z } from 'zod';
2
+ // Shared server parameter for all tools
3
+ const serverParam = z.string().optional().describe('SQL Server instance (e.g., "server\\instance" or "server,port"). Uses default if not specified.');
2
4
  export const connectionTools = {
3
5
  test_connection: {
4
6
  description: 'Test the connection to SQL Server and verify authentication',
5
- inputSchema: z.object({}),
6
- handler: async (client) => {
7
- const result = await client.testConnection();
8
- return result;
7
+ inputSchema: z.object({
8
+ server: serverParam,
9
+ }),
10
+ handler: async (client, args) => {
11
+ return await client.testConnection(args.server);
9
12
  },
10
13
  },
11
14
  list_databases: {
12
15
  description: 'List all databases on the SQL Server instance with their status and size',
13
16
  inputSchema: z.object({
17
+ server: serverParam,
14
18
  includeSystem: z.boolean().optional().default(false).describe('Include system databases (master, model, msdb, tempdb)'),
15
19
  }),
16
20
  handler: async (client, args) => {
@@ -34,13 +38,15 @@ export const connectionTools = {
34
38
  d.compatibility_level, d.collation_name, d.create_date
35
39
  ORDER BY d.name
36
40
  `;
37
- return await client.query(query);
41
+ return await client.query(query, undefined, args.server);
38
42
  },
39
43
  },
40
44
  get_server_info: {
41
45
  description: 'Get SQL Server instance information including version, edition, and configuration',
42
- inputSchema: z.object({}),
43
- handler: async (client) => {
46
+ inputSchema: z.object({
47
+ server: serverParam,
48
+ }),
49
+ handler: async (client, args) => {
44
50
  const query = `
45
51
  SELECT
46
52
  SERVERPROPERTY('ServerName') as server_name,
@@ -55,7 +61,7 @@ export const connectionTools = {
55
61
  @@MAX_CONNECTIONS as max_connections,
56
62
  (SELECT COUNT(*) FROM sys.dm_exec_connections) as current_connections
57
63
  `;
58
- const result = await client.query(query);
64
+ const result = await client.query(query, undefined, args.server);
59
65
  return result[0];
60
66
  },
61
67
  },
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/tools/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,eAAe,EAAE;QACf,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC;QAChB,CAAC;KACF;IAED,cAAc,EAAE;QACd,WAAW,EAAE,0EAA0E;QACvF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wDAAwD,CAAC;SACxH,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAiC,EAAE,EAAE;YACxE,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa;gBACrC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,2DAA2D,CAAC;YAEhE,MAAM,KAAK,GAAG;;;;;;;;;;;;UAYV,YAAY;;;;OAIf,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,eAAe,EAAE;QACf,WAAW,EAAE,mFAAmF;QAChG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG;;;;;;;;;;;;;OAab,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/tools/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,wCAAwC;AACxC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iGAAiG,CAAC,CAAC;AAEtJ,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,eAAe,EAAE;QACf,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,WAAW;SACpB,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAyB,EAAE,EAAE;YAChE,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;KACF;IAED,cAAc,EAAE;QACd,WAAW,EAAE,0EAA0E;QACvF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,WAAW;YACnB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wDAAwD,CAAC;SACxH,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAkD,EAAE,EAAE;YACzF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa;gBACrC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,2DAA2D,CAAC;YAEhE,MAAM,KAAK,GAAG;;;;;;;;;;;;UAYV,YAAY;;;;OAIf,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,mFAAmF;QAChG,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;;;;;;;;;;;;;OAab,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;KACF;CACF,CAAC"}
@@ -3,8 +3,16 @@ import { MssqlClient } from '../mssqlClient.js';
3
3
  export declare const healthTools: {
4
4
  get_database_states: {
5
5
  description: string;
6
- inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
7
- handler: (client: MssqlClient) => Promise<{
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
  summary: {
9
17
  total: number;
10
18
  critical: number;
@@ -19,29 +27,49 @@ export declare const healthTools: {
19
27
  get_disk_space: {
20
28
  description: string;
21
29
  inputSchema: z.ZodObject<{
30
+ server: z.ZodOptional<z.ZodString>;
22
31
  database: z.ZodOptional<z.ZodString>;
23
32
  }, "strip", z.ZodTypeAny, {
24
33
  database?: string | undefined;
34
+ server?: string | undefined;
25
35
  }, {
26
36
  database?: string | undefined;
37
+ server?: string | undefined;
27
38
  }>;
28
39
  handler: (client: MssqlClient, args: {
40
+ server?: string;
29
41
  database?: string;
30
- }) => Promise<import("mssql").IRecordSet<unknown>[]>;
42
+ }) => Promise<Record<string, unknown>[]>;
31
43
  };
32
44
  get_memory_usage: {
33
45
  description: string;
34
- inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
35
- handler: (client: MssqlClient) => Promise<{
36
- serverMemory: import("mssql").IRecordSet<unknown>;
37
- topMemoryClerks: import("mssql").IRecordSet<unknown>[];
38
- bufferPoolByDatabase: import("mssql").IRecordSet<unknown>[];
46
+ inputSchema: z.ZodObject<{
47
+ server: z.ZodOptional<z.ZodString>;
48
+ }, "strip", z.ZodTypeAny, {
49
+ server?: string | undefined;
50
+ }, {
51
+ server?: string | undefined;
52
+ }>;
53
+ handler: (client: MssqlClient, args: {
54
+ server?: string;
55
+ }) => Promise<{
56
+ serverMemory: Record<string, unknown>;
57
+ topMemoryClerks: Record<string, unknown>[];
58
+ bufferPoolByDatabase: Record<string, unknown>[];
39
59
  }>;
40
60
  };
41
61
  get_log_space: {
42
62
  description: string;
43
- inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
44
- handler: (client: MssqlClient) => Promise<{
63
+ inputSchema: z.ZodObject<{
64
+ server: z.ZodOptional<z.ZodString>;
65
+ }, "strip", z.ZodTypeAny, {
66
+ server?: string | undefined;
67
+ }, {
68
+ server?: string | undefined;
69
+ }>;
70
+ handler: (client: MssqlClient, args: {
71
+ server?: string;
72
+ }) => Promise<{
45
73
  summary: {
46
74
  total: number;
47
75
  critical: number;
@@ -59,13 +87,17 @@ export declare const healthTools: {
59
87
  get_backup_status: {
60
88
  description: string;
61
89
  inputSchema: z.ZodObject<{
90
+ server: z.ZodOptional<z.ZodString>;
62
91
  maxAgeDays: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
63
92
  }, "strip", z.ZodTypeAny, {
64
93
  maxAgeDays: number;
94
+ server?: string | undefined;
65
95
  }, {
96
+ server?: string | undefined;
66
97
  maxAgeDays?: number | undefined;
67
98
  }>;
68
99
  handler: (client: MssqlClient, args: {
100
+ server?: string;
69
101
  maxAgeDays?: number;
70
102
  }) => Promise<{
71
103
  summary: {
@@ -1 +1 @@
1
- {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAO,MAAM,WAAW;;;;0BAII,WAAW;;;;;;;;+BAwBkB,MAAM;;;;;;;;;;;;;0BAqBnC,WAAW,QAAQ;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;0BAmCxC,WAAW;;;;;;;;;0BAiDX,WAAW;;;;;;;;iCAMd,MAAM;iCACN,MAAM;sCACD,MAAM;wBACpB,MAAM;;;;;;;;;;;;;0BA+BM,WAAW,QAAQ;YAAE,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;+BAqB/C,MAAM;gCACL,MAAM;kCACJ,IAAI,GAAG,IAAI;kCACX,IAAI,GAAG,IAAI;iCACZ,IAAI,GAAG,IAAI;iCACX,MAAM,GAAG,IAAI;iCACb,MAAM,GAAG,IAAI;;;;CAwBrC,CAAC"}
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,eAAO,MAAM,WAAW;;;;;;;;;;0BAMI,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;+BAwBT,MAAM;;;;;;;;;;;;;;;;0BAsBnC,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;0BAqCzD,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;0BAmDtC,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;iCAMzC,MAAM;iCACN,MAAM;sCACD,MAAM;wBACpB,MAAM;;;;;;;;;;;;;;;;0BAgCM,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;+BAqBhE,MAAM;gCACL,MAAM;kCACJ,IAAI,GAAG,IAAI;kCACX,IAAI,GAAG,IAAI;iCACZ,IAAI,GAAG,IAAI;iCACX,MAAM,GAAG,IAAI;iCACb,MAAM,GAAG,IAAI;;;;CAwBrC,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 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
- handler: async (client) => {
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
- handler: async (client) => {
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
- handler: async (client) => {
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) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,5 @@ export { performanceTools } from './performance.js';
4
4
  export { healthTools } from './health.js';
5
5
  export { jobTools } from './jobs.js';
6
6
  export { availabilityTools } from './availability.js';
7
+ export { schemaTools } from './schema.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -4,4 +4,5 @@ export { performanceTools } from './performance.js';
4
4
  export { healthTools } from './health.js';
5
5
  export { jobTools } from './jobs.js';
6
6
  export { availabilityTools } from './availability.js';
7
+ export { schemaTools } from './schema.js';
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
@@ -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<import("mssql").IRecordSet<unknown>[]>;
19
+ }) => Promise<Record<string, unknown>[]>;
16
20
  };
17
21
  get_running_jobs: {
18
22
  description: string;
19
- inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
20
- handler: (client: MssqlClient) => Promise<import("mssql").IRecordSet<unknown>[]>;
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<import("mssql").IRecordSet<unknown>[]>;
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<import("mssql").IRecordSet<unknown>[]>;
70
+ }) => Promise<Record<string, unknown>[]>;
51
71
  };
52
72
  };
53
73
  //# sourceMappingURL=jobs.d.ts.map
@@ -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;AAEhD,eAAO,MAAM,QAAQ;;;;;;;;;;0BAMO,WAAW,QAAQ;YAAE,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;0BAiE5C,WAAW;;;;;;;;;;;0BA8BX,WAAW,QAAQ;YAAE,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;0BAmCrC,WAAW,QAAQ;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAA;SAAE;;CA8B/E,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"}
@@ -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
- handler: async (client) => {
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
  };
@@ -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,IAA+B,EAAE,EAAE;YACtE,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,CAAC,CAAC;QACnC,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EAAE,+CAA+C;QAC5D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;OAkBb,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,eAAe,EAAE;QACf,WAAW,EAAE,gEAAgE;QAC7E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,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,IAAwB,EAAE,EAAE;YAC/D,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;wCAoBoB,IAAI,CAAC,KAAK,IAAI,EAAE;;OAEjD,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,eAAe,EAAE;QACf,WAAW,EAAE,0CAA0C;QACvD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,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,IAAuC,EAAE,EAAE;YAC9E,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,CAAC,CAAC;QAC9D,CAAC;KACF;CACF,CAAC"}
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<{}, "strip", z.ZodTypeAny, {}, {}>;
7
- handler: (client: MssqlClient) => Promise<{
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: import("mssql").IRecordSet<unknown>[];
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<import("mssql").IRecordSet<unknown>[]>;
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<import("mssql").IRecordSet<unknown>[]>;
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<import("mssql").IRecordSet<unknown>[]>;
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;AAEhD,eAAO,MAAM,gBAAgB;;;;0BAID,WAAW;;;;;;;;;;;;;;;;;0BAoDX,WAAW,QAAQ;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;;;;;;;0BA2C1D,WAAW,QAAQ;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;0BAmCvC,WAAW,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE;;CAkCxF,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"}