Search and message local service vendors (cleaning, med spa, yoga, personal training) by city.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user asks whether a business answered an enquiry sent earlier in this conversation with send_message_to_vendor. Pass the enquiry_refs that send_message_to_vendor returned. Returns, per business, whether it replied and the latest reply. Do not use for enquiries sent outside this conversation or without a ref; never guess a ref.
The enquiry_refs returned by send_message_to_vendor
Use this when the user asks whether a business answered an enquiry sent earlier in this conversation with send_message_to_vendor. Pass the enquiry_refs that send_message_to_vendor returned. Returns, per business, whether it replied and the latest reply. Do not use for enquiries sent outside this conversation or without a ref; never guess a ref.
| Argument | Type | Description |
|---|---|---|
| enquiry_refs* | array | The enquiry_refs returned by send_message_to_vendor |
{
"type": "object",
"required": [
"enquiry_refs"
],
"properties": {
"enquiry_refs": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5,
"description": "The enquiry_refs returned by send_message_to_vendor"
}
}
}Use this when the user asks what a local service costs in a city (e.g. 'how much is a deep clean in NYC?'). Returns a rough range from Servana businesses' posted rates with a confidence level ('high' = 5+ local priced businesses, 'medium' = 2-4, 'low' = 0-1, then a category-wide median) and an explanation naming the sample. Always call it an estimate, never a quote: each business sets its own price. Do not use for one business's prices; use get_vendor.
| Argument | Type | Description |
|---|---|---|
| city* | string | City name or slug (e.g. 'new-york', 'tampa', 'los-angeles'). For New York City use 'new-york'. |
| hours | number | Optional: estimated hours needed, if known. Overrides job_size for hourly-rate services. |
| state* | string | US state, as a name or slug (e.g. 'new-york', 'florida'). Two-letter codes like 'NY' also work. |
| service* | string | Service category slug: 'cleaning-and-organizing' (house cleaning, decluttering), 'laundry-washing' (wash and fold), 'med-spa' (botox, facials, skincare), 'yoga', 'personal-training', 'photography', 'home-services' (handyman, home upkeep), 'personal-services' |
| job_size | string | Rough size of the job. Defaults to 'medium'. |
{
"type": "object",
"required": [
"state",
"city",
"service"
],
"properties": {
"city": {
"type": "string",
"description": "City name or slug (e.g. 'new-york', 'tampa', 'los-angeles'). For New York City use 'new-york'."
},
"hours": {
"type": "number",
"description": "Optional: estimated hours needed, if known. Overrides job_size for hourly-rate services."
},
"state": {
"type": "string",
"description": "US state, as a name or slug (e.g. 'new-york', 'florida'). Two-letter codes like 'NY' also work."
},
"service": {
"type": "string",
"description": "Service category slug: 'cleaning-and-organizing' (house cleaning, decluttering), 'laundry-washing' (wash and fold), 'med-spa' (botox, facials, skincare), 'yoga', 'personal-training', 'photography', 'home-services' (handyman, home upkeep), 'personal-services'"
},
"job_size": {
"enum": [
"small",
"medium",
"large"
],
"type": "string",
"description": "Rough size of the job. Defaults to 'medium'."
}
}
}Use this when the user asks about one specific business from search_vendors results or a servana.ai page: its services, prices, rating, claim status, and whether it accepts messages from AI assistants. Do not use to search for businesses.
| Argument | Type | Description |
|---|---|---|
| vendor_slug* | string | The vendor's slug from search_vendors results or a servana.ai vendor URL |
{
"type": "object",
"required": [
"vendor_slug"
],
"properties": {
"vendor_slug": {
"type": "string",
"description": "The vendor's slug from search_vendors results or a servana.ai vendor URL"
}
}
}Use this when the user wants quotes or availability from 1 to 3 Servana businesses (slugs from search_vendors). It shows a quote request form with the details those businesses need (date, area, size and so on), pre-filled with what the user already said, so the user can check and send it. Prefer this over writing a free-text message. It sends nothing. Do not use for businesses that were not returned by search_vendors.
| Argument | Type | Description |
|---|---|---|
| notes | string | Anything else the user wants to say |
| details | object | What the user already said, keyed by field: date_window, time_window, area, home_size, job_details, frequency, session_goal, session_count, treatment, shoot_type, duration, people_count, load_size, budget. Leave out what you do not know; never invent. |
| service | string | Service category slug, e.g. 'cleaning-and-organizing' |
| vendor_slugs* | array | 1 to 3 business slugs from search_vendors |
| customer_name | string | The user's name, if they gave it |
| customer_email | string | The user's email, if they gave it |
{
"type": "object",
"required": [
"vendor_slugs"
],
"properties": {
"notes": {
"type": "string",
"description": "Anything else the user wants to say"
},
"details": {
"type": "object",
"description": "What the user already said, keyed by field: date_window, time_window, area, home_size, job_details, frequency, session_goal, session_count, treatment, shoot_type, duration, people_count, load_size, budget. Leave out what you do not know; never invent.",
"additionalProperties": {
"type": "string"
}
},
"service": {
"type": "string",
"description": "Service category slug, e.g. 'cleaning-and-organizing'"
},
"vendor_slugs": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 3,
"minItems": 1,
"description": "1 to 3 business slugs from search_vendors"
},
"customer_name": {
"type": "string",
"description": "The user's name, if they gave it"
},
"customer_email": {
"type": "string",
"description": "The user's email, if they gave it"
}
}
}Use this when the user approved a structured quote request to 1 to 3 Servana businesses (usually from the prepare_quote_request form). Servana formats the details the businesses asked for and emails the user their replies. If details are missing it returns which ones; ask the user, never invent. Do not use to book or pay; Servana does neither.
| Argument | Type | Description |
|---|---|---|
| notes | string | |
| details* | object | Field values keyed by: date_window, time_window, area, home_size, job_details, frequency, session_goal, session_count, treatment, shoot_type, duration, people_count, load_size, budget |
| service | string | Service category slug |
| vendor_slugs* | array | |
| customer_name* | string | |
| customer_email* | string | |
| customer_phone | string |
{
"type": "object",
"required": [
"vendor_slugs",
"details",
"customer_name",
"customer_email"
],
"properties": {
"notes": {
"type": "string"
},
"details": {
"type": "object",
"description": "Field values keyed by: date_window, time_window, area, home_size, job_details, frequency, session_goal, session_count, treatment, shoot_type, duration, people_count, load_size, budget",
"additionalProperties": {
"type": "string"
}
},
"service": {
"type": "string",
"description": "Service category slug"
},
"vendor_slugs": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 3,
"minItems": 1
},
"customer_name": {
"type": "string"
},
"customer_email": {
"type": "string"
},
"customer_phone": {
"type": "string"
}
}
}Use this when the user describes a local service they want done in person (e.g. 'someone to fold my laundry', 'deep clean my apartment', 'a trainer who comes to my home') and you need Servana's category slug for search_vendors or estimate_service_request. Skip it if the request clearly fits one of these slugs: 'cleaning-and-organizing' (house cleaning, decluttering), 'laundry-washing' (wash and fold), 'med-spa' (botox, facials, skincare), 'yoga', 'personal-training', 'photography', 'home-services' (handyman, home upkeep), 'personal-services'. Do not use for online products, emergencies, or medical, legal or financial advice.
| Argument | Type | Description |
|---|---|---|
| query* | string | Short description of the task the user needs done (a task, not a category name) |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "Short description of the task the user needs done (a task, not a category name)"
}
}
}Use this when the user wants to find, compare or hire a local business for an in-person service in a US city: house cleaners, laundry, med spas, yoga teachers, personal trainers, photographers, home services. Returns real businesses listed on Servana with rating, pricing when posted, claim status and a page URL. If it returns no results, tell the user Servana has no listed business for that yet; never invent one. Pass the user's specific need in `need` (e.g. decluttering, deep clean, packages) so the best-fitting businesses come first. Nearby towns are searched together (e.g. Nocatee with Ponte Vedra). Do not use for businesses outside the US or for services Servana does not list (use search_services if unsure).
| Argument | Type | Description |
|---|---|---|
| city* | string | City name or slug (e.g. 'new-york', 'tampa', 'los-angeles'). For New York City use 'new-york'. |
| need | string | The user's specific need in their own words, e.g. 'declutter and organize a cluttered house, best packages'. Ranks businesses whose own description matches it first; never invents a match. |
| state* | string | US state, as a name or slug (e.g. 'new-york', 'florida'). Two-letter codes like 'NY' also work. |
| service | string | Optional service category slug: 'cleaning-and-organizing' (house cleaning, decluttering), 'laundry-washing' (wash and fold), 'med-spa' (botox, facials, skincare), 'yoga', 'personal-training', 'photography', 'home-services' (handyman, home upkeep), 'personal-services'. Use search_services if none fits. |
Use this when the user has chosen a Servana business and asks you to contact it, request a quote, or ask about availability. It sends the user's enquiry to the business; Servana emails the user when the business replies. Pass customer_name and customer_email when the user gave them. To ask several businesses at once (up to 3), put the extra slugs in also_vendor_slugs. Keep the enquiry_refs it returns for check_enquiry_replies. Before calling, show the user the exact message and get their approval, and include their name and an email or phone number. Do not use to confirm a booking or take payment (Servana does neither), or for businesses marked as not accepting AI-assistant messages.
| Argument | Type | Description |
|---|---|---|
| message* | string | The enquiry: what the user needs, when and where, plus the user's name and preferred contact (email or phone) so the business can reply |
| vendor_slug* | string | The vendor's slug |
| customer_name | string | The user's name, as they gave it. Needed so the business knows who is asking. |
| customer_email | string | The user's email, as they gave it. Servana emails the user a link to read the business's reply. Never invent one. |
| customer_phone | string | Optional phone number, only if the user gave one. |
| also_vendor_slugs |
{
"type": "object",
"required": [
"state",
"city"
],
"properties": {
"city": {
"type": "string",
"description": "City name or slug (e.g. 'new-york', 'tampa', 'los-angeles'). For New York City use 'new-york'."
},
"need": {
"type": "string",
"description": "The user's specific need in their own words, e.g. 'declutter and organize a cluttered house, best packages'. Ranks businesses whose own description matches it first; never invents a match."
},
"state": {
"type": "string",
"description": "US state, as a name or slug (e.g. 'new-york', 'florida'). Two-letter codes like 'NY' also work."
},
"service": {
"type": "string",
"description": "Optional service category slug: 'cleaning-and-organizing' (house cleaning, decluttering), 'laundry-washing' (wash and fold), 'med-spa' (botox, facials, skincare), 'yoga', 'personal-training', 'photography', 'home-services' (handyman, home upkeep), 'personal-services'. Use search_services if none fits."
}
}
}| array |
| Optional: up to 2 more Servana businesses (slugs from search_vendors) to send the same enquiry to. Only when the user asked to contact several businesses and approved the one message for all of them. |
{
"type": "object",
"required": [
"vendor_slug",
"message"
],
"properties": {
"message": {
"type": "string",
"description": "The enquiry: what the user needs, when and where, plus the user's name and preferred contact (email or phone) so the business can reply"
},
"vendor_slug": {
"type": "string",
"description": "The vendor's slug"
},
"customer_name": {
"type": "string",
"description": "The user's name, as they gave it. Needed so the business knows who is asking."
},
"customer_email": {
"type": "string",
"description": "The user's email, as they gave it. Servana emails the user a link to read the business's reply. Never invent one."
},
"customer_phone": {
"type": "string",
"description": "Optional phone number, only if the user gave one."
},
"also_vendor_slugs": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 2,
"description": "Optional: up to 2 more Servana businesses (slugs from search_vendors) to send the same enquiry to. Only when the user asked to contact several businesses and approved the one message for all of them."
}
}
}