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
- Use a supported model provider id: 'tripo' or 'meshy'.
- Call AssetGenProviders.List() to enumerate the current supported set and kinds before choosing.
- 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
- Enumerate AssetGenProviders.List() and filter by Kind before choosing an id.
- Keep a local constant of supported ids to validate user/AI input.
- Treat provider ids as exact tokens (case-insensitive).
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
- Unknown image provider '{id}'.
- Unknown audio provider '{id}'.
- Unknown marketplace provider '{id}'.
- uid required
- provider returned a disallowed file type '.{ext}'
AI-assisted analysis of CoplayDev/unity-mcp@c21bf496bc (2026-08-13).
Data as JSON: /api/errors/edd409a3b8af5874.
Report an issue: GitHub.