{"record":{"id":"ff4dd24d0395b06f","repo":"mastra-ai/mastra","slug":"version-with-id-input-id-already-exists-ff4dd2","errorCode":null,"errorMessage":"Version with id ${input.id} already exists","messagePattern":"Version with id (.+?) already exists","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/core/src/storage/domains/mcp-clients/inmemory.ts","lineNumber":180,"sourceCode":"    const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n    return {\n      mcpClients: clonedConfigs.slice(offset, offset + perPage),\n      total: clonedConfigs.length,\n      page,\n      perPage: perPageForResponse,\n      hasMore: offset + perPage < clonedConfigs.length,\n    };\n  }\n\n  // ==========================================================================\n  // MCP Client Version Methods\n  // ==========================================================================\n\n  async createVersion(input: CreateMCPClientVersionInput): Promise<MCPClientVersion> {\n    // Check if version with this ID already exists\n    if (this.db.mcpClientVersions.has(input.id)) {\n      throw new Error(`Version with id ${input.id} already exists`);\n    }\n\n    // Check for duplicate (mcpClientId, versionNumber) pair\n    for (const version of this.db.mcpClientVersions.values()) {\n      if (version.mcpClientId === input.mcpClientId && version.versionNumber === input.versionNumber) {\n        throw new Error(`Version number ${input.versionNumber} already exists for MCP client ${input.mcpClientId}`);\n      }\n    }\n\n    const version: MCPClientVersion = {\n      ...input,\n      createdAt: new Date(),\n    };\n\n    // Deep clone before storing\n    this.db.mcpClientVersions.set(input.id, this.deepCopyVersion(version));\n    return this.deepCopyVersion(version);\n  }","sourceCodeStart":162,"sourceCodeEnd":198,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/core/src/storage/domains/mcp-clients/inmemory.ts#L162-L198","documentation":"`createVersion` in the in-memory MCP clients domain throws this when a version record with the same version id is already present in `mcpClientVersions`. Version ids must be globally unique within storage.","triggerScenarios":"Calling `createVersion({ id, mcpClientId, versionNumber, ... })` where `db.mcpClientVersions.has(input.id)` — a version with that exact id was already created (e.g., re-running seeding, which the SOURCE notes is called by seedAgent).","commonSituations":"Deterministic ids like `${clientId}-v1` regenerated on re-seed; retrying a createVersion call after a timeout; replaying an event/import twice.","solutions":["Generate a fresh unique id (e.g. `randomUUID()`) per version.","Check for the existing version first and reuse/skip it instead of creating.","Clear storage or use a new instance before re-seeding."],"exampleFix":"// before\nawait mcpClients.createVersion({ id: `${clientId}-v1`, mcpClientId: clientId, versionNumber: 1 });\n// after\nawait mcpClients.createVersion({ id: crypto.randomUUID(), mcpClientId: clientId, versionNumber: 1 });","handlingStrategy":"validation","validationCode":"const { versions } = await mcpClients.listVersions(input.mcpClientId, { perPage: false });\nif (versions.some(v => v.id === input.id)) {\n  throw new Error(`Version ${input.id} already exists; skip createVersion`);\n}","typeGuard":null,"tryCatchPattern":"try {\n  await mcpClients.createVersion(input);\n} catch (err) {\n  if (err instanceof Error && /already exists/.test(err.message)) return; // idempotent retry\n  throw err;\n}","preventionTips":["Use randomUUID() for version ids instead of deterministic templates.","Make createVersion calls idempotent by checking first.","Reset storage before re-running seeds or imports."],"tags":["storage","duplicate-id","versioning","mcp-client","in-memory"],"backgroundTag":"duplicate-resource-id","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T08:17:16.595Z"}