@@ -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