{"serverId":"mcp-registry/app.scalesystema/directorio","tools":[{"name":"buscar_eventos","fixed":{"name":"buscar_eventos","description":"ES: Cartelera de eventos públicos próximos (conciertos, ferias, shows) de los negocios del directorio, filtrable por texto, ubicación {lat,lng} o ciudad (radio dinámico de 5 a 50 millas alrededor de ese punto) y días. Los boletos se compran en la página web del evento (urlBoletos). / EN: Upcoming public events (concerts, fairs, shows) from directory businesses, filterable by text, location {lat,lng} or city (dynamic 5 to 50 mile radius around that point) and days ahead. Tickets are purchased on ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"dias":{"type":"integer","maximum":90,"minimum":1,"description":"Solo eventos dentro de N días (sin esto: todos los futuros) / Only events within N days"},"texto":{"type":"string","maxLength":120,"minLength":1,"description":"Filtro libre: nombre del evento, lugar o negocio / Free-text filter"},"ciudad":{"type":"string","maxLength":120,"minLength":1,"description":"Ciudad alrededor de la cual buscar / City to search around"},"ubicacion":{"type":"object","required":["lat","lng"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lng":{"type":"number","maximum":180,"minimum":-180},"precisionMetros":{"type":"integer","maximum":100000,"minimum":0,"description":"Precisión de la ubicación en metros, si se conoce. Con más de 1000 m no se dan distancias / Location accuracy in meters, if known"}},"description":"Ubicación del USUARIO (no la del agente) / The USER's location (not the agent's)","additionalProperties":false}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Buscar eventos / Search events"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":447,"tokensAfter":447},{"name":"buscar_negocios","fixed":{"name":"buscar_negocios","description":"ES: Busca negocios del directorio público (Miami–Centroamérica) por ubicación {lat,lng}, ciudad, categoría o texto libre. Con ubicación o ciudad busca en un radio dinámico (5 a 50 millas) alrededor de ese punto y lo informa en \"alcance\". Sin ubicación ni ciudad devuelve el listado por país/global. / EN: Search the public business directory (Miami–Central America) by location {lat,lng}, city, category or free text. With a location or city it searches a dynamic radius (5 to 50 miles) around that p","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"texto":{"type":"string","maxLength":120,"minLength":1,"description":"Búsqueda libre en nombre y descripción / Free-text search"},"ciudad":{"type":"string","maxLength":120,"minLength":1,"description":"Ciudad alrededor de la cual buscar, p.ej. \"Miami\" / City to search around"},"categoria":{"type":"string","maxLength":60,"minLength":1,"description":"Categoría: restaurante, tienda, belleza, salud, fitness, hotel… / Category"},"ubicacion":{"type":"object","required":["lat","lng"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lng":{"type":"number","maximum":180,"minimum":-180},"precisionMetros":{"type":"integer","maximum":100000,"minimum":0,"description":"Precisión de la ubicación en metros, si se conoce. Con más de 1000 m no se dan distancias / Location accuracy in meters, if known"}},"description":"Ubicación del USUARIO (no la del agente) / The USER's location (not the agent's)","additionalProperties":false}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Buscar negocios / Search businesses"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":449,"tokensAfter":449},{"name":"buscar_por_servicio","fixed":{"name":"buscar_por_servicio","description":"ES: Busca negocios por lo que OFRECEN — un servicio, producto o clase concreta (\"clases de zumba\", \"corte de caballero\", \"pupusas\") — y devuelve cada negocio con los ítems que matchearon y su precio (o \"cotizar\"). Complementa buscar_negocios, que busca por nombre/categoría. / EN: Search businesses by what they OFFER — a specific service, product or class (\"zumba classes\", \"men's haircut\") — returning each business with its matched items and price (or \"quote\"). Complements buscar_negocios, which ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["consulta"],"properties":{"ciudad":{"type":"string","maxLength":120,"minLength":1,"description":"Ciudad alrededor de la cual buscar / City to search around"},"consulta":{"type":"string","maxLength":120,"minLength":2,"description":"Qué busca el usuario: \"clases de zumba\", \"corte de caballero\", \"pupusas\"… / What the user wants"},"ubicacion":{"type":"object","required":["lat","lng"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lng":{"type":"number","maximum":180,"minimum":-180},"precisionMetros":{"type":"integer","maximum":100000,"minimum":0,"description":"Precisión de la ubicación en metros, si se conoce. Con más de 1000 m no se dan distancias / Location accuracy in meters, if known"}},"description":"Ubicación del USUARIO (no la del agente) / The USER's location (not the agent's)","additionalProperties":false}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Buscar por servicio o producto / Search by offering"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":427,"tokensAfter":427},{"name":"consultar_disponibilidad","fixed":{"name":"consultar_disponibilidad","description":"ES: Horarios libres para cita en una fecha (opcionalmente para un servicio). Devuelve horas por profesional con su staffId, listo para reservar_cita. / EN: Free appointment slots for a date (optionally for one service). Returns hours per staff member with staffId, ready for reservar_cita.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","fecha"],"properties":{"slug":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":80,"minLength":1,"description":"Slug del negocio (de buscar_negocios) / Business slug (from buscar_negocios)"},"fecha":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha YYYY-MM-DD"},"servicio":{"type":"string","maxLength":200,"minLength":1,"description":"Nombre del servicio (como sale en ver_negocio) / Service name (as shown by ver_negocio)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Consultar disponibilidad / Check availability"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":258,"tokensAfter":258},{"name":"pedir_comida","fixed":{"name":"pedir_comida","description":"ES: Crea un pedido REAL de comida/productos que se paga EN EFECTIVO al recoger (pickup) o al recibir (delivery). Mandá los nombres de los ítems tal como salen en ver_negocio; el servidor resuelve los productos reales y nunca inventa precios. Delivery exige direccion y que el negocio lo tenga habilitado. / EN: Places a REAL food/product order paid IN CASH on pickup or on delivery. Send item names as shown by ver_negocio; the server resolves the real products and never invents prices. Delivery req","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","items","entrega","nombre","telefono"],"properties":{"slug":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":80,"minLength":1,"description":"Slug del negocio (de buscar_negocios) / Business slug (from buscar_negocios)"},"items":{"type":"array","items":{"type":"object","required":["nombre"],"properties":{"nombre":{"type":"string","maxLength":200,"minLength":1,"description":"Nombre del ítem como sale en ver_negocio / Item name as shown by ver_negocio"},"cantidad":{"type":"integer","default":1,"maximum":99,"minimum":1},"variante":{"type":"string","maxLength":120,"minLength":1,"description":"Variante elegida (talla/color/tamaño), si el ítem tiene / Chosen variant, if any"}},"additionalProperties":false},"maxItems":20,"minItems":1},"notas":{"type":"string","maxLength":400,"description":"Notas de entrega (solo aplican a delivery)"},"nombre":{"type":"string","maxLength":120,"minLength":1,"description":"Nombre del cliente / Customer name"},"entrega":{"enum":["pickup","delivery"],"type":"string","description":"pickup = recoger en el local (paga en efectivo al recoger); delivery = a domicilio (paga en efectivo al recibir)"},"telefono":{"type":"string","maxLength":20,"minLength":6,"description":"Teléfono del cliente / Customer phone"},"direccion":{"type":"string","maxLength":500,"minLength":5,"description":"Dirección completa de entrega (obligatoria si entrega=delivery)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Pedir comida/productos (efectivo) / Order food (cash)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":573,"tokensAfter":573},{"name":"reservar_cita","fixed":{"name":"reservar_cita","description":"ES: Reserva una cita REAL como invitado (nombre + teléfono). La confirmación llega por WhatsApp/SMS al teléfono dado. Usá consultar_disponibilidad primero para elegir hora y staffId. / EN: Books a REAL appointment as a guest (name + phone). Confirmation arrives via WhatsApp/SMS to the given phone. Use consultar_disponibilidad first to pick a time and staffId.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","servicio","fecha","hora","nombre","telefono"],"properties":{"hora":{"type":"string","pattern":"^\\d{2}:\\d{2}$","description":"Hora HH:MM (24h), de consultar_disponibilidad"},"slug":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":80,"minLength":1,"description":"Slug del negocio (de buscar_negocios) / Business slug (from buscar_negocios)"},"fecha":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha YYYY-MM-DD"},"notas":{"type":"string","maxLength":500},"nombre":{"type":"string","maxLength":120,"minLength":2,"description":"Nombre del cliente / Customer name"},"staffId":{"type":"string","format":"uuid","description":"staffId de consultar_disponibilidad (opcional: sin él se asigna el primer profesional con esa hora libre) / staffId from consultar_disponibilidad (optional: otherwise the first staff member free at that time is assigned)"},"servicio":{"type":"string","maxLength":200,"minLength":1,"description":"Nombre del servicio / Service name"},"telefono":{"type":"string","maxLength":25,"minLength":6,"description":"Teléfono del cliente (con código de país si es posible) / Customer phone"},"direccion":{"type":"string","maxLength":300,"description":"Dirección donde se presta el servicio, si es a domicilio (ver_negocio indica qué servicios lo son) / Address where the service is performed, for at-home services"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Reservar cita / Book appointment"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":525,"tokensAfter":525},{"name":"reservar_clase","fixed":{"name":"reservar_clase","description":"ES: Apunta al cliente a una clase REAL (gimnasio/academia) como invitado (nombre + teléfono) en una fecha. Valida que la clase se dé ese día y que haya cupo. Las clases salen en ver_negocio. / EN: Books the customer into a REAL class (gym/academy) as a guest (name + phone) on a date. Validates the class runs that day and has capacity. Classes are listed by ver_negocio.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","clase","fecha","nombre","telefono"],"properties":{"slug":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":80,"minLength":1,"description":"Slug del negocio (de buscar_negocios) / Business slug (from buscar_negocios)"},"clase":{"type":"string","maxLength":200,"minLength":1,"description":"Nombre de la clase (como sale en ver_negocio) / Class name (as shown by ver_negocio)"},"fecha":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha YYYY-MM-DD"},"nombre":{"type":"string","maxLength":120,"minLength":2,"description":"Nombre del cliente / Customer name"},"telefono":{"type":"string","maxLength":25,"minLength":6,"description":"Teléfono del cliente / Customer phone"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Reservar clase / Book a class"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":345,"tokensAfter":345},{"name":"reservar_habitacion","fixed":{"name":"reservar_habitacion","description":"ES: Reserva una habitación de hotel REAL como invitado: nombre de la habitación (de ver_negocio), check-in/check-out y huéspedes. Devuelve noches y total; se paga en el hotel. / EN: Books a REAL hotel room as a guest: room name (from ver_negocio), check-in/check-out dates and guest count. Returns nights and total; payment at the hotel.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","habitacion","checkIn","checkOut","huespedes","nombre","telefono"],"properties":{"slug":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":80,"minLength":1,"description":"Slug del negocio (de buscar_negocios) / Business slug (from buscar_negocios)"},"notas":{"type":"string","maxLength":500,"description":"Pedidos especiales / Special requests"},"nombre":{"type":"string","maxLength":120,"minLength":2,"description":"Nombre del huésped / Guest name"},"checkIn":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha de entrada YYYY-MM-DD / Check-in date"},"checkOut":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha de salida YYYY-MM-DD / Check-out date"},"telefono":{"type":"string","maxLength":25,"minLength":6,"description":"Teléfono del huésped / Guest phone"},"huespedes":{"type":"integer","maximum":20,"minimum":1,"description":"Cantidad de huéspedes / Guest count"},"habitacion":{"type":"string","maxLength":200,"minLength":1,"description":"Nombre/tipo de la habitación (como sale en ver_negocio) / Room name (as shown by ver_negocio)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Reservar habitación / Book a hotel room"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":447,"tokensAfter":447},{"name":"solicitar_estimado","fixed":{"name":"solicitar_estimado","description":"ES: Envía una solicitud de estimado REAL a un negocio de servicios (contractor: pisos, plomería, pintura, limpieza…) — el negocio recibe notificación y puede llamar al cliente al teléfono dado. / EN: Sends a REAL estimate request to a services business (contractor: flooring, plumbing, painting, cleaning…) — the business is notified and may call the customer at the given phone.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","nombre","telefono","descripcion"],"properties":{"slug":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":80,"minLength":1,"description":"Slug del negocio (de buscar_negocios) / Business slug (from buscar_negocios)"},"nombre":{"type":"string","maxLength":100,"minLength":2,"description":"Nombre del cliente / Customer name"},"servicio":{"type":"string","maxLength":200,"minLength":1,"description":"Servicio de interés (como sale en ver_negocio) / Service of interest"},"telefono":{"type":"string","maxLength":25,"minLength":7,"description":"Teléfono del cliente (el negocio lo usará para llamarlo) / Customer phone (the business will call it)"},"direccion":{"type":"string","maxLength":300,"minLength":5,"description":"Dirección donde se haría el trabajo / Job address"},"descripcion":{"type":"string","maxLength":2000,"minLength":5,"description":"Qué trabajo necesita el cliente / What work the customer needs"},"fechaPreferida":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Fecha preferida YYYY-MM-DD / Preferred date"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Solicitar estimado / Request an estimate"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":446,"tokensAfter":446},{"name":"ver_negocio","fixed":{"name":"ver_negocio","description":"ES: Ficha completa de un negocio por slug: horarios, rating y reseñas, catálogo con precios y variantes, promociones vigentes, eventos próximos y enlaces útiles. / EN: Full business profile by slug: hours, rating and reviews, catalog with prices and variants, active promotions, upcoming events and useful links.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","pattern":"^[a-z0-9-]+$","maxLength":80,"minLength":1,"description":"Slug del negocio (de buscar_negocios) / Business slug (from buscar_negocios)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Ver ficha del negocio / View business profile"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":187,"tokensAfter":187},{"name":"ver_promociones","fixed":{"name":"ver_promociones","description":"ES: Promociones vigentes de los negocios del directorio, por ubicación {lat,lng} o ciudad (radio dinámico de 5 a 50 millas alrededor de ese punto). Sin ubicación ni ciudad devuelve el alcance país/global. / EN: Active promotions from directory businesses, by location {lat,lng} or city (dynamic 5 to 50 mile radius around that point). Without a location or city it returns the country/global scope.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"ciudad":{"type":"string","maxLength":120,"minLength":1,"description":"Ciudad alrededor de la cual buscar / City to search around"},"ubicacion":{"type":"object","required":["lat","lng"],"properties":{"lat":{"type":"number","maximum":90,"minimum":-90},"lng":{"type":"number","maximum":180,"minimum":-180},"precisionMetros":{"type":"integer","maximum":100000,"minimum":0,"description":"Precisión de la ubicación en metros, si se conoce. Con más de 1000 m no se dan distancias / Location accuracy in meters, if known"}},"description":"Ubicación del USUARIO (no la del agente) / The USER's location (not the agent's)","additionalProperties":false}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Ver promociones / View promotions"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":337,"tokensAfter":337}],"toolsChanged":11,"tokensSaved":0,"todo":[{"tool":"pedir_comida","params":["items"]},{"tool":"reservar_cita","params":["notas"]},{"tool":"solicitar_visita_inmobiliaria","params":["email","adultos","mensaje"]}],"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."}