langchain-ai/deepagents · error · MarketplaceError

Marketplace URL {_redact_url_credentials(url)} contains plug

Error message

Marketplace URL {_redact_url_credentials(url)} contains plugins with unsupported remote sources: [{names}]

What it means

URL-based marketplaces only download the catalog JSON file, so every plugin in the catalog must be fetchable remotely. If any plugin in a URL marketplace uses a source type that requires the marketplace's sibling filesystem tree (a remote-unsupported source), the library rejects the whole marketplace and lists the offending plugin names.

Source

Thrown at libs/code/deepagents_code/plugins/marketplace.py:469

    local_plugins = [
        plugin.name
        for plugin in marketplace.plugins
        if _source_path(plugin.source) is not None
    ]
    if not local_plugins:
        unsupported = [
            plugin.name
            for plugin in marketplace.plugins
            if _plugin_repository_source(plugin) is None
        ]
        if not unsupported:
            return
        names = ", ".join(sorted(unsupported))
        msg = (
            f"Marketplace URL {_redact_url_credentials(url)} contains plugins "
            f"with unsupported remote sources: [{names}]"
        )
        raise MarketplaceError(msg)
    names = ", ".join(sorted(local_plugins))
    msg = (
        f"Marketplace URL {_redact_url_credentials(url)} only downloads the "
        f"catalog JSON, but plugins [{names}] use local relative sources. "
        "Use a git repository or local directory for this marketplace."
    )
    raise MarketplaceError(msg)


def load_marketplace_location(path: Path) -> PluginMarketplace:
    """Load a marketplace from either a cached directory or JSON file.

    Args:
        path: Directory or marketplace JSON path.

    Returns:
        Parsed marketplace.
    """

View on GitHub (pinned to a1af029e6e)

Solutions

  1. Publish the marketplace as a git repository and register it with a git/github source instead of a URL
  2. Convert the offending plugins to remotely fetchable sources (e.g. their own git URLs)
  3. Remove the unsupported plugins from the URL catalog

Example fix

// before
add_marketplace_source("https://example.com/catalog.json")  # contains plugin with local-relative source
// after
add_marketplace_source("git", RepositoryMarketplaceSource(source_type="git", value="https://github.com/org/catalog.git"))
Defensive patterns

Strategy: validation

Validate before calling

unsupported = {
    p.name for p in catalog["plugins"]
    if p.get("source", {}).get("type") not in ("git", "github", "url")
}
if unsupported:
    raise ValueError(f"plugins need a repo marketplace: {sorted(unsupported)}")

Try / catch

try:
    marketplace, path = materialize_marketplace_source(source)
except MarketplaceError as exc:
    if "unsupported remote sources" in str(exc):
        log.error("Convert listed plugins to remote sources or host marketplace as a git repo")
    raise

Prevention

When it happens

Trigger: materialize_marketplace_source with a URL source calls _reject_url_marketplace_with_local_plugins, which scans the catalog and finds plugins whose sources cannot be resolved from a single downloaded JSON file.

Common situations: A catalog designed for a git repository clone being served as a bare JSON URL; plugins referencing sibling directories or repo-relative paths; mixing source kinds in one marketplace.

Related errors


AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29). Data as JSON: /api/errors/fe45cd30f6f3e782. Report an issue: GitHub.