{"count":48,"tools":[{"name":"base64_tool","server":"crypto-utils","description":"Codifica un texto a base64 o decodifica una cadena base64 a texto plano. \u00datil cuando el usuario necesita convertir datos hacia\/desde base64.","inputSchema":{"type":"object","properties":{"input":{"type":"string","description":"Texto de entrada (texto plano para encode, base64 para decode)"},"op":{"type":"string","enum":["encode","decode"],"description":"Operaci\u00f3n a realizar: \u0022encode\u0022 o \u0022decode\u0022"}},"required":["input","op"]}},{"name":"bastanteo_legal_entity_data","server":"bastanteo","description":"Devuelve los datos de PERSONA JUR\u00cdDICA del usuario autenticado en bastanteo: datos de la empresa (nombre, CIF, direcci\u00f3n, CNAE), administradores y titulares reales. Solo aplica si el usuario es persona jur\u00eddica (si no, devuelve found:false). No recibe email: el servidor resuelve al usuario autenticado.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"bastanteo_onboarding_status","server":"bastanteo","description":"Devuelve el ESTADO del onboarding\/KYC del usuario autenticado en bastanteo: pasos completados, paso actual, y verificaciones (tel\u00e9fono, identidad, contrato firmado, wallet creada). No recibe email: el servidor resuelve al usuario autenticado.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"bastanteo_user_profile","server":"bastanteo","description":"Devuelve el perfil del usuario autenticado en bastanteo (KYC\/onboarding): si es persona f\u00edsica o jur\u00eddica y si complet\u00f3 el proceso de bastanteo. No recibe email: el servidor resuelve al usuario autenticado.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"case_convert","server":"text","description":"Convierte un texto entre may\u00fasculas, min\u00fasculas, T\u00edtulo, snake_case, camelCase y kebab-case. \u00datil cuando el usuario quiere normalizar el estilo de un texto o identificador.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Texto a convertir"},"to":{"type":"string","enum":["upper","lower","title","snake","camel","kebab"],"description":"Estilo de destino: upper, lower, title, snake, camel o kebab"}},"required":["text","to"]}},{"name":"csv_to_json","server":"data","description":"Convierte texto CSV en JSON (array de objetos), usando la primera fila como cabecera de campos. \u00datil cuando el usuario quiere transformar datos tabulares CSV en estructuras JSON.","inputSchema":{"type":"object","properties":{"csv":{"type":"string","description":"Contenido CSV; la primera l\u00ednea son las cabeceras"},"delimiter":{"type":"string","description":"Delimitador de campos (por defecto \u0022,\u0022)","default":","}},"required":["csv"]}},{"name":"current_datetime","server":"datetime","description":"Devuelve la fecha y hora actuales en una zona horaria concreta (por defecto \u0022Europe\/Madrid\u0022): ISO 8601, timestamp Unix, fecha y hora legibles y d\u00eda de la semana. \u00datil cuando el usuario pregunta \u0022qu\u00e9 hora es\u0022 o necesita la fecha de hoy.","inputSchema":{"type":"object","properties":{"timezone":{"type":"string","description":"Zona horaria IANA, p. ej. \u0022Europe\/Madrid\u0022 o \u0022America\/New_York\u0022","default":"Europe\/Madrid"}},"required":[]}},{"name":"dashboard_bank_summary","server":"cuadro","description":"Devuelve el RESUMEN BANCARIO del cuadro de mandos del usuario autenticado: saldo agregado de sus cuentas y las 10 transacciones m\u00e1s recientes (de la agregaci\u00f3n bancaria de WealthReader). No recibe email: el servidor resuelve al usuario.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"dashboard_documents_analysis","server":"cuadro","description":"Devuelve el ESTADO del an\u00e1lisis de documentos fiscales\/financieros del usuario autenticado en el cuadro de mandos: total, conteo por estado (pendiente\/procesando\/completado\/fallido) y tipos de documento. No incluye el contenido extra\u00eddo. No recibe email: el servidor resuelve al usuario.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"dashboard_erp_summary","server":"cuadro","description":"Devuelve los ERPs conectados del usuario autenticado en el cuadro de mandos y su estado de sincronizaci\u00f3n (tipo, nombre, empresa, activo, \u00faltima actualizaci\u00f3n, errores y qu\u00e9 datos tiene). Nunca expone credenciales. No recibe email: el servidor resuelve al usuario.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"dashboard_kpi_snapshot","server":"cuadro","description":"Devuelve un RESUMEN EJECUTIVO (KPIs) del cuadro de mandos del usuario autenticado: saldo bancario agregado, n\u00ba de cuentas, documentos analizados y % completado, ERPs activos e incidencias. No recibe email: el servidor resuelve al usuario. \u00dasala para una visi\u00f3n global r\u00e1pida.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"date_diff","server":"datetime","description":"Calcula la diferencia entre dos fechas\/horas y la devuelve humanizada (a\u00f1os, meses, d\u00edas, horas, minutos, segundos) y en totales. \u00datil cuando el usuario pregunta cu\u00e1nto tiempo hay entre dos fechas o cu\u00e1ntos d\u00edas faltan para algo.","inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Fecha\/hora inicial en formato ISO 8601 o parseable"},"to":{"type":"string","description":"Fecha\/hora final en formato ISO 8601 o parseable"}},"required":["from","to"]}},{"name":"db_tables","server":"database","description":"Introspecciona el esquema de una base de datos (MySQL\/MariaDB o PostgreSQL). Sin \u0022table\u0022 devuelve la lista de tablas base; con \u0022table\u0022 devuelve sus columnas (nombre, tipo, si admite NULL y valor por defecto). \u00datil para que el agente sepa qu\u00e9 tablas y columnas existen antes de consultar.","inputSchema":{"type":"object","properties":{"engine":{"type":"string","enum":["mysql","postgres"],"description":"Motor de la base de datos: \u0022mysql\u0022 (incluye MariaDB) o \u0022postgres\u0022."},"host":{"type":"string","description":"Host o IP del servidor de base de datos."},"port":{"type":"integer","description":"Puerto. Por defecto 3306 (mysql) o 5432 (postgres)."},"database":{"type":"string","description":"Nombre de la base de datos."},"user":{"type":"string","description":"Usuario de conexi\u00f3n."},"password":{"type":"string","description":"Contrase\u00f1a del usuario (por defecto cadena vac\u00eda)."},"table":{"type":"string","description":"Opcional. Si se indica, devuelve las columnas de esa tabla en vez de la lista de tablas."},"schema":{"type":"string","description":"Opcional. Esquema a inspeccionar (solo postgres, por defecto \u0022public\u0022)."}},"required":["engine","host","database","user"]}},{"name":"dns_lookup","server":"net","description":"Resuelve registros DNS de un host para un tipo concreto (A, AAAA, MX, TXT, NS o CNAME). \u00datil cuando el usuario quiere consultar la configuraci\u00f3n DNS de un dominio o host.","inputSchema":{"type":"object","properties":{"host":{"type":"string","description":"Host o dominio a consultar, p. ej. \u0022smartescrow.es\u0022"},"type":{"type":"string","description":"Tipo de registro DNS a resolver (por defecto \u0022A\u0022)","enum":["A","AAAA","MX","TXT","NS","CNAME"],"default":"A"}},"required":["host"]}},{"name":"check_domain_health","server":"domain-health","description":"Comprueba la salud de correo de un dominio: registros MX, SPF, DKIM y DMARC. \u00datil cuando el usuario pregunta si un dominio est\u00e1 bien configurado para enviar correo.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Dominio a comprobar, p. ej. \u0022smartescrow.es\u0022"},"dkim_selector":{"type":"string","description":"Selector DKIM (por defecto \u0022default\u0022)","default":"default"}},"required":["domain"]}},{"name":"factoring_investment_detail","server":"factoring","description":"Devuelve el DETALLE de una inversi\u00f3n concreta del usuario autenticado en factoring (importes, beneficio, fechas, tipo, garant\u00edas, porcentajes). Requiere el id de la inversi\u00f3n. El servidor verifica que la inversi\u00f3n pertenece al usuario (no es posible ver las de terceros).","inputSchema":{"type":"object","properties":{"investment_id":{"type":"string","description":"Id de la inversi\u00f3n (lo da factoring_investments)."}},"required":["investment_id"]}},{"name":"factoring_investments","server":"factoring","description":"Devuelve el listado paginado de inversiones\/operaciones del usuario autenticado en factoring (importe, retorno, beneficio, fechas, estado de pago). No recibe email: el servidor resuelve al usuario. Acepta paginaci\u00f3n opcional (page, limit).","inputSchema":{"type":"object","properties":{"page":{"type":"integer","description":"P\u00e1gina (por defecto 1)."},"limit":{"type":"integer","description":"Items por p\u00e1gina (por defecto 30, m\u00e1ximo 100)."}},"required":[]}},{"name":"factoring_user_profile","server":"factoring","description":"Devuelve el PERFIL del usuario autenticado en factoring: si es inversor o financiado, raz\u00f3n social, NIF\/CIF, nombre de empresa y nacionalidad. No recibe email\/identificador: el servidor resuelve al usuario autenticado. \u00dasala cuando pregunte por su perfil de factoring.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"factoring_user_statistics","server":"factoring","description":"Devuelve las ESTAD\u00cdSTICAS agregadas del usuario autenticado en factoring: n\u00famero de inversiones\/operaciones, total invertido o recibido, total pagado y beneficio. No recibe email: el servidor resuelve al usuario. \u00dasala para un resumen de su actividad de factoring.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"hash_text","server":"crypto-utils","description":"Calcula el hash de un texto con md5, sha1, sha256 o sha512 y lo devuelve en hexadecimal. \u00datil para verificar integridad o generar huellas de un texto.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Texto a hashear"},"algo":{"type":"string","enum":["md5","sha1","sha256","sha512"],"description":"Algoritmo de hash (por defecto \u0022sha256\u0022)","default":"sha256"}},"required":["text"]}},{"name":"http_api_request","server":"web","description":"Llama a una API REST (interna de SmartEscrow o del cliente) con el m\u00e9todo, cabeceras, query string y cuerpo (JSON o texto) indicados, y devuelve la respuesta: estado HTTP, content-type, un subconjunto seguro de cabeceras, el cuerpo (truncado a 20000 caracteres) y, si la respuesta es JSON, el cuerpo decodificado. AVISO DE SEGURIDAD: es un fetch ejecutado en el servidor y puede apuntar a URLs arbitrarias (riesgo de SSRF); \u00fasalo solo con APIs internas o del cliente, nunca con URLs no confiables.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL absoluta del endpoint a invocar."},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","HEAD"],"description":"M\u00e9todo HTTP. Por defecto GET."},"headers":{"type":"object","description":"Cabeceras de la petici\u00f3n (clave =\u003E valor)."},"query":{"type":"object","description":"Par\u00e1metros de la query string (clave =\u003E valor)."},"json":{"type":"object","description":"Cuerpo de la petici\u00f3n serializado como JSON. Tiene prioridad sobre \u0022body\u0022."},"body":{"type":"string","description":"Cuerpo crudo de la petici\u00f3n (texto). Ignorado si se indica \u0022json\u0022."},"bearer_token":{"type":"string","description":"Token a enviar como cabecera Authorization: Bearer \u003Ctoken\u003E."},"timeout":{"type":"integer","description":"Tiempo m\u00e1ximo de espera en segundos. Por defecto 20."}},"required":["url"]}},{"name":"http_status","server":"web","description":"Hace una petici\u00f3n GET a una URL y devuelve el c\u00f3digo de estado HTTP, el content-type, el tama\u00f1o en bytes del cuerpo y el tiempo total en milisegundos. \u00datil para comprobar si una URL est\u00e1 disponible y c\u00f3mo responde.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL absoluta a consultar, p. ej. \u0022https:\/\/smartescrow.es\u0022"}},"required":["url"]}},{"name":"ip_info","server":"net","description":"Resuelve un hostname a sus direcciones IP (v4 y v6) y, si se le pasa una IP, intenta el reverse DNS (PTR). \u00datil para saber a qu\u00e9 IPs apunta un host.","inputSchema":{"type":"object","properties":{"host":{"type":"string","description":"Hostname o direcci\u00f3n IP (v4\/v6) a inspeccionar"}},"required":["host"]}},{"name":"json_tool","server":"data","description":"Valida y formatea texto JSON. Operaciones: \u0022validate\u0022 (comprueba si es JSON v\u00e1lido), \u0022pretty\u0022 (lo indenta de forma legible) y \u0022minify\u0022 (lo compacta sin espacios). \u00datil cuando el usuario quiere comprobar, embellecer o compactar un JSON.","inputSchema":{"type":"object","properties":{"input":{"type":"string","description":"Texto JSON de entrada"},"op":{"type":"string","enum":["validate","pretty","minify"],"description":"Operaci\u00f3n a realizar (por defecto \u0022validate\u0022)","default":"validate"}},"required":["input"]}},{"name":"jwt_decode","server":"crypto-utils","description":"Decodifica (SIN verificar la firma) el header y el payload de un JWT y muestra sus claims. ATENCI\u00d3N: no valida la firma ni la caducidad, solo decodifica para inspecci\u00f3n. \u00datil para depurar tokens, nunca para confiar en ellos.","inputSchema":{"type":"object","properties":{"token":{"type":"string","description":"JWT a decodificar (formato header.payload.signature)"}},"required":["token"]}},{"name":"lorem_ipsum","server":"text","description":"Genera texto de relleno (lorem ipsum) con el n\u00famero de p\u00e1rrafos y de palabras por p\u00e1rrafo indicados. \u00datil cuando el usuario necesita contenido de prueba para maquetar.","inputSchema":{"type":"object","properties":{"paragraphs":{"type":"integer","description":"N\u00famero de p\u00e1rrafos a generar (por defecto 1)","default":1,"minimum":1},"words_per_paragraph":{"type":"integer","description":"N\u00famero de palabras por p\u00e1rrafo (por defecto 40)","default":40,"minimum":1}},"required":[]}},{"name":"mysql_query","server":"database","description":"Ejecuta una consulta de SOLO LECTURA (SELECT\/SHOW\/EXPLAIN\/DESCRIBE\/WITH) contra una base de datos MySQL o MariaDB de un cliente y devuelve las filas resultantes. Rechaza cualquier sentencia que modifique datos. Aplica un LIMIT defensivo si la consulta no lo incluye.","inputSchema":{"type":"object","properties":{"host":{"type":"string","description":"Host o IP del servidor MySQL\/MariaDB, p. ej. \u0022db.cliente.com\u0022."},"port":{"type":"integer","description":"Puerto TCP del servidor (por defecto 3306).","default":3306},"database":{"type":"string","description":"Nombre de la base de datos a consultar."},"user":{"type":"string","description":"Usuario de conexi\u00f3n. Se recomienda un usuario de solo lectura."},"password":{"type":"string","description":"Contrase\u00f1a del usuario (cadena vac\u00eda por defecto).","default":""},"query":{"type":"string","description":"Consulta SQL de solo lectura (una sola sentencia, sin \u0022;\u0022)."},"limit":{"type":"integer","description":"M\u00e1ximo de filas a devolver (por defecto 100, m\u00e1ximo 1000).","default":100}},"required":["host","database","user","query"]}},{"name":"password_strength","server":"crypto-utils","description":"Eval\u00faa la fortaleza de una contrase\u00f1a analizando su longitud, las clases de caracteres que usa, una estimaci\u00f3n de entrop\u00eda en bits y un veredicto. \u00datil para orientar al usuario sobre si una contrase\u00f1a es d\u00e9bil o robusta. No almacena ni transmite la contrase\u00f1a.","inputSchema":{"type":"object","properties":{"password":{"type":"string","description":"Contrase\u00f1a a evaluar"}},"required":["password"]}},{"name":"postgres_query","server":"database","description":"Ejecuta UNA consulta de solo lectura (SELECT, SHOW, EXPLAIN, DESCRIBE o WITH) contra una base de datos PostgreSQL y devuelve las filas. Las consultas que modifican datos est\u00e1n bloqueadas. Se aplica un LIMIT por defecto para no traer demasiadas filas. \u00datil para inspeccionar datos de una BD Postgres del cliente.","inputSchema":{"type":"object","properties":{"host":{"type":"string","description":"Host del servidor PostgreSQL, p. ej. \u0022database\u0022 o \u0022127.0.0.1\u0022."},"port":{"type":"integer","description":"Puerto del servidor PostgreSQL.","default":5432},"database":{"type":"string","description":"Nombre de la base de datos a la que conectar."},"user":{"type":"string","description":"Usuario de la BD (se recomienda uno de solo lectura)."},"password":{"type":"string","description":"Contrase\u00f1a del usuario de la BD.","default":""},"query":{"type":"string","description":"Consulta SQL de solo lectura (una sola sentencia, sin \u0022;\u0022)."},"limit":{"type":"integer","description":"M\u00e1ximo de filas a devolver (1-1000).","default":100}},"required":["host","database","user","query"]}},{"name":"project_query","server":"database","description":"Ejecuta una consulta de SOLO LECTURA (SELECT\/WITH) contra la base de datos de un PROYECTO del cliente identificado por nombre (p. ej. \u0022wallet\u0022 o \u0022factoring\u0022). Las credenciales NO se exponen: se resuelven en el servidor por el nombre del proyecto. Los resultados se acotan SIEMPRE, en el servidor, al email del usuario autenticado: el backend fuerza el filtro por usuario, as\u00ed que NO es posible leer datos de terceros y NO debes incluir ning\u00fan email\/usuario en la consulta (se ignora). Usa el campo \u0022project\u0022 con uno de los proyectos disponibles y una consulta SELECT sobre las tablas del proyecto.","inputSchema":{"type":"object","properties":{"project":{"type":"string","description":"Nombre del proyecto del cliente (p. ej. \u0022wallet\u0022, \u0022factoring\u0022). Lista en el contexto."},"query":{"type":"string","description":"Consulta SQL de solo lectura (SELECT\/WITH). NO a\u00f1adas filtros por email\/usuario: el servidor acota al usuario autenticado autom\u00e1ticamente."},"limit":{"type":"integer","description":"M\u00e1ximo de filas (por defecto 100, m\u00e1ximo 1000)."}},"required":["project","query"]}},{"name":"prontopago_active_rules","server":"prontopago","description":"Devuelve las REGLAS configuradas para el usuario autenticado en prontopago: elegibilidad, fechas de vencimiento, l\u00edmites, m\u00e9todos de pago y grupos de descuento. No recibe email: el servidor resuelve al usuario. \u00dasala cuando pregunte por sus reglas\/condiciones.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"prontopago_invoices_summary","server":"prontopago","description":"Devuelve un RESUMEN de las facturas del usuario autenticado en prontopago: n\u00famero total, pendientes de pago, conteo por estado e importe total. No recibe email: el servidor resuelve al usuario. \u00dasala para una visi\u00f3n r\u00e1pida de la facturaci\u00f3n del usuario.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"prontopago_unpaid_invoices","server":"prontopago","description":"Devuelve la lista de FACTURAS PENDIENTES de pago del usuario autenticado en prontopago (n\u00famero, importe, estado, fecha de vencimiento, si est\u00e1 vencida), ordenadas por vencimiento. No recibe email: el servidor resuelve al usuario. Acepta limit opcional.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"M\u00e1ximo de facturas a devolver (por defecto 50, m\u00e1ximo 50)."}},"required":[]}},{"name":"prontopago_user_profile","server":"prontopago","description":"Devuelve el PERFIL del usuario autenticado en prontopago: raz\u00f3n social, NIF de empresa, roles (proveedor\/cliente), IBAN de proveedor y estado. No recibe email: el servidor resuelve al usuario autenticado. \u00dasala cuando pregunte por su perfil en prontopago.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"redis_get","server":"cache","description":"Lee claves de un servidor Redis del cliente (solo lectura). Soporta las operaciones get, mget, keys, ttl, type, exists, hgetall, llen, scard y strlen. Rechaza cualquier operaci\u00f3n de escritura o destructiva. \u00datil para inspeccionar el contenido de un Redis sin riesgo de modificarlo.","inputSchema":{"type":"object","properties":{"host":{"type":"string","description":"Host del servidor Redis, p. ej. \u0022127.0.0.1\u0022 o \u0022cache\u0022."},"port":{"type":"integer","description":"Puerto del servidor Redis.","default":6379},"db":{"type":"integer","description":"\u00cdndice de la base de datos a seleccionar.","default":0},"password":{"type":"string","description":"Contrase\u00f1a para AUTH (opcional)."},"op":{"type":"string","description":"Operaci\u00f3n de lectura a ejecutar.","enum":["get","mget","keys","ttl","type","exists","hgetall","llen","scard","strlen"],"default":"get"},"key":{"type":"string","description":"Clave sobre la que operar (para get, ttl, type, exists, hgetall, llen, scard, strlen)."},"keys":{"type":"array","items":{"type":"string"},"description":"Lista de claves (para la operaci\u00f3n mget)."},"pattern":{"type":"string","description":"Patr\u00f3n de b\u00fasqueda para la operaci\u00f3n keys.","default":"*"},"limit":{"type":"integer","description":"N\u00famero m\u00e1ximo de resultados devueltos por keys.","default":200}},"required":["host"]}},{"name":"regex_test","server":"data","description":"Prueba un patr\u00f3n de expresi\u00f3n regular (PCRE) contra un texto y devuelve si hay coincidencia y los grupos capturados. \u00datil cuando el usuario quiere validar o depurar una regex.","inputSchema":{"type":"object","properties":{"pattern":{"type":"string","description":"Patr\u00f3n regex sin delimitadores, p. ej. \u0022(\\d+)-(\\d+)\u0022"},"subject":{"type":"string","description":"Texto sobre el que aplicar el patr\u00f3n"},"flags":{"type":"string","description":"Modificadores PCRE, p. ej. \u0022i\u0022, \u0022im\u0022 (por defecto \u0022\u0022)","default":""}},"required":["pattern","subject"]}},{"name":"slugify","server":"text","description":"Convierte un texto en un slug apto para URLs (min\u00fasculas, sin acentos, palabras unidas por un separador). \u00datil cuando el usuario necesita un identificador legible para una URL.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Texto a convertir en slug"},"separator":{"type":"string","description":"Separador entre palabras (por defecto \u0022-\u0022)","default":"-"}},"required":["text"]}},{"name":"sso_authorized_projects","server":"sso","description":"Devuelve la lista de PROYECTOS\/servicios de SmartEscrow a los que el usuario autenticado tiene acceso autorizado (p. ej. wallet, factoring, prontopago, cuadro, bastanteo). No recibe argumentos: el servidor resuelve al usuario autenticado. \u00datil para saber qu\u00e9 datos puedes consultarle.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"sso_user_profile","server":"sso","description":"Devuelve el PERFIL del usuario autenticado en el SSO de SmartEscrow: nombre, email, roles, tipo de persona, NIF\/empresa, estado de la cuenta y los proyectos a los que tiene acceso. No recibe ni necesita ning\u00fan email\/identificador: el servidor resuelve al usuario autenticado. \u00dasala cuando el usuario pregunte por sus datos de cuenta, su perfil o qui\u00e9n es.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"text_stats","server":"text","description":"Cuenta palabras, caracteres (con y sin espacios), l\u00edneas y frases de un texto, y estima el tiempo de lectura. \u00datil cuando el usuario quiere medir la longitud de un texto.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Texto a analizar"}},"required":["text"]}},{"name":"timezone_convert","server":"datetime","description":"Convierte una fecha\/hora de una zona horaria a otra. \u00datil cuando el usuario quiere saber qu\u00e9 hora ser\u00e1 en otra ciudad o regi\u00f3n para un instante concreto.","inputSchema":{"type":"object","properties":{"datetime":{"type":"string","description":"Fecha\/hora a convertir en formato ISO 8601 o parseable, p. ej. \u00222026-06-01 18:30\u0022"},"from":{"type":"string","description":"Zona horaria IANA de origen, p. ej. \u0022Europe\/Madrid\u0022"},"to":{"type":"string","description":"Zona horaria IANA de destino, p. ej. \u0022America\/New_York\u0022"}},"required":["datetime","from","to"]}},{"name":"url_metadata","server":"web","description":"Descarga una URL HTML y extrae sus metadatos b\u00e1sicos: el \u003Ctitle\u003E, la meta description y el og:title de Open Graph. \u00datil para obtener una vista previa de una p\u00e1gina web.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"URL absoluta de una p\u00e1gina HTML, p. ej. \u0022https:\/\/smartescrow.es\u0022"}},"required":["url"]}},{"name":"uuid_generate","server":"crypto-utils","description":"Genera identificadores UUID. Soporta v4 (aleatorio) y v7 (ordenable por tiempo). \u00datil cuando el usuario necesita uno o varios identificadores \u00fanicos.","inputSchema":{"type":"object","properties":{"version":{"type":"string","enum":["v4","v7"],"description":"Versi\u00f3n del UUID (por defecto \u0022v7\u0022)","default":"v7"},"count":{"type":"integer","description":"Cantidad de UUID a generar (1-100, por defecto 1)","default":1,"minimum":1,"maximum":100}},"required":[]}},{"name":"wallet_account_details","server":"wallet","description":"Devuelve el ESTADO DE CUENTA EN VIVO de la wallet del usuario autenticado, consultado a Sefide: IBAN, saldo disponible, divisa, estado operativo de la cuenta y bloqueos (normativo\/operativo). No recibe ni necesita ning\u00fan email\/identificador: el servidor resuelve al usuario autenticado y consulta SOLO su cuenta. \u00dasala cuando el usuario pregunte por su IBAN, el estado de su cuenta o los detalles de su wallet (m\u00e1s all\u00e1 del saldo).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"wallet_balance","server":"wallet","description":"Devuelve el SALDO REAL y EN VIVO de la wallet del usuario autenticado, consultado a Sefide (la fuente de verdad), no a la base de datos (que est\u00e1 desincronizada). No recibe ni necesita ning\u00fan email\/identificador: el servidor resuelve al usuario autenticado y consulta SOLO su wallet. Devuelve el saldo disponible, la divisa y el estado operativo de la cuenta. \u00dasala SIEMPRE que el usuario pregunte por su saldo, dinero disponible o estado de su wallet.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"wallet_direct_debits","server":"wallet","description":"Devuelve las DOMICILIACIONES\/adeudos directos recibidos (recibos) EN VIVO de la wallet del usuario autenticado, consultados a Sefide. No recibe email\/identificador: el servidor resuelve al usuario autenticado. Acepta filtros opcionales por fechas (fecha_inicio, fecha_fin en formato YYYY-MM-DD) y limit. \u00dasala cuando el usuario pregunte por sus recibos o qui\u00e9n le domicilia pagos.","inputSchema":{"type":"object","properties":{"fecha_inicio":{"type":"string","description":"Fecha inicial del rango (YYYY-MM-DD). Opcional."},"fecha_fin":{"type":"string","description":"Fecha final del rango (YYYY-MM-DD). Opcional."},"limit":{"type":"integer","description":"N\u00famero m\u00e1ximo de domiciliaciones a devolver (por defecto 15, m\u00e1ximo 50)."}},"required":[]}},{"name":"wallet_movements","server":"wallet","description":"Devuelve los MOVIMIENTOS\/transacciones EN VIVO de la wallet del usuario autenticado (ingresos, cargos, transferencias), consultados a Sefide. No recibe email\/identificador: el servidor resuelve al usuario autenticado y consulta SOLO sus movimientos. Acepta paginaci\u00f3n opcional (limit, offset). \u00dasala cuando el usuario pregunte por sus \u00faltimos movimientos, su historial o sus transacciones.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"N\u00famero m\u00e1ximo de movimientos a devolver (por defecto 15, m\u00e1ximo 50)."},"offset":{"type":"integer","description":"Desplazamiento para paginar (por defecto 0)."}},"required":[]}},{"name":"wallet_transfer_details","server":"wallet","description":"Devuelve el DETALLE EN VIVO de una transferencia concreta de la wallet del usuario autenticado (IBAN ordenante\/beneficiario, importe, concepto, estado, fechas), consultado a Sefide. Requiere el id de operaci\u00f3n de la transferencia. El servidor acota la consulta a la cuenta del usuario autenticado: no es posible ver operaciones de terceros.","inputSchema":{"type":"object","properties":{"id_operacion":{"type":"string","description":"Identificador de la operaci\u00f3n\/transferencia a consultar (lo da, p. ej., wallet_movements)."}},"required":["id_operacion"]}}]}