@elad-nofy/mssql-mcp 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,6 +14,17 @@ MCP (Model Context Protocol) server for Microsoft SQL Server. Provides AI assist
14
14
  - **get_expensive_queries** - Find resource-intensive queries from plan cache
15
15
  - **get_running_queries** - View currently executing queries
16
16
 
17
+ ### Schema Exploration
18
+ - **get_tables** - List tables with row counts, sizes, and metadata
19
+ - **get_columns** - Column definitions for a table (types, keys, defaults)
20
+ - **get_stored_procedures** - List and view stored procedure code
21
+ - **get_functions** - List and view user-defined function code
22
+ - **get_views** - List and view definitions
23
+ - **get_foreign_keys** - Table relationships and constraints
24
+ - **get_indexes** - Index definitions with included columns
25
+ - **get_triggers** - Table triggers with event types
26
+ - **get_connected_users** - Active sessions and connections
27
+
17
28
  ### Performance Analysis
18
29
  - **get_blocking** - Identify blocking chains and deadlocks
19
30
  - **get_wait_stats** - Analyze wait statistics for bottlenecks
@@ -72,8 +83,22 @@ MSSQL_REQUEST_TIMEOUT=30000 # Default: 30000ms
72
83
 
73
84
  ### Claude Code CLI
74
85
 
75
- Add to your MCP settings:
86
+ **Windows:**
87
+ ```json
88
+ {
89
+ "mcpServers": {
90
+ "mssql": {
91
+ "command": "cmd",
92
+ "args": ["/c", "npx", "@elad-nofy/mssql-mcp"],
93
+ "env": {
94
+ "MSSQL_HOST": "your-server.domain.com"
95
+ }
96
+ }
97
+ }
98
+ }
99
+ ```
76
100
 
101
+ **macOS/Linux:**
77
102
  ```json
78
103
  {
79
104
  "mcpServers": {
@@ -113,6 +138,22 @@ GRANT SELECT ON SCHEMA::dbo TO [DOMAIN\ServiceAccount];
113
138
 
114
139
  ## Example Usage
115
140
 
141
+ ### Explore Database Schema
142
+
143
+ ```
144
+ "What tables are in the Orders database?"
145
+ → Uses get_tables to list all tables with row counts
146
+
147
+ "Show me the columns in the Customers table"
148
+ → Uses get_columns to show column definitions
149
+
150
+ "What stored procedures exist for order processing?"
151
+ → Uses get_stored_procedures with name filter
152
+
153
+ "How are the tables related?"
154
+ → Uses get_foreign_keys to map relationships
155
+ ```
156
+
116
157
  ### Investigate Performance Issues
117
158
 
118
159
  ```
@@ -149,6 +190,33 @@ GRANT SELECT ON SCHEMA::dbo TO [DOMAIN\ServiceAccount];
149
190
  → Uses get_running_jobs to check status
150
191
  ```
151
192
 
193
+ ## Troubleshooting
194
+
195
+ ### Connection Issues
196
+
197
+ **"Login failed for user"**
198
+ - Verify SQL Server allows the authentication type (Windows/SQL)
199
+ - Check the account has server-level permissions
200
+ - For Windows Auth, ensure the process runs as the correct user
201
+
202
+ **"Connection timeout"**
203
+ - Verify network connectivity to SQL Server
204
+ - Check firewall allows port 1433 (or custom port)
205
+ - Increase `MSSQL_CONNECTION_TIMEOUT` if needed
206
+
207
+ **"Cannot open database"**
208
+ - Verify the account has access to the database
209
+ - Check database is online: `SELECT state_desc FROM sys.databases`
210
+
211
+ ### Permission Errors
212
+
213
+ **"The server principal is not able to access the database"**
214
+ - Create a user in the target database for the login
215
+ - Grant appropriate permissions
216
+
217
+ **"VIEW SERVER STATE permission denied"**
218
+ - Grant at server level: `GRANT VIEW SERVER STATE TO [login]`
219
+
152
220
  ## Development
153
221
 
154
222
  ```bash
@@ -168,6 +236,7 @@ npm run dev
168
236
  - **No secrets in code** - All credentials via environment variables
169
237
  - **Parameterized queries** - Protection against SQL injection
170
238
  - **Blocked dangerous operations** - INSERT, UPDATE, DELETE, EXEC prevented
239
+ - **Graceful shutdown** - Connection pool properly closed on exit
171
240
 
172
241
  ## License
173
242
 
