Skip to main content

Tool reference

Hum Broadband MCP version 2.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)
When preferred dates are required, provide both 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 100 equipment_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 closed review 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 MCP INVALID_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.