HandledIQ: find and book home service

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

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
100%
命名质量
90%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~3,171token 数(工具定义)
~5.0 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 2.48%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

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

远程端点

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

它能做什么

工具清单

工具(6)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢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.

输入模式

{
  "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
}

输出模式

{
  "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.

输入模式

{
  "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
}

输出模式

{
  "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.

输入模式

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

输出模式

{
  "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.

输入模式

{
  "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
}

输出模式

{
  "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.

输入模式

{
  "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
}

输出模式

{
  "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.

输入模式

{
  "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
}

输出模式

{
  "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"
  ]
}

社区

评价此服务器

证据

最近观测

已验证未记录版本6 个工具