ctm-number-provisioner
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CTM_BASE_URL | No | Override the CTM API base URL. | https://api.calltrackingmetrics.com/api/v1 |
| CTM_ENV_FILE | No | Path to a credentials file containing named tokens. Only needed if using the multiple-account option. | ~/.ctm/env |
| CTM_ACCOUNT_ID | Yes | The CTM account ID to operate on. Always required. | |
| CTM_BASIC_AUTH | No | Raw base64 access:secret token for a single CTM account. Use this for Option A. | |
| CTM_TOKEN_NAME | No | Name of the line to select in the credentials file. Required when using the credentials-file option. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| whoamiA | Show which CTM account the server will act on, and where the token came from. Call this first and tell the user the resolved account name before buying anything: a token can map to a different account than its label suggests. |
| search_available_numbersA | Search available CTM tracking numbers before buying them. US/CA modes (searchby is inferred when omitted):
International: pass country (e.g. "GB") with pattern, and optionally operator="start_with" or "includes" (default includes). Returns compact rows: number, friendly_name, type, region, postal_code, lata, sms, mms, addr_required, hipaa_friendly. Show them to the user and let them pick before calling buy_numbers. |
| buy_numbersA | Purchase CTM tracking numbers. Real purchases cost money unless test=True. ALWAYS call with dry_run=True first (the default), show the user the plan (account name, count, numbers or area code), and get explicit confirmation before calling again with dry_run=False. There is no undo except release_numbers. Args: phone_numbers: Exact numbers from search_available_numbers. area_code: Let CTM pick numbers in this area code (see quantity). quantity: How many numbers to buy in area_code mode (1-500). test: Buy free test numbers. Default False (real, billable). dry_run: Plan only, no write calls. Default True. Returns rows with tpn_id; feed those tpn_ids to configure_numbers. |
| list_routing_targetsA | List everything a tracking number can be attached or routed to. Present these options to the user and let them choose; do not pick for them. With more than four options, show a numbered list and have the user reply with a number, or use search to narrow it down. Args: kinds: Subset of ["sources", "receiving_numbers", "queues", "voice_menus", "users", "conditional_routers", "geo_routes", "routing_tables", "voice_bots"]. Default: the first four. search: Case-insensitive substring filter on the row's fields. |
| configure_numbersB | Apply a name, tracking source, and one call route to one or many numbers. Get ids from list_routing_targets and let the user choose them. Pick at most ONE route: receiving_number_ids, queue_id (CQU...), voice_menu_id (VOM...), user_id (USR..., rings an agent), or route_override (raw {"virtual_phone_number": {...}} dial_routes body). Pick at most ONE route: receiving_number_ids, queue_id (CQU...), voice_menu_id (VOM...), user_id (USR...), conditional_router_id (smart router), geo_route_id (GEO...), routing_table_id (RTT...), voice_bot_id (VBT...), or route_override. Args: tpn_ids: Tracking numbers to configure (TPN...). name: Label. Supports {n} (1-based index) and {number} placeholders, e.g. "Google Ads {n}". custom_fields: Custom field values to set on each number. source_id: Tracking source id (TSO... or numeric) to attach the numbers to. receiving_number_ids: RPN ids to forward calls to. route_override: Raw dial_routes body; only if the named routes don't fit. |
| release_numbersA | Release (delete) tracking numbers. Destructive and irreversible. Use this only when the user explicitly asks, typically to clean up test numbers. Refuses unless confirm=True; ask the user first. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 6 tools
Each tool addresses a distinct stage of the number lifecycle: identity (whoami), discovery (search_available_numbers), acquisition (buy_numbers), routing options (list_routing_targets), configuration (configure_numbers), and removal (release_numbers). There is no meaningful overlap between tool purposes.
Most tools follow a clear verb_noun snake_case pattern (search_available_numbers, buy_numbers, list_routing_targets, configure_numbers, release_numbers). The lone exception is 'whoami', a standard Unix-style command name, which is a minor deviation rather than a systemic inconsistency.
Six tools provide a focused, well-scoped surface for a number-provisioning server. Each tool corresponds to a necessary step in the purchase-to-configuration workflow, and none feels redundant or extraneous.
The lifecycle is well covered from search/buy through configure/release, but there is no tool to list or inspect already-owned/configured numbers. This is a notable gap for agents needing to manage existing inventory, though the core provisioning flow can still be completed.