{"record":{"id":"f57f67970cd27ab1","repo":"ComposioHQ/composio","slug":"failed-to-parse-mcp-create-response","errorCode":null,"errorMessage":"Failed to parse MCP create response","messagePattern":"Failed to parse MCP create response","errorType":"validation","errorClass":"ValidationError","httpStatus":null,"severity":"error","filePath":"ts/packages/core/src/utils/transformers/mcp.ts","lineNumber":41,"sourceCode":"  McpRetrieveResponse as McpRetrieveResponseRaw,\n} from '@composio/client/resources/mcp';\n\n/**\n * Transform MCP create response from snake_case to camelCase\n */\nexport function transformMcpCreateResponse(\n  response: CustomCreateResponseRaw | McpCreateResponseRaw\n): CustomCreateResponse {\n  const result = CustomCreateResponseSchema.safeParse({\n    id: response.id,\n    name: response.name,\n    createdAt: (response as unknown as Record<string, unknown>).created_at,\n    updatedAt: (response as unknown as Record<string, unknown>).updated_at,\n    status: (response as unknown as Record<string, unknown>).status,\n  });\n\n  if (!result.success) {\n    throw new ValidationError('Failed to parse MCP create response', {\n      cause: result.error,\n    });\n  }\n\n  return result.data;\n}\n\n/**\n * Transform MCP list response from snake_case to camelCase\n */\nexport function transformMcpListResponse(response: McpListResponseRaw): McpListResponse {\n  const transformedItems = response.items?.map(item => ({\n    id: item.id,\n    name: item.name,\n    createdAt: item.created_at,\n    updatedAt: item.updated_at,\n    status: (item as unknown as Record<string, unknown>).status,\n  }));","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/ComposioHQ/composio/blob/64b1b85502b1beeb2379e6c9e8bf1104504fa637/ts/packages/core/src/utils/transformers/mcp.ts#L23-L59","documentation":"transformMcpCreateResponse validates the backend's MCP-server create payload against a Zod schema; if safeParse fails, a ValidationError is thrown with the Zod issues as cause. It signals the API response shape does not match the SDK's expectations — usually a backend/API version mismatch.","triggerScenarios":"Calling composio.mcp.create(...) (or any flow that routes through transformMcpCreateResponse) against a backend that returns unexpected/missing fields such as id, created_at, status, or toolkits.","commonSituations":"SDK version behind or ahead of the deployed backend; proxy stripping fields; using a self-hosted/staging backend URL with a different contract; generated client drift.","solutions":["Upgrade @composio/core to the latest version to realign with the backend contract","Check error.cause (ZodError) to see exactly which fields failed","Verify baseURL points to the intended environment (production vs staging/self-hosted)","Report the Zod issues with the raw response to Composio if versions are current"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { const mcp = await composio.mcp.create(payload); } catch (e) { if (e instanceof ValidationError && /MCP create/.test(e.message)) { console.error('Contract mismatch', e.cause); } throw e; }","preventionTips":["Pin a known-good @composio/core version and upgrade deliberately","Log e.cause ZodError issues for fast diagnosis","Verify backend environment matches SDK version"],"tags":["mcp","validation","zod","api-mismatch"],"backgroundTag":"schema-validation-failed","analyzedSha":"64b1b85502b1beeb2379e6c9e8bf1104504fa637","analyzedAt":"2026-08-28T15:39:33.623Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}