@softtechai/quickmcp 1.0.8

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 (163) hide show
  1. package/README.md +553 -0
  2. package/dist/client/MCPClient.d.ts +24 -0
  3. package/dist/client/MCPClient.d.ts.map +1 -0
  4. package/dist/client/MCPClient.js +211 -0
  5. package/dist/client/MCPClient.js.map +1 -0
  6. package/dist/client/MCPClientUnified.d.ts +31 -0
  7. package/dist/client/MCPClientUnified.d.ts.map +1 -0
  8. package/dist/client/MCPClientUnified.js +275 -0
  9. package/dist/client/MCPClientUnified.js.map +1 -0
  10. package/dist/client/MCPTestRunner.d.ts +44 -0
  11. package/dist/client/MCPTestRunner.d.ts.map +1 -0
  12. package/dist/client/MCPTestRunner.js +220 -0
  13. package/dist/client/MCPTestRunner.js.map +1 -0
  14. package/dist/client/MCPTestRunnerUnified.d.ts +48 -0
  15. package/dist/client/MCPTestRunnerUnified.d.ts.map +1 -0
  16. package/dist/client/MCPTestRunnerUnified.js +183 -0
  17. package/dist/client/MCPTestRunnerUnified.js.map +1 -0
  18. package/dist/database/json-manager.d.ts +55 -0
  19. package/dist/database/json-manager.d.ts.map +1 -0
  20. package/dist/database/json-manager.js +128 -0
  21. package/dist/database/json-manager.js.map +1 -0
  22. package/dist/database/sqlite-manager.d.ts +53 -0
  23. package/dist/database/sqlite-manager.d.ts.map +1 -0
  24. package/dist/database/sqlite-manager.js +193 -0
  25. package/dist/database/sqlite-manager.js.map +1 -0
  26. package/dist/dynamic-mcp-executor.d.ts +14 -0
  27. package/dist/dynamic-mcp-executor.d.ts.map +1 -0
  28. package/dist/dynamic-mcp-executor.js +274 -0
  29. package/dist/dynamic-mcp-executor.js.map +1 -0
  30. package/dist/generators/MCPServerGenerator-new.d.ts +37 -0
  31. package/dist/generators/MCPServerGenerator-new.d.ts.map +1 -0
  32. package/dist/generators/MCPServerGenerator-new.js +287 -0
  33. package/dist/generators/MCPServerGenerator-new.js.map +1 -0
  34. package/dist/generators/MCPServerGenerator.d.ts +42 -0
  35. package/dist/generators/MCPServerGenerator.d.ts.map +1 -0
  36. package/dist/generators/MCPServerGenerator.js +494 -0
  37. package/dist/generators/MCPServerGenerator.js.map +1 -0
  38. package/dist/generators/database/sqlite-manager.d.ts +52 -0
  39. package/dist/generators/database/sqlite-manager.js +143 -0
  40. package/dist/generators/generators/MCPServerGenerator.d.ts +37 -0
  41. package/dist/generators/generators/MCPServerGenerator.js +396 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +23 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/integrated-mcp-server-new.d.ts +12 -0
  47. package/dist/integrated-mcp-server-new.d.ts.map +1 -0
  48. package/dist/integrated-mcp-server-new.js +253 -0
  49. package/dist/integrated-mcp-server-new.js.map +1 -0
  50. package/dist/integrated-mcp-server.d.ts +25 -0
  51. package/dist/integrated-mcp-server.d.ts.map +1 -0
  52. package/dist/integrated-mcp-server.js +541 -0
  53. package/dist/integrated-mcp-server.js.map +1 -0
  54. package/dist/mcp-inspector-server.d.ts +3 -0
  55. package/dist/mcp-inspector-server.d.ts.map +1 -0
  56. package/dist/mcp-inspector-server.js +119 -0
  57. package/dist/mcp-inspector-server.js.map +1 -0
  58. package/dist/mcp-sdk-server.d.ts +3 -0
  59. package/dist/mcp-sdk-server.d.ts.map +1 -0
  60. package/dist/mcp-sdk-server.js +90 -0
  61. package/dist/mcp-sdk-server.js.map +1 -0
  62. package/dist/mcp-server.d.ts +3 -0
  63. package/dist/mcp-server.d.ts.map +1 -0
  64. package/dist/mcp-server.js +300 -0
  65. package/dist/mcp-server.js.map +1 -0
  66. package/dist/parsers/CsvParser.d.ts +7 -0
  67. package/dist/parsers/CsvParser.d.ts.map +1 -0
  68. package/dist/parsers/CsvParser.js +98 -0
  69. package/dist/parsers/CsvParser.js.map +1 -0
  70. package/dist/parsers/DatabaseParser.d.ts +18 -0
  71. package/dist/parsers/DatabaseParser.d.ts.map +1 -0
  72. package/dist/parsers/DatabaseParser.js +372 -0
  73. package/dist/parsers/DatabaseParser.js.map +1 -0
  74. package/dist/parsers/ExcelParser.d.ts +8 -0
  75. package/dist/parsers/ExcelParser.d.ts.map +1 -0
  76. package/dist/parsers/ExcelParser.js +119 -0
  77. package/dist/parsers/ExcelParser.js.map +1 -0
  78. package/dist/parsers/index.d.ts +13 -0
  79. package/dist/parsers/index.d.ts.map +1 -0
  80. package/dist/parsers/index.js +88 -0
  81. package/dist/parsers/index.js.map +1 -0
  82. package/dist/parsers/parsers/ExcelParser.js +118 -0
  83. package/dist/parsers/types/index.js +2 -0
  84. package/dist/quickmcp-unified-bridge.d.ts +13 -0
  85. package/dist/quickmcp-unified-bridge.d.ts.map +1 -0
  86. package/dist/quickmcp-unified-bridge.js +176 -0
  87. package/dist/quickmcp-unified-bridge.js.map +1 -0
  88. package/dist/server/ServerManager.d.ts +37 -0
  89. package/dist/server/ServerManager.d.ts.map +1 -0
  90. package/dist/server/ServerManager.js +376 -0
  91. package/dist/server/ServerManager.js.map +1 -0
  92. package/dist/sqlite-manager.js +145 -0
  93. package/dist/start-new-server.d.ts +3 -0
  94. package/dist/start-new-server.d.ts.map +1 -0
  95. package/dist/start-new-server.js +10 -0
  96. package/dist/start-new-server.js.map +1 -0
  97. package/dist/test-app.d.ts +2 -0
  98. package/dist/test-app.d.ts.map +1 -0
  99. package/dist/test-app.js +119 -0
  100. package/dist/test-app.js.map +1 -0
  101. package/dist/test-new-architecture.d.ts +3 -0
  102. package/dist/test-new-architecture.d.ts.map +1 -0
  103. package/dist/test-new-architecture.js +72 -0
  104. package/dist/test-new-architecture.js.map +1 -0
  105. package/dist/transport/base-transport.d.ts +21 -0
  106. package/dist/transport/base-transport.d.ts.map +1 -0
  107. package/dist/transport/base-transport.js +16 -0
  108. package/dist/transport/base-transport.js.map +1 -0
  109. package/dist/transport/index.d.ts +10 -0
  110. package/dist/transport/index.d.ts.map +1 -0
  111. package/dist/transport/index.js +12 -0
  112. package/dist/transport/index.js.map +1 -0
  113. package/dist/transport/sse-transport.d.ts +13 -0
  114. package/dist/transport/sse-transport.d.ts.map +1 -0
  115. package/dist/transport/sse-transport.js +106 -0
  116. package/dist/transport/sse-transport.js.map +1 -0
  117. package/dist/transport/stdio-transport.d.ts +8 -0
  118. package/dist/transport/stdio-transport.d.ts.map +1 -0
  119. package/dist/transport/stdio-transport.js +53 -0
  120. package/dist/transport/stdio-transport.js.map +1 -0
  121. package/dist/transport/streamable-http-transport.d.ts +15 -0
  122. package/dist/transport/streamable-http-transport.d.ts.map +1 -0
  123. package/dist/transport/streamable-http-transport.js +151 -0
  124. package/dist/transport/streamable-http-transport.js.map +1 -0
  125. package/dist/types/index.d.ts +64 -0
  126. package/dist/types/index.d.ts.map +1 -0
  127. package/dist/types/index.js +3 -0
  128. package/dist/types/index.js.map +1 -0
  129. package/dist/web/client/MCPClient.js +348 -0
  130. package/dist/web/client/MCPTestRunner.js +317 -0
  131. package/dist/web/database/json-manager.js +124 -0
  132. package/dist/web/database/sqlite-manager.js +146 -0
  133. package/dist/web/dynamic-mcp-executor.js +443 -0
  134. package/dist/web/generators/MCPServerGenerator-new.js +284 -0
  135. package/dist/web/generators/MCPServerGenerator.js +566 -0
  136. package/dist/web/integrated-mcp-server-new.js +394 -0
  137. package/dist/web/parsers/CsvParser.js +144 -0
  138. package/dist/web/parsers/DatabaseParser.js +637 -0
  139. package/dist/web/parsers/ExcelParser.js +180 -0
  140. package/dist/web/parsers/index.js +152 -0
  141. package/dist/web/server.d.ts +3 -0
  142. package/dist/web/server.d.ts.map +1 -0
  143. package/dist/web/server.js +790 -0
  144. package/dist/web/server.js.map +1 -0
  145. package/dist/web/types/index.js +2 -0
  146. package/dist/web/web/server.js +860 -0
  147. package/package.json +68 -0
  148. package/quickmcp-direct-stdio.js +328 -0
  149. package/src/web/public/app.js +1795 -0
  150. package/src/web/public/database-tables.html +711 -0
  151. package/src/web/public/how-to-use.html +571 -0
  152. package/src/web/public/how-to-use.js +255 -0
  153. package/src/web/public/images/1-claude-quickmcp-stdio.png +0 -0
  154. package/src/web/public/images/2-claude-tools.png +0 -0
  155. package/src/web/public/images/3-claude-developer-settings.png +0 -0
  156. package/src/web/public/images/4-claude-config.png +0 -0
  157. package/src/web/public/images/5-claude-config-edit.png +0 -0
  158. package/src/web/public/index.html +626 -0
  159. package/src/web/public/manage-servers.html +198 -0
  160. package/src/web/public/modern-styles.css +946 -0
  161. package/src/web/public/shared-styles.css +2091 -0
  162. package/src/web/public/shared.js +93 -0
  163. package/src/web/public/test-servers.html +302 -0
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SQLiteManager = void 0;
4
+ var better_sqlite3_1 = require("better-sqlite3");
5
+ var path_1 = require("path");
6
+ var fs_1 = require("fs");
7
+ var SQLiteManager = /** @class */ (function () {
8
+ function SQLiteManager() {
9
+ // Create database directory if it doesn't exist
10
+ var dbDir = path_1.default.join(process.cwd(), 'data');
11
+ if (!fs_1.default.existsSync(dbDir)) {
12
+ fs_1.default.mkdirSync(dbDir, { recursive: true });
13
+ }
14
+ this.dbPath = path_1.default.join(dbDir, 'quickmcp.sqlite');
15
+ this.db = new better_sqlite3_1.default(this.dbPath);
16
+ this.initializeTables();
17
+ }
18
+ SQLiteManager.prototype.initializeTables = function () {
19
+ // Servers table
20
+ this.db.exec("\n CREATE TABLE IF NOT EXISTS servers (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n db_config TEXT NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP\n )\n ");
21
+ // Tools table
22
+ this.db.exec("\n CREATE TABLE IF NOT EXISTS tools (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n server_id TEXT NOT NULL,\n name TEXT NOT NULL,\n description TEXT NOT NULL,\n input_schema TEXT NOT NULL,\n sql_query TEXT NOT NULL,\n operation TEXT NOT NULL CHECK (operation IN ('SELECT', 'INSERT', 'UPDATE', 'DELETE')),\n created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (server_id) REFERENCES servers (id) ON DELETE CASCADE,\n UNIQUE(server_id, name)\n )\n ");
23
+ // Resources table
24
+ this.db.exec("\n CREATE TABLE IF NOT EXISTS resources (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n server_id TEXT NOT NULL,\n name TEXT NOT NULL,\n description TEXT NOT NULL,\n uri_template TEXT NOT NULL,\n sql_query TEXT NOT NULL,\n created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n FOREIGN KEY (server_id) REFERENCES servers (id) ON DELETE CASCADE,\n UNIQUE(server_id, name)\n )\n ");
25
+ console.error('✅ SQLite database initialized:', this.dbPath);
26
+ };
27
+ // Server operations
28
+ SQLiteManager.prototype.saveServer = function (server) {
29
+ var stmt = this.db.prepare("\n INSERT OR REPLACE INTO servers (id, name, db_config, created_at, updated_at)\n VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)\n ");
30
+ stmt.run(server.id, server.name, JSON.stringify(server.dbConfig), server.createdAt);
31
+ };
32
+ SQLiteManager.prototype.getServer = function (serverId) {
33
+ var stmt = this.db.prepare('SELECT * FROM servers WHERE id = ?');
34
+ var row = stmt.get(serverId);
35
+ if (!row)
36
+ return null;
37
+ return {
38
+ id: row.id,
39
+ name: row.name,
40
+ dbConfig: JSON.parse(row.db_config),
41
+ createdAt: row.created_at
42
+ };
43
+ };
44
+ SQLiteManager.prototype.getAllServers = function () {
45
+ var stmt = this.db.prepare('SELECT * FROM servers ORDER BY created_at DESC');
46
+ var rows = stmt.all();
47
+ return rows.map(function (row) { return ({
48
+ id: row.id,
49
+ name: row.name,
50
+ dbConfig: JSON.parse(row.db_config),
51
+ createdAt: row.created_at
52
+ }); });
53
+ };
54
+ SQLiteManager.prototype.deleteServer = function (serverId) {
55
+ var stmt = this.db.prepare('DELETE FROM servers WHERE id = ?');
56
+ stmt.run(serverId);
57
+ };
58
+ // Tool operations
59
+ SQLiteManager.prototype.saveTools = function (tools) {
60
+ var stmt = this.db.prepare("\n INSERT OR REPLACE INTO tools (server_id, name, description, input_schema, sql_query, operation)\n VALUES (?, ?, ?, ?, ?, ?)\n ");
61
+ var transaction = this.db.transaction(function (tools) {
62
+ for (var _i = 0, tools_1 = tools; _i < tools_1.length; _i++) {
63
+ var tool = tools_1[_i];
64
+ stmt.run(tool.server_id, tool.name, tool.description, JSON.stringify(tool.inputSchema), tool.sqlQuery, tool.operation);
65
+ }
66
+ });
67
+ transaction(tools);
68
+ };
69
+ SQLiteManager.prototype.getToolsForServer = function (serverId) {
70
+ var stmt = this.db.prepare('SELECT * FROM tools WHERE server_id = ?');
71
+ var rows = stmt.all(serverId);
72
+ return rows.map(function (row) { return ({
73
+ server_id: row.server_id,
74
+ name: row.name,
75
+ description: row.description,
76
+ inputSchema: JSON.parse(row.input_schema),
77
+ sqlQuery: row.sql_query,
78
+ operation: row.operation
79
+ }); });
80
+ };
81
+ SQLiteManager.prototype.getAllTools = function () {
82
+ var stmt = this.db.prepare('SELECT * FROM tools ORDER BY server_id, name');
83
+ var rows = stmt.all();
84
+ return rows.map(function (row) { return ({
85
+ server_id: row.server_id,
86
+ name: row.name,
87
+ description: row.description,
88
+ inputSchema: JSON.parse(row.input_schema),
89
+ sqlQuery: row.sql_query,
90
+ operation: row.operation
91
+ }); });
92
+ };
93
+ // Resource operations
94
+ SQLiteManager.prototype.saveResources = function (resources) {
95
+ var stmt = this.db.prepare("\n INSERT OR REPLACE INTO resources (server_id, name, description, uri_template, sql_query)\n VALUES (?, ?, ?, ?, ?)\n ");
96
+ var transaction = this.db.transaction(function (resources) {
97
+ for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {
98
+ var resource = resources_1[_i];
99
+ stmt.run(resource.server_id, resource.name, resource.description, resource.uri_template, resource.sqlQuery);
100
+ }
101
+ });
102
+ transaction(resources);
103
+ };
104
+ SQLiteManager.prototype.getResourcesForServer = function (serverId) {
105
+ var stmt = this.db.prepare('SELECT * FROM resources WHERE server_id = ?');
106
+ var rows = stmt.all(serverId);
107
+ return rows.map(function (row) { return ({
108
+ server_id: row.server_id,
109
+ name: row.name,
110
+ description: row.description,
111
+ uri_template: row.uri_template,
112
+ sqlQuery: row.sql_query
113
+ }); });
114
+ };
115
+ SQLiteManager.prototype.getAllResources = function () {
116
+ var stmt = this.db.prepare('SELECT * FROM resources ORDER BY server_id, name');
117
+ var rows = stmt.all();
118
+ return rows.map(function (row) { return ({
119
+ server_id: row.server_id,
120
+ name: row.name,
121
+ description: row.description,
122
+ uri_template: row.uri_template,
123
+ sqlQuery: row.sql_query
124
+ }); });
125
+ };
126
+ // Cleanup
127
+ SQLiteManager.prototype.close = function () {
128
+ this.db.close();
129
+ };
130
+ // Statistics
131
+ SQLiteManager.prototype.getStats = function () {
132
+ var serversCount = this.db.prepare('SELECT COUNT(*) as count FROM servers').get();
133
+ var toolsCount = this.db.prepare('SELECT COUNT(*) as count FROM tools').get();
134
+ var resourcesCount = this.db.prepare('SELECT COUNT(*) as count FROM resources').get();
135
+ return {
136
+ servers: serversCount.count,
137
+ tools: toolsCount.count,
138
+ resources: resourcesCount.count
139
+ };
140
+ };
141
+ return SQLiteManager;
142
+ }());
143
+ exports.SQLiteManager = SQLiteManager;
@@ -0,0 +1,37 @@
1
+ import { ServerConfig, ToolDefinition, ResourceDefinition } from '../database/sqlite-manager.js';
2
+ interface ParsedData {
3
+ [tableName: string]: any[];
4
+ }
5
+ export declare class MCPServerGenerator {
6
+ private sqliteManager;
7
+ constructor();
8
+ generateServer(serverId: string, serverName: string, parsedData: ParsedData, dbConfig: any): Promise<{
9
+ success: boolean;
10
+ message: string;
11
+ }>;
12
+ private generateToolsForData;
13
+ private generateResourcesForData;
14
+ private analyzeColumns;
15
+ private generateFilterProperties;
16
+ private generateInputProperties;
17
+ private generateSelectQuery;
18
+ private generateInsertQuery;
19
+ private generateUpdateQuery;
20
+ private generateDeleteQuery;
21
+ private generateCountQuery;
22
+ private sanitizeName;
23
+ getAllServers(): ServerConfig[];
24
+ getServer(serverId: string): ServerConfig | null;
25
+ deleteServer(serverId: string): void;
26
+ getAllTools(): ToolDefinition[];
27
+ getToolsForServer(serverId: string): ToolDefinition[];
28
+ getAllResources(): ResourceDefinition[];
29
+ getResourcesForServer(serverId: string): ResourceDefinition[];
30
+ getStats(): {
31
+ servers: number;
32
+ tools: number;
33
+ resources: number;
34
+ };
35
+ close(): void;
36
+ }
37
+ export {};
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.MCPServerGenerator = void 0;
51
+ var sqlite_manager_js_1 = require("../database/sqlite-manager.js");
52
+ var MCPServerGenerator = /** @class */ (function () {
53
+ function MCPServerGenerator() {
54
+ this.sqliteManager = new sqlite_manager_js_1.SQLiteManager();
55
+ }
56
+ MCPServerGenerator.prototype.generateServer = function (serverId, serverName, parsedData, dbConfig) {
57
+ return __awaiter(this, void 0, void 0, function () {
58
+ var serverConfig, tools, resources;
59
+ return __generator(this, function (_a) {
60
+ try {
61
+ console.log("\uD83D\uDE80 Generating virtual MCP server: ".concat(serverId));
62
+ // Create server config
63
+ console.log("\uD83D\uDCDD Creating server config with serverId: \"".concat(serverId, "\", serverName: \"").concat(serverName, "\""));
64
+ serverConfig = {
65
+ id: serverId,
66
+ name: serverName,
67
+ dbConfig: dbConfig,
68
+ createdAt: new Date().toISOString()
69
+ };
70
+ console.log('📄 Server config created:', JSON.stringify(serverConfig, null, 2));
71
+ // Save server to SQLite database only
72
+ this.sqliteManager.saveServer(serverConfig);
73
+ console.log("\u2705 Server config saved to SQLite database: ".concat(serverId));
74
+ tools = this.generateToolsForData(serverId, parsedData, dbConfig);
75
+ if (tools.length > 0) {
76
+ this.sqliteManager.saveTools(tools);
77
+ console.log("\u2705 Generated ".concat(tools.length, " tools for server ").concat(serverId));
78
+ }
79
+ resources = this.generateResourcesForData(serverId, parsedData, dbConfig);
80
+ if (resources.length > 0) {
81
+ this.sqliteManager.saveResources(resources);
82
+ console.log("\u2705 Generated ".concat(resources.length, " resources for server ").concat(serverId));
83
+ }
84
+ return [2 /*return*/, {
85
+ success: true,
86
+ message: "Virtual MCP server '".concat(serverId, "' created successfully with ").concat(tools.length, " tools and ").concat(resources.length, " resources")
87
+ }];
88
+ }
89
+ catch (error) {
90
+ console.error("\u274C Error generating server ".concat(serverId, ":"), error);
91
+ return [2 /*return*/, {
92
+ success: false,
93
+ message: "Failed to generate server: ".concat(error instanceof Error ? error.message : 'Unknown error')
94
+ }];
95
+ }
96
+ return [2 /*return*/];
97
+ });
98
+ });
99
+ };
100
+ MCPServerGenerator.prototype.generateToolsForData = function (serverId, parsedData, dbConfig) {
101
+ var tools = [];
102
+ for (var _i = 0, _a = Object.entries(parsedData); _i < _a.length; _i++) {
103
+ var _b = _a[_i], tableName = _b[0], rows = _b[1];
104
+ if (!rows || rows.length === 0)
105
+ continue;
106
+ var columns = this.analyzeColumns(rows);
107
+ var cleanTableName = this.sanitizeName(tableName);
108
+ // GET tool
109
+ tools.push({
110
+ server_id: serverId,
111
+ name: "get_".concat(cleanTableName),
112
+ description: "Get records from ".concat(tableName, " table"),
113
+ inputSchema: {
114
+ type: 'object',
115
+ properties: __assign({ limit: {
116
+ type: 'number',
117
+ description: 'Maximum number of records to return',
118
+ default: 100,
119
+ minimum: 1,
120
+ maximum: 1000
121
+ }, offset: {
122
+ type: 'number',
123
+ description: 'Number of records to skip',
124
+ default: 0,
125
+ minimum: 0
126
+ } }, this.generateFilterProperties(columns)),
127
+ required: []
128
+ },
129
+ sqlQuery: this.generateSelectQuery(tableName, columns, dbConfig.type),
130
+ operation: 'SELECT'
131
+ });
132
+ // CREATE tool
133
+ tools.push({
134
+ server_id: serverId,
135
+ name: "create_".concat(cleanTableName),
136
+ description: "Create a new record in ".concat(tableName, " table"),
137
+ inputSchema: {
138
+ type: 'object',
139
+ properties: this.generateInputProperties(columns, true),
140
+ required: columns.filter(function (col) { return !col.nullable && col.name.toLowerCase() !== 'id'; }).map(function (col) { return col.name; })
141
+ },
142
+ sqlQuery: this.generateInsertQuery(tableName, columns, dbConfig.type),
143
+ operation: 'INSERT'
144
+ });
145
+ // UPDATE tool
146
+ if (columns.some(function (col) { return col.name.toLowerCase() === 'id'; })) {
147
+ tools.push({
148
+ server_id: serverId,
149
+ name: "update_".concat(cleanTableName),
150
+ description: "Update a record in ".concat(tableName, " table"),
151
+ inputSchema: {
152
+ type: 'object',
153
+ properties: __assign({ id: {
154
+ type: ['string', 'number'],
155
+ description: 'ID of the record to update'
156
+ } }, this.generateInputProperties(columns, false)),
157
+ required: ['id']
158
+ },
159
+ sqlQuery: this.generateUpdateQuery(tableName, columns, dbConfig.type),
160
+ operation: 'UPDATE'
161
+ });
162
+ // DELETE tool
163
+ tools.push({
164
+ server_id: serverId,
165
+ name: "delete_".concat(cleanTableName),
166
+ description: "Delete a record from ".concat(tableName, " table"),
167
+ inputSchema: {
168
+ type: 'object',
169
+ properties: {
170
+ id: {
171
+ type: ['string', 'number'],
172
+ description: 'ID of the record to delete'
173
+ }
174
+ },
175
+ required: ['id']
176
+ },
177
+ sqlQuery: this.generateDeleteQuery(tableName, dbConfig.type),
178
+ operation: 'DELETE'
179
+ });
180
+ }
181
+ // COUNT tool
182
+ tools.push({
183
+ server_id: serverId,
184
+ name: "count_".concat(cleanTableName),
185
+ description: "Get total count of records in ".concat(tableName, " table"),
186
+ inputSchema: {
187
+ type: 'object',
188
+ properties: this.generateFilterProperties(columns),
189
+ required: []
190
+ },
191
+ sqlQuery: this.generateCountQuery(tableName, columns, dbConfig.type),
192
+ operation: 'SELECT'
193
+ });
194
+ }
195
+ return tools;
196
+ };
197
+ MCPServerGenerator.prototype.generateResourcesForData = function (serverId, parsedData, dbConfig) {
198
+ var resources = [];
199
+ for (var _i = 0, _a = Object.entries(parsedData); _i < _a.length; _i++) {
200
+ var _b = _a[_i], tableName = _b[0], rows = _b[1];
201
+ if (!rows || rows.length === 0)
202
+ continue;
203
+ var cleanTableName = this.sanitizeName(tableName);
204
+ resources.push({
205
+ server_id: serverId,
206
+ name: "".concat(cleanTableName, "_list"),
207
+ description: "List all records from ".concat(tableName, " table"),
208
+ uri_template: "".concat(cleanTableName, "://list"),
209
+ sqlQuery: this.generateSelectQuery(tableName, this.analyzeColumns(rows), dbConfig.type, false)
210
+ });
211
+ }
212
+ return resources;
213
+ };
214
+ MCPServerGenerator.prototype.analyzeColumns = function (rows) {
215
+ if (!rows || rows.length === 0)
216
+ return [];
217
+ var firstRow = rows[0];
218
+ var columns = [];
219
+ var _loop_1 = function (key, value) {
220
+ var type = 'string';
221
+ if (typeof value === 'number') {
222
+ type = Number.isInteger(value) ? 'integer' : 'number';
223
+ }
224
+ else if (typeof value === 'boolean') {
225
+ type = 'boolean';
226
+ }
227
+ else if (value instanceof Date) {
228
+ type = 'string'; // Dates are handled as strings in JSON
229
+ }
230
+ else if (value === null || value === undefined) {
231
+ // Check other rows to determine type
232
+ for (var i = 1; i < Math.min(rows.length, 10); i++) {
233
+ var otherValue = rows[i][key];
234
+ if (otherValue !== null && otherValue !== undefined) {
235
+ if (typeof otherValue === 'number') {
236
+ type = Number.isInteger(otherValue) ? 'integer' : 'number';
237
+ }
238
+ else if (typeof otherValue === 'boolean') {
239
+ type = 'boolean';
240
+ }
241
+ break;
242
+ }
243
+ }
244
+ }
245
+ columns.push({
246
+ name: key,
247
+ type: type,
248
+ nullable: rows.some(function (row) { return row[key] === null || row[key] === undefined; })
249
+ });
250
+ };
251
+ for (var _i = 0, _a = Object.entries(firstRow); _i < _a.length; _i++) {
252
+ var _b = _a[_i], key = _b[0], value = _b[1];
253
+ _loop_1(key, value);
254
+ }
255
+ return columns;
256
+ };
257
+ MCPServerGenerator.prototype.generateFilterProperties = function (columns) {
258
+ var properties = {};
259
+ for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {
260
+ var column = columns_1[_i];
261
+ var baseType = column.type === 'integer' ? 'number' : column.type;
262
+ properties["filter_".concat(column.name)] = {
263
+ type: baseType,
264
+ description: "Filter by ".concat(column.name)
265
+ };
266
+ }
267
+ return properties;
268
+ };
269
+ MCPServerGenerator.prototype.generateInputProperties = function (columns, isCreate) {
270
+ var properties = {};
271
+ for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {
272
+ var column = columns_2[_i];
273
+ // Skip ID field for create operations
274
+ if (isCreate && column.name.toLowerCase() === 'id')
275
+ continue;
276
+ var baseType = column.type === 'integer' ? 'number' : column.type;
277
+ properties[column.name] = {
278
+ type: baseType,
279
+ description: "".concat(column.name, " field")
280
+ };
281
+ // For nullable fields, make them not required instead of using union types
282
+ if (column.nullable && !isCreate) {
283
+ // Optional field - will not be added to required array
284
+ }
285
+ }
286
+ return properties;
287
+ };
288
+ MCPServerGenerator.prototype.generateSelectQuery = function (tableName, columns, dbType, withParams) {
289
+ if (withParams === void 0) { withParams = true; }
290
+ var columnList = columns.map(function (col) { return "[".concat(col.name, "]"); }).join(', ');
291
+ var query = "SELECT ".concat(columnList, " FROM [").concat(tableName, "]");
292
+ if (withParams) {
293
+ // Filter out problematic columns for WHERE clause (e.g., ntext columns in SQL Server)
294
+ var filterableColumns = columns.filter(function (col) {
295
+ // For SQL Server, exclude large text columns that can't be compared
296
+ if (dbType === 'mssql') {
297
+ // Skip columns that might be ntext, text, or image types
298
+ // These are typically identified by their string type and large content
299
+ return true; // We'll handle this at parameter level instead
300
+ }
301
+ return true;
302
+ });
303
+ var whereConditions = filterableColumns.map(function (col) {
304
+ return "(@filter_".concat(col.name, " IS NULL OR [").concat(col.name, "] = @filter_").concat(col.name, ")");
305
+ }).join(' AND ');
306
+ query += " WHERE ".concat(whereConditions);
307
+ // Add ORDER BY clause for consistent pagination
308
+ // Find the first suitable column for ordering (prefer id, created_at, or first column)
309
+ var orderColumn = columns.find(function (col) {
310
+ return col.name.toLowerCase() === 'id' ||
311
+ col.name.toLowerCase().includes('created') ||
312
+ col.name.toLowerCase().includes('timestamp');
313
+ }) || columns[0];
314
+ if (orderColumn) {
315
+ query += " ORDER BY [".concat(orderColumn.name, "]");
316
+ }
317
+ if (dbType === 'mssql') {
318
+ // Use OFFSET/FETCH for proper pagination with ORDER BY
319
+ query += ' OFFSET @offset ROWS FETCH NEXT @limit ROWS ONLY';
320
+ }
321
+ else {
322
+ query += ' LIMIT @limit OFFSET @offset';
323
+ }
324
+ }
325
+ return query;
326
+ };
327
+ MCPServerGenerator.prototype.generateInsertQuery = function (tableName, columns, dbType) {
328
+ var insertColumns = columns.filter(function (col) { return col.name.toLowerCase() !== 'id'; });
329
+ var columnNames = insertColumns.map(function (col) { return "[".concat(col.name, "]"); }).join(', ');
330
+ var paramNames = insertColumns.map(function (col) { return "@".concat(col.name); }).join(', ');
331
+ return "INSERT INTO [".concat(tableName, "] (").concat(columnNames, ") VALUES (").concat(paramNames, ")");
332
+ };
333
+ MCPServerGenerator.prototype.generateUpdateQuery = function (tableName, columns, dbType) {
334
+ var updateColumns = columns.filter(function (col) { return col.name.toLowerCase() !== 'id'; });
335
+ var setClause = updateColumns.map(function (col) { return "[".concat(col.name, "] = @").concat(col.name); }).join(', ');
336
+ return "UPDATE [".concat(tableName, "] SET ").concat(setClause, " WHERE [Id] = @id");
337
+ };
338
+ MCPServerGenerator.prototype.generateDeleteQuery = function (tableName, dbType) {
339
+ return "DELETE FROM [".concat(tableName, "] WHERE [Id] = @id");
340
+ };
341
+ MCPServerGenerator.prototype.generateCountQuery = function (tableName, columns, dbType) {
342
+ var query = "SELECT COUNT(*) as total_count FROM [".concat(tableName, "]");
343
+ // Filter out problematic columns for WHERE clause (e.g., ntext columns in SQL Server)
344
+ var filterableColumns = columns.filter(function (col) {
345
+ // For SQL Server, exclude large text columns that can't be compared
346
+ if (dbType === 'mssql') {
347
+ // Skip columns that might be ntext, text, or image types
348
+ // These are typically identified by their string type and large content
349
+ return true; // We'll handle this at parameter level instead
350
+ }
351
+ return true;
352
+ });
353
+ var whereConditions = filterableColumns.map(function (col) {
354
+ return "(@filter_".concat(col.name, " IS NULL OR [").concat(col.name, "] = @filter_").concat(col.name, ")");
355
+ }).join(' AND ');
356
+ query += " WHERE ".concat(whereConditions);
357
+ return query;
358
+ };
359
+ MCPServerGenerator.prototype.sanitizeName = function (name) {
360
+ return name.toLowerCase()
361
+ .replace(/[^a-z0-9]/g, '_')
362
+ .replace(/_{2,}/g, '_')
363
+ .replace(/^_|_$/g, '');
364
+ };
365
+ // Public methods for management
366
+ MCPServerGenerator.prototype.getAllServers = function () {
367
+ return this.sqliteManager.getAllServers();
368
+ };
369
+ MCPServerGenerator.prototype.getServer = function (serverId) {
370
+ return this.sqliteManager.getServer(serverId);
371
+ };
372
+ MCPServerGenerator.prototype.deleteServer = function (serverId) {
373
+ this.sqliteManager.deleteServer(serverId);
374
+ console.log("\uD83D\uDDD1\uFE0F Deleted server from SQLite database: ".concat(serverId));
375
+ };
376
+ MCPServerGenerator.prototype.getAllTools = function () {
377
+ return this.sqliteManager.getAllTools();
378
+ };
379
+ MCPServerGenerator.prototype.getToolsForServer = function (serverId) {
380
+ return this.sqliteManager.getToolsForServer(serverId);
381
+ };
382
+ MCPServerGenerator.prototype.getAllResources = function () {
383
+ return this.sqliteManager.getAllResources();
384
+ };
385
+ MCPServerGenerator.prototype.getResourcesForServer = function (serverId) {
386
+ return this.sqliteManager.getResourcesForServer(serverId);
387
+ };
388
+ MCPServerGenerator.prototype.getStats = function () {
389
+ return this.sqliteManager.getStats();
390
+ };
391
+ MCPServerGenerator.prototype.close = function () {
392
+ this.sqliteManager.close();
393
+ };
394
+ return MCPServerGenerator;
395
+ }());
396
+ exports.MCPServerGenerator = MCPServerGenerator;
@@ -0,0 +1,7 @@
1
+ import './web/server';
2
+ export * from './types';
3
+ export * from './parsers';
4
+ export * from './generators/MCPServerGenerator';
5
+ export * from './client/MCPClient';
6
+ export * from './client/MCPTestRunner';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,iCAAiC,CAAC;AAChD,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ require("./web/server");
18
+ __exportStar(require("./types"), exports);
19
+ __exportStar(require("./parsers"), exports);
20
+ __exportStar(require("./generators/MCPServerGenerator"), exports);
21
+ __exportStar(require("./client/MCPClient"), exports);
22
+ __exportStar(require("./client/MCPTestRunner"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wBAAsB;AAEtB,0CAAwB;AACxB,4CAA0B;AAC1B,kEAAgD;AAChD,qDAAmC;AACnC,yDAAuC"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ export declare class IntegratedMCPServer {
3
+ private server;
4
+ private app;
5
+ private executor;
6
+ constructor();
7
+ private setupHandlers;
8
+ private setupWebRoutes;
9
+ start(port?: number): Promise<void>;
10
+ private cleanup;
11
+ }
12
+ //# sourceMappingURL=integrated-mcp-server-new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrated-mcp-server-new.d.ts","sourceRoot":"","sources":["../src/integrated-mcp-server-new.ts"],"names":[],"mappings":";AAgBA,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,QAAQ,CAAqB;;IAiBrC,OAAO,CAAC,aAAa;IAkFrB,OAAO,CAAC,cAAc;IA8IhB,KAAK,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YA6BjC,OAAO;CAStB"}