Tool reference
Hum Broadband MCP version2.0.1 returns schema-version 4 objects with snake_case field names.
All tool inputs are closed: unknown fields and unsupported field combinations are rejected.
Download the released contract export for the complete
tools/list descriptions, JSON Schemas, runtime input-shape rules, and release provenance. The
scenario fixtures contain the synthetic examples used by these
pages.
This reference is frozen to letshum/hum-mcp commit
cd74ba9583c1c245638fa100a914f9cf85372dc7.
JSON Schema describes each field, while the runtime shape rules below describe which fields may be
sent together. A field being optional in a generated schema does not make every combination valid.
check_availability
Resolves an address and combines FCC area evidence with live provider qualification. It is
read-only and idempotent for the same continuation.
Accepted input shapes
Availability result
Each source has
status, checked_at, data_as_of, and an optional structured error. Source
status is checking, needs_information, complete, failed, or timed_out.
Each question has a question_id, prompt, type, optional choices, required, and
sensitivity. Question types are string, boolean, single_choice, and date.
Provider, plan, and offer fields
Hum serializes these public commercial facts through a closed allowlist. Internal provider data,
private rate identifiers, upstream transaction identifiers, and customer or contact values are not
included in plan or offer objects, validation reviews or change comparisons, or order receipts.
Money and fee amounts are integer cents with a three-letter currency code. Do not infer a regular
price, promotion length, installation fee, equipment fee, contract, speed, or data limit when its
field is null.
See Availability and offers for presentation rules.
validate_order
Creates or resumes a draft for one executable offer, collects the fields required by that offer,
refreshes its facts, and returns an exact review. It is non-destructive and idempotent for the same
draft state. It creates no order and sends no fulfillment request.
Accepted input shapes
details.customer can contain first name, last name, email, phone number, a four-digit service PIN,
date of birth, billing preferences, and a mailing address. details.installation can contain an
installation type, desired service start date, and first and second preferred date/time windows.
details.consents maps returned consent keys to booleans. details.internet_addons is the complete
equipment selection, expressed as returned option IDs and positive integer quantities.
Installation type is self or professional. A preferred installation date contains both a
date and one of these exact local-time windows:
8:00 AM - 12:00 PM (Local Time)12:00 PM - 5:00 PM (Local Time)
first and second. Billing preferences are
details.customer.preferences.paperless_billing and details.customer.preferences.auto_pay.
Send an explicit boolean for each requested preference; these fields are not payment authorization.
When Hum requests a mailing-address choice, send
details.customer.mailing_address.same_as_service. If it is false, also send line1, city,
state, and postal_code together; line2 remains optional.
The selected provider determines which fields are required. Do not assume that a PIN, birth date,
installation choice, preference, mailing address, or consent is universal. Hum never requests card
data, Social Security numbers, existing-account passwords, or payment authorization through this
tool.
Equipment selection
Validation can return up to 100equipment_options:
Each
details.internet_addons item contains only option_id and a positive integer quantity.
Send the complete desired selection. Omit the field to retain the current selection or initial
defaults; send [] to decline optional equipment. Dependent options can appear after their parent
is selected, so retain the parent when sending the next complete selection. Never send a price,
SKU, or private catalog identifier.
Customer-owned equipment, included provider equipment, and optional paid equipment are different
choices. A free provider gateway does not meet a customer-owned equipment request. Use returned
option names and catalog facts to check ownership; price or included status alone cannot prove
it. If the offer lacks the requested option, inspect another qualified offer or ask the customer
to choose. An empty option list alone does not prove the ISP has no equipment.
Validation result
Use exactly one input shape: start with
lookup_id and offer_id; poll with only checkout_id;
edit with checkout_id, the current expected_revision, and changed fields inside details.
While checking, wait at least retry_after_seconds before polling. Sending an edit while polling
increments the revision and restarts validation. After a stale-revision error, retrieve the
checkout with only checkout_id, wait if it is still checking, then edit at the returned revision.
Starting again with the same lookup and offer returns the existing draft.
required_fields is the contract definition, not a list of everything the customer must answer
again. Use field_errors for actual missing or invalid values and reuse facts already supplied.
For example, consents.privacy_policy in field_errors is sent as
details.consents.privacy_policy in an edit. If no specific field error is returned, do not assume
every required_fields path is missing or invent a value.
Review shapes
A ready validation returns a closedreview object:
An
offer_changed validation returns previous_offer, current_offer, and a non-empty
changed_fields list instead. When the cart changed, it can also return previous_cart and
current_cart, each with the selected plan, included products, one-time fees, total amount, and
optional bundle discount. Present the complete comparison and obtain a fresh decision before
continuing.
Reviews do not contain the customer’s name, contact details, mailing address, service PIN, or date
of birth. Present the review returned by the current revision; do not reconstruct it from earlier
availability data.
Distinguish the plan’s monthly price, recurring equipment charges, one-time fees, discounts, and
the returned cart total. The total is not necessarily the recurring monthly bill or payment due
now. Do not count an offer fee and an overlapping cart line twice. Preserve explicit auto-pay and
paperless-billing opt-outs; if no resulting price adjustment was returned, that adjustment is
unknown. Requested installation dates are preferences, not confirmed appointments. ready proves
technical validity, not that the cart matches the customer’s budget, speed, equipment, billing,
and installation requirements. Keep PINs, full birth dates, hashes, tokens, and checkout IDs out
of customer-facing prose.
create_order
Commits a ready validation after the host has presented the exact review and obtained the user’s
authorization. This tool has a side effect and is marked destructive. Its idempotency key makes an
identical replay refer to the same intended submission; it is not permission to retry an uncertain
network outcome blindly.
Accepted input shape
The checkout, validation token, terms hash, and idempotency key must agree. A new key does not make
a second order safe. After a timeout, disconnect, or lost response, call
get_order first.
get_order
Reads the latest persisted order and fulfillment evidence. It is read-only and idempotent.
Accepted input shape
get_order uses the opaque checkout ID, not the displayable order number.
Order result
create_order and get_order return the same order-envelope type.
See fulfillment states before displaying a status.
Errors
Hum can reject a malformed MCP request before a tool runs. Unsupported root fields, mixed input shapes, and other input-schema violations can produce MCPINVALID_PARAMS, with no tool result or
side effect. Malformed nested validate_order.details instead returns a tool response marked
isError with safe field paths and constraints, without echoing submitted values or unsupported
field names. This nested tool error is not a structured business result with status: "error".
A tool-result error uses status: "error" and this structure:
retryable: true does not override create-order recovery. If a create response is uncertain, call
get_order first and follow its persisted status and next_action.
Expiry and processing limits
These limits do not reserve provider inventory or guarantee that an offer, price, or serviceability
result will remain unchanged. Revalidate after an expiry and follow the returned next action.
