@node2flow/sqlite-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Node2Flow
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,115 @@
1
+ # SQLite MCP Server
2
+
3
+ [![smithery badge](https://smithery.ai/badge/node2flow/sqlite)](https://smithery.ai/server/node2flow/sqlite)
4
+ [![npm version](https://img.shields.io/npm/v/@node2flow/sqlite-mcp.svg)](https://www.npmjs.com/package/@node2flow/sqlite-mcp)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+
7
+ MCP server for SQLite databases — query, manage schema, indexes, and optimize through 15 tools.
8
+
9
+ ## Quick Start
10
+
11
+ ### Claude Desktop / Cursor
12
+
13
+ ```json
14
+ {
15
+ "mcpServers": {
16
+ "sqlite": {
17
+ "command": "npx",
18
+ "args": ["-y", "@node2flow/sqlite-mcp"],
19
+ "env": {
20
+ "SQLITE_DB_PATH": "/path/to/your/database.db"
21
+ }
22
+ }
23
+ }
24
+ }
25
+ ```
26
+
27
+ ### HTTP Mode
28
+
29
+ ```bash
30
+ SQLITE_DB_PATH=/path/to/database.db npx @node2flow/sqlite-mcp --http
31
+ # MCP endpoint: http://localhost:3000/mcp
32
+ ```
33
+
34
+ ## Configuration
35
+
36
+ | Variable | Required | Description |
37
+ |----------|----------|-------------|
38
+ | `SQLITE_DB_PATH` | Yes | Path to SQLite database file (creates if not exists) |
39
+ | `SQLITE_TIMEOUT` | No | Database busy timeout in milliseconds (default: 5000) |
40
+
41
+ ## Tools (15)
42
+
43
+ ### Query & Execute (3)
44
+
45
+ | Tool | Description |
46
+ |------|-------------|
47
+ | `sqlite_query` | Execute SELECT query, return rows as JSON |
48
+ | `sqlite_execute` | Execute write statement (INSERT/UPDATE/DELETE/CREATE) |
49
+ | `sqlite_run_script` | Execute multiple statements in transaction |
50
+
51
+ ### Schema Inspection (4)
52
+
53
+ | Tool | Description |
54
+ |------|-------------|
55
+ | `sqlite_list_tables` | List all tables with row counts |
56
+ | `sqlite_describe_table` | Get columns, types, constraints |
57
+ | `sqlite_list_indexes` | List indexes for a table |
58
+ | `sqlite_list_foreign_keys` | List foreign key constraints |
59
+
60
+ ### Schema Management (3)
61
+
62
+ | Tool | Description |
63
+ |------|-------------|
64
+ | `sqlite_create_table` | Create new table with column definitions |
65
+ | `sqlite_alter_table` | Add column, rename column, rename table |
66
+ | `sqlite_drop_table` | Drop a table |
67
+
68
+ ### Index Management (2)
69
+
70
+ | Tool | Description |
71
+ |------|-------------|
72
+ | `sqlite_create_index` | Create index on columns |
73
+ | `sqlite_drop_index` | Drop an index |
74
+
75
+ ### Database Management (3)
76
+
77
+ | Tool | Description |
78
+ |------|-------------|
79
+ | `sqlite_get_info` | Database metadata (size, tables, journal mode) |
80
+ | `sqlite_vacuum` | Optimize and compact database |
81
+ | `sqlite_integrity_check` | Check database health |
82
+
83
+ ## Docker
84
+
85
+ ```bash
86
+ docker compose up -d
87
+ # Endpoint: http://localhost:3025/mcp
88
+ ```
89
+
90
+ Mount your database files via volumes:
91
+
92
+ ```yaml
93
+ services:
94
+ sqlite-mcp-community:
95
+ build: .
96
+ ports:
97
+ - "127.0.0.1:3025:3000"
98
+ environment:
99
+ - SQLITE_DB_PATH=/data/database.db
100
+ volumes:
101
+ - ./data:/data
102
+ ```
103
+
104
+ ## License
105
+
106
+ MIT License - see [LICENSE](LICENSE)
107
+
108
+ Copyright (c) 2026 [Node2Flow](https://node2flow.net)
109
+
110
+ ## Links
111
+
112
+ - [npm Package](https://www.npmjs.com/package/@node2flow/sqlite-mcp)
113
+ - [SQLite Documentation](https://sqlite.org/docs.html)
114
+ - [MCP Protocol](https://modelcontextprotocol.io/)
115
+ - [Node2Flow](https://node2flow.net)
@@ -0,0 +1,38 @@
1
+ /**
2
+ * SQLite Client
3
+ * Wraps better-sqlite3 with typed methods for all MCP tools
4
+ */
5
+ import type { SqliteConfig, ColumnInfo, IndexInfo, ForeignKeyInfo, TableInfo, DatabaseInfo, ColumnDefinition, QueryResult, ExecuteResult } from './types.js';
6
+ export declare class SqliteClient {
7
+ private db;
8
+ private config;
9
+ constructor(config: SqliteConfig);
10
+ query(sql: string, params?: unknown[]): QueryResult;
11
+ execute(sql: string, params?: unknown[]): ExecuteResult;
12
+ runScript(sql: string): {
13
+ statementsRun: number;
14
+ };
15
+ listTables(): TableInfo[];
16
+ describeTable(table: string): {
17
+ columns: ColumnInfo[];
18
+ sql: string;
19
+ };
20
+ listIndexes(table: string): IndexInfo[];
21
+ listForeignKeys(table: string): ForeignKeyInfo[];
22
+ createTable(table: string, columns: ColumnDefinition[], ifNotExists?: boolean): void;
23
+ alterTable(table: string, action: string, params: Record<string, unknown>): void;
24
+ dropTable(table: string, ifExists?: boolean): void;
25
+ createIndex(table: string, columns: string[], indexName?: string, unique?: boolean, ifNotExists?: boolean): void;
26
+ dropIndex(indexName: string, ifExists?: boolean): void;
27
+ getInfo(): DatabaseInfo;
28
+ vacuum(): {
29
+ sizeBefore: number;
30
+ sizeAfter: number;
31
+ };
32
+ integrityCheck(): {
33
+ ok: boolean;
34
+ results: string[];
35
+ };
36
+ close(): void;
37
+ }
38
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,cAAc,EACd,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAchC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,WAAW;IAYnD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,aAAa;IAMvD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE;IAmBjD,UAAU,IAAI,SAAS,EAAE;IAqBzB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAUpE,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE;IAMvC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE;IAQhD,WAAW,CACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,EAAE,EAC3B,WAAW,CAAC,EAAE,OAAO,GACpB,IAAI;IAiBP,UAAU,CACR,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI;IA0BP,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI;IAOlD,WAAW,CACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,OAAO,EAChB,WAAW,CAAC,EAAE,OAAO,GACpB,IAAI;IAUP,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI;IAOtD,OAAO,IAAI,YAAY;IA8CvB,MAAM,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAiBnD,cAAc,IAAI;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAWpD,KAAK,IAAI,IAAI;CAGd"}
package/dist/client.js ADDED
@@ -0,0 +1,212 @@
1
+ /**
2
+ * SQLite Client
3
+ * Wraps better-sqlite3 with typed methods for all MCP tools
4
+ */
5
+ import Database from 'better-sqlite3';
6
+ import * as fs from 'node:fs';
7
+ import * as path from 'node:path';
8
+ export class SqliteClient {
9
+ db;
10
+ config;
11
+ constructor(config) {
12
+ this.config = config;
13
+ this.db = new Database(config.dbPath, {
14
+ readonly: config.readonly ?? false,
15
+ timeout: config.timeout ?? 5000,
16
+ });
17
+ // Enable WAL mode for better concurrency
18
+ this.db.pragma('journal_mode = WAL');
19
+ // Enable foreign keys
20
+ this.db.pragma('foreign_keys = ON');
21
+ }
22
+ // ========== Query & Execute ==========
23
+ query(sql, params) {
24
+ const stmt = this.db.prepare(sql);
25
+ const rows = params
26
+ ? stmt.all(...params)
27
+ : stmt.all();
28
+ const columns = rows.length > 0
29
+ ? Object.keys(rows[0])
30
+ : stmt.columns().map((c) => c.name);
31
+ return { columns, rows, rowCount: rows.length };
32
+ }
33
+ execute(sql, params) {
34
+ const stmt = this.db.prepare(sql);
35
+ const result = params ? stmt.run(...params) : stmt.run();
36
+ return { changes: result.changes, lastInsertRowid: result.lastInsertRowid };
37
+ }
38
+ runScript(sql) {
39
+ const transaction = this.db.transaction(() => {
40
+ const statements = sql
41
+ .split(';')
42
+ .map((s) => s.trim())
43
+ .filter((s) => s.length > 0);
44
+ let count = 0;
45
+ for (const stmt of statements) {
46
+ this.db.exec(stmt);
47
+ count++;
48
+ }
49
+ return count;
50
+ });
51
+ const statementsRun = transaction();
52
+ return { statementsRun };
53
+ }
54
+ // ========== Schema Inspection ==========
55
+ listTables() {
56
+ const tables = this.db
57
+ .prepare("SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%' ORDER BY name")
58
+ .all();
59
+ return tables.map((t) => {
60
+ let rowCount = 0;
61
+ try {
62
+ const result = this.db
63
+ .prepare(`SELECT COUNT(*) as count FROM "${t.name}"`)
64
+ .get();
65
+ rowCount = result.count;
66
+ }
67
+ catch {
68
+ // View or inaccessible table
69
+ }
70
+ return { name: t.name, type: t.type, rowCount };
71
+ });
72
+ }
73
+ describeTable(table) {
74
+ const columns = this.db
75
+ .prepare(`PRAGMA table_info("${table}")`)
76
+ .all();
77
+ const schemaRow = this.db
78
+ .prepare('SELECT sql FROM sqlite_master WHERE name = ?')
79
+ .get(table);
80
+ return { columns, sql: schemaRow?.sql ?? '' };
81
+ }
82
+ listIndexes(table) {
83
+ return this.db
84
+ .prepare(`PRAGMA index_list("${table}")`)
85
+ .all();
86
+ }
87
+ listForeignKeys(table) {
88
+ return this.db
89
+ .prepare(`PRAGMA foreign_key_list("${table}")`)
90
+ .all();
91
+ }
92
+ // ========== Schema Management ==========
93
+ createTable(table, columns, ifNotExists) {
94
+ const colDefs = columns.map((col) => {
95
+ let def = `"${col.name}" ${col.type}`;
96
+ if (col.primaryKey)
97
+ def += ' PRIMARY KEY';
98
+ if (col.notNull)
99
+ def += ' NOT NULL';
100
+ if (col.unique)
101
+ def += ' UNIQUE';
102
+ if (col.default !== undefined && col.default !== null) {
103
+ def += ` DEFAULT ${typeof col.default === 'string' ? `'${col.default}'` : col.default}`;
104
+ }
105
+ return def;
106
+ });
107
+ const exists = ifNotExists ? ' IF NOT EXISTS' : '';
108
+ this.db.exec(`CREATE TABLE${exists} "${table}" (${colDefs.join(', ')})`);
109
+ }
110
+ alterTable(table, action, params) {
111
+ switch (action) {
112
+ case 'add_column': {
113
+ let sql = `ALTER TABLE "${table}" ADD COLUMN "${params.column}" ${params.type}`;
114
+ if (params.notNull)
115
+ sql += ' NOT NULL';
116
+ if (params.default !== undefined) {
117
+ sql += ` DEFAULT ${typeof params.default === 'string' ? `'${params.default}'` : params.default}`;
118
+ }
119
+ this.db.exec(sql);
120
+ break;
121
+ }
122
+ case 'rename_column':
123
+ this.db.exec(`ALTER TABLE "${table}" RENAME COLUMN "${params.oldName}" TO "${params.newName}"`);
124
+ break;
125
+ case 'rename_table':
126
+ this.db.exec(`ALTER TABLE "${table}" RENAME TO "${params.newTableName}"`);
127
+ break;
128
+ default:
129
+ throw new Error(`Unknown alter action: ${action}`);
130
+ }
131
+ }
132
+ dropTable(table, ifExists) {
133
+ const exists = ifExists ? ' IF EXISTS' : '';
134
+ this.db.exec(`DROP TABLE${exists} "${table}"`);
135
+ }
136
+ // ========== Index Management ==========
137
+ createIndex(table, columns, indexName, unique, ifNotExists) {
138
+ const name = indexName || `idx_${table}_${columns.join('_')}`;
139
+ const uniqueStr = unique ? ' UNIQUE' : '';
140
+ const exists = ifNotExists ? ' IF NOT EXISTS' : '';
141
+ const cols = columns.map((c) => `"${c}"`).join(', ');
142
+ this.db.exec(`CREATE${uniqueStr} INDEX${exists} "${name}" ON "${table}" (${cols})`);
143
+ }
144
+ dropIndex(indexName, ifExists) {
145
+ const exists = ifExists ? ' IF EXISTS' : '';
146
+ this.db.exec(`DROP INDEX${exists} "${indexName}"`);
147
+ }
148
+ // ========== Database Management ==========
149
+ getInfo() {
150
+ const pageCount = this.db.prepare('PRAGMA page_count').get().page_count;
151
+ const pageSize = this.db.prepare('PRAGMA page_size').get().page_size;
152
+ const journalMode = this.db.prepare('PRAGMA journal_mode').get().journal_mode;
153
+ const encoding = this.db.prepare('PRAGMA encoding').get().encoding;
154
+ const sqliteVersion = this.db
155
+ .prepare('SELECT sqlite_version() as version')
156
+ .get().version;
157
+ let fileSize = 0;
158
+ try {
159
+ const stats = fs.statSync(this.config.dbPath);
160
+ fileSize = stats.size;
161
+ }
162
+ catch {
163
+ // In-memory database
164
+ }
165
+ const tables = this.db
166
+ .prepare("SELECT COUNT(*) as count FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'")
167
+ .get();
168
+ return {
169
+ filePath: path.resolve(this.config.dbPath),
170
+ fileSize,
171
+ tableCount: tables.count,
172
+ pageCount,
173
+ pageSize,
174
+ journalMode,
175
+ walMode: journalMode === 'wal',
176
+ encoding,
177
+ sqliteVersion,
178
+ };
179
+ }
180
+ vacuum() {
181
+ let sizeBefore = 0;
182
+ try {
183
+ sizeBefore = fs.statSync(this.config.dbPath).size;
184
+ }
185
+ catch {
186
+ // In-memory database
187
+ }
188
+ this.db.exec('VACUUM');
189
+ let sizeAfter = 0;
190
+ try {
191
+ sizeAfter = fs.statSync(this.config.dbPath).size;
192
+ }
193
+ catch {
194
+ // In-memory database
195
+ }
196
+ return { sizeBefore, sizeAfter };
197
+ }
198
+ integrityCheck() {
199
+ const results = this.db
200
+ .prepare('PRAGMA integrity_check')
201
+ .all();
202
+ const messages = results.map((r) => r.integrity_check);
203
+ return {
204
+ ok: messages.length === 1 && messages[0] === 'ok',
205
+ results: messages,
206
+ };
207
+ }
208
+ close() {
209
+ this.db.close();
210
+ }
211
+ }
212
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAalC,MAAM,OAAO,YAAY;IACf,EAAE,CAAoB;IACtB,MAAM,CAAe;IAE7B,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;YAClC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;SAChC,CAAC,CAAC;QACH,yCAAyC;QACzC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrC,sBAAsB;QACtB,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IAED,wCAAwC;IAExC,KAAK,CAAC,GAAW,EAAE,MAAkB;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM;YACjB,CAAC,CAAE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAA+B;YACpD,CAAC,CAAE,IAAI,CAAC,GAAG,EAAgC,CAAC;QAC9C,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,GAAG,CAAC;YACb,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,MAAkB;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACzD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;IAC9E,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAC3C,MAAM,UAAU,GAAG,GAAG;iBACnB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,KAAK,EAAE,CAAC;YACV,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;QACpC,OAAO,EAAE,aAAa,EAAE,CAAC;IAC3B,CAAC;IAED,0CAA0C;IAE1C,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,OAAO,CACN,iHAAiH,CAClH;aACA,GAAG,EAAsC,CAAC;QAE7C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;qBACnB,OAAO,CAAC,kCAAkC,CAAC,CAAC,IAAI,GAAG,CAAC;qBACpD,GAAG,EAAuB,CAAC;gBAC9B,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE;aACpB,OAAO,CAAC,sBAAsB,KAAK,IAAI,CAAC;aACxC,GAAG,EAAkB,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE;aACtB,OAAO,CAAC,8CAA8C,CAAC;aACvD,GAAG,CAAC,KAAK,CAAgC,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC;IAChD,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CAAC,sBAAsB,KAAK,IAAI,CAAC;aACxC,GAAG,EAAiB,CAAC;IAC1B,CAAC;IAED,eAAe,CAAC,KAAa;QAC3B,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CAAC,4BAA4B,KAAK,IAAI,CAAC;aAC9C,GAAG,EAAsB,CAAC;IAC/B,CAAC;IAED,0CAA0C;IAE1C,WAAW,CACT,KAAa,EACb,OAA2B,EAC3B,WAAqB;QAErB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,UAAU;gBAAE,GAAG,IAAI,cAAc,CAAC;YAC1C,IAAI,GAAG,CAAC,OAAO;gBAAE,GAAG,IAAI,WAAW,CAAC;YACpC,IAAI,GAAG,CAAC,MAAM;gBAAE,GAAG,IAAI,SAAS,CAAC;YACjC,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBACtD,GAAG,IAAI,YAAY,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YAC1F,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,eAAe,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC3D,CAAC;IACJ,CAAC;IAED,UAAU,CACR,KAAa,EACb,MAAc,EACd,MAA+B;QAE/B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,IAAI,GAAG,GAAG,gBAAgB,KAAK,iBAAiB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChF,IAAI,MAAM,CAAC,OAAO;oBAAE,GAAG,IAAI,WAAW,CAAC;gBACvC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACjC,GAAG,IAAI,YAAY,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnG,CAAC;gBACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,MAAM;YACR,CAAC;YACD,KAAK,eAAe;gBAClB,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,gBAAgB,KAAK,oBAAoB,MAAM,CAAC,OAAO,SAAS,MAAM,CAAC,OAAO,GAAG,CAClF,CAAC;gBACF,MAAM;YACR,KAAK,cAAc;gBACjB,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,gBAAgB,KAAK,gBAAgB,MAAM,CAAC,YAAY,GAAG,CAC5D,CAAC;gBACF,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,SAAS,CAAC,KAAa,EAAE,QAAkB;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,MAAM,KAAK,KAAK,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,yCAAyC;IAEzC,WAAW,CACT,KAAa,EACb,OAAiB,EACjB,SAAkB,EAClB,MAAgB,EAChB,WAAqB;QAErB,MAAM,IAAI,GAAG,SAAS,IAAI,OAAO,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,SAAS,SAAS,SAAS,MAAM,KAAK,IAAI,SAAS,KAAK,MAAM,IAAI,GAAG,CACtE,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,SAAiB,EAAE,QAAkB;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,MAAM,KAAK,SAAS,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,4CAA4C;IAE5C,OAAO;QACL,MAAM,SAAS,GACb,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,EACzC,CAAC,UAAoB,CAAC;QACvB,MAAM,QAAQ,GACZ,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,EACxC,CAAC,SAAmB,CAAC;QACtB,MAAM,WAAW,GACf,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAC3C,CAAC,YAAsB,CAAC;QACzB,MAAM,QAAQ,GACZ,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,EACvC,CAAC,QAAkB,CAAC;QACrB,MAAM,aAAa,GACjB,IAAI,CAAC,EAAE;aACJ,OAAO,CAAC,oCAAoC,CAAC;aAC7C,GAAG,EACP,CAAC,OAAiB,CAAC;QAEpB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,OAAO,CACN,+FAA+F,CAChG;aACA,GAAG,EAAuB,CAAC;QAE9B,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC1C,QAAQ;YACR,UAAU,EAAE,MAAM,CAAC,KAAK;YACxB,SAAS;YACT,QAAQ;YACR,WAAW;YACX,OAAO,EAAE,WAAW,KAAK,KAAK;YAC9B,QAAQ;YACR,aAAa;SACd,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC;YACH,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,cAAc;QACZ,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE;aACpB,OAAO,CAAC,wBAAwB,CAAC;aACjC,GAAG,EAAmC,CAAC;QAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACvD,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI;YACjD,OAAO,EAAE,QAAQ;SAClB,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SQLite MCP Server
4
+ *
5
+ * Community edition — connects directly to a local SQLite database.
6
+ *
7
+ * Usage (stdio - for Claude Desktop / Cursor / VS Code):
8
+ * SQLITE_DB_PATH=/path/to/database.db npx @node2flow/sqlite-mcp
9
+ *
10
+ * Usage (HTTP - Streamable HTTP transport):
11
+ * SQLITE_DB_PATH=/path/to/database.db npx @node2flow/sqlite-mcp --http
12
+ */
13
+ export default function createSmitheryServer(opts?: {
14
+ config?: {
15
+ SQLITE_DB_PATH?: string;
16
+ SQLITE_TIMEOUT?: number;
17
+ };
18
+ }): import("@modelcontextprotocol/sdk/server/mcp.js").McpServer;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AA6JH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,IAAI,CAAC,EAAE;IAClD,MAAM,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,+DAOA"}
package/dist/index.js ADDED
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SQLite MCP Server
4
+ *
5
+ * Community edition — connects directly to a local SQLite database.
6
+ *
7
+ * Usage (stdio - for Claude Desktop / Cursor / VS Code):
8
+ * SQLITE_DB_PATH=/path/to/database.db npx @node2flow/sqlite-mcp
9
+ *
10
+ * Usage (HTTP - Streamable HTTP transport):
11
+ * SQLITE_DB_PATH=/path/to/database.db npx @node2flow/sqlite-mcp --http
12
+ */
13
+ import { randomUUID } from 'node:crypto';
14
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
15
+ import { StreamableHTTPServerTransport, } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
16
+ import { createMcpExpressApp } from '@modelcontextprotocol/sdk/server/express.js';
17
+ import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
18
+ import { createServer } from './server.js';
19
+ import { TOOLS } from './tools.js';
20
+ function getConfig() {
21
+ const dbPath = process.env.SQLITE_DB_PATH;
22
+ if (!dbPath)
23
+ return null;
24
+ return {
25
+ dbPath,
26
+ timeout: process.env.SQLITE_TIMEOUT
27
+ ? parseInt(process.env.SQLITE_TIMEOUT, 10)
28
+ : undefined,
29
+ };
30
+ }
31
+ async function startStdio() {
32
+ const config = getConfig();
33
+ const server = createServer(config ?? undefined);
34
+ const transport = new StdioServerTransport();
35
+ await server.connect(transport);
36
+ console.error('SQLite MCP Server running on stdio');
37
+ console.error(`Database: ${config ? config.dbPath : '(not configured yet)'}`);
38
+ console.error(`Tools available: ${TOOLS.length}`);
39
+ console.error('Ready for MCP client\n');
40
+ }
41
+ async function startHttp() {
42
+ const port = parseInt(process.env.PORT || '3000', 10);
43
+ const app = createMcpExpressApp({ host: '0.0.0.0' });
44
+ const transports = {};
45
+ app.post('/mcp', async (req, res) => {
46
+ const sessionId = req.headers['mcp-session-id'];
47
+ try {
48
+ let transport;
49
+ if (sessionId && transports[sessionId]) {
50
+ transport = transports[sessionId];
51
+ }
52
+ else if (!sessionId && isInitializeRequest(req.body)) {
53
+ transport = new StreamableHTTPServerTransport({
54
+ sessionIdGenerator: () => randomUUID(),
55
+ onsessioninitialized: (sid) => {
56
+ transports[sid] = transport;
57
+ },
58
+ });
59
+ transport.onclose = () => {
60
+ const sid = transport.sessionId;
61
+ if (sid && transports[sid]) {
62
+ delete transports[sid];
63
+ }
64
+ };
65
+ const config = getConfig();
66
+ const server = createServer(config ?? undefined);
67
+ await server.connect(transport);
68
+ await transport.handleRequest(req, res, req.body);
69
+ return;
70
+ }
71
+ else {
72
+ res.status(400).json({
73
+ jsonrpc: '2.0',
74
+ error: {
75
+ code: -32000,
76
+ message: 'Bad Request: No valid session ID provided',
77
+ },
78
+ id: null,
79
+ });
80
+ return;
81
+ }
82
+ await transport.handleRequest(req, res, req.body);
83
+ }
84
+ catch (error) {
85
+ console.error('Error handling MCP request:', error);
86
+ if (!res.headersSent) {
87
+ res.status(500).json({
88
+ jsonrpc: '2.0',
89
+ error: { code: -32603, message: 'Internal server error' },
90
+ id: null,
91
+ });
92
+ }
93
+ }
94
+ });
95
+ app.get('/mcp', async (req, res) => {
96
+ const sessionId = req.headers['mcp-session-id'];
97
+ if (!sessionId || !transports[sessionId]) {
98
+ res.status(400).send('Invalid or missing session ID');
99
+ return;
100
+ }
101
+ await transports[sessionId].handleRequest(req, res);
102
+ });
103
+ app.delete('/mcp', async (req, res) => {
104
+ const sessionId = req.headers['mcp-session-id'];
105
+ if (!sessionId || !transports[sessionId]) {
106
+ res.status(400).send('Invalid or missing session ID');
107
+ return;
108
+ }
109
+ await transports[sessionId].handleRequest(req, res);
110
+ });
111
+ app.get('/', (_req, res) => {
112
+ res.json({
113
+ name: 'sqlite-mcp',
114
+ version: '1.0.0',
115
+ status: 'ok',
116
+ tools: TOOLS.length,
117
+ transport: 'streamable-http',
118
+ endpoints: { mcp: '/mcp' },
119
+ });
120
+ });
121
+ const config = getConfig();
122
+ app.listen(port, () => {
123
+ console.log(`SQLite MCP Server (HTTP) listening on port ${port}`);
124
+ console.log(`Database: ${config ? config.dbPath : '(not configured yet)'}`);
125
+ console.log(`Tools available: ${TOOLS.length}`);
126
+ console.log(`MCP endpoint: http://localhost:${port}/mcp`);
127
+ });
128
+ process.on('SIGINT', async () => {
129
+ console.log('\nShutting down...');
130
+ for (const sessionId in transports) {
131
+ try {
132
+ await transports[sessionId].close();
133
+ delete transports[sessionId];
134
+ }
135
+ catch {
136
+ /* ignore */
137
+ }
138
+ }
139
+ process.exit(0);
140
+ });
141
+ }
142
+ async function main() {
143
+ const useHttp = process.argv.includes('--http');
144
+ if (useHttp) {
145
+ await startHttp();
146
+ }
147
+ else {
148
+ await startStdio();
149
+ }
150
+ }
151
+ export default function createSmitheryServer(opts) {
152
+ if (opts?.config?.SQLITE_DB_PATH)
153
+ process.env.SQLITE_DB_PATH = opts.config.SQLITE_DB_PATH;
154
+ if (opts?.config?.SQLITE_TIMEOUT)
155
+ process.env.SQLITE_TIMEOUT = String(opts.config.SQLITE_TIMEOUT);
156
+ const config = getConfig();
157
+ return createServer(config ?? undefined);
158
+ }
159
+ main().catch((error) => {
160
+ console.error('Fatal error:', error);
161
+ process.exit(1);
162
+ });
163
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Shared MCP Server — used by both stdio and HTTP modes
3
+ */
4
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import { SqliteClient } from './client.js';
6
+ export interface SqliteMcpConfig {
7
+ dbPath: string;
8
+ readonly?: boolean;
9
+ timeout?: number;
10
+ }
11
+ export declare function handleToolCall(toolName: string, args: Record<string, unknown>, client: SqliteClient): import("./types.js").DatabaseInfo | import("./types.js").QueryResult | import("./types.js").ExecuteResult | {
12
+ statementsRun: number;
13
+ } | import("./types.js").TableInfo[] | {
14
+ columns: import("./types.js").ColumnInfo[];
15
+ sql: string;
16
+ } | import("./types.js").IndexInfo[] | import("./types.js").ForeignKeyInfo[] | {
17
+ sizeBefore: number;
18
+ sizeAfter: number;
19
+ } | {
20
+ ok: boolean;
21
+ results: string[];
22
+ } | {
23
+ success: boolean;
24
+ table: unknown;
25
+ action?: undefined;
26
+ dropped?: undefined;
27
+ indexName?: undefined;
28
+ } | {
29
+ success: boolean;
30
+ table: unknown;
31
+ action: unknown;
32
+ dropped?: undefined;
33
+ indexName?: undefined;
34
+ } | {
35
+ success: boolean;
36
+ table: unknown;
37
+ dropped: boolean;
38
+ action?: undefined;
39
+ indexName?: undefined;
40
+ } | {
41
+ success: boolean;
42
+ table: unknown;
43
+ indexName: {};
44
+ action?: undefined;
45
+ dropped?: undefined;
46
+ } | {
47
+ success: boolean;
48
+ indexName: unknown;
49
+ dropped: boolean;
50
+ table?: undefined;
51
+ action?: undefined;
52
+ };
53
+ export declare function createServer(config?: SqliteMcpConfig): McpServer;
54
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwFrB;AAED,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,eAAe,aAmLpD"}