hairdora

Review tenant-scoped salon schedules, availability, clients, services, quotes, and payment status.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
90%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~6,395Tokens (tool definitions)
~4.0 KBTypical response size
Significant attention impact (5.00% of 128k context)

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": {
    "hairdora": {
      "url": "https://mcp.hairdora.com/mcp"
    }
  }
}

Remote endpoints

https://mcp.hairdora.com/mcpstreamable-http

What it can do

Tool inventory

Tools (13)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_salons

List up to 100 HairDora salons in the authenticated user's organization. Returns only id, display name, currency, default locale, and last-edit time. Contact, address, payment, organization, and configuration fields are excluded from this inventory; call get_salon for one selected salon's operational configuration. `hasMore` reports truncation.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "salons": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$"
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "currency": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[A-Z]{3}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "defaultLocale": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 16
              },
              {
                "type": "null"
              }
            ]
          },
          "lastEditTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "currency",
          "defaultLocale",
          "lastEditTime"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    }
  },
  "required": [
    "salons",
    "count",
    "hasMore"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_salon(salonId)

Fetch one tenant-scoped HairDora salon by an id returned from list_salons. Returns the business configuration needed for scheduling: locale, currency, timezone, country, appointment duration, business contact/location, website, and up to 14 opening-hour rows. Organization ids, payment configuration, credentials, integrations, reminders, staff data, and internal metadata are excluded. Salons owned by another organization are reported as not found.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Salon id returned by list_salons (24 lowercase hex characters)"
    }
  },
  "required": [
    "salonId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "salon": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$"
            },
            "name": {
              "type": "string",
              "maxLength": 200
            },
            "currency": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^[A-Z]{3}$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "defaultLocale": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 16
                },
                {
                  "type": "null"
                }
              ]
            },
            "timezone": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            },
            "countryCode": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^[A-Z]{2}$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "firstDayOfTheWeek": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "Monday",
                    "Tuesday",
                    "Wednesday",
                    "Thursday",
                    "Friday",
                    "Saturday",
                    "Sunday"
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "appointmentDuration": {
              "anyOf": [
                {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 1440
                },
                {
                  "type": "null"
                }
              ]
            },
            "phone": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "street": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "city": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "state": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "postalCode": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "website": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2048
                },
                {
                  "type": "null"
                }
              ]
            },
            "openingHours": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "day": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "Monday",
                          "Tuesday",
                          "Wednesday",
                          "Thursday",
                          "Friday",
                          "Saturday",
                          "Sunday"
                        ]
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "open": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^\\d{1,2}:\\d{2}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "close": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^\\d{1,2}:\\d{2}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  }
                },
                "required": [
                  "day",
                  "open",
                  "close"
                ],
                "additionalProperties": false
              },
              "maxItems": 14
            },
            "openingHoursTruncated": {
              "type": "boolean"
            }
          },
          "required": [
            "id",
            "name",
            "currency",
            "defaultLocale",
            "timezone",
            "countryCode",
            "firstDayOfTheWeek",
            "appointmentDuration",
            "phone",
            "street",
            "city",
            "state",
            "postalCode",
            "website",
            "openingHours",
            "openingHoursTruncated"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "status",
    "salon"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_salon_availability(salonId)

Summarize bookable availability for one owned salon. The API fixes the window at tomorrow through 14 days out. Returns one safe summary per day: date, slot count, first slot, and last slot; it never exposes who occupies unavailable times. The tool proves tenant ownership before calling the otherwise-public booking route and fails closed for another organization.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Salon id returned by list_salons (24 lowercase hex characters)"
    }
  },
  "required": [
    "salonId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "salon-not-found",
        "no-availability"
      ]
    },
    "days": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "day": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "slotCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 1440
          },
          "firstSlot": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "lastSlot": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "day",
          "slotCount",
          "firstSlot",
          "lastSlot"
        ],
        "additionalProperties": false
      },
      "maxItems": 14
    }
  },
  "required": [
    "status",
    "days"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_providers(salonId)

List up to 100 provider display names for the organization that owns a known salon. The source route is public, so the tool first proves the salon belongs to the authenticated tenant and fails closed before calling it. Provider roles are organization-wide, not per-salon. Staff ids, contact details, avatar URLs, role records, schedules, and organization data are excluded. Salons owned by another organization are reported as not found.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Salon id returned by list_salons (24 lowercase hex characters)"
    }
  },
  "required": [
    "salonId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "salon-not-found"
      ]
    },
    "providers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "displayName": {
            "type": "string",
            "maxLength": 200
          }
        },
        "required": [
          "displayName"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    }
  },
  "required": [
    "status",
    "providers",
    "count",
    "hasMore"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_clients(salonId, limit)

List a bounded page of clients in the authenticated user's organization. Returns only client id, display name, salon reference, and last-edit time for safe appointment workflow chaining. Email, phone, address, operator notes, service/color history, organization data, and other profile fields are excluded server-side. Optionally filter by salonId; results are capped by `limit` (default 20, maximum 100) and `hasMore` reports truncation.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Filter by a salon id returned by list_salons"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Maximum number of clients to return (default 20, maximum 100)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "clients": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$"
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "salonId": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "lastEditTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "salonId",
          "lastEditTime"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    }
  },
  "required": [
    "clients",
    "count",
    "hasMore"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_client(clientId)

Fetch one tenant-scoped HairDora client by an id returned from list_clients. Returns only the display name, salon reference, language, and last-edit time needed for client and appointment workflow chaining. Email, phone, address, operator notes, service/color history, organization data, and other profile fields are excluded. Clients owned by another organization are reported as not found.

Input Schema

{
  "type": "object",
  "properties": {
    "clientId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Client id returned by list_clients (24 lowercase hex characters)"
    }
  },
  "required": [
    "clientId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "client": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$"
            },
            "name": {
              "type": "string",
              "maxLength": 200
            },
            "salonId": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^[0-9a-f]{24}$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "language": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 16
                },
                {
                  "type": "null"
                }
              ]
            },
            "lastEditTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "name",
            "salonId",
            "language",
            "lastEditTime"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "status",
    "client"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_appointments(salonId, clientId, startTime, endTime, limit)

