@elad-nofy/mssql-mcp 1.0.0

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/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/config.d.ts +36 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +32 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +88 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/mssqlClient.d.ts +17 -0
  12. package/dist/mssqlClient.d.ts.map +1 -0
  13. package/dist/mssqlClient.js +78 -0
  14. package/dist/mssqlClient.js.map +1 -0
  15. package/dist/tools/availability.d.ts +50 -0
  16. package/dist/tools/availability.d.ts.map +1 -0
  17. package/dist/tools/availability.js +153 -0
  18. package/dist/tools/availability.js.map +1 -0
  19. package/dist/tools/connection.d.ts +32 -0
  20. package/dist/tools/connection.d.ts.map +1 -0
  21. package/dist/tools/connection.js +63 -0
  22. package/dist/tools/connection.js.map +1 -0
  23. package/dist/tools/health.d.ts +89 -0
  24. package/dist/tools/health.d.ts.map +1 -0
  25. package/dist/tools/health.js +189 -0
  26. package/dist/tools/health.js.map +1 -0
  27. package/dist/tools/index.d.ts +7 -0
  28. package/dist/tools/index.d.ts.map +1 -0
  29. package/dist/tools/index.js +7 -0
  30. package/dist/tools/index.js.map +1 -0
  31. package/dist/tools/jobs.d.ts +53 -0
  32. package/dist/tools/jobs.d.ts.map +1 -0
  33. package/dist/tools/jobs.js +161 -0
  34. package/dist/tools/jobs.js.map +1 -0
  35. package/dist/tools/performance.d.ts +60 -0
  36. package/dist/tools/performance.d.ts.map +1 -0
  37. package/dist/tools/performance.js +162 -0
  38. package/dist/tools/performance.js.map +1 -0
  39. package/dist/tools/queries.d.ts +59 -0
  40. package/dist/tools/queries.d.ts.map +1 -0
  41. package/dist/tools/queries.js +125 -0
  42. package/dist/tools/queries.js.map +1 -0
  43. package/package.json +54 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nof Yonany
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,174 @@
1
+ # MSSQL MCP Server
2
+
3
+ MCP (Model Context Protocol) server for Microsoft SQL Server. Provides AI assistants with read-only access to SQL Server for query execution, performance analysis, health monitoring, and troubleshooting.
4
+
5
+ ## Features
6
+
7
+ ### Connection & Discovery
8
+ - **test_connection** - Verify SQL Server connectivity and authentication
9
+ - **list_databases** - List all databases with status and size
10
+ - **get_server_info** - Server version, edition, and configuration
11
+
12
+ ### Query Execution
13
+ - **execute_query** - Run read-only SELECT queries (INSERT/UPDATE/DELETE blocked)
14
+ - **get_expensive_queries** - Find resource-intensive queries from plan cache
15
+ - **get_running_queries** - View currently executing queries
16
+
17
+ ### Performance Analysis
18
+ - **get_blocking** - Identify blocking chains and deadlocks
19
+ - **get_wait_stats** - Analyze wait statistics for bottlenecks
20
+ - **get_cpu_usage** - CPU usage history from ring buffer
21
+ - **get_index_usage** - Find unused or missing indexes
22
+
23
+ ### Health Monitoring
24
+ - **get_database_states** - Database health and status
25
+ - **get_disk_space** - Data and log file space usage
26
+ - **get_memory_usage** - Buffer pool and memory clerk stats
27
+ - **get_log_space** - Transaction log usage
28
+ - **get_backup_status** - Last backup times and status
29
+
30
+ ### SQL Agent Jobs
31
+ - **list_jobs** - All SQL Agent jobs with status
32
+ - **get_running_jobs** - Currently executing jobs
33
+ - **get_failed_jobs** - Recent job failures
34
+ - **get_job_history** - Execution history for a job
35
+
36
+ ### Availability Groups
37
+ - **get_ag_status** - Always On AG health and sync status
38
+ - **get_replica_states** - Detailed replica information
39
+ - **get_cluster_status** - WSFC cluster status
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ npx @elad-nofy/mssql-mcp
45
+ ```
46
+
47
+ ## Configuration
48
+
49
+ ### Environment Variables
50
+
51
+ ```bash
52
+ # Required
53
+ MSSQL_HOST=your-server.domain.com
54
+
55
+ # Optional
56
+ MSSQL_PORT=1433 # Default: 1433
57
+ MSSQL_DATABASE=master # Default: master
58
+
59
+ # Authentication - Windows Auth (default)
60
+ # Leave MSSQL_USER and MSSQL_PASSWORD empty for Windows Authentication
61
+
62
+ # Authentication - SQL Auth
63
+ MSSQL_USER=your_username
64
+ MSSQL_PASSWORD=your_password
65
+
66
+ # Connection Options
67
+ MSSQL_ENCRYPT=false # Default: false
68
+ MSSQL_TRUST_SERVER_CERTIFICATE=true # Default: true
69
+ MSSQL_CONNECTION_TIMEOUT=30000 # Default: 30000ms
70
+ MSSQL_REQUEST_TIMEOUT=30000 # Default: 30000ms
71
+ ```
72
+
73
+ ### Claude Code CLI
74
+
75
+ Add to your MCP settings:
76
+
77
+ ```json
78
+ {
79
+ "mcpServers": {
80
+ "mssql": {
81
+ "command": "npx",
82
+ "args": ["@elad-nofy/mssql-mcp"],
83
+ "env": {
84
+ "MSSQL_HOST": "your-server.domain.com"
85
+ }
86
+ }
87
+ }
88
+ }
89
+ ```
90
+
91
+ ### Windows Authentication
92
+
93
+ For Windows Authentication, run the MCP server under an account with SQL Server access. The server will use the process credentials automatically.
94
+
95
+ ### Required Permissions
96
+
97
+ The SQL Server login needs these permissions:
98
+ - `VIEW SERVER STATE` - For DMVs (wait stats, blocking, etc.)
99
+ - `VIEW DATABASE STATE` - For database-level DMVs
100
+ - `SELECT` on `msdb` - For SQL Agent job information
101
+
102
+ Example:
103
+ ```sql
104
+ USE master;
105
+ CREATE LOGIN [DOMAIN\ServiceAccount] FROM WINDOWS;
106
+ GRANT VIEW SERVER STATE TO [DOMAIN\ServiceAccount];
107
+ GRANT VIEW ANY DATABASE TO [DOMAIN\ServiceAccount];
108
+
109
+ USE msdb;
110
+ CREATE USER [DOMAIN\ServiceAccount] FOR LOGIN [DOMAIN\ServiceAccount];
111
+ GRANT SELECT ON SCHEMA::dbo TO [DOMAIN\ServiceAccount];
112
+ ```
113
+
114
+ ## Example Usage
115
+
116
+ ### Investigate Performance Issues
117
+
118
+ ```
119
+ "Check for blocking on PROD-SQL-01"
120
+ → Uses get_blocking to show blocking chains
121
+
122
+ "What are the top CPU-consuming queries?"
123
+ → Uses get_expensive_queries sorted by CPU
124
+
125
+ "Show me the wait stats"
126
+ → Uses get_wait_stats to identify bottlenecks
127
+ ```
128
+
129
+ ### Health Check
130
+
131
+ ```
132
+ "Are all databases healthy?"
133
+ → Uses get_database_states to check status
134
+
135
+ "When was the last backup for each database?"
136
+ → Uses get_backup_status to show backup times
137
+
138
+ "Check disk space on SQL Server"
139
+ → Uses get_disk_space for file usage
140
+ ```
141
+
142
+ ### Troubleshoot Jobs
143
+
144
+ ```
145
+ "What jobs failed in the last 24 hours?"
146
+ → Uses get_failed_jobs to show failures
147
+
148
+ "Is the nightly backup job running?"
149
+ → Uses get_running_jobs to check status
150
+ ```
151
+
152
+ ## Development
153
+
154
+ ```bash
155
+ # Install dependencies
156
+ npm install
157
+
158
+ # Build
159
+ npm run build
160
+
161
+ # Run in development (watch mode)
162
+ npm run dev
163
+ ```
164
+
165
+ ## Security Notes
166
+
167
+ - **Read-only by design** - Only SELECT queries are allowed
168
+ - **No secrets in code** - All credentials via environment variables
169
+ - **Parameterized queries** - Protection against SQL injection
170
+ - **Blocked dangerous operations** - INSERT, UPDATE, DELETE, EXEC prevented
171
+
172
+ ## License
173
+
174
+ MIT
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ declare const configSchema: z.ZodObject<{
3
+ host: z.ZodString;
4
+ port: z.ZodDefault<z.ZodNumber>;
5
+ database: z.ZodDefault<z.ZodString>;
6
+ user: z.ZodOptional<z.ZodString>;
7
+ password: z.ZodOptional<z.ZodString>;
8
+ encrypt: z.ZodDefault<z.ZodBoolean>;
9
+ trustServerCertificate: z.ZodDefault<z.ZodBoolean>;
10
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
11
+ requestTimeout: z.ZodDefault<z.ZodNumber>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ host: string;
14
+ port: number;
15
+ database: string;
16
+ encrypt: boolean;
17
+ trustServerCertificate: boolean;
18
+ connectionTimeout: number;
19
+ requestTimeout: number;
20
+ user?: string | undefined;
21
+ password?: string | undefined;
22
+ }, {
23
+ host: string;
24
+ port?: number | undefined;
25
+ database?: string | undefined;
26
+ user?: string | undefined;
27
+ password?: string | undefined;
28
+ encrypt?: boolean | undefined;
29
+ trustServerCertificate?: boolean | undefined;
30
+ connectionTimeout?: number | undefined;
31
+ requestTimeout?: number | undefined;
32
+ }>;
33
+ export type Config = z.infer<typeof configSchema>;
34
+ export declare function loadConfig(): Config;
35
+ export {};
36
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUhB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAgB,UAAU,IAAI,MAAM,CAoBnC"}
package/dist/config.js ADDED
@@ -0,0 +1,32 @@
1
+ import { z } from 'zod';
2
+ const configSchema = z.object({
3
+ host: z.string().min(1, 'MSSQL_HOST is required'),
4
+ port: z.coerce.number().default(1433),
5
+ database: z.string().default('master'),
6
+ user: z.string().optional(),
7
+ password: z.string().optional(),
8
+ encrypt: z.coerce.boolean().default(false),
9
+ trustServerCertificate: z.coerce.boolean().default(true),
10
+ connectionTimeout: z.coerce.number().default(30000),
11
+ requestTimeout: z.coerce.number().default(30000),
12
+ });
13
+ export function loadConfig() {
14
+ const raw = {
15
+ host: process.env.MSSQL_HOST,
16
+ port: process.env.MSSQL_PORT,
17
+ database: process.env.MSSQL_DATABASE,
18
+ user: process.env.MSSQL_USER,
19
+ password: process.env.MSSQL_PASSWORD,
20
+ encrypt: process.env.MSSQL_ENCRYPT,
21
+ trustServerCertificate: process.env.MSSQL_TRUST_SERVER_CERTIFICATE,
22
+ connectionTimeout: process.env.MSSQL_CONNECTION_TIMEOUT,
23
+ requestTimeout: process.env.MSSQL_REQUEST_TIMEOUT,
24
+ };
25
+ const result = configSchema.safeParse(raw);
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}`);
29
+ }
30
+ return result.data;
31
+ }
32
+ //# sourceMappingURL=config.js.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
+ import { z } from 'zod';
6
+ import { zodToJsonSchema } from 'zod-to-json-schema';
7
+ import { loadConfig } from './config.js';
8
+ import { MssqlClient } from './mssqlClient.js';
9
+ import { connectionTools, queryTools, performanceTools, healthTools, jobTools, availabilityTools, } from './tools/index.js';
10
+ // Combine all tools
11
+ const allTools = {
12
+ ...connectionTools,
13
+ ...queryTools,
14
+ ...performanceTools,
15
+ ...healthTools,
16
+ ...jobTools,
17
+ ...availabilityTools,
18
+ };
19
+ // Initialize config and client
20
+ const config = loadConfig();
21
+ const client = new MssqlClient(config);
22
+ // Create MCP server
23
+ const server = new Server({
24
+ name: 'mssql-mcp',
25
+ version: '1.0.0',
26
+ }, {
27
+ capabilities: {
28
+ tools: {},
29
+ },
30
+ });
31
+ // List available tools
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
+ }));
38
+ return { tools };
39
+ });
40
+ // Handle tool calls
41
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
42
+ const toolName = request.params.name;
43
+ const tool = allTools[toolName];
44
+ if (!tool) {
45
+ throw new Error(`Unknown tool: ${toolName}`);
46
+ }
47
+ try {
48
+ // Validate input
49
+ const args = tool.inputSchema.parse(request.params.arguments || {});
50
+ // Execute tool handler
51
+ const result = await tool.handler(client, args);
52
+ return {
53
+ content: [
54
+ {
55
+ type: 'text',
56
+ text: JSON.stringify(result, null, 2),
57
+ },
58
+ ],
59
+ };
60
+ }
61
+ 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);
67
+ return {
68
+ content: [
69
+ {
70
+ type: 'text',
71
+ text: JSON.stringify({ error: message }, null, 2),
72
+ },
73
+ ],
74
+ isError: true,
75
+ };
76
+ }
77
+ });
78
+ // Start server
79
+ async function main() {
80
+ const transport = new StdioServerTransport();
81
+ await server.connect(transport);
82
+ console.error('MSSQL MCP server running on stdio');
83
+ }
84
+ main().catch((error) => {
85
+ console.error('Fatal error:', error);
86
+ process.exit(1);
87
+ });
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import sql from 'mssql';
2
+ import { Config } from './config.js';
3
+ export declare class MssqlClient {
4
+ private pool;
5
+ private config;
6
+ constructor(config: Config);
7
+ private getSqlConfig;
8
+ connect(): Promise<sql.ConnectionPool>;
9
+ query<T = sql.IRecordSet<unknown>>(queryText: string, params?: Record<string, unknown>): Promise<T[]>;
10
+ testConnection(): Promise<{
11
+ success: boolean;
12
+ version?: string;
13
+ error?: string;
14
+ }>;
15
+ close(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=mssqlClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssqlClient.d.ts","sourceRoot":"","sources":["../src/mssqlClient.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAI1B,OAAO,CAAC,YAAY;IAoCd,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAUtC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAcrG,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IASjF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B"}
@@ -0,0 +1,78 @@
1
+ import sql from 'mssql';
2
+ export class MssqlClient {
3
+ pool = null;
4
+ config;
5
+ constructor(config) {
6
+ this.config = config;
7
+ }
8
+ getSqlConfig() {
9
+ const baseConfig = {
10
+ server: this.config.host,
11
+ port: this.config.port,
12
+ database: this.config.database,
13
+ options: {
14
+ encrypt: this.config.encrypt,
15
+ trustServerCertificate: this.config.trustServerCertificate,
16
+ },
17
+ connectionTimeout: this.config.connectionTimeout,
18
+ requestTimeout: this.config.requestTimeout,
19
+ };
20
+ // Use Windows Auth if no user/password provided
21
+ if (this.config.user && this.config.password) {
22
+ return {
23
+ ...baseConfig,
24
+ user: this.config.user,
25
+ password: this.config.password,
26
+ };
27
+ }
28
+ else {
29
+ // Windows Authentication (NTLM)
30
+ return {
31
+ ...baseConfig,
32
+ authentication: {
33
+ type: 'ntlm',
34
+ options: {
35
+ domain: '', // Uses current domain
36
+ userName: '',
37
+ password: '',
38
+ },
39
+ },
40
+ };
41
+ }
42
+ }
43
+ async connect() {
44
+ if (this.pool) {
45
+ return this.pool;
46
+ }
47
+ const sqlConfig = this.getSqlConfig();
48
+ this.pool = await sql.connect(sqlConfig);
49
+ return this.pool;
50
+ }
51
+ async query(queryText, params) {
52
+ const pool = await this.connect();
53
+ const request = pool.request();
54
+ if (params) {
55
+ for (const [key, value] of Object.entries(params)) {
56
+ request.input(key, value);
57
+ }
58
+ }
59
+ const result = await request.query(queryText);
60
+ return result.recordset;
61
+ }
62
+ async testConnection() {
63
+ try {
64
+ const result = await this.query('SELECT @@VERSION as version');
65
+ return { success: true, version: result[0]?.version };
66
+ }
67
+ catch (error) {
68
+ return { success: false, error: error instanceof Error ? error.message : String(error) };
69
+ }
70
+ }
71
+ async close() {
72
+ if (this.pool) {
73
+ await this.pool.close();
74
+ this.pool = null;
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=mssqlClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mssqlClient.js","sourceRoot":"","sources":["../src/mssqlClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { z } from 'zod';
2
+ import { MssqlClient } from '../mssqlClient.js';
3
+ export declare const availabilityTools: {
4
+ get_ag_status: {
5
+ description: string;
6
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
7
+ handler: (client: MssqlClient) => Promise<{
8
+ hadrEnabled: boolean;
9
+ message: string;
10
+ replicas?: undefined;
11
+ databases?: undefined;
12
+ } | {
13
+ hadrEnabled: boolean;
14
+ replicas: import("mssql").IRecordSet<unknown>[];
15
+ databases: import("mssql").IRecordSet<unknown>[];
16
+ message?: undefined;
17
+ }>;
18
+ };
19
+ get_replica_states: {
20
+ description: string;
21
+ inputSchema: z.ZodObject<{
22
+ agName: z.ZodOptional<z.ZodString>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ agName?: string | undefined;
25
+ }, {
26
+ agName?: string | undefined;
27
+ }>;
28
+ handler: (client: MssqlClient, args: {
29
+ agName?: string;
30
+ }) => Promise<import("mssql").IRecordSet<unknown>[]>;
31
+ };
32
+ get_cluster_status: {
33
+ description: string;
34
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
35
+ handler: (client: MssqlClient) => Promise<{
36
+ isClustered: boolean;
37
+ message: string;
38
+ cluster?: undefined;
39
+ members?: undefined;
40
+ networks?: undefined;
41
+ } | {
42
+ isClustered: boolean;
43
+ cluster: import("mssql").IRecordSet<unknown>;
44
+ members: import("mssql").IRecordSet<unknown>[];
45
+ networks: import("mssql").IRecordSet<unknown>[];
46
+ message?: undefined;
47
+ }>;
48
+ };
49
+ };
50
+ //# sourceMappingURL=availability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability.d.ts","sourceRoot":"","sources":["../../src/tools/availability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAO,MAAM,iBAAiB;;;;0BAIF,WAAW;;;;;;;;;;;;;;;;;;;;;0BA+EX,WAAW,QAAQ;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;0BAmCtC,WAAW;;;;;;;;;;;;;;CAsDtC,CAAC"}