@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.
- package/README.md +553 -0
- package/dist/client/MCPClient.d.ts +24 -0
- package/dist/client/MCPClient.d.ts.map +1 -0
- package/dist/client/MCPClient.js +211 -0
- package/dist/client/MCPClient.js.map +1 -0
- package/dist/client/MCPClientUnified.d.ts +31 -0
- package/dist/client/MCPClientUnified.d.ts.map +1 -0
- package/dist/client/MCPClientUnified.js +275 -0
- package/dist/client/MCPClientUnified.js.map +1 -0
- package/dist/client/MCPTestRunner.d.ts +44 -0
- package/dist/client/MCPTestRunner.d.ts.map +1 -0
- package/dist/client/MCPTestRunner.js +220 -0
- package/dist/client/MCPTestRunner.js.map +1 -0
- package/dist/client/MCPTestRunnerUnified.d.ts +48 -0
- package/dist/client/MCPTestRunnerUnified.d.ts.map +1 -0
- package/dist/client/MCPTestRunnerUnified.js +183 -0
- package/dist/client/MCPTestRunnerUnified.js.map +1 -0
- package/dist/database/json-manager.d.ts +55 -0
- package/dist/database/json-manager.d.ts.map +1 -0
- package/dist/database/json-manager.js +128 -0
- package/dist/database/json-manager.js.map +1 -0
- package/dist/database/sqlite-manager.d.ts +53 -0
- package/dist/database/sqlite-manager.d.ts.map +1 -0
- package/dist/database/sqlite-manager.js +193 -0
- package/dist/database/sqlite-manager.js.map +1 -0
- package/dist/dynamic-mcp-executor.d.ts +14 -0
- package/dist/dynamic-mcp-executor.d.ts.map +1 -0
- package/dist/dynamic-mcp-executor.js +274 -0
- package/dist/dynamic-mcp-executor.js.map +1 -0
- package/dist/generators/MCPServerGenerator-new.d.ts +37 -0
- package/dist/generators/MCPServerGenerator-new.d.ts.map +1 -0
- package/dist/generators/MCPServerGenerator-new.js +287 -0
- package/dist/generators/MCPServerGenerator-new.js.map +1 -0
- package/dist/generators/MCPServerGenerator.d.ts +42 -0
- package/dist/generators/MCPServerGenerator.d.ts.map +1 -0
- package/dist/generators/MCPServerGenerator.js +494 -0
- package/dist/generators/MCPServerGenerator.js.map +1 -0
- package/dist/generators/database/sqlite-manager.d.ts +52 -0
- package/dist/generators/database/sqlite-manager.js +143 -0
- package/dist/generators/generators/MCPServerGenerator.d.ts +37 -0
- package/dist/generators/generators/MCPServerGenerator.js +396 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/integrated-mcp-server-new.d.ts +12 -0
- package/dist/integrated-mcp-server-new.d.ts.map +1 -0
- package/dist/integrated-mcp-server-new.js +253 -0
- package/dist/integrated-mcp-server-new.js.map +1 -0
- package/dist/integrated-mcp-server.d.ts +25 -0
- package/dist/integrated-mcp-server.d.ts.map +1 -0
- package/dist/integrated-mcp-server.js +541 -0
- package/dist/integrated-mcp-server.js.map +1 -0
- package/dist/mcp-inspector-server.d.ts +3 -0
- package/dist/mcp-inspector-server.d.ts.map +1 -0
- package/dist/mcp-inspector-server.js +119 -0
- package/dist/mcp-inspector-server.js.map +1 -0
- package/dist/mcp-sdk-server.d.ts +3 -0
- package/dist/mcp-sdk-server.d.ts.map +1 -0
- package/dist/mcp-sdk-server.js +90 -0
- package/dist/mcp-sdk-server.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +300 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/parsers/CsvParser.d.ts +7 -0
- package/dist/parsers/CsvParser.d.ts.map +1 -0
- package/dist/parsers/CsvParser.js +98 -0
- package/dist/parsers/CsvParser.js.map +1 -0
- package/dist/parsers/DatabaseParser.d.ts +18 -0
- package/dist/parsers/DatabaseParser.d.ts.map +1 -0
- package/dist/parsers/DatabaseParser.js +372 -0
- package/dist/parsers/DatabaseParser.js.map +1 -0
- package/dist/parsers/ExcelParser.d.ts +8 -0
- package/dist/parsers/ExcelParser.d.ts.map +1 -0
- package/dist/parsers/ExcelParser.js +119 -0
- package/dist/parsers/ExcelParser.js.map +1 -0
- package/dist/parsers/index.d.ts +13 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +88 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/parsers/ExcelParser.js +118 -0
- package/dist/parsers/types/index.js +2 -0
- package/dist/quickmcp-unified-bridge.d.ts +13 -0
- package/dist/quickmcp-unified-bridge.d.ts.map +1 -0
- package/dist/quickmcp-unified-bridge.js +176 -0
- package/dist/quickmcp-unified-bridge.js.map +1 -0
- package/dist/server/ServerManager.d.ts +37 -0
- package/dist/server/ServerManager.d.ts.map +1 -0
- package/dist/server/ServerManager.js +376 -0
- package/dist/server/ServerManager.js.map +1 -0
- package/dist/sqlite-manager.js +145 -0
- package/dist/start-new-server.d.ts +3 -0
- package/dist/start-new-server.d.ts.map +1 -0
- package/dist/start-new-server.js +10 -0
- package/dist/start-new-server.js.map +1 -0
- package/dist/test-app.d.ts +2 -0
- package/dist/test-app.d.ts.map +1 -0
- package/dist/test-app.js +119 -0
- package/dist/test-app.js.map +1 -0
- package/dist/test-new-architecture.d.ts +3 -0
- package/dist/test-new-architecture.d.ts.map +1 -0
- package/dist/test-new-architecture.js +72 -0
- package/dist/test-new-architecture.js.map +1 -0
- package/dist/transport/base-transport.d.ts +21 -0
- package/dist/transport/base-transport.d.ts.map +1 -0
- package/dist/transport/base-transport.js +16 -0
- package/dist/transport/base-transport.js.map +1 -0
- package/dist/transport/index.d.ts +10 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +12 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/sse-transport.d.ts +13 -0
- package/dist/transport/sse-transport.d.ts.map +1 -0
- package/dist/transport/sse-transport.js +106 -0
- package/dist/transport/sse-transport.js.map +1 -0
- package/dist/transport/stdio-transport.d.ts +8 -0
- package/dist/transport/stdio-transport.d.ts.map +1 -0
- package/dist/transport/stdio-transport.js +53 -0
- package/dist/transport/stdio-transport.js.map +1 -0
- package/dist/transport/streamable-http-transport.d.ts +15 -0
- package/dist/transport/streamable-http-transport.d.ts.map +1 -0
- package/dist/transport/streamable-http-transport.js +151 -0
- package/dist/transport/streamable-http-transport.js.map +1 -0
- package/dist/types/index.d.ts +64 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/web/client/MCPClient.js +348 -0
- package/dist/web/client/MCPTestRunner.js +317 -0
- package/dist/web/database/json-manager.js +124 -0
- package/dist/web/database/sqlite-manager.js +146 -0
- package/dist/web/dynamic-mcp-executor.js +443 -0
- package/dist/web/generators/MCPServerGenerator-new.js +284 -0
- package/dist/web/generators/MCPServerGenerator.js +566 -0
- package/dist/web/integrated-mcp-server-new.js +394 -0
- package/dist/web/parsers/CsvParser.js +144 -0
- package/dist/web/parsers/DatabaseParser.js +637 -0
- package/dist/web/parsers/ExcelParser.js +180 -0
- package/dist/web/parsers/index.js +152 -0
- package/dist/web/server.d.ts +3 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +790 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/types/index.js +2 -0
- package/dist/web/web/server.js +860 -0
- package/package.json +68 -0
- package/quickmcp-direct-stdio.js +328 -0
- package/src/web/public/app.js +1795 -0
- package/src/web/public/database-tables.html +711 -0
- package/src/web/public/how-to-use.html +571 -0
- package/src/web/public/how-to-use.js +255 -0
- package/src/web/public/images/1-claude-quickmcp-stdio.png +0 -0
- package/src/web/public/images/2-claude-tools.png +0 -0
- package/src/web/public/images/3-claude-developer-settings.png +0 -0
- package/src/web/public/images/4-claude-config.png +0 -0
- package/src/web/public/images/5-claude-config-edit.png +0 -0
- package/src/web/public/index.html +626 -0
- package/src/web/public/manage-servers.html +198 -0
- package/src/web/public/modern-styles.css +946 -0
- package/src/web/public/shared-styles.css +2091 -0
- package/src/web/public/shared.js +93 -0
- 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;
|