Cowork "Add marketplace" fails on marketplaces referencing private/internal plugin repos

Resolved 💬 4 comments Opened May 21, 2026 by kraigparkinson Closed May 22, 2026

Summary

Claude Desktop's Cowork marketplace sync fails with a generic "Marketplace sync failed. Check the repository URL and try again." whenever a plugin's source.repo points to a GitHub repository not accessible anonymously (private or internal), even when the marketplace.json itself is in a public repo and structurally valid against the documented schema.

The actual server-side error, surfaced only in ~/Library/Logs/Claude/claude.ai-web.log, is much more specific:

MARKETPLACE_ERROR:REMOTE_SYNC_FAILED [remoteMarketplaceOps] sync did not succeed (status: failed_content):
{
  "plugins": [{
    "name": "<plugin>",
    "error": "Repository not found on github.com. Check the URL and make sure the repository is public."
  }],
  "message": "1 plugins found, 1 failed validation"
}

The [remoteMarketplaceOps] tag indicates this validation runs server-side, from an unauthenticated GitHub session — none of the user's local credentials (ssh-agent, gh auth, GITHUB_TOKEN) are in scope.

Why this matters

The marketplace docs explicitly support private repos for the CLI install path via GITHUB_TOKEN / gh auth / ssh-agent (see Private repositories). None of those mechanisms are available to Cowork's server-side sync, so orgs distributing internal plugins through a marketplace cannot use the Cowork UI at all — not even to browse the catalog.

This blocks any organization-internal marketplace pattern where:

  • The marketplace repo is public (so it's shareable / discoverable), and
  • The plugin repos referenced inside are private or internal (so the plugin code stays governed by the org).

Today the only options are: (a) make plugin repos public, (b) bundle plugin source into the public marketplace repo via relative paths, or (c) tell users to drop down to the CLI. Each has real downsides.

What would help (any one of these)

  1. Surface the actual server-side error in the UI so users know it's a plugin-repo visibility issue, not the marketplace URL they typed. The current "Check the repository URL and try again." sent us in the wrong direction for hours.
  2. Per-user GitHub auth for Cowork's marketplace sync, similar to how the CLI uses local credential helpers but mediated through Cowork's own GitHub integration (presumably already needed for the \github\ plugin / MCP).
  3. Org-level managed marketplace credentials — a GitHub App that an org admin installs once, granting Cowork's backend read access to specific private/internal repos. This mirrors how the \extraKnownMarketplaces\ managed-settings story already works for marketplace discovery; it would extend that to auth.
  4. At minimum, document the limitation in plugin-marketplaces and discover-plugins. The existing "Private repositories" section reads as universal but is silently scoped to the CLI.

Reproduction

  1. Create a public marketplace repo whose \.claude-plugin/marketplace.json\ references at least one plugin whose \source.repo\ is a private or internal GitHub repo.
  2. In Claude Desktop (Cowork) → Directory → Plugins → Personal → Add marketplace.
  3. Enter the marketplace's \owner/repo\.
  4. Click Sync → "Marketplace sync failed. Check the repository URL and try again."

The same marketplace adds and installs successfully via Claude Code CLI when the user has SSH set up.

Environment

  • Claude Desktop (macOS), Cowork
  • Example marketplace: a public org marketplace repo referencing a single internal-visibility plugin repo on the same GitHub org

View original on GitHub ↗

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