[BUG] Claude Desktop (macOS): Extensions settings panel permanently stuck on "Loading extensions..." when any local .mcpb is installed — IPC handler throws "TypeError: u._parse is not a function"
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
On Claude Desktop 1.21459.0 (macOS), the Settings → Extensions panel hangs forever on "Loading extensions..." whenever any locally-installed .mcpb extension is present. With zero extensions installed, the panel renders fine. Installing any local .mcpb (reproduced with both a Node-runtime and a UV/Python-runtime extension) breaks it again.
The underlying error surfaced when attempting to add Claude in Chrome from the panel:
Error invoking remote method '$eipc_message$_7e1d0999-1d7f-4b41-a6c4-a0f6f7b779d2_$_claude.settings_$_Extensions_$_getInstalledExtensionsWithState': TypeError: u._parse is not a function
The main-process IPC handler for getInstalledExtensionsWithState throws, the renderer never receives a reply, and it silently retries on a ~35-second cycle forever. The ._parse signature suggests a Zod v3/v4 schema-internals mismatch in the handler's validation path.
Evidence:
Main process is healthy — main.log shows the extension pipeline completing successfully, repeating on a ~35s cycle (renderer retry loop):
Successfully fetched blocklist from https://claude.ai/api/organizations/<org>/dxt/blocklist with 0 entries
Organization allowlist enabled: false
Checking 1 extensions via can_install API using stored metadata
can_install check completed: 1 extensions checked: [ { extensionId: '...', canInstall: true } ]
Neither process is busy — sample on both the main process and the settings renderer during the hang shows both main threads parked in mach_msg (>99% of samples). No busy loop, no blocked syscall. The renderer is waiting for an IPC reply that never arrives because the handler throws.
No renderer console errors during the silent hang, apart from accumulating MaxListenersExceededWarning on claude.settings_$_AppPreferences_$_preferencesChanged and claude.web_$_AutoUpdater_$_updaterState (one per retry).
Not machine state — reproduced after a complete state reset (removed ~/Library/Application Support/Claude, cleared defaults, fresh sign-in). Panel works empty, breaks the moment any local extension is installed.
Possibly a staged rollout — a colleague in the same org, same app version, same extension installed, is unaffected. The regression appeared today without an app version change.
Environment: Claude Desktop 1.21459.0, macOS 26.5.2 (25F84), Apple Silicon arm64, Claude for Work org. CCD version 2.1.209.
Impact: any user with a local .mcpb cannot open the Extensions panel — no config, no installs, no toggles. Since the panel is the only UI for user_config (including sensitive Keychain-stored credentials), configuring local extensions is fully blocked.
What Should Happen?
Settings → Extensions should list installed extensions and allow configuration. If the IPC handler throws, the error should surface to the user instead of an infinite "Loading extensions..." spinner with silent retries.
Error Messages/Logs
Error invoking remote method '$eipc_message$_7e1d0999-1d7f-4b41-a6c4-a0f6f7b779d2_$_claude.settings_$_Extensions_$_getInstalledExtensionsWithState': TypeError: u._parse is not a function
--- main.log during the hang (repeats every ~35s, renderer retry loop) ---
2026-07-15 14:07:55 [info] Successfully fetched blocklist from https://claude.ai/api/organizations/<ORG_ID>/dxt/blocklist with 0 entries
2026-07-15 14:07:55 [info] Saved 1 blocklists with 0 entries
2026-07-15 14:07:55 [info] Successfully updated blocklist
2026-07-15 14:07:55 [info] Organization allowlist enabled: false
2026-07-15 14:07:55 [info] Updated allowlist enabled state for org <ORG_ID>: false
2026-07-15 14:07:55 [info] Checking 1 extensions via can_install API using stored metadata
2026-07-15 14:07:55 [info] Sending can_install request to https://claude.ai/api/organizations/<ORG_ID>/dxt/can_install with 1 extensions
2026-07-15 14:07:55 [info] can_install check completed: 1 extensions checked: [ { extensionId: 'local.mcpb.<redacted>', canInstall: true, reason: undefined } ]
--- renderer console warning, accumulating one per retry ---
MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 $eipc_message$_..._claude.web_$_AutoUpdater_$_updaterState_$store$_update listeners added.
at Object.onStateChange (/Applications/Claude.app/Contents/Resources/app.asar/.vite/build/mainView.js:64:31400)
--- process sampling during hang ---
sample of main process (pid 9725): main thread parked in mach_msg 2634/2801 samples — idle
sample of settings renderer (pid 9836): main thread parked in mach_msg 4076/4079 samples — idle
Neither process busy or blocked; renderer waiting on IPC reply that never arrives.
Steps to Reproduce
- Fully reset app state, relaunch, sign in.
- Settings → Extensions renders correctly (empty). ✅
- Install any local
.mcpbvia Advanced settings → Install Extension. Install succeeds; the MCP server itself launches and works in chat. - Quit, relaunch, open Settings → Extensions.
- "Loading extensions..." forever. ❌
Claude Model
Not sure / Multiple models
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.173 (Claude Code)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
This is a Claude Desktop app bug, not Claude Code CLI — the template's CLI fields don't fully apply. Desktop version 1.21459.0, macOS 26.5.2 (25F84), Apple Silicon.
The regression appeared for me today (2026-07-15) after the update,.
The '._parse is not a function' signature is consistent with a Zod v3/v4 schema-internals mismatch in the getInstalledExtensionsWithState handler's validation path.
Related: #77769 (same symptom, filed today, currently tagged invalid, lacks the underlying error).
Full process samples of both the main process and the settings renderer during the hang are available on request.
Showing cached comments. Read the full discussion on GitHub ↗
4 Comments
Why is everything always marked as invalid. Claude Desktop is totally unusable at the current version when you have your own connectors. They just don't work anymore.
Hitting the same issue:
Confirming this bug and adding some datapoints from an independent debugging session today, including a working fix.
Symptom (matches this issue plus the extension detail page): on macOS Desktop 1.21459.0, opening any
.mcpb(including the official hello-world reference example frommodelcontextprotocol/mcpb, packed withnpx @anthropic-ai/mcpb pack) shows the extension detail page with the Install button permanently stuck as a label-less gray pill. The accessibility tree shows the button is literally titled "Loading...". Clicks are inert. Every open of the page logs this in~/Library/Logs/Claude/claude.ai-web.log:What it is NOT (ruled out empirically):
extensions-installations.jsonentirely and restarting does not help; the error fires with no state file present.app.asaron the affected machine is byte-identical (same shasum) to a second Mac running the same 1.21459.0 where the bug does NOT occur, andcodesign -vis clean. Since the affected and unaffected machines are logged into different accounts, this looks like a server-side renderer rollout interacting badly with the 1.21459.0 native side (renderer calls an IPC contract the older main process does not satisfy).Fix that worked: updating the app to 1.21459.1 resolves it immediately. The Install button renders correctly and installs complete end to end (verified with the hello-world reference bundle).
Aggravating factor worth flagging: on the affected machine, macOS App Management (Privacy and Security) was blocking the auto-updater ("'claude' was prevented from modifying apps on your Mac"), so the staged 1.21459.1 sat undownloaded-looking while the app stayed wedged on 1.21459.0 indefinitely. A full quit and relaunch DID apply the staged update even under that block. So for anyone stuck on this: fully quit and reopen Claude; if the version stays at 1.21459.0, grant Claude "App Management" permission in System Settings, then relaunch.
The settings panel just hanging forever once you install even one local extension is a bad experience. You lose the ability to configure or manage anything in that UI.
We’ve been building with the assumption that once people start extending the system with their own tools and servers, the configuration surface needs to stay reliable. Silent hangs like this kill trust fast.
You dealing with extension management friction right now?
https://github.com/keesan12/martin-loop