db-mcp 1.0.2 → 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/.gitattributes +2 -0
- package/LICENSE +1 -1
- package/README.md +244 -518
- package/dist/chunk-4IA3DB5C.js +135 -0
- package/dist/chunk-AOUL5SHS.js +930 -0
- package/dist/chunk-DWJXQEFA.js +13759 -0
- package/dist/chunk-DZQLDEQS.js +879 -0
- package/dist/chunk-S5IDDSSB.js +74 -0
- package/dist/chunk-Z2GFQU3G.js +363 -0
- package/dist/cli.d.ts +0 -7
- package/dist/cli.js +227 -183
- package/dist/http-VSB7DBJR.js +1541 -0
- package/dist/index.d.ts +842 -10
- package/dist/index.js +5 -17
- package/dist/sqlite-VHBA4ABV.js +600 -0
- package/dist/sqlite-native-D2LH5ZT7.js +2498 -0
- package/dist/worker-script.d.ts +2 -0
- package/dist/worker-script.js +126 -0
- package/package.json +26 -16
- package/playwright.config.ts +101 -0
- package/scripts/generate-server-instructions.ts +111 -0
- package/server.json +5 -6
- package/test-server/README.md +118 -0
- package/test-server/code-map.md +409 -0
- package/test-server/fixtures/sample.csv +6 -0
- package/test-server/reset-database.ps1 +373 -0
- package/test-server/sample.csv +11 -0
- package/test-server/test-agent-experience.md +243 -0
- package/test-server/test-database.sql +388 -0
- package/test-server/test-group-tools.md +861 -0
- package/test-server/test-help-resources.mjs +238 -0
- package/test-server/test-preflight.md +53 -0
- package/test-server/test-prompts.md +354 -0
- package/test-server/test-resources.md +245 -0
- package/test-server/test-tool-annotations.mjs +157 -0
- package/test-server/test-tools-advanced-1.md +517 -0
- package/test-server/test-tools-advanced-2.md +487 -0
- package/test-server/test-tools-codemode.md +629 -0
- package/test-server/test-tools.md +176 -0
- package/test-server/tool-reference.md +236 -0
- package/tsconfig.test.json +9 -0
- package/dist/adapters/DatabaseAdapter.d.ts +0 -141
- package/dist/adapters/DatabaseAdapter.d.ts.map +0 -1
- package/dist/adapters/DatabaseAdapter.js +0 -131
- package/dist/adapters/DatabaseAdapter.js.map +0 -1
- package/dist/adapters/sqlite/SchemaManager.d.ts +0 -58
- package/dist/adapters/sqlite/SchemaManager.d.ts.map +0 -1
- package/dist/adapters/sqlite/SchemaManager.js +0 -187
- package/dist/adapters/sqlite/SchemaManager.js.map +0 -1
- package/dist/adapters/sqlite/SqliteAdapter.d.ts +0 -161
- package/dist/adapters/sqlite/SqliteAdapter.d.ts.map +0 -1
- package/dist/adapters/sqlite/SqliteAdapter.js +0 -741
- package/dist/adapters/sqlite/SqliteAdapter.js.map +0 -1
- package/dist/adapters/sqlite/index.d.ts +0 -9
- package/dist/adapters/sqlite/index.d.ts.map +0 -1
- package/dist/adapters/sqlite/index.js +0 -8
- package/dist/adapters/sqlite/index.js.map +0 -1
- package/dist/adapters/sqlite/json-utils.d.ts +0 -100
- package/dist/adapters/sqlite/json-utils.d.ts.map +0 -1
- package/dist/adapters/sqlite/json-utils.js +0 -274
- package/dist/adapters/sqlite/json-utils.js.map +0 -1
- package/dist/adapters/sqlite/output-schemas.d.ts +0 -1187
- package/dist/adapters/sqlite/output-schemas.d.ts.map +0 -1
- package/dist/adapters/sqlite/output-schemas.js +0 -1337
- package/dist/adapters/sqlite/output-schemas.js.map +0 -1
- package/dist/adapters/sqlite/prompts.d.ts +0 -13
- package/dist/adapters/sqlite/prompts.d.ts.map +0 -1
- package/dist/adapters/sqlite/prompts.js +0 -605
- package/dist/adapters/sqlite/prompts.js.map +0 -1
- package/dist/adapters/sqlite/resources.d.ts +0 -13
- package/dist/adapters/sqlite/resources.d.ts.map +0 -1
- package/dist/adapters/sqlite/resources.js +0 -251
- package/dist/adapters/sqlite/resources.js.map +0 -1
- package/dist/adapters/sqlite/tools/admin.d.ts +0 -14
- package/dist/adapters/sqlite/tools/admin.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/admin.js +0 -788
- package/dist/adapters/sqlite/tools/admin.js.map +0 -1
- package/dist/adapters/sqlite/tools/core.d.ts +0 -25
- package/dist/adapters/sqlite/tools/core.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/core.js +0 -359
- package/dist/adapters/sqlite/tools/core.js.map +0 -1
- package/dist/adapters/sqlite/tools/fts.d.ts +0 -13
- package/dist/adapters/sqlite/tools/fts.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/fts.js +0 -347
- package/dist/adapters/sqlite/tools/fts.js.map +0 -1
- package/dist/adapters/sqlite/tools/geo.d.ts +0 -14
- package/dist/adapters/sqlite/tools/geo.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/geo.js +0 -252
- package/dist/adapters/sqlite/tools/geo.js.map +0 -1
- package/dist/adapters/sqlite/tools/index.d.ts +0 -30
- package/dist/adapters/sqlite/tools/index.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/index.js +0 -61
- package/dist/adapters/sqlite/tools/index.js.map +0 -1
- package/dist/adapters/sqlite/tools/json-helpers.d.ts +0 -14
- package/dist/adapters/sqlite/tools/json-helpers.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/json-helpers.js +0 -477
- package/dist/adapters/sqlite/tools/json-helpers.js.map +0 -1
- package/dist/adapters/sqlite/tools/json-operations.d.ts +0 -14
- package/dist/adapters/sqlite/tools/json-operations.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/json-operations.js +0 -839
- package/dist/adapters/sqlite/tools/json-operations.js.map +0 -1
- package/dist/adapters/sqlite/tools/stats.d.ts +0 -15
- package/dist/adapters/sqlite/tools/stats.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/stats.js +0 -1219
- package/dist/adapters/sqlite/tools/stats.js.map +0 -1
- package/dist/adapters/sqlite/tools/text.d.ts +0 -14
- package/dist/adapters/sqlite/tools/text.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/text.js +0 -1141
- package/dist/adapters/sqlite/tools/text.js.map +0 -1
- package/dist/adapters/sqlite/tools/vector.d.ts +0 -14
- package/dist/adapters/sqlite/tools/vector.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/vector.js +0 -613
- package/dist/adapters/sqlite/tools/vector.js.map +0 -1
- package/dist/adapters/sqlite/tools/virtual.d.ts +0 -13
- package/dist/adapters/sqlite/tools/virtual.d.ts.map +0 -1
- package/dist/adapters/sqlite/tools/virtual.js +0 -930
- package/dist/adapters/sqlite/tools/virtual.js.map +0 -1
- package/dist/adapters/sqlite/types.d.ts +0 -207
- package/dist/adapters/sqlite/types.d.ts.map +0 -1
- package/dist/adapters/sqlite/types.js +0 -186
- package/dist/adapters/sqlite/types.js.map +0 -1
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts +0 -163
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.d.ts.map +0 -1
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js +0 -748
- package/dist/adapters/sqlite-native/NativeSqliteAdapter.js.map +0 -1
- package/dist/adapters/sqlite-native/index.d.ts +0 -11
- package/dist/adapters/sqlite-native/index.d.ts.map +0 -1
- package/dist/adapters/sqlite-native/index.js +0 -11
- package/dist/adapters/sqlite-native/index.js.map +0 -1
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts +0 -19
- package/dist/adapters/sqlite-native/tools/spatialite.d.ts.map +0 -1
- package/dist/adapters/sqlite-native/tools/spatialite.js +0 -628
- package/dist/adapters/sqlite-native/tools/spatialite.js.map +0 -1
- package/dist/adapters/sqlite-native/tools/transactions.d.ts +0 -12
- package/dist/adapters/sqlite-native/tools/transactions.d.ts.map +0 -1
- package/dist/adapters/sqlite-native/tools/transactions.js +0 -255
- package/dist/adapters/sqlite-native/tools/transactions.js.map +0 -1
- package/dist/adapters/sqlite-native/tools/window.d.ts +0 -12
- package/dist/adapters/sqlite-native/tools/window.d.ts.map +0 -1
- package/dist/adapters/sqlite-native/tools/window.js +0 -370
- package/dist/adapters/sqlite-native/tools/window.js.map +0 -1
- package/dist/auth/AuthorizationServerDiscovery.d.ts +0 -90
- package/dist/auth/AuthorizationServerDiscovery.d.ts.map +0 -1
- package/dist/auth/AuthorizationServerDiscovery.js +0 -204
- package/dist/auth/AuthorizationServerDiscovery.js.map +0 -1
- package/dist/auth/OAuthResourceServer.d.ts +0 -65
- package/dist/auth/OAuthResourceServer.d.ts.map +0 -1
- package/dist/auth/OAuthResourceServer.js +0 -121
- package/dist/auth/OAuthResourceServer.js.map +0 -1
- package/dist/auth/TokenValidator.d.ts +0 -60
- package/dist/auth/TokenValidator.d.ts.map +0 -1
- package/dist/auth/TokenValidator.js +0 -235
- package/dist/auth/TokenValidator.js.map +0 -1
- package/dist/auth/errors.d.ts +0 -74
- package/dist/auth/errors.d.ts.map +0 -1
- package/dist/auth/errors.js +0 -133
- package/dist/auth/errors.js.map +0 -1
- package/dist/auth/index.d.ts +0 -13
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -15
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/middleware.d.ts +0 -81
- package/dist/auth/middleware.d.ts.map +0 -1
- package/dist/auth/middleware.js +0 -291
- package/dist/auth/middleware.js.map +0 -1
- package/dist/auth/scopes.d.ts +0 -136
- package/dist/auth/scopes.d.ts.map +0 -1
- package/dist/auth/scopes.js +0 -349
- package/dist/auth/scopes.js.map +0 -1
- package/dist/auth/types.d.ts +0 -257
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -8
- package/dist/auth/types.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/constants/ServerInstructions.d.ts +0 -45
- package/dist/constants/ServerInstructions.d.ts.map +0 -1
- package/dist/constants/ServerInstructions.js +0 -356
- package/dist/constants/ServerInstructions.js.map +0 -1
- package/dist/filtering/ToolConstants.d.ts +0 -34
- package/dist/filtering/ToolConstants.d.ts.map +0 -1
- package/dist/filtering/ToolConstants.js +0 -174
- package/dist/filtering/ToolConstants.js.map +0 -1
- package/dist/filtering/ToolFilter.d.ts +0 -82
- package/dist/filtering/ToolFilter.d.ts.map +0 -1
- package/dist/filtering/ToolFilter.js +0 -296
- package/dist/filtering/ToolFilter.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/server/McpServer.d.ts +0 -61
- package/dist/server/McpServer.d.ts.map +0 -1
- package/dist/server/McpServer.js +0 -270
- package/dist/server/McpServer.js.map +0 -1
- package/dist/transports/http.d.ts +0 -134
- package/dist/transports/http.d.ts.map +0 -1
- package/dist/transports/http.js +0 -516
- package/dist/transports/http.js.map +0 -1
- package/dist/transports/index.d.ts +0 -5
- package/dist/transports/index.d.ts.map +0 -1
- package/dist/transports/index.js +0 -5
- package/dist/transports/index.js.map +0 -1
- package/dist/types/index.d.ts +0 -380
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -68
- package/dist/types/index.js.map +0 -1
- package/dist/utils/annotations.d.ts +0 -44
- package/dist/utils/annotations.d.ts.map +0 -1
- package/dist/utils/annotations.js +0 -77
- package/dist/utils/annotations.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -155
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -329
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/identifiers.d.ts +0 -121
- package/dist/utils/identifiers.d.ts.map +0 -1
- package/dist/utils/identifiers.js +0 -319
- package/dist/utils/identifiers.js.map +0 -1
- package/dist/utils/index.d.ts +0 -7
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -7
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/insightsManager.d.ts +0 -39
- package/dist/utils/insightsManager.d.ts.map +0 -1
- package/dist/utils/insightsManager.js +0 -63
- package/dist/utils/insightsManager.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -189
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -394
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/progress-utils.d.ts +0 -54
- package/dist/utils/progress-utils.d.ts.map +0 -1
- package/dist/utils/progress-utils.js +0 -74
- package/dist/utils/progress-utils.js.map +0 -1
- package/dist/utils/resourceAnnotations.d.ts +0 -36
- package/dist/utils/resourceAnnotations.d.ts.map +0 -1
- package/dist/utils/resourceAnnotations.js +0 -57
- package/dist/utils/resourceAnnotations.js.map +0 -1
- package/dist/utils/where-clause.d.ts +0 -41
- package/dist/utils/where-clause.d.ts.map +0 -1
- package/dist/utils/where-clause.js +0 -116
- package/dist/utils/where-clause.js.map +0 -1
|
@@ -1,131 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseAdapter.js","sourceRoot":"","sources":["../../src/adapters/DatabaseAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,58 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,187 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaManager.js","sourceRoot":"","sources":["../../../src/adapters/sqlite/SchemaManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite Adapter
|
|
3
|
-
*
|
|
4
|
-
* MCP adapter for SQLite databases using sql.js (WebAssembly).
|
|
5
|
-
* Provides 73 tools for database operations, JSON, text processing,
|
|
6
|
-
* statistics, vector search, and geospatial features.
|
|
7
|
-
*/
|
|
8
|
-
import { type Database } from "sql.js";
|
|
9
|
-
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
10
|
-
import { DatabaseAdapter } from "../DatabaseAdapter.js";
|
|
11
|
-
import type { DatabaseConfig, QueryResult, SchemaInfo, TableInfo, IndexInfo, HealthStatus, AdapterCapabilities, ToolDefinition, ResourceDefinition, PromptDefinition, ToolGroup } from "../../types/index.js";
|
|
12
|
-
import type { SqliteConfig } from "./types.js";
|
|
13
|
-
/**
|
|
14
|
-
* SQLite Database Adapter
|
|
15
|
-
*
|
|
16
|
-
* Implements the DatabaseAdapter interface for SQLite using sql.js.
|
|
17
|
-
* Supports file-based and in-memory databases.
|
|
18
|
-
*/
|
|
19
|
-
export declare class SqliteAdapter extends DatabaseAdapter {
|
|
20
|
-
readonly type: "sqlite";
|
|
21
|
-
readonly name = "SQLite Adapter";
|
|
22
|
-
readonly version = "1.0.0";
|
|
23
|
-
/**
|
|
24
|
-
* Check if this adapter uses native (better-sqlite3) backend.
|
|
25
|
-
* Returns false for WASM/sql.js adapter.
|
|
26
|
-
*/
|
|
27
|
-
isNativeBackend(): boolean;
|
|
28
|
-
/**
|
|
29
|
-
* Get the configured database file path.
|
|
30
|
-
* Returns the user-configured path, not internal WASM virtual filesystem paths.
|
|
31
|
-
*/
|
|
32
|
-
getConfiguredPath(): string;
|
|
33
|
-
private db;
|
|
34
|
-
protected config: SqliteConfig | null;
|
|
35
|
-
private sqlJsInstance;
|
|
36
|
-
private schemaManager;
|
|
37
|
-
/**
|
|
38
|
-
* Connect to a SQLite database
|
|
39
|
-
*/
|
|
40
|
-
connect(config: DatabaseConfig): Promise<void>;
|
|
41
|
-
/**
|
|
42
|
-
* Apply SQLite PRAGMA options
|
|
43
|
-
*/
|
|
44
|
-
private applyOptions;
|
|
45
|
-
/**
|
|
46
|
-
* Disconnect from the database
|
|
47
|
-
*/
|
|
48
|
-
disconnect(): Promise<void>;
|
|
49
|
-
/**
|
|
50
|
-
* Get database health status
|
|
51
|
-
*/
|
|
52
|
-
getHealth(): Promise<HealthStatus>;
|
|
53
|
-
/**
|
|
54
|
-
* Normalize parameters for SQLite binding
|
|
55
|
-
* Converts booleans to integers since SQLite doesn't have native boolean type
|
|
56
|
-
*/
|
|
57
|
-
private normalizeParams;
|
|
58
|
-
/**
|
|
59
|
-
* Execute a read-only query
|
|
60
|
-
*/
|
|
61
|
-
executeReadQuery(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
62
|
-
/**
|
|
63
|
-
* Execute a write query
|
|
64
|
-
*/
|
|
65
|
-
executeWriteQuery(sql: string, params?: unknown[], skipValidation?: boolean): Promise<QueryResult>;
|
|
66
|
-
/**
|
|
67
|
-
* Execute any query (for admin operations)
|
|
68
|
-
*/
|
|
69
|
-
executeQuery(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
70
|
-
/**
|
|
71
|
-
* Get full database schema (cached via SchemaManager)
|
|
72
|
-
*/
|
|
73
|
-
getSchema(): Promise<SchemaInfo>;
|
|
74
|
-
/**
|
|
75
|
-
* List all tables (cached via SchemaManager)
|
|
76
|
-
*/
|
|
77
|
-
listTables(): Promise<TableInfo[]>;
|
|
78
|
-
/**
|
|
79
|
-
* Describe a table's structure (cached via SchemaManager)
|
|
80
|
-
*/
|
|
81
|
-
describeTable(tableName: string): Promise<TableInfo>;
|
|
82
|
-
/**
|
|
83
|
-
* List available schemas (SQLite has only 'main')
|
|
84
|
-
*/
|
|
85
|
-
listSchemas(): Promise<string[]>;
|
|
86
|
-
/**
|
|
87
|
-
* Get indexes, optionally for a specific table (cached via SchemaManager)
|
|
88
|
-
*/
|
|
89
|
-
getIndexes(table?: string): Promise<IndexInfo[]>;
|
|
90
|
-
/**
|
|
91
|
-
* Get all indexes in a single query (cached via SchemaManager)
|
|
92
|
-
* Performance optimization: eliminates N+1 query pattern
|
|
93
|
-
*/
|
|
94
|
-
getAllIndexes(): Promise<IndexInfo[]>;
|
|
95
|
-
/**
|
|
96
|
-
* Clear the schema metadata cache
|
|
97
|
-
* Call after DDL operations or when fresh data is needed
|
|
98
|
-
*/
|
|
99
|
-
clearSchemaCache(): void;
|
|
100
|
-
/**
|
|
101
|
-
* Get adapter capabilities
|
|
102
|
-
*/
|
|
103
|
-
getCapabilities(): AdapterCapabilities;
|
|
104
|
-
/**
|
|
105
|
-
* Get supported tool groups
|
|
106
|
-
*/
|
|
107
|
-
getSupportedToolGroups(): ToolGroup[];
|
|
108
|
-
/**
|
|
109
|
-
* Get all tool definitions
|
|
110
|
-
*/
|
|
111
|
-
getToolDefinitions(): ToolDefinition[];
|
|
112
|
-
/**
|
|
113
|
-
* Get resource definitions
|
|
114
|
-
*/
|
|
115
|
-
getResourceDefinitions(): ResourceDefinition[];
|
|
116
|
-
/**
|
|
117
|
-
* Get prompt definitions
|
|
118
|
-
*/
|
|
119
|
-
getPromptDefinitions(): PromptDefinition[];
|
|
120
|
-
/**
|
|
121
|
-
* Get adapter info for metadata resource
|
|
122
|
-
*/
|
|
123
|
-
getInfo(): {
|
|
124
|
-
type: string;
|
|
125
|
-
name: string;
|
|
126
|
-
version: string;
|
|
127
|
-
connected: boolean;
|
|
128
|
-
};
|
|
129
|
-
/**
|
|
130
|
-
* Register a single tool with the MCP server
|
|
131
|
-
* Uses modern registerTool() API for MCP 2025-11-25 compliance
|
|
132
|
-
*/
|
|
133
|
-
protected registerTool(server: McpServer, tool: ToolDefinition): void;
|
|
134
|
-
/**
|
|
135
|
-
* Register a single resource with the MCP server
|
|
136
|
-
* Handles both static resources and URI templates
|
|
137
|
-
*/
|
|
138
|
-
protected registerResource(server: McpServer, resource: ResourceDefinition): void;
|
|
139
|
-
/**
|
|
140
|
-
* Register a single prompt with the MCP server
|
|
141
|
-
*/
|
|
142
|
-
protected registerPrompt(server: McpServer, prompt: PromptDefinition): void;
|
|
143
|
-
/**
|
|
144
|
-
* Ensure database is connected
|
|
145
|
-
*/
|
|
146
|
-
private ensureConnected;
|
|
147
|
-
/**
|
|
148
|
-
* Ensure database is connected and return the database instance
|
|
149
|
-
*/
|
|
150
|
-
private ensureDb;
|
|
151
|
-
/**
|
|
152
|
-
* Get the raw database instance (for tools)
|
|
153
|
-
*/
|
|
154
|
-
getDatabase(): Database;
|
|
155
|
-
/**
|
|
156
|
-
* Execute raw SQL and return results (for tools)
|
|
157
|
-
*/
|
|
158
|
-
rawQuery(sql: string, params?: unknown[]): Promise<QueryResult>;
|
|
159
|
-
}
|
|
160
|
-
export declare function createSqliteAdapter(): SqliteAdapter;
|
|
161
|
-
//# sourceMappingURL=SqliteAdapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/sqlite/SqliteAdapter.ts"],"names":[],"mappings":"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"}
|