Skip to main content
Glama

HandledIQ: find and book home service

Server Details

Find a home service shop near a US house: its book price, real open times, a held time.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 8 tools

Disambiguation4/5

Most tools map to clearly distinct lifecycle steps: find shops, get prices, hold a time, check status, cancel, move, or verify a record. The boundary between get_quote and request_service is somewhat subtle because both involve showing one shop's prices/times, though the descriptions distinguish automated quote retrieval from opening a user-facing quote window.

Naming Consistency4/5

Names consistently use snake_case and are mostly verb_noun or verb_object patterns such as find_help, get_quote, hold_time, cancel_booking, move_booking, request_service, and verify_record. booking_status is the main deviation, being noun_status rather than a verb-led action name, but it remains readable and predictable.

Tool Count5/5

Eight tools is well-scoped for a home-service booking workflow. Each tool covers a meaningful step or check without excessive fragmentation.

Completeness4/5

The surface covers the core lifecycle: discovery, pricing, holding a time, status tracking, cancellation, rescheduling, and verification. Booking itself is intentionally completed by the user via a texted link, but there are minor gaps around listing all bookings or retrieving richer account history beyond the current status flow.

Available Tools

8 tools
booking_statusCheck the bookingA
Read-onlyIdempotent
Inspect

Says where a quote stands: priced, waiting on the person (with minutes left on the hold), booked (when, and with which tech), they said it was not them, or the hold ran out. Once booked, it also says whether the tech is on the way, arrived (and whether inside the time promised), finished, or the visit was cancelled. Use it after hold_time, or later, to tell the person how it went. Reads only; sends nothing.

NameRequiredDescriptionDefault
quote_idYesThe quote_id price gave.

Output Schema

NameRequiredDescription
saidYes
stateYes
visitNoThe booked visit as it stands now: its time, its tech, and what has happened since the yes.
changeNoA change the person's assistant asked for once booked: a cancel (done at once, free under the shop's terms), or a move (the shop texted the person a link, and done once they picked a new time).
quote_idYes
held_untilNo
minutes_leftNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the description's 'Reads only; sends nothing' mostly echoes them. It does add genuine behavioral context beyond annotations: the state machine of a quote (hold minutes remaining, whether the arrival was inside the promised window, cancellation outcomes), which tells the agent what the response will report.

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 packs a lot of state information into three tight sentences. The colloquial phrasing ('they said it was not them') and one long enumerative first sentence cost it a point, but nothing is wasted.

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

Completeness4/5

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

An output schema exists, so return values needn't be spelled out, yet the description usefully characterizes the status progression an agent will see. Combined with annotations covering safety and a fully documented single param, the definition is complete enough to invoke correctly; only explicit alternative-routing guidance is absent.

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?

Single required parameter with 100% schema description coverage, so the schema already documents quote_id ('The quote_id price gave'). The description never mentions parameters or adds format/sourcing detail beyond the schema, so the baseline of 3 applies.

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+resource ('says where a quote stands') and enumerates the concrete states it reports (priced, waiting on person with hold minutes, booked with tech, cancelled by customer, hold expired) plus post-booking states (on the way, arrived, finished, cancelled). This distinguishes it clearly from siblings like cancel_booking, move_booking, and hold_time.

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

Usage Guidelines4/5

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

Explicitly says when to call it: 'Use it after hold_time, or later, to tell the person how it went,' which ties it to a specific sibling and lifecycle point. It does not state when NOT to use it (e.g., prefer move_booking/cancel_booking for changes), so it stops just short of full when/when-not guidance.

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

cancel_bookingCancel the visitA
DestructiveIdempotent
Inspect

Cancels a booked visit when the person asks and confirms in this conversation, free under the shop's own terms: within 3 days of booking, and before the visit; nothing is owed. Side effects: the visit comes off the shop's schedule, and the shop texts the person that their assistant cancelled it. It cannot be undone here: to book again, get a new quote. Past those terms the person calls the shop. Calling again sends no second text.

NameRequiredDescriptionDefault
quote_idYesThe quote_id find_help or get_quote gave, for a booked visit.

