Servidor MCP

Ezi Home Services

io.github.EziServices/mcp-public
Comercio y retail Público y accesible MCP 2026-07-28

Qué hace este MCP

Quotes, books, reschedules, and cancels authenticated home-service orders such as cleaning, lawn, and snow services.

calculate_quote
Calculate an estimated price and duration for a service WITHOUT creating a booking. Use this during the quoting phase before the customer commits.
Esquema de entrada
{'type': 'object', 'required': ['city', 'category', 'serviceType'], 'properties': {'city': {'type': 'string', 'description': 'Customer city. Valid values: Ottawa, Gatineau, Toronto, Montreal, Surrey, Miami, Dallas.'}, 'edging': {'type': 'boolean', 'description': 'Lawn: include edging.'}, 'garage': {'type': 'boolean', 'description': 'Include garage.'}, 'hallway': {'type': 'boolean', 'description': 'Carpet: include hallway.'}, 'hasPets': {'type': 'boolean', 'description': 'Customer has pets at home.'}, 'windows': {'type': 'boolean', 'description': 'Include window cleaning.'}, 'areaRugs': {'type': 'number', 'description': 'Carpet: number of area rugs.'}, 'backyard': {'type': 'boolean', 'description': 'Lawn: include backyard.'}, 'basement': {'type': 'boolean', 'description': 'Include basement.'}, 'bedrooms': {'type': 'number', 'description': 'Number of bedrooms (cleaning/carpet).'}, 'category': {'enum': ['Cleaning', 'Lawn-Care', 'Exterior Cleaning', 'Car Detailing', 'Snow-Removal', 'Tire-Changing'], 'type': 'string', 'description': 'Service category.'}, 'watering': {'type': 'boolean', 'description': 'Lawn: include watering.'}, 'yardSize': {'enum': ['standard', 'large'], 'type': 'string', 'description': 'Lawn: yard size.'}, 'bathrooms': {'type': 'number', 'description': 'Number of bathrooms (cleaning).'}, 'engineBay': {'type': 'boolean', 'description': 'Car: engine bay cleaning add-on.'}, 'overgrown': {'type': 'boolean', 'description': 'Lawn: overgrown surcharge.'}, 'staircase': {'type': 'boolean', 'description': 'Carpet: include staircase.'}, 'tireCount': {'type': 'number', 'description': 'Tire: number of tires (default 4).'}, 'baseboards': {'type': 'boolean', 'description': 'Include baseboards.'}, 'excessDirt': {'type': 'boolean', 'description': 'Car: very dirty interior add-on.'}, 'iceBuildup': {'type': 'boolean', 'description': 'Snow: include hard ice buildup.'}, 'iceSalting': {'type': 'boolean', 'description': 'Snow: include ice salting.'}, 'livingRoom': {'type': 'boolean', 'description': 'Include living room.'}, 'ovenInside': {'type': 'boolean', 'description': 'Include inside oven.'}, 'carsToClear': {'type': 'number', 'description': 'Snow: number of cars to clear.'}, 'clayAndSeal': {'type': 'boolean', 'description': 'Car: clay bar & seal add-on.'}, 'kitchenDeep': {'type': 'boolean', 'description': 'Include kitchen deep clean.'}, 'lawnCleanup': {'type': 'boolean', 'description': 'Lawn: include cleanup.'}, 'leafRemoval': {'type': 'boolean', 'description': 'Lawn: include leaf removal.'}, 'serviceType': {'enum': ['DEEP-CLEAN', 'POST-CONSTRUCTION', 'AIRBNB-CLEAN', 'MOVE-IN-OUT-CLEAN', 'GENERAL-CLEAN', 'CARPET-CLEAN', 'LAWNCARE-LAWNMOWING', 'LAWNCARE-MAINTENANCE', 'LAWNCARE-PLANTING', 'LAWNCARE-WEED-REMOVAL', 'GENERAL', 'CLEAN_CAR_EXTERIOR', 'CLEAN_CAR_INTERIOR', 'CLEAN_CAR_COMPLETE', 'SNOW_REMOVAL', 'TIRE-CHANGE-STANDARD', 'TIRE-CHANGE-SEASONAL'], 'type': 'string', 'description': 'Specific service type within the category.'}, 'vehicleType': {'enum': ['sedan', 'suv', 'van', 'truck', 'motorcycle'], 'type': 'string', 'description': 'Vehicle type for car detailing or tire changing.'}, 'windowPanes': {'type': 'number', 'description': 'Exterior: number of window panes.'}, 'drivewayType': {'enum': ['single', 'double'], 'type': 'string', 'description': 'Snow: driveway type.'}, 'fridgeInside': {'type': 'boolean', 'description': 'Include inside fridge.'}, 'frontWalkway': {'type': 'boolean', 'description': 'Snow: include front walkway.'}, 'femaleCleaner': {'type': 'boolean', 'description': 'Prefer a female cleaner.'}, 'groutCleaning': {'type': 'boolean', 'description': 'Include grout cleaning.'}, 'windowScreens': {'type': 'number', 'description': 'Exterior: number of window screens.'}, 'gutterCleaning': {'type': 'boolean', 'description': 'Exterior: include gutter cleaning.'}, 'kitchenSurface': {'type': 'boolean', 'description': 'Include kitchen surface clean.'}, 'petHairRemoval': {'type': 'boolean', 'description': 'Car: pet hair removal add-on.'}, 'spotCleanDoors': {'type': 'boolean', 'description': 'Include spot-clean doors.'}, 'spotCleanWalls': {'type': 'boolean', 'description': 'Include spot-clean walls.'}, 'windrowClearing': {'type': 'boolean', 'description': 'Snow: include windrow clearing.'}, 'cleaningSupplies': {'type': 'boolean', 'description': 'Whether ezi provides supplies (default true).'}, 'soffitsAndFascia': {'type': 'boolean', 'description': 'Exterior: include soffits & fascia.'}}}
cancel_job
Cancel one of the authenticated customer's upcoming jobs. Call lookup_scheduled_jobs first to get the job ID. Get explicit customer confirmation before setting confirmed to true.
Esquema de entrada
{'type': 'object', 'required': ['jobId', 'confirmed'], 'properties': {'jobId': {'type': 'string', 'description': 'The job ID obtained from lookup_scheduled_jobs.'}, 'confirmed': {'type': 'boolean', 'description': 'Must be true. Only set after the customer has explicitly confirmed.'}}}
create_order
Create a service order for the authenticated customer. Call calculate_quote first to get the price and recommended durationHours, then call this once the customer agrees.
Esquema de entrada
{'type': 'object', 'required': ['category', 'scheduledTime', 'address'], 'properties': {'edging': {'type': 'boolean'}, 'garage': {'type': 'boolean'}, 'address': {'type': 'object', 'required': ['addressLine1', 'city', 'state', 'postalCode'], 'properties': {'city': {'type': 'string'}, 'unit': {'type': 'string'}, 'state': {'type': 'string', 'description': 'Province/state abbreviation (e.g. "ON", "FL").'}, 'country': {'enum': ['CA', 'US'], 'type': 'string', 'description': 'Defaults to CA.'}, 'postalCode': {'type': 'string'}, 'addressLine1': {'type': 'string'}}, 'description': 'Service address.'}, 'comment': {'type': 'string', 'description': 'Optional notes for the service provider.'}, 'hallway': {'type': 'boolean'}, 'hasPets': {'type': 'boolean'}, 'windows': {'type': 'boolean'}, 'areaRugs': {'type': 'number'}, 'backyard': {'type': 'boolean'}, 'basement': {'type': 'boolean'}, 'bedrooms': {'type': 'number'}, 'category': {'enum': ['Cleaning', 'Lawn-Care', 'Exterior Cleaning', 'Car Detailing', 'Snow-Removal', 'Tire-Changing'], 'type': 'string', 'description': 'Service category.'}, 'watering': {'type': 'boolean'}, 'yardSize': {'enum': ['standard', 'large'], 'type': 'string'}, 'bathrooms': {'type': 'number'}, 'engineBay': {'type': 'boolean'}, 'overgrown': {'type': 'boolean'}, 'staircase': {'type': 'boolean'}, 'tireCount': {'type': 'number'}, 'baseboards': {'type': 'boolean'}, 'excessDirt': {'type': 'boolean'}, 'iceBuildup': {'type': 'boolean'}, 'iceSalting': {'type': 'boolean'}, 'livingRoom': {'type': 'boolean'}, 'ovenInside': {'type': 'boolean'}, 'carsToClear': {'type': 'number'}, 'clayAndSeal': {'type': 'boolean'}, 'kitchenDeep': {'type': 'boolean'}, 'lawnCleanup': {'type': 'boolean'}, 'leafRemoval': {'type': 'boolean'}, 'serviceType': {'enum': ['DEEP-CLEAN', 'POST-CONSTRUCTION', 'AIRBNB-CLEAN', 'MOVE-IN-OUT-CLEAN', 'GENERAL-CLEAN', 'CARPET-CLEAN', 'LAWNCARE-LAWNMOWING', 'LAWNCARE-MAINTENANCE', 'LAWNCARE-PLANTING', 'LAWNCARE-WEED-REMOVAL', 'GENERAL', 'CLEAN_CAR_EXTERIOR', 'CLEAN_CAR_INTERIOR', 'CLEAN_CAR_COMPLETE', 'SNOW_REMOVAL', 'TIRE-CHANGE-STANDARD', 'TIRE-CHANGE-SEASONAL'], 'type': 'string', 'description': 'Specific service type.'}, 'vehicleType': {'enum': ['sedan', 'suv', 'van', 'truck', 'motorcycle'], 'type': 'string'}, 'windowPanes': {'type': 'number'}, 'drivewayType': {'enum': ['single', 'double'], 'type': 'string'}, 'fridgeInside': {'type': 'boolean'}, 'frontWalkway': {'type': 'boolean'}, 'sendQuoteSMS': {'type': 'boolean', 'description': 'Send the customer an SMS summary.'}, 'durationHours': {'type': 'number', 'description': 'Estimated duration in hours (0.5 increments). Use the value from calculate_quote.'}, 'femaleCleaner': {'type': 'boolean'}, 'groutCleaning': {'type': 'boolean'}, 'scheduledTime': {'type': 'string', 'description': 'ISO 8601 datetime string (e.g. "2025-07-15T10:00:00-04:00"). Always include the timezone offset.'}, 'windowScreens': {'type': 'number'}, 'gutterCleaning': {'type': 'boolean'}, 'kitchenSurface': {'type': 'boolean'}, 'petHairRemoval': {'type': 'boolean'}, 'spotCleanDoors': {'type': 'boolean'}, 'spotCleanWalls': {'type': 'boolean'}, 'windrowClearing': {'type': 'boolean'}, 'cleaningSupplies': {'type': 'boolean'}, 'soffitsAndFascia': {'type': 'boolean'}, 'bookIfPaymentOnFile': {'type': 'boolean', 'description': 'If true and a payment method is saved, immediately confirms the booking.'}}}
current_datetime
Returns the current date and time in UTC and, if a city is provided, in the local timezone. Call this before create_order to get the correct timezone offset.
Esquema de entrada
{'type': 'object', 'properties': {'city': {'type': 'string', 'description': 'Optional city name to get local time and offset. Valid: Ottawa, Gatineau, Toronto, Montreal, Surrey, Miami, Dallas.'}}}
get_available_services
Returns service categories and types available for a given postal or zip code, accounting for location coverage and seasonal availability. Call this after collecting the customer's postal code to determine what services to offer.
Esquema de entrada
{'type': 'object', 'required': ['postalCode'], 'properties': {'postalCode': {'type': 'string', 'description': 'Customer postal or zip code (e.g. "K1A 0A1" or "90210").'}}}
get_profile
Return the authenticated customer's profile: name, account ID, balance, primary address, and payment method status.
Esquema de entrada
{'type': 'object', 'properties': {}}
lookup_scheduled_jobs
Return the authenticated customer's upcoming scheduled jobs. Call this before rescheduling or cancelling to get the job ID.
Esquema de entrada
{'type': 'object', 'properties': {}}
reschedule_job
Reschedule one of the authenticated customer's upcoming jobs to a new date and time. Call lookup_scheduled_jobs first to get the job ID. Get explicit customer confirmation before setting confirmed to true.
Esquema de entrada
{'type': 'object', 'required': ['jobId', 'newScheduledTime', 'confirmed'], 'properties': {'jobId': {'type': 'string', 'description': 'The job ID obtained from lookup_scheduled_jobs.'}, 'confirmed': {'type': 'boolean', 'description': 'Must be true. Only set after the customer has explicitly confirmed.'}, 'newScheduledTime': {'type': 'string', 'description': 'New ISO 8601 datetime string for the rescheduled appointment.'}}}
Añadido
cancel_job
17 de September de 2026 a las 12:41
Añadido
reschedule_job
17 de September de 2026 a las 12:41
Añadido
create_order
17 de September de 2026 a las 12:41
Añadido
calculate_quote
17 de September de 2026 a las 12:41
Añadido
current_datetime
17 de September de 2026 a las 12:41
Añadido
get_available_services
17 de September de 2026 a las 12:41
Añadido
lookup_scheduled_jobs
17 de September de 2026 a las 12:41
Añadido
get_profile
17 de September de 2026 a las 12:41