db-mcp 1.0.1

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 (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +860 -0
  3. package/dist/adapters/DatabaseAdapter.d.ts +141 -0
  4. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -0
  5. package/dist/adapters/DatabaseAdapter.js +131 -0
  6. package/dist/adapters/DatabaseAdapter.js.map +1 -0
  7. package/dist/adapters/sqlite/SchemaManager.d.ts +58 -0
  8. package/dist/adapters/sqlite/SchemaManager.d.ts.map +1 -0
  9. package/dist/adapters/sqlite/SchemaManager.js +187 -0
  10. package/dist/adapters/sqlite/SchemaManager.js.map +1 -0
  11. package/dist/adapters/sqlite/SqliteAdapter.d.ts +161 -0
  12. package/dist/adapters/sqlite/SqliteAdapter.d.ts.map +1 -0
  13. package/dist/adapters/sqlite/SqliteAdapter.js +741 -0
  14. package/dist/adapters/sqlite/SqliteAdapter.js.map +1 -0
  15. package/dist/adapters/sqlite/index.d.ts +9 -0
  16. package/dist/adapters/sqlite/index.d.ts.map +1 -0
  17. package/dist/adapters/sqlite/index.js +8 -0
  18. package/dist/adapters/sqlite/index.js.map +1 -0
  19. package/dist/adapters/sqlite/json-utils.d.ts +100 -0
  20. package/dist/adapters/sqlite/json-utils.d.ts.map +1 -0
  21. package/dist/adapters/sqlite/json-utils.js +274 -0
  22. package/dist/adapters/sqlite/json-utils.js.map +1 -0
  23. package/dist/adapters/sqlite/output-schemas.d.ts +1187 -0
  24. package/dist/adapters/sqlite/output-schemas.d.ts.map +1 -0
  25. package/dist/adapters/sqlite/output-schemas.js +1337 -0
  26. package/dist/adapters/sqlite/output-schemas.js.map +1 -0
  27. package/dist/adapters/sqlite/prompts.d.ts +13 -0
  28. package/dist/adapters/sqlite/prompts.d.ts.map +1 -0
  29. package/dist/adapters/sqlite/prompts.js +605 -0
  30. package/dist/adapters/sqlite/prompts.js.map +1 -0
  31. package/dist/adapters/sqlite/resources.d.ts +13 -0
  32. package/dist/adapters/sqlite/resources.d.ts.map +1 -0
  33. package/dist/adapters/sqlite/resources.js +251 -0
  34. package/dist/adapters/sqlite/resources.js.map +1 -0
  35. package/dist/adapters/sqlite/tools/admin.d.ts +14 -0
  36. package/dist/adapters/sqlite/tools/admin.d.ts.map +1 -0
  37. package/dist/adapters/sqlite/tools/admin.js +788 -0
  38. package/dist/adapters/sqlite/tools/admin.js.map +1 -0
  39. package/dist/adapters/sqlite/tools/core.d.ts +25 -0
  40. package/dist/adapters/sqlite/tools/core.d.ts.map +1 -0
  41. package/dist/adapters/sqlite/tools/core.js +359 -0
  42. package/dist/adapters/sqlite/tools/core.js.map +1 -0
  43. package/dist/adapters/sqlite/tools/fts.d.ts +13 -0
  44. package/dist/adapters/sqlite/tools/fts.d.ts.map +1 -0
  45. package/dist/adapters/sqlite/tools/fts.js +347 -0
  46. package/dist/adapters/sqlite/tools/fts.js.map +1 -0
  47. package/dist/adapters/sqlite/tools/geo.d.ts +14 -0
  48. package/dist/adapters/sqlite/tools/geo.d.ts.map +1 -0
  49. package/dist/adapters/sqlite/tools/geo.js +252 -0
  50. package/dist/adapters/sqlite/tools/geo.js.map +1 -0
  51. package/dist/adapters/sqlite/tools/index.d.ts +30 -0
  52. package/dist/adapters/sqlite/tools/index.d.ts.map +1 -0
  53. package/dist/adapters/sqlite/tools/index.js +61 -0
  54. package/dist/adapters/sqlite/tools/index.js.map +1 -0
  55. package/dist/adapters/sqlite/tools/json-helpers.d.ts +14 -0
  56. package/dist/adapters/sqlite/tools/json-helpers.d.ts.map +1 -0
  57. package/dist/adapters/sqlite/tools/json-helpers.js +477 -0
  58. package/dist/adapters/sqlite/tools/json-helpers.js.map +1 -0
  59. package/dist/adapters/sqlite/tools/json-operations.d.ts +14 -0
  60. package/dist/adapters/sqlite/tools/json-operations.d.ts.map +1 -0
  61. package/dist/adapters/sqlite/tools/json-operations.js +839 -0
  62. package/dist/adapters/sqlite/tools/json-operations.js.map +1 -0
  63. package/dist/adapters/sqlite/tools/stats.d.ts +15 -0
  64. package/dist/adapters/sqlite/tools/stats.d.ts.map +1 -0
  65. package/dist/adapters/sqlite/tools/stats.js +1219 -0
  66. package/dist/adapters/sqlite/tools/stats.js.map +1 -0
  67. package/dist/adapters/sqlite/tools/text.d.ts +14 -0
  68. package/dist/adapters/sqlite/tools/text.d.ts.map +1 -0
  69. package/dist/adapters/sqlite/tools/text.js +1141 -0
  70. package/dist/adapters/sqlite/tools/text.js.map +1 -0
  71. package/dist/adapters/sqlite/tools/vector.d.ts +14 -0
  72. package/dist/adapters/sqlite/tools/vector.d.ts.map +1 -0
  73. package/dist/adapters/sqlite/tools/vector.js +613 -0
  74. package/dist/adapters/sqlite/tools/vector.js.map +1 -0
  75. package/dist/adapters/sqlite/tools/virtual.d.ts +13 -0
  76. package/dist/adapters/sqlite/tools/virtual.d.ts.map +1 -0
  77. package/dist/adapters/sqlite/tools/virtual.js +930 -0
  78. package/dist/adapters/sqlite/tools/virtual.js.map +1 -0
  79. package/dist/adapters/sqlite/types.d.ts +207 -0
  80. package/dist/adapters/sqlite/types.d.ts.map +1 -0
  81. package/dist/adapters/sqlite/types.js +186 -0
  82. package/dist/adapters/sqlite/types.js.map +1 -0
  83. package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts +163 -0
  84. package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts.map +1 -0
  85. package/dist/adapters/sqlite-native/NativeSqliteAdapter.js +748 -0
  86. package/dist/adapters/sqlite-native/NativeSqliteAdapter.js.map +1 -0
  87. package/dist/adapters/sqlite-native/index.d.ts +11 -0
  88. package/dist/adapters/sqlite-native/index.d.ts.map +1 -0
  89. package/dist/adapters/sqlite-native/index.js +11 -0
  90. package/dist/adapters/sqlite-native/index.js.map +1 -0
  91. package/dist/adapters/sqlite-native/tools/spatialite.d.ts +19 -0
  92. package/dist/adapters/sqlite-native/tools/spatialite.d.ts.map +1 -0
  93. package/dist/adapters/sqlite-native/tools/spatialite.js +628 -0
  94. package/dist/adapters/sqlite-native/tools/spatialite.js.map +1 -0
  95. package/dist/adapters/sqlite-native/tools/transactions.d.ts +12 -0
  96. package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +1 -0
  97. package/dist/adapters/sqlite-native/tools/transactions.js +255 -0
  98. package/dist/adapters/sqlite-native/tools/transactions.js.map +1 -0
  99. package/dist/adapters/sqlite-native/tools/window.d.ts +12 -0
  100. package/dist/adapters/sqlite-native/tools/window.d.ts.map +1 -0
  101. package/dist/adapters/sqlite-native/tools/window.js +370 -0
  102. package/dist/adapters/sqlite-native/tools/window.js.map +1 -0
  103. package/dist/auth/AuthorizationServerDiscovery.d.ts +90 -0
  104. package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -0
  105. package/dist/auth/AuthorizationServerDiscovery.js +204 -0
  106. package/dist/auth/AuthorizationServerDiscovery.js.map +1 -0
  107. package/dist/auth/OAuthResourceServer.d.ts +65 -0
  108. package/dist/auth/OAuthResourceServer.d.ts.map +1 -0
  109. package/dist/auth/OAuthResourceServer.js +121 -0
  110. package/dist/auth/OAuthResourceServer.js.map +1 -0
  111. package/dist/auth/TokenValidator.d.ts +60 -0
  112. package/dist/auth/TokenValidator.d.ts.map +1 -0
  113. package/dist/auth/TokenValidator.js +235 -0
  114. package/dist/auth/TokenValidator.js.map +1 -0
  115. package/dist/auth/errors.d.ts +74 -0
  116. package/dist/auth/errors.d.ts.map +1 -0
  117. package/dist/auth/errors.js +133 -0
  118. package/dist/auth/errors.js.map +1 -0
  119. package/dist/auth/index.d.ts +13 -0
  120. package/dist/auth/index.d.ts.map +1 -0
  121. package/dist/auth/index.js +15 -0
  122. package/dist/auth/index.js.map +1 -0
  123. package/dist/auth/middleware.d.ts +81 -0
  124. package/dist/auth/middleware.d.ts.map +1 -0
  125. package/dist/auth/middleware.js +291 -0
  126. package/dist/auth/middleware.js.map +1 -0
  127. package/dist/auth/scopes.d.ts +136 -0
  128. package/dist/auth/scopes.d.ts.map +1 -0
  129. package/dist/auth/scopes.js +349 -0
  130. package/dist/auth/scopes.js.map +1 -0
  131. package/dist/auth/types.d.ts +257 -0
  132. package/dist/auth/types.d.ts.map +1 -0
  133. package/dist/auth/types.js +8 -0
  134. package/dist/auth/types.js.map +1 -0
  135. package/dist/cli.d.ts +8 -0
  136. package/dist/cli.d.ts.map +1 -0
  137. package/dist/cli.js +236 -0
  138. package/dist/cli.js.map +1 -0
  139. package/dist/constants/ServerInstructions.d.ts +45 -0
  140. package/dist/constants/ServerInstructions.d.ts.map +1 -0
  141. package/dist/constants/ServerInstructions.js +356 -0
  142. package/dist/constants/ServerInstructions.js.map +1 -0
  143. package/dist/filtering/ToolConstants.d.ts +34 -0
  144. package/dist/filtering/ToolConstants.d.ts.map +1 -0
  145. package/dist/filtering/ToolConstants.js +174 -0
  146. package/dist/filtering/ToolConstants.js.map +1 -0
  147. package/dist/filtering/ToolFilter.d.ts +82 -0
  148. package/dist/filtering/ToolFilter.d.ts.map +1 -0
  149. package/dist/filtering/ToolFilter.js +296 -0
  150. package/dist/filtering/ToolFilter.js.map +1 -0
  151. package/dist/index.d.ts +13 -0
  152. package/dist/index.d.ts.map +1 -0
  153. package/dist/index.js +17 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/server/McpServer.d.ts +61 -0
  156. package/dist/server/McpServer.d.ts.map +1 -0
  157. package/dist/server/McpServer.js +270 -0
  158. package/dist/server/McpServer.js.map +1 -0
  159. package/dist/transports/http.d.ts +134 -0
  160. package/dist/transports/http.d.ts.map +1 -0
  161. package/dist/transports/http.js +516 -0
  162. package/dist/transports/http.js.map +1 -0
  163. package/dist/transports/index.d.ts +5 -0
  164. package/dist/transports/index.d.ts.map +1 -0
  165. package/dist/transports/index.js +5 -0
  166. package/dist/transports/index.js.map +1 -0
  167. package/dist/types/index.d.ts +380 -0
  168. package/dist/types/index.d.ts.map +1 -0
  169. package/dist/types/index.js +68 -0
  170. package/dist/types/index.js.map +1 -0
  171. package/dist/utils/annotations.d.ts +44 -0
  172. package/dist/utils/annotations.d.ts.map +1 -0
  173. package/dist/utils/annotations.js +77 -0
  174. package/dist/utils/annotations.js.map +1 -0
  175. package/dist/utils/errors.d.ts +155 -0
  176. package/dist/utils/errors.d.ts.map +1 -0
  177. package/dist/utils/errors.js +329 -0
  178. package/dist/utils/errors.js.map +1 -0
  179. package/dist/utils/identifiers.d.ts +121 -0
  180. package/dist/utils/identifiers.d.ts.map +1 -0
  181. package/dist/utils/identifiers.js +319 -0
  182. package/dist/utils/identifiers.js.map +1 -0
  183. package/dist/utils/index.d.ts +7 -0
  184. package/dist/utils/index.d.ts.map +1 -0
  185. package/dist/utils/index.js +7 -0
  186. package/dist/utils/index.js.map +1 -0
  187. package/dist/utils/insightsManager.d.ts +39 -0
  188. package/dist/utils/insightsManager.d.ts.map +1 -0
  189. package/dist/utils/insightsManager.js +63 -0
  190. package/dist/utils/insightsManager.js.map +1 -0
  191. package/dist/utils/logger.d.ts +189 -0
  192. package/dist/utils/logger.d.ts.map +1 -0
  193. package/dist/utils/logger.js +394 -0
  194. package/dist/utils/logger.js.map +1 -0
  195. package/dist/utils/progress-utils.d.ts +54 -0
  196. package/dist/utils/progress-utils.d.ts.map +1 -0
  197. package/dist/utils/progress-utils.js +74 -0
  198. package/dist/utils/progress-utils.js.map +1 -0
  199. package/dist/utils/resourceAnnotations.d.ts +36 -0
  200. package/dist/utils/resourceAnnotations.d.ts.map +1 -0
  201. package/dist/utils/resourceAnnotations.js +57 -0
  202. package/dist/utils/resourceAnnotations.js.map +1 -0
  203. package/dist/utils/where-clause.d.ts +41 -0
  204. package/dist/utils/where-clause.d.ts.map +1 -0
  205. package/dist/utils/where-clause.js +116 -0
  206. package/dist/utils/where-clause.js.map +1 -0
  207. package/package.json +83 -0
  208. package/server.json +53 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * db-mcp - Database Adapter Interface
3
+ *
4
+ * Abstract base class for SQLite database adapters.
5
+ * Provides a consistent interface for SQLite database operations
6
+ * across WASM and native backend variants.
7
+ */
8
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import type { DatabaseConfig, DatabaseType, HealthStatus, QueryResult, SchemaInfo, TableInfo, AdapterCapabilities, ToolDefinition, ResourceDefinition, PromptDefinition, RequestContext, ToolGroup, ToolFilterConfig } from "../types/index.js";
10
+ /**
11
+ * Abstract base class for database adapters
12
+ */
13
+ export declare abstract class DatabaseAdapter {
14
+ /** Database type identifier */
15
+ abstract readonly type: DatabaseType;
16
+ /** Human-readable adapter name */
17
+ abstract readonly name: string;
18
+ /** Adapter version */
19
+ abstract readonly version: string;
20
+ /** Connection status */
21
+ protected connected: boolean;
22
+ /** Database configuration */
23
+ protected config: DatabaseConfig | null;
24
+ /**
25
+ * Connect to the database
26
+ * @param config - Database connection configuration
27
+ */
28
+ abstract connect(config: DatabaseConfig): Promise<void>;
29
+ /**
30
+ * Disconnect from the database
31
+ */
32
+ abstract disconnect(): Promise<void>;
33
+ /**
34
+ * Check if connected to the database
35
+ */
36
+ isConnected(): boolean;
37
+ /**
38
+ * Get health status of the database connection
39
+ */
40
+ abstract getHealth(): Promise<HealthStatus>;
41
+ /**
42
+ * Execute a read-only query (SELECT)
43
+ * @param sql - SQL query string
44
+ * @param params - Query parameters for prepared statements
45
+ */
46
+ abstract executeReadQuery(sql: string, params?: unknown[]): Promise<QueryResult>;
47
+ /**
48
+ * Execute a write query (INSERT, UPDATE, DELETE)
49
+ * @param sql - SQL query string
50
+ * @param params - Query parameters for prepared statements
51
+ * @param skipValidation - Skip security validation (for trusted internal operations)
52
+ */
53
+ abstract executeWriteQuery(sql: string, params?: unknown[], skipValidation?: boolean): Promise<QueryResult>;
54
+ /**
55
+ * Execute any query (for admin operations)
56
+ * @param sql - SQL query string
57
+ * @param params - Query parameters for prepared statements
58
+ */
59
+ abstract executeQuery(sql: string, params?: unknown[]): Promise<QueryResult>;
60
+ /**
61
+ * Get full database schema information
62
+ */
63
+ abstract getSchema(): Promise<SchemaInfo>;
64
+ /**
65
+ * List all tables in the database
66
+ */
67
+ abstract listTables(): Promise<TableInfo[]>;
68
+ /**
69
+ * Describe a specific table's structure
70
+ * @param tableName - Name of the table
71
+ */
72
+ abstract describeTable(tableName: string): Promise<TableInfo>;
73
+ /**
74
+ * List available schemas/databases
75
+ */
76
+ abstract listSchemas(): Promise<string[]>;
77
+ /**
78
+ * Get adapter capabilities
79
+ */
80
+ abstract getCapabilities(): AdapterCapabilities;
81
+ /**
82
+ * Get supported tool groups for this adapter
83
+ */
84
+ abstract getSupportedToolGroups(): ToolGroup[];
85
+ /**
86
+ * Get all tool definitions for this adapter
87
+ */
88
+ abstract getToolDefinitions(): ToolDefinition[];
89
+ /**
90
+ * Get all resource definitions for this adapter
91
+ */
92
+ abstract getResourceDefinitions(): ResourceDefinition[];
93
+ /**
94
+ * Get all prompt definitions for this adapter
95
+ */
96
+ abstract getPromptDefinitions(): PromptDefinition[];
97
+ /**
98
+ * Register tools with the MCP server
99
+ * @param server - MCP server instance
100
+ * @param filterConfig - Tool filter configuration
101
+ */
102
+ registerTools(server: McpServer, filterConfig: ToolFilterConfig): void;
103
+ /**
104
+ * Register a single tool with the MCP server
105
+ */
106
+ protected abstract registerTool(server: McpServer, tool: ToolDefinition): void;
107
+ /**
108
+ * Register resources with the MCP server
109
+ */
110
+ registerResources(server: McpServer): void;
111
+ /**
112
+ * Register a single resource with the MCP server
113
+ */
114
+ protected abstract registerResource(server: McpServer, resource: ResourceDefinition): void;
115
+ /**
116
+ * Register prompts with the MCP server
117
+ */
118
+ registerPrompts(server: McpServer): void;
119
+ /**
120
+ * Register a single prompt with the MCP server
121
+ */
122
+ protected abstract registerPrompt(server: McpServer, prompt: PromptDefinition): void;
123
+ /**
124
+ * Validate query for safety (SQL injection prevention)
125
+ * @param sql - SQL query to validate
126
+ * @param isReadOnly - Whether to enforce read-only restrictions
127
+ */
128
+ protected validateQuery(sql: string, isReadOnly: boolean): void;
129
+ /**
130
+ * Create a request context for tool execution
131
+ * @param requestId Optional request ID for tracing
132
+ * @param server Optional MCP Server instance for progress notifications
133
+ * @param progressToken Optional progress token from client request _meta
134
+ */
135
+ protected createContext(requestId?: string, server?: unknown, progressToken?: string | number): RequestContext;
136
+ /**
137
+ * Get adapter info for logging/debugging
138
+ */
139
+ getInfo(): Record<string, unknown>;
140
+ }
141
+ //# sourceMappingURL=DatabaseAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/DatabaseAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * db-mcp - Database Adapter Interface
3
+ *
4
+ * Abstract base class for SQLite database adapters.
5
+ * Provides a consistent interface for SQLite database operations
6
+ * across WASM and native backend variants.
7
+ */
8
+ import { isToolEnabled } from "../filtering/ToolFilter.js";
9
+ /**
10
+ * Abstract base class for database adapters
11
+ */
12
+ export class DatabaseAdapter {
13
+ /** Connection status */
14
+ connected = false;
15
+ /** Database configuration */
16
+ config = null;
17
+ /**
18
+ * Check if connected to the database
19
+ */
20
+ isConnected() {
21
+ return this.connected;
22
+ }
23
+ /**
24
+ * Register tools with the MCP server
25
+ * @param server - MCP server instance
26
+ * @param filterConfig - Tool filter configuration
27
+ */
28
+ registerTools(server, filterConfig) {
29
+ const tools = this.getToolDefinitions();
30
+ for (const tool of tools) {
31
+ if (!isToolEnabled(tool, filterConfig)) {
32
+ continue;
33
+ }
34
+ // Register with MCP server
35
+ this.registerTool(server, tool);
36
+ }
37
+ }
38
+ /**
39
+ * Register resources with the MCP server
40
+ */
41
+ registerResources(server) {
42
+ const resources = this.getResourceDefinitions();
43
+ for (const resource of resources) {
44
+ this.registerResource(server, resource);
45
+ }
46
+ }
47
+ /**
48
+ * Register prompts with the MCP server
49
+ */
50
+ registerPrompts(server) {
51
+ const prompts = this.getPromptDefinitions();
52
+ for (const prompt of prompts) {
53
+ this.registerPrompt(server, prompt);
54
+ }
55
+ }
56
+ // ===========================================================================
57
+ // Utility Methods
58
+ // ===========================================================================
59
+ /**
60
+ * Validate query for safety (SQL injection prevention)
61
+ * @param sql - SQL query to validate
62
+ * @param isReadOnly - Whether to enforce read-only restrictions
63
+ */
64
+ validateQuery(sql, isReadOnly) {
65
+ const trimmedSql = sql.trim().toUpperCase();
66
+ if (isReadOnly) {
67
+ // For read-only queries, block mutating statements
68
+ const writePrefixes = [
69
+ "INSERT",
70
+ "UPDATE",
71
+ "DELETE",
72
+ "DROP",
73
+ "CREATE",
74
+ "ALTER",
75
+ "TRUNCATE",
76
+ ];
77
+ for (const prefix of writePrefixes) {
78
+ if (trimmedSql.startsWith(prefix)) {
79
+ throw new Error(`Read-only mode: ${prefix} statements are not allowed`);
80
+ }
81
+ }
82
+ }
83
+ // Block obvious SQL injection patterns
84
+ // Note: This is a basic check; parameterized queries are the primary defense
85
+ const dangerousPatterns = [
86
+ /;\s*DROP\s+/i,
87
+ /;\s*DELETE\s+/i,
88
+ /;\s*TRUNCATE\s+/i,
89
+ /--.*$/m, // SQL comments (potential injection)
90
+ /\/\*.*\*\//s, // Block comments
91
+ ];
92
+ for (const pattern of dangerousPatterns) {
93
+ if (pattern.test(sql)) {
94
+ throw new Error("Query contains potentially dangerous patterns");
95
+ }
96
+ }
97
+ }
98
+ /**
99
+ * Create a request context for tool execution
100
+ * @param requestId Optional request ID for tracing
101
+ * @param server Optional MCP Server instance for progress notifications
102
+ * @param progressToken Optional progress token from client request _meta
103
+ */
104
+ createContext(requestId, server, progressToken) {
105
+ const context = {
106
+ timestamp: new Date(),
107
+ requestId: requestId ?? crypto.randomUUID(),
108
+ };
109
+ if (server !== undefined) {
110
+ context.server = server;
111
+ }
112
+ if (progressToken !== undefined) {
113
+ context.progressToken = progressToken;
114
+ }
115
+ return context;
116
+ }
117
+ /**
118
+ * Get adapter info for logging/debugging
119
+ */
120
+ getInfo() {
121
+ return {
122
+ type: this.type,
123
+ name: this.name,
124
+ version: this.version,
125
+ connected: this.connected,
126
+ capabilities: this.getCapabilities(),
127
+ toolGroups: this.getSupportedToolGroups(),
128
+ };
129
+ }
130
+ }
131
+ //# sourceMappingURL=DatabaseAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatabaseAdapter.js","sourceRoot":"","sources":["../../src/adapters/DatabaseAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * SQLite Schema Manager
3
+ *
4
+ * Provides TTL-based caching for schema metadata operations.
5
+ * Ported from mysql-mcp's SchemaManager pattern.
6
+ */
7
+ import type { QueryResult, TableInfo, SchemaInfo, IndexInfo } from "../../types/index.js";
8
+ export interface QueryExecutor {
9
+ executeReadQuery(sql: string, params?: unknown[]): Promise<QueryResult>;
10
+ }
11
+ /**
12
+ * SchemaManager provides cached access to database schema metadata.
13
+ * Reduces repeated schema queries during tool/resource invocations.
14
+ */
15
+ export declare class SchemaManager {
16
+ private executor;
17
+ private metadataCache;
18
+ private cacheTtlMs;
19
+ constructor(executor: QueryExecutor);
20
+ /**
21
+ * Get cached value if not expired
22
+ */
23
+ private getCached;
24
+ /**
25
+ * Set cache value
26
+ */
27
+ private setCache;
28
+ /**
29
+ * Clear all cached metadata (useful after DDL operations)
30
+ */
31
+ clearCache(): void;
32
+ /**
33
+ * Get the current cache TTL in milliseconds
34
+ */
35
+ getCacheTtl(): number;
36
+ /**
37
+ * Get full database schema (cached)
38
+ */
39
+ getSchema(): Promise<SchemaInfo>;
40
+ /**
41
+ * List all tables (cached)
42
+ */
43
+ listTables(): Promise<TableInfo[]>;
44
+ /**
45
+ * Describe a table's structure (cached per table)
46
+ */
47
+ describeTable(tableName: string): Promise<TableInfo>;
48
+ /**
49
+ * Get all indexes in a single query (cached)
50
+ * Performance optimization: eliminates N+1 query pattern
51
+ */
52
+ getAllIndexes(): Promise<IndexInfo[]>;
53
+ /**
54
+ * Get indexes for a specific table (uses cached all_indexes)
55
+ */
56
+ getTableIndexes(tableName: string): Promise<IndexInfo[]>;
57
+ }
58
+ //# sourceMappingURL=SchemaManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaManager.d.ts","sourceRoot":"","sources":["../../../src/adapters/sqlite/SchemaManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,SAAS,EAEV,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACzE;AAgBD;;;GAGG;AACH,qBAAa,aAAa;IAIZ,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,UAAU,CAAwB;gBAEtB,QAAQ,EAAE,aAAa;IAE3C;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAYtC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAoCxC;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAmD1D;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAwC3C;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAI/D"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * SQLite Schema Manager
3
+ *
4
+ * Provides TTL-based caching for schema metadata operations.
5
+ * Ported from mysql-mcp's SchemaManager pattern.
6
+ */
7
+ /**
8
+ * Default cache TTL in milliseconds (configurable via METADATA_CACHE_TTL_MS env var)
9
+ * SQLite is embedded/local, so 5s default (vs mysql-mcp's 30s for network latency)
10
+ */
11
+ const DEFAULT_CACHE_TTL_MS = parseInt(process.env["METADATA_CACHE_TTL_MS"] ?? "5000", 10);
12
+ /**
13
+ * SchemaManager provides cached access to database schema metadata.
14
+ * Reduces repeated schema queries during tool/resource invocations.
15
+ */
16
+ export class SchemaManager {
17
+ executor;
18
+ metadataCache = new Map();
19
+ cacheTtlMs = DEFAULT_CACHE_TTL_MS;
20
+ constructor(executor) {
21
+ this.executor = executor;
22
+ }
23
+ /**
24
+ * Get cached value if not expired
25
+ */
26
+ getCached(key) {
27
+ const entry = this.metadataCache.get(key);
28
+ if (!entry)
29
+ return undefined;
30
+ if (Date.now() - entry.timestamp > this.cacheTtlMs) {
31
+ this.metadataCache.delete(key);
32
+ return undefined;
33
+ }
34
+ return entry.data;
35
+ }
36
+ /**
37
+ * Set cache value
38
+ */
39
+ setCache(key, data) {
40
+ this.metadataCache.set(key, { data, timestamp: Date.now() });
41
+ }
42
+ /**
43
+ * Clear all cached metadata (useful after DDL operations)
44
+ */
45
+ clearCache() {
46
+ this.metadataCache.clear();
47
+ }
48
+ /**
49
+ * Get the current cache TTL in milliseconds
50
+ */
51
+ getCacheTtl() {
52
+ return this.cacheTtlMs;
53
+ }
54
+ /**
55
+ * Get full database schema (cached)
56
+ */
57
+ async getSchema() {
58
+ const cached = this.getCached("schema");
59
+ if (cached)
60
+ return cached;
61
+ const tables = await this.listTables();
62
+ const indexes = await this.getAllIndexes();
63
+ const schema = { tables, indexes };
64
+ this.setCache("schema", schema);
65
+ return schema;
66
+ }
67
+ /**
68
+ * List all tables (cached)
69
+ */
70
+ async listTables() {
71
+ const cached = this.getCached("tables");
72
+ if (cached)
73
+ return cached;
74
+ const result = await this.executor.executeReadQuery(`SELECT name, type FROM sqlite_master
75
+ WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%'
76
+ ORDER BY name`);
77
+ const tables = [];
78
+ for (const row of result.rows ?? []) {
79
+ const name = row["name"];
80
+ const type = row["type"];
81
+ // Skip FTS5 virtual tables and shadow tables (they're internal implementation details)
82
+ // - Virtual tables: end with "_fts" (e.g., "articles_fts")
83
+ // - Shadow tables: contain "_fts_" (e.g., "articles_fts_config", "articles_fts_data")
84
+ if (name.endsWith("_fts") || name.includes("_fts_")) {
85
+ continue;
86
+ }
87
+ try {
88
+ const tableInfo = await this.describeTable(name);
89
+ tables.push({ ...tableInfo, type });
90
+ }
91
+ catch {
92
+ // FTS5 virtual tables fail PRAGMA table_info in WASM mode (no FTS5 module)
93
+ // Skip these tables rather than failing the entire operation
94
+ continue;
95
+ }
96
+ }
97
+ this.setCache("tables", tables);
98
+ return tables;
99
+ }
100
+ /**
101
+ * Describe a table's structure (cached per table)
102
+ */
103
+ async describeTable(tableName) {
104
+ const cacheKey = `table_${tableName}`;
105
+ const cached = this.getCached(cacheKey);
106
+ if (cached)
107
+ return cached;
108
+ // Validate table name
109
+ if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(tableName)) {
110
+ throw new Error("Invalid table name");
111
+ }
112
+ const result = await this.executor.executeReadQuery(`PRAGMA table_info("${tableName}")`);
113
+ // Check if table exists (PRAGMA returns empty for non-existent tables)
114
+ if (!result.rows || result.rows.length === 0) {
115
+ throw new Error(`Table '${tableName}' does not exist`);
116
+ }
117
+ const columns = (result.rows ?? []).map((row) => ({
118
+ name: row["name"],
119
+ type: row["type"],
120
+ nullable: row["notnull"] === 0,
121
+ primaryKey: row["pk"] === 1,
122
+ defaultValue: row["dflt_value"],
123
+ }));
124
+ // Get row count (wrapped in try-catch for FTS5/virtual tables in WASM mode)
125
+ let rowCount = 0;
126
+ try {
127
+ const countResult = await this.executor.executeReadQuery(`SELECT COUNT(*) as count FROM "${tableName}"`);
128
+ rowCount = countResult.rows?.[0]?.["count"] ?? 0;
129
+ }
130
+ catch {
131
+ // FTS5 virtual tables may fail in WASM mode (no FTS5 module)
132
+ // Return 0 for row count rather than failing the entire operation
133
+ rowCount = 0;
134
+ }
135
+ const tableInfo = {
136
+ name: tableName,
137
+ type: "table",
138
+ columns,
139
+ rowCount,
140
+ };
141
+ this.setCache(cacheKey, tableInfo);
142
+ return tableInfo;
143
+ }
144
+ /**
145
+ * Get all indexes in a single query (cached)
146
+ * Performance optimization: eliminates N+1 query pattern
147
+ */
148
+ async getAllIndexes() {
149
+ const cached = this.getCached("all_indexes");
150
+ if (cached)
151
+ return cached;
152
+ const result = await this.executor.executeReadQuery(`SELECT name, tbl_name, sql FROM sqlite_master
153
+ WHERE type = 'index' AND sql IS NOT NULL`);
154
+ const indexes = [];
155
+ for (const row of result.rows ?? []) {
156
+ const indexName = row["name"];
157
+ const tableName = row["tbl_name"];
158
+ const sql = row["sql"];
159
+ // Get column info for this index via PRAGMA index_info
160
+ let columns = [];
161
+ try {
162
+ const indexInfo = await this.executor.executeReadQuery(`PRAGMA index_info("${indexName}")`);
163
+ columns = (indexInfo.rows ?? []).map((col) => col["name"]);
164
+ }
165
+ catch {
166
+ // If PRAGMA fails, fall back to empty columns
167
+ columns = [];
168
+ }
169
+ indexes.push({
170
+ name: indexName,
171
+ tableName,
172
+ columns,
173
+ unique: sql?.toUpperCase().includes("UNIQUE") ?? false,
174
+ });
175
+ }
176
+ this.setCache("all_indexes", indexes);
177
+ return indexes;
178
+ }
179
+ /**
180
+ * Get indexes for a specific table (uses cached all_indexes)
181
+ */
182
+ async getTableIndexes(tableName) {
183
+ const allIndexes = await this.getAllIndexes();
184
+ return allIndexes.filter((idx) => idx.tableName === tableName);
185
+ }
186
+ }
187
+ //# sourceMappingURL=SchemaManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaManager.js","sourceRoot":"","sources":["../../../src/adapters/sqlite/SchemaManager.ts"],"names":[],"mappings":"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"}