Skip to main content
Glama

Create trunk origination URI

create_origination_uri
Destructive

Adds a public SIP destination URI to a Vobiz trunk for outbound call routing, with priority levels for primary and failover targets. Returns the new URI ID.

Instructions

Add a SIP destination (origination URI) such as sip:sbc.example.com:5060 that Vobiz trunks route outbound calls to. Use priority 1 for the primary and 2+ for failover; attach it to a trunk with update_sip_trunk (primary_uri_uuid or fallback_uri_uuid). The host must be a public FQDN or IPv4 address; private, loopback and .local targets are rejected. Weight (Vobiz default 10) and transport are set in the Vobiz console. Returns the URI's id. Gated by VOBIZ_ENABLE_PROVISIONING and confirm: true; every call adds another URI, so a retry after a timeout should first check list_origination_uris.

Input Schema

NameRequiredDescriptionDefault
nameYesLabel of 1-255 characters, e.g. Primary SBC. Returned by Vobiz as `description`.
confirmYesMust be true, set only after the user explicitly approved: adding this outbound SIP destination.
sip_uriYesSIP destination: sip:host, sip:host:port, sip:user@host or sip:user@host:port, e.g. sip:sbc.example.com:5060 (port 1-65535, host public). Returned by Vobiz as `uri`.
priorityYesRouting priority, 1-1000: lower is tried first (1 = primary, 2+ = failover). URIs sharing a priority split traffic by weight.

Output Schema

NameRequiredDescriptionDefault
okNoTrue on success. On a failure the result is isError with ok: false plus `error` (kind), `message`, `retryable` and sometimes `http_status`.
uri_idNoUUID of the new URI: use it as primary_uri_uuid or fallback_uri_uuid on a trunk. Null if Vobiz did not return one.
createdNoTrue when the record was created by this call.
http_statusNoHTTP status Vobiz answered with.
origination_uriNoThe URI as Vobiz returned it.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv1.4.2
    • changedInput schema / properties / name / description
      Previous value: -"Label, e.g. Primary SBC. Returned as `description`."New value: +"Label of 1-255 characters, e.g. Primary SBC. Returned by Vobiz as `description`."
    • changedInput schema / properties / priority / description
      Previous value: -"Routing priority: lower is tried first (1 = primary, 2+ = failover)."New value: +"Routing priority, 1-1000: lower is tried first (1 = primary, 2+ = failover). URIs sharing a priority split traffic by weight."
    • changedInput schema / properties / sip_uri / description
      Previous value: -"sip:host, sip:host:port, sip:user@host or sip:user@host:port. Returned as `uri`."New value: +"SIP destination: sip:host, sip:host:port, sip:user@host or sip:user@host:port, e.g. sip:sbc.example.com:5060 (port 1-65535, host public). Returned by Vobiz as `uri`."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "created": {
      +      "const": true,
      +      "description": "True when the record was created by this call.",
      +      "type": "boolean"
      +    },
      +    "http_status": {
      +      "description": "HTTP status Vobiz answered with.",
      +      "type": "number"
      +    },
      +    "ok": {
      +      "description": "True on success. On a failure the result is isError with ok: false plus `error` (kind), `message`, `retryable` and sometimes `http_status`.",
      +      "type": "boolean"
      +    },
      +    "origination_uri": {
      +      "additionalProperties": {},
      +      "description": "The URI as Vobiz returned it.",
      +      "properties": {
      +        "account_id": {
      +          "description": "Owning account Auth ID.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "created_at": {
      +          "description": "Creation timestamp.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "description": {
      +          "description": "Label given as name when the URI was created.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "enabled": {
      +          "description": "False while the destination is switched off.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "id": {
      +          "description": "Origination URI UUID; use it as primary_uri_uuid or fallback_uri_uuid on a trunk or uri_id here.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "priority": {
      +          "description": "Failover order: lower is tried first.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "transport": {
      +          "description": "SIP transport used to reach it: udp, tcp or tls.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "updated_at": {
      +          "description": "Last-change timestamp.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "uri": {
      +          "description": "SIP destination, e.g. sip:sbc.example.com:5060.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "weight": {
      +          "description": "Load-balancing weight among URIs of the same priority (higher gets more traffic).",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "uri_id": {
      +      "description": "UUID of the new URI: use it as primary_uri_uuid or fallback_uri_uuid on a trunk. Null if Vobiz did not return one.",
      +      "type": [
      +        "string",
      +        "number",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observedv1.1.1

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: host validation rules (public FQDN/IPv4 only, private/loopback/.local rejected), the fact that weight and transport are set elsewhere, the return value (id), and the critical non-idempotency warning that every call adds a URI so retries should list first. This is exactly the behavioral context an agent needs for a destructive, non-idempotent write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the purpose and example come first, then routing/priority guidance, then constraints, then gating and retry safety. Every sentence carries operational information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers host validation, gating, non-idempotency, and retry guidance; the output schema already carries return details, and the description still notes the returned id. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already fully documented, and the description's priority explanation largely repeats the schema. The note that weight and transport are console-only adds scope clarity but is not parameter semantics per se, so the baseline 3 stands.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Add) and resource (SIP origination URI) with a concrete example 'sip:sbc.example.com:5060', and distinguishes itself from siblings by naming update_sip_trunk and list_origination_uris. An agent immediately understands this creates an outbound routing destination.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use which priority (1 = primary, 2+ = failover), how to attach the result to a trunk, and when to check list_origination_uris before retrying. It also names the gating conditions (VOBIZ_ENABLE_PROVISIONING, confirm: true), leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools