HandledIQ: find and book home service

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

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
90%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,171Tokens (tool definitions)
~5.0 KBTypical response size
Significant attention impact (2.48% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "find-help": {
      "url": "https://app.handlediq.com/agents/mcp"
    }
  }
}

Remote endpoints

https://app.handlediq.com/agents/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢find_help(need, zip, assistant, budget_dollars, day)

The shops on HandledIQ near a US ZIP code that can do what the person needs: each with its book prices, its soonest open times, its signed record and a quote_id to hold a time with. Soonest first, three at most.

Input Schema

{
  "type": "object",
  "properties": {
    "need": {
      "type": "string",
      "description": "What the person needs, in a line, like: AC not cooling, a roof leak, ants in the kitchen, or a couch to haul away."
    },
    "zip": {
      "type": "string",
      "description": "The house's 5-digit US ZIP code."
    },
    "assistant": {
      "type": "string",
      "description": "Your own name, as the person you act for knows you, like Muse. It goes in the text the shop sends them."
    },
    "budget_dollars": {
      "type": "number",
      "description": "Optional. The most the person wants to pay, in dollars."
    },
    "day": {
      "type": "string",
      "description": "Optional. The first day that works for the person, YYYY-MM-DD."
    }
  },
  "required": [
    "need",
    "zip",
    "assistant"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "zip": {
      "type": "string"
    },
    "shops": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "shop": {
            "type": "string"
          },
          "business_id": {
            "type": "string"
          },
          "quote_id": {
            "type": "string"
          },
          "visit": {
            "type": "boolean"
          },
          "prices": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "option_id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "detail": {
                  "type": "string"
                },
                "price_cents": {
                  "type": "integer"
                },
                "price": {
                  "type": "string"
                },
                "within_budget": {
                  "type": "boolean"
                }
              },
              "required": [
                "option_id",
                "name",
                "price_cents",
                "price"
              ]
            }
          },
          "soonest": {
            "type": "object",
            "properties": {
              "time_id": {
                "type": "string"
              },
              "when": {
                "type": "string"
              },
              "label": {
                "type": "string",
                "description": "The time as a button says it, like: Wed 8 to 10 AM."
              },
              "starts_at": {
                "type": "string",
                "format": "date-time"
              },
              "ends_at": {
                "type": "string",
                "format": "date-time"
              },
              "tech": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "time_id",
              "when",
              "starts_at",
              "ends_at"
            ]
          },
          "times": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "time_id": {
                  "type": "string"
                },
                "when": {
                  "type": "string"
                },
                "label": {
                  "type": "string",
                  "description": "The time as a button says it, like: Wed 8 to 10 AM."
                },
                "starts_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "ends_at": {
                  "type": "string",
                  "format": "date-time"
                },
                "tech": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "time_id",
                "when",
                "starts_at",
                "ends_at"
              ]
            }
          },
          "holds_times": {
            "type": "boolean"
          },
          "record": {
            "type": [
              "object",
              "null"
            ],
            "description": "The shop's service record: counts from its own records (work finished, callbacks by cause, arrivals kept, houses served again, homeowner ratings, guarantee), each with how many records it rests on. Null until its owner shares it."
          },
          "signed_record": {
            "type": "string",
            "description": "The record as a W3C Verifiable Credential in a compact JWS (typ vc+jwt, alg Ed25519) over its RFC 8785 form."
          },
          "door": {
            "type": "string"
          }
        },
        "required": [
          "shop",
          "business_id",
          "quote_id",
          "prices",
          "soonest",
          "door"
        ]
      }
    },
    "check_records": {
      "type": "object",
      "description": "How to check each signed_record: every shop's key, by its issuer's address."
    },
    "next": {
      "type": "string"
    }
  },
  "required": [
    "zip",
    "shops",
    "next"
  ]
}
🟢hold_time(quote_id, option_id, time_id, name, mobile, ...)

Holds one open time from a quote for 10 minutes and has the shop text the person a link to book it or say it was not them. Nothing is booked until the person taps yes. The same call again, while it is held, texts no one. The quote_id may come from any shop find_help or get_quote gave.

Input Schema

