{"serverId":"mcp-registry/com.agentsalonsf/salon-decisions","tools":[{"name":"get_availability","fixed":{"name":"get_availability","description":"NOT live availability. Use compare_options for budget/extras/date decisions. Candidate start times for one offering at one salon, optionally one stylist and a date/time window: candidate start times from the salon's published staff schedule; existing bookings are not subtracted, so some may already be taken — confirm on the booking page. Results carry slotBasis \"schedule_candidates\" and bookingsSubtracted false; freshness tells you how old the capture is.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["salon","offering"],"properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Salon-local date"},"after":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"limit":{"type":"integer","default":50,"maximum":200,"minimum":1},"salon":{"type":"string"},"before":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"stylist":{"type":"string"},"offering":{"type":"string","description":"Offering id or slug from get_salon"}}},"annotations":{"readOnlyHint":true},"title":"Get availability"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":290,"tokensAfter":290},{"name":"get_booking_link","fixed":{"name":"get_booking_link","description":"The salon's own booking URL plus exact remaining steps for a given service, stylist, and start time. This site never books on the user's behalf; precision says how much the link pre-selects.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["salon"],"properties":{"salon":{"type":"string"},"start":{"type":"string","description":"ISO start time from get_availability"},"stylist":{"type":"string"},"offering":{"type":"string"}}},"annotations":{"readOnlyHint":true},"title":"Get booking link"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":145,"tokensAfter":145},{"name":"get_salon","fixed":{"name":"get_salon","description":"Full record for one salon as markdown: facts, hours, every haircut service with price/duration/inclusions, stylists, policies, attributes, evidence, booking rules, candidate start times from the published schedule. Every fact carries a status tag and date.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug"],"properties":{"slug":{"type":"string","description":"Salon slug, e.g. \"hairshaper\""},"format":{"enum":["markdown","json"],"type":"string","default":"markdown"}}},"annotations":{"readOnlyHint":true},"title":"Get salon"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":157,"tokensAfter":157},{"name":"get_stylist","fixed":{"name":"get_stylist","description":"One stylist, under the name the salon's booking system shows: salon, bookable status, specialty evidence with sources, services and prices, candidate start times from the published schedule, and booking link.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["slug"],"properties":{"slug":{"type":"string","description":"Stylist slug, e.g. \"hairshaper-shirley\", or a display name like \"Shirley\""},"format":{"enum":["markdown","json"],"type":"string","default":"markdown"}}},"annotations":{"readOnlyHint":true},"title":"Get stylist"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":157,"tokensAfter":157},{"name":"list_salons","fixed":{"name":"list_salons","description":"Use collection=public-research for public-source profiles with menus, add-ons, stylist information and policies; get_merchant returns the full public_research object. Salons covered (San Francisco), ordered profiled, detailed, then listed, with depth, neighborhood, price floor and range, stylist count, availability basis and freshness, last_verified_at and verification date. Paginated: limit (default 50, max 200), offset, depth=profiled|detailed|listed.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"depth":{"enum":["profiled","detailed","listed"],"type":"string","description":"profiled = booking-system depth; detailed = priced menu + booking link + hours or durations; listed = the rest"},"limit":{"type":"integer","maximum":200,"minimum":1},"offset":{"type":"integer","maximum":9007199254740991,"minimum":0},"collection":{"type":"string","const":"public-research"}}},"annotations":{"readOnlyHint":true},"title":"List salons"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":270,"tokensAfter":270},{"name":"search_haircuts","fixed":{"name":"search_haircuts","description":"Base offering lookup by haircut type, length or stylist. Use compare_options for a supported service with budget, extras or date; preserve any unsupported stylist/length/time requirements for merchant confirmation. Find haircut offerings (and optionally stylists and candidate start times) that satisfy ALL given constraints, across profiled salons (hand-normalized menus) and listed salons (type and inclusions inferred from the service name; offering.comparable says whether it can be compared appl","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"q":{"type":"string","maxLength":100},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"after":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"limit":{"type":"integer","default":10,"maximum":50,"minimum":1},"before":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"stylist":{"type":"string","maxLength":80},"max_price":{"type":"number","exclusiveMinimum":0},"specialty":{"type":"string","maxLength":60},"hair_length":{"enum":["short","medium","long","any"],"type":"string"},"haircut_type":{"enum":["cut","cut_wash","cut_wash_style","buzz","beard_trim","blow_dry","other"],"type":"string"},"neighborhood":{"type":"string","maxLength":80},"require_availability":{"type":"boolean","default":false}}},"annotations":{"readOnlyHint":true},"title":"Search haircuts by constraints"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":375,"tokensAfter":375}],"toolsChanged":6,"tokensSaved":0,"todo":[{"tool":"check_availability","params":["time_after","time_before"]},{"tool":"compare_options","params":["offset","neighborhood"]},{"tool":"get_availability","params":["after","limit","salon","before","stylist"]},{"tool":"get_booking_link","params":["salon","stylist","offering"]},{"tool":"get_guide","params":["slug"]},{"tool":"get_salon","params":["format"]},{"tool":"get_stylist","params":["format"]},{"tool":"list_salons","params":["limit","offset","collection"]},{"tool":"search_haircuts","params":["q","date","after","limit","before","stylist","max_price","specialty","hair_length","haircut_type","neighborhood","require_availability"]},{"tool":"search_merchants","params":["offset","specialty","hair_length"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}