plumbing-booking
What this MCP does
Supports a plumbing business with service-area checks, service and price information, availability, customer verification, booking requests, callbacks, and SMS confirmation.
Tools
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'business', 'hours', 'booking'], 'properties': {'hours': {'type': 'object', 'required': ['office', 'sunday'], 'properties': {'office': {'type': 'array', 'items': {'type': 'object', 'required': ['days', 'opens', 'closes'], 'properties': {'days': {'type': 'string'}, 'note': {'type': 'string'}, 'opens': {'type': 'string'}, 'closes': {'type': 'string'}}, 'additionalProperties': False}}, 'sunday': {'type': 'string'}}, 'additionalProperties': False}, 'booking': {'type': 'object', 'required': ['how_agents_book', 'phone_booking', 'online_booking'], 'properties': {'phone_booking': {'type': 'string'}, 'online_booking': {'type': 'string'}, 'how_agents_book': {'type': 'string'}}, 'additionalProperties': False}, 'success': {'type': 'boolean'}, 'business': {'type': 'object', 'required': ['name', 'legal_name', 'phone', 'email', 'website', 'license', 'certifications', 'payment_methods', 'emergency', 'service_area', 'services_not_offered'], 'properties': {'name': {'type': 'string'}, 'email': {'type': 'string'}, 'phone': {'type': 'string'}, 'license': {'type': 'string'}, 'website': {'type': 'string'}, 'emergency': {'type': 'string'}, 'legal_name': {'type': 'string'}, 'service_area': {'type': 'string'}, 'certifications': {'type': 'array', 'items': {'type': 'string'}}, 'payment_methods': {'type': 'array', 'items': {'type': 'string'}}, 'services_not_offered': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'agent_context': {'type': 'object', 'required': ['instructions', 'timezone', 'locations', 'services', 'service_area', 'pricing', 'scheduling', 'knowledge', 'availability', 'writes', 'customer_records'], 'properties': {'writes': {'type': 'object', 'required': ['request_callback', 'request_booking', 'confirm_booking'], 'properties': {'confirm_booking': {'type': 'object', 'required': ['requires_sms_code', 'success_requires'], 'properties': {'success_requires': {'type': 'object', 'required': ['status', 'booked'], 'properties': {'booked': {'type': 'boolean'}, 'status': {'type': 'string'}}, 'additionalProperties': False}, 'requires_sms_code': {'type': 'boolean'}}, 'additionalProperties': False}, 'request_booking': {'type': 'object', 'required': ['requires_explicit_user_consent', 'sends_sms_code', 'creates_appointment'], 'properties': {'sends_sms_code': {'type': 'boolean'}, 'creates_appointment': {'type': 'boolean'}, 'requires_explicit_user_consent': {'type': 'boolean'}}, 'additionalProperties': False}, 'request_callback': {'type': 'object', 'required': ['requires_explicit_user_consent', 'creates_appointment'], 'properties': {'creates_appointment': {'type': 'boolean'}, 'requires_explicit_user_consent': {'type': 'boolean'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'pricing': {'type': 'object', 'required': ['currency', 'dispatch_fee', 'policy', 'estimates'], 'properties': {'policy': {'type': 'string'}, 'currency': {'type': 'string'}, 'estimates': {'type': 'string'}, 'dispatch_fee': {'type': 'number'}}, 'additionalProperties': False}, 'services': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'summary'], 'properties': {'name': {'type': 'string'}, 'summary': {'type': 'string'}}, 'additionalProperties': False}}, 'timezone': {'type': 'string'}, 'knowledge': {'type': 'object', 'required': ['search_tool', 'read_tool', 'instructions', 'missing_information'], 'properties': {'read_tool': {'type': 'string'}, 'search_tool': {'type': 'string'}, 'instructions': {'type': 'string'}, 'missing_information': {'type': 'string'}}, 'additionalProperties': False}, 'locations': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'street', 'city', 'state', 'zip'], 'properties': {'zip': {'type': 'string'}, 'city': {'type': 'string'}, 'name': {'type': 'string'}, 'state': {'type': 'string'}, 'street': {'type': 'string'}}, 'additionalProperties': False}}, 'scheduling': {'type': 'object', 'required': ['regular', 'after_hours', 'routine', 'emergency'], 'properties': {'regular': {'type': 'string'}, 'routine': {'type': 'string'}, 'emergency': {'type': 'string'}, 'after_hours': {'type': 'string'}}, 'additionalProperties': False}, 'availability': {'type': 'object', 'required': ['tool', 'kind', 'creates_appointment'], 'properties': {'kind': {'type': 'string'}, 'tool': {'type': 'string'}, 'creates_appointment': {'type': 'boolean'}}, 'additionalProperties': False}, 'instructions': {'type': 'string'}, 'service_area': {'type': 'object', 'required': ['summary', 'towns', 'exact_coverage_tool'], 'properties': {'towns': {'type': 'array', 'items': {'type': 'string'}}, 'summary': {'type': 'string'}, 'exact_coverage_tool': {'type': 'string'}}, 'additionalProperties': False}, 'customer_records': {'type': 'string'}}, 'additionalProperties': False}, 'facts_updated': {'type': 'string'}, 'review_sandbox': {'type': 'boolean'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'zip': {'type': 'string', 'maxLength': 10, 'minLength': 3}, 'town': {'type': 'string', 'maxLength': 60, 'minLength': 2}, 'state': {'type': 'string', 'maxLength': 2, 'minLength': 2}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'zip': {'type': 'string'}, 'town': {'type': 'string'}, 'error': {'type': 'string'}, 'status': {'enum': ['covered', 'partially_covered', 'outside_service_area', 'unknown_town', 'needs_more_information', 'unavailable'], 'type': 'string'}, 'message': {'type': 'string'}, 'success': {'type': 'boolean'}, 'counties': {'type': 'array', 'items': {'type': 'string'}}, 'next_step': {'type': 'string'}, 'error_code': {'type': 'string'}, 'matched_by': {'anyOf': [{'enum': ['zip', 'town'], 'type': 'string'}, {'type': 'null'}]}, 'covered_zips': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Town lookups only: the town ZIPs inside the automatic-booking area.'}, 'outside_zips': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Town lookups only: the town ZIPs outside the automatic-booking area.'}, 'resolved_town': {'type': 'string', 'description': 'Town lookups only: the Massachusetts place the name was matched to.'}, 'missing_fields': {'type': 'array', 'items': {'type': 'string'}}, 'review_sandbox': {'type': 'boolean'}, 'in_service_area': {'type': 'boolean'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['booking_id', 'code'], 'properties': {'code': {'type': 'string', 'pattern': '^\\d{6}$'}, 'booking_id': {'type': 'string', 'format': 'uuid'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'status', 'booked', 'needs_manual', 'business_phone', 'business_phone_href', 'message', 'next_step'], 'properties': {'booked': {'type': 'boolean'}, 'status': {'enum': ['confirmed', 'callback_pending', 'rejected'], 'type': 'string'}, 'message': {'type': 'string'}, 'success': {'type': 'boolean'}, 'replayed': {'type': 'boolean'}, 'timezone': {'type': 'string'}, 'next_step': {'type': 'string'}, 'error_code': {'type': 'string'}, 'needs_manual': {'type': 'boolean'}, 'service_city': {'type': 'string'}, 'customer_name': {'type': 'string'}, 'scheduled_end': {'type': 'string'}, 'business_phone': {'type': 'string'}, 'review_sandbox': {'type': 'boolean'}, 'scheduled_start': {'type': 'string'}, 'location_summary': {'type': 'string'}, 'attempts_remaining': {'type': 'integer'}, 'business_phone_href': {'type': 'string'}, 'confirmation_number': {'type': 'string'}, 'service_description': {'type': 'string'}, 'formatted_arrival_window': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['phone', 'confirmed'], 'properties': {'code': {'type': 'string', 'pattern': '^\\d{6}$'}, 'phone': {'type': 'string', 'minLength': 7}, 'confirmed': {'type': 'boolean', 'const': True}, 'challenge_id': {'type': 'string', 'format': 'uuid'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['request_id', 'next_step', 'success', 'status', 'message'], 'properties': {'status': {'enum': ['verification_requested', 'verified'], 'type': 'string'}, 'history': {'type': 'array', 'items': {'type': 'object', 'required': ['description', 'workStatus'], 'properties': {'workStatus': {'type': 'string'}, 'description': {'type': 'string'}, 'scheduledStart': {'type': 'string'}}, 'additionalProperties': False}}, 'message': {'type': 'string'}, 'success': {'type': 'boolean'}, 'customer': {'type': 'object', 'required': ['phone', 'addresses'], 'properties': {'email': {'type': 'string'}, 'phone': {'type': 'string'}, 'lastName': {'type': 'string'}, 'addresses': {'type': 'array', 'items': {'type': 'object', 'properties': {'zip': {'type': 'string'}, 'city': {'type': 'string'}, 'state': {'type': 'string'}, 'street': {'type': 'string'}, 'country': {'type': 'string'}, 'street_line_2': {'type': 'string'}}, 'additionalProperties': False}}, 'firstName': {'type': 'string'}}, 'additionalProperties': False}, 'next_step': {'type': 'string'}, 'record_id': {'type': 'string', 'description': 'Saved office lead reference, when applicable.'}, 'request_id': {'type': 'string', 'format': 'uuid', 'description': 'Public operation receipt for support; never a provider customer ID.'}, 'challenge_id': {'type': 'string'}, 'history_status': {'enum': ['available', 'unavailable'], 'type': 'string'}, 'review_sandbox': {'type': 'boolean'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['emergency_type'], 'properties': {'emergency_type': {'type': 'string', 'description': "Type of plumbing emergency (required). Examples: 'burst pipe', 'flooding', 'gas leak', 'sewage backup', 'no hot water', 'no water'"}, 'additional_details': {'type': 'string', 'description': 'Additional context about the emergency (optional). Include location, duration, actions already taken.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'call_now': {'type': 'string'}, 'urgency_level': {'type': 'string'}, 'emergency_type': {'type': 'string'}, 'recommendation': {'type': 'string'}, 'review_sandbox': {'type': 'boolean'}, 'immediate_steps': {'type': 'array', 'items': {'type': 'string'}}, 'safety_warnings': {'type': 'array', 'items': {'type': 'string'}}, 'emergency_contact': {'type': 'object', 'required': ['phone', 'available', 'response_time'], 'properties': {'phone': {'type': 'string'}, 'available': {'type': 'string'}, 'response_time': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'minLength': 1, 'description': "Document id from a search result, e.g. 'faq:pricing-service-fee'"}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'text': {'type': 'string'}, 'error': {'type': 'string'}, 'title': {'type': 'string'}, 'success': {'type': 'boolean'}, 'metadata': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'error_code': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'zip': {'type': 'string', 'maxLength': 10, 'minLength': 3, 'description': 'Service ZIP when known. Always include the customer location for a booking inquiry; outside-area requests receive no windows.'}, 'days': {'type': 'integer', 'default': 7, 'maximum': 14, 'minimum': 1}, 'town': {'type': 'string', 'maxLength': 60, 'minLength': 2}, 'state': {'type': 'string', 'maxLength': 2, 'minLength': 2}, 'start_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'time_preference': {'enum': ['any', 'morning', 'afternoon', 'evening'], 'type': 'string', 'default': 'any'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'timezone', 'requested_days', 'time_preference', 'total_windows', 'open_windows', 'windows', 'booking_flow', 'privacy'], 'properties': {'status': {'enum': ['available', 'needs_more_information', 'outside_service_area', 'unavailable'], 'type': 'string'}, 'privacy': {'type': 'string'}, 'success': {'type': 'boolean'}, 'windows': {'type': 'array', 'items': {'type': 'object', 'required': ['start_time', 'end_time', 'arrival_start', 'arrival_end', 'start_local', 'end_local', 'part_of_day', 'available'], 'properties': {'end_time': {'type': 'string', 'description': 'Reserved three-hour job-block end; pass unchanged to request_booking.'}, 'available': {'type': 'boolean'}, 'end_local': {'type': 'string'}, 'start_time': {'type': 'string', 'description': 'Selected job-block start; pass unchanged to request_booking.'}, 'arrival_end': {'type': 'string', 'description': 'Customer-facing two-hour arrival promise.'}, 'part_of_day': {'enum': ['morning', 'afternoon', 'evening'], 'type': 'string'}, 'start_local': {'type': 'string'}, 'arrival_start': {'type': 'string'}}, 'additionalProperties': False}}, 'has_more': {'type': 'boolean'}, 'timezone': {'type': 'string'}, 'next_step': {'type': 'string'}, 'error_code': {'type': 'string'}, 'booking_flow': {'type': 'string'}, 'open_windows': {'type': 'integer'}, 'total_windows': {'type': 'integer'}, 'missing_fields': {'type': 'array', 'items': {'type': 'string'}}, 'requested_days': {'type': 'integer'}, 'review_sandbox': {'type': 'boolean'}, 'coverage_status': {'enum': ['verified', 'not_checked', 'outside_service_area', 'unknown'], 'type': 'string'}, 'time_preference': {'enum': ['any', 'morning', 'afternoon', 'evening'], 'type': 'string'}, 'returned_windows': {'type': 'integer'}, 'total_matching_windows': {'type': 'integer'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['service_type', 'issue_description'], 'properties': {'urgency': {'enum': ['routine', 'soon', 'urgent', 'emergency'], 'type': 'string', 'description': 'How urgent is the repair?'}, 'service_type': {'type': 'string', 'description': "Type of plumbing service (required). Examples: 'drain cleaning', 'water heater repair', 'toilet repair'"}, 'property_type': {'enum': ['residential', 'commercial'], 'type': 'string', 'description': "Type of property (default: 'residential')"}, 'issue_description': {'type': 'string', 'description': 'Description of the plumbing problem (required). Be specific about symptoms and location.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'notes': {'type': 'array', 'items': {'type': 'string'}}, 'service': {'type': 'string'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string'}, 'error_code': {'type': 'string'}, 'next_steps': {'type': 'string'}, 'description': {'type': 'string'}, 'service_fee': {'type': 'string'}, 'property_type': {'type': 'string'}, 'urgency_level': {'type': 'string'}, 'review_sandbox': {'type': 'boolean'}, 'service_supported': {'type': 'boolean'}, 'estimated_duration': {'type': 'string'}, 'estimated_price_range': {'type': 'object', 'required': ['min', 'max', 'currency'], 'properties': {'max': {'type': 'number'}, 'min': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'search': {'type': 'string', 'description': 'Search term, e.g. "water heater", "drain"'}, 'category': {'type': 'string', 'description': "Filter by category: 'emergency', 'maintenance', 'repair', 'installation', 'specialty'"}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'total_services', 'services', 'categories', 'pricing_disclaimer', 'service_fee'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'services': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'description', 'price_range', 'price_min', 'price_max', 'estimated_duration', 'is_emergency'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'category': {'type': 'string'}, 'price_max': {'type': 'number'}, 'price_min': {'type': 'number'}, 'description': {'type': 'string'}, 'price_range': {'type': 'string'}, 'is_emergency': {'type': 'boolean'}, 'estimated_duration': {'type': 'string'}}, 'additionalProperties': False}}, 'next_step': {'type': 'string'}, 'categories': {'type': 'array', 'items': {'type': 'string'}}, 'error_code': {'type': 'string'}, 'service_fee': {'type': 'string'}, 'review_sandbox': {'type': 'boolean'}, 'total_services': {'type': 'integer'}, 'service_supported': {'type': 'boolean'}, 'pricing_disclaimer': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'view': {'enum': ['booking', 'history'], 'type': 'string', 'default': 'booking', 'description': 'Choose booking for a new service visit, or history for the customerâ\x80\x99s own previous and upcoming visits.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'view', 'business_phone', 'message'], 'properties': {'view': {'enum': ['booking', 'history'], 'type': 'string'}, 'message': {'type': 'string'}, 'success': {'type': 'boolean', 'const': True}, 'business_phone': {'type': 'string'}, 'review_sandbox': {'type': 'boolean'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['service', 'name', 'phone', 'address', 'confirmed'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 2, 'description': 'Customer full name'}, 'email': {'type': 'string', 'format': 'email'}, 'notes': {'type': 'string', 'maxLength': 2000, 'description': 'Issue description / anything the technician should know'}, 'phone': {'type': 'string', 'minLength': 7, 'description': 'Customer mobile number â\x80\x94 receives the 6-digit confirmation code'}, 'address': {'type': 'object', 'required': ['street', 'city', 'zip'], 'properties': {'zip': {'type': 'string', 'minLength': 5}, 'city': {'type': 'string', 'minLength': 2}, 'unit': {'type': 'string'}, 'state': {'type': 'string', 'default': 'MA', 'maxLength': 2, 'minLength': 2}, 'street': {'type': 'string', 'minLength': 3}}, 'additionalProperties': False}, 'service': {'type': 'string', 'maxLength': 200, 'minLength': 3, 'description': 'Requested service, e.g. "water heater replacement"'}, 'confirmed': {'type': 'boolean', 'const': True, 'description': 'True only after the user explicitly asks to start this booking request and send the SMS code'}, 'customer_type': {'enum': ['new', 'returning'], 'type': 'string', 'description': 'Required for booking: answer to Have you used us before?'}, 'referral_code': {'type': 'string', 'maxLength': 300}, 'heard_about_us': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Required for new customers: where they found us'}, 'time_preference': {'enum': ['any', 'morning', 'afternoon', 'evening'], 'type': 'string', 'default': 'any', 'description': 'Fallback time-of-day preference if none of the preferred windows is open'}, 'preferred_windows': {'type': 'array', 'items': {'type': 'object', 'required': ['start_time', 'end_time'], 'properties': {'end_time': {'type': 'string'}, 'start_time': {'type': 'string'}}, 'additionalProperties': False}, 'default': [], 'maxItems': 5, 'description': 'Preferred arrival windows from get_availability (start_time/end_time ISO strings)'}, 'promotion_review_requested': {'type': 'boolean', 'default': False}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'status', 'next_step'], 'properties': {'error': {'type': 'string'}, 'status': {'enum': ['pending_sms_confirmation', 'rejected'], 'type': 'string'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string'}, 'booking_id': {'type': 'string'}, 'error_code': {'type': 'string'}, 'expires_at': {'type': 'string'}, 'code_sent_to': {'type': 'string'}, 'review_sandbox': {'type': 'boolean'}, 'in_service_area': {'type': 'boolean'}, 'attempts_allowed': {'type': 'integer'}, 'service_area_notice': {'type': 'string'}, 'sandbox_verification_code': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'phone', 'issue_description', 'confirmed'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 2, 'description': 'Customer full name, for example "Jane Smith"'}, 'email': {'type': 'string', 'format': 'email'}, 'phone': {'type': 'string', 'minLength': 7, 'description': 'Customer phone number for the callback'}, 'urgency': {'enum': ['routine', 'soon', 'urgent'], 'type': 'string', 'default': 'routine'}, 'confirmed': {'type': 'boolean', 'const': True, 'description': 'True only after the user explicitly asks Johnson Bros. to contact them'}, 'issue_description': {'type': 'string', 'maxLength': 2000, 'minLength': 3, 'description': 'Short description of the plumbing issue'}, 'preferred_callback_time': {'type': 'string', 'maxLength': 200, 'description': 'Optional preference such as "weekday morning"'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['request_id', 'success', 'status', 'message', 'next_step'], 'properties': {'status': {'enum': ['callback_requested', 'rejected'], 'type': 'string'}, 'message': {'type': 'string'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string'}, 'record_id': {'type': 'string'}, 'error_code': {'type': 'string'}, 'request_id': {'type': 'string', 'format': 'uuid'}, 'phone_last4': {'type': 'string'}, 'review_sandbox': {'type': 'boolean'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'phone', 'address', 'issue_description', 'confirmed'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 3, 'description': 'Caller full first and last name'}, 'phone': {'type': 'string', 'maxLength': 30, 'minLength': 7, 'description': 'Callback number. On phone calls the channel supplies the caller ID; confirm it with the caller.'}, 'address': {'type': 'object', 'required': ['city', 'state', 'zip'], 'properties': {'zip': {'type': 'string', 'pattern': '^\\d{5}(?:-\\d{4})?$', 'description': 'Five-digit service ZIP; decides coverage and Massachusetts'}, 'city': {'type': 'string', 'maxLength': 60, 'minLength': 2}, 'unit': {'type': 'string', 'maxLength': 50}, 'state': {'type': 'string', 'maxLength': 2, 'minLength': 2}, 'street': {'type': 'string', 'maxLength': 200, 'minLength': 3, 'description': 'Street address, if the caller gave it'}}, 'additionalProperties': False}, 'confirmed': {'type': 'boolean', 'const': True, 'description': 'True only after the caller agreed to the office calling them back'}, 'issue_description': {'type': 'string', 'maxLength': 4000, 'minLength': 3, 'description': 'What the caller needs, in their words'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['request_id', 'success', 'status', 'in_service_area', 'booked', 'message', 'next_step'], 'properties': {'booked': {'type': 'boolean', 'const': False}, 'status': {'enum': ['office_callback_requested', 'in_service_area', 'outside_massachusetts', 'rejected'], 'type': 'string'}, 'message': {'type': 'string'}, 'success': {'type': 'boolean'}, 'duplicate': {'type': 'boolean', 'description': 'True when this callback was already requested recently; no second office task was created.'}, 'next_step': {'type': 'string'}, 'record_id': {'type': 'string', 'description': 'Saved office lead reference, when a callback was requested.'}, 'error_code': {'type': 'string'}, 'request_id': {'type': 'string', 'format': 'uuid', 'description': 'Public operation receipt for support; never a provider customer ID.'}, 'review_sandbox': {'type': 'boolean'}, 'in_service_area': {'type': 'boolean'}, 'in_massachusetts': {'type': 'boolean'}, 'coverage_verified': {'type': 'boolean', 'description': 'False when the coverage database could not be read; the office will confirm.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'minLength': 1, 'description': "Natural-language search terms, e.g. 'water heater Quincy'"}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title', 'url'], 'properties': {'id': {'type': 'string', 'description': 'Pass this to fetch to read the full document'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1, 'description': 'Maximum records to return, from 1 to 50.'}, 'query': {'type': 'string', 'default': '', 'maxLength': 200, 'description': 'Repair keywords or date text, for example drain or 2025. Empty searches all available records.'}, 'status': {'enum': ['all', 'completed', 'upcoming'], 'type': 'string', 'default': 'all', 'description': 'Filter the verified customerâ\x80\x99s available visits by status.'}, 'history_access_token': {'type': 'string', 'maxLength': 200, 'description': 'Private verification proof attached automatically by the customer card or browser bridge. Never ask the customer for it or invent it.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'history', 'records_searched', 'returned_records', 'message'], 'properties': {'history': {'type': 'array', 'items': {'type': 'object', 'required': ['description', 'workStatus'], 'properties': {'workStatus': {'type': 'string'}, 'description': {'type': 'string'}, 'scheduledStart': {'type': 'string'}}, 'additionalProperties': False}}, 'message': {'type': 'string'}, 'success': {'type': 'boolean', 'const': True}, 'review_sandbox': {'type': 'boolean'}, 'records_searched': {'type': 'integer'}, 'returned_records': {'type': 'integer'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'phone', 'email', 'address', 'heard_about_us', 'confirmed'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 3, 'description': 'Full first and last name'}, 'email': {'type': 'string', 'format': 'email'}, 'phone': {'type': 'string', 'maxLength': 30, 'minLength': 7}, 'address': {'type': 'object', 'required': ['street', 'city', 'state', 'zip'], 'properties': {'zip': {'type': 'string', 'pattern': '^\\d{5}(?:-\\d{4})?$'}, 'city': {'type': 'string', 'minLength': 2}, 'unit': {'type': 'string'}, 'state': {'type': 'string', 'maxLength': 2, 'minLength': 2}, 'street': {'type': 'string', 'minLength': 3}}, 'additionalProperties': False}, 'confirmed': {'type': 'boolean', 'const': True, 'description': 'Customer submitted or approved the new customer form, including any supplied issue description'}, 'heard_about_us': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Where the customer found Johnson Bros; ask, never infer from the platform'}, 'issue_description': {'type': 'string', 'maxLength': 4000, 'description': 'Customer-approved service and reported symptoms, if already provided. Preserved in outside-area office lead notes; do not invent a diagnosis. Optional so contact-only intake still works.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['request_id', 'next_step', 'success', 'status', 'in_service_area', 'booked', 'message'], 'properties': {'booked': {'type': 'boolean', 'const': False}, 'status': {'enum': ['customer_created', 'lead_submitted', 'rejected'], 'type': 'string'}, 'message': {'type': 'string'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string'}, 'record_id': {'type': 'string', 'description': 'Saved office lead reference, when applicable.'}, 'error_code': {'type': 'string'}, 'request_id': {'type': 'string', 'format': 'uuid', 'description': 'Public operation receipt for support; never a provider customer ID.'}, 'review_sandbox': {'type': 'boolean'}, 'in_service_area': {'type': 'boolean'}, 'in_massachusetts': {'type': 'boolean', 'description': 'Outside-area leads only: whether the service ZIP is in Massachusetts.'}, 'issue_description_saved': {'type': 'boolean', 'description': 'True only after a supplied issue description was saved with an office-review lead. Customer creation alone does not save booking notes.'}, 'office_callback_requested': {'type': 'boolean', 'description': 'True when the outside-area lead was flagged for an ASAP office callback (Massachusetts addresses).'}}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
AdButler
Manages AdButler advertisers, campaigns, ad items, audiences, zones, creatives, catalogs, and advertising reports.
Duvo MCP
Provides governed retail and CPG operations for cases, queues, approvals, automations, process documentation, integrations, and a…
Lovie Company Formation
Supports company formation and business administration with bank accounts, cards, invoicing, bookkeeping, accounting periods, and…
freedom-mcp
Supports company operations through commitments, teams, agents, customer evidence, leads, content workflows, spreadsheets, commer…
独行录 / opcmenu
Supports founder and company discovery, collaboration goals and tasks, events and signups, networking, messaging, profiles, produ…
Meta Council
Provides governed workflows for consulting, outreach, sales deals, invoices, marketing campaigns, content approvals, accounting a…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…