@connorbritain/mssql-mcp-reader 0.1.0 → 0.2.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.
- package/LICENSE +21 -0
- package/dist/index.js +6 -564
- package/dist/index.js.map +1 -1
- package/package.json +13 -6
- package/dist/audit/AuditLogger.d.ts +0 -37
- package/dist/audit/AuditLogger.d.ts.map +0 -1
- package/dist/audit/AuditLogger.js +0 -145
- package/dist/audit/AuditLogger.js.map +0 -1
- package/dist/config/EnvironmentManager.d.ts +0 -70
- package/dist/config/EnvironmentManager.d.ts.map +0 -1
- package/dist/config/EnvironmentManager.js +0 -301
- package/dist/config/EnvironmentManager.js.map +0 -1
- package/dist/config/ScriptManager.d.ts +0 -69
- package/dist/config/ScriptManager.d.ts.map +0 -1
- package/dist/config/ScriptManager.js +0 -166
- package/dist/config/ScriptManager.js.map +0 -1
- package/dist/tools/DescribeTableTool.d.ts +0 -32
- package/dist/tools/DescribeTableTool.d.ts.map +0 -1
- package/dist/tools/DescribeTableTool.js +0 -108
- package/dist/tools/DescribeTableTool.js.map +0 -1
- package/dist/tools/ExplainQueryTool.d.ts +0 -24
- package/dist/tools/ExplainQueryTool.d.ts.map +0 -1
- package/dist/tools/ExplainQueryTool.js +0 -98
- package/dist/tools/ExplainQueryTool.js.map +0 -1
- package/dist/tools/InspectDependenciesTool.d.ts +0 -45
- package/dist/tools/InspectDependenciesTool.d.ts.map +0 -1
- package/dist/tools/InspectDependenciesTool.js +0 -215
- package/dist/tools/InspectDependenciesTool.js.map +0 -1
- package/dist/tools/ListDatabasesTool.d.ts +0 -27
- package/dist/tools/ListDatabasesTool.d.ts.map +0 -1
- package/dist/tools/ListDatabasesTool.js +0 -107
- package/dist/tools/ListDatabasesTool.js.map +0 -1
- package/dist/tools/ListEnvironmentsTool.d.ts +0 -49
- package/dist/tools/ListEnvironmentsTool.d.ts.map +0 -1
- package/dist/tools/ListEnvironmentsTool.js +0 -73
- package/dist/tools/ListEnvironmentsTool.js.map +0 -1
- package/dist/tools/ListScriptsTool.d.ts +0 -41
- package/dist/tools/ListScriptsTool.d.ts.map +0 -1
- package/dist/tools/ListScriptsTool.js +0 -86
- package/dist/tools/ListScriptsTool.js.map +0 -1
- package/dist/tools/ListTableTool.d.ts +0 -24
- package/dist/tools/ListTableTool.d.ts.map +0 -1
- package/dist/tools/ListTableTool.js +0 -85
- package/dist/tools/ListTableTool.js.map +0 -1
- package/dist/tools/ProfileTableTool.d.ts +0 -78
- package/dist/tools/ProfileTableTool.d.ts.map +0 -1
- package/dist/tools/ProfileTableTool.js +0 -372
- package/dist/tools/ProfileTableTool.js.map +0 -1
- package/dist/tools/ReadDataTool.d.ts +0 -61
- package/dist/tools/ReadDataTool.d.ts.map +0 -1
- package/dist/tools/ReadDataTool.js +0 -299
- package/dist/tools/ReadDataTool.js.map +0 -1
- package/dist/tools/RelationshipInspectorTool.d.ts +0 -46
- package/dist/tools/RelationshipInspectorTool.d.ts.map +0 -1
- package/dist/tools/RelationshipInspectorTool.js +0 -155
- package/dist/tools/RelationshipInspectorTool.js.map +0 -1
- package/dist/tools/RunScriptTool.d.ts +0 -215
- package/dist/tools/RunScriptTool.d.ts.map +0 -1
- package/dist/tools/RunScriptTool.js +0 -177
- package/dist/tools/RunScriptTool.js.map +0 -1
- package/dist/tools/SearchSchemaTool.d.ts +0 -88
- package/dist/tools/SearchSchemaTool.d.ts.map +0 -1
- package/dist/tools/SearchSchemaTool.js +0 -236
- package/dist/tools/SearchSchemaTool.js.map +0 -1
- package/dist/tools/TestConnectionTool.d.ts +0 -36
- package/dist/tools/TestConnectionTool.d.ts.map +0 -1
- package/dist/tools/TestConnectionTool.js +0 -155
- package/dist/tools/TestConnectionTool.js.map +0 -1
- package/dist/tools/ValidateEnvironmentConfigTool.d.ts +0 -37
- package/dist/tools/ValidateEnvironmentConfigTool.d.ts.map +0 -1
- package/dist/tools/ValidateEnvironmentConfigTool.js +0 -230
- package/dist/tools/ValidateEnvironmentConfigTool.js.map +0 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 MCP Contributors
|
|
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/dist/index.js
CHANGED
|
@@ -1,569 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import * as dotenv from "dotenv";
|
|
5
|
-
import sql from "mssql";
|
|
6
|
-
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
7
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
8
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
9
|
-
// Node 21+ dropped the legacy global SlowBuffer. Some transitive deps (jsonwebtoken)
|
|
10
|
-
// still reference it, so reintroduce a shim to keep compatibility with latest Node.
|
|
11
|
-
if (!globalThis.SlowBuffer) {
|
|
12
|
-
globalThis.SlowBuffer = Buffer.allocUnsafeSlow;
|
|
13
|
-
}
|
|
14
|
-
dotenv.config();
|
|
15
|
-
// Internal imports - READ-ONLY TOOLS ONLY
|
|
16
|
-
import { ReadDataTool } from "./tools/ReadDataTool.js";
|
|
17
|
-
import { ListTableTool } from "./tools/ListTableTool.js";
|
|
18
|
-
import { TestConnectionTool } from "./tools/TestConnectionTool.js";
|
|
19
|
-
import { DescribeTableTool } from "./tools/DescribeTableTool.js";
|
|
20
|
-
import { SearchSchemaTool } from "./tools/SearchSchemaTool.js";
|
|
21
|
-
import { ProfileTableTool } from "./tools/ProfileTableTool.js";
|
|
22
|
-
import { RelationshipInspectorTool } from "./tools/RelationshipInspectorTool.js";
|
|
23
|
-
import { ExplainQueryTool } from "./tools/ExplainQueryTool.js";
|
|
24
|
-
import { ListDatabasesTool } from "./tools/ListDatabasesTool.js";
|
|
25
|
-
import { ListEnvironmentsTool } from "./tools/ListEnvironmentsTool.js";
|
|
26
|
-
import { ValidateEnvironmentConfigTool } from "./tools/ValidateEnvironmentConfigTool.js";
|
|
27
|
-
import { ListScriptsTool } from "./tools/ListScriptsTool.js";
|
|
28
|
-
import { RunScriptTool } from "./tools/RunScriptTool.js";
|
|
29
|
-
import { InspectDependenciesTool } from "./tools/InspectDependenciesTool.js";
|
|
30
|
-
import { auditLogger } from "./audit/AuditLogger.js";
|
|
31
|
-
import { getEnvironmentManager } from "./config/EnvironmentManager.js";
|
|
32
|
-
import * as crypto from "crypto";
|
|
33
|
-
// Generate a unique session ID for this server instance
|
|
34
|
-
const SESSION_ID = crypto.randomUUID();
|
|
35
|
-
class IntentRouter {
|
|
36
|
-
constructor(options) {
|
|
37
|
-
this.tools = options.tools;
|
|
38
|
-
}
|
|
39
|
-
async route(params) {
|
|
40
|
-
const prompt = typeof params.prompt === "string" ? params.prompt.trim() : "";
|
|
41
|
-
if (!prompt) {
|
|
42
|
-
return {
|
|
43
|
-
success: false,
|
|
44
|
-
message: "Prompt is required to route intent.",
|
|
45
|
-
error: "MISSING_PROMPT",
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
const toolArguments = this.normalizeArguments(params.toolArguments ?? {});
|
|
49
|
-
const preferredToolName = params.preferredToolName;
|
|
50
|
-
const normalizedPrompt = prompt.toLowerCase();
|
|
51
|
-
// Infer environment from prompt if not explicitly provided
|
|
52
|
-
const environment = params.environment || this.inferEnvironment(normalizedPrompt);
|
|
53
|
-
if (environment) {
|
|
54
|
-
toolArguments.environment = environment;
|
|
55
|
-
}
|
|
56
|
-
const inferredIntent = this.inferIntent(normalizedPrompt, toolArguments);
|
|
57
|
-
const candidates = this.tools
|
|
58
|
-
.map((tool) => this.scoreTool(tool, normalizedPrompt, toolArguments, inferredIntent, preferredToolName))
|
|
59
|
-
.filter((candidate) => candidate.score > Number.NEGATIVE_INFINITY)
|
|
60
|
-
.sort((a, b) => b.score - a.score);
|
|
61
|
-
const bestCandidate = candidates[0];
|
|
62
|
-
if (!bestCandidate || bestCandidate.score <= 0) {
|
|
63
|
-
return {
|
|
64
|
-
success: false,
|
|
65
|
-
message: "Unable to determine an appropriate SQL tool for the provided prompt. Try specifying the desired action more concretely (e.g., 'list tables', 'describe table X', 'run SELECT ...').",
|
|
66
|
-
error: "NO_TOOL_MATCH",
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
const missingArgs = this.getMissingArguments(bestCandidate.config, toolArguments);
|
|
70
|
-
if (missingArgs.length) {
|
|
71
|
-
return {
|
|
72
|
-
success: false,
|
|
73
|
-
routedTool: bestCandidate.config.name,
|
|
74
|
-
message: `Selected tool '${bestCandidate.config.name}' requires argument(s): ${missingArgs.join(", ")}. Provide them in the request arguments.`,
|
|
75
|
-
error: "MISSING_ARGUMENTS",
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
try {
|
|
79
|
-
const result = await bestCandidate.config.tool.run(toolArguments);
|
|
80
|
-
return {
|
|
81
|
-
success: true,
|
|
82
|
-
routedTool: bestCandidate.config.name,
|
|
83
|
-
intent: inferredIntent,
|
|
84
|
-
reasoning: bestCandidate.reasons,
|
|
85
|
-
toolResult: result,
|
|
86
|
-
selectedEnvironment: environment,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
catch (error) {
|
|
90
|
-
return {
|
|
91
|
-
success: false,
|
|
92
|
-
routedTool: bestCandidate.config.name,
|
|
93
|
-
message: `Routed tool '${bestCandidate.config.name}' failed: ${error}`,
|
|
94
|
-
error: "ROUTED_TOOL_FAILED",
|
|
95
|
-
selectedEnvironment: environment,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
inferEnvironment(prompt) {
|
|
100
|
-
const envManager = getEnvironmentManager();
|
|
101
|
-
const environments = envManager.listEnvironments();
|
|
102
|
-
for (const env of environments) {
|
|
103
|
-
const patterns = [
|
|
104
|
-
new RegExp(`\\b${env.name}\\b`, "i"),
|
|
105
|
-
new RegExp(`\\b${env.name.replace(/-/g, "\\s")}\\b`, "i"),
|
|
106
|
-
];
|
|
107
|
-
for (const pattern of patterns) {
|
|
108
|
-
if (pattern.test(prompt)) {
|
|
109
|
-
return env.name;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
const envKeywords = {
|
|
114
|
-
prod: ["production", "prod", "live"],
|
|
115
|
-
staging: ["staging", "stage", "uat"],
|
|
116
|
-
dev: ["development", "dev", "local"],
|
|
117
|
-
};
|
|
118
|
-
for (const [envSuffix, keywords] of Object.entries(envKeywords)) {
|
|
119
|
-
for (const keyword of keywords) {
|
|
120
|
-
if (prompt.includes(keyword)) {
|
|
121
|
-
const matchingEnv = environments.find((e) => e.name.toLowerCase().includes(envSuffix));
|
|
122
|
-
if (matchingEnv) {
|
|
123
|
-
return matchingEnv.name;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return undefined;
|
|
129
|
-
}
|
|
130
|
-
normalizeArguments(args) {
|
|
131
|
-
if (!args || typeof args !== "object") {
|
|
132
|
-
return {};
|
|
133
|
-
}
|
|
134
|
-
const cloned = {};
|
|
135
|
-
for (const [key, value] of Object.entries(args)) {
|
|
136
|
-
if (value !== undefined) {
|
|
137
|
-
cloned[key] = value;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
return cloned;
|
|
141
|
-
}
|
|
142
|
-
inferIntent(prompt, toolArguments) {
|
|
143
|
-
const detectors = [
|
|
144
|
-
{
|
|
145
|
-
intent: "metadata",
|
|
146
|
-
keywords: ["profile", "sample", "statistics", "distribution", "quality"],
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
intent: "schema_discovery",
|
|
150
|
-
keywords: ["describe", "columns", "list tables", "show tables", "schema", "search"],
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
intent: "data_read",
|
|
154
|
-
keywords: ["select", "query", "fetch", "count", "report", "view"],
|
|
155
|
-
},
|
|
156
|
-
];
|
|
157
|
-
for (const detector of detectors) {
|
|
158
|
-
if (detector.keywords.some((keyword) => prompt.includes(keyword))) {
|
|
159
|
-
return detector.intent;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
const sqlSnippet = this.extractSqlSnippet(toolArguments);
|
|
163
|
-
if (sqlSnippet && sqlSnippet.startsWith("select")) {
|
|
164
|
-
return "data_read";
|
|
165
|
-
}
|
|
166
|
-
if (toolArguments?.tablePattern || toolArguments?.columnPattern) {
|
|
167
|
-
return "schema_discovery";
|
|
168
|
-
}
|
|
169
|
-
return "data_read";
|
|
170
|
-
}
|
|
171
|
-
extractSqlSnippet(args) {
|
|
172
|
-
const sqlCandidate = typeof args?.query === "string" ? args.query : typeof args?.sql === "string" ? args.sql : null;
|
|
173
|
-
return sqlCandidate?.trim().toLowerCase() ?? null;
|
|
174
|
-
}
|
|
175
|
-
scoreTool(config, prompt, toolArguments, inferredIntent, preferredToolName) {
|
|
176
|
-
let score = config.baseScore ?? 0.5;
|
|
177
|
-
const reasons = [];
|
|
178
|
-
if (config.intents.includes(inferredIntent)) {
|
|
179
|
-
score += 5;
|
|
180
|
-
reasons.push(`intent match (${inferredIntent})`);
|
|
181
|
-
}
|
|
182
|
-
if (preferredToolName && config.name === preferredToolName) {
|
|
183
|
-
score += 3;
|
|
184
|
-
reasons.push("preferred tool match");
|
|
185
|
-
}
|
|
186
|
-
if (config.keywords?.length) {
|
|
187
|
-
for (const keyword of config.keywords) {
|
|
188
|
-
if (prompt.includes(keyword)) {
|
|
189
|
-
score += 2;
|
|
190
|
-
reasons.push(`keyword '${keyword}'`);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
if (config.requiredArgs?.length) {
|
|
195
|
-
for (const arg of config.requiredArgs) {
|
|
196
|
-
if (this.hasArgument(toolArguments, arg)) {
|
|
197
|
-
score += 1;
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
score -= 1;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
return { config, score, reasons };
|
|
205
|
-
}
|
|
206
|
-
hasArgument(args, key) {
|
|
207
|
-
if (!args) {
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
const value = args[key];
|
|
211
|
-
if (value === null || value === undefined) {
|
|
212
|
-
return false;
|
|
213
|
-
}
|
|
214
|
-
if (typeof value === "string") {
|
|
215
|
-
return value.trim().length > 0;
|
|
216
|
-
}
|
|
217
|
-
if (Array.isArray(value)) {
|
|
218
|
-
return value.length > 0;
|
|
219
|
-
}
|
|
220
|
-
if (typeof value === "object") {
|
|
221
|
-
return Object.keys(value).length > 0;
|
|
222
|
-
}
|
|
223
|
-
return true;
|
|
224
|
-
}
|
|
225
|
-
getMissingArguments(config, args) {
|
|
226
|
-
if (!config.requiredArgs || config.requiredArgs.length === 0) {
|
|
227
|
-
return [];
|
|
228
|
-
}
|
|
229
|
-
return config.requiredArgs.filter((arg) => !this.hasArgument(args, arg));
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
233
|
-
// Initialize environment manager
|
|
234
|
-
const environmentManager = getEnvironmentManager();
|
|
235
|
-
// Instantiate READ-ONLY tools only
|
|
236
|
-
const readDataTool = new ReadDataTool();
|
|
237
|
-
const listTableTool = new ListTableTool();
|
|
238
|
-
const listDatabasesTool = new ListDatabasesTool();
|
|
239
|
-
const listEnvironmentsTool = new ListEnvironmentsTool();
|
|
240
|
-
const validateEnvironmentConfigTool = new ValidateEnvironmentConfigTool();
|
|
241
|
-
const listScriptsTool = new ListScriptsTool();
|
|
242
|
-
const runScriptTool = new RunScriptTool();
|
|
243
|
-
const inspectDependenciesTool = new InspectDependenciesTool();
|
|
244
|
-
const describeTableTool = new DescribeTableTool();
|
|
245
|
-
const searchSchemaTool = new SearchSchemaTool();
|
|
246
|
-
const profileTableTool = new ProfileTableTool();
|
|
247
|
-
const relationshipInspectorTool = new RelationshipInspectorTool();
|
|
248
|
-
const testConnectionTool = new TestConnectionTool();
|
|
249
|
-
const explainQueryTool = new ExplainQueryTool();
|
|
250
|
-
const toolRegistry = [
|
|
251
|
-
{
|
|
252
|
-
tool: readDataTool,
|
|
253
|
-
name: readDataTool.name,
|
|
254
|
-
intents: ["data_read"],
|
|
255
|
-
keywords: ["select", "query", "fetch", "report", "count"],
|
|
256
|
-
requiredArgs: ["query"],
|
|
257
|
-
baseScore: 2,
|
|
258
|
-
},
|
|
259
|
-
{
|
|
260
|
-
tool: listTableTool,
|
|
261
|
-
name: listTableTool.name,
|
|
262
|
-
intents: ["schema_discovery"],
|
|
263
|
-
keywords: ["list tables", "show tables", "tables"],
|
|
264
|
-
baseScore: 1.5,
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
tool: describeTableTool,
|
|
268
|
-
name: describeTableTool.name,
|
|
269
|
-
intents: ["schema_discovery"],
|
|
270
|
-
keywords: ["describe", "columns", "structure"],
|
|
271
|
-
requiredArgs: ["tableName"],
|
|
272
|
-
baseScore: 1.5,
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
tool: searchSchemaTool,
|
|
276
|
-
name: searchSchemaTool.name,
|
|
277
|
-
intents: ["schema_discovery"],
|
|
278
|
-
keywords: ["search", "find", "look up"],
|
|
279
|
-
baseScore: 1.5,
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
tool: profileTableTool,
|
|
283
|
-
name: profileTableTool.name,
|
|
284
|
-
intents: ["metadata"],
|
|
285
|
-
keywords: ["profile", "sample", "distribution"],
|
|
286
|
-
requiredArgs: ["tableName"],
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
tool: relationshipInspectorTool,
|
|
290
|
-
name: relationshipInspectorTool.name,
|
|
291
|
-
intents: ["metadata", "schema_discovery"],
|
|
292
|
-
keywords: ["relationships", "foreign key", "references"],
|
|
293
|
-
requiredArgs: ["tableName"],
|
|
294
|
-
},
|
|
295
|
-
{
|
|
296
|
-
tool: testConnectionTool,
|
|
297
|
-
name: testConnectionTool.name,
|
|
298
|
-
intents: ["metadata"],
|
|
299
|
-
keywords: ["test", "connection", "ping", "health"],
|
|
300
|
-
baseScore: 1,
|
|
301
|
-
},
|
|
302
|
-
{
|
|
303
|
-
tool: explainQueryTool,
|
|
304
|
-
name: explainQueryTool.name,
|
|
305
|
-
intents: ["metadata"],
|
|
306
|
-
keywords: ["plan", "explain", "showplan", "estimate"],
|
|
307
|
-
requiredArgs: ["query"],
|
|
308
|
-
baseScore: 1,
|
|
309
|
-
},
|
|
310
|
-
{
|
|
311
|
-
tool: listDatabasesTool,
|
|
312
|
-
name: listDatabasesTool.name,
|
|
313
|
-
intents: ["schema_discovery", "metadata"],
|
|
314
|
-
keywords: ["databases", "list databases", "show databases", "dbs"],
|
|
315
|
-
baseScore: 1.5,
|
|
316
|
-
},
|
|
317
|
-
{
|
|
318
|
-
tool: listEnvironmentsTool,
|
|
319
|
-
name: listEnvironmentsTool.name,
|
|
320
|
-
intents: ["metadata"],
|
|
321
|
-
keywords: ["environments", "list environments", "connections", "configs"],
|
|
322
|
-
baseScore: 1.5,
|
|
323
|
-
},
|
|
324
|
-
{
|
|
325
|
-
tool: validateEnvironmentConfigTool,
|
|
326
|
-
name: validateEnvironmentConfigTool.name,
|
|
327
|
-
intents: ["metadata"],
|
|
328
|
-
keywords: ["validate", "check", "config", "configuration", "health"],
|
|
329
|
-
baseScore: 1.5,
|
|
330
|
-
},
|
|
331
|
-
{
|
|
332
|
-
tool: listScriptsTool,
|
|
333
|
-
name: listScriptsTool.name,
|
|
334
|
-
intents: ["metadata"],
|
|
335
|
-
keywords: ["scripts", "list scripts", "templates", "named scripts"],
|
|
336
|
-
baseScore: 1.5,
|
|
337
|
-
},
|
|
338
|
-
{
|
|
339
|
-
tool: runScriptTool,
|
|
340
|
-
name: runScriptTool.name,
|
|
341
|
-
intents: ["data_read"],
|
|
342
|
-
keywords: ["run script", "execute script", "template"],
|
|
343
|
-
requiredArgs: ["scriptName"],
|
|
344
|
-
baseScore: 1.5,
|
|
345
|
-
},
|
|
346
|
-
{
|
|
347
|
-
tool: inspectDependenciesTool,
|
|
348
|
-
name: inspectDependenciesTool.name,
|
|
349
|
-
intents: ["schema_discovery", "metadata"],
|
|
350
|
-
keywords: ["dependencies", "depends", "references", "impact", "what uses"],
|
|
351
|
-
requiredArgs: ["objectName"],
|
|
352
|
-
baseScore: 1.5,
|
|
353
|
-
},
|
|
354
|
-
];
|
|
355
|
-
const server = new Server({
|
|
2
|
+
import { startMcpServer } from "@connorbritain/mssql-mcp-core";
|
|
3
|
+
startMcpServer({
|
|
356
4
|
name: "mssql-mcp-reader",
|
|
357
|
-
version: "0.
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
},
|
|
362
|
-
});
|
|
363
|
-
const intentRouter = new IntentRouter({
|
|
364
|
-
tools: toolRegistry,
|
|
365
|
-
});
|
|
366
|
-
// All tools in reader are read-only
|
|
367
|
-
const exposedTools = [
|
|
368
|
-
readDataTool,
|
|
369
|
-
listTableTool,
|
|
370
|
-
listDatabasesTool,
|
|
371
|
-
listEnvironmentsTool,
|
|
372
|
-
validateEnvironmentConfigTool,
|
|
373
|
-
listScriptsTool,
|
|
374
|
-
runScriptTool,
|
|
375
|
-
describeTableTool,
|
|
376
|
-
searchSchemaTool,
|
|
377
|
-
profileTableTool,
|
|
378
|
-
relationshipInspectorTool,
|
|
379
|
-
inspectDependenciesTool,
|
|
380
|
-
testConnectionTool,
|
|
381
|
-
explainQueryTool,
|
|
382
|
-
];
|
|
383
|
-
// Request handlers
|
|
384
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
385
|
-
tools: exposedTools,
|
|
386
|
-
}));
|
|
387
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
388
|
-
const { name, arguments: args } = request.params;
|
|
389
|
-
try {
|
|
390
|
-
let result;
|
|
391
|
-
switch (name) {
|
|
392
|
-
case readDataTool.name:
|
|
393
|
-
result = await readDataTool.run(args);
|
|
394
|
-
break;
|
|
395
|
-
case listTableTool.name:
|
|
396
|
-
result = await listTableTool.run(args);
|
|
397
|
-
break;
|
|
398
|
-
case listDatabasesTool.name:
|
|
399
|
-
result = await listDatabasesTool.run(args);
|
|
400
|
-
break;
|
|
401
|
-
case listEnvironmentsTool.name:
|
|
402
|
-
result = await listEnvironmentsTool.run(args);
|
|
403
|
-
break;
|
|
404
|
-
case validateEnvironmentConfigTool.name:
|
|
405
|
-
result = await validateEnvironmentConfigTool.run(args);
|
|
406
|
-
break;
|
|
407
|
-
case listScriptsTool.name:
|
|
408
|
-
result = await listScriptsTool.run(args);
|
|
409
|
-
break;
|
|
410
|
-
case runScriptTool.name:
|
|
411
|
-
result = await runScriptTool.run(args);
|
|
412
|
-
break;
|
|
413
|
-
case inspectDependenciesTool.name:
|
|
414
|
-
result = await inspectDependenciesTool.run(args);
|
|
415
|
-
break;
|
|
416
|
-
case testConnectionTool.name:
|
|
417
|
-
result = await testConnectionTool.run(args);
|
|
418
|
-
break;
|
|
419
|
-
case explainQueryTool.name:
|
|
420
|
-
result = await explainQueryTool.run(args);
|
|
421
|
-
break;
|
|
422
|
-
case describeTableTool.name:
|
|
423
|
-
if (!args || typeof args.tableName !== "string") {
|
|
424
|
-
return {
|
|
425
|
-
content: [{ type: "text", text: `Missing or invalid 'tableName' argument for describe_table tool.` }],
|
|
426
|
-
isError: true,
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
result = await describeTableTool.run(args);
|
|
430
|
-
break;
|
|
431
|
-
case searchSchemaTool.name:
|
|
432
|
-
result = await searchSchemaTool.run(args ?? {});
|
|
433
|
-
break;
|
|
434
|
-
case profileTableTool.name:
|
|
435
|
-
if (!args || typeof args.tableName !== "string") {
|
|
436
|
-
return {
|
|
437
|
-
content: [{ type: "text", text: `Missing or invalid 'tableName' argument for profile_table tool.` }],
|
|
438
|
-
isError: true,
|
|
439
|
-
};
|
|
440
|
-
}
|
|
441
|
-
result = await profileTableTool.run(args);
|
|
442
|
-
break;
|
|
443
|
-
case relationshipInspectorTool.name:
|
|
444
|
-
if (!args || typeof args.tableName !== "string") {
|
|
445
|
-
return {
|
|
446
|
-
content: [{ type: "text", text: `Missing or invalid 'tableName' argument for inspect_relationships tool.` }],
|
|
447
|
-
isError: true,
|
|
448
|
-
};
|
|
449
|
-
}
|
|
450
|
-
result = await relationshipInspectorTool.run(args);
|
|
451
|
-
break;
|
|
452
|
-
default:
|
|
453
|
-
return {
|
|
454
|
-
content: [{ type: "text", text: `Unknown tool: ${name}` }],
|
|
455
|
-
isError: true,
|
|
456
|
-
};
|
|
457
|
-
}
|
|
458
|
-
return {
|
|
459
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
460
|
-
};
|
|
461
|
-
}
|
|
462
|
-
catch (error) {
|
|
463
|
-
return {
|
|
464
|
-
content: [{ type: "text", text: `Error occurred: ${error}` }],
|
|
465
|
-
isError: true,
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
|
-
});
|
|
469
|
-
// Server startup
|
|
470
|
-
async function runServer() {
|
|
471
|
-
try {
|
|
472
|
-
const transport = new StdioServerTransport();
|
|
473
|
-
await server.connect(transport);
|
|
474
|
-
}
|
|
475
|
-
catch (error) {
|
|
476
|
-
console.error("Fatal error running server:", error);
|
|
477
|
-
process.exit(1);
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
runServer().catch((error) => {
|
|
481
|
-
console.error("Fatal error running server:", error);
|
|
5
|
+
version: "0.2.0",
|
|
6
|
+
tier: "reader",
|
|
7
|
+
}).catch((e) => {
|
|
8
|
+
console.error("Fatal:", e);
|
|
482
9
|
process.exit(1);
|
|
483
10
|
});
|
|
484
|
-
// All tools in reader are metadata/read-only, so no approval required
|
|
485
|
-
const APPROVAL_EXEMPT_TOOLS = new Set([
|
|
486
|
-
"list_tables",
|
|
487
|
-
"list_databases",
|
|
488
|
-
"list_environments",
|
|
489
|
-
"validate_environment_config",
|
|
490
|
-
"list_scripts",
|
|
491
|
-
"describe_table",
|
|
492
|
-
"test_connection",
|
|
493
|
-
"search_schema",
|
|
494
|
-
"inspect_relationships",
|
|
495
|
-
"inspect_dependencies",
|
|
496
|
-
"read_data",
|
|
497
|
-
"profile_table",
|
|
498
|
-
"explain_query",
|
|
499
|
-
"run_script",
|
|
500
|
-
]);
|
|
501
|
-
// Patch all tool handlers to ensure SQL connection, policy enforcement, and audit logging
|
|
502
|
-
function wrapToolRun(tool) {
|
|
503
|
-
const originalRun = tool.run.bind(tool);
|
|
504
|
-
tool.run = async function (...args) {
|
|
505
|
-
const startTime = Date.now();
|
|
506
|
-
const rawArgs = (args[0] ?? {});
|
|
507
|
-
const requestedEnvironment = typeof rawArgs.environment === "string" ? rawArgs.environment : undefined;
|
|
508
|
-
const envConfig = environmentManager.getEnvironment(requestedEnvironment);
|
|
509
|
-
// Build policy object from environment config
|
|
510
|
-
const policy = {
|
|
511
|
-
name: envConfig.name,
|
|
512
|
-
readonly: true, // Reader is always read-only
|
|
513
|
-
allowedTools: envConfig.allowedTools,
|
|
514
|
-
deniedTools: envConfig.deniedTools,
|
|
515
|
-
maxRowsDefault: envConfig.maxRowsDefault,
|
|
516
|
-
requireApproval: envConfig.requireApproval ?? false,
|
|
517
|
-
auditLevel: envConfig.auditLevel ?? "basic",
|
|
518
|
-
};
|
|
519
|
-
// Check denied tools policy
|
|
520
|
-
if (policy.deniedTools && policy.deniedTools.length > 0 && policy.deniedTools.includes(tool.name)) {
|
|
521
|
-
return {
|
|
522
|
-
success: false,
|
|
523
|
-
message: `Tool '${tool.name}' is explicitly denied in environment '${policy.name}'.`,
|
|
524
|
-
error: "TOOL_DENIED",
|
|
525
|
-
};
|
|
526
|
-
}
|
|
527
|
-
// Check allowed tools policy
|
|
528
|
-
if (policy.allowedTools && policy.allowedTools.length > 0 && !policy.allowedTools.includes(tool.name)) {
|
|
529
|
-
return {
|
|
530
|
-
success: false,
|
|
531
|
-
message: `Tool '${tool.name}' is not permitted in environment '${policy.name}'. Allowed tools: ${policy.allowedTools.join(", ")}.`,
|
|
532
|
-
error: "TOOL_NOT_ALLOWED",
|
|
533
|
-
};
|
|
534
|
-
}
|
|
535
|
-
// Enrich args with environment info and policy
|
|
536
|
-
const toolArgs = {
|
|
537
|
-
...rawArgs,
|
|
538
|
-
environment: policy.name,
|
|
539
|
-
environmentPolicy: policy,
|
|
540
|
-
};
|
|
541
|
-
// Get connection for the specified or default environment
|
|
542
|
-
const pool = await environmentManager.getConnection(policy.name);
|
|
543
|
-
// Store the pool in global sql for tools that use sql directly
|
|
544
|
-
sql.globalPool = pool;
|
|
545
|
-
try {
|
|
546
|
-
const result = await originalRun(toolArgs);
|
|
547
|
-
const durationMs = Date.now() - startTime;
|
|
548
|
-
// Audit log the successful invocation
|
|
549
|
-
auditLogger.logToolInvocation(tool.name, toolArgs, result, durationMs, {
|
|
550
|
-
sessionId: SESSION_ID,
|
|
551
|
-
environment: policy.name,
|
|
552
|
-
auditLevel: policy.auditLevel,
|
|
553
|
-
});
|
|
554
|
-
return result;
|
|
555
|
-
}
|
|
556
|
-
catch (error) {
|
|
557
|
-
const durationMs = Date.now() - startTime;
|
|
558
|
-
// Audit log the failed invocation
|
|
559
|
-
auditLogger.logToolInvocation(tool.name, toolArgs, { success: false, error: String(error) }, durationMs, {
|
|
560
|
-
sessionId: SESSION_ID,
|
|
561
|
-
environment: policy.name,
|
|
562
|
-
auditLevel: policy.auditLevel,
|
|
563
|
-
});
|
|
564
|
-
throw error;
|
|
565
|
-
}
|
|
566
|
-
};
|
|
567
|
-
}
|
|
568
|
-
[readDataTool, listTableTool, listDatabasesTool, listEnvironmentsTool, validateEnvironmentConfigTool, listScriptsTool, runScriptTool, inspectDependenciesTool, describeTableTool, searchSchemaTool, profileTableTool, relationshipInspectorTool, testConnectionTool, explainQueryTool].forEach(wrapToolRun);
|
|
569
11
|
//# sourceMappingURL=index.js.map
|
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":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,cAAc,CAAC;IACb,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,QAAQ;CACf,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@connorbritain/mssql-mcp-reader",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Read-only MCP server for Microsoft SQL Server - schema discovery, profiling, and safe querying without write operations",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"sql-server",
|
|
8
|
+
"mssql",
|
|
9
|
+
"database",
|
|
10
|
+
"ai",
|
|
11
|
+
"claude",
|
|
12
|
+
"windsurf",
|
|
13
|
+
"model-context-protocol",
|
|
14
|
+
"read-only"
|
|
15
|
+
],
|
|
6
16
|
"author": "Connor England <connor.r.england@gmail.com>",
|
|
7
17
|
"license": "MIT",
|
|
8
18
|
"repository": {
|
|
@@ -33,10 +43,7 @@
|
|
|
33
43
|
"typescript": "^5.4.5"
|
|
34
44
|
},
|
|
35
45
|
"dependencies": {
|
|
36
|
-
"@
|
|
37
|
-
"@modelcontextprotocol/sdk": "^1.23.0",
|
|
38
|
-
"dotenv": "^16.4.5",
|
|
39
|
-
"mssql": "^10.0.1"
|
|
46
|
+
"@connorbritain/mssql-mcp-core": "^0.1.0"
|
|
40
47
|
},
|
|
41
48
|
"type": "module"
|
|
42
49
|
}
|