VoiceGateway // DOCS

Project Tools

These four tools manage projects on the gateway. Projects group requests for cost tracking, budget enforcement, and routing (via default stacks or explicit model assignments).

Project Tools

These four tools manage projects on the gateway. Projects group requests for cost tracking, budget enforcement, and routing (via default stacks or explicit model assignments).

list_projects

List every project on the gateway with today's stats, including spend, request count, and budget status.

Destructive: No

Input Schema

No parameters required.

JSON
{}

Output

FieldTypeDescription
projectsarrayList of project objects.
countintegerTotal number of projects.

Each project object:

FieldTypeDescription
idstringProject identifier.
namestringHuman-readable name.
descriptionstringProject description.
daily_budgetfloatDaily budget in USD (0 = unlimited).
budget_actionstring"warn", "throttle", or "block".
budget_statusstring"ok", "warning", or "exceeded".
today_spendfloatToday's spend in USD.
today_requestsintegerToday's request count.
tagsarrayList of tag strings.
default_stackstring | nullNamed stack from config, if set.
sourcestring"yaml" or "db".

Example

Invocation:

JSON
{
  "name": "list_projects",
  "arguments": {}
}

Response:

JSON
{
  "projects": [
    {
      "id": "tonys-pizza",
      "name": "Tony's Pizza",
      "description": "Pizza ordering voice agent",
      "daily_budget": 10.0,
      "budget_action": "warn",
      "budget_status": "ok",
      "today_spend": 2.45,
      "today_requests": 120,
      "tags": ["production"],
      "default_stack": "premium",
      "source": "yaml"
    },
    {
      "id": "dev-sandbox",
      "name": "Dev Sandbox",
      "description": "Development testing",
      "daily_budget": 1.0,
      "budget_action": "block",
      "budget_status": "warning",
      "today_spend": 0.85,
      "today_requests": 42,
      "tags": ["dev"],
      "default_stack": "local",
      "source": "db"
    }
  ],
  "count": 2
}

get_project

Return full details for one project including cost trends and model assignments.

Destructive: No

Input Schema

ParameterTypeRequiredDescription
project_idstringYesThe ID of the project to fetch.

Output

FieldTypeDescription
idstringProject identifier.
namestringHuman-readable name.
descriptionstringProject description.
daily_budgetfloatDaily budget in USD.
budget_actionstring"warn", "throttle", or "block".
budget_statusstring"ok", "warning", or "exceeded".
today_spendfloatToday's spend in USD.
today_requestsintegerToday's request count.
week_spendfloatThis week's total spend.
week_requestsintegerThis week's total requests.
tagsarrayList of tag strings.
default_stackstring | nullNamed stack.
stt_modelstring | nullExplicit STT model (managed projects).
llm_modelstring | nullExplicit LLM model (managed projects).
tts_modelstring | nullExplicit TTS model (managed projects).
sourcestring"yaml" or "db".

Errors

CodeWhen
PROJECT_NOT_FOUNDNo project with the given ID exists.

Example

Invocation:

JSON
{
  "name": "get_project",
  "arguments": { "project_id": "tonys-pizza" }
}

Response:

JSON
{
  "id": "tonys-pizza",
  "name": "Tony's Pizza",
  "description": "Pizza ordering voice agent",
  "daily_budget": 10.0,
  "budget_action": "warn",
  "budget_status": "ok",
  "today_spend": 2.45,
  "today_requests": 120,
  "week_spend": 18.90,
  "week_requests": 845,
  "tags": ["production"],
  "default_stack": "premium",
  "stt_model": null,
  "llm_model": null,
  "tts_model": null,
  "source": "yaml"
}

create_project

Create a new project for cost tracking and routing. You can either set default_stack (referencing a named stack from voicegw.yaml) or individual stt_model/llm_model/tts_model fields, but not both.

Destructive: No (creates a new resource)

Input Schema

ParameterTypeRequiredDefaultDescription
project_idstringYesUnique identifier (kebab-case recommended).
namestringYesHuman-readable name.
descriptionstringNo""Long description.
daily_budgetfloatNo0.0USD limit per day (0 = unlimited). Must be >= 0.
budget_actionstringNo"warn""warn" logs when exceeded, "throttle" falls back to local stack, "block" raises an error.
stt_modelstring | nullNonullExplicit STT model ID (must be registered).
llm_modelstring | nullNonullExplicit LLM model ID (must be registered).
tts_modelstring | nullNonullExplicit TTS model ID (must be registered).
default_stackstring | nullNonullNamed stack from voicegw.yaml (e.g., "premium").
tagsarray | nullNonullLabels for grouping.

