@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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +509 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +327 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/base-tool.d.ts +29 -0
  8. package/dist/lib/base-tool.d.ts.map +1 -0
  9. package/dist/lib/base-tool.js +175 -0
  10. package/dist/lib/base-tool.js.map +1 -0
  11. package/dist/lib/constants.d.ts +26 -0
  12. package/dist/lib/constants.d.ts.map +1 -0
  13. package/dist/lib/constants.js +47 -0
  14. package/dist/lib/constants.js.map +1 -0
  15. package/dist/lib/database.d.ts +39 -0
  16. package/dist/lib/database.d.ts.map +1 -0
  17. package/dist/lib/database.js +284 -0
  18. package/dist/lib/database.js.map +1 -0
  19. package/dist/lib/logger.d.ts +23 -0
  20. package/dist/lib/logger.d.ts.map +1 -0
  21. package/dist/lib/logger.js +124 -0
  22. package/dist/lib/logger.js.map +1 -0
  23. package/dist/lib/server-manager.d.ts +31 -0
  24. package/dist/lib/server-manager.d.ts.map +1 -0
  25. package/dist/lib/server-manager.js +283 -0
  26. package/dist/lib/server-manager.js.map +1 -0
  27. package/dist/schemas/alter-table.d.ts +23 -0
  28. package/dist/schemas/alter-table.d.ts.map +1 -0
  29. package/dist/schemas/alter-table.js +85 -0
  30. package/dist/schemas/alter-table.js.map +1 -0
  31. package/dist/schemas/create-table.d.ts +23 -0
  32. package/dist/schemas/create-table.d.ts.map +1 -0
  33. package/dist/schemas/create-table.js +81 -0
  34. package/dist/schemas/create-table.js.map +1 -0
  35. package/dist/schemas/describe-table.d.ts +26 -0
  36. package/dist/schemas/describe-table.d.ts.map +1 -0
  37. package/dist/schemas/describe-table.js +47 -0
  38. package/dist/schemas/describe-table.js.map +1 -0
  39. package/dist/schemas/list-tables.d.ts +29 -0
  40. package/dist/schemas/list-tables.d.ts.map +1 -0
  41. package/dist/schemas/list-tables.js +37 -0
  42. package/dist/schemas/list-tables.js.map +1 -0
  43. package/dist/schemas/read-query.d.ts +17 -0
  44. package/dist/schemas/read-query.d.ts.map +1 -0
  45. package/dist/schemas/read-query.js +66 -0
  46. package/dist/schemas/read-query.js.map +1 -0
  47. package/dist/schemas/write-query.d.ts +20 -0
  48. package/dist/schemas/write-query.d.ts.map +1 -0
  49. package/dist/schemas/write-query.js +58 -0
  50. package/dist/schemas/write-query.js.map +1 -0
  51. package/dist/tools/alter-table.d.ts +31 -0
  52. package/dist/tools/alter-table.d.ts.map +1 -0
  53. package/dist/tools/alter-table.js +139 -0
  54. package/dist/tools/alter-table.js.map +1 -0
  55. package/dist/tools/create-table.d.ts +31 -0
  56. package/dist/tools/create-table.d.ts.map +1 -0
  57. package/dist/tools/create-table.js +121 -0
  58. package/dist/tools/create-table.js.map +1 -0
  59. package/dist/tools/describe-table.d.ts +30 -0
  60. package/dist/tools/describe-table.d.ts.map +1 -0
  61. package/dist/tools/describe-table.js +165 -0
  62. package/dist/tools/describe-table.js.map +1 -0
  63. package/dist/tools/list-tables.d.ts +32 -0
  64. package/dist/tools/list-tables.d.ts.map +1 -0
  65. package/dist/tools/list-tables.js +210 -0
  66. package/dist/tools/list-tables.js.map +1 -0
  67. package/dist/tools/read-query.d.ts +17 -0
  68. package/dist/tools/read-query.d.ts.map +1 -0
  69. package/dist/tools/read-query.js +112 -0
  70. package/dist/tools/read-query.js.map +1 -0
  71. package/dist/tools/write-query.d.ts +20 -0
  72. package/dist/tools/write-query.d.ts.map +1 -0
  73. package/dist/tools/write-query.js +63 -0
  74. package/dist/tools/write-query.js.map +1 -0
  75. package/dist/types/index.d.ts +50 -0
  76. package/dist/types/index.d.ts.map +1 -0
  77. package/dist/types/index.js +2 -0
  78. package/dist/types/index.js.map +1 -0
  79. package/dist/utils/error-handler.d.ts +22 -0
  80. package/dist/utils/error-handler.d.ts.map +1 -0
  81. package/dist/utils/error-handler.js +85 -0
  82. package/dist/utils/error-handler.js.map +1 -0
  83. package/dist/utils/performance.d.ts +16 -0
  84. package/dist/utils/performance.d.ts.map +1 -0
  85. package/dist/utils/performance.js +40 -0
  86. package/dist/utils/performance.js.map +1 -0
  87. 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"}