langchain-ai/deepagents · error · MarketplaceError

Plugin {plugin_id!r} not found in marketplace {marketplace_n

Error message

Plugin {plugin_id!r} not found in marketplace {marketplace_name}

What it means

The marketplace was found but contains no plugin entry whose name matches the plugin half of the id, so _resolve_marketplace_and_entry raises MarketplaceError. It distinguishes 'marketplace exists, plugin missing' from the not-configured case, pointing at a mismatch between the requested name and the marketplace's plugin list.

Source

Thrown at libs/code/deepagents_code/plugins/discovery.py:199

    plugin_id: str,
) -> tuple[PluginMarketplace, MarketplacePluginEntry]:
    try:
        plugin_name, marketplace_name = split_plugin_id(plugin_id)
    except ValueError as exc:
        raise MarketplaceError(str(exc)) from exc
    records = load_marketplace_records()
    record = records.get(marketplace_name)
    if record is None:
        msg = f"Marketplace {marketplace_name!r} is not configured"
        raise MarketplaceError(msg)
    marketplace = load_marketplace_location(Path(record.install_location))
    entry = next(
        (plugin for plugin in marketplace.plugins if plugin.name == plugin_name),
        None,
    )
    if entry is None:
        msg = f"Plugin {plugin_id!r} not found in marketplace {marketplace_name}"
        raise MarketplaceError(msg)
    return marketplace, entry


@plugin_mutation_lock()
def install_plugin(plugin_id: str) -> PluginInstance:
    """Install a marketplace plugin into the versioned cache and enable it.

    Copies the plugin source into `plugins/cache/{marketplace}/{plugin}/{version}/`,
    writes `installed_plugins.json`, and enables the plugin.

    Args:
        plugin_id: Plugin id in `{name}@{marketplace}` form.

    Returns:
        Discovered plugin instance loaded from the cache path.

    Raises:
        MarketplaceError: If the marketplace/plugin cannot be resolved, the

View on GitHub (pinned to a1af029e6e)

Solutions

  1. Browse the marketplace's plugin list (`plugin marketplace list` / its manifest) and use the exact entry name.
  2. Refresh/re-add the marketplace source so the local record picks up current plugins.
  3. Check for renames upstream and use the new plugin name.
  4. Verify you are targeting the marketplace that actually publishes this plugin.

Example fix

// before
$ dcode plugin install widgett@internal
MarketplaceError: Plugin 'widgett@internal' not found in marketplace internal
// after (correct name from marketplace listing)
$ dcode plugin install widget@internal
Defensive patterns

Strategy: validation

Validate before calling

def ensure_entry(marketplace, plugin_name: str) -> None:
    names = {p.name for p in marketplace.plugins}
    if plugin_name not in names:
        raise SystemExit(f"{plugin_name!r} not in marketplace; available: {sorted(names)}")

Type guard

def entry_exists(marketplace, plugin_name: str) -> bool:
    return any(p.name == plugin_name for p in marketplace.plugins)

Try / catch

try:
    install_plugin("widget@internal")
except MarketplaceError as exc:
    if "not found in marketplace" in str(exc):
        print("refresh the marketplace or correct the plugin name")
    else:
        raise

Prevention

When it happens

Trigger: install_plugin resolves the marketplace record and loads it, then the linear scan over marketplace.plugins finds no entry with entry.name == plugin_name.

Common situations: Typo in the plugin name; the plugin was removed or renamed upstream and the local marketplace cache is stale; using an internal/codename instead of the published name; the marketplace source updated and the entry no longer exists.

Related errors


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