Output Schema

NameRequiredDescription
saidYes
stateYes
visitNoThe booked visit as it stands now: its time, its tech, and what has happened since the yes.
changeNoA change the person's assistant asked for once booked: a cancel (done at once, free under the shop's terms), or a move (the shop texted the person a link, and done once they picked a new time).
quote_idYes
held_untilNo
minutes_leftNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: names the side effects (visit removed from the shop's schedule, person receives a cancellation text), states the action is irreversible here, and clarifies idempotency behavior ('calling again sends no second text'). Confirms destructive/open-world nature declared in annotations.

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 its condition, and every sentence carries distinct information (terms, side effects, irreversibility, no-second-text). The single dense paragraph is slightly run-on, but there is 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 preconditions, terms, side effects, reversibility, and repeat-call behavior for a destructive one-param mutation. With an output schema and full annotations also present, nothing needed to invoke it 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% and the quote_id description already explains its origin (find_help/get_quote for a booked visit), so the description adds nothing about the parameter. Baseline 3 applies when the schema carries the semantic load.

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 (cancels) and resource (a booked visit) plus the triggering condition (person asks and confirms in this conversation). An agent can distinguish it from siblings like move_booking, hold_time, or get_quote without inspecting schemas.

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 scopes when cancellation is free (within 3 days of booking, before the visit) and what to do otherwise (the person calls the shop). It also routes the re-booking case to the get_quote sibling and notes that repeat calls are a no-op.

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

find_helpFind a shop near the personAInspect

Finds up to 3 shops on HandledIQ near a US ZIP code that do what the person needs, soonest open time first: each with its own book prices (all in, US dollars), their terms, its soonest open times, its service record and a quote_id for hold_time. Use it when the person needs home service at a US house: heating and cooling, plumbing, electrical, roofing, pest control, junk removal, demolition and more. An empty list means no shop on HandledIQ takes that work near that ZIP yet. Sends nothing to anyone.

NameRequiredDescriptionDefault
dayNoOptional. The first day that works for the person, YYYY-MM-DD.
zipYesThe house's 5-digit US ZIP code.
needYesWhat the person needs, in a line, like: AC not cooling, a roof leak, ants in the kitchen, or a couch to haul away.
assistantYesYour own name, as the person you act for knows you, like ChatGPT, Claude or Muse. It goes in the text the shop sends them.
budget_dollarsNoOptional. The most the person wants to pay, in dollars.
include_signed_recordsNoOptional. true adds each shop's signed record and the keys to check it with verify_record, a few thousand characters per shop. Leave it out unless the person asks for proof.

Output Schema

NameRequiredDescription
zipYes
nextYes
shopsYes
check_recordsNoOnly with include_signed_records: how to check each signed_record, every shop's key by its issuer's address.

TDQS

A3.7/5.0
Behavior2/5

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

The description makes an explicit side-effect claim ('Sends nothing to anyone'), yet the annotations declare readOnlyHint=false, which tells the agent the call may modify state. Those two signals pull in opposite directions, and the annotation set also looks boilerplate (idempotentHint=false and openWorldHint=false for a pure lookup). The rich disclosure of what is returned (prices, terms, open times, service record, quote_id) is genuinely useful, but the read-only conflict is a real defect.

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 behavior (what is found, how many, in what order) before the when-to-use sentence. The first sentence is a long run-on and 'and more' is vague, but every sentence carries information and nothing is padded.

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

Completeness4/5

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

With an output schema present the description needn't enumerate return fields, yet it still covers the empty-result case, the US-household domain, and the no-notification behavior. It stops short of naming the follow-up tools (hold_time, get_quote) as next steps, which would have completed the workflow picture.

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 description coverage is 100%, so every parameter (need, zip, assistant, day, budget_dollars, include_signed_records) is already documented in the schema. The description adds little parameter-level detail beyond restating the ZIP/US-house scope and hinting at quote_id, so the baseline of 3 applies.

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 and resource ('Finds up to 3 shops on HandledIQ near a US ZIP code that do what the person needs') plus ordering and scope. It is clearly distinguishable from siblings like get_quote, request_service, and booking_status, which all operate on an already-selected shop.

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

Usage Guidelines4/5

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

Gives a concrete when-to-use condition ('the person needs home service at a US house: heating and cooling, plumbing, electrical...') and an edge case ('An empty list means no shop... takes that work near that ZIP yet'). It does not name alternatives or when-not-to-use, but the entry-point role is clear from context.

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

get_quoteGet one shop's price and open timesAInspect

Gets this shop's own book prices for what the person needs and its next real open times. Use it when the person wants a price or a time from this shop. Returns a quote_id for hold_time, the prices (all in, US dollars), their terms and up to 6 open times. visit true means no fixed price fits exactly, so the price is the shop's visit to find the problem. A price over the owner's limit waits for the owner; work outside the shop's trade gets no quote. Sends nothing to anyone. The shop is the one business_id names; kind is one of the kinds request_service gave, or leave it out and say the need in words.

NameRequiredDescriptionDefault
dayNoOptional. The first day that works for the person, YYYY-MM-DD; times start that day.
kindNoOptional. One of the shop's kinds of work, as request_service gave them (work[].kind).
needYesWhat the person needs, in a line, like: AC check, a roof leak, ants in the kitchen, or a couch to haul away.
assistantYesYour own name, as the person you act for knows you, like ChatGPT, Claude or Muse. It goes in the text the shop sends them.
business_idYesThe shop's business_id: its provider_business_id in HandledIQ's business feed, or a find_help answer's.
budget_dollarsNoOptional. The most the person wants to pay, in dollars.

Output Schema

NameRequiredDescription
nextYes
shopYes
termsYesThe terms every price here comes with: all in with no fees, paid after the work, and free to cancel within cancel_free_days of booking, before the visit.
timesYes
visitNo
pricesYes
currencyYesEvery amount is US dollars.
quote_idYesHolds a time with hold_time. Null when the shop does not do that kind of work.
holds_timesYes
waits_for_ownerNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false, destructiveHint=false, openWorldHint=false, idempotentHint=false; the description goes well beyond that by disclosing side effects and business rules: a quote_id is produced for later hold_time, visit=true means no fixed price fits and the price becomes an on-site visit, prices over the owner's limit wait for the owner, out-of-trade work returns no quote, and nothing is sent to anyone. That is the kind of context an agent cannot get from structured fields.

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?

Purpose is front-loaded in sentence one and every following sentence carries a distinct rule (visit semantics, owner-limit, trade scope, no notifications, parameter sourcing). It is dense and uses some clipped fragments, but no sentence is 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?

An output schema exists, yet the description still frames the important returns (quote_id for hold_time, all-in USD prices, terms, up to 6 open times) and explains the visit flag, which is the non-obvious part. Combined with the annotations, an agent has everything needed to call and interpret it.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds relational meaning: business_id identifies the target shop, `kind` should mirror what request_service returned or be omitted, and `need` in words is the fallback when kind is left out. That clarifies the interplay between the two conceptually overlapping parameters beyond their individual schema blurbs.

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?

The first sentence names a specific verb (Gets) and resource (this shop's book prices and next real open times), scoped to one business. It distinguishes itself from siblings by referencing request_service (source of `kind`), find_help (source of business_id) and hold_time (consumer of the returned quote_id).

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

Usage Guidelines4/5

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

"Use it when the person wants a price or a time from this shop" gives a clear positive trigger, and the mention that `kind` comes from request_service implies the pipeline context. It stops short of explicitly naming a sibling to prefer in other cases (e.g., find_help when the shop isn't known yet), so it is clear context without exclusions.

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

hold_timeHold a time and text the linkA
DestructiveIdempotent
Inspect

Holds one open time from a quote for 10 minutes and has the shop text the person one link to book it. Use it only once the person has picked a price and a time, given their name and US mobile number, and said to go ahead. Side effect: the shop sends one text to that number. Nothing is booked until the person taps Book on the shop's page, where they also type their street address; you cannot book for them. Calling again with the same choice while the time is held sends no second text. The quote_id may come from any shop find_help or get_quote gave.

NameRequiredDescriptionDefault
nameYesThe person's name, as they gave it.
mobileYesThe person's US mobile number, with its area code, as they gave it. The shop texts it once.
time_idYesOne of the quote's times, by its time_id.
quote_idYesThe quote_id price gave.
option_idYesOne of the quote's prices, by its option_id.

Output Schema

NameRequiredDescription
saidYes
stateYes
visitNoThe booked visit as it stands now: its time, its tech, and what has happened since the yes.
changeNoA change the person's assistant asked for once booked: a cancel (done at once, free under the shop's terms), or a move (the shop texted the person a link, and done once they picked a new time).
quote_idYes
held_untilNo
minutes_leftNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the mutation/safety profile is partly given. The description adds real context beyond them: exactly one text is sent, nothing is actually booked until the person taps Book and enters their own address, and re-calling with the same choice sends no second text. It does not explain what the destructiveHint actually entails (e.g. the time is blocked from others during the hold), which is the one remaining gap.

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?

Front-loaded with the action and duration, then preconditions, then side effects and edge cases. Every sentence carries distinct information; nothing is filler or repeated from the schema.

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?

With five required params, full schema coverage, an output schema, and annotations, the description fills the remaining gaps an agent needs: preconditions, the one-text side effect, the idempotent repeat behavior, and the fact that booking happens outside this tool. Nothing material is missing.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds provenance the schema lacks: quote_id may come from any shop find_help or get_quote returned, and option_id/time_id are framed as selections from that quote. This meaningfully helps cross-tool chaining rather than restating field descriptions.

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, resource and scope: hold one open time from a quote for 10 minutes and trigger a single booking-link text. It is immediately distinguishable from siblings like get_quote, booking_status, or cancel_booking, and it names those related tools when explaining where quote_id comes from.

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 preconditions: use only once the person has picked a price and time, supplied name and US mobile, and said to go ahead. It also states a hard exclusion ('you cannot book for them') and explains the repeat-call case, so the agent knows both when and when not to call.

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

move_bookingAsk to move the visitA
DestructiveIdempotent
Inspect

For a booked visit the person wants at another time: the shop texts the person one link to pick a new time when the same tech is free, and the visit moves only when they pick one. Side effect: one text to the person. Nothing changes on your word; booking_status shows the new time once they pick. Asked again within 10 minutes, it sends no second text.

NameRequiredDescriptionDefault
quote_idYesThe quote_id find_help or get_quote gave, for a booked visit.

Output Schema

NameRequiredDescription
saidYes
stateYes
visitNoThe booked visit as it stands now: its time, its tech, and what has happened since the yes.
changeNoA change the person's assistant asked for once booked: a cancel (done at once, free under the shop's terms), or a move (the shop texted the person a link, and done once they picked a new time).
quote_idYes
held_untilNo
minutes_leftNo

TDQS

A4.1/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 exact side effect (one text), the fact that nothing changes until the person picks, where the new state surfaces (booking_status), and the 10-minute no-duplicate-text window. This explains the idempotentHint and destructiveHint in operational terms an agent can act on.

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-loads the scenario, then layers side effect, state behavior, and dedup window with no filler. The dense compound first sentence is slightly run-on but every clause earns its place.

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

Completeness4/5

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

Given an output schema exists, return values needn't be explained; the description covers trigger, side effects, and idempotency well. It leaves a minor gap in not routing the agent to cancel_booking or booking_status for adjacent intents, but is otherwise sufficient for correct invocation.

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% with a single documented quote_id, so the schema carries parameter meaning. The description adds no syntax or format detail beyond what the schema already states, matching the baseline 3.

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

Purpose4/5

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

States a specific verb+resource ('move' a booked visit) and explains the two-step flow precisely, so an agent knows exactly what the tool initiates. It doesn't explicitly name a sibling (e.g., cancel_booking) as the alternative, so sibling differentiation relies on the reader inferring it.

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

Usage Guidelines4/5

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

The opening clause gives a clear when-to-use condition ('For a booked visit the person wants at another time'), and the 10-minute dedup note implies a re-invocation context. No explicit when-not or named alternative is provided, so it falls short of a 5.

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

request_serviceGet a quoteA
Read-onlyIdempotent
Inspect

Opens HandledIQ's quote window on one shop for the person to use themselves: they pick what they need, see the shop's own book price and real open times, and hold a time. Use it when the person wants to see one shop's prices and pick a time on screen, given its business_id. Returns who the shop is and the work it prices. Sends nothing; a text goes only if the person holds a time in the window.

NameRequiredDescriptionDefault
business_idYesThe shop's business_id: its provider_business_id in HandledIQ's business feed, or a find_help answer's.

Output Schema

NameRequiredDescription
nextNo
shopYes
workYesThe shop's kinds of work, the three it prices most first, then Something else (visit).
phoneNo
rulesNo
tradeNo
price_pageYes
business_idYes
holds_timesYes
prices_answer_nowNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds genuinely useful behavior beyond that: it opens an interactive window the person drives, returns who the shop is and what it prices, and crucially sends nothing unless the person holds a time. That side-effect clarification is the kind of context annotations cannot express.

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?

The description is front-loaded with what happens (window opens, person drives it) and then the usage trigger and side-effect guarantee, with no filler sentences. It is dense but every clause carries information; only the run-on comma structure costs it a point.

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

Completeness4/5

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

An output schema exists and annotations cover safety, so return values and idempotence need little prose, and the description closes the biggest ambiguity by stating nothing is sent unless the person acts. The remaining gap is the unaddressed relationship to the sibling get_quote, which an agent must disambiguate on its own.

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?

There is a single parameter with 100% schema description coverage, and the schema already explains where business_id comes from (provider_business_id in the feed or a find_help answer). The description only says 'given its business_id', adding no syntax or sourcing detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a concrete verb and resource: it opens HandledIQ's quote window for a single shop and lets the person browse prices and hold a time. This clearly separates it from hold_time and from the sibling get_quote's likely programmatic return, but it never names or contrasts those siblings directly, so the differentiation must be inferred.

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

Usage Guidelines4/5

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

It states the triggering condition explicitly: use it when the person wants to see one shop's prices and pick a time on screen, given its business_id. There is no explicit when-not clause or named alternative (e.g., get_quote for a non-interactive quote), which is the main gap.

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

verify_recordCheck a signed recordA
Read-onlyIdempotent
Inspect

Checks a signed record from any HandledIQ shop (a house's, a technician's or a shop's): valid, with who signed it and the record it holds, or not valid and why. Anyone can make the same check with the key at the issuer's id.

NameRequiredDescriptionDefault
signedYesThe signed form a record came with (signed, or signed_record): a compact JWS, up to a million characters.

Output Schema

NameRequiredDescription
whyNo
validYes
issuerNo
recordNo
trustedNo
key_statusNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description goes beyond them by disclosing the result shape (valid vs. not valid with a reason, plus signer and payload) and the scope of accepted issuers, which is genuinely additive behavioral context.

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?

Two sentences with the outcome front-loaded; little waste. The parenthetical enumerating issuer types ('a house's, a technician's or a shop's') is slightly clunky and could be trimmed without losing meaning.

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 one-parameter verification tool with an output schema and rich annotations, the description covers the operation, the accepted input provenance, and the result semantics. Nothing an agent needs in order to invoke it correctly appears to be 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 description coverage is 100% for the single 'signed' parameter, including the JWS format and size limit, so the schema does the heavy lifting. The description reinforces that the input is a signed form attached to a record but adds nothing about format or constraints beyond the schema.

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 (checks/verifies) and resource (a signed record), plus the outcome: validity, the signer, and the record it holds, or the reason for invalidity. The scope ('from any HandledIQ shop — a house's, a technician's or a shop's') clearly separates it from unrelated siblings like booking_status and get_quote.

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

Usage Guidelines3/5

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

Usage is only implied: you pass a signed form to check it. The note that 'anyone can make the same check with the key at the issuer's id' gives useful context about reproducibility, but there is no explicit when-to-use, when-not-to, or routing against an alternative verification path.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedfind_help4 fields changed
      • addedOutput schema / properties / shops / items / properties / soonest / properties / time_zone
        Added value: +{
        +  "description": "The shop's time zone, like: America/Chicago.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / shops / items / properties / soonest / properties / when / description
        Added value: +"The time in the shop's own time zone (time_zone), like: Today, 8 to 10 AM or Thu, Oct 22, 8 to 10 AM. Today is the shop's today."
      • addedOutput schema / properties / shops / items / properties / times / items / properties / time_zone
        Added value: +{
        +  "description": "The shop's time zone, like: America/Chicago.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / shops / items / properties / times / items / properties / when / description
        Added value: +"The time in the shop's own time zone (time_zone), like: Today, 8 to 10 AM or Thu, Oct 22, 8 to 10 AM. Today is the shop's today."
    • Changedget_quote2 fields changed
      • addedOutput schema / properties / times / items / properties / time_zone
        Added value: +{
        +  "description": "The shop's time zone, like: America/Chicago.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / times / items / properties / when / description
        Added value: +"The time in the shop's own time zone (time_zone), like: Today, 8 to 10 AM or Thu, Oct 22, 8 to 10 AM. Today is the shop's today."
  2. 3 tool updates
    • Changedfind_help3 fields changed
      • changedInput schema / properties / assistant / description
        Previous value: -"Your own name, as the person you act for knows you, like Muse. It goes in the text the shop sends them."New value: +"Your own name, as the person you act for knows you, like ChatGPT, Claude or Muse. It goes in the text the shop sends them."
      • addedInput schema / properties / include_signed_records
        Added value: +{
        +  "description": "Optional. true adds each shop's signed record and the keys to check it with verify_record, a few thousand characters per shop. Leave it out unless the person asks for proof.",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / check_records / description
        Previous value: -"How to check each signed_record: every shop's key, by its issuer's address."New value: +"Only with include_signed_records: how to check each signed_record, every shop's key by its issuer's address."
    • Changedget_quote1 field changed
      • changedInput schema / properties / assistant / description
        Previous value: -"Your own name, as the person you act for knows you, like Muse. It goes in the text the shop sends them."New value: +"Your own name, as the person you act for knows you, like ChatGPT, Claude or Muse. It goes in the text the shop sends them."
    • Changedhold_time5 fields changed
      • changedInput schema / properties / mobile / description
        Previous value: -"The person's US mobile number, with its area code. The shop texts it once."New value: +"The person's US mobile number, with its area code, as they gave it. The shop texts it once."
      • changedInput schema / properties / name / description
        Previous value: -"The person's name."New value: +"The person's name, as they gave it."
      • removedInput schema / properties / street
        Removed value: -{
        -  "description": "The street address of the house, with its number.",
        -  "type": "string"
        -}
      • removedInput schema / properties / unit
        Removed value: -{
        -  "description": "Optional. The unit or apartment.",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "quote_id",
        -  "option_id",
        -  "time_id",
        -  "name",
        -  "mobile",
        -  "street"
        -]New value: +[
        +  "quote_id",
        +  "option_id",
        +  "time_id",
        +  "name",
        +  "mobile"
        +]
  3. 6 tool updates
    • Changedbooking_status1 field changed
      • addedOutput schema / properties / change
        Added value: +{
        +  "description": "A change the person's assistant asked for once booked: a cancel (done at once, free under the shop's terms), or a move (the shop texted the person a link, and done once they picked a new time).",
        +  "properties": {
        +    "asked": {
        +      "enum": [
        +        "cancel",
        +        "move"
        +      ],
        +      "type": "string"
        +    },
        +    "asked_at": {
        +      "format": "date-time",
        +      "type": "string"
        +    },
        +    "done": {
        +      "type": "boolean"
        +    },
        +    "texted_at": {
        +      "format": "date-time",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "asked",
        +    "asked_at",
        +    "done"
        +  ],
        +  "type": "object"
        +}
    • Addedcancel_booking
    • Changedfind_help3 fields changed
      • addedOutput schema / properties / shops / items / properties / currency
        Added value: +{
        +  "description": "Every amount is US dollars.",
        +  "enum": [
        +    "USD"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / shops / items / properties / terms
        Added value: +{
        +  "description": "The terms every price here comes with: all in with no fees, paid after the work, and free to cancel within cancel_free_days of booking, before the visit.",
        +  "properties": {
        +    "all_in": {
        +      "type": "boolean"
        +    },
        +    "cancel_free_days": {
        +      "type": "integer"
        +    },
        +    "fees_cents": {
        +      "type": "integer"
        +    },
        +    "pay": {
        +      "enum": [
        +        "after_the_work"
        +      ],
        +      "type": "string"
        +    },
        +    "words": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "all_in",
        +    "fees_cents",
        +    "pay",
        +    "cancel_free_days",
        +    "words"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / properties / shops / items / required
        Previous value: -[
        -  "shop",
        -  "business_id",
        -  "quote_id",
        -  "prices",
        -  "soonest",
        -  "door"
        -]New value: +[
        +  "shop",
        +  "business_id",
        +  "quote_id",
        +  "currency",
        +  "prices",
        +  "terms",
        +  "soonest",
        +  "door"
        +]
    • Changedget_quote3 fields changed
      • addedOutput schema / properties / currency
        Added value: +{
        +  "description": "Every amount is US dollars.",
        +  "enum": [
        +    "USD"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / terms
        Added value: +{
        +  "description": "The terms every price here comes with: all in with no fees, paid after the work, and free to cancel within cancel_free_days of booking, before the visit.",
        +  "properties": {
        +    "all_in": {
        +      "type": "boolean"
        +    },
        +    "cancel_free_days": {
        +      "type": "integer"
        +    },
        +    "fees_cents": {
        +      "type": "integer"
        +    },
        +    "pay": {
        +      "enum": [
        +        "after_the_work"
        +      ],
        +      "type": "string"
        +    },
        +    "words": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "all_in",
        +    "fees_cents",
        +    "pay",
        +    "cancel_free_days",
        +    "words"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "quote_id",
        -  "shop",
        -  "prices",
        -  "times",
        -  "holds_times",
        -  "next"
        -]New value: +[
        +  "quote_id",
        +  "shop",
        +  "currency",
        +  "prices",
        +  "terms",
        +  "times",
        +  "holds_times",
        +  "next"
        +]
    • Changedhold_time1 field changed
      • addedOutput schema / properties / change
        Added value: +{
        +  "description": "A change the person's assistant asked for once booked: a cancel (done at once, free under the shop's terms), or a move (the shop texted the person a link, and done once they picked a new time).",
        +  "properties": {
        +    "asked": {
        +      "enum": [
        +        "cancel",
        +        "move"
        +      ],
        +      "type": "string"
        +    },
        +    "asked_at": {
        +      "format": "date-time",
        +      "type": "string"
        +    },
        +    "done": {
        +      "type": "boolean"
        +    },
        +    "texted_at": {
        +      "format": "date-time",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "asked",
        +    "asked_at",
        +    "done"
        +  ],
        +  "type": "object"
        +}
    • Addedmove_booking
  4. 6 tool updates
    • First observedbooking_status
    • First observedfind_help
    • First observedget_quote
    • First observedhold_time
    • First observedrequest_service
    • First observedverify_record

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Home Services MCP by HireNimbus lets AI agents find, compare, and book verified local pros for handyman, renovation, HVAC, plumbing, electrical, and landscaping jobs in supported US metro markets.
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables voice assistants to find nearby service providers, connect users to live video representatives for natural conversation, and handle appointment booking. It also returns confirmed bookings so the assistant can add them to its calendar.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to submit and track local household-service requests such as house cleaning or pest control, validating details and passing each as a routed opportunity to external providers or buyer networks. Exposes service-discovery, submission, and status-check tools so those requests flow through one consistent intake pipeline.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to place real phone calls to US businesses in plain English — booking, canceling or rescheduling tables and appointments, verifying details, checking stock and requesting quotes — with IVR navigation and hold handling done automatically. Returns a labeled outcome, full transcript and recording, and can find candidate businesses when no phone number is known.
    110
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources