@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,317 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ 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);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ 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;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.MCPTestRunner = void 0;
40
+ var MCPClient_1 = require("./MCPClient");
41
+ var MCPTestRunner = /** @class */ (function () {
42
+ function MCPTestRunner() {
43
+ this.client = new MCPClient_1.MCPClient();
44
+ }
45
+ MCPTestRunner.prototype.runTestSuite = function (serverPath, testSuite) {
46
+ return __awaiter(this, void 0, void 0, function () {
47
+ var startTime, results, _i, _a, testCase, result, duration, passedTests, failedTests;
48
+ return __generator(this, function (_b) {
49
+ switch (_b.label) {
50
+ case 0:
51
+ startTime = Date.now();
52
+ results = [];
53
+ _b.label = 1;
54
+ case 1:
55
+ _b.trys.push([1, , 7, 9]);
56
+ return [4 /*yield*/, this.client.connect(serverPath)];
57
+ case 2:
58
+ _b.sent();
59
+ _i = 0, _a = testSuite.tests;
60
+ _b.label = 3;
61
+ case 3:
62
+ if (!(_i < _a.length)) return [3 /*break*/, 6];
63
+ testCase = _a[_i];
64
+ return [4 /*yield*/, this.runTestCase(testCase)];
65
+ case 4:
66
+ result = _b.sent();
67
+ results.push(result);
68
+ _b.label = 5;
69
+ case 5:
70
+ _i++;
71
+ return [3 /*break*/, 3];
72
+ case 6: return [3 /*break*/, 9];
73
+ case 7: return [4 /*yield*/, this.client.disconnect()];
74
+ case 8:
75
+ _b.sent();
76
+ return [7 /*endfinally*/];
77
+ case 9:
78
+ duration = Date.now() - startTime;
79
+ passedTests = results.filter(function (r) { return r.passed; }).length;
80
+ failedTests = results.length - passedTests;
81
+ return [2 /*return*/, {
82
+ testSuite: testSuite,
83
+ results: results,
84
+ totalTests: results.length,
85
+ passedTests: passedTests,
86
+ failedTests: failedTests,
87
+ duration: duration
88
+ }];
89
+ }
90
+ });
91
+ });
92
+ };
93
+ MCPTestRunner.prototype.runTestCase = function (testCase) {
94
+ return __awaiter(this, void 0, void 0, function () {
95
+ var startTime, response, duration, passed, error_1, duration;
96
+ return __generator(this, function (_a) {
97
+ switch (_a.label) {
98
+ case 0:
99
+ startTime = Date.now();
100
+ _a.label = 1;
101
+ case 1:
102
+ _a.trys.push([1, 3, , 4]);
103
+ return [4 /*yield*/, this.client.testRequest(testCase.request)];
104
+ case 2:
105
+ response = _a.sent();
106
+ duration = Date.now() - startTime;
107
+ passed = this.evaluateTestResult(testCase, response);
108
+ return [2 /*return*/, {
109
+ testCase: testCase,
110
+ response: response,
111
+ passed: passed,
112
+ duration: duration
113
+ }];
114
+ case 3:
115
+ error_1 = _a.sent();
116
+ duration = Date.now() - startTime;
117
+ return [2 /*return*/, {
118
+ testCase: testCase,
119
+ response: {
120
+ success: false,
121
+ error: error_1 instanceof Error ? error_1.message : 'Unknown error'
122
+ },
123
+ passed: false,
124
+ duration: duration,
125
+ error: error_1 instanceof Error ? error_1.message : 'Unknown error'
126
+ }];
127
+ case 4: return [2 /*return*/];
128
+ }
129
+ });
130
+ });
131
+ };
132
+ MCPTestRunner.prototype.generateTestSuite = function (serverPath, suiteName) {
133
+ return __awaiter(this, void 0, void 0, function () {
134
+ var tools, resources, prompts, tests, _i, tools_1, tool, _a, resources_1, resource, _b, prompts_1, prompt_1;
135
+ return __generator(this, function (_c) {
136
+ switch (_c.label) {
137
+ case 0: return [4 /*yield*/, this.client.connect(serverPath)];
138
+ case 1:
139
+ _c.sent();
140
+ _c.label = 2;
141
+ case 2:
142
+ _c.trys.push([2, , 6, 8]);
143
+ return [4 /*yield*/, this.client.listTools()];
144
+ case 3:
145
+ tools = _c.sent();
146
+ return [4 /*yield*/, this.client.listResources()];
147
+ case 4:
148
+ resources = _c.sent();
149
+ return [4 /*yield*/, this.client.listPrompts()];
150
+ case 5:
151
+ prompts = _c.sent();
152
+ tests = [];
153
+ // Generate tool tests
154
+ for (_i = 0, tools_1 = tools; _i < tools_1.length; _i++) {
155
+ tool = tools_1[_i];
156
+ tests.push({
157
+ name: "Test tool: ".concat(tool.name),
158
+ description: "Test the ".concat(tool.name, " tool with sample parameters"),
159
+ request: {
160
+ serverId: suiteName,
161
+ method: 'tool',
162
+ name: tool.name,
163
+ params: this.generateSampleParams(tool.inputSchema)
164
+ },
165
+ expectedSuccess: true
166
+ });
167
+ }
168
+ // Generate resource tests
169
+ for (_a = 0, resources_1 = resources; _a < resources_1.length; _a++) {
170
+ resource = resources_1[_a];
171
+ tests.push({
172
+ name: "Test resource: ".concat(resource.name),
173
+ description: "Test reading the ".concat(resource.name, " resource"),
174
+ request: {
175
+ serverId: suiteName,
176
+ method: 'resource',
177
+ name: resource.uri,
178
+ },
179
+ expectedSuccess: true
180
+ });
181
+ }
182
+ // Generate prompt tests
183
+ for (_b = 0, prompts_1 = prompts; _b < prompts_1.length; _b++) {
184
+ prompt_1 = prompts_1[_b];
185
+ tests.push({
186
+ name: "Test prompt: ".concat(prompt_1.name),
187
+ description: "Test the ".concat(prompt_1.name, " prompt with sample arguments"),
188
+ request: {
189
+ serverId: suiteName,
190
+ method: 'prompt',
191
+ name: prompt_1.name,
192
+ params: this.generateSamplePromptArgs(prompt_1.arguments)
193
+ },
194
+ expectedSuccess: true
195
+ });
196
+ }
197
+ return [2 /*return*/, {
198
+ name: suiteName,
199
+ description: "Auto-generated test suite for ".concat(suiteName, " MCP server"),
200
+ tests: tests
201
+ }];
202
+ case 6: return [4 /*yield*/, this.client.disconnect()];
203
+ case 7:
204
+ _c.sent();
205
+ return [7 /*endfinally*/];
206
+ case 8: return [2 /*return*/];
207
+ }
208
+ });
209
+ });
210
+ };
211
+ MCPTestRunner.prototype.evaluateTestResult = function (testCase, response) {
212
+ // Check expected success
213
+ if (testCase.expectedSuccess !== undefined && response.success !== testCase.expectedSuccess) {
214
+ return false;
215
+ }
216
+ // Check expected data contains
217
+ if (testCase.expectedDataContains && response.data) {
218
+ return this.dataContains(response.data, testCase.expectedDataContains);
219
+ }
220
+ // Default: test passes if no error occurred
221
+ return response.success;
222
+ };
223
+ MCPTestRunner.prototype.dataContains = function (actual, expected) {
224
+ if (typeof expected === 'string') {
225
+ return JSON.stringify(actual).includes(expected);
226
+ }
227
+ if (typeof expected === 'object' && expected !== null) {
228
+ for (var _i = 0, _a = Object.entries(expected); _i < _a.length; _i++) {
229
+ var _b = _a[_i], key = _b[0], value = _b[1];
230
+ if (!(key in actual) || !this.dataContains(actual[key], value)) {
231
+ return false;
232
+ }
233
+ }
234
+ return true;
235
+ }
236
+ return actual === expected;
237
+ };
238
+ MCPTestRunner.prototype.generateSampleParams = function (schema) {
239
+ if (!schema || !schema.properties) {
240
+ return {};
241
+ }
242
+ var params = {};
243
+ for (var _i = 0, _a = Object.entries(schema.properties); _i < _a.length; _i++) {
244
+ var _b = _a[_i], key = _b[0], prop = _b[1];
245
+ params[key] = this.generateSampleValue(prop);
246
+ }
247
+ return params;
248
+ };
249
+ MCPTestRunner.prototype.generateSamplePromptArgs = function (argumentsSchema) {
250
+ var args = {};
251
+ for (var _i = 0, _a = argumentsSchema || []; _i < _a.length; _i++) {
252
+ var arg = _a[_i];
253
+ if (arg.name) {
254
+ args[arg.name] = this.generateSampleValueFromDescription(arg.description);
255
+ }
256
+ }
257
+ return args;
258
+ };
259
+ MCPTestRunner.prototype.generateSampleValue = function (schema) {
260
+ var _a, _b;
261
+ switch (schema.type) {
262
+ case 'string':
263
+ return ((_a = schema.description) === null || _a === void 0 ? void 0 : _a.includes('query')) ? 'test query' :
264
+ ((_b = schema.description) === null || _b === void 0 ? void 0 : _b.includes('name')) ? 'sample name' :
265
+ 'sample string';
266
+ case 'number':
267
+ case 'integer':
268
+ return schema.default !== undefined ? schema.default : 10;
269
+ case 'boolean':
270
+ return schema.default !== undefined ? schema.default : true;
271
+ case 'array':
272
+ return [];
273
+ case 'object':
274
+ return {};
275
+ default:
276
+ return 'sample value';
277
+ }
278
+ };
279
+ MCPTestRunner.prototype.generateSampleValueFromDescription = function (description) {
280
+ if (!description)
281
+ return 'sample value';
282
+ var lower = description.toLowerCase();
283
+ if (lower.includes('query') || lower.includes('search'))
284
+ return 'test query';
285
+ if (lower.includes('name'))
286
+ return 'sample name';
287
+ if (lower.includes('focus'))
288
+ return 'data patterns';
289
+ if (lower.includes('number') || lower.includes('count'))
290
+ return 10;
291
+ if (lower.includes('boolean') || lower.includes('flag'))
292
+ return true;
293
+ return 'sample value';
294
+ };
295
+ MCPTestRunner.prototype.formatTestResults = function (result) {
296
+ var output = "\n=== Test Suite: ".concat(result.testSuite.name, " ===\n");
297
+ output += "Description: ".concat(result.testSuite.description, "\n");
298
+ output += "Duration: ".concat(result.duration, "ms\n");
299
+ output += "Results: ".concat(result.passedTests, "/").concat(result.totalTests, " tests passed\n\n");
300
+ for (var _i = 0, _a = result.results; _i < _a.length; _i++) {
301
+ var testResult = _a[_i];
302
+ var status_1 = testResult.passed ? '✅ PASS' : '❌ FAIL';
303
+ output += "".concat(status_1, " ").concat(testResult.testCase.name, " (").concat(testResult.duration, "ms)\n");
304
+ if (!testResult.passed) {
305
+ output += " Error: ".concat(testResult.error || testResult.response.error || 'Test assertion failed', "\n");
306
+ }
307
+ if (testResult.response.data) {
308
+ var dataPreview = JSON.stringify(testResult.response.data, null, 2).slice(0, 200);
309
+ output += " Response: ".concat(dataPreview).concat(dataPreview.length >= 200 ? '...' : '', "\n");
310
+ }
311
+ output += '\n';
312
+ }
313
+ return output;
314
+ };
315
+ return MCPTestRunner;
316
+ }());
317
+ exports.MCPTestRunner = MCPTestRunner;
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JSONManager = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ class JSONManager {
7
+ constructor() {
8
+ // Create database directory if it doesn't exist
9
+ const dbDir = path_1.default.join(process.cwd(), 'data');
10
+ if (!fs_1.default.existsSync(dbDir)) {
11
+ fs_1.default.mkdirSync(dbDir, { recursive: true });
12
+ }
13
+ this.dbPath = path_1.default.join(dbDir, 'quickmcp.json');
14
+ this.loadData();
15
+ console.error('✅ JSON database initialized:', this.dbPath);
16
+ }
17
+ loadData() {
18
+ if (fs_1.default.existsSync(this.dbPath)) {
19
+ try {
20
+ const jsonData = fs_1.default.readFileSync(this.dbPath, 'utf8');
21
+ this.data = JSON.parse(jsonData);
22
+ }
23
+ catch (error) {
24
+ console.error('❌ Error loading JSON database:', error);
25
+ this.initializeEmptyData();
26
+ }
27
+ }
28
+ else {
29
+ this.initializeEmptyData();
30
+ }
31
+ }
32
+ initializeEmptyData() {
33
+ this.data = {
34
+ servers: [],
35
+ tools: [],
36
+ resources: []
37
+ };
38
+ this.saveData();
39
+ }
40
+ saveData() {
41
+ try {
42
+ fs_1.default.writeFileSync(this.dbPath, JSON.stringify(this.data, null, 2));
43
+ }
44
+ catch (error) {
45
+ console.error('❌ Error saving JSON database:', error);
46
+ throw error;
47
+ }
48
+ }
49
+ // Server operations
50
+ saveServer(server) {
51
+ const existingIndex = this.data.servers.findIndex(s => s.id === server.id);
52
+ if (existingIndex >= 0) {
53
+ this.data.servers[existingIndex] = server;
54
+ }
55
+ else {
56
+ this.data.servers.push(server);
57
+ }
58
+ this.saveData();
59
+ }
60
+ getServer(serverId) {
61
+ return this.data.servers.find(s => s.id === serverId) || null;
62
+ }
63
+ getAllServers() {
64
+ return [...this.data.servers].sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
65
+ }
66
+ deleteServer(serverId) {
67
+ this.data.servers = this.data.servers.filter(s => s.id !== serverId);
68
+ this.data.tools = this.data.tools.filter(t => t.server_id !== serverId);
69
+ this.data.resources = this.data.resources.filter(r => r.server_id !== serverId);
70
+ this.saveData();
71
+ }
72
+ // Tool operations
73
+ saveTools(tools) {
74
+ for (const tool of tools) {
75
+ const existingIndex = this.data.tools.findIndex(t => t.server_id === tool.server_id && t.name === tool.name);
76
+ if (existingIndex >= 0) {
77
+ this.data.tools[existingIndex] = tool;
78
+ }
79
+ else {
80
+ this.data.tools.push(tool);
81
+ }
82
+ }
83
+ this.saveData();
84
+ }
85
+ getToolsForServer(serverId) {
86
+ return this.data.tools.filter(t => t.server_id === serverId);
87
+ }
88
+ getAllTools() {
89
+ return [...this.data.tools];
90
+ }
91
+ // Resource operations
92
+ saveResources(resources) {
93
+ for (const resource of resources) {
94
+ const existingIndex = this.data.resources.findIndex(r => r.server_id === resource.server_id && r.name === resource.name);
95
+ if (existingIndex >= 0) {
96
+ this.data.resources[existingIndex] = resource;
97
+ }
98
+ else {
99
+ this.data.resources.push(resource);
100
+ }
101
+ }
102
+ this.saveData();
103
+ }
104
+ getResourcesForServer(serverId) {
105
+ return this.data.resources.filter(r => r.server_id === serverId);
106
+ }
107
+ getAllResources() {
108
+ return [...this.data.resources];
109
+ }
110
+ // Cleanup
111
+ close() {
112
+ // JSON manager doesn't need cleanup
113
+ console.error('📁 JSON manager closed');
114
+ }
115
+ // Statistics
116
+ getStats() {
117
+ return {
118
+ servers: this.data.servers.length,
119
+ tools: this.data.tools.length,
120
+ resources: this.data.resources.length
121
+ };
122
+ }
123
+ }
124
+ exports.JSONManager = JSONManager;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SQLiteManager = void 0;
7
+ var better_sqlite3_1 = __importDefault(require("better-sqlite3"));
8
+ var path_1 = __importDefault(require("path"));
9
+ var fs_1 = __importDefault(require("fs"));
10
+ var SQLiteManager = /** @class */ (function () {
11
+ function SQLiteManager() {
12
+ // Create database directory if it doesn't exist
13
+ var dbDir = path_1.default.join(process.cwd(), 'data');
14
+ if (!fs_1.default.existsSync(dbDir)) {
15
+ fs_1.default.mkdirSync(dbDir, { recursive: true });
16
+ }
17
+ this.dbPath = path_1.default.join(dbDir, 'quickmcp.sqlite');
18
+ this.db = new better_sqlite3_1.default(this.dbPath);
19
+ this.initializeTables();
20
+ }
21
+ SQLiteManager.prototype.initializeTables = function () {
22
+ // Servers table
23
+ 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 ");
24
+ // Tools table
25
+ 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 ");
26
+ // Resources table
27
+ 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 ");
28
+ console.error('✅ SQLite database initialized:', this.dbPath);
29
+ };
30
+ // Server operations
31
+ SQLiteManager.prototype.saveServer = function (server) {
32
+ var stmt = this.db.prepare("\n INSERT OR REPLACE INTO servers (id, name, db_config, created_at, updated_at)\n VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)\n ");
33
+ stmt.run(server.id, server.name, JSON.stringify(server.dbConfig), server.createdAt);
34
+ };
35
+ SQLiteManager.prototype.getServer = function (serverId) {
36
+ var stmt = this.db.prepare('SELECT * FROM servers WHERE id = ?');
37
+ var row = stmt.get(serverId);
38
+ if (!row)
39
+ return null;
40
+ return {
41
+ id: row.id,
42
+ name: row.name,
43
+ dbConfig: JSON.parse(row.db_config),
44
+ createdAt: row.created_at
45
+ };
46
+ };
47
+ SQLiteManager.prototype.getAllServers = function () {
48
+ var stmt = this.db.prepare('SELECT * FROM servers ORDER BY created_at DESC');
49
+ var rows = stmt.all();
50
+ return rows.map(function (row) { return ({
51
+ id: row.id,
52
+ name: row.name,
53
+ dbConfig: JSON.parse(row.db_config),
54
+ createdAt: row.created_at
55
+ }); });
56
+ };
57
+ SQLiteManager.prototype.deleteServer = function (serverId) {
58
+ var stmt = this.db.prepare('DELETE FROM servers WHERE id = ?');
59
+ stmt.run(serverId);
60
+ };
61
+ // Tool operations
62
+ SQLiteManager.prototype.saveTools = function (tools) {
63
+ var stmt = this.db.prepare("\n INSERT OR REPLACE INTO tools (server_id, name, description, input_schema, sql_query, operation)\n VALUES (?, ?, ?, ?, ?, ?)\n ");
64
+ var transaction = this.db.transaction(function (tools) {
65
+ for (var _i = 0, tools_1 = tools; _i < tools_1.length; _i++) {
66
+ var tool = tools_1[_i];
67
+ stmt.run(tool.server_id, tool.name, tool.description, JSON.stringify(tool.inputSchema), tool.sqlQuery, tool.operation);
68
+ }
69
+ });
70
+ transaction(tools);
71
+ };
72
+ SQLiteManager.prototype.getToolsForServer = function (serverId) {
73
+ var stmt = this.db.prepare('SELECT * FROM tools WHERE server_id = ?');
74
+ var rows = stmt.all(serverId);
75
+ return rows.map(function (row) { return ({
76
+ server_id: row.server_id,
77
+ name: row.name,
78
+ description: row.description,
79
+ inputSchema: JSON.parse(row.input_schema),
80
+ sqlQuery: row.sql_query,
81
+ operation: row.operation
82
+ }); });
83
+ };
84
+ SQLiteManager.prototype.getAllTools = function () {
85
+ var stmt = this.db.prepare('SELECT * FROM tools ORDER BY server_id, name');
86
+ var rows = stmt.all();
87
+ return rows.map(function (row) { return ({
88
+ server_id: row.server_id,
89
+ name: row.name,
90
+ description: row.description,
91
+ inputSchema: JSON.parse(row.input_schema),
92
+ sqlQuery: row.sql_query,
93
+ operation: row.operation
94
+ }); });
95
+ };
96
+ // Resource operations
97
+ SQLiteManager.prototype.saveResources = function (resources) {
98
+ var stmt = this.db.prepare("\n INSERT OR REPLACE INTO resources (server_id, name, description, uri_template, sql_query)\n VALUES (?, ?, ?, ?, ?)\n ");
99
+ var transaction = this.db.transaction(function (resources) {
100
+ for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {
101
+ var resource = resources_1[_i];
102
+ stmt.run(resource.server_id, resource.name, resource.description, resource.uri_template, resource.sqlQuery);
103
+ }
104
+ });
105
+ transaction(resources);
106
+ };
107
+ SQLiteManager.prototype.getResourcesForServer = function (serverId) {
108
+ var stmt = this.db.prepare('SELECT * FROM resources WHERE server_id = ?');
109
+ var rows = stmt.all(serverId);
110
+ return rows.map(function (row) { return ({
111
+ server_id: row.server_id,
112
+ name: row.name,
113
+ description: row.description,
114
+ uri_template: row.uri_template,
115
+ sqlQuery: row.sql_query
116
+ }); });
117
+ };
118
+ SQLiteManager.prototype.getAllResources = function () {
119
+ var stmt = this.db.prepare('SELECT * FROM resources ORDER BY server_id, name');
120
+ var rows = stmt.all();
121
+ return rows.map(function (row) { return ({
122
+ server_id: row.server_id,
123
+ name: row.name,
124
+ description: row.description,
125
+ uri_template: row.uri_template,
126
+ sqlQuery: row.sql_query
127
+ }); });
128
+ };
129
+ // Cleanup
130
+ SQLiteManager.prototype.close = function () {
131
+ this.db.close();
132
+ };
133
+ // Statistics
134
+ SQLiteManager.prototype.getStats = function () {
135
+ var serversCount = this.db.prepare('SELECT COUNT(*) as count FROM servers').get();
136
+ var toolsCount = this.db.prepare('SELECT COUNT(*) as count FROM tools').get();
137
+ var resourcesCount = this.db.prepare('SELECT COUNT(*) as count FROM resources').get();
138
+ return {
139
+ servers: serversCount.count,
140
+ tools: toolsCount.count,
141
+ resources: resourcesCount.count
142
+ };
143
+ };
144
+ return SQLiteManager;
145
+ }());
146
+ exports.SQLiteManager = SQLiteManager;