[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"

Open 💬 4 comments Opened Jul 15, 2026 by biancabujoreanu

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

  1. Fully reset app state, relaunch, sign in.
  2. Settings → Extensions renders correctly (empty). ✅
  3. Install any local .mcpb via Advanced settings → Install Extension. Install succeeds; the MCP server itself launches and works in chat.
  4. Quit, relaunch, open Settings → Extensions.
  5. "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.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