{
  "type": "object",
  "properties": {
    "quote_id": {
      "type": "string",
      "description": "The quote_id price gave."
    },
    "option_id": {
      "type": "string",
      "description": "One of the quote's prices, by its option_id."
    },
    "time_id": {
      "type": "string",
      "description": "One of the quote's times, by its time_id."
    },
    "name": {
      "type": "string",
      "description": "The person's name."
    },
    "mobile": {
      "type": "string",
      "description": "The person's US mobile number, with its area code. The shop texts it once."
    },
    "street": {
      "type": "string",
      "description": "The street address of the house, with its number."
    },
    "unit": {
      "type": "string",
      "description": "Optional. The unit or apartment."
    }
  },
  "required": [
    "quote_id",
    "option_id",
    "time_id",
    "name",
    "mobile",
    "street"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "quote_id": {
      "type": "string"
    },
    "state": {
      "type": "string",
      "enum": [
        "priced",
        "waits_for_owner",
        "waiting",
        "ran_out",
        "declined",
        "booked",
        "canceled",
        "closed"
      ]
    },
    "said": {
      "type": "string"
    },
    "held_until": {
      "type": "string",
      "format": "date-time"
    },
    "minutes_left": {
      "type": "integer"
    },
    "visit": {
      "type": "object",
      "description": "The booked visit as it stands now: its time, its tech, and what has happened since the yes.",
      "properties": {
        "when": {
          "type": "string"
        },
        "starts_at": {
          "type": "string",
          "format": "date-time"
        },
        "ends_at": {
          "type": "string",
          "format": "date-time"
        },
        "tech": {
          "type": [
            "string",
            "null"
          ]
        },
        "now": {
          "type": "string",
          "enum": [
            "scheduled",
            "on_the_way",
            "arrived",
            "finished",
            "canceled"
          ],
          "description": "Where the visit has got to, from the tech's own taps and the visit's close."
        },
        "on_the_way_at": {
          "type": "string",
          "format": "date-time"
        },
        "arrived_at": {
          "type": "string",
          "format": "date-time"
        },
        "finished_at": {
          "type": "string",
          "format": "date-time"
        },
        "canceled_at": {
          "type": "string",
          "format": "date-time"
        },
        "promise": {
          "type": "object",
          "description": "The time promised now, and how the arrival measured against it: open (its time has not ended), kept (arrived inside it), early or late (by minutes), missed, canceled, or unrecorded.",
          "properties": {
            "window_start": {
              "type": "string",
              "format": "date-time"
            },
            "window_end": {
              "type": "string",
              "format": "date-time"
            },
            "standing": {
              "type": "string",
              "enum": [
                "open",
                "kept",
                "early",
                "late",
                "missed",
                "canceled",
                "unrecorded"
              ]
            },
            "minutes": {
              "type": "integer"
            }
          },
          "required": [
            "window_start",
            "window_end",
            "standing"
          ]
        }
      },
      "required": [
        "when",
        "starts_at",
        "ends_at"
      ]
    }
  },
  "required": [
    "quote_id",
    "state",
    "said"
  ]
}
🟢booking_status(quote_id)

Where a quote stands: priced, waiting on the person (with minutes left on the hold), booked (when and with whom), said it was not them, or the hold ran out. Once booked, what happened after: the tech on the way, arrived (and whether inside the time promised), the visit finished, or canceled by the shop.

Input Schema

{
  "type": "object",
  "properties": {
    "quote_id": {
      "type": "string",
      "description": "The quote_id price gave."
    }
  },
  "required": [
    "quote_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "quote_id": {
      "type": "string"
    },
    "state": {
      "type": "string",
      "enum": [
        "priced",
        "waits_for_owner",
        "waiting",
        "ran_out",
        "declined",
        "booked",
        "canceled",
        "closed"
      ]
    },
    "said": {
      "type": "string"
    },
    "held_until": {
      "type": "string",
      "format": "date-time"
    },
    "minutes_left": {
      "type": "integer"
    },
    "visit": {
      "type": "object",
      "description": "The booked visit as it stands now: its time, its tech, and what has happened since the yes.",
      "properties": {
        "when": {
          "type": "string"
        },
        "starts_at": {
          "type": "string",
          "format": "date-time"
        },
        "ends_at": {
          "type": "string",
          "format": "date-time"
        },
        "tech": {
          "type": [
            "string",
            "null"
          ]
        },
        "now": {
          "type": "string",
          "enum": [
            "scheduled",
            "on_the_way",
            "arrived",
            "finished",
            "canceled"
          ],
          "description": "Where the visit has got to, from the tech's own taps and the visit's close."
        },
        "on_the_way_at": {
          "type": "string",
          "format": "date-time"
        },
        "arrived_at": {
          "type": "string",
          "format": "date-time"
        },
        "finished_at": {
          "type": "string",
          "format": "date-time"
        },
        "canceled_at": {
          "type": "string",
          "format": "date-time"
        },
        "promise": {
          "type": "object",
          "description": "The time promised now, and how the arrival measured against it: open (its time has not ended), kept (arrived inside it), early or late (by minutes), missed, canceled, or unrecorded.",
          "properties": {
            "window_start": {
              "type": "string",
              "format": "date-time"
            },
            "window_end": {
              "type": "string",
              "format": "date-time"
            },
            "standing": {
              "type": "string",
              "enum": [
                "open",
                "kept",
                "early",
                "late",
                "missed",
                "canceled",
                "unrecorded"
              ]
            },
            "minutes": {
              "type": "integer"
            }
          },
          "required": [
            "window_start",
            "window_end",
            "standing"
          ]
        }
      },
      "required": [
        "when",
        "starts_at",
        "ends_at"
      ]
    }
  },
  "required": [
    "quote_id",
    "state",
    "said"
  ]
}
🟢request_service(business_id)

