Skip to main content

Provider Tools

These five tools manage voice AI providers on the gateway. They allow agents to list, inspect, test, add, and delete providers.

list_providers

List every provider configured on the gateway, including both YAML-defined providers and providers added via the API or MCP. Destructive: No

Input Schema

No parameters required.
{}

Output

FieldTypeDescription
providersarrayList of provider objects.
countintegerTotal number of providers.
Each provider object:
FieldTypeDescription
provider_idstringUnique identifier (e.g., "deepgram").
provider_typestringThe provider implementation type.
sourcestring"yaml" (config file) or "db" (added via API).
enabledbooleanWhether the provider has valid credentials.
api_key_maskedstring | nullMasked API key (e.g., "sk-a...1f2b").
base_urlstring | nullCustom base URL, if configured.
typestring"cloud" or "local".

Example

Invocation:
{
  "name": "list_providers",
  "arguments": {}
}
Response:
{
  "providers": [
    {
      "provider_id": "deepgram",
      "provider_type": "deepgram",
      "source": "yaml",
      "enabled": true,
      "api_key_masked": "sk-a...1f2b",
      "base_url": null,
      "type": "cloud"
    },
    {
      "provider_id": "whisper",
      "provider_type": "whisper",
      "source": "yaml",
      "enabled": true,
      "api_key_masked": null,
      "base_url": null,
      "type": "local"
    }
  ],
  "count": 2
}

get_provider

Return full details for one provider, including how many models depend on it. The API key is always masked. Destructive: No

Input Schema

ParameterTypeRequiredDescription
provider_idstringYesThe ID of the provider to fetch.

Output

Same fields as list_providers entries, plus:
FieldTypeDescription
model_countintegerNumber of models registered for this provider.

Errors

CodeWhen
PROVIDER_NOT_FOUNDNo provider with the given ID exists.

Example

Invocation:
{
  "name": "get_provider",
  "arguments": { "provider_id": "deepgram" }
}
Response:
{
  "provider_id": "deepgram",
  "provider_type": "deepgram",
  "source": "yaml",
  "enabled": true,
  "api_key_masked": "sk-a...1f2b",
  "base_url": null,
  "type": "cloud",
  "model_count": 2
}

test_provider

Test connectivity to a provider by calling its health_check() method. This makes a real network request to the provider’s API to verify credentials and reachability. Destructive: No

Input Schema

ParameterTypeRequiredDescription
provider_idstringYesThe ID of the provider to test.

Output

FieldTypeDescription
statusstring"ok" or "failed".
latency_msintegerRound-trip time of the health check in milliseconds.
messagestring"reachable" on success, or an error description.

Errors

CodeWhen
PROVIDER_NOT_FOUNDNo provider with the given ID exists.

Example

Invocation:
{
  "name": "test_provider",
  "arguments": { "provider_id": "deepgram" }
}
Response (success):
{
  "status": "ok",
  "latency_ms": 142,
  "message": "reachable"
}
Response (failure):
{
  "status": "failed",
  "latency_ms": 5012,
  "message": "TimeoutError: Connection timed out"
}

add_provider

Register a new voice AI provider. The gateway validates the credentials by running a health check before saving (for cloud providers). After adding, use register_model to add specific models from this provider. Destructive: No (creates a new resource)

Input Schema

ParameterTypeRequiredDefaultDescription
provider_idstringYesUnique identifier, typically the provider name in lowercase.
provider_typestringYesOne of: deepgram, openai, anthropic, groq, cartesia, elevenlabs, assemblyai, ollama, whisper, kokoro, piper.
api_keystringNo""API key from the provider console. Empty for local providers.
base_urlstring | nullNonullCustom base URL (e.g., self-hosted Ollama).

Output

FieldTypeDescription
provider_idstringThe created provider ID.
provider_typestringThe provider type.
api_key_maskedstring | nullMasked API key.
base_urlstring | nullThe base URL, if set.
sourcestringAlways "db".
createdbooleanAlways true.

Errors

CodeWhen
PROVIDER_ALREADY_EXISTSA YAML-defined provider has the same ID.
VALIDATION_ERRORUnknown provider_type, or storage is disabled.
PROVIDER_TEST_FAILEDThe health check failed (credentials invalid or unreachable).

Example

Invocation:
{
  "name": "add_provider",
  "arguments": {
    "provider_id": "deepgram-staging",
    "provider_type": "deepgram",
    "api_key": "sk-your-staging-key"
  }
}
Response:
{
  "provider_id": "deepgram-staging",
  "provider_type": "deepgram",
  "api_key_masked": "sk-y...key",
  "base_url": null,
  "source": "db",
  "created": true
}

delete_provider

Delete a managed (GUI/API-added) provider. This is a destructive operation that uses the two-phase confirmation pattern. Destructive: Yes

Input Schema

ParameterTypeRequiredDefaultDescription
provider_idstringYesThe ID of the provider to delete.
confirmbooleanNofalseMust be true to actually delete. Default returns a preview.

Output (preview, confirm=false)

The tool raises a CONFIRMATION_REQUIRED error containing:
FieldTypeDescription
provider_idstringThe provider to be deleted.
models_affectedarrayList of model IDs that reference this provider.
projects_affectedarrayList of project IDs that use this provider via stacks.

Output (confirmed, confirm=true)

FieldTypeDescription
actionstring"deleted".
provider_idstringThe deleted provider ID.
models_affectedarrayModels that were affected.
projects_affectedarrayProjects that were affected.

Errors

CodeWhen
PROVIDER_NOT_FOUNDNo managed provider with the given ID.
READ_ONLY_RESOURCEThe provider is defined in YAML (cannot delete).
CONFIRMATION_REQUIREDCalled without confirm=true (returns preview).

Example: Preview

Invocation:
{
  "name": "delete_provider",
  "arguments": { "provider_id": "deepgram-staging", "confirm": false }
}
Response (error envelope):
{
  "error": {
    "code": "CONFIRMATION_REQUIRED",
    "message": "Deleting provider 'deepgram-staging' will impact 1 model(s) and 0 project(s). Call again with confirm=True to proceed.",
    "details": {
      "provider_id": "deepgram-staging",
      "models_affected": ["deepgram-staging/nova-3"],
      "projects_affected": []
    }
  }
}

Example: Confirm

Invocation:
{
  "name": "delete_provider",
  "arguments": { "provider_id": "deepgram-staging", "confirm": true }
}
Response:
{
  "action": "deleted",
  "provider_id": "deepgram-staging",
  "models_affected": ["deepgram-staging/nova-3"],
  "projects_affected": []
}