Adobe MCP picker widget not rendering — local plugin shadowed by SDK double-load detector
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 on2.1.113) - macOS (Apple Silicon)
- Plugin:
adobe-for-creativityv1.0.1 (Marketplace, Anthropic & Partners) - Other plugins enabled:
design,productivity,cowork-plugin-management
Reproduction
- Install
adobe-for-creativityplugin from the marketplace - Open Claude Code in a project
- Ask Claude to edit a local image (e.g.
/adobe-batch-edit-photos) - Claude calls
mcp__...__asset_add_file - The tool call returns
{ job_status: "pending", job_id: "..." } - No picker widget / card appears anywhere in the Claude Code UI
- Polling
asset_add_file_check_statusstayspendingindefinitely
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_uploadfrom local Mac path → returnsForbidden("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
- Reverse the shadow direction: when a local plugin and SDK-injected plugin collide, prefer the local one (it has UI handlers).
- Or: don't auto-inject Adobe via SDK when the user has explicitly installed the marketplace plugin.
- 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. - 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)This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