{"tools": [{"name": "search_restaurants", "description": "Usa esta herramienta cuando el usuario quiera buscar restaurantes o reservar una mesa con RestServation, por ejemplo en Los Siete Lagares. Busca en el catalogo publicado por nombre, ciudad o cocina; una consulta vacia lista el catalogo. Si 'Los 7 Lagares' no coincide, busca 'lagares'. Devuelve IDs publicos; no inventes locales. No usar para recetas, hoteles o vuelos.", "inputSchema": {"additionalProperties": false, "properties": {"query": {"default": "", "description": "Nombre o cocina; usa 'lagares' para Los 7 Lagares. Vacio lista el catalogo.", "maxLength": 120, "title": "Query", "type": "string"}, "city": {"default": "", "description": "Ciudad solicitada; vacio no filtra por ciudad.", "maxLength": 120, "title": "City", "type": "string"}}, "title": "Search", "type": "object"}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true}}, {"name": "get_restaurant", "description": "Usa esta herramienta cuando necesites la ficha y los requisitos de reserva de un restaurante encontrado con search_restaurants. Devuelve zona horaria, restricciones y datos obligatorios. weekly_slots=null no acredita horarios de apertura. No consulta reservas privadas de clientes ni garantiza disponibilidad.", "inputSchema": {"additionalProperties": false, "properties": {"restaurant_id": {"description": "ID publico devuelto por search_restaurants; nunca un email o un ID inventado.", "pattern": "^[a-z0-9][a-z0-9-]{2,63}$", "title": "Restaurant Id", "type": "string"}}, "required": ["restaurant_id"], "title": "Restaurant", "type": "object"}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true}}, {"name": "check_availability", "description": "Usa esta herramienta cuando el usuario pregunte si hay mesa o que zonas estan disponibles para una fecha, hora y numero de comensales en un restaurante de RestServation. Consulta antes get_restaurant para resolver la fecha y hora locales. Devuelve solo las zonas realmente disponibles; no crea ni retiene una reserva. No pidas nombre o telefono para esta consulta.", "inputSchema": {"additionalProperties": false, "properties": {"restaurant_id": {"description": "ID publico devuelto por search_restaurants; nunca un email o un ID inventado.", "pattern": "^[a-z0-9][a-z0-9-]{2,63}$", "title": "Restaurant Id", "type": "string"}, "date": {"description": "Fecha YYYY-MM-DD; resuelve hoy o manana en la zona horaria del restaurante.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "title": "Date", "type": "string"}, "time": {"description": "Hora local HH:MM en formato de 24 horas, por ejemplo 15:00.", "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", "title": "Time", "type": "string"}, "guests": {"description": "Numero total de comensales; respeta tambien el limite de la ficha.", "maximum": 150, "minimum": 1, "title": "Guests", "type": "integer"}}, "required": ["restaurant_id", "date", "time", "guests"], "title": "Availability", "type": "object"}, "annotations": {"readOnlyHint": true, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true}}, {"name": "create_reservation", "description": "Usa esta herramienta SOLO cuando el usuario confirme explicitamente el resumen de una reserva: restaurante, fecha, hora, comensales, zona, nombre, apellidos y telefono internacional. Consulta disponibilidad primero y pide solo los datos que falten. Usa un UUID v4 como idempotency_key y reutilizalo con los mismos datos si hay un error de red; no generes otro para reintentar. Solo status=confirmed prueba que se ha reservado. No usar para consultar disponibilidad, modificar o cancelar reservas, pagar ni acceder a datos de otros clientes.", "inputSchema": {"additionalProperties": false, "properties": {"restaurant_id": {"description": "ID publico devuelto por search_restaurants; nunca un email o un ID inventado.", "pattern": "^[a-z0-9][a-z0-9-]{2,63}$", "title": "Restaurant Id", "type": "string"}, "date": {"description": "Fecha YYYY-MM-DD; resuelve hoy o manana en la zona horaria del restaurante.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "title": "Date", "type": "string"}, "time": {"description": "Hora local HH:MM en formato de 24 horas, por ejemplo 15:00.", "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", "title": "Time", "type": "string"}, "guests": {"description": "Numero total de comensales; respeta tambien el limite de la ficha.", "maximum": 150, "minimum": 1, "title": "Guests", "type": "integer"}, "zone": {"description": "Zona elegida por el usuario entre las devueltas por check_availability.", "maxLength": 120, "minLength": 1, "title": "Zone", "type": "string"}, "first_name": {"description": "Nombre del titular aportado por el usuario; no lo inventes.", "maxLength": 80, "minLength": 1, "title": "First Name", "type": "string"}, "last_name": {"description": "Apellidos del titular aportados por el usuario.", "maxLength": 120, "minLength": 1, "title": "Last Name", "type": "string"}, "phone": {"description": "Telefono de contacto en formato internacional E.164, por ejemplo +34600000000.", "pattern": "^\\+[1-9]\\d{7,14}$", "title": "Phone", "type": "string"}, "notes": {"default": "", "description": "Notas opcionales; no solicites informacion sensible.", "maxLength": 500, "title": "Notes", "type": "string"}, "confirmed": {"const": true, "description": "True solo despues de la confirmacion explicita del resumen completo por el usuario.", "title": "Confirmed", "type": "boolean"}, "idempotency_key": {"description": "UUID v4 nuevo por reserva; conserva la misma clave y argumentos en todos sus reintentos.", "pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$", "title": "Idempotency Key", "type": "string"}}, "required": ["restaurant_id", "date", "time", "guests", "zone", "first_name", "last_name", "phone", "confirmed", "idempotency_key"], "title": "Booking", "type": "object"}, "annotations": {"readOnlyHint": false, "destructiveHint": false, "idempotentHint": true, "openWorldHint": true}}]}