Skip to main content
Glama
hail-hq

hail

Official

Buy a phone number

acquire_number
DestructiveIdempotent

Buys a real phone number using a valid quote, charges setup and first-month fees, and returns details needed to route it to an agent.

Instructions

Buys a real phone number. It charges the setup fee and the first month now and renews monthly. Call quote_numbers first. Pass the offer's quote_id, country_code, number_type, and confirm_total_cents = monthly_cents + setup_cents from that offer. If the quote expired or the price changed (409) you get an error: quote again. Only buy when your user asked for this number. After buying, call route_number to point it at an agent.

    A quote buys at most one number. After a timeout, retry with the same
    quote_id and idempotency_key, or check list_numbers. Never request a
    new quote after a timeout.

    ``idempotency_key`` is optional; to retry after a timeout or a
    5xx, pass the ``idempotency_key`` that result returned, so the number
    is bought once. A 4xx error returns no key: the API remembers that
    failure under it, so drop it and quote again.

    ``verification_id`` picks which approved verification buys a number
    that needs one: the ``id`` of an approved entry in the offer's
    ``verifications``. Pass it when more than one is approved: show the
    user each ``subject_name`` (the person's or company's name) and ask
    which. With one approved, it is used. ``subject_type`` (``person`` or
    ``business``) is optional: it keeps only that kind. A 422 on
    ``verification_id`` means several are approved and none was picked,
    or the id is not an approved verification for this number.

    Returns the number (``id``, ``e164``, ``provisioning_state``,
    ``verification_id``, ``subject_name``, ...)
    plus ``idempotency_key``, or ``{"error": "<message>",
    "idempotency_key": ...}``.

Input Schema

NameRequiredDescriptionDefault
quote_idYes
number_typeYes
country_codeYes
subject_typeNo
idempotency_keyNo
verification_idNo
confirm_total_centsYes

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv0.30.0
    • removedInput schema / properties / provider
      Removed value: -{
      -  "default": "auto",
      -  "title": "Provider",
      -  "type": "string"
      -}
    • addedInput schema / properties / subject_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Subject Type"
      +}
    • addedInput schema / properties / verification_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Verification Id"
      +}
  2. First observedv0.29.0

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the financial effect (setup fee + first month charged now, renews monthly), the 409 price-changed/expired-quote path, the 422 verification path, and the timeout/5xx retry contract. Annotations already flag destructive/idempotent, and the description explains the mechanics those hints imply.

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

Conciseness4/5

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

Front-loaded with the core action and cost, then organized into short paragraphs by concern (retry, idempotency, verification, return). It is long, and the idempotency/timeout material is restated across two paragraphs, but nearly every sentence carries operational information.

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?

For a destructive, money-charging, idempotency-sensitive purchase tool, the description covers prerequisites, cost, retry semantics, verification selection, error codes, and the return shape (including the error envelope). Even with an output schema present, the explicit return contract removes ambiguity about the idempotency_key field.

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

Parameters4/5

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

With 0% schema coverage the description carries the load and does well: it defines confirm_total_cents as monthly_cents + setup_cents, explains quote_id provenance, the idempotency_key retry contract, and verification_id/subject_type semantics with the 422 trigger. country_code and number_type are only implied by 'from that offer', so their expected values are not spelled out.

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?

Opens with a specific verb+resource ('Buys a real phone number') and immediately situates it in the workflow between quote_numbers and route_number. An agent can distinguish it from quoting, routing, and releasing without inspecting any schema.

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?

Explicit when-to-use ('only buy when your user asked for this number'), mandatory prerequisite ('call quote_numbers first'), and required follow-up ('after buying, call route_number'). It also states when NOT to re-quote after a timeout, naming the alternative (retry with same key, or check list_numbers).

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