List a bounded page of appointments in the authenticated user's organization, most recent start time first. Returns only the appointment id, client and salon references needed for safe chaining, times, and status. Free-text notes, reminders, contact details, organization data, and payment details are excluded server-side. Optionally filter by salonId, clientId, or a startTime/endTime window; results are capped by `limit` (default 20, maximum 100) and `hasMore` reports truncation.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Filter by a salon id returned by list_salons"
    },
    "clientId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Filter by a client id returned by list_clients"
    },
    "startTime": {
      "type": "string",
      "maxLength": 32,
      "description": "Only appointments starting at or after this ISO 8601 time"
    },
    "endTime": {
      "type": "string",
      "maxLength": 32,
      "description": "Only appointments ending before this ISO 8601 time"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Maximum number of appointments to return (default 20, maximum 100)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "appointments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$"
          },
          "clientId": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "salonId": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "startTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "endTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "SCHEDULED",
                  "CLIENT_ARRIVED",
                  "NO_SHOW",
                  "CANCELED"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "clientId",
          "salonId",
          "startTime",
          "endTime",
          "status"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    }
  },
  "required": [
    "appointments",
    "count",
    "hasMore"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_appointment(appointmentId)

Fetch one tenant-scoped HairDora appointment by an id returned from list_appointments. Returns its client and salon references, times, status, and up to 50 attached service summaries. Free-text notes, reminders, contact details, organization data, and payment data are excluded. Appointments owned by another organization are reported as not found.

Input Schema

{
  "type": "object",
  "properties": {
    "appointmentId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Appointment id returned by list_appointments (24 lowercase hex characters)"
    }
  },
  "required": [
    "appointmentId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "found",
        "not-found"
      ]
    },
    "appointment": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$"
            },
            "clientId": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^[0-9a-f]{24}$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "salonId": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^[0-9a-f]{24}$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "startTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "endTime": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 32
                },
                {
                  "type": "null"
                }
              ]
            },
            "status": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "SCHEDULED",
                    "CLIENT_ARRIVED",
                    "NO_SHOW",
                    "CANCELED"
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "serviceCount": {
              "type": "integer",
              "minimum": 0,
              "maximum": 10000
            },
            "servicesTruncated": {
              "type": "boolean"
            },
            "services": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "pattern": "^[0-9a-f]{24}$"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "price": {
                    "type": [
                      "number",
                      "null"
                    ]
                  }
                },
                "required": [
                  "id",
                  "name",
                  "price"
                ],
                "additionalProperties": false
              },
              "maxItems": 50
            }
          },
          "required": [
            "id",
            "clientId",
            "salonId",
            "startTime",
            "endTime",
            "status",
            "serviceCount",
            "servicesTruncated",
            "services"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "status",
    "appointment"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_calendar_events(salonId, startTime, endTime, limit)

List a bounded page of non-appointment calendar blocks in the authenticated user's organization, earliest start time first. These events explain closures and extra-open periods that appointments alone cannot reveal. Returns only id, salon reference, type, scope (CHAIR/PROVIDER/SALON), effect (BLOCK/OPEN), all-day flag, and times. Free-text titles and notes, chair ids, staff ids, organization data, and private reasons are excluded server-side. Optionally filter by salonId or a startTime/endTime window; `hasMore` reports truncation.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Filter by a salon id returned by list_salons"
    },
    "startTime": {
      "type": "string",
      "maxLength": 32,
      "description": "Only events starting at or after this ISO 8601 time"
    },
    "endTime": {
      "type": "string",
      "maxLength": 32,
      "description": "Only events ending before this ISO 8601 time"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Maximum number of calendar events to return (default 20, maximum 100)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "events": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$"
          },
          "salonId": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "COURSE",
                  "MEETING",
                  "VACATION",
                  "SICK",
                  "HOLIDAY",
                  "MAINTENANCE",
                  "OTHER"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "scope": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "CHAIR",
                  "PROVIDER",
                  "SALON"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "effect": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "BLOCK",
                  "OPEN"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "allDay": {
            "type": "boolean"
          },
          "startTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "endTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "salonId",
          "type",
          "scope",
          "effect",
          "allDay",
          "startTime",
          "endTime"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    }
  },
  "required": [
    "events",
    "count",
    "hasMore"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_services(salonId, limit)

List a bounded page of services offered across the authenticated user's organization. Returns only id, name, price, and salon reference. Internal metadata and organization data are excluded server-side. Optionally filter by salonId; results are capped by `limit` (default 50, maximum 100) and `hasMore` reports truncation.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Filter by a salon id returned by list_salons"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Maximum number of services to return (default 50, maximum 100)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "services": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$"
          },
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "price": {
            "type": [
              "number",
              "null"
            ]
          },
          "salonId": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "price",
          "salonId"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    }
  },
  "required": [
    "services",
    "count",
    "hasMore"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_payments(salonId, clientId, startTime, endTime, limit)

List a bounded page of operational payment records in the authenticated user's organization, most recent first. Returns only the payment, client, and salon references needed for workflow chaining, time, amount, currency, and status. It cannot charge, refund, transfer, or otherwise move funds. Cardholder data, processor/customer ids, credentials, errors, discounts, staff commission splits, operator notes, and organization data are excluded server-side. Optionally filter by salonId, clientId, or time window; `hasMore` reports truncation.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Filter by a salon id returned by list_salons"
    },
    "clientId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Filter by a client id returned by list_clients"
    },
    "startTime": {
      "type": "string",
      "maxLength": 32,
      "description": "Only payments starting at or after this ISO 8601 time"
    },
    "endTime": {
      "type": "string",
      "maxLength": 32,
      "description": "Only payments ending before this ISO 8601 time"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Maximum number of payments to return (default 20, maximum 100)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "payments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$"
          },
          "clientId": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "salonId": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "startTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "amount": {
            "type": [
              "number",
              "null"
            ]
          },
          "currency": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[A-Z]{3}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "CANCELED",
                  "FAILED",
                  "SUCCEEDED"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "clientId",
          "salonId",
          "startTime",
          "amount",
          "currency",
          "status"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    }
  },
  "required": [
    "payments",
    "count",
    "hasMore"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_quotes(salonId, clientId, status, startTime, endTime, ...)

List a bounded page of salon quotes in the authenticated user's organization, most recent first. Returns only the quote, client, and salon references needed for workflow chaining, status (DRAFT/PENDING/REJECTED/APPROVED), and start time. Free-text notes, quoted line details, discounts, contact details, and organization data are excluded server-side. Optionally filter by salonId, clientId, status, or time window; `hasMore` reports whether the bounded upstream window may contain more records.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Filter by a salon id returned by list_salons"
    },
    "clientId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "Filter by a client id returned by list_clients"
    },
    "status": {
      "type": "string",
      "enum": [
        "DRAFT",
        "PENDING",
        "REJECTED",
        "APPROVED"
      ],
      "description": "Filter by quote status (applied after fetching)"
    },
    "startTime": {
      "type": "string",
      "maxLength": 32,
      "description": "Only quotes starting at or after this ISO 8601 time"
    },
    "endTime": {
      "type": "string",
      "maxLength": 32,
      "description": "Only quotes ending before this ISO 8601 time"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100,
      "description": "Maximum number of quotes to return (default 20, maximum 100)"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Output Schema

{
  "type": "object",
  "properties": {
    "quotes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[0-9a-f]{24}$"
          },
          "clientId": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "salonId": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[0-9a-f]{24}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "DRAFT",
                  "PENDING",
                  "REJECTED",
                  "APPROVED"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "startTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "clientId",
          "salonId",
          "status",
          "startTime"
        ],
        "additionalProperties": false
      },
      "maxItems": 100
    },
    "count": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "hasMore": {
      "type": "boolean"
    }
  },
  "required": [
    "quotes",
    "count",
    "hasMore"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢show_salon_overview(salonId)

Render a bounded tenant-scoped operational overview for a salon id returned by list_salons. Shows aggregate client, upcoming-appointment, and service counts plus safe service and schedule previews. Client names, contact details, client and appointment ids, notes, organization data, staff ids, payment data, and service history are excluded.

Input Schema

{
  "type": "object",
  "properties": {
    "salonId": {
      "type": "string",
      "pattern": "^[0-9a-f]{24}$",
      "description": "HairDora salon id to render"
    }
  },
  "required": [
    "salonId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Output Schema

{
  "type": "object",
  "properties": {
    "salon": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^[0-9a-f]{24}$"
            },
            "name": {
              "type": "string",
              "maxLength": 200
            },
            "currency": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^[A-Z]{3}$"
                },
                {
                  "type": "null"
                }
              ]
            },
            "defaultLocale": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 16
                },
                {
                  "type": "null"
                }
              ]
            },
            "timezone": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 64
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "id",
            "name",
            "currency",
            "defaultLocale",
            "timezone"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "clientCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "clientCountIsLowerBound": {
      "type": "boolean"
    },
    "appointmentCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 8
    },
    "appointmentCountIsLowerBound": {
      "type": "boolean"
    },
    "serviceCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 12
    },
    "serviceCountIsLowerBound": {
      "type": "boolean"
    },
    "services": {
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 200
          },
          "price": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "name",
          "price"
        ],
        "additionalProperties": false
      }
    },
    "appointments": {
      "maxItems": 8,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "startTime": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 32
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "SCHEDULED",
                  "CLIENT_ARRIVED",
                  "NO_SHOW",
                  "CANCELED"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "serviceCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 10000
          }
        },
        "required": [
          "startTime",
          "status",
          "serviceCount"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "salon",
    "clientCount",
    "clientCountIsLowerBound",
    "appointmentCount",
    "appointmentCountIsLowerBound",
    "serviceCount",
    "serviceCountIsLowerBound",
    "services",
    "appointments"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded13 tools