[BUG] Claude Desktop 1.21459.0 (macOS): Extensions settings pane fails to load when any .mcpb extension is installed — TypeError: u._parse is not a function (dual zod v3/v4)
Environment
- Claude Desktop: 1.21459.0 (macOS, auto-updated 2026-07-14 ~06:11 local; binary +
app.asarmtimes confirm) - OS: macOS (Darwin 25.5.0, Apple Silicon)
- Extension: any locally-installed
.mcpb(reproduced with two different bundles,manifest_version: "0.3",server.type: "binary", unsigned,source: local)
Summary
After today's Desktop auto-update, the Settings → Extensions pane fails to load whenever at least one extension is installed. The extension itself installs and runs fine (files extracted, can_install: true, MCP server launches and answers tools/list) — only the management UI is dead, which makes it look like the install failed and leaves no way to manage extensions from the UI.
The same .mcpb files (including one that had been installed unchanged for days) rendered fine in the pane before the app update. With zero extensions installed, the pane loads.
Renderer error (claude.ai-web.log)
2026-07-14 21:24:50 [error] Uncaught (in promise) Error: Error invoking remote method
'$eipc_message$_..._$_claude.settings_$_Extensions_$_getInstalledExtensionsWithState':
TypeError: u._parse is not a function
Fires on every Extensions-pane load / post-install refresh. Never appears in logs prior to the 1.21459.0 update; appears on every install afterward, including a re-install of a months-old bundle.
Root cause (from the shipped bundle)
In app.asar → .vite/build/index.chunk-Bm6k9gCR.js, the installed-extension-state schema embeds the MCPB manifest schema across two different bundled copies of zod:
// app's own zod copy (v3-style: shape members get ._parse called)
AOt = Ue({
settings: kze,
path: be(),
displayName: be(),
signatureInfo: $Ot().optional(),
manifest: $ze, // <-- foreign schema
id: be()
});
// $ze is @anthropic-ai/mcpb's McpbManifestSchema, built with a DIFFERENT zod copy
$ze = Ose; // ...{ McpbManifestSchema: Ose } ...
Ose = Je([UB, jB, BB, HB]) // union of manifest v0.1/0.2/0.3/0.4 schemas
The chunk contains both zod v3 internals (_parse method definitions) and zod v4 internals (_zod core markers, ~493 occurrences). The result validator for the IPC method is:
CLt(e){ return AOt.safeParse(e).success }
// wrapper: if(!(Array.isArray(i) && i.every(s => CLt(s)))) throw ...
AOt (zod v3 object) walking its shape calls manifest._parse(...) on McpbManifestSchema — a zod-v4 schema with no _parse → TypeError: u._parse is not a function, thrown inside the main-process handler, surfaced to the renderer as "Error invoking remote method", and the pane never gets its data.
Because manifest is a required key present for every installed extension, any installed extension with any manifest triggers this. An empty extensions list short-circuits .every, which is why the pane only works when nothing is installed. Likely regression vector: @anthropic-ai/mcpb (or the schema module) moved to zod v4 while the app code embedding McpbManifestSchema inside its own z.object still runs zod v3.
Repro
- Claude Desktop 1.21459.0 on macOS, no extensions installed → Settings → Extensions loads fine.
- Install any local
.mcpb(double-click). Install reports success inmain.log; extension server launches and servestools/list. - Open Settings → Extensions → pane fails to load; renderer log shows the
u._parseerror ongetInstalledExtensionsWithState. - Remove
~/Library/Application Support/Claude/extensions-installations.json+Claude Extensions/→ pane loads again. Reinstall → broken again. Fully deterministic.
Impact
- Extensions management UI is unusable for anyone on 1.21459.0 with ≥1 installed extension; installs appear to fail (they don't — servers run fine).
- No UI path to configure/disable/uninstall extensions; users are hand-editing app-support JSON to recover.
- As an extension publisher (Vibrai), every customer who takes today's Desktop update hits this against our published, previously-working
.mcpb.
This issue has 9 comments on GitHub. Read the full discussion on GitHub ↗