MaidCentral MCP by usefulapi
Read services, prices and open dates; create leads, quotes, bookings and notes in MaidCentral.
Should I use this
Quality & Safety
Findings (6)
- LOWin maidcentral_list_scope_frequencies
- LOWin maidcentral_list_rate_modifications
- LOWin maidcentral_list_available_dates
- LOWin maidcentral_list_customer_sources
- LOWin maidcentral_create_or_update_lead
- LOWin maidcentral_create_or_update_quote
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"maidcentral": {
"url": "https://maidcentral.usefulapi.io/mcp"
}
}
}Remote endpoints
https://maidcentral.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (20)
🟢maidcentral_list_scope_groups
List service categories (scope groups) with their scopes of work and frequency ids. Start here: the ids feed quotes, pricing and bookings. API: GET /api/Lead/ScopeGroups.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_scopes(scope_group_id)
List the scopes of work (and frequencies) of one scope group. API: GET /api/Lead/Scopes.
Input Schema
{
"type": "object",
"properties": {
"scope_group_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Scope group id."
}
},
"required": [
"scope_group_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_scope_frequencies(scope_id)
List the frequency options (one-time, weekly, ...) of one scope. API: GET /api/Lead/ScopeFrequencies.
Input Schema
{
"type": "object",
"properties": {
"scope_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Scope id."
}
},
"required": [
"scope_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_questions(scope_ids)
List the questions (home size, bedrooms, ...) and answer options for one or more scopes. Required questions must be answered in quotes and pricing. API: GET /api/Lead/Questions.
Input Schema
{
"type": "object",
"properties": {
"scope_ids": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"description": "Scope ids."
}
},
"required": [
"scope_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_rate_modifications(scope_group_id)
List the extras, discounts and other rate modifications available for a scope group. API: GET /api/Lead/RateModifications.
Input Schema
{
"type": "object",
"properties": {
"scope_group_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Scope group id."
}
},
"required": [
"scope_group_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_available_dates(scope_group_id, hours, amount, start_date, end_date)
List dates on which a quoted job of a given length or price can be booked for a scope group. Give hours or amount. API: GET /api/Lead/Availability.
Input Schema
{
"type": "object",
"properties": {
"scope_group_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Scope group id."
},
"hours": {
"description": "Job length in hours (hours or amount is required).",
"type": "number",
"exclusiveMinimum": 0
},
"amount": {
"description": "Job amount (hours or amount is required).",
"type": "number",
"exclusiveMinimum": 0
},
"start_date": {
"description": "Start date, ISO 8601. Default today.",
"type": "string"
},
"end_date": {
"description": "End date, ISO 8601. Default one month from today.",
"type": "string"
}
},
"required": [
"scope_group_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_postal_codes
List the postal codes the company serves, with their home zone. API: GET /api/Lead/PostalCodes.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_customer_sources
List customer (lead) sources. API: GET /api/Lead/CustomerSources.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_billing_terms
List billing terms usable when booking. API: GET /api/Lead/BillingTerms.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_teams
List teams that jobs can be scheduled to. API: GET /api/Lead/Teams.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_tags
List tags with their category ids (lead tags = category 8, service set tags = 5, first job tags = 6). API: GET /api/Lead/Tags.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_list_note_types
List note types (Email = 1, Note = 2, PhoneCall = 3, TextMessage = 4). API: GET /api/Note/Types.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_get_lead(lead_id)
Get a lead by id: contact details, status, source, scope group and addresses. API: GET /api/Lead/Lead.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Lead id."
}
},
"required": [
"lead_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_get_quote(quote_id)
Get a quote by id: status, addresses, and per-scope and per-frequency prices, hours and booked state. API: GET /api/Lead/Quote.
Input Schema
{
"type": "object",
"properties": {
"quote_id": {
"type": "string",
"pattern": "^[0-9a-fA-F-]{36}$",
"description": "Quote id (uuid)."
}
},
"required": [
"quote_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢maidcentral_calculate_price(scope_group_id, postal_code, scopes_of_work, questions)
Calculate a price for scopes, frequencies, extras and question answers without creating a lead or quote. Stores nothing. API: POST /api/Lead/CalculatePrice.
Input Schema
{
"type": "object",
"properties": {
"scope_group_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Scope group id."
},
"postal_code": {
"description": "Service postal code.",
"type": "string"
},
"scopes_of_work": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"ScopeOfWorkId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Scope id (from maidcentral_list_scope_groups)."
},
"FrequencyId": {
"type": "string",
"description": "Frequency id for this scope (from maidcentral_list_scope_groups)."
},
"BaseFee": {
"description": "Optional: override the calculated price for this scope/frequency.",
"type": "number"
},
"RateModifications": {
"description": "Optional extras/discounts (from maidcentral_list_rate_modifications).",
"type": "array",
"items": {
"type": "object",
"properties": {
"RateModificationId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"Quantity": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Quantity, must not be 0."
},
"IsRecurring": {
"type": "boolean"
}
},
"required": [
"RateModificationId",
"Quantity"
]
}
}
},
"required": [
"ScopeOfWorkId",
"FrequencyId"
]
},
"description": "Scopes and frequencies to price."
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"QuestionId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"Answer": {
"type": "string",
"description": "Select lists: the AnswerId. Multiple select: comma-separated AnswerIds. Else plain text."
}
},
"required": [
"QuestionId",
"Answer"
]
},
"description": "Answers to the scope questions (use [] if none)."
}
},
"required": [
"scope_group_id",
"scopes_of_work",
"questions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴maidcentral_create_or_update_lead(first_name, last_name, email, phone, postal_code, ...)
WRITE: create a lead, or update one when lead_id is given. The postal code must be in a home zone. By default MaidCentral may send the lead email, add the lead to campaigns and trigger webhooks: set send_lead_email, add_to_campaigns and trigger_webhook to false to avoid that. Without allow_duplicates, a matching contact links to the existing lead. API: POST /api/Lead/CreateOrUpdate.
Input Schema
{
"type": "object",
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"postal_code": {
"type": "string",
"description": "Must be inside the company's home zones."
},
"lead_id": {
"description": "Existing lead id to update.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"notes": {
"description": "One note to attach to the lead.",
"type": "string"
},
"customer_source_id": {
"description": "From maidcentral_list_customer_sources.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"lead_tag_ids": {
"description": "Tag ids of category 8 (maidcentral_list_tags).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"send_lead_email": {
"description": "Send the lead email (vendor default true).",
"type": "boolean"
},
"add_to_campaigns": {
"description": "Add to MaidCentral campaigns (vendor default true).",
"type": "boolean"
},
"trigger_webhook": {
"description": "Trigger Keap/Zapier webhooks (vendor default true).",
"type": "boolean"
},
"allow_duplicates": {
"description": "Create a new lead even when contact info matches (vendor default false).",
"type": "boolean"
},
"utm_source": {
"type": "string"
},
"utm_medium": {
"type": "string"
},
"utm_campaign": {
"type": "string"
},
"utm_term": {
"type": "string"
},
"utm_content": {
"type": "string"
}
},
"required": [
"first_name",
"last_name",
"email",
"phone",
"postal_code"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴maidcentral_create_or_update_quote(lead_id, quote_id, scope_group_id, home_address1, home_address2, ...)
WRITE: create a quote for a lead (or update one when quote_id is given) with service address, scopes, frequencies and question answers. Optionally emails the quote 5 minutes later (send_quote_email, default false). API: POST /api/Lead/CreateOrUpdateQuote.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Lead id (from maidcentral_create_or_update_lead)."
},
"quote_id": {
"description": "Existing quote id to update.",
"type": "string",
"pattern": "^[0-9a-fA-F-]{36}$"
},
"scope_group_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"home_address1": {
"type": "string"
},
"home_address2": {
"type": "string"
},
"home_city": {
"type": "string"
},
"home_region": {
"type": "string",
"description": "2-letter state or region code."
},
"home_postal_code": {
"type": "string"
},
"billing_address1": {
"description": "Optional billing address (default: the service address).",
"type": "string"
},
"billing_address2": {
"type": "string"
},
"billing_city": {
"type": "string"
},
"billing_region": {
"type": "string"
},
"billing_postal_code": {
"type": "string"
},
"scopes_of_work": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"ScopeOfWorkId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Scope id (from maidcentral_list_scope_groups)."
},
"FrequencyId": {
"type": "string",
"description": "Frequency id for this scope (from maidcentral_list_scope_groups)."
},
"BaseFee": {
"description": "Optional: override the calculated price for this scope/frequency.",
"type": "number"
},
"RateModifications": {
"description": "Optional extras/discounts (from maidcentral_list_rate_modifications).",
"type": "array",
"items": {
"type": "object",
"properties": {
"RateModificationId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"Quantity": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Quantity, must not be 0."
},
"IsRecurring": {
"type": "boolean"
}
},
"required": [
"RateModificationId",
"Quantity"
]
}
}
},
"required": [
"ScopeOfWorkId",
"FrequencyId"
]
}
},
"questions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"QuestionId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"Answer": {
"type": "string",
"description": "Select lists: the AnswerId. Multiple select: comma-separated AnswerIds. Else plain text."
}
},
"required": [
"QuestionId",
"Answer"
]
},
"description": "Answers to the scope questions (use [] if none)."
},
"send_quote_email": {
"description": "Email the quote to the lead after 5 minutes.",
"type": "boolean"
},
"add_to_campaigns": {
"type": "boolean"
},
"trigger_webhook": {
"type": "boolean"
}
},
"required": [
"lead_id",
"scope_group_id",
"home_address1",
"home_city",
"home_region",
"home_postal_code",
"scopes_of_work",
"questions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴maidcentral_book_quote(lead_id, quote_id, scope_group_id, scopes_of_work, billing_terms_id, ...)
WRITE: convert a quote into a customer and schedule the first job on first_job_date. Check dates with maidcentral_list_available_dates first. Booking emails default to the vendor setting: set send_booked_email and send_customer_portal_invite to false to stay silent. API: POST /api/Lead/BookQuote.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"quote_id": {
"type": "string",
"pattern": "^[0-9a-fA-F-]{36}$"
},
"scope_group_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"scopes_of_work": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"ScopeOfWorkId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Scope id (from maidcentral_list_scope_groups)."
},
"FrequencyId": {
"type": "string",
"description": "Frequency id for this scope (from maidcentral_list_scope_groups)."
},
"BaseFee": {
"description": "Optional: override the calculated price for this scope/frequency.",
"type": "number"
},
"RateModifications": {
"description": "Optional extras/discounts (from maidcentral_list_rate_modifications).",
"type": "array",
"items": {
"type": "object",
"properties": {
"RateModificationId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"Quantity": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Quantity, must not be 0."
},
"IsRecurring": {
"type": "boolean"
}
},
"required": [
"RateModificationId",
"Quantity"
]
}
},
"FirstJobDate": {
"type": "string",
"description": "First job date, ISO 8601 (defaults to 9:00 AM; add a time to change it)."
},
"FirstJobInstructions": {
"type": "string"
},
"FirstJobTagIds": {
"description": "Tag ids of category 6.",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"ServiceSetTagIds": {
"description": "Tag ids of category 5.",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"TeamIds": {
"description": "Team ids (maidcentral_list_teams).",
"type": "array",
"items": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
}
},
"required": [
"ScopeOfWorkId",
"FrequencyId",
"FirstJobDate"
]
}
},
"billing_terms_id": {
"description": "From maidcentral_list_billing_terms.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"send_booked_email": {
"type": "boolean"
},
"send_customer_portal_invite": {
"type": "boolean"
},
"add_to_campaigns": {
"type": "boolean"
},
"trigger_webhook": {
"type": "boolean"
}
},
"required": [
"lead_id",
"quote_id",
"scope_group_id",
"scopes_of_work"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴maidcentral_create_note(content, entity_type_id, entity_id, entity_contact_info, note_type_id, ...)
WRITE: add a note (or logged email, call, text) to a quote, customer or employee. Give entity_id with entity_type_id, or entity_contact_info (email or phone). API: POST /api/Note/Create.
Input Schema
{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "Note text."
},
"entity_type_id": {
"description": "Quote = 0, Customer = 1, Employee = 2.",
"type": "integer",
"minimum": 0,
"maximum": 2
},
"entity_id": {
"description": "Id of the entity (needs entity_type_id).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"entity_contact_info": {
"description": "Email or phone; searched in customers, leads, then employees.",
"type": "string"
},
"note_type_id": {
"description": "Email = 1, Note = 2 (default), PhoneCall = 3, TextMessage = 4.",
"type": "integer",
"minimum": 1,
"maximum": 4
},
"subject": {
"description": "Required unless the note type is Email.",
"type": "string"
},
"create_ticket": {
"description": "For communication notes: also create a ticket.",
"type": "boolean"
},
"communication_direction_id": {
"description": "InternalNote = 0 (default), Incoming = 1, Outgoing = 2.",
"type": "integer",
"minimum": 0,
"maximum": 2
}
},
"required": [
"content"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡maidcentral_add_utm_data(lead_id, email, phone, utm_source, utm_medium, ...)
WRITE: attach UTM campaign data to a lead or quote. Give lead_id, email or phone. API: POST /api/Lead/Utm.
Input Schema
{
"type": "object",
"properties": {
"lead_id": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"utm_source": {
"type": "string"
},
"utm_medium": {
"type": "string"
},
"utm_campaign": {
"type": "string"
},
"utm_term": {
"type": "string"
},
"utm_content": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence