@iflow-mcp/xexr_mcp-libsql 1.1.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/README.md +509 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +327 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/base-tool.d.ts +29 -0
- package/dist/lib/base-tool.d.ts.map +1 -0
- package/dist/lib/base-tool.js +175 -0
- package/dist/lib/base-tool.js.map +1 -0
- package/dist/lib/constants.d.ts +26 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +47 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/database.d.ts +39 -0
- package/dist/lib/database.d.ts.map +1 -0
- package/dist/lib/database.js +284 -0
- package/dist/lib/database.js.map +1 -0
- package/dist/lib/logger.d.ts +23 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +124 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/server-manager.d.ts +31 -0
- package/dist/lib/server-manager.d.ts.map +1 -0
- package/dist/lib/server-manager.js +283 -0
- package/dist/lib/server-manager.js.map +1 -0
- package/dist/schemas/alter-table.d.ts +23 -0
- package/dist/schemas/alter-table.d.ts.map +1 -0
- package/dist/schemas/alter-table.js +85 -0
- package/dist/schemas/alter-table.js.map +1 -0
- package/dist/schemas/create-table.d.ts +23 -0
- package/dist/schemas/create-table.d.ts.map +1 -0
- package/dist/schemas/create-table.js +81 -0
- package/dist/schemas/create-table.js.map +1 -0
- package/dist/schemas/describe-table.d.ts +26 -0
- package/dist/schemas/describe-table.d.ts.map +1 -0
- package/dist/schemas/describe-table.js +47 -0
- package/dist/schemas/describe-table.js.map +1 -0
- package/dist/schemas/list-tables.d.ts +29 -0
- package/dist/schemas/list-tables.d.ts.map +1 -0
- package/dist/schemas/list-tables.js +37 -0
- package/dist/schemas/list-tables.js.map +1 -0
- package/dist/schemas/read-query.d.ts +17 -0
- package/dist/schemas/read-query.d.ts.map +1 -0
- package/dist/schemas/read-query.js +66 -0
- package/dist/schemas/read-query.js.map +1 -0
- package/dist/schemas/write-query.d.ts +20 -0
- package/dist/schemas/write-query.d.ts.map +1 -0
- package/dist/schemas/write-query.js +58 -0
- package/dist/schemas/write-query.js.map +1 -0
- package/dist/tools/alter-table.d.ts +31 -0
- package/dist/tools/alter-table.d.ts.map +1 -0
- package/dist/tools/alter-table.js +139 -0
- package/dist/tools/alter-table.js.map +1 -0
- package/dist/tools/create-table.d.ts +31 -0
- package/dist/tools/create-table.d.ts.map +1 -0
- package/dist/tools/create-table.js +121 -0
- package/dist/tools/create-table.js.map +1 -0
- package/dist/tools/describe-table.d.ts +30 -0
- package/dist/tools/describe-table.d.ts.map +1 -0
- package/dist/tools/describe-table.js +165 -0
- package/dist/tools/describe-table.js.map +1 -0
- package/dist/tools/list-tables.d.ts +32 -0
- package/dist/tools/list-tables.d.ts.map +1 -0
- package/dist/tools/list-tables.js +210 -0
- package/dist/tools/list-tables.js.map +1 -0
- package/dist/tools/read-query.d.ts +17 -0
- package/dist/tools/read-query.d.ts.map +1 -0
- package/dist/tools/read-query.js +112 -0
- package/dist/tools/read-query.js.map +1 -0
- package/dist/tools/write-query.d.ts +20 -0
- package/dist/tools/write-query.d.ts.map +1 -0
- package/dist/tools/write-query.js +63 -0
- package/dist/tools/write-query.js.map +1 -0
- package/dist/types/index.d.ts +50 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/error-handler.d.ts +22 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +85 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/performance.d.ts +16 -0
- package/dist/utils/performance.d.ts.map +1 -0
- package/dist/utils/performance.js +40 -0
- package/dist/utils/performance.js.map +1 -0
- package/package.json +1 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
2
|
+
import { Logger } from './logger.js';
|
|
3
|
+
import { LibSQLConnectionPool } from './database.js';
|
|
4
|
+
const logger = new Logger();
|
|
5
|
+
export class ServerManager {
|
|
6
|
+
options;
|
|
7
|
+
server = null;
|
|
8
|
+
pool = null;
|
|
9
|
+
toolRegistry = null;
|
|
10
|
+
transport = null;
|
|
11
|
+
isRunning = false;
|
|
12
|
+
isShuttingDown = false;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.options = options;
|
|
15
|
+
}
|
|
16
|
+
async start() {
|
|
17
|
+
if (this.isRunning) {
|
|
18
|
+
throw new Error('Server is already running');
|
|
19
|
+
}
|
|
20
|
+
if (this.isShuttingDown) {
|
|
21
|
+
throw new Error('Server is shutting down, cannot start');
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const mode = this.options.developmentMode ? 'development' : 'production';
|
|
25
|
+
logger.info(`Starting server manager in ${mode} mode`);
|
|
26
|
+
if (this.options.developmentMode) {
|
|
27
|
+
logger.info('Development mode features enabled:', {
|
|
28
|
+
enhancedLogging: true,
|
|
29
|
+
hotReload: this.options.enableHotReload || false,
|
|
30
|
+
nodeEnv: process.env['NODE_ENV'] || 'development'
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Initialize database connection pool
|
|
34
|
+
this.pool = new LibSQLConnectionPool(this.options.config);
|
|
35
|
+
await this.pool.initialize();
|
|
36
|
+
// Create and register tools
|
|
37
|
+
this.toolRegistry = await this.createToolRegistry();
|
|
38
|
+
// Create and configure MCP server
|
|
39
|
+
this.server = await this.createMCPServer();
|
|
40
|
+
// Set up transport and connect
|
|
41
|
+
this.transport = new StdioServerTransport();
|
|
42
|
+
// Add error handling with more detailed logging
|
|
43
|
+
this.server.onerror = (error) => {
|
|
44
|
+
logger.error('MCP Server error', {
|
|
45
|
+
error: error instanceof Error ? error.message : String(error),
|
|
46
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
47
|
+
errorType: typeof error
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
await this.server.connect(this.transport);
|
|
51
|
+
this.isRunning = true;
|
|
52
|
+
logger.info('Server manager started successfully');
|
|
53
|
+
if (this.options.developmentMode) {
|
|
54
|
+
this.setupDevelopmentFeatures();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
logger.error('Failed to start server manager', {
|
|
59
|
+
error: error instanceof Error ? error.message : String(error)
|
|
60
|
+
});
|
|
61
|
+
// Clean up on failure
|
|
62
|
+
await this.cleanup();
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async stop() {
|
|
67
|
+
if (!this.isRunning) {
|
|
68
|
+
logger.warn('Server is not running, nothing to stop');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (this.isShuttingDown) {
|
|
72
|
+
logger.warn('Server is already shutting down');
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
this.isShuttingDown = true;
|
|
76
|
+
logger.info('Stopping server manager');
|
|
77
|
+
await this.cleanup();
|
|
78
|
+
this.isRunning = false;
|
|
79
|
+
this.isShuttingDown = false;
|
|
80
|
+
logger.info('Server manager stopped successfully');
|
|
81
|
+
}
|
|
82
|
+
async reload(newConfig) {
|
|
83
|
+
if (!this.isRunning) {
|
|
84
|
+
throw new Error('Cannot reload: server is not running');
|
|
85
|
+
}
|
|
86
|
+
logger.info('Reloading server manager');
|
|
87
|
+
// Update config if provided
|
|
88
|
+
if (newConfig) {
|
|
89
|
+
this.options.config = newConfig;
|
|
90
|
+
logger.info('Updated configuration', { config: newConfig });
|
|
91
|
+
}
|
|
92
|
+
// Stop current server
|
|
93
|
+
await this.stop();
|
|
94
|
+
// Start with new configuration
|
|
95
|
+
await this.start();
|
|
96
|
+
logger.info('Server manager reloaded successfully');
|
|
97
|
+
}
|
|
98
|
+
isServerRunning() {
|
|
99
|
+
return this.isRunning;
|
|
100
|
+
}
|
|
101
|
+
getStatus() {
|
|
102
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
103
|
+
const status = {
|
|
104
|
+
running: this.isRunning,
|
|
105
|
+
shuttingDown: this.isShuttingDown
|
|
106
|
+
};
|
|
107
|
+
const poolConnections = this.pool?.getStatus?.()?.totalConnections;
|
|
108
|
+
if (poolConnections !== undefined) {
|
|
109
|
+
status.poolConnections = poolConnections;
|
|
110
|
+
}
|
|
111
|
+
const registeredTools = this.toolRegistry?.getAll().length;
|
|
112
|
+
if (registeredTools !== undefined) {
|
|
113
|
+
status.registeredTools = registeredTools;
|
|
114
|
+
}
|
|
115
|
+
return status;
|
|
116
|
+
}
|
|
117
|
+
setupDevelopmentFeatures() {
|
|
118
|
+
logger.info('Setting up development features');
|
|
119
|
+
// Set up periodic status logging in development mode
|
|
120
|
+
const statusInterval = setInterval(() => {
|
|
121
|
+
if (this.isRunning && !this.isShuttingDown) {
|
|
122
|
+
const status = this.getStatus();
|
|
123
|
+
logger.info('Development status check', status);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
clearInterval(statusInterval);
|
|
127
|
+
}
|
|
128
|
+
}, 30000); // Log status every 30 seconds
|
|
129
|
+
// Log tool registration details
|
|
130
|
+
if (this.toolRegistry) {
|
|
131
|
+
const tools = this.toolRegistry.getAll();
|
|
132
|
+
logger.info('Registered tools in development mode:', {
|
|
133
|
+
count: tools.length,
|
|
134
|
+
tools: tools.map(tool => tool.name)
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// Log pool status
|
|
138
|
+
if (this.pool) {
|
|
139
|
+
const poolStatus = this.pool.getStatus();
|
|
140
|
+
logger.info('Connection pool status in development mode:', poolStatus);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async createToolRegistry() {
|
|
144
|
+
const { ToolRegistry } = await import('./base-tool.js');
|
|
145
|
+
const { ReadQueryTool } = await import('../tools/read-query.js');
|
|
146
|
+
const { WriteQueryTool } = await import('../tools/write-query.js');
|
|
147
|
+
const { CreateTableTool } = await import('../tools/create-table.js');
|
|
148
|
+
const { AlterTableTool } = await import('../tools/alter-table.js');
|
|
149
|
+
const { ListTablesTool } = await import('../tools/list-tables.js');
|
|
150
|
+
const { DescribeTableTool } = await import('../tools/describe-table.js');
|
|
151
|
+
const registry = new ToolRegistry();
|
|
152
|
+
registry.register(new ReadQueryTool());
|
|
153
|
+
registry.register(new WriteQueryTool());
|
|
154
|
+
registry.register(new CreateTableTool());
|
|
155
|
+
registry.register(new AlterTableTool());
|
|
156
|
+
registry.register(new ListTablesTool());
|
|
157
|
+
registry.register(new DescribeTableTool());
|
|
158
|
+
return registry;
|
|
159
|
+
}
|
|
160
|
+
async createMCPServer() {
|
|
161
|
+
if (!this.pool || !this.toolRegistry) {
|
|
162
|
+
throw new Error('Pool and tool registry must be initialized first');
|
|
163
|
+
}
|
|
164
|
+
const { Server } = await import('@modelcontextprotocol/sdk/server/index.js');
|
|
165
|
+
const { CallToolRequestSchema, ListToolsRequestSchema } = await import('@modelcontextprotocol/sdk/types.js');
|
|
166
|
+
const server = new Server({
|
|
167
|
+
name: 'xexr-libsql',
|
|
168
|
+
version: '1.0.0'
|
|
169
|
+
}, {
|
|
170
|
+
capabilities: {
|
|
171
|
+
tools: {}
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
// Set up handlers
|
|
175
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
176
|
+
try {
|
|
177
|
+
logger.info('Handling list tools request');
|
|
178
|
+
if (!this.toolRegistry) {
|
|
179
|
+
throw new Error('Tool registry not initialized');
|
|
180
|
+
}
|
|
181
|
+
const tools = this.toolRegistry.getToolDefinitions();
|
|
182
|
+
logger.info(`Returning ${tools.length} tool definitions`);
|
|
183
|
+
return { tools };
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
logger.error('Failed to list tools', {
|
|
187
|
+
error: error instanceof Error ? error.message : String(error)
|
|
188
|
+
});
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
193
|
+
const { name, arguments: args } = request.params;
|
|
194
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
195
|
+
let connection = null;
|
|
196
|
+
try {
|
|
197
|
+
logger.info(`Handling tool request: ${name}`, { arguments: args });
|
|
198
|
+
if (!this.pool) {
|
|
199
|
+
throw new Error('Database pool not initialized');
|
|
200
|
+
}
|
|
201
|
+
if (!this.toolRegistry) {
|
|
202
|
+
throw new Error('Tool registry not initialized');
|
|
203
|
+
}
|
|
204
|
+
connection = await this.pool.getConnection();
|
|
205
|
+
const result = await this.toolRegistry.execute(name, {
|
|
206
|
+
connection,
|
|
207
|
+
arguments: args || {}
|
|
208
|
+
});
|
|
209
|
+
logger.info(`Tool executed successfully: ${name}`, {
|
|
210
|
+
hasError: result.isError || false
|
|
211
|
+
});
|
|
212
|
+
return result;
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
216
|
+
logger.error(`Tool execution failed: ${name}`, {
|
|
217
|
+
error: errorMessage,
|
|
218
|
+
arguments: args
|
|
219
|
+
});
|
|
220
|
+
return {
|
|
221
|
+
content: [
|
|
222
|
+
{
|
|
223
|
+
type: 'text',
|
|
224
|
+
text: `Error: Failed to execute tool ${name}: ${errorMessage}`
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
isError: true
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
finally {
|
|
231
|
+
if (connection) {
|
|
232
|
+
try {
|
|
233
|
+
if (this.pool) {
|
|
234
|
+
this.pool.releaseConnection(connection);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch (releaseError) {
|
|
238
|
+
logger.error('Failed to release connection', {
|
|
239
|
+
error: releaseError instanceof Error ? releaseError.message : String(releaseError)
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
return server;
|
|
246
|
+
}
|
|
247
|
+
async cleanup() {
|
|
248
|
+
const errors = [];
|
|
249
|
+
// Close server
|
|
250
|
+
if (this.server) {
|
|
251
|
+
try {
|
|
252
|
+
await this.server.close();
|
|
253
|
+
logger.info('MCP server closed');
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
257
|
+
errors.push(`Error closing MCP server: ${errorMsg}`);
|
|
258
|
+
logger.error('Error closing MCP server', { error: errorMsg });
|
|
259
|
+
}
|
|
260
|
+
this.server = null;
|
|
261
|
+
}
|
|
262
|
+
// Close database pool
|
|
263
|
+
if (this.pool) {
|
|
264
|
+
try {
|
|
265
|
+
await this.pool.close();
|
|
266
|
+
logger.info('Database pool closed');
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
270
|
+
errors.push(`Error closing database pool: ${errorMsg}`);
|
|
271
|
+
logger.error('Error closing database pool', { error: errorMsg });
|
|
272
|
+
}
|
|
273
|
+
this.pool = null;
|
|
274
|
+
}
|
|
275
|
+
// Clear references
|
|
276
|
+
this.toolRegistry = null;
|
|
277
|
+
this.transport = null;
|
|
278
|
+
if (errors.length > 0) {
|
|
279
|
+
throw new Error(`Cleanup completed with errors: ${errors.join(', ')}`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=server-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../src/lib/server-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for alter-table tool
|
|
4
|
+
* Validates ALTER TABLE DDL statements with security measures
|
|
5
|
+
*/
|
|
6
|
+
export declare const AlterTableInputSchema: z.ZodObject<{
|
|
7
|
+
query: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>, string, string>;
|
|
8
|
+
parameters: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, "many">>>, (string | number | boolean | null)[], (string | number | boolean | null)[] | undefined>;
|
|
9
|
+
useTransaction: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
10
|
+
ifExists: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
query: string;
|
|
13
|
+
parameters: (string | number | boolean | null)[];
|
|
14
|
+
useTransaction: boolean;
|
|
15
|
+
ifExists: boolean;
|
|
16
|
+
}, {
|
|
17
|
+
query: string;
|
|
18
|
+
parameters?: (string | number | boolean | null)[] | undefined;
|
|
19
|
+
useTransaction?: boolean | undefined;
|
|
20
|
+
ifExists?: boolean | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
export type AlterTableInput = z.infer<typeof AlterTableInputSchema>;
|
|
23
|
+
//# sourceMappingURL=alter-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alter-table.d.ts","sourceRoot":"","sources":["../../src/schemas/alter-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EA8FhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for alter-table tool
|
|
4
|
+
* Validates ALTER TABLE DDL statements with security measures
|
|
5
|
+
*/
|
|
6
|
+
export const AlterTableInputSchema = z.object({
|
|
7
|
+
query: z
|
|
8
|
+
.string()
|
|
9
|
+
.min(1, 'Query cannot be empty')
|
|
10
|
+
.max(10000, 'Query too long (max 10,000 characters)')
|
|
11
|
+
.refine(query => {
|
|
12
|
+
const trimmed = query.trim().toLowerCase();
|
|
13
|
+
return trimmed.startsWith('alter table');
|
|
14
|
+
}, {
|
|
15
|
+
message: 'Only ALTER TABLE statements are allowed'
|
|
16
|
+
})
|
|
17
|
+
.refine(query => {
|
|
18
|
+
// Check for dangerous patterns that shouldn't be in DDL
|
|
19
|
+
const prohibited = [
|
|
20
|
+
'pragma',
|
|
21
|
+
'attach',
|
|
22
|
+
'detach',
|
|
23
|
+
'drop table',
|
|
24
|
+
'drop database',
|
|
25
|
+
'drop view',
|
|
26
|
+
'drop index',
|
|
27
|
+
'delete',
|
|
28
|
+
'insert',
|
|
29
|
+
'update',
|
|
30
|
+
'truncate',
|
|
31
|
+
'vacuum',
|
|
32
|
+
'reindex',
|
|
33
|
+
'exec',
|
|
34
|
+
'execute'
|
|
35
|
+
];
|
|
36
|
+
const lowerQuery = query.toLowerCase();
|
|
37
|
+
return !prohibited.some(pattern => lowerQuery.includes(pattern));
|
|
38
|
+
}, {
|
|
39
|
+
message: 'Query contains prohibited operations'
|
|
40
|
+
})
|
|
41
|
+
.refine(query => {
|
|
42
|
+
// Prevent queries that try to access sensitive system tables
|
|
43
|
+
const systemTables = ['sqlite_master', 'sqlite_temp_master', 'sqlite_sequence'];
|
|
44
|
+
const lowerQuery = query.toLowerCase();
|
|
45
|
+
return !systemTables.some(table => lowerQuery.includes(table));
|
|
46
|
+
}, {
|
|
47
|
+
message: 'Query attempts to access system tables'
|
|
48
|
+
})
|
|
49
|
+
.refine(query => {
|
|
50
|
+
// Check for multi-statement patterns - semicolon is the key indicator
|
|
51
|
+
return !query.includes(';');
|
|
52
|
+
}, {
|
|
53
|
+
message: 'Multi-statement queries are not allowed'
|
|
54
|
+
})
|
|
55
|
+
.refine(query => {
|
|
56
|
+
// Basic ALTER TABLE syntax validation
|
|
57
|
+
const lowerQuery = query.toLowerCase();
|
|
58
|
+
// Must contain valid ALTER TABLE operations
|
|
59
|
+
const hasAddColumn = lowerQuery.includes('add column') || /\badd\s+\w+\s+\w+/.test(lowerQuery);
|
|
60
|
+
const hasRename = lowerQuery.includes('rename to') || lowerQuery.includes('rename column');
|
|
61
|
+
const hasDropColumn = lowerQuery.includes('drop column');
|
|
62
|
+
const hasTableName = /alter\s+table\s+[\w"`[\]]+\s+/i.test(query);
|
|
63
|
+
return hasTableName && (hasAddColumn || hasRename || hasDropColumn);
|
|
64
|
+
}, {
|
|
65
|
+
message: 'Invalid ALTER TABLE syntax - must include table name and valid operation (ADD COLUMN, RENAME TO, RENAME COLUMN, DROP COLUMN)'
|
|
66
|
+
}),
|
|
67
|
+
parameters: z
|
|
68
|
+
.array(z.union([z.string(), z.number(), z.boolean(), z.null()]))
|
|
69
|
+
.optional()
|
|
70
|
+
.default([])
|
|
71
|
+
.refine(params => params.length <= 100, {
|
|
72
|
+
message: 'Too many parameters (max 100)'
|
|
73
|
+
}),
|
|
74
|
+
useTransaction: z
|
|
75
|
+
.boolean()
|
|
76
|
+
.optional()
|
|
77
|
+
.default(true)
|
|
78
|
+
.describe('Whether to wrap the DDL in a transaction for automatic rollback on errors'),
|
|
79
|
+
ifExists: z
|
|
80
|
+
.boolean()
|
|
81
|
+
.optional()
|
|
82
|
+
.default(false)
|
|
83
|
+
.describe('Whether to add IF EXISTS clause to prevent errors if table does not exist')
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=alter-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alter-table.js","sourceRoot":"","sources":["../../src/schemas/alter-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for create-table tool
|
|
4
|
+
* Validates CREATE TABLE DDL statements with security measures
|
|
5
|
+
*/
|
|
6
|
+
export declare const CreateTableInputSchema: z.ZodObject<{
|
|
7
|
+
query: z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>, string, string>, string, string>;
|
|
8
|
+
parameters: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>, "many">>>, (string | number | boolean | null)[], (string | number | boolean | null)[] | undefined>;
|
|
9
|
+
useTransaction: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
10
|
+
ifNotExists: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
query: string;
|
|
13
|
+
parameters: (string | number | boolean | null)[];
|
|
14
|
+
useTransaction: boolean;
|
|
15
|
+
ifNotExists: boolean;
|
|
16
|
+
}, {
|
|
17
|
+
query: string;
|
|
18
|
+
parameters?: (string | number | boolean | null)[] | undefined;
|
|
19
|
+
useTransaction?: boolean | undefined;
|
|
20
|
+
ifNotExists?: boolean | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
export type CreateTableInput = z.infer<typeof CreateTableInputSchema>;
|
|
23
|
+
//# sourceMappingURL=create-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-table.d.ts","sourceRoot":"","sources":["../../src/schemas/create-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EA2FjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for create-table tool
|
|
4
|
+
* Validates CREATE TABLE DDL statements with security measures
|
|
5
|
+
*/
|
|
6
|
+
export const CreateTableInputSchema = z.object({
|
|
7
|
+
query: z
|
|
8
|
+
.string()
|
|
9
|
+
.min(1, 'Query cannot be empty')
|
|
10
|
+
.max(10000, 'Query too long (max 10,000 characters)')
|
|
11
|
+
.refine(query => {
|
|
12
|
+
const trimmed = query.trim().toLowerCase();
|
|
13
|
+
return trimmed.startsWith('create table');
|
|
14
|
+
}, {
|
|
15
|
+
message: 'Only CREATE TABLE statements are allowed'
|
|
16
|
+
})
|
|
17
|
+
.refine(query => {
|
|
18
|
+
// Check for dangerous patterns that shouldn't be in DDL
|
|
19
|
+
const prohibited = [
|
|
20
|
+
'pragma',
|
|
21
|
+
'attach',
|
|
22
|
+
'detach',
|
|
23
|
+
'drop',
|
|
24
|
+
'delete',
|
|
25
|
+
'insert',
|
|
26
|
+
'update',
|
|
27
|
+
'truncate',
|
|
28
|
+
'vacuum',
|
|
29
|
+
'reindex',
|
|
30
|
+
'exec',
|
|
31
|
+
'execute'
|
|
32
|
+
];
|
|
33
|
+
const lowerQuery = query.toLowerCase();
|
|
34
|
+
return !prohibited.some(pattern => lowerQuery.includes(pattern));
|
|
35
|
+
}, {
|
|
36
|
+
message: 'Query contains prohibited operations'
|
|
37
|
+
})
|
|
38
|
+
.refine(query => {
|
|
39
|
+
// Prevent queries that try to access sensitive system tables
|
|
40
|
+
const systemTables = ['sqlite_master', 'sqlite_temp_master', 'sqlite_sequence'];
|
|
41
|
+
const lowerQuery = query.toLowerCase();
|
|
42
|
+
return !systemTables.some(table => lowerQuery.includes(table));
|
|
43
|
+
}, {
|
|
44
|
+
message: 'Query attempts to access system tables'
|
|
45
|
+
})
|
|
46
|
+
.refine(query => {
|
|
47
|
+
// Check for multi-statement patterns - semicolon is the key indicator
|
|
48
|
+
return !query.includes(';');
|
|
49
|
+
}, {
|
|
50
|
+
message: 'Multi-statement queries are not allowed'
|
|
51
|
+
})
|
|
52
|
+
.refine(query => {
|
|
53
|
+
// Basic CREATE TABLE syntax validation
|
|
54
|
+
const lowerQuery = query.toLowerCase();
|
|
55
|
+
// Must contain table name and column definitions
|
|
56
|
+
const hasTableName = /create\s+table\s+(?:if\s+not\s+exists\s+)?[\w"`[\]]+\s*\(/i.test(query);
|
|
57
|
+
const hasColumns = /\(\s*\w+/i.test(query);
|
|
58
|
+
const hasClosingParen = lowerQuery.includes(')');
|
|
59
|
+
return hasTableName && hasColumns && hasClosingParen;
|
|
60
|
+
}, {
|
|
61
|
+
message: 'Invalid CREATE TABLE syntax - must include table name and column definitions'
|
|
62
|
+
}),
|
|
63
|
+
parameters: z
|
|
64
|
+
.array(z.union([z.string(), z.number(), z.boolean(), z.null()]))
|
|
65
|
+
.optional()
|
|
66
|
+
.default([])
|
|
67
|
+
.refine(params => params.length <= 100, {
|
|
68
|
+
message: 'Too many parameters (max 100)'
|
|
69
|
+
}),
|
|
70
|
+
useTransaction: z
|
|
71
|
+
.boolean()
|
|
72
|
+
.optional()
|
|
73
|
+
.default(true)
|
|
74
|
+
.describe('Whether to wrap the DDL in a transaction for automatic rollback on errors'),
|
|
75
|
+
ifNotExists: z
|
|
76
|
+
.boolean()
|
|
77
|
+
.optional()
|
|
78
|
+
.default(false)
|
|
79
|
+
.describe('Whether to add IF NOT EXISTS clause to prevent errors if table already exists')
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=create-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-table.js","sourceRoot":"","sources":["../../src/schemas/create-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for describe-table tool
|
|
4
|
+
* Validates table names and options for schema inspection
|
|
5
|
+
*/
|
|
6
|
+
export declare const DescribeTableInputSchema: z.ZodObject<{
|
|
7
|
+
tableName: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
8
|
+
includeIndexes: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
9
|
+
includeForeignKeys: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
10
|
+
includeConstraints: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
11
|
+
format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["table", "json"]>>>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
tableName: string;
|
|
14
|
+
includeIndexes: boolean;
|
|
15
|
+
format: "table" | "json";
|
|
16
|
+
includeForeignKeys: boolean;
|
|
17
|
+
includeConstraints: boolean;
|
|
18
|
+
}, {
|
|
19
|
+
tableName: string;
|
|
20
|
+
includeIndexes?: boolean | undefined;
|
|
21
|
+
format?: "table" | "json" | undefined;
|
|
22
|
+
includeForeignKeys?: boolean | undefined;
|
|
23
|
+
includeConstraints?: boolean | undefined;
|
|
24
|
+
}>;
|
|
25
|
+
export type DescribeTableInput = z.infer<typeof DescribeTableInputSchema>;
|
|
26
|
+
//# sourceMappingURL=describe-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-table.d.ts","sourceRoot":"","sources":["../../src/schemas/describe-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EA8CnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for describe-table tool
|
|
4
|
+
* Validates table names and options for schema inspection
|
|
5
|
+
*/
|
|
6
|
+
export const DescribeTableInputSchema = z.object({
|
|
7
|
+
tableName: z
|
|
8
|
+
.string()
|
|
9
|
+
.min(1, 'Table name cannot be empty')
|
|
10
|
+
.max(128, 'Table name too long (max 128 characters)')
|
|
11
|
+
.refine(name => {
|
|
12
|
+
// Basic validation for table name format
|
|
13
|
+
const validNamePattern = /^[a-zA-Z_][a-zA-Z0-9_]*$|^"[^"]+"|^'[^']+'|^`[^`]+`|^\[[^\]]+\]$/;
|
|
14
|
+
return validNamePattern.test(name);
|
|
15
|
+
}, {
|
|
16
|
+
message: 'Invalid table name format - must be a valid SQL identifier'
|
|
17
|
+
})
|
|
18
|
+
.refine(name => {
|
|
19
|
+
// Prevent access to sensitive system tables
|
|
20
|
+
const systemTables = ['sqlite_master', 'sqlite_temp_master', 'sqlite_sequence'];
|
|
21
|
+
const cleanName = name.replace(/["`'[\]]/g, '').toLowerCase();
|
|
22
|
+
return !systemTables.includes(cleanName);
|
|
23
|
+
}, {
|
|
24
|
+
message: 'Cannot describe system tables'
|
|
25
|
+
}),
|
|
26
|
+
includeIndexes: z
|
|
27
|
+
.boolean()
|
|
28
|
+
.optional()
|
|
29
|
+
.default(true)
|
|
30
|
+
.describe('Whether to include index information in the output'),
|
|
31
|
+
includeForeignKeys: z
|
|
32
|
+
.boolean()
|
|
33
|
+
.optional()
|
|
34
|
+
.default(true)
|
|
35
|
+
.describe('Whether to include foreign key information in the output'),
|
|
36
|
+
includeConstraints: z
|
|
37
|
+
.boolean()
|
|
38
|
+
.optional()
|
|
39
|
+
.default(true)
|
|
40
|
+
.describe('Whether to include check constraints and other constraints'),
|
|
41
|
+
format: z
|
|
42
|
+
.enum(['table', 'json'])
|
|
43
|
+
.optional()
|
|
44
|
+
.default('table')
|
|
45
|
+
.describe('Output format - table for human-readable, json for structured data')
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=describe-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-table.js","sourceRoot":"","sources":["../../src/schemas/describe-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC;SACpC,GAAG,CAAC,GAAG,EAAE,0CAA0C,CAAC;SACpD,MAAM,CACL,IAAI,CAAC,EAAE;QACL,yCAAyC;QACzC,MAAM,gBAAgB,GAAG,kEAAkE,CAAC;QAC5F,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,EACD;QACE,OAAO,EAAE,4DAA4D;KACtE,CACF;SACA,MAAM,CACL,IAAI,CAAC,EAAE;QACL,4CAA4C;QAC5C,MAAM,YAAY,GAAG,CAAC,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,EACD;QACE,OAAO,EAAE,+BAA+B;KACzC,CACF;IACH,cAAc,EAAE,CAAC;SACd,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,oDAAoD,CAAC;IACjE,kBAAkB,EAAE,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,0DAA0D,CAAC;IACvE,kBAAkB,EAAE,CAAC;SAClB,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,4DAA4D,CAAC;IACzE,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACvB,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CAAC,oEAAoE,CAAC;CAClF,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Input schema for list-tables tool
|
|
4
|
+
* Validates options for database table listing
|
|
5
|
+
*/
|
|
6
|
+
export declare const ListTablesInputSchema: z.ZodObject<{
|
|
7
|
+
includeSystemTables: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
8
|
+
includeViews: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
9
|
+
includeIndexes: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
10
|
+
includeDetails: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
11
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
12
|
+
format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["table", "json", "list"]>>>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
includeSystemTables: boolean;
|
|
15
|
+
includeViews: boolean;
|
|
16
|
+
includeIndexes: boolean;
|
|
17
|
+
includeDetails: boolean;
|
|
18
|
+
format: "table" | "json" | "list";
|
|
19
|
+
pattern?: string | undefined;
|
|
20
|
+
}, {
|
|
21
|
+
pattern?: string | undefined;
|
|
22
|
+
includeSystemTables?: boolean | undefined;
|
|
23
|
+
includeViews?: boolean | undefined;
|
|
24
|
+
includeIndexes?: boolean | undefined;
|
|
25
|
+
includeDetails?: boolean | undefined;
|
|
26
|
+
format?: "table" | "json" | "list" | undefined;
|
|
27
|
+
}>;
|
|
28
|
+
export type ListTablesInput = z.infer<typeof ListTablesInputSchema>;
|
|
29
|
+
//# sourceMappingURL=list-tables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-tables.d.ts","sourceRoot":"","sources":["../../src/schemas/list-tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;EAkChC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|