langchain-ai/deepagents · error · MarketplaceError

Marketplace URL {_redact_url_credentials(url)} only download

Error message

Marketplace URL {_redact_url_credentials(url)} only downloads the catalog JSON, but plugins [{names}] use local relative sources. Use a git repository or local directory for this marketplace.

What it means

URL marketplaces fetch only the catalog JSON, but some plugins in the catalog use local relative sources that need the surrounding filesystem (sibling files in the repo/directory). The library refuses this marketplace and names the plugins, telling the user to use a git repository or local directory instead.

Source

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

            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.
    """
    resolved = path.expanduser().resolve()
    if resolved.is_file():
        return _load_marketplace_file(resolved)
    return load_marketplace(resolved)


def find_marketplace_manifest(root: Path) -> Path | None:

View on GitHub (pinned to a1af029e6e)

Solutions

  1. Host the marketplace in a git repository and add it via the git or github source type
  2. Distribute the marketplace as a local directory and use a local path source
  3. Rewrite the plugins' sources to remote-fetchable forms (e.g. individual git URLs)

Example fix

// before
{"sources": ["https://example.com/marketplace.json"]}  // plugins use "./plugins/foo"
// after
{"sources": ["git+https://github.com/org/marketplace.git"]}  // repo includes plugin files
Defensive patterns

Strategy: validation

Validate before calling

local_plugins = [
    p["name"] for p in catalog["plugins"]
    if p.get("source", {}).get("type") == "local"
]
if local_plugins:
    raise ValueError(f"use git/local marketplace for local plugins: {local_plugins}")

Try / catch

try:
    marketplace, path = materialize_marketplace_source(source)
except MarketplaceError as exc:
    if "only downloads the catalog JSON" in str(exc):
        log.error("Re-host marketplace as a git repository or local directory")
    raise

Prevention

When it happens

Trigger: materialize_marketplace_source with a URL source whose catalog lists plugins with local/relative-path sources; detected by _reject_url_marketplace_with_local_plugins.

Common situations: Serving a marketplace.json from a website while plugins live as files next to it in a repo; exporting a local marketplace to a URL without converting plugin sources; misunderstanding that URL marketplaces cannot deliver plugin files.

Related errors


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