langchain-ai/deepagents · error · RuntimeError

mcp.disabled_servers is missing from the config manifest

Error message

mcp.disabled_servers is missing from the config manifest

What it means

_resolve_entries looks up the `mcp.disabled_servers` option in the built-in config manifest to learn its merge strategy. If the option is absent, the library raises this RuntimeError because disabled-server resolution cannot proceed without a declared schema. This indicates the shipped config manifest is inconsistent with the code.

Source

Thrown at libs/code/deepagents_code/mcp_disabled.py:266

def _resolve_entries(
    providers: tuple[RankedProviderValue[list[str]], ...],
) -> ResolvedValue[list[str]] | None:
    """Resolve deny tiers with the option's manifest-declared union strategy.

    Returns:
        The accumulated names and rank metadata, or `None` when every tier is unset.

    Raises:
        RuntimeError: If the option is missing from the manifest.
    """
    from deepagents_code.config_manifest import get_option
    from deepagents_code.configuration.resolver import resolve_ranked

    option = get_option("mcp.disabled_servers")
    if option is None:
        msg = "mcp.disabled_servers is missing from the config manifest"
        raise RuntimeError(msg)
    return resolve_ranked(providers, strategy=option.merge_strategy.value)


def _raise_for_managed_provider(
    provider: RankedProviderValue[list[str]],
) -> None:
    """Apply the deny-list callsite's fail-closed health policy.

    Raises:
        ManagedConfigError: If the provider is unhealthy or its value is invalid.
    """
    from deepagents_code.configuration.service import ManagedConfigError
    from deepagents_code.configuration.types import (
        Invalid,
        ProviderHealth,
        ProviderStatus,
    )

View on GitHub (pinned to a1af029e6e)

Solutions

  1. Upgrade or reinstall deepagents-code to a complete, consistent version so the config manifest includes `mcp.disabled_servers`.
  2. If you maintain a custom manifest, add the `mcp.disabled_servers` option definition with a merge strategy.
  3. Clear stale installed copies (e.g. duplicate site-packages or stale editable installs) so code and manifest match.

Example fix

# before (custom manifest)
options = ["mcp.servers", "mcp.headers"]
# after
options = ["mcp.servers", "mcp.headers", "mcp.disabled_servers"]
Defensive patterns

Strategy: fallback

Validate before calling

from deepagents_code.config_manifest import get_option
assert get_option("mcp.disabled_servers") is not None, "manifest missing mcp.disabled_servers"

Try / catch

try:
    disabled = get_disabled_servers()
except RuntimeError as exc:
    if "config manifest" in str(exc):
        disabled = []  # safe default; log a warning
    else:
        raise

Prevention

When it happens

Trigger: Calling get_disabled_servers (or _managed_disabled_servers) when `get_option("mcp.disabled_servers")` returns None — i.e. the config manifest does not declare the `mcp.disabled_servers` option.

Common situations: Running a version of deepagents-code whose config manifest predates the `mcp.disabled_servers` option while newer mcp_disabled code is present (mixed installs/partial upgrades); monkeypatched or stubbed manifests in tests; custom manifest builds that dropped the option.

Related errors


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