Booqer
Verified Booqer shops. A keyless consult is confirmed when the slot is open.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"booqer": {
"url": "https://booqer.ai/mcp"
}
}
}远程端点
https://booqer.ai/mcpstreamable-http它能做什么
工具清单
工具(8)
🟢search_businesses(query)
Use this when the user wants to find a local home-service business or appointment: plumber, HVAC, electrician, gate, fence, or security install, pole barn, or builder. Searches the Booqer directory of enrolled home-service businesses by name, category, service, location, or phone. Coverage is limited to enrolled businesses (currently Florida pole barn and gate/security). Returns id, name, domain, booking URL, and booking status. A trade that is not enrolled returns no businesses and the message says no shop is available. A city outside a business's service area is left out. booqer-demo-shop is omitted unless the query is that shop's exact name or id.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "What the user wants found. Examples: \"pole barn Clermont\", \"gate repair Winter Garden\", \"plumber Orlando\". At least 2 characters."
}
},
"required": [
"query"
]
}输出模式
{
"type": "object",
"properties": {
"businesses": {
"type": "array",
"description": "Matching businesses. Empty when none are enrolled for that search."
},
"available": {
"type": "boolean",
"description": "False when no shop is available."
},
"message": {
"type": "string",
"description": "Says no shop is available when the list is empty."
}
},
"required": [
"businesses"
],
"description": "Search hits. available is false when no enrolled shop matches."
}🟢get_business(shop_id)
Use this when the user wants to read one enrolled local home-service business and search_businesses or resolve_business already returned its id. Returns one enrolled shop as JSON: id, brand, legal_name, page, booking_url, phone when published, sms, services as id and name, hours, timezone, verification status and verify_url, and booking_rules and emergency_phone when that shop has them.
输入模式
{
"type": "object",
"properties": {
"shop_id": {
"type": "string",
"description": "Enrolled shop id from search_businesses. Examples: florida-pole-barn, florida-security-concepts, booqer-demo-shop."
}
},
"required": [
"shop_id"
]
}输出模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Shop id."
},
"booking_url": {
"type": "string",
"description": "Booking page URL."
},
"services": {
"type": "array",
"description": "Published services, each with id and name."
},
"hours": {
"type": "string",
"description": "Published hours for this shop."
},
"timezone": {
"type": "string",
"description": "IANA timezone for the hours and slots."
}
},
"required": [
"id"
],
"description": "One enrolled shop."
}🟢resolve_business(domain, place, phone)
Use this when the user wants to resolve one enrolled local home-service business from a domain, a place, or a phone number. An ambiguous match is refused. Returns that one identity. No phone, email, or street address is returned.
输入模式
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Business website domain. Example: floridapolebarn.com."
},
"place": {
"type": "string",
"description": "City or county. Example: Orange County. Refuses a place that matches more than one shop."
},
"phone": {
"type": "string",
"description": "Published phone number. Example: (352) 282-0692."
}
}
}输出模式
{
"type": "object",
"properties": {
"enrolled": {
"type": "boolean",
"description": "True when the business is in the Booqer directory."
},
"identity_match": {
"type": "string",
"description": "verified, none, or ambiguous."
},
"business_name": {
"type": "string",
"description": "Brand name when the match is verified."
}
},
"required": [
"enrolled",
"identity_match"
],
"description": "One resolved identity, or an ambiguous or empty match."
}🟢check_availability(shop_id, date, start, offering)
Use this when the user wants to check availability for a local home-service appointment before booking. Lists the open 30-minute slots for one shop and one date. Booked and blocked times are left out. Each start and end is ISO-8601 with an offset. The shop timezone is America/New_York. date is YYYY-MM-DD, or start is an ISO-8601 timestamp. offering selects that shop's rules from get_business. Does not reserve a slot. Rate limited per IP and per shop.
输入模式
{
"type": "object",
"properties": {
"shop_id": {
"type": "string",
"description": "Enrolled shop id from search_businesses. Examples: florida-pole-barn, florida-security-concepts, booqer-demo-shop."
},
"date": {
"type": "string",
"description": "Calendar date in the shop timezone, America/New_York. Format YYYY-MM-DD. Example: 2026-10-21. Provide date or start."
},
"start": {
"type": "string",
"description": "ISO-8601 timestamp with an offset. Example: 2026-10-20T14:00:00-04:00. At least 2 hours ahead and no more than 21 days ahead."
},
"offering": {
"type": "string",
"description": "Service id from get_business. Example: project_consult."
}
},
"required": [
"shop_id"
]
}输出模式
{
"type": "object",
"description": "JSON object returned in the text content."
}🔴request_booking(shop_id, offering, name, phone, email, ...)
Use this when the user wants to book a local home-service appointment and has already chosen an open time. Confirms a free consult when the slot is open. Calling this again with the same details can create a second booking; if unsure, check get_booking_status first. Requires consent: before calling, show the user the consent text in the consent field and get their agreement. Also requires a name, a valid email, and a problem description. service_address is optional for a phone consult and required for an on-site visit. Disposable, reserved, and blocked email domains are rejected. job_summary falls back to problem. service_area is inferred from the address or city, otherwise the shop city. A phone consult accepts a street, a city and ZIP, or a PO Box. An on-site visit needs a street address. Shop-specific booking rules and emergency_phone come from get_business. offering is an id from get_business. start is an ISO-8601 timestamp, for example 2026-10-20T14:00:00-04:00. The start is at least 2 hours ahead and no more than 21 days ahead. A start outside that window names the field start. Returns status confirmed, a cancel link, and verify_url when the signed receipt is ready. The receipt page does not show the customer. An optional idempotency_key repeats the same result for that shop. Rate limited per IP and per shop, with a per-shop daily cap.
输入模式
{
"type": "object",
"properties": {
"shop_id": {
"type": "string",
"description": "Enrolled shop id from search_businesses. Examples: florida-pole-barn, florida-security-concepts, booqer-demo-shop."
},
"offering": {
"type": "string",
"description": "Service id from get_business. Example: project_consult."
},
"name": {
"type": "string",
"description": "Customer name. Example: Ada Lovelace."
},
"phone": {
"type": "string",
"description": "Customer phone. Example: 3525550100. Optional."
},
"email": {
"type": "string",
"description": "Customer email on a real domain. Example: [email protected]. Disposable and example.com addresses are rejected."
},
"start": {
"type": "string",
"description": "ISO-8601 timestamp with an offset. Example: 2026-10-20T14:00:00-04:00. At least 2 hours ahead and no more than 21 days ahead."
},
"consent": {
"type": "boolean",
"description": "Required. Before you call this tool, show the user this exact text and get their agreement: \"I agree to Booqer's Terms and Privacy Policy and consent to Booqer sharing my request with this shop so they can contact me about it.\" Terms: https://booqer.ai/terms. Privacy Policy: https://booqer.ai/privacy. Set true only after the user agrees. Without consent true the call is rejected and nothing is stored."
},
"problem": {
"type": "string",
"description": "What is wrong, in the customer's words. Example: Gate will not close."
},
"service_address": {
"type": "string",
"description": "Street, city and ZIP, or PO Box. Optional for a phone consult. Required for an on-site visit. Example: 100 Demo Drive, Clermont FL 34711."
},
"job_summary": {
"type": "string",
"description": "Short job summary. Falls back to problem when omitted."
},
"service_area": {
"type": "string",
"description": "City or county. Inferred from the address when omitted. Example: Clermont."
},
"idempotency_key": {
"type": "string",
"description": "Optional key of 8 to 80 letters, numbers, dots, underscores, colons, or hyphens. A repeat with the same key and shop returns the first booking instead of creating another."
}
},
"required": [
"shop_id",
"offering",
"name",
"email",
"start",
"consent",
"problem"
]
}输出模式
{
"type": "object",
"description": "JSON object returned in the text content."
}🟢get_booking_status(request_id)
Use this when the user wants to check the status of a local home-service appointment. status is confirmed, pending, canceled, or failed. No customer name, phone, or email.
输入模式
{
"type": "object",
"properties": {
"request_id": {
"type": "string",
"description": "Booking id returned by request_booking. UUID. Example: 11111111-1111-4111-8111-111111111111."
}
},
"required": [
"request_id"
]
}输出模式
{
"type": "object",
"description": "JSON object returned in the text content."
}🟢request_service(business_id, shop_id)
Use this when the user wants to open a quote form for a local home-service business rather than book a confirmed appointment time. Opens the quote widget for one enrolled business. business_id is the provider_business_id from the business feed. shop_id is accepted when business_id is empty. The widget is ui://widget/request-service.html. This call does not store a request and does not confirm a booking. It is rate-limited.
输入模式
{
"type": "object",
"properties": {
"business_id": {
"type": "string",
"description": "Enrolled business id from search_businesses. Example: florida-pole-barn."
},
"shop_id": {
"type": "string",
"description": "Enrolled shop id. Used only when business_id is empty. Example: florida-security-concepts."
}
},
"required": [
"business_id"
]
}输出模式
{
"type": "object",
"description": "Opens the quote form. Does not store a request or confirm a booking."
}🔴submit_service_request(business_id, offering, name, phone, email, ...)
Sends the user's quote request (name, email, optional phone, service location, preferred time) to the chosen business. Called by the quote form only.
输入模式
{
"type": "object",
"properties": {
"business_id": {
"type": "string",
"description": "Enrolled business id. Example: florida-pole-barn."
},
"offering": {
"type": "string",
"description": "Service id from get_business. Example: project_consult."
},
"name": {
"type": "string",
"description": "Customer name. Example: Ada Lovelace."
},
"phone": {
"type": "string",
"description": "Customer phone. Optional when an email is present. Example: 3525550100."
},
"email": {
"type": "string",
"description": "Customer email on a real domain. Example: [email protected]."
},
"service_address": {
"type": "string",
"description": "Street address. Optional for a phone consult. Required for an on-site visit. Example: 100 Demo Drive, Clermont FL 34711."
},
"start": {
"type": "string",
"description": "Preferred time as an ISO-8601 timestamp. Example: 2026-10-21T14:00:00-04:00."
},
"consent": {
"type": "boolean",
"description": "Required. Before you call this tool, show the user this exact text and get their agreement: \"I agree to Booqer's Terms and Privacy Policy and consent to Booqer sharing my request with this shop so they can contact me about it.\" Terms: https://booqer.ai/terms. Privacy Policy: https://booqer.ai/privacy. Set true only after the user agrees. Without consent true the call is rejected and nothing is stored."
}
},
"required": [
"business_id",
"offering",
"name",
"email",
"start",
"consent"
]
}输出模式
{
"type": "object",
"description": "stored is true when the request was saved."
}社区
证据