@ai-support-agent/cli 0.0.5-beta.1 → 0.0.5-beta.3
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.
|
@@ -50,7 +50,7 @@ function extractAwsCredentialError(error, accountName) {
|
|
|
50
50
|
const data = error.response.data;
|
|
51
51
|
if (data) {
|
|
52
52
|
// SSO認証切れの場合は専用メッセージ + SSO情報
|
|
53
|
-
if (data.error === 'SSO_AUTH_REQUIRED') {
|
|
53
|
+
if (data.error === 'SSO_AUTH_REQUIRED' || data.errorCode === 'SSO_AUTH_REQUIRED') {
|
|
54
54
|
const accountId = typeof data.accountId === 'string' ? data.accountId : '';
|
|
55
55
|
return {
|
|
56
56
|
errorMessage: `AWS SSO認証の有効期限が切れています(${accountName})。管理画面からSSO再認証を実行してください。`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-credential-builder.js","sourceRoot":"","sources":["../src/aws-credential-builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,gEA6CC;AAOD,4DAuBC;AApID,kDAAyB;AAGzB,qCAAiC;AAEjC,mCAAyC;AAkBzC;;GAEG;AACH,SAAS,yBAAyB,CAAC,KAAc,EAAE,WAAmB;IACpE,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAA;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAA2C,CAAA;QAEvE,IAAI,IAAI,EAAE,CAAC;YACT,6BAA6B;YAC7B,IAAI,IAAI,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"aws-credential-builder.js","sourceRoot":"","sources":["../src/aws-credential-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import { ApiClient } from '../../api-client';
|
|
3
3
|
import type { DbCredentials } from '../../types';
|
|
4
|
-
/** SQL
|
|
5
|
-
export declare function
|
|
4
|
+
/** SQL文を検証する。writePermissions で INSERT/UPDATE/DELETE の許可を制御 */
|
|
5
|
+
export declare function validateSql(sql: string, writePermissions?: {
|
|
6
|
+
insert: boolean;
|
|
7
|
+
update: boolean;
|
|
8
|
+
delete: boolean;
|
|
9
|
+
}): {
|
|
6
10
|
valid: boolean;
|
|
7
11
|
error?: string;
|
|
8
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-query.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/db-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD
|
|
1
|
+
{"version":3,"file":"db-query.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/db-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGhD,+DAA+D;AAC/D,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,gBAAgB,CAAC,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACvE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA2CpC;AAED,wBAAwB;AACxB,wBAAsB,YAAY,CAChC,WAAW,EAAE,aAAa,EAC1B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,EAAE,CAAC,CA0CpB;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA6BjF"}
|
|
@@ -33,30 +33,50 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.
|
|
36
|
+
exports.validateSql = validateSql;
|
|
37
37
|
exports.executeQuery = executeQuery;
|
|
38
38
|
exports.registerDbQueryTool = registerDbQueryTool;
|
|
39
39
|
const zod_1 = require("zod");
|
|
40
40
|
const mcp_response_1 = require("./mcp-response");
|
|
41
|
-
/** SQL
|
|
42
|
-
function
|
|
41
|
+
/** SQL文を検証する。writePermissions で INSERT/UPDATE/DELETE の許可を制御 */
|
|
42
|
+
function validateSql(sql, writePermissions) {
|
|
43
43
|
const trimmed = sql.trim();
|
|
44
44
|
if (!trimmed) {
|
|
45
45
|
return { valid: false, error: 'SQL query is empty' };
|
|
46
46
|
}
|
|
47
|
-
// 禁止キーワードをチェック(大文字小文字無視)
|
|
48
|
-
const forbidden = ['DROP', 'DELETE', 'UPDATE', 'INSERT', 'TRUNCATE', 'ALTER', 'CREATE', 'GRANT', 'REVOKE'];
|
|
49
47
|
const upper = trimmed.toUpperCase();
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
// DDLは常に禁止
|
|
49
|
+
const ddlKeywords = ['DROP', 'TRUNCATE', 'ALTER', 'CREATE', 'GRANT', 'REVOKE'];
|
|
50
|
+
for (const keyword of ddlKeywords) {
|
|
52
51
|
const regex = new RegExp(`(?<![A-Z_])${keyword}(?![A-Z_])`);
|
|
53
52
|
if (regex.test(upper)) {
|
|
54
53
|
return { valid: false, error: `Forbidden SQL operation: ${keyword}` };
|
|
55
54
|
}
|
|
56
55
|
}
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
// DML書き込み操作は writePermissions に基づいて許可/拒否
|
|
57
|
+
const dmlChecks = [
|
|
58
|
+
{ keyword: 'INSERT', permission: writePermissions?.insert === true },
|
|
59
|
+
{ keyword: 'UPDATE', permission: writePermissions?.update === true },
|
|
60
|
+
{ keyword: 'DELETE', permission: writePermissions?.delete === true },
|
|
61
|
+
];
|
|
62
|
+
for (const { keyword, permission } of dmlChecks) {
|
|
63
|
+
const regex = new RegExp(`(?<![A-Z_])${keyword}(?![A-Z_])`);
|
|
64
|
+
if (regex.test(upper) && !permission) {
|
|
65
|
+
return { valid: false, error: `Forbidden SQL operation: ${keyword}` };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// 許可される先頭キーワード
|
|
69
|
+
const allowedStarts = ['SELECT', 'WITH', 'EXPLAIN'];
|
|
70
|
+
if (writePermissions?.insert)
|
|
71
|
+
allowedStarts.push('INSERT');
|
|
72
|
+
if (writePermissions?.update)
|
|
73
|
+
allowedStarts.push('UPDATE');
|
|
74
|
+
if (writePermissions?.delete)
|
|
75
|
+
allowedStarts.push('DELETE');
|
|
76
|
+
const startsWithAllowed = allowedStarts.some((kw) => upper.startsWith(kw));
|
|
77
|
+
if (!startsWithAllowed) {
|
|
78
|
+
const allowed = allowedStarts.join(', ');
|
|
79
|
+
return { valid: false, error: `Only ${allowed} statements are allowed` };
|
|
60
80
|
}
|
|
61
81
|
return { valid: true };
|
|
62
82
|
}
|
|
@@ -106,18 +126,18 @@ async function executeQuery(credentials, sql) {
|
|
|
106
126
|
}
|
|
107
127
|
/** db_query ツールを MCP サーバーに登録する */
|
|
108
128
|
function registerDbQueryTool(server, apiClient) {
|
|
109
|
-
server.tool('db_query', 'Execute a
|
|
129
|
+
server.tool('db_query', 'Execute a SQL query on a project database. Supports SELECT, INSERT, UPDATE, and DELETE. Write operations (INSERT/UPDATE/DELETE) are allowed when the database connection has the corresponding write permissions configured. DDL operations are always forbidden. Submit the SQL directly — permission checks are handled server-side.', {
|
|
110
130
|
name: zod_1.z.string().describe('Database connection name (e.g. "MAIN", "READONLY")'),
|
|
111
|
-
sql: zod_1.z.string().describe('SQL query to execute (SELECT
|
|
131
|
+
sql: zod_1.z.string().describe('SQL query to execute (SELECT, INSERT, UPDATE, DELETE)'),
|
|
112
132
|
}, async ({ name, sql }) => {
|
|
113
|
-
// Validate SQL
|
|
114
|
-
const validation = validateSelectOnly(sql);
|
|
115
|
-
if (!validation.valid) {
|
|
116
|
-
return (0, mcp_response_1.mcpErrorResponse)(validation.error);
|
|
117
|
-
}
|
|
118
133
|
try {
|
|
119
|
-
// Get credentials from API
|
|
134
|
+
// Get credentials from API (includes writePermissions)
|
|
120
135
|
const credentials = await apiClient.getDbCredentials(name);
|
|
136
|
+
// Validate SQL with write permissions
|
|
137
|
+
const validation = validateSql(sql, credentials.writePermissions);
|
|
138
|
+
if (!validation.valid) {
|
|
139
|
+
return (0, mcp_response_1.mcpErrorResponse)(validation.error);
|
|
140
|
+
}
|
|
121
141
|
// Execute query
|
|
122
142
|
const rows = await executeQuery(credentials, sql);
|
|
123
143
|
// Format result
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-query.js","sourceRoot":"","sources":["../../../src/mcp/tools/db-query.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"db-query.js","sourceRoot":"","sources":["../../../src/mcp/tools/db-query.ts"],"names":[],"mappings":"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"}
|