Skip to content

Commit 0366f28

Browse files
web-flowcoderloom
andcommitted
Improvements and optimizations
Co-Authored-By: coderloom <noreply@coderloom.com>
1 parent 2d15eb5 commit 0366f28

2 files changed

Lines changed: 60 additions & 9 deletions

File tree

src/server/database.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,26 @@ export const generatedServersDb = {
306306
files: JSON.parse(row.files),
307307
};
308308
},
309+
310+
update: (id: string, server: { name: string; path: string; files: string[] }) => {
311+
const stmt = db.prepare(`
312+
UPDATE generated_servers
313+
SET name = ?, path = ?, files = ?
314+
WHERE id = ?
315+
`);
316+
317+
return stmt.run(
318+
server.name,
319+
server.path,
320+
JSON.stringify(server.files),
321+
id
322+
);
323+
},
324+
325+
deleteByServerId: (serverId: string) => {
326+
const stmt = db.prepare('DELETE FROM generated_servers WHERE mcp_server_id = ?');
327+
return stmt.run(serverId);
328+
},
309329
};
310330

311331
export default db;

src/server/routes/mcpServers.ts

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,24 @@ router.post('/:id/generate', async (req, res) => {
240240
});
241241
}
242242

243+
// Check if server already generated
244+
const existingGenerated = generatedServersDb.findByServerId(req.params.id);
245+
246+
// If already generated, regenerate (idempotent operation)
247+
if (existingGenerated) {
248+
console.log(`[${server.name}] Server already generated, regenerating...`);
249+
250+
// Delete existing generated files
251+
const fs = await import('fs/promises');
252+
try {
253+
await fs.rm(existingGenerated.path, { recursive: true, force: true });
254+
console.log(`[${server.name}] Deleted existing generated files at ${existingGenerated.path}`);
255+
} catch (fsError: any) {
256+
console.error(`[${server.name}] Failed to delete existing files:`, fsError.message);
257+
// Continue with regeneration even if deletion fails
258+
}
259+
}
260+
243261
// Generate server
244262
const outputDir = path.join(__dirname, '../../../generated-servers');
245263
const result = await generator.generate({
@@ -266,14 +284,25 @@ router.post('/:id/generate', async (req, res) => {
266284
transport: 'stdio', // Always use STDIO transport
267285
});
268286

269-
// Save generated server info
270-
generatedServersDb.create({
271-
id: result.id,
272-
mcpServerId: server.id,
273-
name: result.name,
274-
path: result.path,
275-
files: result.files,
276-
});
287+
// Save or update generated server info (idempotent)
288+
if (existingGenerated) {
289+
// Update existing record
290+
console.log(`[${server.name}] Updating generated server record`);
291+
generatedServersDb.update(existingGenerated.id, {
292+
name: result.name,
293+
path: result.path,
294+
files: result.files,
295+
});
296+
} else {
297+
// Create new record
298+
generatedServersDb.create({
299+
id: result.id,
300+
mcpServerId: server.id,
301+
name: result.name,
302+
path: result.path,
303+
files: result.files,
304+
});
305+
}
277306

278307
// Update server status
279308
mcpServersDb.update(req.params.id, {
@@ -284,7 +313,9 @@ router.post('/:id/generate', async (req, res) => {
284313
res.json({
285314
success: true,
286315
data: result,
287-
message: 'MCP server generated successfully',
316+
message: existingGenerated
317+
? 'MCP server regenerated successfully (idempotent operation)'
318+
: 'MCP server generated successfully',
288319
});
289320
} catch (error: any) {
290321
console.error('Generation error:', error);

0 commit comments

Comments
 (0)