@mcp-consultant-tools/azure-sql 28.0.0-beta.7 → 28.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.
- package/build/cli/commands/connection-commands.d.ts +7 -0
- package/build/cli/commands/connection-commands.d.ts.map +1 -0
- package/build/cli/commands/connection-commands.js +64 -0
- package/build/cli/commands/connection-commands.js.map +1 -0
- package/build/cli/commands/crud-commands.d.ts +7 -0
- package/build/cli/commands/crud-commands.d.ts.map +1 -0
- package/build/cli/commands/crud-commands.js +63 -0
- package/build/cli/commands/crud-commands.js.map +1 -0
- package/build/cli/commands/index.d.ts +13 -0
- package/build/cli/commands/index.d.ts.map +1 -0
- package/build/cli/commands/index.js +24 -0
- package/build/cli/commands/index.js.map +1 -0
- package/build/cli/commands/query-commands.d.ts +7 -0
- package/build/cli/commands/query-commands.d.ts.map +1 -0
- package/build/cli/commands/query-commands.js +149 -0
- package/build/cli/commands/query-commands.js.map +1 -0
- package/build/cli/commands/sproc-commands.d.ts +7 -0
- package/build/cli/commands/sproc-commands.d.ts.map +1 -0
- package/build/cli/commands/sproc-commands.js +87 -0
- package/build/cli/commands/sproc-commands.js.map +1 -0
- package/build/cli/commands/unrestricted-commands.d.ts +7 -0
- package/build/cli/commands/unrestricted-commands.d.ts.map +1 -0
- package/build/cli/commands/unrestricted-commands.js +31 -0
- package/build/cli/commands/unrestricted-commands.js.map +1 -0
- package/build/cli/commands/view-commands.d.ts +7 -0
- package/build/cli/commands/view-commands.d.ts.map +1 -0
- package/build/cli/commands/view-commands.js +66 -0
- package/build/cli/commands/view-commands.js.map +1 -0
- package/build/cli/output.d.ts +11 -0
- package/build/cli/output.d.ts.map +1 -0
- package/build/cli/output.js +10 -0
- package/build/cli/output.js.map +1 -0
- package/build/cli.d.ts +9 -0
- package/build/cli.d.ts.map +1 -0
- package/build/cli.js +27 -0
- package/build/cli.js.map +1 -0
- package/build/context-factory.d.ts +10 -0
- package/build/context-factory.d.ts.map +1 -0
- package/build/context-factory.js +104 -0
- package/build/context-factory.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +44 -0
- package/build/index.js.map +1 -1
- package/build/services/index.d.ts +2 -0
- package/build/services/index.d.ts.map +1 -1
- package/build/services/index.js +1 -0
- package/build/services/index.js.map +1 -1
- package/build/services/write-service.d.ts +109 -0
- package/build/services/write-service.d.ts.map +1 -0
- package/build/services/write-service.js +735 -0
- package/build/services/write-service.js.map +1 -0
- package/build/tool-examples.d.ts +32 -0
- package/build/tool-examples.d.ts.map +1 -1
- package/build/tool-examples.js +33 -0
- package/build/tool-examples.js.map +1 -1
- package/build/tools/crud-tools.d.ts +3 -0
- package/build/tools/crud-tools.d.ts.map +1 -0
- package/build/tools/crud-tools.js +115 -0
- package/build/tools/crud-tools.js.map +1 -0
- package/build/tools/index.d.ts +4 -0
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +12 -0
- package/build/tools/index.js.map +1 -1
- package/build/tools/sproc-tools.d.ts +3 -0
- package/build/tools/sproc-tools.d.ts.map +1 -0
- package/build/tools/sproc-tools.js +172 -0
- package/build/tools/sproc-tools.js.map +1 -0
- package/build/tools/unrestricted-tools.d.ts +7 -0
- package/build/tools/unrestricted-tools.d.ts.map +1 -0
- package/build/tools/unrestricted-tools.js +63 -0
- package/build/tools/unrestricted-tools.js.map +1 -0
- package/build/tools/view-tools.d.ts +3 -0
- package/build/tools/view-tools.d.ts.map +1 -0
- package/build/tools/view-tools.js +121 -0
- package/build/tools/view-tools.js.map +1 -0
- package/build/types.d.ts +10 -0
- package/build/types.d.ts.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View CLI Commands - 2 commands mapping to view management MCP tools
|
|
3
|
+
*/
|
|
4
|
+
import { getGlobalFlags, handleCliError } from '@mcp-consultant-tools/core';
|
|
5
|
+
import { outputResult } from '../output.js';
|
|
6
|
+
export function registerViewCommands(program, ctx) {
|
|
7
|
+
const view = program.command('view').description('View management operations');
|
|
8
|
+
view
|
|
9
|
+
.command('manage')
|
|
10
|
+
.description('Create or alter a SQL view')
|
|
11
|
+
.argument('<schemaName>', "Schema name (e.g., 'dbo')")
|
|
12
|
+
.argument('<viewName>', "View name (e.g., 'vw_ActiveUsers')")
|
|
13
|
+
.argument('<selectBody>', 'SELECT body for the view (e.g., "SELECT id, name FROM Users WHERE active = 1")')
|
|
14
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
15
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
16
|
+
.action(async (schemaName, viewName, selectBody, opts) => {
|
|
17
|
+
try {
|
|
18
|
+
ctx.checkViewManageEnabled();
|
|
19
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
20
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
21
|
+
const result = await ctx.write.manageView(resolvedServerId, resolvedDatabase, schemaName, viewName, selectBody);
|
|
22
|
+
outputResult({ fileName: `sql-view-manage-${schemaName}-${viewName}`, data: result, summary: result.message }, getGlobalFlags(program));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
handleCliError(error, 'manage view');
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
view
|
|
29
|
+
.command('deploy')
|
|
30
|
+
.description('Deploy a SQL view from a local .sql file')
|
|
31
|
+
.argument('<filePath>', 'Path to a .sql file containing a CREATE OR ALTER VIEW statement')
|
|
32
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
33
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
34
|
+
.action(async (filePath, opts) => {
|
|
35
|
+
try {
|
|
36
|
+
ctx.checkViewManageEnabled();
|
|
37
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
38
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
39
|
+
const result = await ctx.write.deployViewFromFile(resolvedServerId, resolvedDatabase, filePath);
|
|
40
|
+
outputResult({ fileName: `sql-view-deploy-${filePath.replace(/[^a-zA-Z0-9]/g, '_')}`, data: result, summary: result.message }, getGlobalFlags(program));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
handleCliError(error, 'deploy view from file');
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
view
|
|
47
|
+
.command('drop')
|
|
48
|
+
.description('Drop a SQL view if it exists')
|
|
49
|
+
.argument('<schemaName>', "Schema name (e.g., 'dbo')")
|
|
50
|
+
.argument('<viewName>', "View name (e.g., 'vw_ActiveUsers')")
|
|
51
|
+
.option('-s, --server-id <id>', 'Server ID (omit for default)')
|
|
52
|
+
.option('-d, --database <name>', 'Database name (omit for default)')
|
|
53
|
+
.action(async (schemaName, viewName, opts) => {
|
|
54
|
+
try {
|
|
55
|
+
ctx.checkViewDropEnabled();
|
|
56
|
+
const resolvedServerId = ctx.connection.resolveServerId(opts.serverId);
|
|
57
|
+
const resolvedDatabase = ctx.connection.resolveDatabase(resolvedServerId, opts.database);
|
|
58
|
+
const result = await ctx.write.dropView(resolvedServerId, resolvedDatabase, schemaName, viewName);
|
|
59
|
+
outputResult({ fileName: `sql-view-drop-${schemaName}-${viewName}`, data: result, summary: result.message }, getGlobalFlags(program));
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
handleCliError(error, 'drop view');
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=view-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-commands.js","sourceRoot":"","sources":["../../../src/cli/commands/view-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI output helper for azure-sql package.
|
|
3
|
+
* Thin wrapper setting the package-specific cache directory.
|
|
4
|
+
*/
|
|
5
|
+
import { type GlobalFlags } from '@mcp-consultant-tools/core';
|
|
6
|
+
export declare function outputResult(opts: {
|
|
7
|
+
fileName: string;
|
|
8
|
+
data: unknown;
|
|
9
|
+
summary: string;
|
|
10
|
+
}, flags: GlobalFlags): void;
|
|
11
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAoC,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAIhG,wBAAgB,YAAY,CAC1B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAC1D,KAAK,EAAE,WAAW,GACjB,IAAI,CAEN"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI output helper for azure-sql package.
|
|
3
|
+
* Thin wrapper setting the package-specific cache directory.
|
|
4
|
+
*/
|
|
5
|
+
import { outputResult as coreOutputResult } from '@mcp-consultant-tools/core';
|
|
6
|
+
const CACHE_DIR = '.mcp-sql-cache';
|
|
7
|
+
export function outputResult(opts, flags) {
|
|
8
|
+
coreOutputResult({ ...opts, cacheDir: CACHE_DIR }, flags);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAoB,MAAM,4BAA4B,CAAC;AAEhG,MAAM,SAAS,GAAG,gBAAgB,CAAC;AAEnC,MAAM,UAAU,YAAY,CAC1B,IAA0D,EAC1D,KAAkB;IAElB,gBAAgB,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;AAC5D,CAAC"}
|
package/build/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
|
package/build/cli.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @mcp-consultant-tools/azure-sql CLI
|
|
4
|
+
*
|
|
5
|
+
* Command-line interface for Azure SQL Database operations.
|
|
6
|
+
* Reuses the same ServiceContext and services as the MCP server.
|
|
7
|
+
*/
|
|
8
|
+
import { createCliProgram, loadEnvForCli } from '@mcp-consultant-tools/core';
|
|
9
|
+
import { createServiceContext } from './context-factory.js';
|
|
10
|
+
import { registerAllCommands } from './cli/commands/index.js';
|
|
11
|
+
const program = createCliProgram({
|
|
12
|
+
name: 'mcp-sql-cli',
|
|
13
|
+
description: 'Azure SQL Database CLI - queries and schema exploration',
|
|
14
|
+
version: '28.0.0-beta.7',
|
|
15
|
+
});
|
|
16
|
+
// Load env before parsing (--env-file handled by commander hook)
|
|
17
|
+
program.hook('preAction', (thisCommand) => {
|
|
18
|
+
const opts = thisCommand.opts();
|
|
19
|
+
loadEnvForCli(opts.envFile);
|
|
20
|
+
});
|
|
21
|
+
const ctx = createServiceContext();
|
|
22
|
+
registerAllCommands(program, ctx);
|
|
23
|
+
program.parseAsync(process.argv).catch((error) => {
|
|
24
|
+
console.error('CLI error:', error.message);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=cli.js.map
|
package/build/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,OAAO,GAAG,gBAAgB,CAAC;IAC/B,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,yDAAyD;IACtE,OAAO,EAAE,eAAe;CACzB,CAAC,CAAC;AAEH,iEAAiE;AACjE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAgB,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;AACnC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAElC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAU,EAAE,EAAE;IACpD,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared ServiceContext factory for Azure SQL.
|
|
3
|
+
* Used by both MCP server (index.ts) and CLI (cli.ts).
|
|
4
|
+
*/
|
|
5
|
+
import type { ServiceContext } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Build a ServiceContext from environment variables (lazy service initialization).
|
|
8
|
+
*/
|
|
9
|
+
export declare function createServiceContext(): ServiceContext;
|
|
10
|
+
//# sourceMappingURL=context-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-factory.d.ts","sourceRoot":"","sources":["../src/context-factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CA+FrD"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared ServiceContext factory for Azure SQL.
|
|
3
|
+
* Used by both MCP server (index.ts) and CLI (cli.ts).
|
|
4
|
+
*/
|
|
5
|
+
import { ConnectionService } from './services/connection-service.js';
|
|
6
|
+
import { QueryService } from './services/query-service.js';
|
|
7
|
+
import { WriteService } from './services/write-service.js';
|
|
8
|
+
/**
|
|
9
|
+
* Build a ServiceContext from environment variables (lazy service initialization).
|
|
10
|
+
*/
|
|
11
|
+
export function createServiceContext() {
|
|
12
|
+
let connection = null;
|
|
13
|
+
let query = null;
|
|
14
|
+
let write = null;
|
|
15
|
+
function getConnection() {
|
|
16
|
+
if (!connection) {
|
|
17
|
+
const missingConfig = [];
|
|
18
|
+
let resources = [];
|
|
19
|
+
if (process.env.AZURE_SQL_SERVERS) {
|
|
20
|
+
try {
|
|
21
|
+
resources = JSON.parse(process.env.AZURE_SQL_SERVERS);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
throw new Error("Failed to parse AZURE_SQL_SERVERS JSON");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else if (process.env.AZURE_SQL_SERVER && process.env.AZURE_SQL_DATABASE) {
|
|
28
|
+
resources = [{
|
|
29
|
+
id: 'default',
|
|
30
|
+
name: 'Default SQL Server',
|
|
31
|
+
server: process.env.AZURE_SQL_SERVER,
|
|
32
|
+
port: parseInt(process.env.AZURE_SQL_PORT || "1433"),
|
|
33
|
+
active: true,
|
|
34
|
+
databases: [{
|
|
35
|
+
name: process.env.AZURE_SQL_DATABASE,
|
|
36
|
+
active: true,
|
|
37
|
+
}],
|
|
38
|
+
username: process.env.AZURE_SQL_USERNAME || '',
|
|
39
|
+
password: process.env.AZURE_SQL_PASSWORD || '',
|
|
40
|
+
}];
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
missingConfig.push("AZURE_SQL_SERVERS or AZURE_SQL_SERVER/AZURE_SQL_DATABASE");
|
|
44
|
+
}
|
|
45
|
+
if (missingConfig.length > 0) {
|
|
46
|
+
throw new Error(`Missing Azure SQL configuration: ${missingConfig.join(", ")}`);
|
|
47
|
+
}
|
|
48
|
+
const config = {
|
|
49
|
+
resources,
|
|
50
|
+
queryTimeout: parseInt(process.env.AZURE_SQL_QUERY_TIMEOUT || "30000"),
|
|
51
|
+
maxResultRows: parseInt(process.env.AZURE_SQL_MAX_RESULT_ROWS || "1000"),
|
|
52
|
+
};
|
|
53
|
+
connection = new ConnectionService(config);
|
|
54
|
+
console.error("Azure SQL service initialized");
|
|
55
|
+
}
|
|
56
|
+
return connection;
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
get connection() { return getConnection(); },
|
|
60
|
+
get query() { return query ??= new QueryService(getConnection()); },
|
|
61
|
+
get write() { return write ??= new WriteService(getConnection()); },
|
|
62
|
+
checkViewManageEnabled() {
|
|
63
|
+
if (process.env.SQL_ENABLE_VIEW_MANAGE !== 'true') {
|
|
64
|
+
throw new Error('View management is disabled. Set SQL_ENABLE_VIEW_MANAGE=true to enable CREATE OR ALTER VIEW.');
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
checkViewDropEnabled() {
|
|
68
|
+
if (process.env.SQL_ENABLE_VIEW_DROP !== 'true') {
|
|
69
|
+
throw new Error('View drop is disabled. Set SQL_ENABLE_VIEW_DROP=true to enable DROP VIEW.');
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
checkSprocManageEnabled() {
|
|
73
|
+
if (process.env.SQL_ENABLE_SPROC_MANAGE !== 'true') {
|
|
74
|
+
throw new Error('Stored procedure management is disabled. Set SQL_ENABLE_SPROC_MANAGE=true to enable CREATE OR ALTER PROCEDURE.');
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
checkSprocDropEnabled() {
|
|
78
|
+
if (process.env.SQL_ENABLE_SPROC_DROP !== 'true') {
|
|
79
|
+
throw new Error('Stored procedure drop is disabled. Set SQL_ENABLE_SPROC_DROP=true to enable DROP PROCEDURE.');
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
checkSprocExecuteEnabled() {
|
|
83
|
+
if (process.env.SQL_ENABLE_SPROC_EXECUTE !== 'true') {
|
|
84
|
+
throw new Error('Stored procedure execution is disabled. Set SQL_ENABLE_SPROC_EXECUTE=true to enable EXEC.');
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
checkInsertEnabled() {
|
|
88
|
+
if (process.env.SQL_ENABLE_INSERT !== 'true') {
|
|
89
|
+
throw new Error('INSERT operations are disabled. Set SQL_ENABLE_INSERT=true to enable.');
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
checkUpdateEnabled() {
|
|
93
|
+
if (process.env.SQL_ENABLE_UPDATE !== 'true') {
|
|
94
|
+
throw new Error('UPDATE operations are disabled. Set SQL_ENABLE_UPDATE=true to enable.');
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
checkDeleteEnabled() {
|
|
98
|
+
if (process.env.SQL_ENABLE_DELETE !== 'true') {
|
|
99
|
+
throw new Error('DELETE operations are disabled. Set SQL_ENABLE_DELETE=true to enable.');
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=context-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-factory.js","sourceRoot":"","sources":["../src/context-factory.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
export declare function registerAzureSqlTools(server: any): void;
|
|
13
13
|
export { ConnectionService } from './services/connection-service.js';
|
|
14
14
|
export { QueryService } from './services/query-service.js';
|
|
15
|
+
export { WriteService } from './services/write-service.js';
|
|
15
16
|
export type { AzureSqlConfig } from './services/connection-service.js';
|
|
16
17
|
export type { ServiceContext } from './types.js';
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAmHH;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAIvD;AAGD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { realpathSync } from "node:fs";
|
|
|
11
11
|
import { createMcpServer, createEnvLoader } from "@mcp-consultant-tools/core";
|
|
12
12
|
import { ConnectionService } from './services/connection-service.js';
|
|
13
13
|
import { QueryService } from './services/query-service.js';
|
|
14
|
+
import { WriteService } from './services/write-service.js';
|
|
14
15
|
import { registerAllTools } from './tools/index.js';
|
|
15
16
|
import { registerAllPrompts } from './prompts/index.js';
|
|
16
17
|
/**
|
|
@@ -19,6 +20,7 @@ import { registerAllPrompts } from './prompts/index.js';
|
|
|
19
20
|
function createServiceContext() {
|
|
20
21
|
let connection = null;
|
|
21
22
|
let query = null;
|
|
23
|
+
let write = null;
|
|
22
24
|
function getConnection() {
|
|
23
25
|
if (!connection) {
|
|
24
26
|
const missingConfig = [];
|
|
@@ -65,6 +67,47 @@ function createServiceContext() {
|
|
|
65
67
|
return {
|
|
66
68
|
get connection() { return getConnection(); },
|
|
67
69
|
get query() { return query ??= new QueryService(getConnection()); },
|
|
70
|
+
get write() { return write ??= new WriteService(getConnection()); },
|
|
71
|
+
checkViewManageEnabled() {
|
|
72
|
+
if (process.env.SQL_ENABLE_VIEW_MANAGE !== 'true') {
|
|
73
|
+
throw new Error('View management is disabled. Set SQL_ENABLE_VIEW_MANAGE=true to enable CREATE OR ALTER VIEW.');
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
checkViewDropEnabled() {
|
|
77
|
+
if (process.env.SQL_ENABLE_VIEW_DROP !== 'true') {
|
|
78
|
+
throw new Error('View drop is disabled. Set SQL_ENABLE_VIEW_DROP=true to enable DROP VIEW.');
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
checkSprocManageEnabled() {
|
|
82
|
+
if (process.env.SQL_ENABLE_SPROC_MANAGE !== 'true') {
|
|
83
|
+
throw new Error('Stored procedure management is disabled. Set SQL_ENABLE_SPROC_MANAGE=true to enable CREATE OR ALTER PROCEDURE.');
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
checkSprocDropEnabled() {
|
|
87
|
+
if (process.env.SQL_ENABLE_SPROC_DROP !== 'true') {
|
|
88
|
+
throw new Error('Stored procedure drop is disabled. Set SQL_ENABLE_SPROC_DROP=true to enable DROP PROCEDURE.');
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
checkSprocExecuteEnabled() {
|
|
92
|
+
if (process.env.SQL_ENABLE_SPROC_EXECUTE !== 'true') {
|
|
93
|
+
throw new Error('Stored procedure execution is disabled. Set SQL_ENABLE_SPROC_EXECUTE=true to enable EXEC.');
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
checkInsertEnabled() {
|
|
97
|
+
if (process.env.SQL_ENABLE_INSERT !== 'true') {
|
|
98
|
+
throw new Error('INSERT operations are disabled. Set SQL_ENABLE_INSERT=true to enable.');
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
checkUpdateEnabled() {
|
|
102
|
+
if (process.env.SQL_ENABLE_UPDATE !== 'true') {
|
|
103
|
+
throw new Error('UPDATE operations are disabled. Set SQL_ENABLE_UPDATE=true to enable.');
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
checkDeleteEnabled() {
|
|
107
|
+
if (process.env.SQL_ENABLE_DELETE !== 'true') {
|
|
108
|
+
throw new Error('DELETE operations are disabled. Set SQL_ENABLE_DELETE=true to enable.');
|
|
109
|
+
}
|
|
110
|
+
},
|
|
68
111
|
};
|
|
69
112
|
}
|
|
70
113
|
/**
|
|
@@ -79,6 +122,7 @@ export function registerAzureSqlTools(server) {
|
|
|
79
122
|
// Backward-compatible exports
|
|
80
123
|
export { ConnectionService } from './services/connection-service.js';
|
|
81
124
|
export { QueryService } from './services/query-service.js';
|
|
125
|
+
export { WriteService } from './services/write-service.js';
|
|
82
126
|
/**
|
|
83
127
|
* Standalone CLI server (when run directly)
|
|
84
128
|
* Uses realpathSync to resolve symlinks created by npx
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,SAAS,oBAAoB;IAC3B,IAAI,UAAU,GAA6B,IAAI,CAAC;IAChD,IAAI,KAAK,GAAwB,IAAI,CAAC;IAEtC,SAAS,aAAa;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,aAAa,GAAa,EAAE,CAAC;YACnC,IAAI,SAAS,GAAU,EAAE,CAAC;YAE1B,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACxD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBAC1E,SAAS,GAAG,CAAC;wBACX,EAAE,EAAE,SAAS;wBACb,IAAI,EAAE,oBAAoB;wBAC1B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;wBACpC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC;wBACpD,MAAM,EAAE,IAAI;wBACZ,SAAS,EAAE,CAAC;gCACV,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;gCACpC,MAAM,EAAE,IAAI;6BACb,CAAC;wBACF,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;wBAC9C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;qBAC/C,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;YACjF,CAAC;YAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,MAAM,MAAM,GAAmB;gBAC7B,SAAS;gBACT,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC;gBACtE,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,MAAM,CAAC;aACzE,CAAC;YAEF,UAAU,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO;QACL,IAAI,UAAU,KAAK,OAAO,aAAa,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,IAAI,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { ConnectionService } from './connection-service.js';
|
|
2
2
|
export { QueryService } from './query-service.js';
|
|
3
|
+
export { WriteService } from './write-service.js';
|
|
3
4
|
export type { AzureSqlConfig, AzureSqlServerResource, AzureSqlDatabaseConfig, SqlApiCollectionResponse, ServerInfo, DatabaseInfo, DefaultConfiguration, ConnectionTestResult, } from './connection-service.js';
|
|
4
5
|
export type { TableInfo, ViewInfo, StoredProcedureInfo, TriggerInfo, FunctionInfo, ColumnInfo, IndexInfo, ForeignKeyInfo, TableSchema, ObjectDefinition, } from './query-service.js';
|
|
6
|
+
export type { WriteResult, } from './write-service.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,SAAS,EACT,QAAQ,EACR,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
|
package/build/services/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { ConnectionService } from './connection-service.js';
|
|
2
|
+
export interface WriteResult {
|
|
3
|
+
success: boolean;
|
|
4
|
+
message: string;
|
|
5
|
+
objectName?: string;
|
|
6
|
+
rowsAffected?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface UnrestrictedBatchResult {
|
|
9
|
+
batchIndex: number;
|
|
10
|
+
sql: string;
|
|
11
|
+
success: boolean;
|
|
12
|
+
rowsAffected?: number;
|
|
13
|
+
resultSet?: any[];
|
|
14
|
+
error?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface UnrestrictedResult {
|
|
17
|
+
batches: UnrestrictedBatchResult[];
|
|
18
|
+
totalBatches: number;
|
|
19
|
+
completedBatches: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* WriteService handles all write operations against Azure SQL databases:
|
|
23
|
+
* view management, stored procedure management/execution, and DML (INSERT/UPDATE/DELETE).
|
|
24
|
+
*
|
|
25
|
+
* Depends on ConnectionService for connection pooling.
|
|
26
|
+
*/
|
|
27
|
+
export declare class WriteService {
|
|
28
|
+
private readonly connectionService;
|
|
29
|
+
constructor(connectionService: ConnectionService);
|
|
30
|
+
/**
|
|
31
|
+
* Validate that a string is a safe SQL identifier (schema name, table name, etc.).
|
|
32
|
+
* Prevents SQL injection on object names.
|
|
33
|
+
*/
|
|
34
|
+
private validateIdentifier;
|
|
35
|
+
/**
|
|
36
|
+
* Strip SQL comments and normalize whitespace for validation.
|
|
37
|
+
*/
|
|
38
|
+
private cleanSql;
|
|
39
|
+
/**
|
|
40
|
+
* Validate a DML query starts with the expected keyword and contains no dangerous patterns.
|
|
41
|
+
*/
|
|
42
|
+
private validateDmlQuery;
|
|
43
|
+
/**
|
|
44
|
+
* Create or alter a view.
|
|
45
|
+
*/
|
|
46
|
+
manageView(serverId: string, database: string, schemaName: string, viewName: string, selectBody: string): Promise<WriteResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Deploy a view from a local .sql file.
|
|
49
|
+
* Reads the file and executes its contents as-is against the database.
|
|
50
|
+
* The file must contain a valid CREATE OR ALTER VIEW statement.
|
|
51
|
+
*/
|
|
52
|
+
deployViewFromFile(serverId: string, database: string, filePath: string): Promise<WriteResult>;
|
|
53
|
+
/**
|
|
54
|
+
* Drop a view if it exists.
|
|
55
|
+
*/
|
|
56
|
+
dropView(serverId: string, database: string, schemaName: string, viewName: string): Promise<WriteResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Create or alter a stored procedure.
|
|
59
|
+
*/
|
|
60
|
+
manageSproc(serverId: string, database: string, schemaName: string, sprocName: string, definition: string): Promise<WriteResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Deploy a stored procedure from a local .sql file.
|
|
63
|
+
* Reads the file and executes its contents as-is against the database.
|
|
64
|
+
* The file must contain a valid CREATE OR ALTER PROCEDURE statement.
|
|
65
|
+
*/
|
|
66
|
+
deploySprocFromFile(serverId: string, database: string, filePath: string): Promise<WriteResult>;
|
|
67
|
+
/**
|
|
68
|
+
* Drop a stored procedure if it exists.
|
|
69
|
+
*/
|
|
70
|
+
dropSproc(serverId: string, database: string, schemaName: string, sprocName: string): Promise<WriteResult>;
|
|
71
|
+
/**
|
|
72
|
+
* Execute a stored procedure using mssql request.execute() (not raw SQL).
|
|
73
|
+
* Parameters are passed via request.input() for safety.
|
|
74
|
+
*/
|
|
75
|
+
executeSproc(serverId: string, database: string, schemaName: string, sprocName: string, parameters?: Record<string, any>): Promise<{
|
|
76
|
+
rows: any[];
|
|
77
|
+
rowCount: number;
|
|
78
|
+
returnValue: number;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* Execute an INSERT query with safety validation.
|
|
82
|
+
*/
|
|
83
|
+
executeInsert(serverId: string, database: string, query: string): Promise<WriteResult>;
|
|
84
|
+
/**
|
|
85
|
+
* Execute an UPDATE query with safety validation.
|
|
86
|
+
*/
|
|
87
|
+
executeUpdate(serverId: string, database: string, query: string): Promise<WriteResult>;
|
|
88
|
+
/**
|
|
89
|
+
* Execute a DELETE query with safety validation.
|
|
90
|
+
* REQUIRES a WHERE clause to prevent accidental full-table deletes.
|
|
91
|
+
*/
|
|
92
|
+
executeDelete(serverId: string, database: string, query: string): Promise<WriteResult>;
|
|
93
|
+
/**
|
|
94
|
+
* Split T-SQL on GO batch separators.
|
|
95
|
+
* Matches lines containing only GO (case-insensitive, optional whitespace).
|
|
96
|
+
*/
|
|
97
|
+
private splitBatches;
|
|
98
|
+
/**
|
|
99
|
+
* Detect the primary operation type from a SQL batch for audit logging.
|
|
100
|
+
*/
|
|
101
|
+
private detectOperationType;
|
|
102
|
+
/**
|
|
103
|
+
* Execute any T-SQL without restrictions. Supports multi-batch scripts with GO separators.
|
|
104
|
+
* This is the "break glass" method — no validation, no keyword restrictions.
|
|
105
|
+
* The caller (MCP tool / CLI) is responsible for gating behind SQL_ENABLE_UNRESTRICTED.
|
|
106
|
+
*/
|
|
107
|
+
executeUnrestricted(serverId: string, database: string, sql: string): Promise<UnrestrictedResult>;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=write-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-service.d.ts","sourceRoot":"","sources":["../../src/services/write-service.ts"],"names":[],"mappings":"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"}
|