package/dist/config.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- declare const configSchema: z.ZodObject<{
2
+ declare const ConfigSchema: z.ZodObject<{
3
3
  host: z.ZodString;
4
4
  port: z.ZodDefault<z.ZodNumber>;
5
5
  database: z.ZodDefault<z.ZodString>;
@@ -30,7 +30,7 @@ declare const configSchema: z.ZodObject<{
30
30
  connectionTimeout?: number | undefined;
31
31
  requestTimeout?: number | undefined;
32
32
  }>;
33
- export type Config = z.infer<typeof configSchema>;
33
+ export type Config = z.infer<typeof ConfigSchema>;
34
34
  export declare function loadConfig(): Config;
35
35
  export {};
36
36
  //# sourceMappingURL=config.d.ts.map
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- const configSchema = z.object({
2
+ const ConfigSchema = z.object({
3
3
  host: z.string().min(1, 'MSSQL_HOST is required'),
4
4
  port: z.coerce.number().default(1433),
5
5
  database: z.string().default('master'),
@@ -22,10 +22,10 @@ export function loadConfig() {
22
22
  connectionTimeout: process.env.MSSQL_CONNECTION_TIMEOUT,
23
23
  requestTimeout: process.env.MSSQL_REQUEST_TIMEOUT,
24
24
  };
25
- const result = configSchema.safeParse(raw);
25
+ const result = ConfigSchema.safeParse(raw);
26
26
  if (!result.success) {
27
- const errors = result.error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ');
28
- throw new Error(`Configuration error: ${errors}`);
27
+ const errors = result.error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join('\n');
28
+ throw new Error(`Configuration error:\n${errors}`);
29
29
  }
30
30
  return result.data;
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1C,sBAAsB,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxD,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACjD,CAAC,CAAC;AAIH,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QAC5B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QAC5B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QACpC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QAC5B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;QAClC,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B;QAClE,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACvD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;KAClD,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wBAAwB,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1C,sBAAsB,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxD,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACnD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACjD,CAAC,CAAC;AAIH,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QAC5B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QAC5B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QACpC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU;QAC5B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QACpC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;QAClC,sBAAsB,EAAE,OAAO,CAAC,GAAG,CAAC,8BAA8B;QAClE,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;QACvD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;KAClD,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5F,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
package/dist/index.js CHANGED
@@ -2,11 +2,10 @@
2
2
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
4
  import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
- import { z } from 'zod';
6
5
  import { zodToJsonSchema } from 'zod-to-json-schema';
7
6
  import { loadConfig } from './config.js';
8
7
  import { MssqlClient } from './mssqlClient.js';
9
- import { connectionTools, queryTools, performanceTools, healthTools, jobTools, availabilityTools, } from './tools/index.js';
8
+ import { connectionTools, queryTools, performanceTools, healthTools, jobTools, availabilityTools, schemaTools, } from './tools/index.js';
10
9
  // Combine all tools
11
10
  const allTools = {
12
11
  ...connectionTools,
@@ -15,6 +14,7 @@ const allTools = {
15
14
  ...healthTools,
16
15
  ...jobTools,
17
16
  ...availabilityTools,
17
+ ...schemaTools,
18
18
  };
19
19
  // Initialize config and client
20
20
  const config = loadConfig();
@@ -30,11 +30,17 @@ const server = new Server({
30
30
  });
31
31
  // List available tools
32
32
  server.setRequestHandler(ListToolsRequestSchema, async () => {
33
- const tools = Object.entries(allTools).map(([name, tool]) => ({
34
- name,
35
- description: tool.description,
36
- inputSchema: zodToJsonSchema(tool.inputSchema),
37
- }));
33
+ const tools = Object.entries(allTools).map(([name, tool]) => {
34
+ const fullSchema = zodToJsonSchema(tool.inputSchema, {
35
+ $refStrategy: 'none',
36
+ });
37
+ const { $schema, ...inputSchema } = fullSchema;
38
+ return {
39
+ name,
40
+ description: tool.description,
41
+ inputSchema,
42
+ };
43
+ });
38
44
  return { tools };
39
45
  });
40
46
  // Handle tool calls
@@ -42,13 +48,35 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
42
48
  const toolName = request.params.name;
43
49
  const tool = allTools[toolName];
44
50
  if (!tool) {
45
- throw new Error(`Unknown tool: ${toolName}`);
51
+ return {
52
+ content: [
53
+ {
54
+ type: 'text',
55
+ text: JSON.stringify({ error: `Unknown tool: ${toolName}` }, null, 2),
56
+ },
57
+ ],
58
+ isError: true,
59
+ };
60
+ }
61
+ // Validate input using safeParse
62
+ const parseResult = tool.inputSchema.safeParse(request.params.arguments || {});
63
+ if (!parseResult.success) {
64
+ const errors = parseResult.error.errors
65
+ .map(e => `${e.path.join('.')}: ${e.message}`)
66
+ .join('\n');
67
+ return {
68
+ content: [
69
+ {
70
+ type: 'text',
71
+ text: JSON.stringify({ error: `Validation error:\n${errors}` }, null, 2),
72
+ },
73
+ ],
74
+ isError: true,
75
+ };
46
76
  }
47
77
  try {
48
- // Validate input
49
- const args = tool.inputSchema.parse(request.params.arguments || {});
50
78
  // Execute tool handler
51
- const result = await tool.handler(client, args);
79
+ const result = await tool.handler(client, parseResult.data);
52
80
  return {
53
81
  content: [
54
82
  {
@@ -59,11 +87,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
59
87
  };
60
88
  }
61
89
  catch (error) {
62
- const message = error instanceof z.ZodError
63
- ? `Validation error: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`
64
- : error instanceof Error
65
- ? error.message
66
- : String(error);
90
+ const message = error instanceof Error ? error.message : String(error);
67
91
  return {
68
92
  content: [
69
93
  {
@@ -75,6 +99,14 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
75
99
  };
76
100
  }
77
101
  });
102
+ // Graceful shutdown handler
103
+ async function shutdown() {
104
+ console.error('Shutting down MSSQL MCP server...');
105
+ await client.close();
106
+ process.exit(0);
107
+ }
108
+ process.on('SIGTERM', shutdown);
109
+ process.on('SIGINT', shutdown);
78
110
  // Start server
79
111
  async function main() {
80
112
  const transport = new StdioServerTransport();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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"}
@@ -0,0 +1,194 @@
1
+ import { z } from 'zod';
2
+ import { MssqlClient } from '../mssqlClient.js';
3
+ export declare const schemaTools: {
4
+ get_tables: {
5
+ description: string;
6
+ inputSchema: z.ZodObject<{
7
+ database: z.ZodString;
8
+ schema: z.ZodOptional<z.ZodString>;
9
+ includeRowCounts: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ database: string;
12
+ includeRowCounts: boolean;
13
+ schema?: string | undefined;
14
+ }, {
15
+ database: string;
16
+ schema?: string | undefined;
17
+ includeRowCounts?: boolean | undefined;
18
+ }>;
19
+ handler: (client: MssqlClient, args: {
20
+ database: string;
21
+ schema?: string;
22
+ includeRowCounts?: boolean;
23
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
24
+ };
25
+ get_columns: {
26
+ description: string;
27
+ inputSchema: z.ZodObject<{
28
+ database: z.ZodString;
29
+ table: z.ZodString;
30
+ schema: z.ZodDefault<z.ZodOptional<z.ZodString>>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ database: string;
33
+ schema: string;
34
+ table: string;
35
+ }, {
36
+ database: string;
37
+ table: string;
38
+ schema?: string | undefined;
39
+ }>;
40
+ handler: (client: MssqlClient, args: {
41
+ database: string;
42
+ table: string;
43
+ schema?: string;
44
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
45
+ };
46
+ get_stored_procedures: {
47
+ description: string;
48
+ inputSchema: z.ZodObject<{
49
+ database: z.ZodString;
50
+ schema: z.ZodOptional<z.ZodString>;
51
+ name: z.ZodOptional<z.ZodString>;
52
+ includeCode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
53
+ }, "strip", z.ZodTypeAny, {
54
+ database: string;
55
+ includeCode: boolean;
56
+ schema?: string | undefined;
57
+ name?: string | undefined;
58
+ }, {
59
+ database: string;
60
+ schema?: string | undefined;
61
+ name?: string | undefined;
62
+ includeCode?: boolean | undefined;
63
+ }>;
64
+ handler: (client: MssqlClient, args: {
65
+ database: string;
66
+ schema?: string;
67
+ name?: string;
68
+ includeCode?: boolean;
69
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
70
+ };
71
+ get_functions: {
72
+ description: string;
73
+ inputSchema: z.ZodObject<{
74
+ database: z.ZodString;
75
+ schema: z.ZodOptional<z.ZodString>;
76
+ type: z.ZodDefault<z.ZodOptional<z.ZodEnum<["all", "scalar", "table", "inline"]>>>;
77
+ includeCode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
78
+ }, "strip", z.ZodTypeAny, {
79
+ database: string;
80
+ type: "table" | "all" | "scalar" | "inline";
81
+ includeCode: boolean;
82
+ schema?: string | undefined;
83
+ }, {
84
+ database: string;
85
+ type?: "table" | "all" | "scalar" | "inline" | undefined;
86
+ schema?: string | undefined;
87
+ includeCode?: boolean | undefined;
88
+ }>;
89
+ handler: (client: MssqlClient, args: {
90
+ database: string;
91
+ schema?: string;
92
+ type?: string;
93
+ includeCode?: boolean;
94
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
95
+ };
96
+ get_views: {
97
+ description: string;
98
+ inputSchema: z.ZodObject<{
99
+ database: z.ZodString;
100
+ schema: z.ZodOptional<z.ZodString>;
101
+ includeDefinition: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
102
+ }, "strip", z.ZodTypeAny, {
103
+ database: string;
104
+ includeDefinition: boolean;
105
+ schema?: string | undefined;
106
+ }, {
107
+ database: string;
108
+ schema?: string | undefined;
109
+ includeDefinition?: boolean | undefined;
110
+ }>;
111
+ handler: (client: MssqlClient, args: {
112
+ database: string;
113
+ schema?: string;
114
+ includeDefinition?: boolean;
115
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
116
+ };
117
+ get_foreign_keys: {
118
+ description: string;
119
+ inputSchema: z.ZodObject<{
120
+ database: z.ZodString;
121
+ table: z.ZodOptional<z.ZodString>;
122
+ }, "strip", z.ZodTypeAny, {
123
+ database: string;
124
+ table?: string | undefined;
125
+ }, {
126
+ database: string;
127
+ table?: string | undefined;
128
+ }>;
129
+ handler: (client: MssqlClient, args: {
130
+ database: string;
131
+ table?: string;
132
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
133
+ };
134
+ get_indexes: {
135
+ description: string;
136
+ inputSchema: z.ZodObject<{
137
+ database: z.ZodString;
138
+ table: z.ZodOptional<z.ZodString>;
139
+ schema: z.ZodDefault<z.ZodOptional<z.ZodString>>;
140
+ }, "strip", z.ZodTypeAny, {
141
+ database: string;
142
+ schema: string;
143
+ table?: string | undefined;
144
+ }, {
145
+ database: string;
146
+ schema?: string | undefined;
147
+ table?: string | undefined;
148
+ }>;
149
+ handler: (client: MssqlClient, args: {
150
+ database: string;
151
+ table?: string;
152
+ schema?: string;
153
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
154
+ };
155
+ get_connected_users: {
156
+ description: string;
157
+ inputSchema: z.ZodObject<{
158
+ database: z.ZodOptional<z.ZodString>;
159
+ activeOnly: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
160
+ }, "strip", z.ZodTypeAny, {
161
+ activeOnly: boolean;
162
+ database?: string | undefined;
163
+ }, {
164
+ database?: string | undefined;
165
+ activeOnly?: boolean | undefined;
166
+ }>;
167
+ handler: (client: MssqlClient, args: {
168
+ database?: string;
169
+ activeOnly?: boolean;
170
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
171
+ };
172
+ get_triggers: {
173
+ description: string;
174
+ inputSchema: z.ZodObject<{
175
+ database: z.ZodString;
176
+ table: z.ZodOptional<z.ZodString>;
177
+ includeDefinition: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
178
+ }, "strip", z.ZodTypeAny, {
179
+ database: string;
180
+ includeDefinition: boolean;
181
+ table?: string | undefined;
182
+ }, {
183
+ database: string;
184
+ table?: string | undefined;
185
+ includeDefinition?: boolean | undefined;
186
+ }>;
187
+ handler: (client: MssqlClient, args: {
188
+ database: string;
189
+ table?: string;
190
+ includeDefinition?: boolean;
191
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
192
+ };
193
+ };
194
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;0BAQI,WAAW,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;;;;;;;;;;;;;0BA6CpF,WAAW,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;0BAyDvE,WAAW,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;0BAkC9F,WAAW,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;;;;;;;;;;;;;0BA8C9F,WAAW,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;;;;;;;;;;0BAgCrF,WAAW,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;0BAsCvD,WAAW,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;0BAsDxE,WAAW,QAAQ;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,OAAO,CAAA;SAAE;;;;;;;;;;;;;;;;;0BA6C9D,WAAW,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;SAAE;;CA2B/G,CAAC"}
@@ -0,0 +1,364 @@
1
+ import { z } from 'zod';
2
+ export const schemaTools = {
3
+ get_tables: {
4
+ description: 'List all tables in a database with row counts, sizes, and metadata',
5
+ inputSchema: z.object({
6
+ database: z.string().describe('Database name'),
7
+ schema: z.string().optional().describe('Filter by schema name (e.g., dbo)'),
8
+ includeRowCounts: z.boolean().optional().default(true).describe('Include row counts (may be slow on large databases)'),
9
+ }),
10
+ handler: async (client, args) => {
11
+ const schemaFilter = args.schema ? `AND s.name = '${args.schema}'` : '';
12
+ const query = `
13
+ USE [${args.database}];
14
+
15
+ SELECT
16
+ s.name as schema_name,
17
+ t.name as table_name,
18
+ t.create_date,
19
+ t.modify_date,
20
+ ${args.includeRowCounts ? `
21
+ p.rows as row_count,
22
+ CAST(SUM(a.total_pages) * 8.0 / 1024 AS DECIMAL(10,2)) as total_size_mb,
23
+ CAST(SUM(a.used_pages) * 8.0 / 1024 AS DECIMAL(10,2)) as used_size_mb,
24
+ ` : ''}
25
+ (SELECT COUNT(*) FROM sys.columns c WHERE c.object_id = t.object_id) as column_count,
26
+ (SELECT COUNT(*) FROM sys.indexes i WHERE i.object_id = t.object_id AND i.is_primary_key = 0 AND i.type > 0) as index_count,
27
+ ISNULL((SELECT COUNT(*) FROM sys.foreign_keys fk WHERE fk.parent_object_id = t.object_id), 0) as fk_count,
28
+ OBJECTPROPERTY(t.object_id, 'TableHasPrimaryKey') as has_primary_key,
29
+ OBJECTPROPERTY(t.object_id, 'TableHasIdentity') as has_identity
30
+ FROM sys.tables t
31
+ INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
32
+ ${args.includeRowCounts ? `
33
+ LEFT JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0, 1)
34
+ LEFT JOIN sys.allocation_units a ON p.partition_id = a.container_id
35
+ ` : ''}
36
+ WHERE t.is_ms_shipped = 0
37
+ ${schemaFilter}
38
+ GROUP BY s.name, t.name, t.object_id, t.create_date, t.modify_date
39
+ ${args.includeRowCounts ? ', p.rows' : ''}
40
+ ORDER BY s.name, t.name
41
+ `;
42
+ return await client.query(query);
43
+ },
44
+ },
45
+ get_columns: {
46
+ description: 'Get column definitions for a specific table',
47
+ inputSchema: z.object({
48
+ database: z.string().describe('Database name'),
49
+ table: z.string().describe('Table name'),
50
+ schema: z.string().optional().default('dbo').describe('Schema name'),
51
+ }),
52
+ handler: async (client, args) => {
53
+ const query = `
54
+ USE [${args.database}];
55
+
56
+ SELECT
57
+ c.column_id as ordinal_position,
58
+ c.name as column_name,
59
+ t.name as data_type,
60
+ c.max_length,
61
+ c.precision,
62
+ c.scale,
63
+ c.is_nullable,
64
+ c.is_identity,
65
+ c.is_computed,
66
+ ISNULL(dc.definition, '') as default_value,
67
+ ISNULL(cc.definition, '') as computed_definition,
68
+ CASE WHEN pk.column_id IS NOT NULL THEN 1 ELSE 0 END as is_primary_key,
69
+ CASE WHEN fk.parent_column_id IS NOT NULL THEN 1 ELSE 0 END as is_foreign_key,
70
+ ISNULL(fk_ref.referenced_table, '') as fk_references,
71
+ ISNULL(ep.value, '') as description
72
+ FROM sys.columns c
73
+ INNER JOIN sys.types t ON c.user_type_id = t.user_type_id
74
+ INNER JOIN sys.tables tbl ON c.object_id = tbl.object_id
75
+ INNER JOIN sys.schemas s ON tbl.schema_id = s.schema_id
76
+ LEFT JOIN sys.default_constraints dc ON c.default_object_id = dc.object_id
77
+ LEFT JOIN sys.computed_columns cc ON c.object_id = cc.object_id AND c.column_id = cc.column_id
78
+ LEFT JOIN (
79
+ SELECT ic.object_id, ic.column_id
80
+ FROM sys.index_columns ic
81
+ INNER JOIN sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
82
+ WHERE i.is_primary_key = 1
83
+ ) pk ON c.object_id = pk.object_id AND c.column_id = pk.column_id
84
+ LEFT JOIN sys.foreign_key_columns fk ON c.object_id = fk.parent_object_id AND c.column_id = fk.parent_column_id
85
+ LEFT JOIN (
86
+ SELECT
87
+ fkc.parent_object_id,
88
+ fkc.parent_column_id,
89
+ OBJECT_SCHEMA_NAME(fkc.referenced_object_id) + '.' + OBJECT_NAME(fkc.referenced_object_id) + '.' + COL_NAME(fkc.referenced_object_id, fkc.referenced_column_id) as referenced_table
90
+ FROM sys.foreign_key_columns fkc
91
+ ) fk_ref ON c.object_id = fk_ref.parent_object_id AND c.column_id = fk_ref.parent_column_id
92
+ LEFT JOIN sys.extended_properties ep ON c.object_id = ep.major_id AND c.column_id = ep.minor_id AND ep.name = 'MS_Description'
93
+ WHERE tbl.name = @table AND s.name = @schema
94
+ ORDER BY c.column_id
95
+ `;
96
+ return await client.query(query, { table: args.table, schema: args.schema || 'dbo' });
97
+ },
98
+ },
99
+ get_stored_procedures: {
100
+ description: 'List stored procedures with optional code view',
101
+ inputSchema: z.object({
102
+ database: z.string().describe('Database name'),
103
+ schema: z.string().optional().describe('Filter by schema name'),
104
+ name: z.string().optional().describe('Filter by procedure name (supports wildcards with %)'),
105
+ includeCode: z.boolean().optional().default(false).describe('Include procedure source code'),
106
+ }),
107
+ handler: async (client, args) => {
108
+ const schemaFilter = args.schema ? `AND s.name = '${args.schema}'` : '';
109
+ const nameFilter = args.name ? `AND p.name LIKE '${args.name}'` : '';
110
+ const query = `
111
+ USE [${args.database}];
112
+
113
+ SELECT
114
+ s.name as schema_name,
115
+ p.name as procedure_name,
116
+ p.create_date,
117
+ p.modify_date,
118
+ ${args.includeCode ? 'OBJECT_DEFINITION(p.object_id) as definition,' : ''}
119
+ (SELECT COUNT(*) FROM sys.parameters pm WHERE pm.object_id = p.object_id) as parameter_count
120
+ FROM sys.procedures p
121
+ INNER JOIN sys.schemas s ON p.schema_id = s.schema_id
122
+ WHERE p.is_ms_shipped = 0
123
+ ${schemaFilter}
124
+ ${nameFilter}
125
+ ORDER BY s.name, p.name
126
+ `;
127
+ return await client.query(query);
128
+ },
129
+ },
130
+ get_functions: {
131
+ description: 'List user-defined functions with optional code view',
132
+ inputSchema: z.object({
133
+ database: z.string().describe('Database name'),
134
+ schema: z.string().optional().describe('Filter by schema name'),
135
+ type: z.enum(['all', 'scalar', 'table', 'inline']).optional().default('all').describe('Function type filter'),
136
+ includeCode: z.boolean().optional().default(false).describe('Include function source code'),
137
+ }),
138
+ handler: async (client, args) => {
139
+ const schemaFilter = args.schema ? `AND s.name = '${args.schema}'` : '';
140
+ const typeMap = {
141
+ 'scalar': "AND o.type = 'FN'",
142
+ 'table': "AND o.type = 'TF'",
143
+ 'inline': "AND o.type = 'IF'",
144
+ 'all': '',
145
+ };
146
+ const typeFilter = typeMap[args.type || 'all'];
147
+ const query = `
148
+ USE [${args.database}];
149
+
150
+ SELECT
151
+ s.name as schema_name,
152
+ o.name as function_name,
153
+ CASE o.type
154
+ WHEN 'FN' THEN 'Scalar'
155
+ WHEN 'TF' THEN 'Table-valued'
156
+ WHEN 'IF' THEN 'Inline table-valued'
157
+ ELSE o.type
158
+ END as function_type,
159
+ o.create_date,
160
+ o.modify_date,
161
+ ${args.includeCode ? 'OBJECT_DEFINITION(o.object_id) as definition,' : ''}
162
+ (SELECT COUNT(*) FROM sys.parameters pm WHERE pm.object_id = o.object_id AND pm.parameter_id > 0) as parameter_count
163
+ FROM sys.objects o
164
+ INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
165
+ WHERE o.type IN ('FN', 'TF', 'IF')
166
+ AND o.is_ms_shipped = 0
167
+ ${schemaFilter}
168
+ ${typeFilter}
169
+ ORDER BY s.name, o.name
170
+ `;
171
+ return await client.query(query);
172
+ },
173
+ },
174
+ get_views: {
175
+ description: 'List views with optional definition',
176
+ inputSchema: z.object({
177
+ database: z.string().describe('Database name'),
178
+ schema: z.string().optional().describe('Filter by schema name'),
179
+ includeDefinition: z.boolean().optional().default(false).describe('Include view definition SQL'),
180
+ }),
181
+ handler: async (client, args) => {
182
+ const schemaFilter = args.schema ? `AND s.name = '${args.schema}'` : '';
183
+ const query = `
184
+ USE [${args.database}];
185
+
186
+ SELECT
187
+ s.name as schema_name,
188
+ v.name as view_name,
189
+ v.create_date,
190
+ v.modify_date,
191
+ ${args.includeDefinition ? 'OBJECT_DEFINITION(v.object_id) as definition,' : ''}
192
+ (SELECT COUNT(*) FROM sys.columns c WHERE c.object_id = v.object_id) as column_count,
193
+ OBJECTPROPERTY(v.object_id, 'IsIndexed') as is_indexed,
194
+ OBJECTPROPERTY(v.object_id, 'IsSchemaBound') as is_schema_bound
195
+ FROM sys.views v
196
+ INNER JOIN sys.schemas s ON v.schema_id = s.schema_id
197
+ WHERE v.is_ms_shipped = 0
198
+ ${schemaFilter}
199
+ ORDER BY s.name, v.name
200
+ `;
201
+ return await client.query(query);
202
+ },
203
+ },
204
+ get_foreign_keys: {
205
+ description: 'Get foreign key relationships between tables',
206
+ inputSchema: z.object({
207
+ database: z.string().describe('Database name'),
208
+ table: z.string().optional().describe('Filter by table name (shows FKs from and to this table)'),
209
+ }),
210
+ handler: async (client, args) => {
211
+ const tableFilter = args.table
212
+ ? `AND (OBJECT_NAME(fk.parent_object_id) = '${args.table}' OR OBJECT_NAME(fk.referenced_object_id) = '${args.table}')`
213
+ : '';
214
+ const query = `
215
+ USE [${args.database}];
216
+
217
+ SELECT
218
+ fk.name as constraint_name,
219
+ OBJECT_SCHEMA_NAME(fk.parent_object_id) as from_schema,
220
+ OBJECT_NAME(fk.parent_object_id) as from_table,
221
+ COL_NAME(fkc.parent_object_id, fkc.parent_column_id) as from_column,
222
+ OBJECT_SCHEMA_NAME(fk.referenced_object_id) as to_schema,
223
+ OBJECT_NAME(fk.referenced_object_id) as to_table,
224
+ COL_NAME(fkc.referenced_object_id, fkc.referenced_column_id) as to_column,
225
+ fk.delete_referential_action_desc as on_delete,
226
+ fk.update_referential_action_desc as on_update,
227
+ fk.is_disabled,
228
+ fk.is_not_trusted
229
+ FROM sys.foreign_keys fk
230
+ INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
231
+ WHERE 1=1
232
+ ${tableFilter}
233
+ ORDER BY from_schema, from_table, constraint_name, fkc.constraint_column_id
234
+ `;
235
+ return await client.query(query);
236
+ },
237
+ },
238
+ get_indexes: {
239
+ description: 'Get index information for tables',
240
+ inputSchema: z.object({
241
+ database: z.string().describe('Database name'),
242
+ table: z.string().optional().describe('Filter by table name'),
243
+ schema: z.string().optional().default('dbo').describe('Schema name'),
244
+ }),
245
+ handler: async (client, args) => {
246
+ const tableFilter = args.table ? `AND t.name = '${args.table}'` : '';
247
+ const schemaFilter = args.schema ? `AND s.name = '${args.schema}'` : '';
248
+ const query = `
249
+ USE [${args.database}];
250
+
251
+ SELECT
252
+ s.name as schema_name,
253
+ t.name as table_name,
254
+ i.name as index_name,
255
+ i.type_desc as index_type,
256
+ i.is_unique,
257
+ i.is_primary_key,
258
+ i.is_unique_constraint,
259
+ STUFF((
260
+ SELECT ', ' + c.name + CASE WHEN ic.is_descending_key = 1 THEN ' DESC' ELSE '' END
261
+ FROM sys.index_columns ic
262
+ INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
263
+ WHERE ic.object_id = i.object_id AND ic.index_id = i.index_id AND ic.is_included_column = 0
264
+ ORDER BY ic.key_ordinal
265
+ FOR XML PATH('')
266
+ ), 1, 2, '') as key_columns,
267
+ STUFF((
268
+ SELECT ', ' + c.name
269
+ FROM sys.index_columns ic
270
+ INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
271
+ WHERE ic.object_id = i.object_id AND ic.index_id = i.index_id AND ic.is_included_column = 1
272
+ ORDER BY ic.index_column_id
273
+ FOR XML PATH('')
274
+ ), 1, 2, '') as included_columns,
275
+ i.filter_definition,
276
+ ps.row_count,
277
+ CAST(ps.used_page_count * 8.0 / 1024 AS DECIMAL(10,2)) as size_mb
278
+ FROM sys.indexes i
279
+ INNER JOIN sys.tables t ON i.object_id = t.object_id
280
+ INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
281
+ LEFT JOIN sys.dm_db_partition_stats ps ON i.object_id = ps.object_id AND i.index_id = ps.index_id
282
+ WHERE i.type > 0
283
+ ${tableFilter}
284
+ ${schemaFilter}
285
+ ORDER BY s.name, t.name, i.index_id
286
+ `;
287
+ return await client.query(query);
288
+ },
289
+ },
290
+ get_connected_users: {
291
+ description: 'Get currently connected users and sessions',
292
+ inputSchema: z.object({
293
+ database: z.string().optional().describe('Filter by database name'),
294
+ activeOnly: z.boolean().optional().default(false).describe('Only show sessions with active requests'),
295
+ }),
296
+ handler: async (client, args) => {
297
+ const dbFilter = args.database ? `AND DB_NAME(s.database_id) = '${args.database}'` : '';
298
+ const activeFilter = args.activeOnly ? 'AND r.session_id IS NOT NULL' : '';
299
+ const query = `
300
+ SELECT
301
+ s.session_id,
302
+ s.login_name,
303
+ s.host_name,
304
+ s.program_name,
305
+ DB_NAME(s.database_id) as database_name,
306
+ s.login_time,
307
+ s.last_request_start_time,
308
+ s.last_request_end_time,
309
+ s.status as session_status,
310
+ s.cpu_time as total_cpu_time,
311
+ s.memory_usage * 8 as memory_kb,
312
+ s.reads as total_reads,
313
+ s.writes as total_writes,
314
+ c.client_net_address,
315
+ c.auth_scheme,
316
+ r.status as request_status,
317
+ r.command,
318
+ r.wait_type,
319
+ r.blocking_session_id
320
+ FROM sys.dm_exec_sessions s
321
+ LEFT JOIN sys.dm_exec_connections c ON s.session_id = c.session_id
322
+ LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
323
+ WHERE s.is_user_process = 1
324
+ ${dbFilter}
325
+ ${activeFilter}
326
+ ORDER BY s.login_time DESC
327
+ `;
328
+ return await client.query(query);
329
+ },
330
+ },
331
+ get_triggers: {
332
+ description: 'List triggers in a database',
333
+ inputSchema: z.object({
334
+ database: z.string().describe('Database name'),
335
+ table: z.string().optional().describe('Filter by table name'),
336
+ includeDefinition: z.boolean().optional().default(false).describe('Include trigger definition SQL'),
337
+ }),
338
+ handler: async (client, args) => {
339
+ const tableFilter = args.table ? `AND OBJECT_NAME(tr.parent_id) = '${args.table}'` : '';
340
+ const query = `
341
+ USE [${args.database}];
342
+
343
+ SELECT
344
+ OBJECT_SCHEMA_NAME(tr.parent_id) as schema_name,
345
+ OBJECT_NAME(tr.parent_id) as table_name,
346
+ tr.name as trigger_name,
347
+ tr.is_disabled,
348
+ tr.is_instead_of_trigger,
349
+ CASE WHEN OBJECTPROPERTY(tr.object_id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT ' ELSE '' END +
350
+ CASE WHEN OBJECTPROPERTY(tr.object_id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE ' ELSE '' END +
351
+ CASE WHEN OBJECTPROPERTY(tr.object_id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' ELSE '' END as trigger_events,
352
+ tr.create_date,
353
+ tr.modify_date
354
+ ${args.includeDefinition ? ', OBJECT_DEFINITION(tr.object_id) as definition' : ''}
355
+ FROM sys.triggers tr
356
+ WHERE tr.parent_class = 1 -- Object triggers only
357
+ ${tableFilter}
358
+ ORDER BY schema_name, table_name, trigger_name
359
+ `;
360
+ return await client.query(query);
361
+ },
362
+ },
363
+ };
364
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elad-nofy/mssql-mcp",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "MCP server for Microsoft SQL Server - Query execution, performance analysis, health monitoring",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -31,7 +31,7 @@
31
31
  "license": "MIT",
32
32
  "repository": {
33
33
  "type": "git",
34
- "url": "https://github.com/elad-nofy/mssql-mcp"
34
+ "url": "git+https://github.com/elad-nofy/mssql-mcp.git"
35
35
  },
36
36
  "bugs": {
37
37
  "url": "https://github.com/elad-nofy/mssql-mcp/issues"