Opens HandledIQ's quote window on one shop, for the person themselves: they pick what they need, see the shop's own book price and real open times, and hold a time; the shop texts them and only their tap books it. Returns who the shop is and the work it prices.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "type": "string",
      "description": "The shop's business_id: its provider_business_id in HandledIQ's business feed, or a find_help answer's."
    }
  },
  "required": [
    "business_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "type": "string"
    },
    "shop": {
      "type": "string"
    },
    "trade": {
      "type": [
        "string",
        "null"
      ]
    },
    "phone": {
      "type": "string"
    },
    "prices_answer_now": {
      "type": "boolean"
    },
    "holds_times": {
      "type": "boolean"
    },
    "price_page": {
      "type": "string"
    },
    "work": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "icon": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "label"
        ]
      },
      "description": "The shop's kinds of work, the three it prices most first, then Something else (visit)."
    },
    "next": {
      "type": "string"
    },
    "rules": {
      "type": "string"
    }
  },
  "required": [
    "business_id",
    "shop",
    "holds_times",
    "work",
    "price_page"
  ]
}
🟢get_quote(business_id, need, assistant, budget_dollars, day, ...)

The shop's own book prices for what the person needs and its next real open times. Returns a quote_id to hold a time with. visit: no fixed price for exactly that, so the price is the shop's visit to find the problem. A price over the shop's limit waits for the owner; work that is not the shop's trade gets no quote. 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.

Input Schema

{
  "type": "object",
  "properties": {
    "business_id": {
      "type": "string",
      "description": "The shop's business_id: its provider_business_id in HandledIQ's business feed, or a find_help answer's."
    },
    "need": {
      "type": "string",
      "description": "What the person needs, in a line, like: AC check, a roof leak, ants in the kitchen, or a couch to haul away."
    },
    "assistant": {
      "type": "string",
      "description": "Your own name, as the person you act for knows you, like Muse. It goes in the text the shop sends them."
    },
    "budget_dollars": {
      "type": "number",
      "description": "Optional. The most the person wants to pay, in dollars."
    },
    "day": {
      "type": "string",
      "description": "Optional. The first day that works for the person, YYYY-MM-DD; times start that day."
    },
    "kind": {
      "type": "string",
      "description": "Optional. One of the shop's kinds of work, as request_service gave them (work[].kind)."
    }
  },
  "required": [
    "business_id",
    "need",
    "assistant"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "quote_id": {
      "type": [
        "string",
        "null"
      ],
      "description": "Holds a time with hold_time. Null when the shop does not do that kind of work."
    },
    "shop": {
      "type": "string"
    },
    "waits_for_owner": {
      "type": "boolean"
    },
    "visit": {
      "type": "boolean"
    },
    "prices": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "option_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "price_cents": {
            "type": "integer"
          },
          "price": {
            "type": "string"
          },
          "within_budget": {
            "type": "boolean"
          }
        },
        "required": [
          "option_id",
          "name",
          "price_cents",
          "price"
        ]
      }
    },
    "times": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "time_id": {
            "type": "string"
          },
          "when": {
            "type": "string"
          },
          "label": {
            "type": "string",
            "description": "The time as a button says it, like: Wed 8 to 10 AM."
          },
          "starts_at": {
            "type": "string",
            "format": "date-time"
          },
          "ends_at": {
            "type": "string",
            "format": "date-time"
          },
          "tech": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "time_id",
          "when",
          "starts_at",
          "ends_at"
        ]
      }
    },
    "holds_times": {
      "type": "boolean"
    },
    "next": {
      "type": "string"
    }
  },
  "required": [
    "quote_id",
    "shop",
    "prices",
    "times",
    "holds_times",
    "next"
  ]
}
🟢verify_record(signed)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "signed": {
      "type": "string",
      "description": "The signed form a record came with (signed, or signed_record): a compact JWS, up to a million characters."
    }
  },
  "required": [
    "signed"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "valid": {
      "type": "boolean"
    },
    "trusted": {
      "type": "boolean"
    },
    "key_status": {
      "type": "string"
    },
    "issuer": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "record": {
      "type": "object"
    },
    "why": {
      "type": "string"
    }
  },
  "required": [
    "valid"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools