CoplayDev/unity-mcp · error · NotSupportedException

Unknown image provider '{id}'.

Error message

Unknown image provider '{id}'.

What it means

AssetGenProviders.Image lowercases the provider id and switches over it, returning an adapter for known image providers ('fal', 'openrouter'). Any other id hits default and throws NotSupportedException.

Source

Thrown at MCPForUnity/Editor/Services/AssetGen/Providers/AssetGenProviders.cs:37

                case "tripo":
                    return new TripoAdapter();
                case "meshy":
                    return new MeshyAdapter();
                default:
                    throw new NotSupportedException($"Unknown model provider '{id}'.");
            }
        }

        public static IImageProviderAdapter Image(string id)
        {
            switch ((id ?? string.Empty).ToLowerInvariant())
            {
                case "fal":
                    return new FalAdapter();
                case "openrouter":
                    return new OpenRouterAdapter();
                default:
                    throw new NotSupportedException($"Unknown image provider '{id}'.");
            }
        }

        public static IAudioProviderAdapter Audio(string id)
        {
            switch ((id ?? string.Empty).ToLowerInvariant())
            {
                case "fal":
                    return new FalAudioAdapter();
                default:
                    throw new NotSupportedException($"Unknown audio provider '{id}'.");
            }
        }

        public static IMarketplaceProviderAdapter Marketplace(string id)
        {
            switch ((id ?? string.Empty).ToLowerInvariant())
            {

View on GitHub (pinned to c21bf496bc)

Solutions

  1. Use a supported image provider id: 'fal' or 'openrouter'.
  2. Enumerate providers via AssetGenProviders.List() and filter by Kind == 'image' before selecting.
  3. Check spelling; the id is case-insensitive but must match exactly otherwise.
Defensive patterns

Strategy: validation

Validate before calling

var supported = AssetGenProviders.List().Where(p => p.Kind == "image").Select(p => p.Id).ToHashSet();
if (!supported.Contains(id.ToLowerInvariant()))
    throw new ArgumentException($"Unknown image provider '{id}'. Supported: {string.Join(", ", supported)}");
var adapter = AssetGenProviders.Image(id);

Type guard

static readonly HashSet<string> KnownImageProviders = new HashSet<string> { "fal", "openrouter" };
static bool IsKnownImageProvider(string id) => KnownImageProviders.Contains((id ?? "").ToLowerInvariant());

Try / catch

try { var adapter = AssetGenProviders.Image(id); }
catch (NotSupportedException ex) when (ex.Message.Contains("Unknown image provider"))
{
    var adapter = AssetGenProviders.Image("fal");
}

Prevention

When it happens

Trigger: Calling Image() with an id not in the switch, e.g. 'stability', 'dalle', or a typo of 'fal'/'openrouter'.

Common situations: An AI/LLM hallucinating an image provider; config referencing a provider that is not implemented for images; a caller mixing up model vs image provider ids.

Related errors


AI-assisted analysis of CoplayDev/unity-mcp@c21bf496bc (2026-08-13). Data as JSON: /api/errors/ace9bd953c78b7a7. Report an issue: GitHub.