Output

FieldTypeDescription
project_idstringThe created project ID.
namestringProject name.
descriptionstringProject description.
daily_budgetfloatDaily budget.
budget_actionstringBudget enforcement action.
default_stackstring | nullStack name.
stt_modelstring | nullSTT model.
llm_modelstring | nullLLM model.
tts_modelstring | nullTTS model.
tagsarrayTags.
sourcestringAlways "db".
createdbooleanAlways true.
created_atfloatUnix timestamp of creation.

Errors

CodeWhen
PROJECT_ALREADY_EXISTSA project with the same ID already exists.
MODEL_NOT_FOUNDA referenced stt_model, llm_model, or tts_model is not registered.
VALIDATION_ERRORBoth default_stack and explicit models are set, or the stack name does not exist, or storage is disabled.

Example: With default stack

Invocation:

JSON
{
  "name": "create_project",
  "arguments": {
    "project_id": "sushi-bot",
    "name": "Sushi Bot",
    "description": "Sushi restaurant ordering agent",
    "daily_budget": 5.0,
    "budget_action": "warn",
    "default_stack": "premium",
    "tags": ["staging"]
  }
}

Response:

JSON
{
  "project_id": "sushi-bot",
  "name": "Sushi Bot",
  "description": "Sushi restaurant ordering agent",
  "daily_budget": 5.0,
  "budget_action": "warn",
  "default_stack": "premium",
  "stt_model": null,
  "llm_model": null,
  "tts_model": null,
  "tags": ["staging"],
  "source": "db",
  "created": true,
  "created_at": 1713340981.0
}

Example: With explicit models

Invocation:

JSON
{
  "name": "create_project",
  "arguments": {
    "project_id": "dev-test",
    "name": "Dev Test",
    "daily_budget": 1.0,
    "budget_action": "block",
    "stt_model": "local/whisper-large-v3",
    "llm_model": "ollama/llama3.2:3b",
    "tts_model": "local/kokoro"
  }
}

delete_project

Delete a managed project. This is a destructive operation that uses the two-phase confirmation pattern. Only projects added via create_project (source "db") can be deleted; YAML-defined projects must be removed from the config file. Request logs are NOT deleted -- only the project configuration is removed.

Destructive: Yes

Input Schema

ParameterTypeRequiredDefaultDescription
project_idstringYesThe ID of the project to delete.
confirmbooleanNofalseMust be true to delete. Default returns a preview.

Output (preview, confirm=false)

The tool raises a CONFIRMATION_REQUIRED error containing:

FieldTypeDescription
project_idstringThe project to be deleted.
total_spend_usdfloatAll-time spend for this project.
total_requestsintegerAll-time request count.
last_activityfloat | nullUnix timestamp of the most recent request.

Output (confirmed, confirm=true)

FieldTypeDescription
actionstring"deleted".
project_idstringThe deleted project ID.
total_spend_usdfloatAll-time spend.
total_requestsintegerAll-time request count.

Errors

CodeWhen
PROJECT_NOT_FOUNDNo project with the given ID.
READ_ONLY_RESOURCEThe project is defined in YAML, or storage is disabled.
CONFIRMATION_REQUIREDCalled without confirm=true (returns preview).

Example: Preview

Invocation:

JSON
{
  "name": "delete_project",
  "arguments": { "project_id": "dev-test", "confirm": false }
}

Response (error envelope):

JSON
{
  "error": {
    "code": "CONFIRMATION_REQUIRED",
    "message": "Deleting project 'dev-test' is destructive. Review the impact and call again with confirm=True.",
    "details": {
      "project_id": "dev-test",
      "total_spend_usd": 12.34,
      "total_requests": 567,
      "last_activity": 1713340900.0
    }
  }
}

Example: Confirm

Invocation:

JSON
{
  "name": "delete_project",
  "arguments": { "project_id": "dev-test", "confirm": true }
}

Response:

JSON
{
  "action": "deleted",
  "project_id": "dev-test",
  "total_spend_usd": 12.34,
  "total_requests": 567
}

On this page