CoplayDev/unity-mcp · error · NotSupportedException

Unknown model provider '{id}'.

Error message

Unknown model provider '{id}'.

What it means

AssetGenProviders.Model lowercases the provider id and switches over it, returning an adapter for known model providers ('tripo', 'meshy'). Any other id hits default and throws NotSupportedException. The supported ids are enumerated in List().

Source

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

{
    /// <summary>
    /// Factory + registry for asset-gen provider adapters. Resolves a provider id to its adapter
    /// (model: tripo/meshy; image: fal/openrouter; audio: fal; marketplace: sketchfab); unknown ids
    /// throw <see cref="NotSupportedException"/>. <see cref="List"/> advertises providers and reports
    /// <c>Configured</c> existence only — never a key value.
    /// </summary>
    public static class AssetGenProviders
    {
        public static IModelProviderAdapter Model(string id)
        {
            switch ((id ?? string.Empty).ToLowerInvariant())
            {
                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)
        {

View on GitHub (pinned to c21bf496bc)

Solutions

  1. Use a supported model provider id: 'tripo' or 'meshy'.
  2. Call AssetGenProviders.List() to enumerate the current supported set and kinds before choosing.
  3. Fix typos and ensure the id is passed exactly (casing does not matter due to lowercasing).

Example fix

// before
var adapter = AssetGenProviders.Model("tripo3d"); // typo

// after
var adapter = AssetGenProviders.Model("tripo");
Defensive patterns

Strategy: validation

Validate before calling

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

Type guard

static readonly HashSet<string> KnownModelProviders = new HashSet<string> { "tripo", "meshy" };
static bool IsKnownModelProvider(string id) => KnownModelProviders.Contains((id ?? "").ToLowerInvariant());

Try / catch

try { var adapter = AssetGenProviders.Model(id); }
catch (NotSupportedException ex) when (ex.Message.Contains("Unknown model provider"))
{
    // Correct the id or fall back to a configured default model provider.
    var adapter = AssetGenProviders.Model("tripo");
}

Prevention

When it happens

Trigger: Calling Model() with an id not in the switch, such as a typo ('tripo3d', 'mshy'), a case-variant that still fails, or an unsupported provider name.

Common situations: An AI/LLM hallucinating a provider name; config referencing an old or renamed provider; a caller assuming a provider exists for models when it only exists for another kind.

Related errors


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