@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,376 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ServerManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs/promises"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const child_process_1 = require("child_process");
|
|
40
|
+
class ServerManager {
|
|
41
|
+
constructor(baseDir = './generated-servers') {
|
|
42
|
+
this.servers = new Map();
|
|
43
|
+
this.serverDir = path.resolve(baseDir);
|
|
44
|
+
}
|
|
45
|
+
async initialize() {
|
|
46
|
+
await fs.mkdir(this.serverDir, { recursive: true });
|
|
47
|
+
await this.loadExistingServers();
|
|
48
|
+
}
|
|
49
|
+
async createServer(config, parsedData, serverCode, packageJson) {
|
|
50
|
+
const serverId = this.generateServerId(config.name);
|
|
51
|
+
const serverPath = path.join(this.serverDir, serverId);
|
|
52
|
+
// Create server directory
|
|
53
|
+
await fs.mkdir(serverPath, { recursive: true });
|
|
54
|
+
// Write server files
|
|
55
|
+
await fs.writeFile(path.join(serverPath, 'index.ts'), serverCode);
|
|
56
|
+
await fs.writeFile(path.join(serverPath, 'package.json'), packageJson);
|
|
57
|
+
await fs.writeFile(path.join(serverPath, 'data.json'), JSON.stringify(parsedData, null, 2));
|
|
58
|
+
// Create TypeScript config
|
|
59
|
+
const tsConfig = {
|
|
60
|
+
compilerOptions: {
|
|
61
|
+
target: "ES2020",
|
|
62
|
+
module: "commonjs",
|
|
63
|
+
outDir: "./dist",
|
|
64
|
+
rootDir: "./",
|
|
65
|
+
strict: true,
|
|
66
|
+
esModuleInterop: true,
|
|
67
|
+
skipLibCheck: true,
|
|
68
|
+
forceConsistentCasingInFileNames: true
|
|
69
|
+
},
|
|
70
|
+
include: ["*.ts"],
|
|
71
|
+
exclude: ["node_modules", "dist"]
|
|
72
|
+
};
|
|
73
|
+
await fs.writeFile(path.join(serverPath, 'tsconfig.json'), JSON.stringify(tsConfig, null, 2));
|
|
74
|
+
// Create server instance
|
|
75
|
+
const instance = {
|
|
76
|
+
id: serverId,
|
|
77
|
+
config,
|
|
78
|
+
serverPath: path.join(serverPath, 'index.ts'),
|
|
79
|
+
status: 'stopped',
|
|
80
|
+
createdAt: new Date()
|
|
81
|
+
};
|
|
82
|
+
this.servers.set(serverId, instance);
|
|
83
|
+
await this.saveServerMetadata(instance);
|
|
84
|
+
return instance;
|
|
85
|
+
}
|
|
86
|
+
async buildServer(serverId) {
|
|
87
|
+
const instance = this.servers.get(serverId);
|
|
88
|
+
if (!instance) {
|
|
89
|
+
throw new Error(`Server ${serverId} not found`);
|
|
90
|
+
}
|
|
91
|
+
const serverDir = path.dirname(instance.serverPath);
|
|
92
|
+
// Install dependencies
|
|
93
|
+
await this.runCommand('npm', ['install'], serverDir);
|
|
94
|
+
// Build TypeScript
|
|
95
|
+
await this.runCommand('npx', ['tsc'], serverDir);
|
|
96
|
+
}
|
|
97
|
+
async startServer(serverId, port) {
|
|
98
|
+
const instance = this.servers.get(serverId);
|
|
99
|
+
if (!instance) {
|
|
100
|
+
throw new Error(`Server ${serverId} not found`);
|
|
101
|
+
}
|
|
102
|
+
if (instance.status === 'running') {
|
|
103
|
+
throw new Error(`Server ${serverId} is already running`);
|
|
104
|
+
}
|
|
105
|
+
const serverDir = path.dirname(instance.serverPath);
|
|
106
|
+
const distPath = path.join(serverDir, 'dist', 'index.js');
|
|
107
|
+
// Check if server is built
|
|
108
|
+
try {
|
|
109
|
+
await fs.access(distPath);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
await this.buildServer(serverId);
|
|
113
|
+
}
|
|
114
|
+
instance.status = 'starting';
|
|
115
|
+
instance.lastStarted = new Date();
|
|
116
|
+
try {
|
|
117
|
+
const childProcess = (0, child_process_1.spawn)('node', [distPath], {
|
|
118
|
+
cwd: serverDir,
|
|
119
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
120
|
+
env: {
|
|
121
|
+
...process.env,
|
|
122
|
+
PORT: port?.toString() || '0'
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
childProcess.on('error', (error) => {
|
|
126
|
+
instance.status = 'error';
|
|
127
|
+
instance.lastError = error.message;
|
|
128
|
+
});
|
|
129
|
+
childProcess.on('exit', (code) => {
|
|
130
|
+
instance.status = 'stopped';
|
|
131
|
+
if (code !== 0) {
|
|
132
|
+
instance.lastError = `Process exited with code ${code}`;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
// Give the process a moment to start
|
|
136
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
137
|
+
if (childProcess.killed) {
|
|
138
|
+
throw new Error('Server failed to start');
|
|
139
|
+
}
|
|
140
|
+
instance.process = childProcess;
|
|
141
|
+
instance.status = 'running';
|
|
142
|
+
instance.port = port;
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
instance.status = 'error';
|
|
146
|
+
instance.lastError = error instanceof Error ? error.message : 'Unknown error';
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async stopServer(serverId) {
|
|
151
|
+
const instance = this.servers.get(serverId);
|
|
152
|
+
if (!instance) {
|
|
153
|
+
throw new Error(`Server ${serverId} not found`);
|
|
154
|
+
}
|
|
155
|
+
if (instance.process) {
|
|
156
|
+
instance.process.kill('SIGTERM');
|
|
157
|
+
// Wait for graceful shutdown
|
|
158
|
+
await new Promise(resolve => {
|
|
159
|
+
setTimeout(() => {
|
|
160
|
+
if (instance.process && !instance.process.killed) {
|
|
161
|
+
instance.process.kill('SIGKILL');
|
|
162
|
+
}
|
|
163
|
+
resolve(void 0);
|
|
164
|
+
}, 5000);
|
|
165
|
+
});
|
|
166
|
+
instance.process = undefined;
|
|
167
|
+
}
|
|
168
|
+
instance.status = 'stopped';
|
|
169
|
+
instance.port = undefined;
|
|
170
|
+
}
|
|
171
|
+
async restartServer(serverId) {
|
|
172
|
+
await this.stopServer(serverId);
|
|
173
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
174
|
+
await this.startServer(serverId);
|
|
175
|
+
}
|
|
176
|
+
async deleteServer(serverId) {
|
|
177
|
+
const instance = this.servers.get(serverId);
|
|
178
|
+
if (!instance) {
|
|
179
|
+
throw new Error(`Server ${serverId} not found`);
|
|
180
|
+
}
|
|
181
|
+
// Stop server if running
|
|
182
|
+
if (instance.status === 'running') {
|
|
183
|
+
await this.stopServer(serverId);
|
|
184
|
+
}
|
|
185
|
+
// Remove server directory
|
|
186
|
+
const serverDir = path.dirname(instance.serverPath);
|
|
187
|
+
await fs.rm(serverDir, { recursive: true, force: true });
|
|
188
|
+
// Remove from memory
|
|
189
|
+
this.servers.delete(serverId);
|
|
190
|
+
}
|
|
191
|
+
async exportServer(serverId) {
|
|
192
|
+
const instance = this.servers.get(serverId);
|
|
193
|
+
if (!instance) {
|
|
194
|
+
throw new Error(`Server ${serverId} not found`);
|
|
195
|
+
}
|
|
196
|
+
const serverDir = path.dirname(instance.serverPath);
|
|
197
|
+
const exportPath = path.join(this.serverDir, `${serverId}-export.zip`);
|
|
198
|
+
// In a real implementation, you'd create a proper zip file
|
|
199
|
+
// For now, we'll just copy the directory structure
|
|
200
|
+
const exportDir = path.join(this.serverDir, `${serverId}-export`);
|
|
201
|
+
await fs.mkdir(exportDir, { recursive: true });
|
|
202
|
+
// Copy server files
|
|
203
|
+
const files = await fs.readdir(serverDir);
|
|
204
|
+
for (const file of files) {
|
|
205
|
+
if (file !== 'node_modules' && file !== 'dist') {
|
|
206
|
+
const srcPath = path.join(serverDir, file);
|
|
207
|
+
const destPath = path.join(exportDir, file);
|
|
208
|
+
const stats = await fs.stat(srcPath);
|
|
209
|
+
if (stats.isDirectory()) {
|
|
210
|
+
await this.copyDirectory(srcPath, destPath);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
await fs.copyFile(srcPath, destPath);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Add README
|
|
218
|
+
const readme = this.generateReadme(instance);
|
|
219
|
+
await fs.writeFile(path.join(exportDir, 'README.md'), readme);
|
|
220
|
+
return exportDir;
|
|
221
|
+
}
|
|
222
|
+
getServerInstance(serverId) {
|
|
223
|
+
return this.servers.get(serverId);
|
|
224
|
+
}
|
|
225
|
+
getAllServers() {
|
|
226
|
+
return Array.from(this.servers.values());
|
|
227
|
+
}
|
|
228
|
+
getRunningServers() {
|
|
229
|
+
return this.getAllServers().filter(server => server.status === 'running');
|
|
230
|
+
}
|
|
231
|
+
async updateServerConfig(serverId, newConfig) {
|
|
232
|
+
const instance = this.servers.get(serverId);
|
|
233
|
+
if (!instance) {
|
|
234
|
+
throw new Error(`Server ${serverId} not found`);
|
|
235
|
+
}
|
|
236
|
+
// Update config
|
|
237
|
+
instance.config = { ...instance.config, ...newConfig };
|
|
238
|
+
// Save metadata
|
|
239
|
+
await this.saveServerMetadata(instance);
|
|
240
|
+
}
|
|
241
|
+
async loadExistingServers() {
|
|
242
|
+
try {
|
|
243
|
+
const entries = await fs.readdir(this.serverDir, { withFileTypes: true });
|
|
244
|
+
for (const entry of entries) {
|
|
245
|
+
if (entry.isDirectory()) {
|
|
246
|
+
try {
|
|
247
|
+
const metadataPath = path.join(this.serverDir, entry.name, 'metadata.json');
|
|
248
|
+
const metadataStr = await fs.readFile(metadataPath, 'utf-8');
|
|
249
|
+
const metadata = JSON.parse(metadataStr);
|
|
250
|
+
const instance = {
|
|
251
|
+
...metadata,
|
|
252
|
+
createdAt: new Date(metadata.createdAt),
|
|
253
|
+
lastStarted: metadata.lastStarted ? new Date(metadata.lastStarted) : undefined,
|
|
254
|
+
status: 'stopped',
|
|
255
|
+
process: undefined
|
|
256
|
+
};
|
|
257
|
+
this.servers.set(instance.id, instance);
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
console.warn(`Failed to load server metadata for ${entry.name}:`, error);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
// Directory doesn't exist yet, that's fine
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async saveServerMetadata(instance) {
|
|
270
|
+
const serverDir = path.dirname(instance.serverPath);
|
|
271
|
+
const metadataPath = path.join(serverDir, 'metadata.json');
|
|
272
|
+
const metadata = {
|
|
273
|
+
id: instance.id,
|
|
274
|
+
config: instance.config,
|
|
275
|
+
serverPath: instance.serverPath,
|
|
276
|
+
status: instance.status,
|
|
277
|
+
port: instance.port,
|
|
278
|
+
lastError: instance.lastError,
|
|
279
|
+
createdAt: instance.createdAt.toISOString(),
|
|
280
|
+
lastStarted: instance.lastStarted?.toISOString()
|
|
281
|
+
};
|
|
282
|
+
await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2));
|
|
283
|
+
}
|
|
284
|
+
generateServerId(name) {
|
|
285
|
+
const cleanName = name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
286
|
+
const timestamp = Date.now().toString(36);
|
|
287
|
+
return `${cleanName}-${timestamp}`;
|
|
288
|
+
}
|
|
289
|
+
async runCommand(command, args, cwd) {
|
|
290
|
+
return new Promise((resolve, reject) => {
|
|
291
|
+
const process = (0, child_process_1.spawn)(command, args, { cwd, stdio: 'pipe' });
|
|
292
|
+
let stdout = '';
|
|
293
|
+
let stderr = '';
|
|
294
|
+
process.stdout?.on('data', (data) => {
|
|
295
|
+
stdout += data.toString();
|
|
296
|
+
});
|
|
297
|
+
process.stderr?.on('data', (data) => {
|
|
298
|
+
stderr += data.toString();
|
|
299
|
+
});
|
|
300
|
+
process.on('close', (code) => {
|
|
301
|
+
if (code === 0) {
|
|
302
|
+
resolve();
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
reject(new Error(`Command failed with code ${code}: ${stderr}`));
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
process.on('error', reject);
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
async copyDirectory(src, dest) {
|
|
312
|
+
await fs.mkdir(dest, { recursive: true });
|
|
313
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
314
|
+
for (const entry of entries) {
|
|
315
|
+
const srcPath = path.join(src, entry.name);
|
|
316
|
+
const destPath = path.join(dest, entry.name);
|
|
317
|
+
if (entry.isDirectory()) {
|
|
318
|
+
await this.copyDirectory(srcPath, destPath);
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
await fs.copyFile(srcPath, destPath);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
generateReadme(instance) {
|
|
326
|
+
return `# ${instance.config.name}
|
|
327
|
+
|
|
328
|
+
${instance.config.description}
|
|
329
|
+
|
|
330
|
+
## Installation
|
|
331
|
+
|
|
332
|
+
1. Install dependencies:
|
|
333
|
+
\`\`\`bash
|
|
334
|
+
npm install
|
|
335
|
+
\`\`\`
|
|
336
|
+
|
|
337
|
+
2. Build the server:
|
|
338
|
+
\`\`\`bash
|
|
339
|
+
npm run build
|
|
340
|
+
\`\`\`
|
|
341
|
+
|
|
342
|
+
3. Start the server:
|
|
343
|
+
\`\`\`bash
|
|
344
|
+
npm start
|
|
345
|
+
\`\`\`
|
|
346
|
+
|
|
347
|
+
## Configuration
|
|
348
|
+
|
|
349
|
+
This MCP server provides the following capabilities:
|
|
350
|
+
|
|
351
|
+
- **Tools**: ${instance.config.tools.length} available tools
|
|
352
|
+
- **Resources**: ${instance.config.resources.length} available resources
|
|
353
|
+
- **Prompts**: ${instance.config.prompts.length} available prompts
|
|
354
|
+
|
|
355
|
+
## Usage
|
|
356
|
+
|
|
357
|
+
This server implements the Model Context Protocol (MCP) and can be used with any MCP-compatible client.
|
|
358
|
+
|
|
359
|
+
### Tools
|
|
360
|
+
|
|
361
|
+
${instance.config.tools.map(tool => `- **${tool.name}**: ${tool.description}`).join('\n')}
|
|
362
|
+
|
|
363
|
+
### Resources
|
|
364
|
+
|
|
365
|
+
${instance.config.resources.map(resource => `- **${resource.name}**: ${resource.description}`).join('\n')}
|
|
366
|
+
|
|
367
|
+
### Prompts
|
|
368
|
+
|
|
369
|
+
${instance.config.prompts.map(prompt => `- **${prompt.name}**: ${prompt.description}`).join('\n')}
|
|
370
|
+
|
|
371
|
+
Generated with MCP Server Generator - ${new Date().toISOString()}
|
|
372
|
+
`;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
exports.ServerManager = ServerManager;
|
|
376
|
+
//# sourceMappingURL=ServerManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerManager.js","sourceRoot":"","sources":["../../src/server/ServerManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
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
|
+
};
|
|
29
|
+
// Server operations
|
|
30
|
+
SQLiteManager.prototype.saveServer = function (server) {
|
|
31
|
+
var stmt = this.db.prepare("\n INSERT OR REPLACE INTO servers (id, name, db_config, created_at, updated_at)\n VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)\n ");
|
|
32
|
+
stmt.run(server.id, server.name, JSON.stringify(server.dbConfig), server.createdAt);
|
|
33
|
+
};
|
|
34
|
+
SQLiteManager.prototype.getServer = function (serverId) {
|
|
35
|
+
var stmt = this.db.prepare('SELECT * FROM servers WHERE id = ?');
|
|
36
|
+
var row = stmt.get(serverId);
|
|
37
|
+
if (!row)
|
|
38
|
+
return null;
|
|
39
|
+
return {
|
|
40
|
+
id: row.id,
|
|
41
|
+
name: row.name,
|
|
42
|
+
dbConfig: JSON.parse(row.db_config),
|
|
43
|
+
createdAt: row.created_at
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
SQLiteManager.prototype.getAllServers = function () {
|
|
47
|
+
var stmt = this.db.prepare('SELECT * FROM servers ORDER BY created_at DESC');
|
|
48
|
+
var rows = stmt.all();
|
|
49
|
+
return rows.map(function (row) { return ({
|
|
50
|
+
id: row.id,
|
|
51
|
+
name: row.name,
|
|
52
|
+
dbConfig: JSON.parse(row.db_config),
|
|
53
|
+
createdAt: row.created_at
|
|
54
|
+
}); });
|
|
55
|
+
};
|
|
56
|
+
SQLiteManager.prototype.deleteServer = function (serverId) {
|
|
57
|
+
var stmt = this.db.prepare('DELETE FROM servers WHERE id = ?');
|
|
58
|
+
stmt.run(serverId);
|
|
59
|
+
};
|
|
60
|
+
// Tool operations
|
|
61
|
+
SQLiteManager.prototype.saveTools = function (tools) {
|
|
62
|
+
var stmt = this.db.prepare("\n INSERT OR REPLACE INTO tools (server_id, name, description, input_schema, sql_query, operation)\n VALUES (?, ?, ?, ?, ?, ?)\n ");
|
|
63
|
+
var transaction = this.db.transaction(function (tools) {
|
|
64
|
+
for (var _i = 0, tools_1 = tools; _i < tools_1.length; _i++) {
|
|
65
|
+
var tool = tools_1[_i];
|
|
66
|
+
stmt.run(tool.server_id, tool.name, tool.description, JSON.stringify(tool.inputSchema), tool.sqlQuery, tool.operation);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
transaction(tools);
|
|
70
|
+
};
|
|
71
|
+
SQLiteManager.prototype.getToolsForServer = function (serverId) {
|
|
72
|
+
var stmt = this.db.prepare('SELECT * FROM tools WHERE server_id = ?');
|
|
73
|
+
var rows = stmt.all(serverId);
|
|
74
|
+
return rows.map(function (row) { return ({
|
|
75
|
+
server_id: row.server_id,
|
|
76
|
+
name: row.name,
|
|
77
|
+
description: row.description,
|
|
78
|
+
inputSchema: JSON.parse(row.input_schema),
|
|
79
|
+
sqlQuery: row.sql_query,
|
|
80
|
+
operation: row.operation
|
|
81
|
+
}); });
|
|
82
|
+
};
|
|
83
|
+
SQLiteManager.prototype.getAllTools = function () {
|
|
84
|
+
var stmt = this.db.prepare('SELECT * FROM tools ORDER BY server_id, name');
|
|
85
|
+
var rows = stmt.all();
|
|
86
|
+
return rows.map(function (row) { return ({
|
|
87
|
+
server_id: row.server_id,
|
|
88
|
+
name: row.name,
|
|
89
|
+
description: row.description,
|
|
90
|
+
inputSchema: JSON.parse(row.input_schema),
|
|
91
|
+
sqlQuery: row.sql_query,
|
|
92
|
+
operation: row.operation
|
|
93
|
+
}); });
|
|
94
|
+
};
|
|
95
|
+
// Resource operations
|
|
96
|
+
SQLiteManager.prototype.saveResources = function (resources) {
|
|
97
|
+
var stmt = this.db.prepare("\n INSERT OR REPLACE INTO resources (server_id, name, description, uri_template, sql_query)\n VALUES (?, ?, ?, ?, ?)\n ");
|
|
98
|
+
var transaction = this.db.transaction(function (resources) {
|
|
99
|
+
for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {
|
|
100
|
+
var resource = resources_1[_i];
|
|
101
|
+
stmt.run(resource.server_id, resource.name, resource.description, resource.uri_template, resource.sqlQuery);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
transaction(resources);
|
|
105
|
+
};
|
|
106
|
+
SQLiteManager.prototype.getResourcesForServer = function (serverId) {
|
|
107
|
+
var stmt = this.db.prepare('SELECT * FROM resources WHERE server_id = ?');
|
|
108
|
+
var rows = stmt.all(serverId);
|
|
109
|
+
return rows.map(function (row) { return ({
|
|
110
|
+
server_id: row.server_id,
|
|
111
|
+
name: row.name,
|
|
112
|
+
description: row.description,
|
|
113
|
+
uri_template: row.uri_template,
|
|
114
|
+
sqlQuery: row.sql_query
|
|
115
|
+
}); });
|
|
116
|
+
};
|
|
117
|
+
SQLiteManager.prototype.getAllResources = function () {
|
|
118
|
+
var stmt = this.db.prepare('SELECT * FROM resources ORDER BY server_id, name');
|
|
119
|
+
var rows = stmt.all();
|
|
120
|
+
return rows.map(function (row) { return ({
|
|
121
|
+
server_id: row.server_id,
|
|
122
|
+
name: row.name,
|
|
123
|
+
description: row.description,
|
|
124
|
+
uri_template: row.uri_template,
|
|
125
|
+
sqlQuery: row.sql_query
|
|
126
|
+
}); });
|
|
127
|
+
};
|
|
128
|
+
// Cleanup
|
|
129
|
+
SQLiteManager.prototype.close = function () {
|
|
130
|
+
this.db.close();
|
|
131
|
+
};
|
|
132
|
+
// Statistics
|
|
133
|
+
SQLiteManager.prototype.getStats = function () {
|
|
134
|
+
var serversCount = this.db.prepare('SELECT COUNT(*) as count FROM servers').get();
|
|
135
|
+
var toolsCount = this.db.prepare('SELECT COUNT(*) as count FROM tools').get();
|
|
136
|
+
var resourcesCount = this.db.prepare('SELECT COUNT(*) as count FROM resources').get();
|
|
137
|
+
return {
|
|
138
|
+
servers: serversCount.count,
|
|
139
|
+
tools: toolsCount.count,
|
|
140
|
+
resources: resourcesCount.count
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
return SQLiteManager;
|
|
144
|
+
}());
|
|
145
|
+
exports.SQLiteManager = SQLiteManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-new-server.d.ts","sourceRoot":"","sources":["../src/start-new-server.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const integrated_mcp_server_new_1 = require("./integrated-mcp-server-new");
|
|
5
|
+
async function startServer() {
|
|
6
|
+
const server = new integrated_mcp_server_new_1.IntegratedMCPServer();
|
|
7
|
+
await server.start(3001);
|
|
8
|
+
}
|
|
9
|
+
startServer().catch(console.error);
|
|
10
|
+
//# sourceMappingURL=start-new-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-new-server.js","sourceRoot":"","sources":["../src/start-new-server.ts"],"names":[],"mappings":";;;AAEA,2EAAkE;AAElE,KAAK,UAAU,WAAW;IACxB,MAAM,MAAM,GAAG,IAAI,+CAAmB,EAAE,CAAC;IACzC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-app.d.ts","sourceRoot":"","sources":["../src/test-app.ts"],"names":[],"mappings":""}
|