@eamonboyle/mssql-mcp 1.1.0 → 1.3.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/README.md +169 -22
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +74 -0
- package/dist/config.js.map +1 -0
- package/dist/db.d.ts +29 -24
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +144 -112
- package/dist/db.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +382 -122
- package/dist/index.js.map +1 -1
- package/dist/mcpResults.d.ts +49 -0
- package/dist/mcpResults.d.ts.map +1 -0
- package/dist/mcpResults.js +246 -0
- package/dist/mcpResults.js.map +1 -0
- package/dist/promptRegistry.d.ts +16 -0
- package/dist/promptRegistry.d.ts.map +1 -0
- package/dist/promptRegistry.js +112 -0
- package/dist/promptRegistry.js.map +1 -0
- package/dist/resourceRegistry.d.ts +14 -0
- package/dist/resourceRegistry.d.ts.map +1 -0
- package/dist/resourceRegistry.js +311 -0
- package/dist/resourceRegistry.js.map +1 -0
- package/dist/schema.d.ts +57 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +390 -0
- package/dist/schema.js.map +1 -0
- package/dist/serverState.d.ts +28 -0
- package/dist/serverState.d.ts.map +1 -0
- package/dist/serverState.js +99 -0
- package/dist/serverState.js.map +1 -0
- package/dist/sql.d.ts +7 -0
- package/dist/sql.d.ts.map +1 -0
- package/dist/sql.js +73 -0
- package/dist/sql.js.map +1 -0
- package/dist/toolRegistry.d.ts +20 -0
- package/dist/toolRegistry.d.ts.map +1 -0
- package/dist/toolRegistry.js +547 -0
- package/dist/toolRegistry.js.map +1 -0
- package/dist/tools/AnalyzeTableTool.d.ts +37 -0
- package/dist/tools/AnalyzeTableTool.d.ts.map +1 -0
- package/dist/tools/AnalyzeTableTool.js +81 -0
- package/dist/tools/AnalyzeTableTool.js.map +1 -0
- package/dist/tools/CreateIndexTool.d.ts +30 -23
- package/dist/tools/CreateIndexTool.d.ts.map +1 -1
- package/dist/tools/CreateIndexTool.js +47 -77
- package/dist/tools/CreateIndexTool.js.map +1 -1
- package/dist/tools/CreateTableTool.d.ts +18 -11
- package/dist/tools/CreateTableTool.d.ts.map +1 -1
- package/dist/tools/CreateTableTool.js +37 -61
- package/dist/tools/CreateTableTool.js.map +1 -1
- package/dist/tools/DeleteDataTool.d.ts +22 -0
- package/dist/tools/DeleteDataTool.d.ts.map +1 -0
- package/dist/tools/DeleteDataTool.js +38 -0
- package/dist/tools/DeleteDataTool.js.map +1 -0
- package/dist/tools/DescribeObjectTool.d.ts +21 -0
- package/dist/tools/DescribeObjectTool.d.ts.map +1 -0
- package/dist/tools/DescribeObjectTool.js +31 -0
- package/dist/tools/DescribeObjectTool.js.map +1 -0
- package/dist/tools/DescribeRelationshipsTool.d.ts +20 -0
- package/dist/tools/DescribeRelationshipsTool.d.ts.map +1 -0
- package/dist/tools/DescribeRelationshipsTool.js +24 -0
- package/dist/tools/DescribeRelationshipsTool.js.map +1 -0
- package/dist/tools/DescribeTableTool.d.ts +19 -20
- package/dist/tools/DescribeTableTool.d.ts.map +1 -1
- package/dist/tools/DescribeTableTool.js +23 -44
- package/dist/tools/DescribeTableTool.js.map +1 -1
- package/dist/tools/DropTableTool.d.ts +13 -11
- package/dist/tools/DropTableTool.d.ts.map +1 -1
- package/dist/tools/DropTableTool.js +30 -44
- package/dist/tools/DropTableTool.js.map +1 -1
- package/dist/tools/ExplainQueryTool.d.ts +32 -0
- package/dist/tools/ExplainQueryTool.d.ts.map +1 -0
- package/dist/tools/ExplainQueryTool.js +102 -0
- package/dist/tools/ExplainQueryTool.js.map +1 -0
- package/dist/tools/InsertDataTool.d.ts +20 -16
- package/dist/tools/InsertDataTool.d.ts.map +1 -1
- package/dist/tools/InsertDataTool.js +91 -108
- package/dist/tools/InsertDataTool.js.map +1 -1
- package/dist/tools/ListDatabasesTool.d.ts +16 -0
- package/dist/tools/ListDatabasesTool.d.ts.map +1 -0
- package/dist/tools/ListDatabasesTool.js +26 -0
- package/dist/tools/ListDatabasesTool.js.map +1 -0
- package/dist/tools/ListForeignKeysTool.d.ts +19 -0
- package/dist/tools/ListForeignKeysTool.d.ts.map +1 -0
- package/dist/tools/ListForeignKeysTool.js +24 -0
- package/dist/tools/ListForeignKeysTool.js.map +1 -0
- package/dist/tools/ListObjectsTool.d.ts +20 -0
- package/dist/tools/ListObjectsTool.d.ts.map +1 -0
- package/dist/tools/ListObjectsTool.js +26 -0
- package/dist/tools/ListObjectsTool.js.map +1 -0
- package/dist/tools/ListTableTool.d.ts +20 -16
- package/dist/tools/ListTableTool.d.ts.map +1 -1
- package/dist/tools/ListTableTool.js +32 -51
- package/dist/tools/ListTableTool.js.map +1 -1
- package/dist/tools/PreviewDeleteTool.d.ts +28 -0
- package/dist/tools/PreviewDeleteTool.d.ts.map +1 -0
- package/dist/tools/PreviewDeleteTool.js +31 -0
- package/dist/tools/PreviewDeleteTool.js.map +1 -0
- package/dist/tools/PreviewUpdateTool.d.ts +30 -0
- package/dist/tools/PreviewUpdateTool.d.ts.map +1 -0
- package/dist/tools/PreviewUpdateTool.js +34 -0
- package/dist/tools/PreviewUpdateTool.js.map +1 -0
- package/dist/tools/ReadDataTool.d.ts +35 -33
- package/dist/tools/ReadDataTool.d.ts.map +1 -1
- package/dist/tools/ReadDataTool.js +92 -105
- package/dist/tools/ReadDataTool.js.map +1 -1
- package/dist/tools/SearchDataTool.d.ts +27 -0
- package/dist/tools/SearchDataTool.d.ts.map +1 -0
- package/dist/tools/SearchDataTool.js +61 -0
- package/dist/tools/SearchDataTool.js.map +1 -0
- package/dist/tools/UpdateDataTool.d.ts +22 -16
- package/dist/tools/UpdateDataTool.d.ts.map +1 -1
- package/dist/tools/UpdateDataTool.js +48 -65
- package/dist/tools/UpdateDataTool.js.map +1 -1
- package/dist/validation.d.ts +13 -13
- package/dist/validation.js +133 -133
- package/dist/validation.js.map +1 -1
- package/dist/writePreview.d.ts +20 -0
- package/dist/writePreview.d.ts.map +1 -0
- package/dist/writePreview.js +27 -0
- package/dist/writePreview.js.map +1 -0
- package/dist/writePreviewGrant.d.ts +18 -0
- package/dist/writePreviewGrant.d.ts.map +1 -0
- package/dist/writePreviewGrant.js +71 -0
- package/dist/writePreviewGrant.js.map +1 -0
- package/dist/writePreviewGrantStore.d.ts +10 -0
- package/dist/writePreviewGrantStore.d.ts.map +1 -0
- package/dist/writePreviewGrantStore.js +47 -0
- package/dist/writePreviewGrantStore.js.map +1 -0
- package/dist/writeSafety.d.ts +21 -0
- package/dist/writeSafety.d.ts.map +1 -0
- package/dist/writeSafety.js +169 -0
- package/dist/writeSafety.js.map +1 -0
- package/package.json +6 -5
- package/dist/__tests__/db.test.d.ts +0 -2
- package/dist/__tests__/db.test.d.ts.map +0 -1
- package/dist/__tests__/db.test.js +0 -204
- package/dist/__tests__/db.test.js.map +0 -1
- package/dist/__tests__/validation.test.d.ts +0 -2
- package/dist/__tests__/validation.test.d.ts.map +0 -1
- package/dist/__tests__/validation.test.js +0 -111
- package/dist/__tests__/validation.test.js.map +0 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const toolResultOutputSchema = {
|
|
3
|
+
version: z.literal(1),
|
|
4
|
+
success: z.boolean(),
|
|
5
|
+
message: z.string(),
|
|
6
|
+
data: z.unknown().optional(),
|
|
7
|
+
meta: z.record(z.string(), z.unknown()).optional(),
|
|
8
|
+
warnings: z.array(z.string()).optional(),
|
|
9
|
+
error: z
|
|
10
|
+
.object({
|
|
11
|
+
code: z.string(),
|
|
12
|
+
details: z.unknown().optional(),
|
|
13
|
+
})
|
|
14
|
+
.optional(),
|
|
15
|
+
pagination: z
|
|
16
|
+
.object({
|
|
17
|
+
returned: z.number().int().nonnegative(),
|
|
18
|
+
total: z.number().int().nonnegative().optional(),
|
|
19
|
+
nextCursor: z.string().optional(),
|
|
20
|
+
})
|
|
21
|
+
.optional(),
|
|
22
|
+
truncated: z.boolean().optional(),
|
|
23
|
+
};
|
|
24
|
+
export function classifyToolErrorCode(raw, message, fallback = "TOOL_EXECUTION_FAILED") {
|
|
25
|
+
const explicit = raw.error;
|
|
26
|
+
if (typeof explicit === "object" &&
|
|
27
|
+
explicit !== null &&
|
|
28
|
+
"code" in explicit &&
|
|
29
|
+
typeof explicit.code === "string" &&
|
|
30
|
+
String(explicit.code).trim()) {
|
|
31
|
+
return String(explicit.code).trim();
|
|
32
|
+
}
|
|
33
|
+
if (typeof explicit === "string" && explicit.trim()) {
|
|
34
|
+
return explicit.trim();
|
|
35
|
+
}
|
|
36
|
+
if (/invalid or disallowed database|invalid database/i.test(message)) {
|
|
37
|
+
return "INVALID_DATABASE";
|
|
38
|
+
}
|
|
39
|
+
if (/security validation failed/i.test(message)) {
|
|
40
|
+
return "SECURITY_VALIDATION_FAILED";
|
|
41
|
+
}
|
|
42
|
+
if (/multiple objects named|disambiguate/i.test(message)) {
|
|
43
|
+
return "AMBIGUOUS_TARGET";
|
|
44
|
+
}
|
|
45
|
+
if (/preview required|confirmation canceled\. call preview_/i.test(message)) {
|
|
46
|
+
return "PREVIEW_REQUIRED";
|
|
47
|
+
}
|
|
48
|
+
if (/invalid or expired previewtoken|write preview token/i.test(message)) {
|
|
49
|
+
return "PREVIEW_TOKEN_INVALID";
|
|
50
|
+
}
|
|
51
|
+
if (/confirmation canceled|interactive confirmation is unavailable/i.test(message)) {
|
|
52
|
+
return "CONFIRMATION_REQUIRED";
|
|
53
|
+
}
|
|
54
|
+
if (/ddl .*disabled/i.test(message)) {
|
|
55
|
+
return "DDL_DISABLED";
|
|
56
|
+
}
|
|
57
|
+
if (/exceeds max_write_rows/i.test(message)) {
|
|
58
|
+
return "WRITE_LIMIT_EXCEEDED";
|
|
59
|
+
}
|
|
60
|
+
if (/timeout/i.test(message)) {
|
|
61
|
+
return "QUERY_TIMEOUT";
|
|
62
|
+
}
|
|
63
|
+
return fallback;
|
|
64
|
+
}
|
|
65
|
+
function createTextSummary(payload) {
|
|
66
|
+
if (!payload.success && payload.error) {
|
|
67
|
+
return `${payload.message} (${payload.error.code})`;
|
|
68
|
+
}
|
|
69
|
+
return payload.message;
|
|
70
|
+
}
|
|
71
|
+
const MAX_INLINE_JSON_CHARS = 120000;
|
|
72
|
+
const MAX_INLINE_ARRAY_ITEMS = 500;
|
|
73
|
+
function isPlainRecord(value) {
|
|
74
|
+
if (typeof value !== "object" || value === null) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
const proto = Object.getPrototypeOf(value);
|
|
78
|
+
return proto === null || proto === Object.prototype;
|
|
79
|
+
}
|
|
80
|
+
function shouldInlineDataInText(data) {
|
|
81
|
+
if (data === null || data === undefined) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
if (Array.isArray(data)) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
return isPlainRecord(data);
|
|
88
|
+
}
|
|
89
|
+
export function buildInlineDataAttachment(data) {
|
|
90
|
+
if (!shouldInlineDataInText(data)) {
|
|
91
|
+
return "";
|
|
92
|
+
}
|
|
93
|
+
let toSerialize = data;
|
|
94
|
+
let note = "";
|
|
95
|
+
if (Array.isArray(data)) {
|
|
96
|
+
if (data.length > MAX_INLINE_ARRAY_ITEMS) {
|
|
97
|
+
toSerialize = data.slice(0, MAX_INLINE_ARRAY_ITEMS);
|
|
98
|
+
note = `\n… showing ${MAX_INLINE_ARRAY_ITEMS} of ${data.length} items (remainder omitted from this text preview).`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
let json;
|
|
102
|
+
try {
|
|
103
|
+
json = JSON.stringify(toSerialize, null, 2);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return "\n\n(unable to serialize data for inline preview).";
|
|
107
|
+
}
|
|
108
|
+
if (json.length > MAX_INLINE_JSON_CHARS) {
|
|
109
|
+
return `\n\n(inline preview omitted: serialized size ${json.length} chars).`;
|
|
110
|
+
}
|
|
111
|
+
return `\n\n${json}${note}`;
|
|
112
|
+
}
|
|
113
|
+
export function createResourceLink(uri, name, title, description, mimeType = "application/json") {
|
|
114
|
+
return {
|
|
115
|
+
type: "resource_link",
|
|
116
|
+
uri,
|
|
117
|
+
name,
|
|
118
|
+
title,
|
|
119
|
+
description,
|
|
120
|
+
mimeType,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* JSON-serializable copy of the tool payload for MCP `structuredContent`.
|
|
125
|
+
* Required when tools declare `outputSchema` — the SDK rejects missing structured output on success.
|
|
126
|
+
*/
|
|
127
|
+
export function toToolStructuredContent(payload) {
|
|
128
|
+
try {
|
|
129
|
+
const json = JSON.stringify(payload, (_key, value) => {
|
|
130
|
+
if (typeof value === "bigint") {
|
|
131
|
+
return value.toString();
|
|
132
|
+
}
|
|
133
|
+
if (typeof Buffer !== "undefined" && Buffer.isBuffer(value)) {
|
|
134
|
+
return value.toString("base64");
|
|
135
|
+
}
|
|
136
|
+
return value;
|
|
137
|
+
});
|
|
138
|
+
return JSON.parse(json);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
const fallback = {
|
|
142
|
+
version: payload.version,
|
|
143
|
+
success: payload.success,
|
|
144
|
+
message: payload.message,
|
|
145
|
+
};
|
|
146
|
+
if (payload.error !== undefined) {
|
|
147
|
+
fallback.error = payload.error;
|
|
148
|
+
}
|
|
149
|
+
return fallback;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export function createToolResult(payload, extraContent = []) {
|
|
153
|
+
const summary = createTextSummary(payload);
|
|
154
|
+
const dataAttachment = payload.success && payload.data !== undefined
|
|
155
|
+
? buildInlineDataAttachment(payload.data)
|
|
156
|
+
: "";
|
|
157
|
+
return {
|
|
158
|
+
content: [
|
|
159
|
+
{
|
|
160
|
+
type: "text",
|
|
161
|
+
text: summary + dataAttachment,
|
|
162
|
+
},
|
|
163
|
+
...extraContent,
|
|
164
|
+
],
|
|
165
|
+
isError: !payload.success,
|
|
166
|
+
structuredContent: toToolStructuredContent(payload),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export function normalizeToolResult(rawResult, fallbackMessage) {
|
|
170
|
+
if (typeof rawResult !== "object" || rawResult === null) {
|
|
171
|
+
return {
|
|
172
|
+
version: 1,
|
|
173
|
+
success: true,
|
|
174
|
+
message: fallbackMessage,
|
|
175
|
+
data: rawResult,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const raw = rawResult;
|
|
179
|
+
const success = raw.success !== false;
|
|
180
|
+
const message = typeof raw.message === "string" && raw.message.trim()
|
|
181
|
+
? raw.message
|
|
182
|
+
: fallbackMessage;
|
|
183
|
+
const knownKeys = new Set([
|
|
184
|
+
"success",
|
|
185
|
+
"message",
|
|
186
|
+
"error",
|
|
187
|
+
"data",
|
|
188
|
+
"meta",
|
|
189
|
+
"warnings",
|
|
190
|
+
"pagination",
|
|
191
|
+
"truncated",
|
|
192
|
+
]);
|
|
193
|
+
const passthrough = {};
|
|
194
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
195
|
+
if (!knownKeys.has(key)) {
|
|
196
|
+
passthrough[key] = value;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
let meta = raw.meta && typeof raw.meta === "object" && !Array.isArray(raw.meta)
|
|
200
|
+
? { ...raw.meta }
|
|
201
|
+
: undefined;
|
|
202
|
+
if (Object.keys(passthrough).length > 0) {
|
|
203
|
+
if ("data" in raw) {
|
|
204
|
+
meta ?? (meta = {});
|
|
205
|
+
meta.raw = passthrough;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const payload = {
|
|
209
|
+
version: 1,
|
|
210
|
+
success,
|
|
211
|
+
message,
|
|
212
|
+
};
|
|
213
|
+
if ("data" in raw) {
|
|
214
|
+
payload.data = raw.data;
|
|
215
|
+
}
|
|
216
|
+
else if (Object.keys(passthrough).length > 0) {
|
|
217
|
+
if (Object.keys(passthrough).length === 1) {
|
|
218
|
+
payload.data = Object.values(passthrough)[0];
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
payload.data = passthrough;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (meta && Object.keys(meta).length > 0) {
|
|
225
|
+
payload.meta = meta;
|
|
226
|
+
}
|
|
227
|
+
if (Array.isArray(raw.warnings)) {
|
|
228
|
+
payload.warnings = raw.warnings.filter((warning) => typeof warning === "string");
|
|
229
|
+
}
|
|
230
|
+
if (typeof raw.truncated === "boolean") {
|
|
231
|
+
payload.truncated = raw.truncated;
|
|
232
|
+
}
|
|
233
|
+
if (raw.pagination &&
|
|
234
|
+
typeof raw.pagination === "object" &&
|
|
235
|
+
!Array.isArray(raw.pagination)) {
|
|
236
|
+
payload.pagination = raw.pagination;
|
|
237
|
+
}
|
|
238
|
+
if (!success) {
|
|
239
|
+
payload.error = {
|
|
240
|
+
code: classifyToolErrorCode(raw, message),
|
|
241
|
+
details: raw.error && typeof raw.error !== "string" ? raw.error : undefined,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
return payload;
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=mcpResults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpResults.js","sourceRoot":"","sources":["../src/mcpResults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
export interface PromptDefinition {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
arguments?: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
required?: boolean;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export declare const promptDefinitions: PromptDefinition[];
|
|
12
|
+
export interface RegisterPromptsOptions {
|
|
13
|
+
isReadOnly: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function registerPrompts(server: McpServer, options: RegisterPromptsOptions): void;
|
|
16
|
+
//# sourceMappingURL=promptRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptRegistry.d.ts","sourceRoot":"","sources":["../src/promptRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAiD/C,CAAC;AAoBF,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,OAAO,CAAC;CACrB;AAkDD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,sBAAsB,GAC9B,IAAI,CA4BN"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { completable } from "@modelcontextprotocol/sdk/server/completable.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { getAllowedDatabases } from "./db.js";
|
|
4
|
+
export const promptDefinitions = [
|
|
5
|
+
{
|
|
6
|
+
name: "explore_schema",
|
|
7
|
+
description: "Guide the assistant to inspect SQL Server schema before answering a database question.",
|
|
8
|
+
arguments: [
|
|
9
|
+
{
|
|
10
|
+
name: "goal",
|
|
11
|
+
description: "What you want to understand or build from the schema.",
|
|
12
|
+
required: true,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: "databaseName",
|
|
16
|
+
description: "Configured database to inspect first.",
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: "draft_safe_select",
|
|
22
|
+
description: "Draft a safe read-only SQL workflow using schema inspection before running a SELECT.",
|
|
23
|
+
arguments: [
|
|
24
|
+
{
|
|
25
|
+
name: "question",
|
|
26
|
+
description: "Business question to answer with SQL.",
|
|
27
|
+
required: true,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "databaseName",
|
|
31
|
+
description: "Configured database to inspect first.",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: "review_write_operation",
|
|
37
|
+
description: "Review a proposed INSERT, UPDATE, DELETE, or DDL change before execution. When the server is read-only, directs the assistant to stop and avoid terminal or external SQL clients.",
|
|
38
|
+
arguments: [
|
|
39
|
+
{
|
|
40
|
+
name: "operation",
|
|
41
|
+
description: "The change you want to make.",
|
|
42
|
+
required: true,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "databaseName",
|
|
46
|
+
description: "Configured database the change targets.",
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
function buildPromptMessage(text) {
|
|
52
|
+
return {
|
|
53
|
+
role: "user",
|
|
54
|
+
content: {
|
|
55
|
+
type: "text",
|
|
56
|
+
text,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const databaseNameArgumentSchema = completable(z.string().describe("Configured database to inspect first."), async (value) => getAllowedDatabases().filter((database) => database.toLowerCase().startsWith(String(value ?? "").toLowerCase())));
|
|
61
|
+
function createPromptMessageBuilders(isReadOnly) {
|
|
62
|
+
return {
|
|
63
|
+
explore_schema: (args) => ({
|
|
64
|
+
description: "Inspect the schema before answering or generating SQL.",
|
|
65
|
+
messages: [
|
|
66
|
+
buildPromptMessage(`Inspect the SQL Server schema before answering the request.\nGoal: ${args.goal ?? "Understand the database shape"}\nDatabase: ${args.databaseName ?? "default configured database"}\nUse list_objects or list_table first, then describe_object or describe_table before writing SQL.`),
|
|
67
|
+
],
|
|
68
|
+
}),
|
|
69
|
+
draft_safe_select: (args) => ({
|
|
70
|
+
description: "Draft a read-only SQL workflow that inspects schema before querying data.",
|
|
71
|
+
messages: [
|
|
72
|
+
buildPromptMessage(`Answer this database question safely: ${args.question ?? "No question provided"}\nDatabase: ${args.databaseName ?? "default configured database"}\nInspect relevant schema first, then use read_data or search_data. Keep the final SQL read-only and explain assumptions.`),
|
|
73
|
+
],
|
|
74
|
+
}),
|
|
75
|
+
review_write_operation: (args) => {
|
|
76
|
+
const operation = args.operation ?? "No operation provided";
|
|
77
|
+
const database = args.databaseName ?? "default configured database";
|
|
78
|
+
const body = isReadOnly
|
|
79
|
+
? `Review this proposed change: ${operation}\nDatabase: ${database}
|
|
80
|
+
|
|
81
|
+
This MCP SQL Server connection is read-only (confirm with resource mssql://config/server — readOnly should be true). Write tools such as delete_data, update_data, insert_data, and DDL tools are not available.
|
|
82
|
+
|
|
83
|
+
STOP: Do not execute this change through the assistant. Do not open a terminal or use sqlcmd, SSMS, Azure Data Studio, PowerShell SQL cmdlets, ODBC/JDBC one-off scripts, or any other database client to apply INSERT, UPDATE, DELETE, or DDL as a workaround. Tell the user their MCP server is read-only and they must turn off READONLY (or run the change themselves manually outside this assistant) if they want execution here.
|
|
84
|
+
|
|
85
|
+
You may still: outline risks, confirm keys and scope, and suggest read-only preview SELECTs for discussion only.`
|
|
86
|
+
: `Review this proposed change before execution: ${operation}\nDatabase: ${database}\nConfirm the target objects, verify WHERE clauses where applicable, and suggest preview queries before any write tool is used.`;
|
|
87
|
+
return {
|
|
88
|
+
description: "Review a proposed change and identify safety checks before running it.",
|
|
89
|
+
messages: [buildPromptMessage(body)],
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function registerPrompts(server, options) {
|
|
95
|
+
const promptMessageBuilders = createPromptMessageBuilders(options.isReadOnly);
|
|
96
|
+
for (const prompt of promptDefinitions) {
|
|
97
|
+
const argsShape = Object.fromEntries((prompt.arguments ?? []).map((argument) => [
|
|
98
|
+
argument.name,
|
|
99
|
+
argument.required
|
|
100
|
+
? z.string().describe(argument.description)
|
|
101
|
+
: argument.name === "databaseName"
|
|
102
|
+
? databaseNameArgumentSchema.optional()
|
|
103
|
+
: z.string().describe(argument.description).optional(),
|
|
104
|
+
]));
|
|
105
|
+
server.registerPrompt(prompt.name, {
|
|
106
|
+
title: prompt.name,
|
|
107
|
+
description: prompt.description,
|
|
108
|
+
argsSchema: argsShape,
|
|
109
|
+
}, (args) => promptMessageBuilders[prompt.name](args));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=promptRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptRegistry.js","sourceRoot":"","sources":["../src/promptRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { ServerState } from "./serverState.js";
|
|
3
|
+
export interface ResourceRegistryContext {
|
|
4
|
+
serverName: string;
|
|
5
|
+
serverVersion: string;
|
|
6
|
+
isReadOnly: boolean;
|
|
7
|
+
allowedDatabases: string[];
|
|
8
|
+
toolNames: string[];
|
|
9
|
+
maxRows: number;
|
|
10
|
+
queryTimeoutMs: number;
|
|
11
|
+
state: ServerState;
|
|
12
|
+
}
|
|
13
|
+
export declare function registerResources(server: McpServer, context: ResourceRegistryContext): void;
|
|
14
|
+
//# sourceMappingURL=resourceRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceRegistry.d.ts","sourceRoot":"","sources":["../src/resourceRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAWtF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAc/C,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC;CACpB;AA2ND,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,uBAAuB,GAC/B,IAAI,CAqPN"}
|