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
- Host the marketplace in a git repository and add it via the git or github source type
- Distribute the marketplace as a local directory and use a local path source
- 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
- Never serve catalogs containing local-relative plugin sources over plain URLs
- Distribute such marketplaces via git clone or a local directory
- Convert plugin sources to standalone git URLs before exporting to a URL marketplace
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
- Marketplace URL {_redact_url_credentials(url)} contains plug
- Cannot determine whether {str(left)!r} is {str(right)!r}: {e
- Invalid DEEPAGENTS_HOME {str(root)!r}: exists but cannot be
- Invalid DEEPAGENTS_HOME {str(root)!r}: exists but is not a d
- Marketplace {marketplace_name!r} is not configured
AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29).
Data as JSON: /api/errors/d2af8fc3f7fe16e0.
Report an issue: GitHub.