{"record":{"id":"403a3555a0478e98","repo":"mastra-ai/mastra","slug":"no-post-processor-found-for-registry-registry-na","errorCode":null,"errorMessage":"No post-processor found for registry ${registry.name}","messagePattern":"No post-processor found for registry (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/mcp-registry-registry/src/registry/fetch-servers.ts","lineNumber":37,"sourceCode":"\n    console.info(`Fetching servers from ${registry.name} at ${registry.servers_url}`);\n\n    // Fetch the servers from the registry's servers_url\n    const response = await fetch(registry.servers_url);\n\n    if (!response.ok) {\n      throw new Error(`Failed to fetch servers from ${registry.servers_url}: ${response.statusText}`);\n    }\n\n    const data = (await response.json()) as unknown;\n\n    // If the registry has a custom post-processing function, use it\n    if (registry.postProcessServers) {\n      console.info(`Using custom post-processor for ${registry.name}`);\n      return registry.postProcessServers(data);\n    }\n\n    throw new Error(`No post-processor found for registry ${registry.name}`);\n  } catch (error) {\n    console.error('Error fetching servers:', error);\n    throw error;\n  }\n}\n\n/**\n * Filters server entries based on provided criteria\n */\nexport function filterServers(\n  servers: ServerEntry[],\n  filters: {\n    tag?: string;\n    search?: string;\n  },\n): ServerEntry[] {\n  let filteredServers = [...servers];\n","sourceCodeStart":19,"sourceCodeEnd":55,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/mcp-registry-registry/src/registry/fetch-servers.ts#L19-L55","documentation":"Each MCP registry can declare a custom `postProcessServers` function that converts the raw JSON payload into the standard server list format. If a registry has neither a custom post-processor nor a built-in one matching its format, the library cannot interpret the fetched data and throws.","triggerScenarios":"fetchServersFromRegistry fetches data successfully (response.ok, JSON parsed), the registry has no `postProcessServers`, and no default parser matches the registry — thrown at the end of the try block.","commonSituations":"Using a custom/self-hosted registry whose response shape doesn't match a known format; forgetting to attach postProcessServers when defining a custom registry; registry API changed its response schema so the default parser path no longer applies.","solutions":["Provide a `postProcessServers` function on the registry definition that maps your payload to the expected server format","Verify the registry response shape matches the format expected by built-in parsers","Log/inspect the fetched JSON (`data`) to write the correct post-processor","Fall back to a registry with a known/supported format"],"exampleFix":"// before\nconst registry = { name: 'custom', servers_url: 'https://internal/api/servers' };\n// after\nconst registry = {\n  name: 'custom',\n  servers_url: 'https://internal/api/servers',\n  postProcessServers: (data) => data.servers.map(s => ({ id: s.name, url: s.endpoint }))\n};","handlingStrategy":"validation","validationCode":"if (!registry.postProcessServers && !isKnownRegistryFormat(registry)) {\n  throw new Error(`Registry \"${registry.name}\" needs a postProcessServers function`);\n}","typeGuard":null,"tryCatchPattern":"try {\n  const servers = await registryManager.fetchServersFromRegistry({ registryId });\n} catch (err) {\n  if (err instanceof Error && err.message.startsWith('No post-processor found')) {\n    // attach a postProcessServers to the registry definition and retry\n  } else throw err;\n}","preventionTips":["Always provide postProcessServers for custom/self-hosted registries","Validate the registry JSON response shape against the expected schema before mapping","Pin registry API versions; watch for upstream response-format changes","Test post-processors with a recorded sample payload"],"tags":["configuration","mcp","data-mapping"],"backgroundTag":"missing-processor-configuration","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}