Summary
Claude Desktop has no documented claude:// deep link to open the "Add marketplace" dialog (Customize → Plugins personales → + → Crear plugin → Añadir marketplace) with the marketplace URL prefilled.
For third-party plugin vendors who self-host a marketplace and want a one-click install button on their landing page, this is the missing piece between "tell users to copy a URL and click through five menus" and "click here, confirm in Claude Desktop, done."
Use case
I run Robin, a Spanish legal-tech tool that ships a Claude Desktop plugin via a self-hosted git marketplace at https://api.robinlawyer.ai/plugins.git. I'd like my install page to expose a single button:
<a href="claude://claude.ai/customize/plugins/marketplaces/add?url=https%3A%2F%2Fapi.robinlawyer.ai%2Fplugins.git">
Install Robin in Claude Desktop
</a>
That should open Claude Desktop straight into the "Add marketplace" dialog with the URL prefilled, so the user only has to click "Sync" and confirm. Today my users have to perform six manual actions even after clicking my button.
What I found while investigating
After extracting app.asar from Claude Desktop 0.x (macOS) and reading claudeURLHandler in .vite/build/index.js, I see:
- The handler has a
case Dg.Customize that recognizes claude://claude.ai/customize/plugins/new?marketplace=<url>&plugin=<id>. However, the path it forwards to (/customize/plugins/new) is the "Create plugin" wizard, not the "Add marketplace" dialog, so this does not solve the install-from-vendor use case.
- The path actually used by the "Add marketplace" modal (per
topFrameUrl logs) is /customize/plugins/marketplaces, but the dialog itself is a React overlay with no dedicated route — /customize/plugins/marketplaces/add returns "Not Found".
- The generic fallback
pRA strips all query params except a small allowlist (authed_mcp_server_id, server, step, *_success, oauth_error, flow_id), so even if the route existed, ?url= would be discarded.
So there is no path I can target today, even with a workaround.
Proposed solutions (any of these would unblock vendors)
Option A (preferred): publish a stable deep link for the "Add marketplace" dialog with a prefill parameter:
claude://claude.ai/customize/plugins/marketplaces/add?url=<marketplace-url>
The user still confirms inside Claude Desktop — no silent install.
Option B: extend the existing case Dg.Customize so that when the inner path is plugins/marketplaces/add (or new), the url/marketplace query param survives pRA's allowlist and is forwarded to the React route.
Option C: add a dedicated claude://plugin/marketplace/add?url=… host, analogous to the existing claude://code/new?q=… and claude://cowork/new?q=….
Why this matters now
Plugin marketplaces are how third parties extend Claude Desktop. Without a 1-click install link, every vendor has to teach users a 5-click flow (open Customize → Plugins personales → + → Crear plugin → Añadir marketplace → paste URL → Sync), which is a real conversion killer on landing pages. A documented deep link would put plugin vendors on par with what claude://code/new already offers for prompts.
Environment
- Claude Desktop: latest (macOS, build verified 2026-05-26)
- macOS: 15 (Sequoia)
- Plugin marketplace tested:
https://api.robinlawyer.ai/plugins.git (git dumb HTTP, self-hosted)
Happy to test any preview build that ships such a link.
Summary
Claude Desktop has no documented
claude://deep link to open the "Add marketplace" dialog (Customize → Plugins personales → + → Crear plugin → Añadir marketplace) with the marketplace URL prefilled.For third-party plugin vendors who self-host a marketplace and want a one-click install button on their landing page, this is the missing piece between "tell users to copy a URL and click through five menus" and "click here, confirm in Claude Desktop, done."
Use case
I run Robin, a Spanish legal-tech tool that ships a Claude Desktop plugin via a self-hosted git marketplace at
https://api.robinlawyer.ai/plugins.git. I'd like my install page to expose a single button:That should open Claude Desktop straight into the "Add marketplace" dialog with the URL prefilled, so the user only has to click "Sync" and confirm. Today my users have to perform six manual actions even after clicking my button.
What I found while investigating
After extracting
app.asarfrom Claude Desktop 0.x (macOS) and readingclaudeURLHandlerin.vite/build/index.js, I see:case Dg.Customizethat recognizesclaude://claude.ai/customize/plugins/new?marketplace=<url>&plugin=<id>. However, the path it forwards to (/customize/plugins/new) is the "Create plugin" wizard, not the "Add marketplace" dialog, so this does not solve the install-from-vendor use case.topFrameUrllogs) is/customize/plugins/marketplaces, but the dialog itself is a React overlay with no dedicated route —/customize/plugins/marketplaces/addreturns "Not Found".pRAstrips all query params except a small allowlist (authed_mcp_server_id,server,step,*_success,oauth_error,flow_id), so even if the route existed,?url=would be discarded.So there is no path I can target today, even with a workaround.
Proposed solutions (any of these would unblock vendors)
Option A (preferred): publish a stable deep link for the "Add marketplace" dialog with a prefill parameter:
The user still confirms inside Claude Desktop — no silent install.
Option B: extend the existing
case Dg.Customizeso that when the inner path isplugins/marketplaces/add(ornew), theurl/marketplacequery param survivespRA's allowlist and is forwarded to the React route.Option C: add a dedicated
claude://plugin/marketplace/add?url=…host, analogous to the existingclaude://code/new?q=…andclaude://cowork/new?q=….Why this matters now
Plugin marketplaces are how third parties extend Claude Desktop. Without a 1-click install link, every vendor has to teach users a 5-click flow (open Customize → Plugins personales →
+→ Crear plugin → Añadir marketplace → paste URL → Sync), which is a real conversion killer on landing pages. A documented deep link would put plugin vendors on par with whatclaude://code/newalready offers for prompts.Environment
https://api.robinlawyer.ai/plugins.git(git dumb HTTP, self-hosted)Happy to test any preview build that ships such a link.