@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 +70 -1
- package/dist/config.d.ts +2 -2
- package/dist/config.js +4 -4
- package/dist/config.js.map +1 -1
- package/dist/index.js +48 -16
- package/dist/index.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/schema.d.ts +194 -0
- package/dist/tools/schema.d.ts.map +1 -0
- package/dist/tools/schema.js +364 -0
- package/dist/tools/schema.js.map +1 -0
- package/package.json +2 -2
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
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":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
package/dist/tools/index.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE;QACV,WAAW,EAAE,oEAAoE;QACjF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC3E,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,qDAAqD,CAAC;SACvH,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAuE,EAAE,EAAE;YAC9G,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAExE,MAAM,KAAK,GAAG;eACL,IAAI,CAAC,QAAQ;;;;;;;YAOhB,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;;;WAIzB,CAAC,CAAC,CAAC,EAAE;;;;;;;;UAQN,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;;SAGzB,CAAC,CAAC,CAAC,EAAE;;UAEJ,YAAY;;UAEZ,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;;OAE1C,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,WAAW,EAAE;QACX,WAAW,EAAE,6CAA6C;QAC1D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YACxC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;SACrE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAA0D,EAAE,EAAE;YACjG,MAAM,KAAK,GAAG;eACL,IAAI,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyCrB,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;QACxF,CAAC;KACF;IAED,qBAAqB,EAAE;QACrB,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YAC5F,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;SAC7F,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAiF,EAAE,EAAE;YACxH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAErE,MAAM,KAAK,GAAG;eACL,IAAI,CAAC,QAAQ;;;;;;;YAOhB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,EAAE;;;;;UAKzE,YAAY;UACZ,UAAU;;OAEb,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,aAAa,EAAE;QACb,WAAW,EAAE,qDAAqD;QAClE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC/D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC7G,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;SAC5F,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAiF,EAAE,EAAE;YACxH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,MAAM,OAAO,GAA2B;gBACtC,QAAQ,EAAE,mBAAmB;gBAC7B,OAAO,EAAE,mBAAmB;gBAC5B,QAAQ,EAAE,mBAAmB;gBAC7B,KAAK,EAAE,EAAE;aACV,CAAC;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;YAE/C,MAAM,KAAK,GAAG;eACL,IAAI,CAAC,QAAQ;;;;;;;;;;;;;YAahB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,EAAE;;;;;;UAMzE,YAAY;UACZ,UAAU;;OAEb,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC/D,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;SACjG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAwE,EAAE,EAAE;YAC/G,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAExE,MAAM,KAAK,GAAG;eACL,IAAI,CAAC,QAAQ;;;;;;;YAOhB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,EAAE;;;;;;;UAO/E,YAAY;;OAEf,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;SACjG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAA0C,EAAE,EAAE;YACjF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK;gBAC5B,CAAC,CAAC,4CAA4C,IAAI,CAAC,KAAK,gDAAgD,IAAI,CAAC,KAAK,IAAI;gBACtH,CAAC,CAAC,EAAE,CAAC;YAEP,MAAM,KAAK,GAAG;eACL,IAAI,CAAC,QAAQ;;;;;;;;;;;;;;;;;UAiBlB,WAAW;;OAEd,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,WAAW,EAAE;QACX,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;SACrE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAA2D,EAAE,EAAE;YAClG,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAExE,MAAM,KAAK,GAAG;eACL,IAAI,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAkClB,WAAW;UACX,YAAY;;OAEf,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,mBAAmB,EAAE;QACnB,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;YACnE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;SACtG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAiD,EAAE,EAAE;YACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iCAAiC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;YAE3E,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;UAyBV,QAAQ;UACR,YAAY;;OAEf,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;IAED,YAAY,EAAE;QACZ,WAAW,EAAE,6BAA6B;QAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC7D,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;SACpG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAmB,EAAE,IAAuE,EAAE,EAAE;YAC9G,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,oCAAoC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAExF,MAAM,KAAK,GAAG;eACL,IAAI,CAAC,QAAQ;;;;;;;;;;;;;YAahB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,EAAE;;;UAGjF,WAAW;;OAEd,CAAC;YAEF,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;KACF;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elad-nofy/mssql-mcp",
|
|
3
|
-
"version": "1.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"
|