Adobe MCP picker widget not rendering — local plugin shadowed by SDK double-load detector

Resolved 💬 2 comments Opened Apr 30, 2026 by jyunhao914 Closed Apr 30, 2026

Adobe MCP picker widget not rendering — local plugin shadowed by SDK double-load detector

Summary

When using the Adobe for creativity plugin in Claude Code (CLI), calling asset_add_file succeeds at the MCP API layer but the file picker widget never renders in the UI. Tool calls return successfully, but job_status stays pending forever because no user input is ever captured. This makes any Adobe workflow that requires local file ingestion (batch edit, retouch, resize, etc.) completely unusable.

Environment

  • Claude Code: 2.1.123 (also reproduced on 2.1.113)
  • macOS (Apple Silicon)
  • Plugin: adobe-for-creativity v1.0.1 (Marketplace, Anthropic & Partners)
  • Other plugins enabled: design, productivity, cowork-plugin-management

Reproduction

  1. Install adobe-for-creativity plugin from the marketplace
  2. Open Claude Code in a project
  3. Ask Claude to edit a local image (e.g. /adobe-batch-edit-photos)
  4. Claude calls mcp__...__asset_add_file
  5. The tool call returns { job_status: "pending", job_id: "..." }
  6. No picker widget / card appears anywhere in the Claude Code UI
  7. Polling asset_add_file_check_status stays pending indefinitely

Root cause (from logs)

~/Library/Logs/Claude/main.log shows:

[info] Plugin "plugin_016vETfqCKdLzFBgAYofCiNM" has remote MCP servers (Adobe for creativity). Shadowing with no-ops to prevent SDK double-load.
[info] [CCD] Passing 5 plugin(s) to SDK (skills: 1, remote: 4, local: 0)
[info] Making remote MCP tool call: asset_add_file
[info] Remote tool call succeeded: asset_add_file

So the same Adobe MCP server is being registered twice:

  • Local plugin (installed from marketplace) — owns the UI widget handler that should render the file picker
  • SDK-injected (the deferred mcp__<uuid>__* tools) — no UI handler

Claude Code detects the double-load and shadows the local plugin with no-ops. Tool calls then route through the SDK channel (which works for the API), but the picker widget — registered on the shadowed local plugin — never fires.

The shadowing direction looks reversed: the side with UI handlers should win, not the API-only side.

Workarounds attempted (all fail)

  • ❌ Direct asset_initialize_file_upload from local Mac path → returns Forbidden ("The asset is not accessible to the user")
  • ❌ Public URL via Google Drive (drive.google.com, drive.usercontent.google.com) → "URL domain not whitelisted"
  • ❌ Public URL via Cloudflare tunnel (*.trycloudflare.com) → "URL domain not whitelisted"
  • ❌ Restart Claude Code, upgrade to latest version → no effect (shadow still happens)
  • ❌ The asset_add_file() picker (the documented path for local files) → widget never renders

There is no working path for ingesting a local Mac file into Adobe MCP from Claude Code at present.

Suggested fixes

  1. Reverse the shadow direction: when a local plugin and SDK-injected plugin collide, prefer the local one (it has UI handlers).
  2. Or: don't auto-inject Adobe via SDK when the user has explicitly installed the marketplace plugin.
  3. Or: widen the URL whitelist for image_* tools to cover common public hosts (Dropbox direct links, Google Drive direct download, generic HTTPS) so URL-based ingestion is a real fallback.
  4. Or: improve the error surface — if the picker widget can't render, the tool should return an actionable error instead of silently staying pending.

Impact

Every Adobe skill that begins with "open the picker" is blocked: adobe-batch-edit-photos, adobe-retouch-portraits, adobe-resize-photos-and-videos, adobe-create-social-variations, adobe-edit-quick-cut. Users see a confident "I'll open the picker now…" from Claude, then nothing happens, no error message, just an indefinite pending state.

Log snippet

2026-04-30 08:08:48 [info] Plugin "plugin_0122ueaY71LceH15zz3CjU65" has remote MCP servers (Adobe for creativity). Shadowing with no-ops to prevent SDK double-load.
2026-04-30 08:08:48 [info] [CCD] Passing 5 plugin(s) to SDK (skills: 1, remote: 4, local: 0)
2026-04-30 08:24:11 [info] Making remote MCP tool call: asset_add_file
2026-04-30 08:24:14 [info] Remote tool call succeeded: asset_add_file
2026-04-30 08:24:17 [info] Making remote MCP tool call: asset_add_file_check_status
2026-04-30 08:24:21 [info] Remote tool call succeeded: asset_add_file_check_status
(stays pending forever — picker never rendered)

View original on GitHub ↗

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