{"meta":{"total":2227,"returned":50,"limit":50,"offset":0,"filter":"connectable","generatedAt":"2026-04-14T07:46:10.114Z"},"servers":[{"id":"modelcontextprotocol-name-mcp-binance-mcp","name":"A Model Context Protocol (MCP) server for Binance.com API. Offers standardized a","description":"A Model Context Protocol (MCP) server for Binance.com API. Offers standardized access to spot trading, wallets, staking, simple earn, convert, mining, algo trading, VIP loans, NFTs, pay, copy trading, dual investments, C2C/P2P, fiat ops, and rebates. Built in TypeScript/Node.js. Manages auth, requests, and errors for AI agents/devs.","url":"https://modelcontextprotocol.name/mcp/binance-mcp","sourceUrl":"https://github.com/Sperax/Binance-MCP","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":100,"latencyP50":40,"toolCount":6,"tools":[{"name":"get_ticker_price","description":"Get current price for a trading pair on Binance.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Trading pair (e.g. BTCUSDT, ETHUSDT, SPAUSDT)"}},"required":["symbol"]}},{"name":"get_24h_stats","description":"Get 24-hour statistics for a trading pair on Binance.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Trading pair (e.g. BTCUSDT)"}},"required":["symbol"]}},{"name":"get_order_book","description":"Get order book depth for a trading pair.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Trading pair (e.g. BTCUSDT)"},"limit":{"type":"number","description":"Depth limit: 5, 10, 20, 50, 100 (default: 10)"}},"required":["symbol"]}},{"name":"get_recent_trades","description":"Get recent trades for a trading pair.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Trading pair (e.g. BTCUSDT)"},"limit":{"type":"number","description":"Number of trades (default: 10, max: 1000)"}},"required":["symbol"]}},{"name":"get_klines","description":"Get candlestick/kline data for a trading pair.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Trading pair (e.g. BTCUSDT)"},"interval":{"type":"string","description":"Interval: 1m, 5m, 15m, 1h, 4h, 1d, 1w (default: 1h)"},"limit":{"type":"number","description":"Number of candles (default: 24, max: 1000)"}},"required":["symbol"]}},{"name":"list_all_symbols","description":"List all available trading pairs on Binance.","inputSchema":{"type":"object","properties":{"quote_asset":{"type":"string","description":"Filter by quote asset (e.g. USDT, BTC, ETH)"}}}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-15 16:05:42","lastCheckedAt":"2026-04-14 07:45:52","mcpAgentSnippet":{"type":"url","url":"https://modelcontextprotocol.name/mcp/binance-mcp","name":"modelcontextprotocol-name-mcp-binance-mcp"}},{"id":"api-usecortex-net-mcp","name":"UseCortex MCP Server — Give your AI coding agent a persistent memory. Read and w","description":"UseCortex MCP Server — Give your AI coding agent a persistent memory. Read and write knowledge from any tool.","url":"https://api.usecortex.net/mcp","sourceUrl":"https://github.com/usecortex-official/usecortex-mcp","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":99,"latencyP50":87,"toolCount":8,"tools":[{"name":"query_knowledge","description":"Search your knowledge base using AI. Ask a natural language question and get an answer based on your stored knowledge.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language question or search term"},"topic":{"type":"string","description":"Filter by specific topic (optional)"}},"required":["query"]}},{"name":"list_topics","description":"List all knowledge topics in your base.","inputSchema":{"type":"object","properties":{}}},{"name":"add_knowledge","description":"Write new knowledge to your base. Store facts, decisions, patterns, or any information your AI should remember.","inputSchema":{"type":"object","properties":{"content":{"type":"string","description":"The knowledge to store"},"topic":{"type":"string","description":"Topic to file under (auto-detected if omitted)"}},"required":["content"]}},{"name":"get_topic","description":"Retrieve all knowledge entries for a specific topic.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"Topic name to retrieve"}},"required":["topic"]}},{"name":"search_knowledge","description":"Search knowledge entries by keyword (text match). Use query_knowledge for AI-powered answers.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search term"}},"required":["query"]}},{"name":"capture_session","description":"Capture an AI session summary into persistent memory. Store what you learned, decided, or built during this session. Requires Memory plan.","inputSchema":{"type":"object","properties":{"summary":{"type":"string","description":"Compressed summary of the session — key decisions, patterns found, problems solved"},"tool":{"type":"string","description":"AI tool used (e.g. claude-code, cursor, chatgpt)"},"project":{"type":"string","description":"Project name or path (optional)"},"tags":{"type":"array","items":{"type":"string"},"description":"Tags for categorization (optional)"},"observations":{"type":"string","description":"Detailed observations as JSON string (optional)"}},"required":["summary"]}},{"name":"recall_memory","description":"Search across all captured session memories using AI. Ask what you worked on, what decisions were made, or what patterns were found. Requires Memory plan.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language question about past sessions"},"tool":{"type":"string","description":"Filter by AI tool (optional)"},"project":{"type":"string","description":"Filter by project (optional)"},"limit":{"type":"number","description":"Max results (default 20)"}},"required":["query"]}},{"name":"list_sessions","description":"List recent captured session memories. Requires Memory plan.","inputSchema":{"type":"object","properties":{"tool":{"type":"string","description":"Filter by AI tool (optional)"},"project":{"type":"string","description":"Filter by project (optional)"},"limit":{"type":"number","description":"Max results (default 10)"}}}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-16 21:24:45","lastCheckedAt":"2026-04-14 07:45:52","mcpAgentSnippet":{"type":"url","url":"https://api.usecortex.net/mcp","name":"api-usecortex-net-mcp"}},{"id":"modelcontextprotocol-name-mcp-binance-us-mcp","name":"A Model Context Protocol (MCP) server for Binance.US API. Provides standardized ","description":"A Model Context Protocol (MCP) server for Binance.US API. Provides standardized access to market data, spot trading, wallets, accounts, staking, OTC, sub-accounts, and institutional features. Built in TypeScript/Node.js. Handles authentication, rate limiting, and errors automatically. Ideal for AI agents and devs.","url":"https://modelcontextprotocol.name/mcp/binance-us-mcp","sourceUrl":"https://github.com/Sperax/Binance-US-MCP","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":96,"latencyP50":103,"toolCount":3,"tools":[{"name":"get_ticker_price","description":"Get current price for a trading pair on Binance.US.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Trading pair (e.g. BTCUSD, ETHUSD)"}},"required":["symbol"]}},{"name":"get_24h_stats","description":"Get 24-hour statistics for a Binance.US trading pair.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Trading pair"}},"required":["symbol"]}},{"name":"get_order_book","description":"Get order book for a Binance.US trading pair.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Trading pair"},"limit":{"type":"number","description":"Depth (default: 10)"}},"required":["symbol"]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-13 19:27:08","lastCheckedAt":"2026-04-14 07:45:52","mcpAgentSnippet":{"type":"url","url":"https://modelcontextprotocol.name/mcp/binance-us-mcp","name":"modelcontextprotocol-name-mcp-binance-us-mcp"}},{"id":"arclan-ai-mcp","name":"arclan-ai-mcp","description":null,"url":"https://arclan.ai/mcp","sourceUrl":null,"transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":96,"latencyP50":162,"toolCount":3,"tools":[{"name":"query_registry","description":"Search the Arclan registry for MCP servers. By default returns only connectable servers (active, mcp_partial, auth_gated). Use status=stdio to browse local-only servers available for installation. Use status=all to query the full index. Use this before connecting to an MCP server to check its validation status and score.","inputSchema":{"type":"object","properties":{"capability":{"type":"string","description":"Filter by tool name or keyword (searches name, description, tools)"},"min_score":{"type":"number","description":"Minimum validation score 0–100 (default 0)"},"transport":{"type":"string","enum":["http","sse","stdio","unknown"],"description":"Filter by transport type"},"status":{"type":"string","enum":["active","mcp_partial","auth_gated","stdio","unreachable","invalid","zombie","all"],"description":"Filter by state. Default (omit): connectable states only (active + mcp_partial + auth_gated). Use \"stdio\" for local-install catalog. Use \"all\" for the full index."},"limit":{"type":"number","description":"Max results to return 1–200 (default 50)"}}}},{"name":"get_server","description":"Get full details for a specific MCP server by endpoint URL or registry ID. Returns score, state, tools list, latency, and recent test history.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"The MCP server endpoint URL"},"id":{"type":"string","description":"The registry ID (slug) for the server"}}}},{"name":"report_server","description":"Submit an agent usage report for an MCP server. Reports are aggregated and influence registry trust scores. Call this after using an MCP server so the registry can track real-world reliability.","inputSchema":{"type":"object","required":["serverUrl","outcome"],"properties":{"serverUrl":{"type":"string","description":"The MCP server endpoint URL that was used"},"outcome":{"type":"string","enum":["success","failure","partial"],"description":"Result of using the server"},"agentId":{"type":"string","description":"Identifier for the reporting agent (optional)"},"toolsUsed":{"type":"array","items":{"type":"string"},"description":"List of tool names that were called"},"turnsRequired":{"type":"number","description":"Number of turns to complete the task"},"latencyMs":{"type":"number","description":"Total wall-clock latency in milliseconds"},"taskCategory":{"type":"string","description":"Category of task attempted (e.g. \"search\", \"write\", \"read\")"},"taskDescription":{"type":"string","description":"Brief description of what the task was"}}}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:04:46","lastCheckedAt":"2026-04-14 07:45:52","mcpAgentSnippet":{"type":"url","url":"https://arclan.ai/mcp","name":"arclan-ai-mcp"}},{"id":"www-wazion-com-api-mcp","name":"WAzion MCP Server - Connect AI agents to WhatsApp via WAzion API. Smart copilot,","description":"WAzion MCP Server - Connect AI agents to WhatsApp via WAzion API. Smart copilot, 24/7 automation, mass marketing.","url":"https://www.wazion.com/api/mcp/","sourceUrl":"https://github.com/wazionapps/mcp-server","transport":"unknown","specVersion":"2025-03-26","status":"active","validated":true,"score":95,"latencyP50":267,"toolCount":366,"tools":[{"name":"get_shop_status","description":"Consultar estado actual — Obtiene el estado actual de la tienda: idioma, creditos, configuracion basica [query]","inputSchema":{"type":"object"}},{"name":"update_language","description":"Cambiar idioma — Cambia el idioma del dashboard y las respuestas de la IA [mutation]","inputSchema":{"type":"object","properties":{"language":{"type":"string","description":"Codigo del idioma (es=Espanol, en=Ingles, de=Aleman, fr=Frances, pt=Portugues, hu=Hungaro, it=Italiano)","enum":["es","en","de","fr","pt","hu","it"]}},"required":["language"]}},{"name":"update_timezone","description":"Cambiar zona horaria — Cambia la zona horaria para mostrar fechas y horas correctamente [mutation]","inputSchema":{"type":"object","properties":{"timezone_pref":{"type":"string","description":"Zona horaria en formato IANA (ej: Europe/Madrid, America/Mexico_City)"}},"required":["timezone_pref"]}},{"name":"update_date_format","description":"Cambiar formato de fecha — Cambia el formato en que se muestran las fechas [mutation]","inputSchema":{"type":"object","properties":{"dateformat_pref":{"type":"string","description":"Formato de fecha","enum":["DD/MM/YYYY","MM/DD/YYYY","YYYY/MM/DD"]}},"required":["dateformat_pref"]}},{"name":"toggle_auto_translate","description":"Activar/desactivar traduccion automatica — Activa o desactiva la traduccion automatica de mensajes [mutation]","inputSchema":{"type":"object","properties":{"translateallways":{"type":"boolean","description":"true para activar, false para desactivar"}},"required":["translateallways"]}},{"name":"update_store_url","description":"Cambiar URL de la tienda — Actualiza la URL de tu tienda online [mutation]","inputSchema":{"type":"object","properties":{"url_tienda":{"type":"string","description":"URL completa de la tienda (ej: https://mitienda.com)"}},"required":["url_tienda"]}},{"name":"update_business_name","description":"Cambiar nombre del negocio — Actualiza el nombre publico de tu negocio. Se muestra en los mensajes de marketing y en la pagina de baja de WhatsApp. [mutation]","inputSchema":{"type":"object","properties":{"business_name":{"type":"string","description":"Nombre del negocio (max 255 caracteres)"}},"required":["business_name"]}},{"name":"update_business_info","description":"Actualizar informacion del negocio — Actualiza el tipo de negocio, tipo de venta y descripcion del negocio. Esta informacion ayuda a la IA a entender mejor tu negocio y dar respuestas mas relevantes. [mutation]","inputSchema":{"type":"object","properties":{"business_type":{"type":"string","description":"Tipo de negocio","enum":["ecommerce","professional_services","restaurant_hospitality","health_wellness","education","real_estate","automotive","other"]},"sale_type":{"type":"string","description":"Tipo de venta: products (productos), services (servicios), mixed (ambos), support_only (solo soporte)","enum":["products","services","mixed","support_only"]},"business_description":{"type":"string","description":"Descripcion breve del negocio (max 500 caracteres)"}}}},{"name":"list_agents","description":"Listar agentes — Lista todos los agentes del comercio con detalles de perfil y permisos [query]","inputSchema":{"type":"object"}},{"name":"create_agent","description":"Crear agente — Crea un nuevo agente de atencion. Puede fallar si se ha alcanzado el limite de agentes del plan actual. [mutation]","inputSchema":{"type":"object","properties":{"nickname":{"type":"string","description":"Nombre corto del agente (lo veran los clientes)"},"full_name":{"type":"string","description":"Nombre completo del agente"},"email":{"type":"string","description":"Email del agente"},"color":{"type":"string","description":"Color en formato hexadecimal","default":"#2563eb"},"phone":{"type":"string","description":"Telefono del agente"},"pin":{"type":"string","description":"PIN numerico para que el agente se identifique en la extension de Chrome"},"permissions_json":{"type":"string","description":"Permisos iniciales del agente en formato JSON. Si no se proporciona, el agente tendra todos los permisos por defecto"},"permissions":{"type":"object","description":"Permisos del agente (objeto JSON con permisos por seccion)"}},"required":["nickname","full_name","email"]}},{"name":"update_agent","description":"Editar agente — Modifica los datos de un agente existente [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del agente a editar"},"nickname":{"type":"string","description":"Nuevo nombre corto del agente"},"full_name":{"type":"string","description":"Nuevo nombre completo del agente"},"email":{"type":"string","description":"Nuevo email del agente"},"color":{"type":"string","description":"Nuevo color en formato hexadecimal"},"phone":{"type":"string","description":"Nuevo telefono del agente"},"pin":{"type":"string","description":"Nuevo PIN numerico para identificacion en la extension de Chrome"},"permissions_json":{"type":"string","description":"JSON string con los permisos del agente (ej: {\"ai_generate\": true, \"notes_view\": true}). Alternativa a save_agent_permissions."},"permissions":{"type":"object","description":"Permisos del agente (objeto JSON con permisos por seccion)"}},"required":["id"]}},{"name":"delete_agent","description":"Eliminar agente — Elimina un agente de atencion [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del agente a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id"]}},{"name":"get_agent_permissions","description":"Ver permisos de un agente — Obtiene los permisos configurados de un agente y el registro completo de permisos disponibles [query]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del agente"}},"required":["id"]}},{"name":"save_agent_permissions","description":"Guardar permisos de un agente — Actualiza los permisos de un agente. Enviar null para dar todos los permisos, o un objeto con los permisos especificos en true/false [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del agente"},"permissions":{"type":"string","description":"Objeto con permisos (ej: {\"ai_generate\": true, \"notes_view\": true, \"crm_edit\": false}). null = todos los permisos"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id","permissions"]}},{"name":"get_usage_stats","description":"Ver estadisticas de uso — Muestra el uso de creditos, tokens y costes de los ultimos dias [query]","inputSchema":{"type":"object","properties":{"action":{"type":"string","description":"summary para resumen diario, detail para detalle individual","default":"summary"},"from":{"type":"string","description":"Fecha inicio YYYY-MM-DD (default: hace 7 dias)"},"to":{"type":"string","description":"Fecha fin YYYY-MM-DD (default: hoy)"},"page":{"type":"integer","description":"Numero de pagina"},"limit":{"type":"integer","description":"Resultados por pagina"}}}},{"name":"get_analytics","description":"Ver analytics — Muestra metricas de rendimiento: conversaciones, mensajes, actividad diaria [query]","inputSchema":{"type":"object","properties":{"period":{"type":"string","description":"Periodo: 7d (semana), 14d (2 semanas), 30d (mes)","default":"7d"}}}},{"name":"toggle_analytics","description":"Activar/desactivar analytics — Activa o desactiva el registro de analytics con structured outputs para esta tienda [mutation]","inputSchema":{"type":"object","properties":{"enable_structured_outputs":{"type":"boolean","description":"true para activar analytics con structured outputs, false para desactivar"}},"required":["enable_structured_outputs"]}},{"name":"toggle_autolearning","description":"Activar/desactivar auto-learning — Activa o desactiva el aprendizaje automatico de la IA [mutation]","inputSchema":{"type":"object","properties":{"autolearning_enabled":{"type":"boolean","description":"true para activar, false para desactivar"}},"required":["autolearning_enabled"]}},{"name":"toggle_web_search","description":"Activar/desactivar busqueda web — Activa o desactiva la busqueda en internet de la IA. Cuando esta activa, la IA puede buscar informacion actualizada en internet para responder preguntas sobre tendencias, precios del mercado, noticias o datos que cambian frecuentemente. [mutation]","inputSchema":{"type":"object","properties":{"enable_web_search":{"type":"boolean","description":"true para activar busqueda web, false para desactivar"},"prompt":{"type":"string","description":"Prompt actual (se preserva al cambiar web search)"}},"required":["enable_web_search"]}},{"name":"get_prompt","description":"Ver prompt actual — Muestra el prompt actual de la IA [query]","inputSchema":{"type":"object"}},{"name":"get_prompt_history","description":"Ver historial de prompts — Muestra las versiones anteriores del prompt [query]","inputSchema":{"type":"object"}},{"name":"connect_ecommerce","description":"Conectar plataforma e-commerce — Conecta tu tienda online (Shopify, WooCommerce, PrestaShop o VTEX) para buscar productos, pedidos y clientes. Pregunta al usuario que plataforma usa. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"platform_type":{"type":"string","description":"Plataforma e-commerce: shopify, woocommerce, prestashop o vtex","enum":["shopify","woocommerce","prestashop","vtex"]},"shopify_url":{"type":"string","description":"Shopify: URL de la tienda (ej: mitienda.myshopify.com)"},"shopify_token":{"type":"string","description":"Shopify: Token de acceso de la app personalizada"},"wc_store_url":{"type":"string","description":"Solo WooCommerce: URL de la tienda (ej: mitienda.com)"},"wc_consumer_key":{"type":"string","description":"Solo WooCommerce: Consumer Key de la API REST"},"wc_consumer_secret":{"type":"string","description":"Solo WooCommerce: Consumer Secret de la API REST"},"ps_store_url":{"type":"string","description":"Solo PrestaShop: URL de la tienda (ej: mitienda.com)"},"ps_api_key":{"type":"string","description":"Solo PrestaShop: API Key del Webservice"},"vtex_account_name":{"type":"string","description":"Solo VTEX: Nombre de la cuenta VTEX"},"vtex_app_key":{"type":"string","description":"Solo VTEX: App Key de la API"},"vtex_app_token":{"type":"string","description":"Solo VTEX: App Token de la API"},"vtex_store_url":{"type":"string","description":"Solo VTEX: URL de la tienda (opcional, se genera automaticamente si no se proporciona)"},"platform_enabled":{"type":"string","description":"Activar/desactivar plataforma"},"shopify_locale_mode":{"type":"string","description":"Modo de locale (auto/fixed)"},"shopify_fixed_locale":{"type":"string","description":"Locale fijo para Shopify"},"shopify_content_locale_mode":{"type":"string","description":"Modo de locale para contenido"},"shopify_content_fixed_locale":{"type":"string","description":"Locale fijo para contenido"},"shopify_fallback_locale":{"type":"string","description":"Locale de fallback"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["platform_type"]}},{"name":"test_ecommerce_connection","description":"Probar conexion e-commerce — Verifica que la conexion con la plataforma e-commerce (Shopify, WooCommerce, PrestaShop o VTEX) funciona correctamente. Usa las credenciales guardadas si no se proporcionan. [query]","inputSchema":{"type":"object"}},{"name":"verify_ecommerce_write_permission","description":"Verificar permisos de escritura — Verifica si la conexion con la plataforma e-commerce tiene permisos de escritura para sincronizar FAQs. Requiere plataforma conectada Y plugin Product Q&A configurado. [query]","inputSchema":{"type":"object"}},{"name":"get_webhook_config","description":"Ver configuracion de webhooks — Lee la configuracion actual de webhooks de la tienda: si estan activados, URL configurada, eventos suscritos y si tiene secret. Usa esta accion SIEMPRE antes de configurar o modificar webhooks, y cuando el usuario pregunte sobre su configuracion de webhooks. [query]","inputSchema":{"type":"object"}},{"name":"configure_webhooks","description":"Configurar webhooks — Modifica la configuracion de webhooks. IMPORTANTE: Antes de llamar esta accion, llama SIEMPRE a get_webhook_config para ver la configuracion actual y confirmar con el usuario que datos quiere cambiar. Solo llama esta accion cuando tengas los datos concretos (URL, eventos, etc). Tras llamar esta accion, el sistema pedira confirmacion con botones - NO vuelvas a llamar a esta accion. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"webhook_enabled":{"type":"boolean","description":"true para activar webhooks"},"webhook_url":{"type":"string","description":"URL del endpoint que recibira los webhooks"},"webhook_secret":{"type":"string","description":"Secret para verificar la firma HMAC-SHA256"},"webhook_events":{"type":"array","description":"Lista de eventos a enviar. Disponibles: phone.detected (nuevo telefono detectado), followup.detected (Seguimiento Inteligente detecta intencion de compra), followup.replied (cliente respondio al seguimiento), followup.converted (cliente compro tras el seguimiento), plugin_chat.session_closed (conversacion de chat web cerrada por inactividad)"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["webhook_enabled"]}},{"name":"test_webhook","description":"Probar webhook — Envia un webhook de prueba. Usa automaticamente la URL y secret configurados en la tienda si no se proporcionan parametros. [mutation]","inputSchema":{"type":"object","properties":{"webhook_url":{"type":"string","description":"URL del webhook a probar. Si no se envia, usa la URL guardada en la configuracion"},"webhook_secret":{"type":"string","description":"Secret para firmar el webhook. Si no se envia, usa el secret guardado en la configuracion"}}}},{"name":"update_custom_functions","description":"Configurar funciones personalizadas IA — Define APIs que la IA puede llamar durante conversaciones [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"add_function":{"type":"string","description":"JSON de UNA funcion para ANADIR sin borrar las existentes. USAR SIEMPRE ESTE para crear nuevas funciones."},"remove_function":{"type":"string","description":"Nombre de la funcion a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}}}},{"name":"update_crm_endpoints","description":"Configurar endpoints CRM — Define endpoints para sincronizar datos con tu CRM [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"add_crm_endpoint":{"type":"string","description":"JSON de UN endpoint para ANADIR sin borrar los existentes. Formato: {\"type\": \"TIPO\", \"url\": \"https://...\", \"method\": \"GET|POST\"}. Tipos validos: sidePanel_CustomerInfo, ai_CustomerInitialInfo, sidePanel_CustomerFindToJoin, search_Products, globalSearch, verify_conversion. USAR SIEMPRE ESTE."},"remove_crm_endpoint":{"type":"string","description":"Tipo del endpoint a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}}}},{"name":"configure_plugin_chat","description":"Configurar plugin Chat — Configura el widget de chat web. Soporta actualizacion parcial: solo envia los campos que quieras cambiar. Los campos JSON (config_design, config_texts, config_behavior) se mergean automaticamente con los valores existentes, puedes enviar solo los sub-campos que quieras modificar. [mutation]","inputSchema":{"type":"object","properties":{"is_enabled":{"type":"boolean","description":"true para activar el plugin, false para desactivar"},"allowed_domains":{"type":"array","description":"Lista de dominios donde funcionara el chat (ej: [\"tutienda.com\", \"www.tutienda.com\"]). Vacio [] para permitir todos."},"config_design":{"type":"object","description":"Configuracion visual del widget. Se mergea con valores existentes: puedes enviar solo lo que quieras cambiar."},"config_texts":{"type":"object","description":"Textos del widget. Se mergea con valores existentes: puedes enviar solo lo que quieras cambiar."},"config_behavior":{"type":"object","description":"Comportamiento del widget. Se mergea con valores existentes: puedes enviar solo lo que quieras cambiar."},"avatar_url":{"type":"string","description":"URL de la imagen avatar del asistente en el chat"},"language_mode":{"type":"string","description":"'auto' detecta el idioma del visitante, 'fixed' responde siempre en el idioma configurado","enum":["auto","fixed"]},"language_fixed":{"type":"string","description":"Idioma fijo (solo aplica si language_mode es 'fixed')","enum":["es","en","de","fr","pt","it","hu"]},"language_available":{"type":"array","description":"Lista de idiomas disponibles (ej: [\"es\", \"en\", \"de\"])"},"language_show_selector":{"type":"boolean","description":"Mostrar selector de idioma en el widget"},"rate_limit_per_session":{"type":"integer","description":"Maximo de mensajes por sesion (default: 30)"},"rate_limit_window_minutes":{"type":"integer","description":"Ventana de tiempo en minutos para el rate limit (default: 60)"},"require_verification":{"type":"boolean","description":"Requiere verificacion del visitante antes de chatear"},"custom_css":{"type":"string","description":"CSS personalizado para inyectar en el widget"}}}},{"name":"configure_plugin_productqa","description":"Configurar plugin Product Q&A — Activa y configura el widget de preguntas sobre productos [mutation]","inputSchema":{"type":"object","properties":{"is_enabled":{"type":"boolean","description":"true para activar el plugin"},"allowed_domains":{"type":"string","description":"Dominios donde funcionara el widget"},"faq_enabled":{"type":"boolean","description":"Publicar FAQs automaticamente en tu tienda online"},"faq_max_per_product":{"type":"integer","description":"Maximo de FAQs por producto","default":5}},"required":["is_enabled"]}},{"name":"regenerate_plugin_token","description":"Regenerar token de plugin — Genera un nuevo token para los plugins (invalida el anterior) [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"plugin_type":{"type":"string","description":"Tipo de plugin cuyo token regenerar","enum":["chat","product-qa"],"default":"chat"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}}}},{"name":"list_docqa_assistants","description":"Listar asistentes Doc Q&A — Muestra todos los asistentes de documentacion creados con el plugin Doc Q&A [query]","inputSchema":{"type":"object"}},{"name":"create_docqa_assistant","description":"Crear asistente Doc Q&A — Crea un nuevo asistente de documentacion. Despues de crearlo, podras subir archivos (PDF, Word, etc.) desde el dashboard. [mutation]","inputSchema":{"type":"object","properties":{"display_name":{"type":"string","description":"Nombre del asistente (ej: 'Manual de Usuario', 'FAQ Producto X')"},"prompt":{"type":"string","description":"Instrucciones adicionales para la IA (opcional)"},"is_enabled":{"type":"boolean","description":"true para activar inmediatamente","default":true},"language_mode":{"type":"string","description":"Modo de idioma: auto (detecta automaticamente), fixed (siempre responde en un idioma fijo), selector (el usuario elige el idioma)","enum":["auto","fixed","selector"],"default":"auto"},"language_fixed":{"type":"string","description":"REQUERIDO si language_mode=fixed. Codigo del idioma fijo (es=Espanol, en=Ingles, de=Aleman, fr=Frances, pt=Portugues, it=Italiano, hu=Hungaro). Si el usuario dice 'idioma fijo en espanol', usar language_mode='fixed' Y language_fixed='es'.","enum":["es","en","de","fr","pt","it","hu"]},"rate_limit_per_session":{"type":"integer","description":"Limite de preguntas por sesion","default":50},"allowed_domains":{"type":"array","description":"Dominios donde funcionara el widget (vacio = todos)"},"language_available":{"type":"array","description":"Idiomas disponibles (array)"},"language_show_selector":{"type":"boolean","description":"Mostrar selector de idioma"},"rate_limit_window_minutes":{"type":"integer","description":"Ventana de rate limit en minutos"},"config_design":{"type":"object","description":"Configuracion de diseno (JSON)"},"config_texts":{"type":"object","description":"Textos personalizados (JSON)"}},"required":["display_name"]}},{"name":"update_docqa_assistant","description":"Actualizar asistente Doc Q&A — Modifica la configuracion de un asistente de documentacion existente [mutation]","inputSchema":{"type":"object","properties":{"assistant_id":{"type":"integer","description":"ID del asistente a modificar (obtener de list_docqa_assistants)"},"display_name":{"type":"string","description":"Nuevo nombre del asistente"},"prompt":{"type":"string","description":"Nuevas instrucciones para la IA"},"is_enabled":{"type":"boolean","description":"true para activar, false para desactivar"},"language_mode":{"type":"string","description":"Modo de idioma","enum":["auto","fixed","selector"]},"language_fixed":{"type":"string","description":"Idioma fijo"},"rate_limit_per_session":{"type":"integer","description":"Limite de preguntas por sesion"},"allowed_domains":{"type":"array","description":"Dominios permitidos"},"language_available":{"type":"array","description":"Idiomas disponibles (array)"},"language_show_selector":{"type":"boolean","description":"Mostrar selector de idioma"},"rate_limit_window_minutes":{"type":"integer","description":"Ventana de rate limit en minutos"},"config_design":{"type":"object","description":"Configuracion de diseno (JSON)"},"config_texts":{"type":"object","description":"Textos personalizados (JSON)"}},"required":["assistant_id"]}},{"name":"get_docqa_stats","description":"Ver estadisticas de asistente Doc Q&A — Muestra estadisticas detalladas de un asistente de documentacion. Requiere assistant_id: usa list_docqa_assistants primero para obtener los IDs disponibles. [query]","inputSchema":{"type":"object","properties":{"assistant_id":{"type":"integer","description":"ID del asistente (obtenlo llamando a list_docqa_assistants)"},"days":{"type":"integer","description":"Periodo en dias (1-365)","default":30}},"required":["assistant_id"]}},{"name":"get_chat_plugin_stats","description":"Ver estadisticas del plugin Chat Web — Muestra estadisticas de uso del plugin de chat web: conversaciones, mensajes, sesiones activas, referrers y paises [query]","inputSchema":{"type":"object"}},{"name":"update_contact_info","description":"Actualizar datos de contacto — Actualiza nombre, email y telefono de la cuenta [mutation]","inputSchema":{"type":"object","properties":{"client_name":{"type":"string","description":"Nombre del titular de la cuenta"},"client_email":{"type":"string","description":"NO USAR - El email requiere verificacion OTP y solo se puede cambiar desde la pagina Mi Cuenta del dashboard. El asistente no puede cambiar el email."},"client_phone":{"type":"string","description":"Telefono de contacto"},"billing_name":{"type":"string","description":"Nombre fiscal"},"billing_tax_id":{"type":"string","description":"NIF/CIF/Tax ID"},"billing_address":{"type":"string","description":"Direccion fiscal"},"billing_address2":{"type":"string","description":"Direccion linea 2 (piso, puerta, etc.)"},"billing_city":{"type":"string","description":"Ciudad"},"billing_state":{"type":"string","description":"Provincia o estado"},"billing_postal_code":{"type":"string","description":"Codigo postal"},"billing_country":{"type":"string","description":"Pais"},"email_change_code":{"type":"string","description":"Codigo de verificacion para cambio de email"}}}},{"name":"get_purchase_history","description":"Ver historial de compras — Muestra el historial de compras de creditos [query]","inputSchema":{"type":"object","properties":{"page":{"type":"integer","description":"Pagina a mostrar (default: 1)"},"limit":{"type":"integer","description":"Registros por pagina (default: 20, max: 50)"}}}},{"name":"update_billing_info","description":"Actualizar datos de facturacion — Actualiza los datos de facturacion para las facturas [mutation]","inputSchema":{"type":"object","properties":{"billing_name":{"type":"string","description":"Nombre o razon social para facturacion"},"billing_tax_id":{"type":"string","description":"NIF/CIF/VAT ID"},"billing_address":{"type":"string","description":"Direccion linea 1"},"billing_address2":{"type":"string","description":"Direccion linea 2 (piso, puerta, etc.)"},"billing_city":{"type":"string","description":"Ciudad"},"billing_state":{"type":"string","description":"Provincia o estado"},"billing_postal_code":{"type":"string","description":"Codigo postal"},"billing_country":{"type":"string","description":"Pais"},"client_name":{"type":"string","description":"Nombre del titular de la cuenta"},"client_phone":{"type":"string","description":"Telefono de contacto de la cuenta"},"email_change_code":{"type":"string","description":"Codigo de verificacion para cambio de email"}}}},{"name":"save_prompt","description":"Guardar prompt — Guarda un nuevo prompt para la IA. IMPORTANTE: Si el usuario quiere AÑADIR, MODIFICAR o QUITAR algo del prompt existente (ej: 'add a rule', 'anade horario', 'quita la parte de...', 'add a shop-level rule'), usa apply_prompt_instruction PRIMERO — esa accion modifica el prompt existente sin reemplazarlo. Solo usa save_prompt directamente si el usuario proporciona un prompt COMPLETO de reemplazo. FLUJO DE CONFIRMACION: 1) Llama a esta accion con el prompt completo. 2) Recibiras requires_confirmation=true con success=false — esto NO es un error, es el flujo normal. 3) Describe brevemente al usuario que cambios se van a guardar y PARA. NO llames de nuevo a esta accion. El sistema mostrara botones de Confirmar/Cancelar automaticamente. NUNCA vuelvas a llamar save_prompt tras recibir requires_confirmation=true, ni siquiera si el usuario escribe 'si', 'yes', 'hazlo', 'confirma', 'dale', 'do it' o cualquier variante afirmativa en texto. La confirmacion SOLO se completa con los botones del sistema. Si el usuario insiste por texto, respondele: 'Please use the Confirm button that appeared above to complete the save.' (en el idioma de la conversacion). [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"El nuevo prompt para la IA. Si el usuario quiere modificar el prompt existente (ej: 'anade horario de 9 a 18h'), usa apply_prompt_instruction en su lugar - esa accion genera el prompt modificado y luego tu llamas a save_prompt con el resultado"},"enable_web_search":{"type":"boolean","description":"Opcionalmente, activar o desactivar la busqueda web al guardar el prompt"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["prompt"]}},{"name":"improve_prompt","description":"Mejorar prompt con IA — Analiza el prompt actual con IA y devuelve puntuaciones por categoria, sugerencias de mejora y una version mejorada del prompt. Util cuando el usuario quiere saber si su prompt es bueno o como mejorarlo. [query]","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"El prompt a analizar. Si no lo proporciona el usuario, usar el prompt actual (obtener con get_prompt primero)"}},"required":["prompt"]}},{"name":"apply_prompt_instruction","description":"Aplicar instruccion al prompt — Modifica el prompt existente segun una instruccion en lenguaje natural. ESTA ES LA ACCION CORRECTA cuando el usuario quiere añadir, cambiar o quitar algo del prompt (ej: 'add a rule about...', 'anade horario', 'add a shop-level rule', 'quita la parte de devoluciones', 'hazlo mas formal'). NO guarda los cambios - solo devuelve el prompt modificado como preview. Despues de obtener el resultado, DEBES llamar a save_prompt para guardar los cambios. [query]","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"El prompt a modificar. Si no se proporciona, el endpoint lee automaticamente el prompt actual de la tienda. No es necesario llamar a get_prompt primero."},"instruction":{"type":"string","description":"La instruccion de que modificar en el prompt"}},"required":["instruction"]}},{"name":"restore_default_prompt","description":"Restaurar prompt por defecto — Obtiene el prompt por defecto segun el idioma [query]","inputSchema":{"type":"object"}},{"name":"rollback_prompt","description":"Revertir prompt a version anterior — Revierte la parte autogenerada del prompt a una version anterior del historial. La parte personalizada del usuario se mantiene. FLUJO DE CONFIRMACION: Esta accion devolvera requires_confirmation=true con success=false - esto NO es un error, es el flujo normal. Cuando recibas esto, describe brevemente al usuario que version se va a restaurar y PARA. NO llames de nuevo a esta accion. El sistema mostrara botones automaticamente. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"version_id":{"type":"integer","description":"ID de la version a restaurar. Obtenerlo llamando a get_prompt_history primero"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["version_id"]}},{"name":"get_autolearning_metrics","description":"Ver metricas de autolearning — Muestra las metricas del sistema de aprendizaje automatico incluyendo KPIs, distribucion por categoria y evolucion de similitud. [query]","inputSchema":{"type":"object"}},{"name":"apply_training_suggestion","description":"Aplicar sugerencia de entrenamiento — Aplica una sugerencia de entrenamiento de IA. Segun el nivel, crea un snippet de conocimiento o actualiza el prompt del asistente. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"suggestion_id":{"type":"integer","description":"ID de la sugerencia a aplicar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["suggestion_id"]}},{"name":"dismiss_training_suggestion","description":"Descartar sugerencia de entrenamiento — Descarta una sugerencia de entrenamiento de IA con motivo opcional. [mutation]","inputSchema":{"type":"object","properties":{"suggestion_id":{"type":"integer","description":"ID de la sugerencia a descartar"},"reason":{"type":"string","description":"Motivo del descarte (opcional)"}},"required":["suggestion_id"]}},{"name":"list_knowledge_snippets","description":"Listar snippets de conocimiento — Lista snippets de conocimiento filtrados por estado (pendiente, activo, en conflicto, obsoleto, rechazado) [query]","inputSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Filtro por estado: pending, active, conflicts, stale, rejected","enum":["pending","active","conflicts","stale","rejected","all"],"default":"all"},"category":{"type":"string","description":"Filtrar por categoria"},"search":{"type":"string","description":"Buscar en contenido de snippets"},"source_type":{"type":"string","description":"Filtrar por tipo de fuente"},"offset":{"type":"integer","description":"Offset para paginacion","default":0},"limit":{"type":"integer","description":"Limite de resultados","default":50},"risk_level":{"type":"string","description":"Filtrar por nivel de riesgo","enum":["low","medium","high"]}}}},{"name":"update_knowledge_snippet","description":"Gestionar snippet de conocimiento — Permite aprobar, rechazar, editar o eliminar un dato aprendido. Usa filter=pending en list_knowledge_snippets para ver los pendientes de revision. IMPORTANTE: Esta accion requiere confirmacion - ver seccion confirmation_flow. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del snippet a gestionar"},"action":{"type":"string","description":"Accion a realizar: approve, reject, edit, delete, resolve_conflict, keep_both, toggle_permanent, reject_and_propose","enum":["approve","reject","edit","delete","resolve_conflict","keep_both","toggle_permanent","reject_and_propose"]},"content":{"type":"string","description":"Nuevo contenido (solo para action=edit)"},"category":{"type":"string","description":"Nueva categoria (solo para action=edit)"},"keep_id":{"type":"integer","description":"ID del snippet a mantener (solo para action=resolve_conflict)"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id","action"]}},{"name":"smart_knowledge_update","description":"Actualización inteligente de conocimiento — Busca y actualiza datos aprendidos que contradigan o estén desactualizados según la instrucción del usuario. Usa esto cuando el usuario dice cosas como 'ahora aceptamos PayPal', 'hemos cambiado el horario', 'ya no hacemos envíos a X', etc. Primero llama SIN confirm para ver preview, luego con confirm=true y selected_ids para ejecutar. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"instruction":{"type":"string","description":"Instrucción en lenguaje natural describiendo el cambio en el negocio"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"},"selected_ids":{"type":"array","description":"IDs de snippets a modificar (solo con confirm=true). Si no se pasa, se aplican todos los cambios propuestos"},"changes":{"type":"array","description":"Lista de cambios propuestos del preview (para Phase 2 con confirm=true). Cada elemento: {id, action, proposed}"}},"required":["instruction"]}},{"name":"configure_ecommerce_locales","description":"Configurar idiomas de la plataforma — Configura como se manejan los idiomas y URLs de tu plataforma e-commerce [mutation]","inputSchema":{"type":"object","properties":{"shopify_locale_mode":{"type":"string","description":"Modo de URLs: auto detecta por mercado, fixed usa un idioma fijo","enum":["auto","fixed"],"default":"auto"},"shopify_fixed_locale":{"type":"string","description":"Idioma fijo para URLs (solo si locale_mode es fixed)"},"shopify_content_locale_mode":{"type":"string","description":"Modo de contenido: auto o fijo","enum":["auto","fixed"],"default":"auto"},"shopify_content_fixed_locale":{"type":"string","description":"Idioma fijo para contenido"},"shopify_fallback_locale":{"type":"string","description":"Idioma por defecto cuando no se puede detectar"}}}},{"name":"update_customer_tags","description":"Configurar etiquetas de clientes — Configura las etiquetas para clasificar clientes [mutation]","inputSchema":{"type":"object","properties":{"add_tag":{"type":"string","description":"JSON de UNA etiqueta para ANADIR sin borrar las existentes. Formato: {\"name\": \"VIP\", \"color\": \"#ff0000\"}. USAR SIEMPRE ESTE."},"remove_tag":{"type":"string","description":"Nombre de la etiqueta a eliminar"},"customerTags":{"type":"array","description":"Array completo de tags (reemplaza todos)"}}}},{"name":"update_order_settings","description":"Configurar pedidos — Configura prefijos de pedidos y telefonos/emails a ignorar [mutation]","inputSchema":{"type":"object","properties":{"order_prefix":{"type":"string","description":"Prefijo para numeros de pedido (ej: #, PED-)","default":"#"},"order_suffix":{"type":"string","description":"Sufijo para numeros de pedido"},"add_ignore_phone":{"type":"string","description":"Telefono a ANADIR sin borrar los existentes. USAR SIEMPRE ESTE para anadir telefonos."},"remove_ignore_phone":{"type":"string","description":"Telefono a eliminar de la lista de ignorados"},"add_ignore_email":{"type":"string","description":"Email a ANADIR sin borrar los existentes. USAR SIEMPRE ESTE para anadir emails."},"remove_ignore_email":{"type":"string","description":"Email a eliminar de la lista de ignorados"},"add_helper":{"type":"string","description":"JSON para crear o actualizar un atajo. Formato: {\"name\": \"NOMBRE_CORTO\", \"text\": \"TEXTO_DEL_ATAJO\", \"send\": true/false}. El campo 'send' activa el envio automatico (el atajo se envia al cliente sin que el agente pulse enviar). Si no se incluye 'send', se desactiva por defecto. Ejemplo con envio automatico: {\"name\": \"compra VIN ok\", \"text\": \"la compra esta correcta para dicho numero de bastidor\", \"send\": true}. Si ya existe un atajo con el mismo nombre, se actualiza (util para activar/desactivar envio automatico sin recrear el atajo)."},"remove_helper":{"type":"string","description":"Nombre corto del atajo a eliminar (ej: bastidor)"},"ignore_phones":{"type":"string","description":"Lista de telefonos a ignorar (JSON array)"},"ignore_emails":{"type":"string","description":"Lista de emails a ignorar (JSON array)"},"helpers":{"type":"string","description":"Lista de helpers (JSON array)"}}}},{"name":"get_plugin_conversations","description":"Ver conversaciones del plugin — Muestra las conversaciones del plugin de chat web. Soporta filtros por periodo de tiempo. [query]","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Numero maximo de conversaciones","default":20},"period":{"type":"string","description":"Periodo: 1 (ultimo dia/hoy), 7 (ultima semana), 30 (ultimo mes), 90 (ultimos 3 meses), all (todas)","enum":["1","7","30","90","all"],"default":"30"},"date_from":{"type":"string","description":"Fecha inicio en formato YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin en formato YYYY-MM-DD"},"page":{"type":"integer","description":"Numero de pagina"}}}},{"name":"test_shopify_connection","description":"Probar conexion Shopify — Valida la conexion con una tienda Shopify verificando las credenciales y los permisos OAuth. Si no se proporcionan credenciales, usa las almacenadas en la configuracion de la tienda. [query]","inputSchema":{"type":"object","properties":{"shopify_url":{"type":"string","description":"URL de la tienda Shopify (ej: mitienda.myshopify.com). Si no se proporciona, usa las credenciales guardadas"},"shopify_token":{"type":"string","description":"Token de acceso Shopify. Si no se proporciona, usa el token guardado"},"url":{"type":"string","description":"URL de la tienda Shopify a probar"},"token":{"type":"string","description":"Token de acceso a probar"}}}},{"name":"test_crm_endpoint","description":"Probar endpoint CRM — Prueba la conectividad y respuesta de un endpoint CRM personalizado configurado en la tienda [query]","inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"Tipo de endpoint: sidePanel_CustomerInfo, ai_CustomerInitialInfo, sidePanel_CustomerFindToJoin, search_Products, globalSearch","enum":["sidePanel_CustomerInfo","ai_CustomerInitialInfo","sidePanel_CustomerFindToJoin","search_Products","globalSearch"]},"url":{"type":"string","description":"URL del endpoint a probar"},"method":{"type":"string","description":"Metodo HTTP (GET o POST, default GET)","enum":["GET","POST"],"default":"GET"},"auth":{"type":"object","description":"Configuracion de autenticacion con type (header, basic, body, query) y campos"},"test_phone":{"type":"string","description":"Telefono de prueba (default +34600000000)"}},"required":["type","url"]}},{"name":"regenerate_api_key","description":"Regenerar API key del dashboard — Genera una nueva API key (token_ext) para la tienda. Esto invalida la key actual e impide el acceso de cualquier conexion MCP o aplicacion que la use. Usar solo si el usuario lo pide explicitamente. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"confirmation":{"type":"boolean","description":"Debe ser true para confirmar la regeneracion"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["confirmation"]}},{"name":"get_api_key","description":"Ver API key actual — Muestra la API key actual de la tienda (token_ext) y la URL del servidor MCP. Usa esta accion cuando el usuario pregunte por su API key, token, como conectar MCP, o como configurar Claude/Cursor/VS Code. [query]","inputSchema":{"type":"object"}},{"name":"get_product_qa_stats","description":"Ver estadisticas de Product Q&A — Muestra estadisticas del plugin de preguntas sobre productos [query]","inputSchema":{"type":"object"}},{"name":"get_product_qa_questions","description":"Ver preguntas de Product Q&A — Muestra las preguntas sobre productos. Soporta filtros por periodo de tiempo. [query]","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Numero maximo de preguntas","default":20},"period":{"type":"string","description":"Periodo de tiempo: today (solo hoy), 7 (ultimos 7 dias), 30 (ultimos 30 dias), 90 (ultimos 90 dias), all (todas)","enum":["today","7","30","90","all"],"default":"30"},"date_from":{"type":"string","description":"Fecha inicio en formato YYYY-MM-DD (tiene prioridad sobre period)"},"date_to":{"type":"string","description":"Fecha fin en formato YYYY-MM-DD (tiene prioridad sobre period)"},"page":{"type":"integer","description":"Numero de pagina"}}}},{"name":"publish_question_as_faq","description":"Publicar pregunta como FAQ — Publica manualmente una pregunta del historial como FAQ en tu tienda online. Util para promover preguntas importantes que no fueron detectadas automaticamente. [mutation]","inputSchema":{"type":"object","properties":{"question_id":{"type":"integer","description":"ID de la pregunta a publicar (obtener de get_product_qa_questions)"}},"required":["question_id"]}},{"name":"get_product_qa_faqs","description":"Ver FAQs publicadas — Lista las FAQs publicadas del plugin Product Q&A, agrupadas por producto. Requiere que el plugin Product Q&A este configurado/activado. [query]","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Filtrar por estado de la FAQ","enum":["published","unpublished","all"],"default":"published"},"product_id":{"type":"string","description":"Filtrar por ID de producto especifico"},"page":{"type":"integer","description":"Numero de pagina","default":1},"limit":{"type":"integer","description":"FAQs por pagina (max 50)","default":20}}}},{"name":"manage_faq","description":"Gestionar FAQs — Permite despublicar, republicar o eliminar FAQs del plugin Product Q&A. Util para gestionar contenido que ya no es relevante. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"faq_ids":{"type":"array","description":"Array de IDs de FAQs a gestionar (obtener de get_product_qa_faqs)"},"action":{"type":"string","description":"Accion a realizar: unpublish, republish, delete","enum":["unpublish","republish","delete"]},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["faq_ids","action"]}},{"name":"disconnect_ecommerce","description":"Desconectar plataforma e-commerce — Desconecta la integracion con tu plataforma e-commerce (Shopify, WooCommerce, etc.) [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"platform_type":{"type":"string","description":"Plataforma a desconectar. Usa disconnect_ seguido del nombre de la plataforma activa","enum":["disconnect_shopify","disconnect_woocommerce","disconnect_prestashop","disconnect_vtex"]},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["platform_type"]}},{"name":"get_storage_status","description":"Ver estado de almacenamiento — Muestra el uso actual de almacenamiento y el plan activo [query]","inputSchema":{"type":"object"}},{"name":"list_storage_files","description":"Listar archivos de almacenamiento — Muestra la lista de archivos subidos a la base de conocimiento con su tamano y fecha [query]","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Numero maximo de archivos a mostrar (1-50)","default":20}}}},{"name":"get_credits_info","description":"Ver informacion de creditos — Muestra informacion detallada sobre los creditos disponibles: gratuitos, comprados, porcentaje usado y fecha de renovacion. Usa esta accion cuando el usuario pregunte especificamente por creditos. [query]","inputSchema":{"type":"object"}},{"name":"send_support_ticket","description":"Enviar ticket de soporte — Envia un mensaje al equipo de soporte de WAzion. Usa esta accion cuando el usuario tenga un problema que no puedas resolver, quiera reportar un bug, o necesite ayuda del equipo tecnico. [mutation]","inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"Tipo de solicitud: bug (problema tecnico), question (consulta general), feature (sugerencia de mejora), billing (facturacion), other (otro)","enum":["bug","question","feature","billing","other"]},"subject":{"type":"string","description":"Asunto breve del mensaje (max 100 caracteres)"},"message":{"type":"string","description":"Descripcion detallada del problema o consulta (max 2000 caracteres)"}},"required":["type","subject","message"]}},{"name":"list_whatsapp_workflows","description":"Listar workflows de WhatsApp — Obtiene la lista de todos los workflows de automatizacion de WhatsApp. OBLIGATORIO llamar esta accion ANTES de cualquier operacion de eliminacion (delete_whatsapp_workflow, bulk_delete_workflows) para identificar workflows por nombre e ID y confirmar con el usuario cuales quiere eliminar. Tambien usar antes de 'unir' o 'combinar' workflows para entender la configuracion actual. [query]","inputSchema":{"type":"object"}},{"name":"create_whatsapp_workflow","description":"Crear workflow de WhatsApp — Crea un nuevo workflow de automatizacion para respuestas de WhatsApp. Campos requeridos: name y actions. Si el usuario no especifica nombre, genera uno descriptivo automaticamente (ej: 'Respuesta IA fuera horario'). Si el usuario pide crearlo desactivado o para revision, usa status='disabled'. Por defecto se crea activo. LIMITE: maximo 10 workflows por tienda. Si recibes error de limite alcanzado, NO reintentes crear — en su lugar: 1) Llama a list_whatsapp_workflows para mostrar los existentes, 2) Sugiere al usuario eliminar workflows que ya no necesite o reutilizar uno existente con update_whatsapp_workflow. [mutation]","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Nombre descriptivo del workflow (max 100 caracteres). Si el usuario no especifica, genera un nombre descriptivo automaticamente basado en las acciones/condiciones."},"trigger_type":{"type":"string","description":"Evento que activa el workflow: 'message.received' (al recibir un mensaje, por defecto) o 'message.sent' (al enviar un mensaje)","enum":["message.received","message.sent"],"default":"message.received"},"conditions":{"type":"object","description":"Condiciones para ejecutar el workflow. Formato: {logic: 'AND'|'OR', rules: [...]}. Si no se especifica, se ejecuta siempre."},"actions":{"type":"array","description":"Acciones a ejecutar. Tipos: {type:'reply_with_ai'} o {type:'reply', message:'texto'} o {type:'delay', seconds:N} o {type:'ai_filter'} o {type:'ai_filter', prompt:'instrucciones adicionales'}. Para reply_with_ai se puede añadir pre_send_check:{enabled:true} para cancelar el envio si llega un mensaje nuevo durante la generacion IA. Para reply se puede añadir no_repeat:true y no_repeat_hours:N (1, 6, 24, 168 o 0=siempre) para no repetir al mismo contacto. ai_filter analiza si el mensaje necesita respuesta y detiene el workflow si no (previene bucles con mensajes tipo 'gracias' o 'vale', ideal como primera accion antes de reply_with_ai). Opcion prompt:'instrucciones adicionales' para personalizar criterios. Minimo una accion."},"status":{"type":"string","description":"Estado inicial del workflow. Usar 'disabled' si el usuario quiere crearlo desactivado para revision. Por defecto: 'active'.","enum":["active","disabled"],"default":"active"},"session_id":{"type":"integer","description":"ID de la sesion de WhatsApp a la que asignar este workflow. Si no se especifica (null), el workflow se ejecuta para todos los numeros conectados."},"id":{"type":"integer","description":"ID del workflow (si se especifica, actualiza en lugar de crear)"}},"required":["name","actions"]}},{"name":"toggle_whatsapp_workflow","description":"Activar/Pausar workflow — Activa o pausa un workflow de WhatsApp existente [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del workflow a modificar"},"enabled":{"type":"boolean","description":"true para activar, false para pausar"}},"required":["id","enabled"]}},{"name":"delete_whatsapp_workflow","description":"Eliminar workflow — SOLO para BORRAR/ELIMINAR un workflow de WhatsApp de forma permanente. NO usar para editar, modificar, añadir palabras, simular, probar, unir, combinar ni reorganizar workflows. Si el usuario quiere cambiar algo, usar update_whatsapp_workflow. Si dice 'unir' o 'combinar' workflows, NO borrar ninguno — usar update_whatsapp_workflow para fusionar condiciones/acciones en uno existente. Antes de eliminar, SIEMPRE llama a list_whatsapp_workflows para confirmar con el usuario EXACTAMENTE cual workflow quiere borrar por nombre e ID. FLUJO DE CONFIRMACION OBLIGATORIO: Esta accion devolvera success=false con requires_confirmation=true — esto NO es un error, es el paso 1 del flujo normal de confirmacion. Cuando recibas esta respuesta: 1) Describe brevemente al usuario que workflow se eliminara, 2) PARA completamente, 3) NUNCA vuelvas a llamar a esta misma accion — hacerlo INVALIDA el token de confirmacion y rompe el flujo. Los botones de Confirmar/Cancelar aparecen automaticamente en la interfaz del usuario. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del workflow a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id"]}},{"name":"get_whatsapp_conversation_history","description":"Ver historial de conversacion WhatsApp — Muestra el historial de mensajes de WhatsApp con un telefono especifico [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono (con codigo de pais, ej: +34600123456)"},"limit":{"type":"integer","description":"Cantidad maxima de mensajes a mostrar (1-100)","default":50}},"required":["phone"]}},{"name":"list_knowledge_files","description":"Listar archivos de base de conocimiento — Muestra todos los archivos subidos a la base de conocimiento (PDFs, documentos, etc.) [query]","inputSchema":{"type":"object"}},{"name":"get_whatsapp_workflow_logs","description":"Ver logs de workflows WhatsApp — Obtiene el historial de ejecuciones de workflows de WhatsApp Auto con filtros de fecha [query]","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Numero maximo de logs a devolver (1-100)","default":20},"offset":{"type":"integer","description":"Desplazamiento para paginacion","default":0},"period":{"type":"string","description":"Periodo: 'today' o numero de dias (ej: '7' para ultimos 7 dias)"},"from":{"type":"string","description":"Fecha desde (formato: YYYY-MM-DD)"},"to":{"type":"string","description":"Fecha hasta (formato: YYYY-MM-DD)"}}}},{"name":"delete_knowledge_file","description":"Eliminar archivo de conocimiento — Elimina un archivo de la base de conocimiento (no permite eliminar archivos de sistema) [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"file_id":{"type":"integer","description":"ID del archivo a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["file_id"]}},{"name":"toggle_knowledge_file","description":"Activar/desactivar archivo de conocimiento — Activa o pausa un archivo sin eliminarlo (la IA solo usa archivos activos) [mutation]","inputSchema":{"type":"object","properties":{"file_id":{"type":"integer","description":"ID del archivo"},"is_active":{"type":"boolean","description":"true para activar, false para pausar"}},"required":["file_id","is_active"]}},{"name":"create_knowledge_file","description":"Crear archivo de conocimiento desde texto — Crea un nuevo archivo en la base de conocimiento a partir de contenido de texto. Ideal para anadir informacion como promociones, politicas, instrucciones, FAQs, etc. sin necesidad de subir un archivo manualmente. [mutation]","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Titulo descriptivo del archivo (max 255 caracteres)"},"content":{"type":"string","description":"Contenido de texto del archivo"},"description":{"type":"string","description":"Descripcion breve del contenido (para que la IA sepa cuando usar este archivo)"},"filename":{"type":"string","description":"Nombre del archivo con extension (ej: 'promociones.txt'). Si no se proporciona, se genera automaticamente desde el titulo. Extensiones validas: txt, md, csv, json, html"}},"required":["title","content"]}},{"name":"disconnect_whatsapp","description":"Desconectar WhatsApp — Desconecta una sesion de WhatsApp y elimina los datos de autenticacion. Si hay multiples numeros, requiere session_id. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesion a desconectar. Obligatorio si hay mas de un numero conectado. Usa get_whatsapp_status para obtener los IDs."},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}}}},{"name":"reconnect_whatsapp","description":"Reconectar WhatsApp — Intenta reconectar una sesion de WhatsApp existente (puede requerir escanear QR manualmente). Si hay multiples numeros, requiere session_id. [mutation]","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesion a reconectar. Obligatorio si hay mas de un numero. Usa get_whatsapp_status para obtener los IDs."}}}},{"name":"sync_knowledge_now","description":"Sincronizar conocimiento ahora — Fuerza la sincronizacion inmediata de los facts aprendidos al Vector Store (normalmente se hace automaticamente) [mutation]","inputSchema":{"type":"object"}},{"name":"update_knowledge_file","description":"Actualizar archivo de conocimiento — Cambia el titulo, descripcion y/o contenido de un archivo de conocimiento. Para archivos de texto (txt, md, csv, json, html) tambien permite editar el contenido del archivo. [mutation]","inputSchema":{"type":"object","properties":{"file_id":{"type":"integer","description":"ID del archivo"},"title":{"type":"string","description":"Nuevo titulo (max 200 caracteres)"},"description":{"type":"string","description":"Nueva descripcion (max 500 caracteres)"},"content":{"type":"string","description":"Nuevo contenido del archivo (solo para archivos de texto: txt, md, csv, json, html). Si se envia, el archivo se reemplaza en OpenAI y se re-indexa en el Vector Store. No enviar este parametro si solo se quiere cambiar titulo/descripcion."}},"required":["file_id","title"]}},{"name":"list_whatsapp_agents","description":"Listar agentes de atencion — Muestra todos los agentes disponibles para asignar en workflows de WhatsApp [query]","inputSchema":{"type":"object"}},{"name":"update_whatsapp_workflow","description":"Editar workflow de WhatsApp — Modifica un workflow existente (cambiar condiciones, añadir/quitar palabras clave, editar acciones, renombrar, activar/desactivar). Soporta update parcial: solo se sobreescriben los campos que se envian, los demas se mantienen sin cambios. IMPORTANTE: el parametro 'id' es OBLIGATORIO y debe ser el ID numerico del workflow (obtenido de list_whatsapp_workflows). Si el usuario dice 'ajustalo', 'yes apply', 'hazlo' u otra respuesta de seguimiento, DEBES recordar el workflow_id del contexto previo de la conversacion y enviarlo. NUNCA enviar esta accion sin 'id'. Para cambiar solo el mensaje de una accion: SIEMPRE leer primero con list_whatsapp_workflows, copiar el array de actions completo preservando TODOS los valores originales (especialmente delay seconds), y enviar el array modificado. Si solo cambias name, conditions o status, NO envies 'actions' — se preservan automaticamente. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID numerico del workflow a editar. OBLIGATORIO siempre. Obtenerlo de list_whatsapp_workflows. Sin este parametro la peticion se trata como creacion y fallara si falta el nombre."},"name":{"type":"string","description":"Nombre del workflow (max 100 caracteres). Si no se envia, se mantiene el nombre actual"},"trigger_type":{"type":"string","description":"Tipo de trigger: 'message.received' o 'message.sent'. Si no se envia, se mantiene el valor actual","enum":["message.received","message.sent"],"default":"message.received"},"conditions":{"type":"object","description":"Objeto con 'logic' (AND/OR) y 'rules' (array de condiciones). Si no se envia, se mantienen las condiciones actuales"},"actions":{"type":"array","description":"Array de acciones a ejecutar. Si no se envia, se mantienen las acciones actuales. IMPORTANTE: si envias este campo, debes enviar el array COMPLETO de acciones (no solo la que cambias). Para editar solo el mensaje de una accion reply/reply_with_ai: 1) llama list_whatsapp_workflows para obtener las acciones actuales, 2) modifica solo el campo que necesitas, 3) envia el array completo con todos los valores existentes preservados. Tipos soportados: reply_with_ai (con pre_send_check opcional), reply (con no_repeat opcional), delay (seconds: 1-300, OBLIGATORIO), ai_filter (filtro IA que decide si responder, previene bucles, ideal como primera accion). Para ai_filter se puede añadir prompt:'instrucciones' para personalizar criterios. VALIDACION: cada accion delay DEBE tener 'seconds' entre 1 y 300. Si copias un delay existente, manten su valor original de seconds."},"session_id":{"type":"integer","description":"ID de la sesion de WhatsApp a la que asignar este workflow. null = todos los numeros. Usa get_whatsapp_status para ver las sesiones."},"status":{"type":"string","description":"Estado del workflow: 'enabled' para activar, 'disabled' para desactivar","enum":["enabled","disabled"]}},"required":["id"]}},{"name":"get_onboarding_status","description":"Ver estado del onboarding — Muestra el progreso de configuracion inicial del usuario (setup guide) [query]","inputSchema":{"type":"object"}},{"name":"get_plugin_embed_code","description":"Obtener codigo embed de plugin — Genera el codigo de instalacion (embed code) para un plugin. Usalo cuando el usuario necesite el codigo para instalar Chat Web, Product Q&A o Doc Q&A en su web. [query]","inputSchema":{"type":"object","properties":{"plugin_type":{"type":"string","description":"Tipo de plugin: chat (Chat Web), product-qa (Product Q&A), doc-qa (Doc Q&A)","enum":["chat","product-qa","doc-qa"]}},"required":["plugin_type"]}},{"name":"update_whatsapp_session","description":"Editar sesion de WhatsApp — Actualiza la etiqueta (nombre) de una sesion de WhatsApp conectada. Util para identificar numeros (ej: 'Soporte', 'Ventas'). [mutation]","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesion a editar. Usa get_whatsapp_status para obtener los IDs."},"label":{"type":"string","description":"Etiqueta para identificar la sesion (max 50 caracteres). Null para quitar la etiqueta."}},"required":["session_id"]}},{"name":"get_whatsapp_qr","description":"Obtener QR de WhatsApp — Obtiene el codigo QR de WhatsApp para que el usuario lo escanee. IMPORTANTE: Requiere que exista una sesion previa (estado qr_pending). Si no hay sesion, usa connect_whatsapp primero para crear una. Si ya esta conectado, informa del estado. Devuelve una URL de imagen que puedes mostrar inline con ![QR WhatsApp](url). [query]","inputSchema":{"type":"object"}},{"name":"toggle_auto_describe_images","description":"Activar/desactivar lectura automatica de medios — Activa o desactiva el analisis automatico de imagenes, documentos PDF y audios enviados por clientes via WhatsApp. Afecta a todos los sistemas de IA (Piloto Automatico, WhatsApp Auto, respuestas manuales) [mutation]","inputSchema":{"type":"object","properties":{"auto_describe_images":{"type":"boolean","description":"true para activar, false para desactivar"},"auto_sentiment_analysis":{"type":"boolean","description":"Estado actual del analisis de sentimiento"}},"required":["auto_describe_images"]}},{"name":"get_mass_marketing_config","description":"Obtener configuracion de marketing masivo — Obtiene la configuracion actual de marketing masivo (auto-respuesta, texto de baja, aprobacion) [query]","inputSchema":{"type":"object"}},{"name":"save_mass_marketing_config","description":"Guardar configuracion de marketing masivo — Guarda la configuracion de marketing masivo: auto-respuesta, traduccion y opciones de envio [mutation]","inputSchema":{"type":"object","properties":{"auto_reply_enabled":{"type":"boolean","description":"true para activar la auto-respuesta, false para desactivarla"},"auto_reply_text":{"type":"string","description":"Texto de auto-respuesta cuando un destinatario responde a un mensaje masivo"},"auto_reply_translate":{"type":"boolean","description":"Si true, la auto-respuesta se traduce al idioma del destinatario segun su prefijo telefonico"},"auto_reply_unsubscribe":{"type":"boolean","description":"Si true, incluye un enlace de baja en la auto-respuesta"},"custom_unsubscribe_text":{"type":"string","description":"Texto personalizado para el enlace de baja en campanas. Maximo 500 caracteres. Enviar vacio o null para usar el texto predeterminado."},"require_approval":{"type":"boolean","description":"Si true, las campanas creadas por agentes requieren aprobacion del administrador antes de enviarse"}}}},{"name":"list_contact_lists","description":"Listar listas de contactos — Obtiene todas las listas de contactos de marketing masivo de la tienda [query]","inputSchema":{"type":"object","properties":{"page":{"type":"integer","description":"Numero de pagina"},"search":{"type":"string","description":"Texto de busqueda"}}}},{"name":"create_contact_list","description":"Crear lista de contactos — Crea una nueva lista de contactos para campanas de marketing masivo [mutation]","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Nombre de la lista de contactos"},"description":{"type":"string","description":"Descripcion opcional de la lista"}},"required":["name"]}},{"name":"delete_contact_list","description":"Eliminar lista de contactos — Elimina una lista de contactos y todos sus contactos asociados. Esta accion no se puede deshacer. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["list_id"]}},{"name":"list_campaigns","description":"Listar campanas de marketing — Obtiene todas las campanas de marketing masivo de la tienda [query]","inputSchema":{"type":"object"}},{"name":"create_campaign","description":"Crear campana de marketing — Crea una nueva campana de marketing masivo. Puede crearse como borrador o programarse para una fecha futura. Soporta variables de plantilla {nombre}, {telefono}, {tienda} en el mensaje. [mutation]","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Nombre de la campana"},"message_text":{"type":"string","description":"Texto del mensaje. Soporta variables: {nombre} (nombre del contacto), {telefono} (telefono del contacto), {tienda} (nombre de la tienda)"},"list_id":{"type":"integer","description":"ID de la lista de contactos a usar para esta campana"},"send_interval_seconds":{"type":"integer","description":"Segundos entre cada envio (minimo 10, por defecto 30)","default":30},"translate_by_prefix":{"type":"boolean","description":"Si true, traduce el mensaje al idioma del destinatario segun prefijo telefonico","default":false},"include_unsubscribe_link":{"type":"boolean","description":"Si true, anade un enlace de baja al final del mensaje","default":true},"archive_after_send":{"type":"boolean","description":"Si true, archiva automaticamente cada chat de WhatsApp tras enviar el mensaje","default":false},"session_ids":{"type":"array","description":"Array de IDs de sesion de WhatsApp a usar para enviar. Si no se especifica, usa todas las sesiones habilitadas para marketing masivo. Usa get_whatsapp_status para ver los IDs."},"scheduled_at":{"type":"string","description":"Fecha y hora para programar el envio (formato: YYYY-MM-DD HH:MM:SS). Debe ser una fecha futura. Si se especifica, la campana se crea con estado 'scheduled' en vez de 'draft'."},"segment_filters":{"type":"object","description":"Filtros de segmentacion para enviar solo a contactos que cumplan criterios. Objeto con claves opcionales: tags (array de nombres de tags), last_contact_days (entero, enviar solo a contactos con actividad en los ultimos N dias), has_whatsapp_history (boolean, enviar solo a contactos con historial de WhatsApp)"},"media_url":{"type":"string","description":"URL del archivo multimedia a enviar con el mensaje (imagen, video, documento). Debe ser una URL publica accesible."},"media_type":{"type":"string","description":"Tipo de multimedia: 'image', 'video' o 'document'. Requerido si se especifica media_url."},"media_filename":{"type":"string","description":"Nombre del archivo multimedia. Requerido para tipo 'document'."},"is_recurring":{"type":"boolean","description":"Si true, la campana se ejecuta de forma recurrente segun recurring_cron"},"recurring_cron":{"type":"string","description":"Expresion cron para campanas recurrentes (ej: '0 10 * * 1' para cada lunes a las 10:00). Requerido si is_recurring es true."}},"required":["name","message_text","list_id"]}},{"name":"start_campaign","description":"Iniciar campana de marketing — Inicia el envio de una campana de marketing masivo. Funciona con campanas en estado borrador o programadas. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campana a iniciar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["campaign_id"]}},{"name":"pause_campaign","description":"Pausar campana — Pausa temporalmente una campana de marketing masivo en curso [mutation]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campana a pausar"}},"required":["campaign_id"]}},{"name":"resume_campaign","description":"Reanudar campana — Reanuda una campana de marketing masivo que fue pausada [mutation]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campana a reanudar"}},"required":["campaign_id"]}},{"name":"cancel_campaign","description":"Cancelar campana — Cancela definitivamente una campana de marketing masivo (en curso, pausada, borrador o programada). Los mensajes ya enviados no se deshacen. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campana a cancelar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["campaign_id"]}},{"name":"get_campaign_logs","description":"Ver logs de campana — Obtiene el progreso y logs de envio de una campana especifica [query]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campana"},"page":{"type":"integer","description":"Numero de pagina"},"limit":{"type":"integer","description":"Resultados por pagina"}},"required":["campaign_id"]}},{"name":"get_unsubscribed_list","description":"Ver contactos dados de baja — Obtiene la lista de contactos que se han dado de baja de los envios masivos de la tienda [query]","inputSchema":{"type":"object","properties":{"page":{"type":"integer","description":"Numero de pagina para paginacion (default: 1)"},"search":{"type":"string","description":"Filtrar por numero de telefono"},"date_from":{"type":"string","description":"Fecha inicio filtro (formato YYYY-MM-DD)"},"date_to":{"type":"string","description":"Fecha fin filtro (formato YYYY-MM-DD)"}}}},{"name":"cancel_campaign_schedule","description":"Cancelar programacion de campana — Cancela la programacion de una campana programada, cambiandola a estado borrador. No elimina la campana. [mutation]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campana programada"}},"required":["campaign_id"]}},{"name":"count_filtered_contacts","description":"Contar contactos filtrados por segmento — Cuenta cuantos contactos de una lista cumplen con filtros de segmentacion (tags, actividad reciente, historial WhatsApp) [query]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista de contactos"},"segment_filters":{"type":"string","description":"Filtros en formato JSON. Claves: tags (array), last_contact_days (entero), has_whatsapp_history (boolean)"}},"required":["list_id","segment_filters"]}},{"name":"list_blacklist","description":"Ver lista negra de marketing — Obtiene los numeros bloqueados manualmente que no recibiran campanas masivas, distinta de las bajas voluntarias [query]","inputSchema":{"type":"object","properties":{"search":{"type":"string","description":"Filtrar por numero de telefono"},"page":{"type":"integer","description":"Pagina de resultados","default":1}}}},{"name":"add_to_blacklist","description":"Anadir telefono a lista negra — Bloquea un numero de telefono para que no reciba campanas de marketing masivo [mutation]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono a bloquear (con prefijo internacional, ej: +34612345678)"},"reason":{"type":"string","description":"Motivo del bloqueo (opcional, max 500 caracteres)"}},"required":["phone"]}},{"name":"remove_from_blacklist","description":"Quitar telefono de lista negra — Desbloquea un numero de telefono de la lista negra de marketing masivo [mutation]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono a desbloquear"}},"required":["phone"]}},{"name":"export_campaign_csv","description":"Exportar resultados de campana a CSV — Descarga los logs de envio de una campana completada como archivo CSV. Solo funciona con campanas completadas, canceladas, pausadas o archivadas. [query]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campana cuyos resultados se quieren exportar"}},"required":["campaign_id"]}},{"name":"get_smart_followup_config","description":"Obtener configuracion de seguimiento inteligente — Obtiene la configuracion actual del sistema de seguimiento inteligente (Smart Follow-up) [query]","inputSchema":{"type":"object","properties":{"exclude_phones":{"type":"array","description":"Lista de telefonos excluidos del seguimiento"},"sending_window_start":{"type":"string","description":"Hora de inicio de ventana de envio (HH:MM)"},"sending_window_end":{"type":"string","description":"Hora de fin de ventana de envio (HH:MM)"}}}},{"name":"save_smart_followup_config","description":"Actualizar configuracion Smart Follow-up — Actualiza la configuracion de seguimiento inteligente. Solo envia los campos que quieras cambiar. El sistema verifica automaticamente que el contacto no este dado de baja (mass marketing) y no tenga sentimiento negativo antes de enviar. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Enable or disable smart follow-up"},"run_hour":{"type":"integer","description":"Hour to run (0-23) in shop's timezone"},"lookback_hours":{"type":"integer","description":"How many hours back to look for conversations (default 24)"},"min_intent_level":{"type":"string","description":"Minimum intent level to follow up: 'low', 'medium', or 'high'"},"max_attempts":{"type":"integer","description":"Maximum follow-up attempts per conversation (1-5)"},"retry_interval_hours":{"type":"integer","description":"Hours to wait between retry attempts for the same conversation"},"max_conversations":{"type":"integer","description":"Maximum conversations to process per cron run"},"auto_send_enabled":{"type":"boolean","description":"Whether to automatically send WhatsApp follow-up messages"},"archive_after_send":{"type":"boolean","description":"Whether to archive the WhatsApp chat after sending follow-up"},"delay_days":{"type":"integer","description":"Days to wait before sending follow-up (0-7)"},"run_days":{"type":"array","description":"Days of the week to run (0=Sunday, 1=Monday, ..., 6=Saturday). JSON array of integers."},"tracking_days":{"type":"integer","description":"Days to track conversions after follow-up is sent"},"reset_attempts_days":{"type":"integer","description":"Days after which attempt count resets for a conversation"},"custom_instructions":{"type":"string","description":"Instrucciones personalizadas para la IA al generar mensajes de seguimiento"},"followup_tone":{"type":"string","description":"Tono de los mensajes de seguimiento: 'friendly' (amigable), 'professional' (profesional) o 'casual'"},"whatsapp_session_id":{"type":"integer","description":"ID de la sesion de WhatsApp a usar para enviar los mensajes de seguimiento"},"exclude_phones":{"type":"array","description":"Lista de telefonos a excluir del seguimiento (maximo 200). Formato: array de strings con prefijo +"},"sending_window_start":{"type":"integer","description":"Hora de inicio de la ventana de envio (0-23). null para desactivar ventana"},"sending_window_end":{"type":"integer","description":"Hora de fin de la ventana de envio (0-23). null para desactivar ventana"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}}}},{"name":"trigger_smart_followup","description":"Ejecutar Smart Follow-up ahora — Lanza manualmente el analisis de seguimiento inteligente para esta tienda. Si ya hay una ejecucion en curso (cron o manual), devuelve error. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"conversation_hash":{"type":"string","description":"Hash de conversación específica"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}}}},{"name":"get_smart_followup_stats","description":"Estadisticas de Smart Follow-up — Estadisticas de recuperacion de ventas: embudo de conversion, tasa de respuesta, productos mas mencionados, rendimiento por intento y desglose de motivos de omision [query]","inputSchema":{"type":"object","properties":{"period":{"type":"string","description":"Periodo: 'today', 'yesterday', 'last_7_days', 'last_30_days', 'this_month', 'last_month', 'last_90_days', 'last_365_days', 'all_time' o 'custom'. Default: 'last_30_days'","enum":["today","yesterday","last_7_days","last_30_days","this_month","last_month","last_90_days","last_365_days","all_time","custom"]},"date_from":{"type":"string","description":"Fecha inicio (YYYY-MM-DD). Solo con period='custom'"},"date_to":{"type":"string","description":"Fecha fin (YYYY-MM-DD). Solo con period='custom'"},"page":{"type":"integer","description":"Numero de pagina"},"intent_level":{"type":"string","description":"Filtrar por nivel de intencion","enum":["low","medium","high"]},"outcome":{"type":"string","description":"Filtrar por resultado"},"action_taken":{"type":"string","description":"Filtrar por accion tomada"},"search":{"type":"string","description":"Buscar en los registros"}}}},{"name":"get_smart_followup_logs","description":"Logs de actividad Smart Follow-up — Lista las acciones recientes de seguimiento inteligente: que clientes se contactaron, nivel de intencion, producto mencionado, resultado y mensaje enviado [query]","inputSchema":{"type":"object","properties":{"page":{"type":"integer","description":"Numero de pagina (20 resultados por pagina, default 1)"},"intent_level":{"type":"string","description":"Filtrar por nivel de intencion: 'low', 'medium' o 'high'"},"action_taken":{"type":"string","description":"Filtrar por accion: 'message_sent', 'webhook_fired', 'logged_only' o 'skipped'"},"outcome":{"type":"string","description":"Filtrar por resultado: 'abandoned', 'unclear', 'converted' o 'support_only'"},"search":{"type":"string","description":"Buscar por telefono o producto mencionado"},"period":{"type":"string","description":"Periodo: 'today', 'yesterday', 'last_7_days', 'last_30_days', 'this_month', 'last_month', 'last_90_days', 'all_time' o 'custom'","enum":["today","yesterday","last_7_days","last_30_days","this_month","last_month","last_90_days","last_365_days","all_time","custom"]},"date_from":{"type":"string","description":"Fecha inicio (YYYY-MM-DD). Solo con period='custom'"},"date_to":{"type":"string","description":"Fecha fin (YYYY-MM-DD). Solo con period='custom'"}}}},{"name":"search_conversations","description":"Buscar conversaciones — Busca conversaciones por texto, telefono o rango de fechas. Ejemplo: 'busca conversaciones que mencionen devolucion' [query]","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Texto a buscar en los mensajes de las conversaciones"},"phone":{"type":"string","description":"Numero de telefono del cliente (con o sin +)"},"date_from":{"type":"string","description":"Fecha inicio (YYYY-MM-DD)"},"date_to":{"type":"string","description":"Fecha fin (YYYY-MM-DD)"},"limit":{"type":"integer","description":"Maximo de resultados (default 20, max 50)","default":20},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"hours":{"type":"integer","description":"Ultimas N horas"},"conversation_id":{"type":"integer","description":"ID de conversacion especifica"},"last_n":{"type":"integer","description":"Ultimos N mensajes"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days"]},"agent_id":{"type":"integer","description":"ID del agente"},"message":{"type":"string","description":"Texto del mensaje a enviar o eliminar"},"format":{"type":"string","description":"Formato de respuesta"}}}},{"name":"get_recent_conversations","description":"Ver conversaciones recientes — Obtiene las conversaciones mas recientes ordenadas por ultima actividad [query]","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Cantidad de conversaciones (default 10, max 50)","default":10},"hours":{"type":"integer","description":"Ventana de tiempo en horas (default 48)","default":48},"query":{"type":"string","description":"Texto de busqueda"},"phone":{"type":"string","description":"Filtrar por telefono del cliente"},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"conversation_id":{"type":"integer","description":"ID de conversacion especifica"},"last_n":{"type":"integer","description":"Ultimos N mensajes"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days"]},"agent_id":{"type":"integer","description":"ID del agente"},"message":{"type":"string","description":"Texto del mensaje a enviar o eliminar"},"format":{"type":"string","description":"Formato de respuesta"}}}},{"name":"get_conversation_detail","description":"Ver detalle de conversacion — Muestra los mensajes completos de una conversacion especifica, incluyendo datos del cliente [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono del cliente"},"conversation_id":{"type":"integer","description":"ID de la conversacion (alternativa a phone)"},"last_n":{"type":"integer","description":"Cantidad de ultimos mensajes a mostrar (default 50, max 200)","default":50},"query":{"type":"string","description":"Texto de busqueda"},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"hours":{"type":"integer","description":"Ultimas N horas"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days"]},"agent_id":{"type":"integer","description":"ID del agente"},"message":{"type":"string","description":"Texto del mensaje a enviar o eliminar"},"format":{"type":"string","description":"Formato de respuesta"}}}},{"name":"get_conversations_summary","description":"Resumen de conversaciones — Resumen estadistico de las conversaciones de un periodo: total, satisfaccion media, urgencia, etc. [query]","inputSchema":{"type":"object","properties":{"period":{"type":"string","description":"Periodo (default today)","enum":["today","yesterday","last_7_days"],"default":"today"},"query":{"type":"string","description":"Texto de busqueda"},"phone":{"type":"string","description":"Filtrar por telefono del cliente"},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"hours":{"type":"integer","description":"Ultimas N horas"},"conversation_id":{"type":"integer","description":"ID de conversacion especifica"},"last_n":{"type":"integer","description":"Ultimos N mensajes"},"agent_id":{"type":"integer","description":"ID del agente"},"message":{"type":"string","description":"Texto del mensaje a enviar o eliminar"},"format":{"type":"string","description":"Formato de respuesta"}}}},{"name":"get_unanswered_conversations","description":"Conversaciones sin responder — Muestra conversaciones donde el ultimo mensaje es del cliente (sin respuesta del agente/IA) [query]","inputSchema":{"type":"object","properties":{"hours":{"type":"integer","description":"Buscar en las ultimas N horas (default 24)","default":24},"limit":{"type":"integer","description":"Maximo de resultados (default 20)","default":20},"query":{"type":"string","description":"Texto de busqueda"},"phone":{"type":"string","description":"Filtrar por telefono del cliente"},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"conversation_id":{"type":"integer","description":"ID de conversacion especifica"},"last_n":{"type":"integer","description":"Ultimos N mensajes"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days"]},"agent_id":{"type":"integer","description":"ID del agente"},"message":{"type":"string","description":"Texto del mensaje a enviar o eliminar"},"format":{"type":"string","description":"Formato de respuesta"}}}},{"name":"get_conversations_by_agent","description":"Conversaciones por agente — Muestra las conversaciones asignadas a un agente especifico [query]","inputSchema":{"type":"object","properties":{"agent_id":{"type":"integer","description":"ID del agente"},"limit":{"type":"integer","description":"Maximo de resultados (default 20)","default":20},"query":{"type":"string","description":"Texto de busqueda"},"phone":{"type":"string","description":"Filtrar por telefono del cliente"},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"hours":{"type":"integer","description":"Ultimas N horas"},"conversation_id":{"type":"integer","description":"ID de conversacion especifica"},"last_n":{"type":"integer","description":"Ultimos N mensajes"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days"]},"message":{"type":"string","description":"Texto del mensaje a enviar o eliminar"},"format":{"type":"string","description":"Formato de respuesta"}},"required":["agent_id"]}},{"name":"list_tasks","description":"Listar tareas — Lista las tareas de la tienda con filtros opcionales por estado, agente o telefono [query]","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Filtrar por estado","enum":["pending","in_progress","completed","cancelled"]},"agent_id":{"type":"integer","description":"Filtrar por agente asignado"},"phone":{"type":"string","description":"Filtrar por telefono del cliente"},"limit":{"type":"integer","default":20},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"task_text":{"type":"string","description":"Texto de la tarea"},"due_date":{"type":"string","description":"Fecha limite YYYY-MM-DD"},"priority":{"type":"string","description":"Prioridad de la tarea","enum":["low","medium","high"]},"assigned_agent_id":{"type":"integer","description":"ID del agente asignado"},"task_id":{"type":"integer","description":"ID de la tarea"},"include_completed":{"type":"boolean","description":"Incluir tareas completadas"}}}},{"name":"create_task","description":"Crear tarea — Crea una nueva tarea asociada opcionalmente a un cliente y agente [mutation]","inputSchema":{"type":"object","properties":{"task_text":{"type":"string","description":"Descripcion de la tarea"},"phone":{"type":"string","description":"Telefono del cliente relacionado"},"due_date":{"type":"string","description":"Fecha limite (YYYY-MM-DD)"},"priority":{"type":"string","enum":["low","medium","high"],"default":"medium"},"assigned_agent_id":{"type":"integer","description":"ID del agente al que asignar la tarea"},"status":{"type":"string","description":"Estado de la tarea"},"agent_id":{"type":"integer","description":"ID del agente"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"task_id":{"type":"integer","description":"ID de la tarea"},"include_completed":{"type":"boolean","description":"Incluir tareas completadas"}},"required":["task_text"]}},{"name":"update_task","description":"Actualizar tarea — Modifica una tarea existente: cambiar estado, texto, prioridad, fecha limite o asignacion [mutation]","inputSchema":{"type":"object","properties":{"task_id":{"type":"integer","description":"ID de la tarea a actualizar"},"task_text":{"type":"string","description":"Nuevo texto de la tarea"},"status":{"type":"string","description":"Nuevo estado","enum":["pending","in_progress","completed","cancelled"]},"due_date":{"type":"string","description":"Nueva fecha limite (YYYY-MM-DD)"},"priority":{"type":"string","enum":["low","medium","high"]},"assigned_agent_id":{"type":"integer","description":"Nuevo agente asignado"},"agent_id":{"type":"integer","description":"ID del agente"},"phone":{"type":"string","description":"Telefono del cliente"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"include_completed":{"type":"boolean","description":"Incluir tareas completadas"}},"required":["task_id"]}},{"name":"delete_task","description":"Eliminar tarea — Elimina una tarea permanentemente [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"task_id":{"type":"integer","description":"ID de la tarea a eliminar"},"status":{"type":"string","description":"Estado de la tarea"},"agent_id":{"type":"integer","description":"ID del agente"},"phone":{"type":"string","description":"Telefono del cliente"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"task_text":{"type":"string","description":"Texto de la tarea"},"due_date":{"type":"string","description":"Fecha limite YYYY-MM-DD"},"priority":{"type":"string","description":"Prioridad de la tarea","enum":["low","medium","high"]},"assigned_agent_id":{"type":"integer","description":"ID del agente asignado"},"include_completed":{"type":"boolean","description":"Incluir tareas completadas"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["task_id"]}},{"name":"get_overdue_tasks","description":"Tareas vencidas — Muestra todas las tareas pendientes cuya fecha limite ya paso [query]","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Estado de la tarea"},"agent_id":{"type":"integer","description":"ID del agente"},"phone":{"type":"string","description":"Telefono del cliente"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"task_text":{"type":"string","description":"Texto de la tarea"},"due_date":{"type":"string","description":"Fecha limite YYYY-MM-DD"},"priority":{"type":"string","description":"Prioridad de la tarea","enum":["low","medium","high"]},"assigned_agent_id":{"type":"integer","description":"ID del agente asignado"},"task_id":{"type":"integer","description":"ID de la tarea"},"include_completed":{"type":"boolean","description":"Incluir tareas completadas"}}}},{"name":"get_agent_tasks","description":"Tareas de un agente — Muestra las tareas asignadas a un agente especifico [query]","inputSchema":{"type":"object","properties":{"agent_id":{"type":"integer","description":"ID del agente"},"include_completed":{"type":"string","description":"Incluir tareas completadas (default 0)","enum":["0","1"],"default":"0"},"status":{"type":"string","description":"Estado de la tarea"},"phone":{"type":"string","description":"Telefono del cliente"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"task_text":{"type":"string","description":"Texto de la tarea"},"due_date":{"type":"string","description":"Fecha limite YYYY-MM-DD"},"priority":{"type":"string","description":"Prioridad de la tarea","enum":["low","medium","high"]},"assigned_agent_id":{"type":"integer","description":"ID del agente asignado"},"task_id":{"type":"integer","description":"ID de la tarea"}},"required":["agent_id"]}},{"name":"get_customer_info","description":"Informacion del cliente — Obtiene perfil completo de un cliente: datos CRM, comentarios, tags, conversacion, archivos y tareas [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono del cliente"},"query":{"type":"string","description":"Buscar cliente por nombre o teléfono"},"comment":{"type":"string","description":"Texto del comentario"},"agent_name":{"type":"string","description":"Nombre del agente"},"limit":{"type":"integer","description":"Maximo de resultados"},"tag_name":{"type":"string","description":"Nombre del tag"},"tag_color":{"type":"string","description":"Color del tag en formato hexadecimal"},"primary_phone":{"type":"string","description":"Telefono principal para merge"},"secondary_phone":{"type":"string","description":"Telefono secundario para merge"}},"required":["phone"]}},{"name":"get_customer_comments","description":"Comentarios del cliente — Obtiene los comentarios y tags asociados a un cliente [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono del cliente"},"comment":{"type":"string","description":"Texto del comentario"},"agent_name":{"type":"string","description":"Nombre del agente"},"query":{"type":"string","description":"Texto de busqueda"},"limit":{"type":"integer","description":"Maximo de resultados"},"tag_name":{"type":"string","description":"Nombre del tag"},"tag_color":{"type":"string","description":"Color del tag en formato hexadecimal"},"primary_phone":{"type":"string","description":"Telefono principal para merge"},"secondary_phone":{"type":"string","description":"Telefono secundario para merge"}},"required":["phone"]}},{"name":"add_customer_comment","description":"Anadir comentario a cliente — Anade un nuevo comentario interno a la ficha de un cliente [mutation]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono del cliente"},"comment":{"type":"string","description":"Texto del comentario"},"agent_name":{"type":"string","description":"Nombre del agente que deja el comentario (default: Assistant)","default":"Assistant"},"query":{"type":"string","description":"Texto de busqueda"},"limit":{"type":"integer","description":"Maximo de resultados"},"tag_name":{"type":"string","description":"Nombre del tag"},"tag_color":{"type":"string","description":"Color del tag en formato hexadecimal"},"primary_phone":{"type":"string","description":"Telefono principal para merge"},"secondary_phone":{"type":"string","description":"Telefono secundario para merge"}},"required":["phone","comment"]}},{"name":"search_customer_comments","description":"Buscar en comentarios — Busca texto en los comentarios de todos los clientes [query]","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Texto a buscar en los comentarios"},"limit":{"type":"integer","default":20},"phone":{"type":"string","description":"Telefono del cliente"},"comment":{"type":"string","description":"Texto del comentario"},"agent_name":{"type":"string","description":"Nombre del agente"},"tag_name":{"type":"string","description":"Nombre del tag"},"tag_color":{"type":"string","description":"Color del tag en formato hexadecimal"},"primary_phone":{"type":"string","description":"Telefono principal para merge"},"secondary_phone":{"type":"string","description":"Telefono secundario para merge"}},"required":["query"]}},{"name":"add_customer_tag","description":"Anadir tag a cliente — Anade una etiqueta (tag) a un cliente para clasificarlo [mutation]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono del cliente"},"tag_name":{"type":"string","description":"Nombre del tag"},"tag_color":{"type":"string","description":"Color del tag en hex (default: #2563eb)","default":"#2563eb"},"comment":{"type":"string","description":"Texto del comentario"},"agent_name":{"type":"string","description":"Nombre del agente"},"query":{"type":"string","description":"Texto de busqueda"},"limit":{"type":"integer","description":"Maximo de resultados"},"primary_phone":{"type":"string","description":"Telefono principal para merge"},"secondary_phone":{"type":"string","description":"Telefono secundario para merge"}},"required":["phone","tag_name"]}},{"name":"remove_customer_tag","description":"Quitar tag de cliente — Elimina una etiqueta (tag) de un cliente [mutation]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono del cliente"},"tag_name":{"type":"string","description":"Nombre del tag a eliminar"},"comment":{"type":"string","description":"Texto del comentario"},"agent_name":{"type":"string","description":"Nombre del agente"},"query":{"type":"string","description":"Texto de busqueda"},"limit":{"type":"integer","description":"Maximo de resultados"},"tag_color":{"type":"string","description":"Color del tag en formato hexadecimal"},"primary_phone":{"type":"string","description":"Telefono principal para merge"},"secondary_phone":{"type":"string","description":"Telefono secundario para merge"}},"required":["phone","tag_name"]}},{"name":"search_customers","description":"Buscar clientes — Busca clientes por nombre, telefono o email en el CRM y en los contactos [query]","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Texto a buscar (nombre, telefono o email)"},"limit":{"type":"integer","default":20},"phone":{"type":"string","description":"Telefono del cliente"},"comment":{"type":"string","description":"Texto del comentario"},"agent_name":{"type":"string","description":"Nombre del agente"},"tag_name":{"type":"string","description":"Nombre del tag"},"tag_color":{"type":"string","description":"Color del tag en formato hexadecimal"},"primary_phone":{"type":"string","description":"Telefono principal para merge"},"secondary_phone":{"type":"string","description":"Telefono secundario para merge"}},"required":["query"]}},{"name":"list_conversation_files","description":"Archivos de una conversacion — Lista los archivos compartidos en una conversacion con un cliente [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente para filtrar archivos"},"limit":{"type":"integer","default":50},"offset":{"type":"integer","description":"Posicion de inicio para paginacion","default":0}}}},{"name":"search_products","description":"Buscar productos — Busca productos en tu tienda online o en el CRM configurado [query]","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Texto a buscar en el nombre del producto"},"limit":{"type":"integer","default":10},"days":{"type":"integer","description":"Dias de historial a buscar"}},"required":["query"]}},{"name":"get_top_asked_products","description":"Productos mas consultados — Muestra los productos sobre los que mas preguntan los clientes en el plugin Q&A [query]","inputSchema":{"type":"object","properties":{"days":{"type":"integer","description":"Periodo en dias (default 30)","default":30},"limit":{"type":"integer","default":10},"query":{"type":"string","description":"Buscar por nombre de producto"}}}},{"name":"get_agent_activity","description":"Actividad de un agente — Muestra la actividad y carga de trabajo de un agente especifico [query]","inputSchema":{"type":"object","properties":{"agent_id":{"type":"integer","description":"ID del agente"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days","last_30_days"]},"days":{"type":"integer","description":"Numero de dias a consultar"}},"required":["agent_id"]}},{"name":"get_team_summary","description":"Resumen del equipo — Vista general de todos los agentes con su carga de trabajo actual [query]","inputSchema":{"type":"object","properties":{"agent_id":{"type":"integer","description":"ID del agente para filtrar"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days","last_30_days"]},"days":{"type":"integer","description":"Numero de dias a consultar"}}}},{"name":"get_agent_stats","description":"Estadisticas de agentes — Metricas de rendimiento del equipo: mensajes enviados, recibidos, tareas completadas [query]","inputSchema":{"type":"object","properties":{"period":{"type":"string","enum":["today","yesterday","last_7_days","last_30_days"],"default":"last_7_days"},"agent_id":{"type":"integer","description":"ID del agente para filtrar"},"days":{"type":"integer","description":"Numero de dias a consultar"}}}},{"name":"get_whatsapp_status","description":"Estado de WhatsApp — Muestra el estado de todas las sesiones de WhatsApp conectadas [query]","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de sesion WhatsApp especifica"},"direction":{"type":"string","description":"Filtrar por direccion (incoming/outgoing)"},"phone":{"type":"string","description":"Filtrar por telefono"}}}},{"name":"get_whatsapp_message_logs","description":"Logs de mensajes WhatsApp — Muestra los ultimos mensajes enviados y recibidos por WhatsApp [query]","inputSchema":{"type":"object","properties":{"direction":{"type":"string","description":"Filtrar por direccion del mensaje","enum":["incoming","outgoing"]},"phone":{"type":"string","description":"Filtrar por numero de telefono"},"hours":{"type":"integer","description":"Ultimas N horas (default 24)","default":24},"limit":{"type":"integer","default":50},"session_id":{"type":"integer","description":"ID de la sesión WhatsApp"},"days":{"type":"integer","description":"Numero de dias de lookback"},"message":{"type":"string","description":"Buscar en contenido del mensaje"}}}},{"name":"get_workflow_logs","description":"Logs de workflows — Muestra las ejecuciones recientes de workflows automaticos de WhatsApp [query]","inputSchema":{"type":"object","properties":{"hours":{"type":"integer","description":"Ultimas N horas (default 24)","default":24},"limit":{"type":"integer","default":50},"session_id":{"type":"integer","description":"ID de la sesión WhatsApp"},"days":{"type":"integer","description":"Numero de dias de lookback"},"direction":{"type":"string","description":"Filtrar por direccion"},"phone":{"type":"string","description":"Filtrar por telefono"}}}},{"name":"get_recent_plugin_questions","description":"Preguntas recientes de plugins — Muestra las ultimas preguntas que los clientes hicieron al plugin de Product Q&A [query]","inputSchema":{"type":"object","properties":{"hours":{"type":"integer","default":48},"limit":{"type":"integer","default":20},"plugin_type":{"type":"string","description":"Filtrar por tipo de plugin"},"period":{"type":"string","description":"Periodo","enum":["today","yesterday","last_7_days","last_30_days"]}}}},{"name":"get_unanswered_plugin_questions","description":"Preguntas sin respuesta adecuada — Identifica preguntas donde el bot no pudo dar una respuesta satisfactoria [query]","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":20},"plugin_type":{"type":"string","description":"Filtrar por tipo de plugin"},"period":{"type":"string","description":"Periodo","enum":["today","yesterday","last_7_days","last_30_days"]},"hours":{"type":"integer","description":"Horas a analizar"}}}},{"name":"get_plugin_stats","description":"Estadisticas de plugins — Metricas del plugin Product Q&A: preguntas, visitantes, productos mas consultados [query]","inputSchema":{"type":"object","properties":{"period":{"type":"string","enum":["today","yesterday","last_7_days","last_30_days"],"default":"last_7_days"},"plugin_type":{"type":"string","description":"Filtrar por tipo de plugin"},"limit":{"type":"integer","description":"Máximo de resultados"},"hours":{"type":"integer","description":"Ultimas N horas a analizar"}}}},{"name":"get_daily_summary","description":"Resumen del dia — Resumen completo de actividad de un dia: conversaciones, mensajes, plugins, workflows, follow-ups, tareas [query]","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Fecha (YYYY-MM-DD, default hoy)"},"period":{"type":"string","description":"Periodo: last_7_days, last_30_days, this_month, last_month, last_90_days, all_time, custom","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"]},"days":{"type":"integer","description":"Numero de dias a incluir"},"phone":{"type":"string","description":"Filtrar por telefono de cliente"}}}},{"name":"get_period_stats","description":"Estadisticas por periodo — Evolucion diaria de conversaciones y mensajes en un periodo [query]","inputSchema":{"type":"object","properties":{"period":{"type":"string","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"],"default":"last_7_days"},"date":{"type":"string","description":"Fecha de referencia YYYY-MM-DD"},"days":{"type":"integer","description":"Numero de dias del periodo"},"phone":{"type":"string","description":"Filtrar por telefono de cliente"}}}},{"name":"get_busiest_hours","description":"Horas mas activas — Analiza a que horas del dia se reciben mas mensajes de clientes [query]","inputSchema":{"type":"object","properties":{"days":{"type":"integer","description":"Dias a analizar (default 7)","default":7},"period":{"type":"string","description":"Periodo: last_7_days, last_30_days, this_month, last_month, last_90_days, all_time, custom","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"]},"date":{"type":"string","description":"Fecha de referencia YYYY-MM-DD"},"phone":{"type":"string","description":"Filtrar por telefono de cliente"}}}},{"name":"get_top_topics","description":"Temas mas frecuentes — Muestra los temas/intenciones mas comunes en las conversaciones [query]","inputSchema":{"type":"object","properties":{"days":{"type":"integer","description":"Dias a analizar (default 30)","default":30},"period":{"type":"string","description":"Periodo: last_7_days, last_30_days, this_month, last_month, last_90_days, all_time, custom","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"]},"date":{"type":"string","description":"Fecha de referencia YYYY-MM-DD"},"phone":{"type":"string","description":"Filtrar por telefono de cliente"}}}},{"name":"get_customer_journey","description":"Historial completo del cliente — Timeline completo de un cliente: mensajes, comentarios, archivos, tareas, pedidos, follow-ups [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono del cliente"},"date":{"type":"string","description":"Fecha especifica YYYY-MM-DD"},"period":{"type":"string","description":"Periodo de tiempo","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"]},"days":{"type":"integer","description":"Numero de dias a consultar"}},"required":["phone"]}},{"name":"list_calendar_events","description":"List Calendar Events — List upcoming appointments/events in a date range [query]","inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Start date YYYY-MM-DD"},"to":{"type":"string","description":"End date YYYY-MM-DD"},"status":{"type":"string","description":"Filtrar por estado: pending, confirmed, cancelled, completed, no_show"}}}},{"name":"create_calendar_event","description":"Crear evento — Agenda un nuevo evento o cita en el calendario [mutation]","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Titulo del evento"},"start_datetime":{"type":"string","description":"Fecha y hora de inicio (YYYY-MM-DD HH:MM:SS)"},"end_datetime":{"type":"string","description":"Fecha y hora de fin"},"description":{"type":"string"},"phone":{"type":"string","description":"Telefono del cliente relacionado"},"assigned_agent_id":{"type":"integer","description":"Agente asignado al evento"},"all_day":{"type":"integer","enum":[0,1],"default":0},"date_from":{"type":"string","description":"Fecha inicio para filtrar"},"date_to":{"type":"string","description":"Fecha fin para filtrar"},"agent_id":{"type":"integer","description":"ID del agente"},"event_id":{"type":"integer","description":"ID del evento"}},"required":["title","start_datetime"]}},{"name":"update_calendar_event","description":"Actualizar evento — Modifica un evento existente del calendario [mutation]","inputSchema":{"type":"object","properties":{"event_id":{"type":"integer","description":"ID del evento"},"title":{"type":"string"},"description":{"type":"string"},"start_datetime":{"type":"string"},"end_datetime":{"type":"string"},"assigned_agent_id":{"type":"integer"},"all_day":{"type":"integer"},"date_from":{"type":"string","description":"Fecha inicio para filtrar"},"date_to":{"type":"string","description":"Fecha fin para filtrar"},"agent_id":{"type":"integer","description":"ID del agente"},"phone":{"type":"string","description":"Telefono del cliente"}},"required":["event_id"]}},{"name":"delete_calendar_event","description":"Eliminar evento — Elimina un evento del calendario [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"event_id":{"type":"integer","description":"ID del evento a eliminar"},"date_from":{"type":"string","description":"Fecha inicio para filtrar"},"date_to":{"type":"string","description":"Fecha fin para filtrar"},"agent_id":{"type":"integer","description":"ID del agente"},"phone":{"type":"string","description":"Telefono del cliente"},"title":{"type":"string","description":"Titulo del evento"},"description":{"type":"string","description":"Descripcion del evento"},"start_datetime":{"type":"string","description":"Fecha/hora inicio YYYY-MM-DD HH:MM:SS"},"end_datetime":{"type":"string","description":"Fecha/hora fin YYYY-MM-DD HH:MM:SS"},"all_day":{"type":"boolean","description":"Evento de dia completo"},"assigned_agent_id":{"type":"integer","description":"ID del agente asignado"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["event_id"]}},{"name":"get_ai_summary","description":"Resumen IA de conversacion — Genera un resumen de una conversacion usando IA. Tipos: quick (breve), detailed (completo), actionable (acciones pendientes). Consume creditos de IA. [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente (con o sin +)"},"summary_type":{"type":"string","description":"Tipo de resumen: quick (breve), detailed (completo, default), actionable (acciones pendientes)","enum":["quick","detailed","actionable"],"default":"detailed"},"days":{"type":"integer","description":"Numero de dias a analizar"},"tone":{"type":"string","description":"Tono para la respuesta"},"hours":{"type":"integer","description":"Ultimas N horas a analizar"},"limit":{"type":"integer","description":"Maximo de resultados"},"target_language":{"type":"string","description":"Idioma destino para traduccion"},"last_n":{"type":"integer","description":"Ultimos N mensajes a procesar"}},"required":["phone"]}},{"name":"get_sentiment_analysis","description":"Analisis de sentimiento — Analiza el sentimiento e intencion del cliente en una conversacion usando IA. Devuelve score (0-10), categoria, intencion, consejo y urgencia. Consume creditos de IA. [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente (con o sin +)"},"summary_type":{"type":"string","description":"Tipo de resumen: quick (rapido), actionable (con acciones), detailed (detallado)","enum":["quick","actionable","detailed"]},"days":{"type":"integer","description":"Numero de dias a analizar"},"tone":{"type":"string","description":"Tono para la respuesta"},"hours":{"type":"integer","description":"Ultimas N horas a analizar"},"limit":{"type":"integer","description":"Maximo de resultados"},"target_language":{"type":"string","description":"Idioma destino para traduccion"},"last_n":{"type":"integer","description":"Ultimos N mensajes a procesar"}},"required":["phone"]}},{"name":"list_notifications","description":"Listar notificaciones — Obtiene las notificaciones del sistema con filtros opcionales [query]","inputSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Filtro: all (default), unread, read"},"type":{"type":"string","description":"Filtrar por tipo de notificacion"},"limit":{"type":"integer","description":"Maximo de resultados (default 20, max 100)"},"offset":{"type":"integer","description":"Paginacion"},"notification_id":{"type":"integer","description":"ID de la notificacion"},"agent_id":{"type":"integer","description":"ID del agente"}}}},{"name":"mark_notification_read","description":"Marcar notificacion como leida — Marca una notificacion especifica como leida [mutation]","inputSchema":{"type":"object","properties":{"notification_id":{"type":"integer","description":"ID de la notificacion"},"agent_id":{"type":"integer","description":"ID del agente que lee (opcional)"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio"},"filter":{"type":"string","description":"Filtro de notificaciones"},"type":{"type":"string","description":"Tipo de notificacion"}},"required":["notification_id"]}},{"name":"mark_all_notifications_read","description":"Marcar todas como leidas — Marca todas las notificaciones no leidas como leidas [mutation]","inputSchema":{"type":"object","properties":{"agent_id":{"type":"integer","description":"ID del agente (opcional)"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio"},"filter":{"type":"string","description":"Filtro de notificaciones"},"type":{"type":"string","description":"Tipo de notificacion"},"notification_id":{"type":"integer","description":"ID de la notificacion"}}}},{"name":"delete_notification","description":"Eliminar notificacion — Elimina permanentemente una notificacion [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"notification_id":{"type":"integer","description":"ID de la notificacion a eliminar"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio"},"filter":{"type":"string","description":"Filtro de notificaciones"},"type":{"type":"string","description":"Tipo de notificacion"},"agent_id":{"type":"integer","description":"ID del agente"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["notification_id"]}},{"name":"get_unread_notification_count","description":"Contar notificaciones no leidas — Obtiene el numero de notificaciones pendientes de leer [query]","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio"},"filter":{"type":"string","description":"Filtro de notificaciones"},"type":{"type":"string","description":"Tipo de notificacion"},"notification_id":{"type":"integer","description":"ID de la notificacion"},"agent_id":{"type":"integer","description":"ID del agente"}}}},{"name":"delete_conversation_message","description":"Eliminar mensaje de conversacion — Elimina un mensaje especifico de una conversacion. Requiere el texto exacto del mensaje. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente"},"message":{"type":"string","description":"Texto exacto del mensaje a eliminar (string completo tal como aparece en el historial)"},"query":{"type":"string","description":"Texto de busqueda"},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"hours":{"type":"integer","description":"Ultimas N horas"},"conversation_id":{"type":"integer","description":"ID de conversacion especifica"},"last_n":{"type":"integer","description":"Ultimos N mensajes"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days"]},"agent_id":{"type":"integer","description":"ID del agente"},"format":{"type":"string","description":"Formato de respuesta"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["phone","message"]}},{"name":"global_search","description":"Busqueda global de clientes — Busca en todas las fuentes de datos de clientes: CRM, contactos, conversaciones. Devuelve resultados unificados sin duplicados. [query]","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Texto de busqueda (minimo 2 caracteres). Busca en nombre, email, telefono y comentarios."},"phone":{"type":"string","description":"Telefono del cliente"},"comment":{"type":"string","description":"Texto del comentario"},"agent_name":{"type":"string","description":"Nombre del agente"},"limit":{"type":"integer","description":"Maximo de resultados"},"tag_name":{"type":"string","description":"Nombre del tag"},"tag_color":{"type":"string","description":"Color del tag en formato hexadecimal"},"primary_phone":{"type":"string","description":"Telefono principal para merge"},"secondary_phone":{"type":"string","description":"Telefono secundario para merge"}},"required":["query"]}},{"name":"import_marketing_contacts","description":"Importar contactos de marketing — Importa contactos a una lista de marketing masivo. Soporta entrada manual de telefonos o importacion desde conversaciones. [mutation]","inputSchema":{"type":"object","properties":{"source":{"type":"string","description":"Origen de importacion: manual (texto libre), conversations (desde historial WhatsApp), csv (archivo CSV), txt (archivo de texto)","enum":["manual","conversations","csv","txt"]},"list_id":{"type":"integer","description":"ID de la lista destino"},"phones_text":{"type":"string","description":"Para source=manual: telefonos separados por saltos de linea, uno por linea"},"phones":{"type":"array","description":"Array de teléfonos a importar (para source=manual)"},"tmp_id":{"type":"string","description":"ID temporal del archivo previamente subido (para importación con mapeo)"},"phone_column":{"type":"string","description":"Nombre de la columna de teléfono en el CSV"},"name_column":{"type":"string","description":"Nombre de la columna de nombre en el CSV"}},"required":["source","list_id"]}},{"name":"precheck_delete_whatsapp_session","description":"Pre-verificar eliminación de sesión WhatsApp — Muestra qué configuraciones se verían afectadas al eliminar una sesión de WhatsApp (workflows, campañas, seguimiento inteligente) y lista las sesiones alternativas disponibles para migración. IMPORTANTE: Solo se pueden eliminar sesiones en estado 'disconnected'. Si la sesion esta conectada, informa al usuario que primero debe desconectarla desde el panel de WhatsApp antes de poder eliminarla. [query]","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesión a verificar"}},"required":["session_id"]}},{"name":"delete_whatsapp_session","description":"Eliminar sesion de WhatsApp — Elimina una sesion de WhatsApp desconectada. Solo funciona con sesiones en estado 'disconnected'. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesion a eliminar"},"migrate_to":{"type":"integer","description":"ID de otra sesión a la que reasignar workflows, campañas y seguimiento inteligente. Si no se proporciona, se usa 'todas las líneas'."},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["session_id"]}},{"name":"get_whatsapp_workflow_stats","description":"WhatsApp Workflow Statistics — Get WhatsApp message volume, workflow execution stats, peak hours, and performance metrics [query]","inputSchema":{"type":"object","properties":{"period":{"type":"integer","description":"Number of days: 7, 30, or 90. Default: 7"},"limit":{"type":"integer","description":"Numero maximo de resultados"},"offset":{"type":"integer","description":"Desplazamiento para paginacion"},"from":{"type":"string","description":"Fecha inicio (YYYY-MM-DD)"},"to":{"type":"string","description":"Fecha fin (YYYY-MM-DD)"}}}},{"name":"get_whatsapp_response_time_stats","description":"Distribucion horaria de mensajes WhatsApp — Muestra la distribucion horaria de mensajes entrantes y salientes de WhatsApp [query]","inputSchema":{"type":"object","properties":{"days":{"type":"integer","description":"Dias a analizar (default 7)"},"session_id":{"type":"integer","description":"ID de la sesión WhatsApp"},"direction":{"type":"string","description":"Filtrar por direccion"},"phone":{"type":"string","description":"Filtrar por telefono"}}}},{"name":"get_whatsapp_health","description":"Health check completo de WhatsApp — Estado combinado de sesiones, actividad de mensajes 24h y workflows activos [query]","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de sesion de WhatsApp"},"direction":{"type":"string","description":"Filtrar por direccion"},"phone":{"type":"string","description":"Filtrar por telefono"}}}},{"name":"send_whatsapp_message","description":"Enviar mensaje de WhatsApp — Envia un mensaje de WhatsApp a un telefono. El numero debe incluir prefijo internacional formato E.164 (ej: +34612345678). Si el usuario da un numero sin prefijo, preguntale el pais antes de enviar. IMPORTANTE: Esta accion requiere confirmacion. Cuando la llames, recibiras requires_confirmation=true y success=false - esto es NORMAL, NO es un error. Simplemente describe al usuario lo que se va a enviar y PARA. El sistema mostrara botones de confirmar/cancelar automaticamente. NO reintentes la accion. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono destino en formato E.164 con prefijo internacional (ej: +34612345678). Si el usuario no incluye prefijo, preguntarle el pais. OBLIGATORIO"},"message":{"type":"string","description":"Texto del mensaje a enviar. OBLIGATORIO - no enviar vacio"},"session_id":{"type":"integer","description":"ID de sesion especifica (opcional, usa la primera conectada)"},"archive_after_send":{"type":"boolean","description":"Archivar chat tras enviar"},"direction":{"type":"string","description":"Filtrar por direccion"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["phone","message"]}},{"name":"get_credit_history","description":"Historial de creditos — Muestra el consumo de creditos OpenAI por dia y por endpoint [query]","inputSchema":{"type":"object","properties":{"days":{"type":"integer","description":"Dias a analizar (default 30)"},"date":{"type":"string","description":"Fecha especifica YYYY-MM-DD"},"period":{"type":"string","description":"Periodo de tiempo","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"]},"phone":{"type":"string","description":"Filtrar por telefono del cliente"}}}},{"name":"get_conversation_analytics","description":"Analytics de conversaciones — Distribucion de satisfaccion, urgencia e intenciones en conversaciones analizadas [query]","inputSchema":{"type":"object","properties":{"days":{"type":"integer","description":"Dias a analizar (default 30)"},"date":{"type":"string","description":"Fecha especifica YYYY-MM-DD"},"period":{"type":"string","description":"Periodo de tiempo","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"]},"phone":{"type":"string","description":"Filtrar por telefono del cliente"}}}},{"name":"get_api_usage_stats","description":"Estadisticas de uso de API — Consumo de tokens y costes por modelo de IA [query]","inputSchema":{"type":"object","properties":{"days":{"type":"integer","description":"Dias a analizar (default 30)"},"period":{"type":"string","description":"Periodo: last_7_days, last_30_days, this_month, last_month, last_90_days, all_time, custom","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"]},"date":{"type":"string","description":"Fecha de referencia YYYY-MM-DD"},"phone":{"type":"string","description":"Filtrar por telefono de cliente"}}}},{"name":"get_ecommerce_sync_status","description":"Estado de sincronizacion e-commerce — Estado de conexion con la plataforma e-commerce y estadisticas de clientes CRM sincronizados [query]","inputSchema":{"type":"object","properties":{"period":{"type":"string","description":"Periodo: last_7_days, last_30_days, this_month, last_month, last_90_days, all_time, custom","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"]},"days":{"type":"integer","description":"Numero de dias de lookback"},"date":{"type":"string","description":"Fecha de referencia"},"phone":{"type":"string","description":"Filtrar por telefono de cliente"}}}},{"name":"merge_customers","description":"Fusionar clientes — Fusiona dos registros de cliente en uno, combinando comentarios, tags y datos CRM [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"primary_phone":{"type":"string","description":"Telefono del cliente principal (se mantiene)"},"secondary_phone":{"type":"string","description":"Telefono del cliente secundario (se fusiona y elimina)"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["primary_phone","secondary_phone"]}},{"name":"get_customer_lifetime_value","description":"Valor de vida del cliente — Calcula metricas de valor del cliente: pedidos, gasto, antiguedad, interacciones [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente"}},"required":["phone"]}},{"name":"export_conversations","description":"Exportar conversaciones — Exporta conversaciones con todos los mensajes en formato estructurado [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Filtrar por telefono"},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"format":{"type":"string","description":"Formato: json (completo) o csv_summary (sin mensajes)","enum":["json","csv_summary"]},"limit":{"type":"integer","description":"Maximo conversaciones (default 50, max 200)"},"query":{"type":"string","description":"Texto de busqueda"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"hours":{"type":"integer","description":"Ultimas N horas"},"conversation_id":{"type":"integer","description":"ID de conversacion especifica"},"last_n":{"type":"integer","description":"Ultimos N mensajes"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days"]},"agent_id":{"type":"integer","description":"ID del agente"},"message":{"type":"string","description":"Texto del mensaje a enviar o eliminar"}}}},{"name":"get_sentiment_trend","description":"Tendencia de sentimiento — Muestra la evolucion del sentimiento a lo largo del tiempo. Sin phone muestra tendencia global de todas las conversaciones. [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente. Omitir para tendencia global."},"days":{"type":"integer","description":"Dias a analizar (default 30)"},"summary_type":{"type":"string","description":"Tipo de resumen: quick (rapido), actionable (con acciones), detailed (detallado)","enum":["quick","actionable","detailed"]},"tone":{"type":"string","description":"Tono para la respuesta"},"hours":{"type":"integer","description":"Ultimas N horas a analizar"},"limit":{"type":"integer","description":"Maximo de resultados"},"target_language":{"type":"string","description":"Idioma destino para traduccion"},"last_n":{"type":"integer","description":"Ultimos N mensajes a procesar"}}}},{"name":"get_smart_reply_suggestions","description":"Sugerencias de respuesta IA — Genera 3 sugerencias de respuesta basadas en la conversacion actual [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente"},"tone":{"type":"string","description":"Tono de las respuestas (default professional)","enum":["professional","friendly","empathetic","direct"]},"summary_type":{"type":"string","description":"Tipo de resumen: quick (rapido), actionable (con acciones), detailed (detallado)","enum":["quick","actionable","detailed"]},"days":{"type":"integer","description":"Numero de dias a analizar"},"hours":{"type":"integer","description":"Ultimas N horas a analizar"},"limit":{"type":"integer","description":"Maximo de resultados"},"target_language":{"type":"string","description":"Idioma destino para traduccion"},"last_n":{"type":"integer","description":"Ultimos N mensajes a procesar"}},"required":["phone"]}},{"name":"auto_tag_customer","description":"Auto-etiquetar cliente con IA — Analiza la conversacion con IA y sugiere tags relevantes para el cliente [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente"},"summary_type":{"type":"string","description":"Tipo de resumen: quick (rapido), actionable (con acciones), detailed (detallado)","enum":["quick","actionable","detailed"]},"days":{"type":"integer","description":"Numero de dias a analizar"},"tone":{"type":"string","description":"Tono para la respuesta"},"hours":{"type":"integer","description":"Ultimas N horas a analizar"},"limit":{"type":"integer","description":"Maximo de resultados"},"target_language":{"type":"string","description":"Idioma destino para traduccion"},"last_n":{"type":"integer","description":"Ultimos N mensajes a procesar"}},"required":["phone"]}},{"name":"auto_categorize_conversations","description":"Auto-categorizar conversaciones — Categoriza conversaciones recientes por tema, intento y prioridad usando IA [query]","inputSchema":{"type":"object","properties":{"hours":{"type":"integer","description":"Horas a analizar (default 24)"},"limit":{"type":"integer","description":"Conversaciones a categorizar (default 10, max 20)"},"phone":{"type":"string","description":"Filtrar por telefono del cliente"},"summary_type":{"type":"string","description":"Tipo de resumen: quick (rapido), actionable (con acciones), detailed (detallado)","enum":["quick","actionable","detailed"]},"days":{"type":"integer","description":"Numero de dias a analizar"},"tone":{"type":"string","description":"Tono para la respuesta"},"target_language":{"type":"string","description":"Idioma destino para traduccion"},"last_n":{"type":"integer","description":"Ultimos N mensajes a procesar"}}}},{"name":"translate_conversation","description":"Traducir conversacion — Traduce los ultimos mensajes de una conversacion a otro idioma usando IA [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente"},"target_language":{"type":"string","description":"Idioma destino (es, en, de, fr, pt, it, etc.)"},"last_n":{"type":"integer","description":"Ultimos N mensajes a traducir (default 20, max 50)"},"summary_type":{"type":"string","description":"Tipo de resumen: quick (rapido), actionable (con acciones), detailed (detallado)","enum":["quick","actionable","detailed"]},"days":{"type":"integer","description":"Numero de dias a analizar"},"tone":{"type":"string","description":"Tono para la respuesta"},"hours":{"type":"integer","description":"Ultimas N horas a analizar"},"limit":{"type":"integer","description":"Maximo de resultados"}},"required":["phone","target_language"]}},{"name":"list_plugin_configs","description":"Listar configuracion de plugins — Lista todos los plugins instalados con su configuracion y estado [query]","inputSchema":{"type":"object","properties":{"plugin_type":{"type":"string","description":"Filtrar por tipo de plugin"},"hours":{"type":"integer","description":"Ultimas N horas a analizar"},"limit":{"type":"integer","description":"Maximo de resultados"},"period":{"type":"string","description":"Periodo de tiempo para las estadisticas","enum":["today","yesterday","last_7_days","last_30_days"]}}}},{"name":"get_chat_sessions","description":"Sesiones de chat web — Lista las sesiones recientes del widget de chat web [query]","inputSchema":{"type":"object","properties":{"hours":{"type":"integer","description":"Horas a consultar (default 24)"},"limit":{"type":"integer","description":"Maximo resultados (default 20)"},"plugin_type":{"type":"string","description":"Filtrar por tipo de plugin"},"period":{"type":"string","description":"Periodo","enum":["today","yesterday","last_7_days","last_30_days"]}}}},{"name":"get_agent_performance","description":"Rendimiento detallado de agente — Metricas detalladas de rendimiento de un agente: clientes asignados, tareas, tasa de completado [query]","inputSchema":{"type":"object","properties":{"agent_id":{"type":"integer","description":"ID del agente"},"days":{"type":"integer","description":"Dias a analizar (default 30)"},"period":{"type":"string","description":"Periodo de tiempo","enum":["today","yesterday","last_7_days","last_30_days"]}},"required":["agent_id"]}},{"name":"get_mass_marketing_stats","description":"Estadisticas de Marketing Masivo — Estadisticas de campanas masivas: rendimiento por campana, desglose de fallos, distribucion horaria de envios, calidad de listas y balance de creditos disponibles [query]","inputSchema":{"type":"object","properties":{"date_from":{"type":"string","description":"Fecha inicio (YYYY-MM-DD). Default: hace 30 dias"},"date_to":{"type":"string","description":"Fecha fin (YYYY-MM-DD). Default: hoy"}}}},{"name":"gdpr_export_customer_data","description":"Exportar datos del cliente (GDPR) — Exporta todos los datos almacenados de un cliente para cumplimiento GDPR (Art. 15 - Derecho de acceso) [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente"}},"required":["phone"]}},{"name":"gdpr_delete_customer_data","description":"Eliminar datos del cliente (GDPR) — Elimina todos los datos personales de un cliente para cumplimiento GDPR (Art. 17 - Derecho al olvido). Los registros CRM se anonimizan en vez de eliminarse. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Telefono del cliente cuyos datos se eliminaran"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["phone"]}},{"name":"get_conversation_count","description":"Contar conversaciones — Cuenta conversaciones que coinciden con criterios de busqueda, fecha o periodo [query]","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Texto a buscar"},"period":{"type":"string","description":"Periodo predefinido","enum":["today","yesterday","last_7_days","last_30_days"]},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"phone":{"type":"string","description":"Filtrar por telefono del cliente"},"limit":{"type":"integer","description":"Maximo de resultados"},"offset":{"type":"integer","description":"Posicion de inicio para paginacion"},"hours":{"type":"integer","description":"Ultimas N horas"},"conversation_id":{"type":"integer","description":"ID de conversacion especifica"},"last_n":{"type":"integer","description":"Ultimos N mensajes"},"agent_id":{"type":"integer","description":"ID del agente"},"message":{"type":"string","description":"Texto del mensaje a enviar o eliminar"},"format":{"type":"string","description":"Formato de respuesta"}}}},{"name":"get_autolearning_stats","description":"Estadisticas de auto-learning — Obtiene estadisticas detalladas del sistema de auto-learning: snippets activos, pendientes, rechazados, etc. [query]","inputSchema":{"type":"object"}},{"name":"delete_conversation_file","description":"Eliminar archivo de conversacion — Elimina un archivo compartido en una conversacion [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"file_uuid":{"type":"string","description":"UUID del archivo a eliminar"},"agent_id":{"type":"integer","description":"ID del agente que realiza la accion"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["file_uuid"]}},{"name":"download_conversation_file","description":"Descargar archivo de conversacion — Obtiene la URL de descarga de un archivo compartido en una conversacion [query]","inputSchema":{"type":"object","properties":{"file_uuid":{"type":"string","description":"UUID del archivo a descargar"}},"required":["file_uuid"]}},{"name":"get_plugin_conversation_detail","description":"Detalle de conversacion de plugin — Muestra los mensajes completos de una conversacion del plugin de chat web [query]","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"ID de la sesion de chat del plugin"}},"required":["session_id"]}},{"name":"save_plugin_conversation_note","description":"Guardar nota de conversacion del plugin — Genera un resumen IA de una conversacion del plugin de chat web y lo guarda como nota en el perfil del cliente. Requiere que el visitante se haya identificado con telefono o email para poder asociarlo a un cliente existente. [mutation]","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"ID de la sesion de chat del plugin"}},"required":["session_id"]}},{"name":"check_plugin_conversation_note","description":"Verificar nota de conversacion del plugin — Comprueba si ya existe una nota guardada para una sesion de chat del plugin y muestra los datos del cliente asociado. [query]","inputSchema":{"type":"object","properties":{"session_id":{"type":"string","description":"ID de la sesion de chat del plugin"}},"required":["session_id"]}},{"name":"get_plugin_chat_sessions","description":"Ver conversaciones del chat web de un cliente — Obtiene las conversaciones cerradas del plugin de chat web para un teléfono específico. Útil cuando un agente quiere ver qué ha preguntado un cliente por el chat de la web. [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Teléfono del cliente con prefijo + (ej: +34616083226)"},"page":{"type":"integer","description":"Número de página (default 1, 10 resultados por página)"}},"required":["phone"]}},{"name":"download_knowledge_file","description":"Descargar archivo de conocimiento — Obtiene la URL de descarga de un archivo de la base de conocimiento [query]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del archivo de conocimiento"}},"required":["id"]}},{"name":"get_knowledge_processing_status","description":"Estado de procesamiento de archivos — Obtiene el estado de procesamiento de todos los archivos de conocimiento (polling endpoint) [query]","inputSchema":{"type":"object"}},{"name":"preview_smart_followup","description":"Vista previa de seguimiento — Genera una vista previa del mensaje de seguimiento que se enviaria a un cliente sin enviarlo realmente [query]","inputSchema":{"type":"object","properties":{"conversation_hash":{"type":"string","description":"Hash de la conversacion a analizar"}},"required":["conversation_hash"]}},{"name":"reorder_whatsapp_workflows","description":"Reordenar workflows — Cambia el orden de ejecucion de los workflows de WhatsApp [mutation]","inputSchema":{"type":"object","properties":{"order":{"type":"array","description":"Array de objetos {id, priority} con el nuevo orden de los workflows"}},"required":["order"]}},{"name":"bulk_toggle_workflows","description":"Activar/desactivar workflows en lote — Activa o desactiva multiples workflows a la vez [mutation]","inputSchema":{"type":"object","properties":{"workflow_ids":{"type":"array","description":"Array de IDs de workflows"},"enabled":{"type":"boolean","description":"true para activar, false para desactivar"}},"required":["workflow_ids","enabled"]}},{"name":"bulk_delete_workflows","description":"Eliminar workflows en lote — Elimina multiples workflows de WhatsApp a la vez. OBLIGATORIO: Antes de llamar, usa list_whatsapp_workflows para obtener los workflows y confirma con el usuario la lista EXACTA de nombres e IDs a eliminar. NUNCA eliminar workflows sin confirmacion explicita del usuario sobre cuales borrar. Si el usuario dice 'limpieza maxima' o similar, listar primero los workflows y preguntar cuales quiere eliminar (todos, solo los desactivados, etc.). FLUJO DE CONFIRMACION OBLIGATORIO: Esta accion devolvera success=false con requires_confirmation=true — esto NO es un error, es el paso 1 del flujo normal. Cuando recibas esta respuesta: 1) Describe brevemente los workflows que se eliminaran, 2) PARA completamente, 3) NUNCA vuelvas a llamar a esta misma accion — hacerlo INVALIDA el token de confirmacion y rompe el flujo. Los botones aparecen automaticamente. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"workflow_ids":{"type":"array","description":"Array de IDs de workflows a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["workflow_ids"]}},{"name":"dry_run_workflow","description":"Probar workflow en seco — Simula la ejecucion de un workflow con un mensaje de prueba sin enviar nada real. Usar cuando el usuario diga 'pruebalo', 'simulalo', 'testea', 'probemos', 'a ver si funciona' o cualquier variacion de probar/simular. Esta accion es SEGURA — no envia mensajes ni modifica nada. Para probar con multiples ejemplos, llamar esta accion varias veces con diferentes test_message. PREFERIR esta accion sobre save/update cuando el usuario quiere validar antes de activar. [query]","inputSchema":{"type":"object","properties":{"workflow_id":{"type":"integer","description":"ID del workflow a probar"},"test_message":{"type":"string","description":"Texto de mensaje simulado. Para simular multiples escenarios, hacer varias llamadas con diferentes mensajes"},"test_phone":{"type":"string","description":"Telefono simulado del remitente (con prefijo +). Usar diferentes prefijos para probar condiciones de pais"}},"required":["workflow_id","test_message"]}},{"name":"list_whatsapp_optout","description":"Listar contactos opt-out de WhatsApp — Muestra los contactos que han solicitado no recibir mensajes automaticos de WhatsApp [query]","inputSchema":{"type":"object","properties":{"page":{"type":"integer","description":"Pagina de resultados (default 1)"},"search":{"type":"string","description":"Filtrar por numero de telefono"}}}},{"name":"add_whatsapp_optout","description":"Anadir contacto a opt-out WhatsApp — Anade un numero a la lista de opt-out para que no reciba mensajes automaticos [mutation]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono con prefijo internacional"},"reason":{"type":"string","description":"Motivo del opt-out"}},"required":["phone"]}},{"name":"remove_whatsapp_optout","description":"Quitar contacto de opt-out WhatsApp — Elimina un numero de la lista de opt-out para que pueda recibir mensajes automaticos de nuevo [mutation]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono a quitar de opt-out"}},"required":["phone"]}},{"name":"check_whatsapp_optout","description":"Verificar si un contacto esta en opt-out — Comprueba si un numero de telefono esta en la lista de opt-out de automatizacion WhatsApp [query]","inputSchema":{"type":"object","properties":{"phone":{"type":"string","description":"Numero de telefono a verificar (con prefijo internacional)"}},"required":["phone"]}},{"name":"list_scheduled_messages","description":"Listar mensajes programados — Lists scheduled WhatsApp messages with optional status filter. Returns id, session info, phone, message text, scheduled time, status, agent name, and sent/error info. [query]","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Filtrar por estado (default: pending, all para ver todos)","enum":["pending","sent","cancelled","failed","all"],"default":"pending"},"page":{"type":"integer","description":"Pagina de resultados"},"period":{"type":"string","description":"Periodo de tiempo para filtrar: today (hoy), 7/30/90 (ultimos N dias), custom (requiere date_from y date_to)","enum":["today","7","30","90","custom"]},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"phone":{"type":"string","description":"Filtrar por número de teléfono del destinatario"}}}},{"name":"create_scheduled_message","description":"Programar mensaje de WhatsApp — Programa un mensaje de WhatsApp para envio futuro. PREREQUISITO OBLIGATORIO: ANTES de llamar esta accion, DEBES llamar a get_whatsapp_status para obtener el session_id de una sesion conectada. Sin session_id la accion SIEMPRE falla. FLUJO DE CONFIRMACION: Esta accion devolvera requires_confirmation=true con success=false - esto NO es un error, es el flujo normal. Cuando recibas esto, describe brevemente al usuario lo que se programara y PARA. NO llames de nuevo a esta accion. El sistema mostrara botones automaticamente. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID numerico de la sesion de WhatsApp. OBLIGATORIO. Obtener llamando a get_whatsapp_status primero y usar el campo 'id' de una sesion con status 'connected'. Si hay varias sesiones, preguntar al usuario cual usar"},"phone":{"type":"string","description":"Numero de telefono destino con prefijo internacional formato E.164 (ej: +34612345678). Si el usuario da un numero sin prefijo, preguntarle el pais"},"message_text":{"type":"string","description":"Texto del mensaje a enviar"},"scheduled_at":{"type":"string","description":"Fecha y hora de envio en formato YYYY-MM-DD HH:MM:SS. Debe ser una fecha futura. Si el usuario dice una fecha relativa como 'manana a las 10', convertirla al formato correcto"},"agent_id":{"type":"integer","description":"ID del agente que programa el mensaje"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["session_id","phone","message_text","scheduled_at"]}},{"name":"cancel_scheduled_message","description":"Cancelar mensaje programado — Cancela un mensaje de WhatsApp que esta programado para envio futuro [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del mensaje programado a cancelar"},"agent_id":{"type":"integer","description":"ID del agente que cancela el mensaje"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id"]}},{"name":"update_scheduled_message","description":"Update scheduled message — Updates a pending scheduled WhatsApp message. Can modify the text, datetime, and/or sending session. Only pending messages can be edited. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID of the scheduled message to update"},"message_text":{"type":"string","description":"New message text"},"scheduled_at":{"type":"string","description":"New date and time in format YYYY-MM-DD HH:MM (shop timezone)"},"session_id":{"type":"integer","description":"New WhatsApp Auto session ID to send from"},"agent_id":{"type":"integer","description":"ID del agente que modifica el mensaje"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id"]}},{"name":"list_whatsapp_templates","description":"Listar plantillas de WhatsApp — Muestra las plantillas de mensajes guardadas para WhatsApp [query]","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Filtrar por categoria de plantilla"}}}},{"name":"get_whatsapp_template","description":"Ver plantilla de WhatsApp — Obtiene el detalle de una plantilla de mensaje especifica [query]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la plantilla"}},"required":["id"]}},{"name":"create_whatsapp_template_from_workflow","description":"Crear workflow desde plantilla — Crea un nuevo workflow de WhatsApp a partir de una plantilla existente [mutation]","inputSchema":{"type":"object","properties":{"template_id":{"type":"integer","description":"ID de la plantilla desde la que crear el workflow"},"session_id":{"type":"integer","description":"ID de la sesion WhatsApp para asociar al workflow"},"name":{"type":"string","description":"Nombre para el nuevo workflow"}},"required":["template_id"]}},{"name":"save_as_whatsapp_template","description":"Guardar como plantilla — Guarda un mensaje como plantilla reutilizable de WhatsApp [mutation]","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Nombre de la plantilla"},"category":{"type":"string","description":"Categoria de la plantilla"},"workflow_id":{"type":"integer","description":"ID del workflow del que extraer el mensaje para guardar como plantilla"}},"required":["name"]}},{"name":"delete_whatsapp_template","description":"Eliminar plantilla de WhatsApp — Elimina una plantilla de mensaje de WhatsApp. FLUJO DE CONFIRMACION: Esta accion devolvera requires_confirmation=true con success=false - esto NO es un error, es el flujo normal. Cuando recibas esto, describe brevemente al usuario que la plantilla se eliminara y PARA. NO llames de nuevo a esta accion. El sistema mostrara botones de Confirmar/Cancelar automaticamente. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la plantilla a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id"]}},{"name":"connect_whatsapp","description":"Conectar número de WhatsApp — Inicia el proceso de conexión de un nuevo número de WhatsApp. Devuelve un código QR para escanear con el teléfono. [mutation]","inputSchema":{"type":"object","properties":{"label":{"type":"string","description":"Etiqueta para identificar la sesión (máximo 50 caracteres)"},"force_new":{"type":"boolean","description":"Forzar creación de nueva sesión aunque haya sesiones desconectadas disponibles"}}}},{"name":"get_whatsapp_connection_status","description":"Ver estado de conexiones WhatsApp — Muestra todas las sesiones de WhatsApp de la tienda con su estado actual (conectado, desconectado, pendiente QR) [query]","inputSchema":{"type":"object"}},{"name":"bulk_add_to_blacklist","description":"Añadir múltiples teléfonos a lista negra — Añade varios números de teléfono a la lista negra de marketing masivo de una vez [mutation]","inputSchema":{"type":"object","properties":{"phones":{"type":"array","description":"Array de números de teléfono a añadir a la lista negra"},"reason":{"type":"string","description":"Motivo de la inclusión en la lista negra"}},"required":["phones"]}},{"name":"get_campaign","description":"Ver detalle de campaña — Obtiene los detalles completos de una campaña de marketing masivo [query]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campaña"}},"required":["campaign_id"]}},{"name":"update_campaign","description":"Actualizar campaña — Modifica los datos de una campaña de marketing masivo existente (solo en estado borrador) [mutation]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campaña a actualizar"},"name":{"type":"string","description":"Nuevo nombre de la campaña"},"list_id":{"type":"integer","description":"ID de la lista de contactos"},"message_text":{"type":"string","description":"Texto del mensaje"},"send_interval_seconds":{"type":"integer","description":"Intervalo entre mensajes en segundos"},"translate_by_prefix":{"type":"boolean","description":"Traducir según prefijo telefónico"},"include_unsubscribe_link":{"type":"boolean","description":"Incluir enlace de baja"},"archive_after_send":{"type":"boolean","description":"Archivar chat tras enviar"},"scheduled_at":{"type":"string","description":"Fecha/hora de envío programado (ISO 8601)"},"session_ids":{"type":"array","description":"IDs de sesiones WhatsApp a usar"},"media_url":{"type":"string","description":"URL del archivo multimedia"},"media_type":{"type":"string","description":"Tipo de multimedia (image, video, document)"},"media_filename":{"type":"string","description":"Nombre del archivo multimedia"},"segment_filters":{"type":"object","description":"Filtros de segmentacion para enviar solo a contactos que cumplan criterios"},"is_recurring":{"type":"boolean","description":"Si true, la campana se ejecuta de forma recurrente segun recurring_cron"},"recurring_cron":{"type":"string","description":"Expresion cron para campanas recurrentes. Requerido si is_recurring es true."}},"required":["campaign_id"]}},{"name":"delete_campaign","description":"Eliminar campaña — Elimina permanentemente una campaña de marketing masivo [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campaña a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["campaign_id"]}},{"name":"duplicate_campaign","description":"Duplicar campaña — Crea una copia de una campaña existente en estado borrador [mutation]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campaña a duplicar"}},"required":["campaign_id"]}},{"name":"archive_campaign","description":"Archivar campaña — Archiva una campaña completada para mantener la lista limpia [mutation]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campaña a archivar"}},"required":["campaign_id"]}},{"name":"unarchive_campaign","description":"Desarchivar campaña — Restaura una campaña archivada a la lista principal [mutation]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campaña a desarchivar"}},"required":["campaign_id"]}},{"name":"approve_campaign","description":"Aprobar campaña — Aprueba una campaña pendiente de aprobación para que pueda ser enviada [mutation]","inputSchema":{"type":"object","properties":{"campaign_id":{"type":"integer","description":"ID de la campaña a aprobar"}},"required":["campaign_id"]}},{"name":"get_contact_list_detail","description":"Ver detalle de lista de contactos — Obtiene los contactos de una lista específica con paginación y búsqueda [query]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista"},"page":{"type":"integer","description":"Número de página"},"search":{"type":"string","description":"Buscar contactos por teléfono o nombre"}},"required":["list_id"]}},{"name":"add_contacts_to_list","description":"Añadir contactos a lista — Añade uno o más contactos a una lista de marketing [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista"},"contacts":{"type":"array","description":"Array de contactos [{phone, name}]"}},"required":["list_id","contacts"]}},{"name":"remove_contact_from_list","description":"Eliminar contacto de lista — Elimina un contacto individual de una lista de marketing [mutation]","inputSchema":{"type":"object","properties":{"contact_id":{"type":"integer","description":"ID del contacto a eliminar"}},"required":["contact_id"]}},{"name":"remove_contacts_bulk","description":"Eliminar contactos en bloque — Elimina múltiples contactos de una lista de marketing [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista"},"contact_ids":{"type":"array","description":"Array de IDs de contactos a eliminar"},"select_all":{"type":"boolean","description":"Seleccionar todos los contactos"},"exclude_ids":{"type":"array","description":"IDs a excluir cuando select_all=true"},"search":{"type":"string","description":"Filtro de búsqueda aplicado"}},"required":["list_id"]}},{"name":"get_marketing_sessions","description":"Ver sesiones de marketing — Obtiene las sesiones de WhatsApp disponibles para envío de campañas [query]","inputSchema":{"type":"object"}},{"name":"assign_marketing_session","description":"Asignar sesión a marketing — Habilita o deshabilita una sesión de WhatsApp para envío de campañas de marketing [mutation]","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesión WhatsApp"},"enable_mass_marketing":{"type":"boolean","description":"true para habilitar, false para deshabilitar"}},"required":["session_id","enable_mass_marketing"]}},{"name":"remove_unsubscribed_bulk","description":"Eliminar bajas en bloque — Elimina registros de bajas de marketing masivo [mutation]","inputSchema":{"type":"object","properties":{"ids":{"type":"array","description":"Array de IDs de registros de baja a eliminar"},"select_all":{"type":"boolean","description":"Seleccionar todos los registros (usa filtros search/date_from/date_to para limitar)"},"search":{"type":"string","description":"Filtro por telefono (usado con select_all=true para limitar el alcance)"},"date_from":{"type":"string","description":"Fecha inicio filtro (formato YYYY-MM-DD, usado con select_all=true)"},"date_to":{"type":"string","description":"Fecha fin filtro (formato YYYY-MM-DD, usado con select_all=true)"},"exclude_ids":{"type":"array","description":"IDs a excluir de la eliminacion masiva (usado con select_all=true)"}}}},{"name":"create_list_from_inactive","description":"Crear lista desde clientes inactivos — Crea una nueva lista de contactos a partir de clientes que no han tenido conversación en un periodo determinado [mutation]","inputSchema":{"type":"object","properties":{"days":{"type":"integer","description":"Días de inactividad mínima (default: 30)"},"name":{"type":"string","description":"Nombre de la nueva lista"}}}},{"name":"create_list_from_followup","description":"Crear lista desde seguimientos — Crea una lista de contactos desde conversaciones detectadas por Smart Follow-up [mutation]","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Nombre de la nueva lista"},"period":{"type":"string","description":"Periodo de búsqueda","enum":["last_7_days","last_30_days","last_60_days","last_90_days"]}}}},{"name":"get_usage_stats_detail","description":"Ver detalle de uso por consulta — Muestra el detalle individual de cada consulta de IA con tokens y costes [query]","inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"page":{"type":"integer","description":"Número de página"},"limit":{"type":"integer","description":"Resultados por página"}}}},{"name":"get_whatsapp_workflow_activity","description":"Ver estadísticas de workflows WhatsApp — Muestra estadísticas de ejecución de los workflows de WhatsApp en un periodo [query]","inputSchema":{"type":"object","properties":{"days":{"type":"integer","description":"Días a analizar (default: 7)"},"session_id":{"type":"integer","description":"ID de la sesion WhatsApp"},"direction":{"type":"string","description":"Filtrar por direccion"},"phone":{"type":"string","description":"Filtrar por telefono"}}}},{"name":"get_workflow_session_stats","description":"Ver estadísticas de sesión de workflows — Obtiene estadísticas de workflows para una sesión específica de WhatsApp: mensajes de hoy, ejecuciones, volumen de 7 días [query]","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesión WhatsApp"}},"required":["session_id"]}},{"name":"generate_referral_code","description":"Generar enlace de referido — Genera el enlace único de referido del usuario para compartir. Si ya tiene uno, lo devuelve. [mutation]","inputSchema":{"type":"object"}},{"name":"get_referral_data","description":"Ver datos de referidos — Muestra los referidos del usuario, comisiones pendientes y pagadas, y estado de solicitudes de pago [query]","inputSchema":{"type":"object"}},{"name":"request_referral_payout","description":"Solicitar pago de comisiones — Solicita el pago de las comisiones pendientes (mínimo 50€). Solo disponible si no hay otra solicitud abierta. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}}}},{"name":"get_structured_analytics","description":"Analytics detallado con structured outputs — Obtiene analytics detallados de conversaciones usando structured outputs: KPIs, distribucion por intencion, sentimiento, urgencia, tendencia de satisfaccion y conversaciones recientes. Requiere que structured outputs este activado. [query]","inputSchema":{"type":"object","properties":{"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD (default: hace 30 dias)"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD (default: hoy)"},"limit":{"type":"integer","description":"Cantidad de conversaciones recientes a incluir (default 50)","default":50}}}},{"name":"import_contacts_manual","description":"Importar contactos manualmente — Importa contactos a una lista de marketing masivo escribiendo los telefonos manualmente [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista destino"},"phones":{"type":"string","description":"Telefonos a importar, uno por linea o separados por comas. Incluir prefijo internacional (ej: +34600000000)"}},"required":["list_id","phones"]}},{"name":"import_contacts_from_conversations","description":"Importar contactos desde conversaciones — Importa contactos seleccionados desde conversaciones de WhatsApp a una lista de marketing [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista destino"}},"required":["list_id"]}},{"name":"import_contacts_from_all_conversations","description":"Importar todos los contactos de conversaciones — Importa todos los contactos de conversaciones de WhatsApp a una lista de marketing [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista destino"}},"required":["list_id"]}},{"name":"import_contacts_from_platform","description":"Importar contactos desde plataforma — Importa contactos de clientes desde la plataforma ecommerce conectada (Shopify, WooCommerce, etc.) [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista destino"}},"required":["list_id"]}},{"name":"import_contacts_from_crm","description":"Importar contactos desde CRM — Importa contactos del CRM interno de WAzion a una lista de marketing masivo [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista destino"}},"required":["list_id"]}},{"name":"get_whatsapp_profile","description":"Ver perfil de WhatsApp — Obtiene el perfil de WhatsApp de una sesion conectada: nombre, foto, estado/info, y datos de empresa si es WhatsApp Business (descripcion, direccion, email, web, horario) [query]","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesion WhatsApp conectada"}},"required":["session_id"]}},{"name":"update_whatsapp_profile","description":"Actualizar perfil de WhatsApp — Actualiza campos del perfil de WhatsApp: info/about, y datos de empresa (descripcion, direccion, email, web, horario). El nombre solo se puede cambiar en cuentas personales (no Business). Opcionalmente aplica los cambios a otras sesiones conectadas. [mutation]","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesion WhatsApp"},"name":{"type":"string","description":"Nuevo nombre (min 3 chars, solo cuentas personales, NO funciona en Business)"},"status":{"type":"string","description":"Nuevo texto de info/about (max 139 chars)"},"description":{"type":"string","description":"Descripcion de empresa (solo Business)"},"address":{"type":"string","description":"Direccion de empresa (solo Business)"},"email":{"type":"string","description":"Email de empresa (solo Business)"},"websites":{"type":"array","description":"URLs de la empresa (solo Business)"},"apply_to_sessions":{"type":"array","description":"IDs de otras sesiones conectadas a las que aplicar los mismos cambios"}},"required":["session_id"]}},{"name":"get_crm_health_status","description":"Ver estado de salud del CRM — Muestra el estado actual de los endpoints CRM configurados: si estan activos o deshabilitados por errores consecutivos, contador de errores y lista de endpoints [query]","inputSchema":{"type":"object"}},{"name":"reset_crm_errors","description":"Resetear errores CRM — Resetea el contador de errores CRM y reactiva los endpoints si estaban deshabilitados por errores consecutivos [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}}}},{"name":"toggle_auto_sentiment_analysis","description":"Activar/desactivar análisis de sentimiento automático — Activa o desactiva el análisis automático de sentimiento en las conversaciones de WhatsApp. Cuando esta activado, la IA analiza el sentimiento del cliente y muestra indicadores de satisfaccion, urgencia e intencion en la extension de Chrome. [mutation]","inputSchema":{"type":"object","properties":{"auto_sentiment_analysis":{"type":"boolean","description":"true para activar, false para desactivar"},"auto_describe_images":{"type":"boolean","description":"Estado actual de la descripcion automatica de imagenes"}},"required":["auto_sentiment_analysis"]}},{"name":"get_ai_errors","description":"List AI Corrections — List active AI corrections for this assistant. To list ALL corrections, pass no parameters. Only use category or query when filtering specific results. [query]","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"OPTIONAL filter. Omit to get ALL categories. Values: shipping, pricing, warranty, product, tone, policy, communication, general"},"query":{"type":"string","description":"OPTIONAL single keyword search. Omit to get ALL corrections. Use single words only, not sentences."}}}},{"name":"set_ai_error","description":"Record AI Correction — Record a mistake in YOUR OWN responses or behavior (this dashboard chat). Call this when the user corrects you, AND when you proactively detect you did something wrong. This includes: wrong answers and behavioral rules about HOW you should act. IMPORTANT: This is for YOUR errors. For errors in the CONTENT of responses sent to customers by the WhatsApp AI, use set_customer_ai_error instead. [mutation]","inputSchema":{"type":"object","properties":{"fact_content":{"type":"string","description":"The correct information or rule to remember"},"category":{"type":"string","description":"Category: shipping, pricing, warranty, product, tone, policy, communication, general"},"original_text":{"type":"string","description":"What the AI originally said wrong"}},"required":["fact_content","category"]}},{"name":"update_ai_error","description":"Update AI Correction — Update an existing AI correction. Can change the content, category, or status (active/rejected). [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID of the correction to update"},"fact_content":{"type":"string","description":"New corrected text"},"category":{"type":"string","description":"New category: shipping, pricing, warranty, product, tone, policy, communication, general"},"status":{"type":"string","description":"New status: active or rejected"}},"required":["id"]}},{"name":"delete_ai_error","description":"Delete AI Correction — Remove an AI correction that is no longer valid. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID of the correction to delete"}},"required":["id"]}},{"name":"get_customer_ai_errors","description":"List Customer AI Corrections — List corrections for the CUSTOMER-FACING WhatsApp AI. To list ALL corrections, pass no parameters. Only use category or query when filtering specific results. [query]","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"OPTIONAL filter. Omit to get ALL categories. Values: shipping, pricing, warranty, product, tone, policy, communication, general"},"query":{"type":"string","description":"OPTIONAL single keyword search. Omit to get ALL corrections. Use single words only, not sentences."}}}},{"name":"set_customer_ai_error","description":"Record Customer AI Correction — Record a correction for the CUSTOMER-FACING WhatsApp AI (auto-pilot, workflows, suggestions, chat web plugin). Use ONLY when the CONTENT of a response sent to a customer was wrong (wrong info, wrong tone, unnecessary questions to the customer). Do NOT use this for behavioral rules about when/whether to respond — those belong in set_ai_error. IMPORTANT: If the user says the AI should not have replied or should have handled the situation differently, that is a behavioral rule for set_ai_error, not a content correction. [mutation]","inputSchema":{"type":"object","properties":{"fact_content":{"type":"string","description":"The correct information that the AI should use instead"},"category":{"type":"string","description":"Category: shipping, pricing, warranty, product, tone, policy, communication, general"},"original_text":{"type":"string","description":"The wrong text that the AI generated"}},"required":["fact_content","category"]}},{"name":"update_customer_ai_error","description":"Update Customer AI Correction — Edit an existing correction for the customer-facing WhatsApp AI. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID of the correction to update"},"fact_content":{"type":"string","description":"Updated correct information"},"category":{"type":"string","description":"Updated category"},"status":{"type":"string","description":"New status: active or rejected"}},"required":["id"]}},{"name":"delete_customer_ai_error","description":"Delete Customer AI Correction — Remove a correction from the customer-facing WhatsApp AI that is no longer valid. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID of the correction to delete"}},"required":["id"]}},{"name":"get_training_suggestions","description":"Get AI Training Suggestions — List pending AI improvement suggestions generated by the automatic error detection system. These are proposed changes to workflows or the shop prompt that need owner review. [query]","inputSchema":{"type":"object","properties":{"status":{"type":"string","description":"Filter by status: pending, applied, dismissed. Default: pending"}}}},{"name":"list_agents_json","description":"Listar agentes (JSON) — Devuelve todos los agentes configurados en formato JSON con sus datos completos: nombre, email, teléfono, color, permisos y si tienen PIN. [query]","inputSchema":{"type":"object"}},{"name":"list_whatsapp_scheduled_sessions","description":"Listar sesiones para mensajes programados — Devuelve las sesiones de WhatsApp conectadas disponibles para enviar mensajes programados. [query]","inputSchema":{"type":"object"}},{"name":"list_email_accounts","description":"Listar cuentas de email — Devuelve todas las cuentas de correo electronico configuradas en la tienda, con sus agentes asignados. [query]","inputSchema":{"type":"object"}},{"name":"create_email_account","description":"Crear cuenta de email — Crea una nueva cuenta de correo electronico con configuracion IMAP/SMTP. Maximo 10 cuentas por tienda. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"label":{"type":"string","description":"Nombre descriptivo de la cuenta (ej: 'Soporte', 'Ventas')"},"email_address":{"type":"string","description":"Direccion de email"},"auth_type":{"type":"string","description":"Tipo de autenticacion: 'basic' (IMAP/SMTP) o 'oauth2'. Default: 'basic'"},"imap_host":{"type":"string","description":"Servidor IMAP (ej: imap.gmail.com). Requerido para auth_type=basic"},"imap_port":{"type":"integer","description":"Puerto IMAP. Default: 993"},"imap_user":{"type":"string","description":"Usuario IMAP (normalmente el email)"},"imap_password":{"type":"string","description":"Contrasena IMAP (se cifra automaticamente)"},"smtp_host":{"type":"string","description":"Servidor SMTP (ej: smtp.gmail.com). Requerido para auth_type=basic"},"smtp_port":{"type":"integer","description":"Puerto SMTP. Default: 587"},"smtp_user":{"type":"string","description":"Usuario SMTP (normalmente el email)"},"smtp_password":{"type":"string","description":"Contrasena SMTP (se cifra automaticamente)"},"smtp_from_name":{"type":"string","description":"Nombre del remitente en los emails enviados"},"agent_hashes":{"type":"array","description":"Lista de phone_hash de agentes asignados a esta cuenta"},"signature_html":{"type":"string","description":"Firma HTML para los emails enviados desde esta cuenta"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["label","email_address"]}},{"name":"get_email_account","description":"Ver detalle de cuenta de email — Devuelve los datos completos de una cuenta de correo especifica, incluyendo agentes asignados. [query]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta de email"}},"required":["id"]}},{"name":"update_email_account","description":"Actualizar cuenta de email — Modifica los campos de una cuenta de correo existente. Solo se actualizan los campos enviados. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta a actualizar"},"label":{"type":"string","description":"Nuevo nombre descriptivo"},"email_address":{"type":"string","description":"Nueva direccion de email"},"imap_host":{"type":"string","description":"Servidor IMAP"},"imap_port":{"type":"integer","description":"Puerto IMAP"},"imap_user":{"type":"string","description":"Usuario IMAP"},"imap_password":{"type":"string","description":"Nueva contrasena IMAP (se cifra automaticamente)"},"smtp_host":{"type":"string","description":"Servidor SMTP"},"smtp_port":{"type":"integer","description":"Puerto SMTP"},"smtp_user":{"type":"string","description":"Usuario SMTP"},"smtp_password":{"type":"string","description":"Nueva contrasena SMTP (se cifra automaticamente)"},"smtp_from_name":{"type":"string","description":"Nuevo nombre del remitente"},"signature_html":{"type":"string","description":"Firma HTML para los emails"},"is_active":{"type":"integer","description":"1 para activar, 0 para desactivar la cuenta"},"agent_hashes":{"type":"array","description":"Lista de phone_hash de agentes asignados. Reemplaza la asignacion actual"}},"required":["id"]}},{"name":"delete_email_account","description":"Eliminar cuenta de email — Elimina una cuenta de correo y todos sus emails asociados. Esta accion no se puede deshacer. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id"]}},{"name":"update_email_agents","description":"Reasignar agentes de cuenta de email — Actualiza los agentes asignados a una cuenta de correo electronico. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta de email"},"agent_hashes":{"type":"array","description":"Lista de phone_hash de agentes a asignar. Array vacio para quitar todos"}},"required":["id"]}},{"name":"get_email_retention","description":"Ver periodo de retencion de emails — Devuelve el periodo de retencion configurado para los emails de la tienda. [query]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta de correo"}},"required":["id"]}},{"name":"update_email_retention","description":"Configurar retencion de emails — Cambia el periodo de retencion de emails. Los emails mas antiguos se eliminan automaticamente. [mutation]","inputSchema":{"type":"object","properties":{"retention_days":{"type":"integer","description":"Dias de retencion: 30, 60, 90 o 180","enum":[30,60,90,180]},"id":{"type":"integer","description":"ID de la cuenta de correo"}},"required":["retention_days","id"]}},{"name":"update_email_autoresponder","description":"Configurar auto-responder de email — Configura el auto-responder IA para una cuenta de email. Puede generar borradores o enviar respuestas automaticas. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta de email"},"auto_responder_enabled":{"type":"boolean","description":"Activar o desactivar el auto-responder"},"auto_responder_mode":{"type":"string","description":"Modo: 'draft' (genera borrador para revision) o 'automatic' (envia automaticamente)"},"auto_responder_schedule":{"type":"string","description":"Horario: 'always' (siempre) o 'outside_hours' (solo fuera de horario)"},"auto_responder_thread_limit":{"type":"integer","description":"Maximo de respuestas automaticas por hilo (1-10). Default: 2"},"auto_responder_daily_limit":{"type":"integer","description":"Limite diario de auto-respuestas"}},"required":["id"]}},{"name":"get_email_stats","description":"Estadisticas de email — Obtiene estadisticas de correo electronico: volumenes, tiempos de respuesta, desglose por agente y clasificacion IA [query]","inputSchema":{"type":"object","properties":{"period":{"type":"string","description":"Periodo: last_7_days, last_30_days, this_month, last_month, last_90_days, all_time, custom","enum":["last_7_days","last_30_days","this_month","last_month","last_90_days","all_time","custom"]},"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD (solo para period=custom)"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD (solo para period=custom)"}}}},{"name":"test_email_connection","description":"Probar conexion de email — Verifica que la conexion IMAP y SMTP de una cuenta de email funciona correctamente. [query]","inputSchema":{"type":"object","properties":{"account_id":{"type":"integer","description":"ID de la cuenta a probar"},"imap_host":{"type":"string","description":"Servidor IMAP"},"imap_port":{"type":"string","description":"Puerto IMAP"},"imap_user":{"type":"string","description":"Usuario IMAP"},"imap_password":{"type":"string","description":"Contrasena IMAP"},"smtp_host":{"type":"string","description":"Servidor SMTP"},"smtp_port":{"type":"string","description":"Puerto SMTP"},"smtp_user":{"type":"string","description":"Usuario SMTP"},"smtp_password":{"type":"string","description":"Contrasena SMTP"},"email_address":{"type":"string","description":"Direccion de email"}},"required":["account_id","imap_host","imap_port","imap_user","imap_password","smtp_host","smtp_port","smtp_user","smtp_password","email_address"]}},{"name":"list_email_threads","description":"Listar hilos de email — Lista los hilos de email de la tienda, con filtros por estado y cuenta [query]","inputSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Filtro: unread, read, all (default: all)"},"account_id":{"type":"integer","description":"ID de cuenta para filtrar"},"search":{"type":"string","description":"Buscar por asunto o remitente"},"page":{"type":"integer","description":"Pagina (default: 1)"},"limit":{"type":"integer","description":"Resultados por pagina (default: 20)"},"from_filter":{"type":"string","description":"Filtrar por remitente"},"has_attachments":{"type":"string","description":"Filtrar por hilos con adjuntos"},"tag":{"type":"string","description":"Filtrar por etiqueta"},"assigned":{"type":"string","description":"Filtrar por agente asignado"},"date_from":{"type":"string","description":"Fecha inicio del filtro"},"date_to":{"type":"string","description":"Fecha fin del filtro"}}}},{"name":"get_email_thread_detail","description":"Ver detalle de hilo de email — Obtiene todos los mensajes de un hilo de email especifico [query]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"},"page":{"type":"integer","description":"Numero de pagina para paginacion de mensajes"}},"required":["thread_id"]}},{"name":"send_email_reply","description":"Enviar respuesta de email — Envia una respuesta a un hilo de email existente o compone un nuevo email [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo para responder (0 para email nuevo)"},"to":{"type":"string","description":"Destinatario (obligatorio para email nuevo)"},"subject":{"type":"string","description":"Asunto (obligatorio para email nuevo)"},"body_html":{"type":"string","description":"Contenido HTML del email"},"scheduled_at":{"type":"string","description":"Fecha y hora para programar el envio (ISO 8601)"},"attachment_ids":{"type":"array","description":"IDs de adjuntos previamente subidos"},"cc":{"type":"array","description":"Direcciones CC"},"bcc":{"type":"array","description":"Direcciones BCC"},"account_id":{"type":"integer","description":"ID de la cuenta de correo"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["body_html"]}},{"name":"mark_email_read","description":"Marcar email como leido — Marca un hilo de email como leido [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"}},"required":["thread_id"]}},{"name":"generate_email_draft","description":"Generar borrador de email con IA — Genera un borrador de respuesta usando IA para un hilo de email [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"},"instructions":{"type":"string","description":"Instrucciones opcionales para la IA"}},"required":["thread_id"]}},{"name":"email_thread_action","description":"Accion sobre hilo de email — Ejecuta una accion sobre un hilo de email: archivar, eliminar, spam, restaurar, marcar como no leido, posponer (snooze), quitar snooze, fusionar hilos, asignar etiquetas o asignar agente [mutation]","inputSchema":{"type":"object","properties":{"action":{"type":"string","description":"Accion a ejecutar: archive, delete, spam, restore, mark_unread, snooze, unsnooze, merge, set_tags, assign"},"thread_id":{"type":"integer","description":"ID del hilo de email"},"until":{"type":"string","description":"Fecha/hora hasta la que posponer (solo para action=snooze). Formato ISO 8601 o natural (ej: '2026-03-22 09:00:00', 'tomorrow 9am')"},"target_thread_id":{"type":"integer","description":"ID del hilo destino para fusionar (solo para action=merge)"},"tags":{"type":"array","description":"Array de etiquetas (solo para action=set_tags)"},"agent_hash":{"type":"string","description":"Hash del agente a asignar (solo para action=assign, null para desasignar)"}},"required":["action","thread_id"]}},{"name":"discover_email_folders","description":"Descubrir carpetas IMAP — Conecta al servidor IMAP de una cuenta de email y descubre las carpetas disponibles (Enviados, Papelera, Archivo, Spam). Detecta automaticamente las carpetas estandar. [query]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta de correo"}},"required":["id"]}},{"name":"update_email_folders","description":"Configurar carpetas IMAP — Configura el mapeo de carpetas IMAP para una cuenta de email (Enviados, Papelera, Archivo, Spam). Necesario para la sincronizacion bidireccional. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta de email"},"sent_folder":{"type":"string","description":"Nombre de la carpeta de enviados"},"trash_folder":{"type":"string","description":"Nombre de la carpeta de papelera"},"archive_folder":{"type":"string","description":"Nombre de la carpeta de archivo"},"spam_folder":{"type":"string","description":"Nombre de la carpeta de spam"}},"required":["id"]}},{"name":"update_email_sync","description":"Configurar modo de sincronizacion — Configura el modo de sincronizacion IMAP para una cuenta: solo bandeja de entrada o bidireccional (sincroniza acciones como archivar, eliminar, spam con el servidor). [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta de email"},"sync_mode":{"type":"string","description":"Modo de sincronizacion: inbox_only o bidirectional"}},"required":["id"]}},{"name":"retry_email_account","description":"Reintentar conexion de cuenta de email — Resetea el estado de error de una cuenta de email y reintenta la conexion. Util cuando una cuenta esta en estado de error tras fallos de IMAP/SMTP. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la cuenta de email a reintentar"}},"required":["id"]}},{"name":"list_email_rules","description":"Listar reglas de email — Lista todas las reglas automaticas de email configuradas para la tienda. Las reglas se aplican a los emails entrantes en orden de prioridad. [query]","inputSchema":{"type":"object"}},{"name":"create_email_rule","description":"Crear regla de email — Crea una nueva regla automatica para procesar emails entrantes. Puede filtrar por remitente, asunto, etc. y ejecutar acciones como archivar, etiquetar o asignar agente. [mutation]","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Nombre descriptivo de la regla"},"priority":{"type":"integer","description":"Prioridad (0-99, mayor = se evalua primero). Default 0"},"conditions":{"type":"array","description":"Array de condiciones. Cada condicion: {field: 'from'|'subject'|'body', operator: 'contains'|'equals'|'starts_with'|'ends_with', value: 'texto'}"},"actions":{"type":"array","description":"Array de acciones. Cada accion: {type: 'archive'|'delete'|'spam'|'set_tags'|'assign', value?: 'etiqueta o agent_hash'}"}},"required":["name","conditions","actions"]}},{"name":"update_email_rule","description":"Actualizar regla de email — Actualiza una regla de email existente. Puede modificar nombre, prioridad, estado, condiciones o acciones. [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la regla a actualizar"},"name":{"type":"string","description":"Nuevo nombre"},"priority":{"type":"integer","description":"Nueva prioridad"},"is_active":{"type":"integer","description":"1=activa, 0=desactivada"},"conditions":{"type":"array","description":"Nuevas condiciones (reemplaza las actuales)"},"actions":{"type":"array","description":"Nuevas acciones (reemplaza las actuales)"}},"required":["id"]}},{"name":"delete_email_rule","description":"Eliminar regla de email — Elimina una regla de email. Esta accion no se puede deshacer. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID de la regla a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id"]}},{"name":"list_email_notes","description":"Listar notas internas de un hilo de email — Obtiene las notas internas de un hilo de email. Las notas son visibles solo para agentes, no para el cliente. [query]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"},"note_text":{"type":"string","description":"Texto de la nota"},"agent_name":{"type":"string","description":"Nombre del agente"},"agent_color":{"type":"string","description":"Color del agente"},"avatar_url":{"type":"string","description":"URL del avatar"}},"required":["thread_id"]}},{"name":"add_email_note","description":"Anadir nota interna a hilo de email — Agrega una nota interna a un hilo de email. Solo visible para agentes. [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"},"note_text":{"type":"string","description":"Texto de la nota"},"agent_name":{"type":"string","description":"Nombre del agente"},"agent_color":{"type":"string","description":"Color del agente"},"avatar_url":{"type":"string","description":"URL del avatar del agente"}},"required":["thread_id","note_text"]}},{"name":"delete_email_note","description":"Eliminar nota interna de email — Elimina una nota interna de un hilo de email. [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"},"note_id":{"type":"integer","description":"ID de la nota a eliminar"},"note_text":{"type":"string","description":"Texto de la nota"},"agent_name":{"type":"string","description":"Nombre del agente"},"agent_color":{"type":"string","description":"Color del agente"},"avatar_url":{"type":"string","description":"URL del avatar"}},"required":["thread_id","note_id"]}},{"name":"set_email_tags","description":"Establecer etiquetas de hilo de email — Establece las etiquetas de un hilo de email. Las etiquetas son strings libres. [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"},"tags":{"type":"array","description":"Array de etiquetas (strings). Enviar array vacio para quitar todas."}},"required":["thread_id","tags"]}},{"name":"assign_email_thread","description":"Asignar hilo de email a un agente — Asigna un hilo de email a un agente especifico. Usar assign_to=null para desasignar. [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"},"assign_to":{"type":"integer","description":"ID del agente (shop_agents.id). Omitir o null para desasignar."},"agent_hash":{"type":"string","description":"Hash del agente a asignar (null para desasignar)"}},"required":["thread_id"]}},{"name":"set_email_priority","description":"Establecer prioridad de hilo de email — Cambia la prioridad de un hilo de email. [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"},"priority":{"type":"string","description":"Prioridad del hilo","enum":["high","medium","low"]}},"required":["thread_id","priority"]}},{"name":"list_scheduled_emails","description":"Listar emails programados — Muestra los emails que estan programados para enviarse en el futuro. [query]","inputSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Debe ser 'scheduled'"},"from_filter":{"type":"string","description":"Filtrar por remitente"},"has_attachments":{"type":"string","description":"Filtrar por emails con adjuntos"},"tag":{"type":"string","description":"Filtrar por etiqueta"},"assigned":{"type":"string","description":"Filtrar por agente asignado"},"date_from":{"type":"string","description":"Fecha inicio del filtro"},"date_to":{"type":"string","description":"Fecha fin del filtro"}},"required":["filter"]}},{"name":"cancel_scheduled_email","description":"Cancelar email programado — Cancela un email que estaba programado para enviarse. El email se elimina. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"message_id":{"type":"integer","description":"ID del mensaje programado a cancelar"},"to":{"type":"string","description":"Destinatario del email"},"subject":{"type":"string","description":"Asunto del email"},"body_text":{"type":"string","description":"Cuerpo en texto plano"},"cc":{"type":"array","description":"Copia a (array de emails)"},"bcc":{"type":"array","description":"Copia oculta (array de emails)"},"account_id":{"type":"integer","description":"ID de la cuenta de email"},"attachment_ids":{"type":"array","description":"IDs de adjuntos"},"scheduled_at":{"type":"string","description":"Fecha programada"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["message_id"]}},{"name":"force_email_sync","description":"Forzar sincronizacion de email — Fuerza una sincronizacion inmediata de todas las cuentas de email via IMAP [mutation]","inputSchema":{"type":"object"}},{"name":"resolve_email_contact","description":"Resolver email de contacto — Busca la direccion de email asociada a un contacto de WhatsApp usando CRM y plataforma e-commerce [query]","inputSchema":{"type":"object","properties":{"phone_hash":{"type":"string","description":"Hash del telefono del contacto"}},"required":["phone_hash"]}},{"name":"link_email_contact","description":"Vincular contacto a hilo de email — Vincula un contacto de WhatsApp a un hilo de email para asociar conversaciones [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo de email"},"phone":{"type":"string","description":"Telefono del contacto a vincular (con prefijo +)"}},"required":["thread_id","phone"]}},{"name":"unlink_email_contact","description":"Desvincular contacto de hilo de email — Elimina la vinculacion de un contacto de WhatsApp con un hilo de email [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo de email"}},"required":["thread_id"]}},{"name":"search_email_contacts","description":"Buscar contactos para vincular a email — Busca clientes por nombre o telefono para vincularlos a hilos de email [query]","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Texto de busqueda (nombre o telefono)"}},"required":["query"]}},{"name":"upload_email_attachment","description":"Subir adjunto de email — Sube un archivo para adjuntarlo a un email [mutation]","inputSchema":{"type":"object","properties":{"file_data":{"type":"string","description":"Contenido del archivo en base64"},"file_name":{"type":"string","description":"Nombre del archivo"},"file_mime":{"type":"string","description":"Tipo MIME del archivo"},"file_size":{"type":"integer","description":"Tamano del archivo en bytes"}},"required":["file_data","file_name","file_mime","file_size"]}},{"name":"download_email_attachment","description":"Descargar adjunto de email — Obtiene la URL de descarga de un adjunto de email [query]","inputSchema":{"type":"object","properties":{"attachment_id":{"type":"integer","description":"ID del adjunto"},"json":{"type":"boolean","description":"Devolver URL como JSON en vez de redirigir"}},"required":["attachment_id"]}},{"name":"list_email_drafts","description":"Listar borradores de email — Muestra los borradores de email pendientes de envio. [query]","inputSchema":{"type":"object","properties":{"filter":{"type":"string","description":"Debe ser 'drafts'"},"from_filter":{"type":"string","description":"Filtrar por remitente"},"has_attachments":{"type":"string","description":"Filtrar por borradores con adjuntos"},"tag":{"type":"string","description":"Filtrar por etiqueta"},"assigned":{"type":"string","description":"Filtrar por agente asignado"},"date_from":{"type":"string","description":"Fecha inicio del filtro"},"date_to":{"type":"string","description":"Fecha fin del filtro"}},"required":["filter"]}},{"name":"snooze_email_thread","description":"Posponer hilo de email — Pospone un hilo de email hasta una fecha y hora especifica. El hilo se reabrira automaticamente cuando llegue el momento. [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"},"until":{"type":"string","description":"Fecha y hora hasta cuando posponer (formato ISO 8601, ej: 2026-03-25T09:00:00)"}},"required":["thread_id","until"]}},{"name":"unsnooze_email_thread","description":"Reactivar hilo de email pospuesto — Reactiva un hilo de email que estaba pospuesto, devolviendolo a estado abierto. [mutation]","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo"}},"required":["thread_id"]}},{"name":"merge_email_threads","description":"Fusionar hilos de email — Fusiona un hilo de email en otro. Los mensajes y notas del hilo origen se mueven al destino. Solo se pueden fusionar hilos de la misma cuenta de email. [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"thread_id":{"type":"integer","description":"ID del hilo origen (se eliminara)"},"target_thread_id":{"type":"integer","description":"ID del hilo destino (recibira los mensajes)"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["thread_id","target_thread_id"]}},{"name":"delete_docqa_assistant","description":"Eliminar asistente Doc-QA — Elimina un asistente Doc-QA y todos sus recursos asociados en OpenAI [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"assistant_id":{"type":"integer","description":"ID del asistente Doc-QA a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["assistant_id"]}},{"name":"delete_docqa_file","description":"Eliminar archivo de Doc-QA — Elimina un archivo de un asistente Doc-QA [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"file_id":{"type":"integer","description":"ID del archivo a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["file_id"]}},{"name":"list_docqa_files","description":"Listar archivos de Doc-QA — Lista los archivos subidos a un asistente Doc-QA [query]","inputSchema":{"type":"object","properties":{"assistant_id":{"type":"integer","description":"ID del asistente Doc-QA"}},"required":["assistant_id"]}},{"name":"get_docqa_detail","description":"Detalle de asistente Doc-QA — Obtiene los detalles completos de un asistente Doc-QA incluyendo estadisticas [query]","inputSchema":{"type":"object","properties":{"assistant_id":{"type":"integer","description":"ID del asistente Doc-QA"}},"required":["assistant_id"]}},{"name":"get_docqa_logs","description":"Historial de preguntas Doc-QA — Obtiene el historial de preguntas realizadas a un asistente Doc-QA [query]","inputSchema":{"type":"object","properties":{"assistant_id":{"type":"integer","description":"ID del asistente Doc-QA"},"page":{"type":"integer","description":"Numero de pagina (default: 1)"},"per_page":{"type":"integer","description":"Resultados por pagina (10-100, default: 20)"},"date_from":{"type":"string","description":"Fecha inicio del filtro (YYYY-MM-DD)"},"date_to":{"type":"string","description":"Fecha fin del filtro (YYYY-MM-DD)"},"days":{"type":"integer","description":"Ultimos N dias"},"search":{"type":"string","description":"Texto de busqueda en preguntas y respuestas"}},"required":["assistant_id"]}},{"name":"regenerate_docqa_token","description":"Regenerar token Doc-QA — Genera un nuevo token de acceso para un asistente Doc-QA [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"assistant_id":{"type":"integer","description":"ID del asistente Doc-QA"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["assistant_id"]}},{"name":"get_email_accounts","description":"Listar cuentas de email — Lista las cuentas de email accesibles con su estado y configuracion basica [query]","inputSchema":{"type":"object"}},{"name":"get_email_unread_count","description":"Contador de emails no leidos — Devuelve el total de emails no leidos en todas las cuentas [query]","inputSchema":{"type":"object"}},{"name":"get_email_filter_counts","description":"Contadores de filtros de email — Devuelve la cantidad de hilos por cada filtro (no leidos, leidos, enviados, archivados, etc.) [query]","inputSchema":{"type":"object","properties":{"account_id":{"type":"integer","description":"ID de cuenta de email para filtrar (omitir para todas)"}}}},{"name":"remove_whatsapp_profile_picture","description":"Eliminar foto de perfil de WhatsApp — Elimina la foto de perfil de una sesion de WhatsApp [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"session_id":{"type":"integer","description":"ID de la sesion de WhatsApp"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["session_id"]}},{"name":"list_calendar_connections","description":"List Calendar Connections — List all connected calendar providers (Google, Microsoft) for this shop [query]","inputSchema":{"type":"object"}},{"name":"list_calendar_services","description":"List Calendar Services — List all appointment types/services configured for a calendar [query]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"Calendar ID"}},"required":["calendar_id"]}},{"name":"get_calendar_settings","description":"Get Calendar Settings — Get calendar integration settings (enabled, timezone, booking rules) [query]","inputSchema":{"type":"object"}},{"name":"list_oauth_calendars","description":"Listar calendarios OAuth — Lista los calendarios disponibles de una conexion OAuth (Google/Microsoft) para vincular [query]","inputSchema":{"type":"object","properties":{"connection_id":{"type":"integer","description":"ID de la conexion OAuth"}},"required":["connection_id"]}},{"name":"link_oauth_calendar","description":"Vincular calendario OAuth — Vincula un calendario externo (Google/Microsoft) a la tienda [mutation]","inputSchema":{"type":"object","properties":{"connection_id":{"type":"integer","description":"ID de la conexion OAuth"},"external_calendar_id":{"type":"string","description":"ID del calendario externo a vincular"},"name":{"type":"string","description":"Nombre personalizado para el calendario"}},"required":["connection_id","external_calendar_id"]}},{"name":"unpublish_faq","description":"Despublicar FAQ — Despublica una o varias FAQs del plugin Product Q&A [mutation]","inputSchema":{"type":"object","properties":{"faq_ids":{"type":"array","description":"IDs de las FAQs a despublicar"}},"required":["faq_ids"]}},{"name":"republish_faq","description":"Republicar FAQ — Republica una o varias FAQs previamente despublicadas [mutation]","inputSchema":{"type":"object","properties":{"faq_ids":{"type":"array","description":"IDs de las FAQs a republicar"}},"required":["faq_ids"]}},{"name":"delete_faq","description":"Eliminar FAQ — Elimina permanentemente una o varias FAQs del plugin Product Q&A [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"faq_ids":{"type":"array","description":"IDs de las FAQs a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["faq_ids"]}},{"name":"delete_calendar_connection","description":"Eliminar conexion de calendario — Elimina una conexion de proveedor de calendario (Google/Microsoft) [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"connection_id":{"type":"integer","description":"ID de la conexion a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["connection_id"]}},{"name":"list_calendars","description":"Listar calendarios — Lista todos los calendarios disponibles con conteo de servicios y eventos proximos [query]","inputSchema":{"type":"object"}},{"name":"update_calendar","description":"Actualizar calendario — Actualiza propiedades de un calendario (nombre, descripcion, color, estado por defecto) [mutation]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario"},"name":{"type":"string","description":"Nombre del calendario"},"description":{"type":"string","description":"Descripcion del calendario"},"color":{"type":"string","description":"Color del calendario"},"is_default":{"type":"boolean","description":"Si es el calendario por defecto"}},"required":["calendar_id"]}},{"name":"delete_calendar","description":"Eliminar calendario — Elimina un calendario y todos sus eventos, servicios y disponibilidad [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["calendar_id"]}},{"name":"list_calendar_agents","description":"Listar agentes de calendario — Lista agentes asignados a un calendario especifico con sus roles [query]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario"}},"required":["calendar_id"]}},{"name":"assign_calendar_agent","description":"Asignar agente a calendario — Asigna un agente a un calendario con un rol especifico [mutation]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario"},"agent_id":{"type":"integer","description":"ID del agente"},"role":{"type":"string","description":"Rol: owner, can_book, view_only"}},"required":["calendar_id","agent_id"]}},{"name":"unassign_calendar_agent","description":"Desasignar agente de calendario — Desasigna un agente de un calendario [mutation]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario"},"agent_id":{"type":"integer","description":"ID del agente"}},"required":["calendar_id","agent_id"]}},{"name":"create_calendar_service","description":"Crear servicio de calendario — Crea un tipo de cita/servicio para un calendario (ej: consulta 30min, reunion 60min) [mutation]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario"},"name":{"type":"string","description":"Nombre del servicio"},"duration_minutes":{"type":"integer","description":"Duracion en minutos"},"description":{"type":"string","description":"Descripcion del servicio"},"buffer_before_minutes":{"type":"integer","description":"Minutos de buffer antes"},"buffer_after_minutes":{"type":"integer","description":"Minutos de buffer despues"},"max_concurrent":{"type":"integer","description":"Maximo de citas concurrentes"},"price":{"type":"string","description":"Precio del servicio"},"currency":{"type":"string","description":"Moneda (EUR, USD, etc.)"},"requires_confirmation":{"type":"boolean","description":"Si requiere confirmacion del negocio"}},"required":["calendar_id","name","duration_minutes"]}},{"name":"update_calendar_service","description":"Actualizar servicio de calendario — Actualiza propiedades de un servicio/tipo de cita existente [mutation]","inputSchema":{"type":"object","properties":{"service_id":{"type":"integer","description":"ID del servicio"},"name":{"type":"string","description":"Nombre del servicio"},"duration_minutes":{"type":"integer","description":"Duracion en minutos"},"description":{"type":"string","description":"Descripcion"},"buffer_before_minutes":{"type":"integer","description":"Minutos de buffer antes"},"buffer_after_minutes":{"type":"integer","description":"Minutos de buffer despues"},"max_concurrent":{"type":"integer","description":"Maximo de citas concurrentes"},"price":{"type":"string","description":"Precio"},"currency":{"type":"string","description":"Moneda"},"requires_confirmation":{"type":"boolean","description":"Si requiere confirmacion"},"is_active":{"type":"boolean","description":"Si el servicio esta activo"},"sort_order":{"type":"integer","description":"Orden de visualizacion"}},"required":["service_id"]}},{"name":"delete_calendar_service","description":"Eliminar servicio de calendario — Elimina un servicio/tipo de cita del calendario [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"service_id":{"type":"integer","description":"ID del servicio a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["service_id"]}},{"name":"list_calendar_availability","description":"Listar disponibilidad de calendario — Lista todas las reglas de disponibilidad de un calendario (horarios, excepciones, bloqueos) [query]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario"}},"required":["calendar_id"]}},{"name":"create_calendar_availability","description":"Crear regla de disponibilidad — Crea una regla de disponibilidad en un calendario (semanal, excepcion por fecha, bloqueo) [mutation]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario"},"rule_type":{"type":"string","description":"Tipo: weekly, date_exception, blocked"},"day_of_week":{"type":"integer","description":"Dia de la semana (0-6, para weekly)"},"specific_date":{"type":"string","description":"Fecha especifica YYYY-MM-DD (para date_exception)"},"start_time":{"type":"string","description":"Hora inicio HH:MM"},"end_time":{"type":"string","description":"Hora fin HH:MM"},"label":{"type":"string","description":"Etiqueta descriptiva"},"is_available":{"type":"boolean","description":"Si esta disponible (true) o bloqueado (false)"}},"required":["calendar_id","rule_type","start_time","end_time"]}},{"name":"update_calendar_availability","description":"Actualizar regla de disponibilidad — Actualiza una regla de disponibilidad existente [mutation]","inputSchema":{"type":"object","properties":{"rule_id":{"type":"integer","description":"ID de la regla de disponibilidad"},"start_time":{"type":"string","description":"Hora inicio HH:MM"},"end_time":{"type":"string","description":"Hora fin HH:MM"},"label":{"type":"string","description":"Etiqueta descriptiva"},"is_available":{"type":"boolean","description":"Si esta disponible"},"rule_type":{"type":"string","description":"Tipo de regla: weekly o specific_date"},"day_of_week":{"type":"integer","description":"Dia de la semana (0=lunes, 6=domingo). Solo para rule_type=weekly"},"specific_date":{"type":"string","description":"Fecha especifica YYYY-MM-DD. Solo para rule_type=specific_date"}},"required":["rule_id"]}},{"name":"delete_calendar_availability","description":"Eliminar regla de disponibilidad — Elimina una regla de disponibilidad del calendario [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"rule_id":{"type":"integer","description":"ID de la regla a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["rule_id"]}},{"name":"list_calendar_notifications","description":"Listar notificaciones de calendario — Lista las notificaciones configuradas para un calendario (confirmaciones, recordatorios, etc.) [query]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario"}},"required":["calendar_id"]}},{"name":"create_calendar_notification","description":"Crear notificacion de calendario — Crea una notificacion automatica para un calendario (confirmacion, recordatorio, cancelacion, seguimiento, no-show) [mutation]","inputSchema":{"type":"object","properties":{"calendar_id":{"type":"integer","description":"ID del calendario"},"notification_type":{"type":"string","description":"Tipo: confirmation, reminder, cancellation, follow_up, no_show"},"channel":{"type":"string","description":"Canal: whatsapp, email"},"timing_minutes":{"type":"integer","description":"Minutos antes/despues del evento"},"template_text":{"type":"string","description":"Texto de la notificacion"},"is_enabled":{"type":"boolean","description":"Si esta habilitada"}},"required":["calendar_id","notification_type","channel","timing_minutes","template_text"]}},{"name":"update_calendar_notification","description":"Actualizar notificacion de calendario — Actualiza una notificacion automatica de calendario [mutation]","inputSchema":{"type":"object","properties":{"notification_id":{"type":"integer","description":"ID de la notificacion"},"notification_type":{"type":"string","description":"Tipo de notificacion"},"channel":{"type":"string","description":"Canal de envio"},"timing_minutes":{"type":"integer","description":"Minutos antes/despues"},"template_text":{"type":"string","description":"Texto de la notificacion"},"is_enabled":{"type":"boolean","description":"Si esta habilitada"}},"required":["notification_id"]}},{"name":"delete_calendar_notification","description":"Eliminar notificacion de calendario — Elimina una notificacion automatica de calendario [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"notification_id":{"type":"integer","description":"ID de la notificacion a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["notification_id"]}},{"name":"save_calendar_settings","description":"Guardar configuracion de calendario — Guarda la configuracion global del modulo de calendario [mutation]","inputSchema":{"type":"object","properties":{"settings":{"type":"object","description":"Objeto con la configuracion del calendario"},"enabled":{"type":"boolean","description":"Si el modulo de calendario esta habilitado"}}}},{"name":"update_calendar_event_status","description":"Cambiar estado de evento — Cambia el estado de un evento de calendario (pendiente, confirmado, cancelado, completado, no-show) [mutation]","inputSchema":{"type":"object","properties":{"event_id":{"type":"integer","description":"ID del evento"},"status":{"type":"string","description":"Nuevo estado: pending, confirmed, cancelled, completed, no_show"}},"required":["event_id","status"]}},{"name":"list_calendar_events_ops","description":"Listar eventos de calendario — Lista eventos del calendario para un rango de fechas, con filtrado por agente o telefono [query]","inputSchema":{"type":"object","properties":{"date_from":{"type":"string","description":"Fecha inicio YYYY-MM-DD"},"date_to":{"type":"string","description":"Fecha fin YYYY-MM-DD"},"agent_id":{"type":"integer","description":"Filtrar por ID de agente"},"phone":{"type":"string","description":"Filtrar por telefono del cliente"},"title":{"type":"string","description":"Titulo del evento"},"description":{"type":"string","description":"Descripcion del evento"},"start_datetime":{"type":"string","description":"Fecha/hora inicio"},"end_datetime":{"type":"string","description":"Fecha/hora fin"},"all_day":{"type":"boolean","description":"Si es evento de dia completo"},"assigned_agent_id":{"type":"integer","description":"ID del agente asignado"},"event_id":{"type":"integer","description":"ID del evento"}}}},{"name":"approve_knowledge_snippet","description":"Aprobar snippet de conocimiento — Aprueba un snippet de conocimiento pendiente y lo activa [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del snippet a aprobar"}},"required":["id"]}},{"name":"reject_knowledge_snippet","description":"Rechazar snippet de conocimiento — Rechaza un snippet de conocimiento pendiente [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del snippet a rechazar"}},"required":["id"]}},{"name":"edit_knowledge_snippet","description":"Editar snippet de conocimiento — Edita el contenido o categoria de un snippet de conocimiento [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del snippet"},"content":{"type":"string","description":"Nuevo contenido del snippet"},"category":{"type":"string","description":"Nueva categoria"}},"required":["id"]}},{"name":"delete_knowledge_snippet","description":"Eliminar snippet de conocimiento — Elimina permanentemente un snippet de conocimiento [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del snippet a eliminar"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id"]}},{"name":"resolve_knowledge_conflict","description":"Resolver conflicto de snippet — Resuelve un conflicto entre snippets de conocimiento eligiendo cual mantener [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del snippet en conflicto"},"keep_id":{"type":"integer","description":"ID del snippet a mantener"}},"required":["id","keep_id"]}},{"name":"keep_both_knowledge_snippets","description":"Mantener ambos snippets en conflicto — Mantiene ambos snippets en conflicto activando los dos [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del snippet en conflicto"}},"required":["id"]}},{"name":"reject_and_propose_knowledge_snippet","description":"Rechazar conflicto y proponer dato correcto — Rechaza ambos snippets en conflicto y crea uno nuevo con el contenido propuesto por el usuario [mutation] (requiere confirmación: pasar confirm=true para ejecutar)","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del snippet en conflicto"},"proposed_content":{"type":"string","description":"Contenido correcto propuesto por el usuario"},"conflict_with_id":{"type":"integer","description":"ID del snippet en conflicto a rechazar tambien (si no se toma del campo conflict_with_id del snippet)"},"confirm":{"type":"boolean","description":"Pasar true para confirmar la ejecución de esta acción peligrosa"}},"required":["id","proposed_content"]}},{"name":"toggle_snippet_permanent","description":"Alternar snippet permanente — Alterna el estado permanente de un snippet (protege de expiracion por antiguedad) [mutation]","inputSchema":{"type":"object","properties":{"id":{"type":"integer","description":"ID del snippet"}},"required":["id"]}},{"name":"get_agent_assignments","description":"Obtener asignaciones de agentes — Devuelve los agentes asignados a una lista de telefonos de clientes [query]","inputSchema":{"type":"object","properties":{"phones":{"type":"array","description":"Lista de numeros de telefono para consultar sus agentes asignados"}},"required":["phones"]}},{"name":"create_crm_customer","description":"Crear contacto CRM — Crea un nuevo contacto en el CRM interno de WAzion [mutation]","inputSchema":{"type":"object","properties":{"whatsapp_number":{"type":"string","description":"Numero de WhatsApp del contacto (con prefijo +)"}},"required":["whatsapp_number"]}},{"name":"update_crm_customer","description":"Actualizar contacto CRM — Actualiza los datos de un contacto existente en el CRM interno [mutation]","inputSchema":{"type":"object","properties":{"whatsapp_number":{"type":"string","description":"Numero de WhatsApp del contacto a actualizar"},"full_name":{"type":"string","description":"Nombre completo"},"company_alias":{"type":"string","description":"Nombre de empresa"},"email":{"type":"string","description":"Email de contacto"},"alternate_phone":{"type":"string","description":"Telefono alternativo"},"address_street":{"type":"string","description":"Calle"},"address_city":{"type":"string","description":"Ciudad"},"address_state_province":{"type":"string","description":"Provincia o estado"},"address_postal_code":{"type":"string","description":"Codigo postal"},"address_country":{"type":"string","description":"Codigo de pais (ISO 2 letras)"},"tax_id":{"type":"string","description":"NIF/CIF/Tax ID"},"is_company":{"type":"boolean","description":"Si es empresa (true) o persona (false)"},"preferred_language":{"type":"string","description":"Idioma preferido del contacto"},"time_zone":{"type":"string","description":"Zona horaria del contacto"}},"required":["whatsapp_number"]}},{"name":"get_crm_customer","description":"Obtener contacto CRM — Obtiene los datos de un contacto del CRM interno por su numero de WhatsApp [query]","inputSchema":{"type":"object","properties":{"whatsapp_number":{"type":"string","description":"Numero de WhatsApp del contacto a consultar"}},"required":["whatsapp_number"]}},{"name":"check_docqa_file_status","description":"Verificar estado de archivos Doc-QA — Comprueba el estado de procesamiento de los archivos subidos a un asistente Doc-QA [query]","inputSchema":{"type":"object","properties":{"assistant_id":{"type":"integer","description":"ID del asistente Doc-QA"}},"required":["assistant_id"]}},{"name":"upload_docqa_file","description":"Subir archivo a Doc-QA — Sube un documento a un asistente Doc-QA para que pueda responder preguntas sobre su contenido [mutation]","inputSchema":{"type":"object","properties":{"assistant_id":{"type":"integer","description":"ID del asistente Doc-QA"},"file":{"type":"string","description":"Archivo a subir (multipart/form-data)"}},"required":["assistant_id","file"]}},{"name":"export_crm_contacts","description":"Exportar contactos CRM — Exporta los contactos del CRM interno como archivo CSV [query]","inputSchema":{"type":"object","properties":{"tag":{"type":"string","description":"Filtrar por etiqueta de cliente"},"since":{"type":"string","description":"Fecha minima de actualizacion (formato ISO 8601, ej: 2026-01-01T00:00:00Z)"}}}},{"name":"import_crm_contacts","description":"Importar contactos CRM — Importa contactos al CRM interno desde un archivo CSV [mutation]","inputSchema":{"type":"object","properties":{"file":{"type":"string","description":"Archivo CSV a importar (multipart/form-data)"},"skip_header":{"type":"boolean","description":"Omitir la primera fila como encabezado (default: true)"},"update_existing":{"type":"boolean","description":"Actualizar contactos existentes si ya existen (default: false)"}},"required":["file"]}},{"name":"import_contacts_csv","description":"Importar contactos desde CSV — Importa contactos a una lista de marketing desde un archivo CSV [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista de contactos destino"},"file":{"type":"string","description":"Archivo CSV a importar (multipart/form-data)"}},"required":["list_id","file"]}},{"name":"import_contacts_txt","description":"Importar contactos desde archivo de texto — Importa contactos a una lista de marketing desde un archivo de texto (un telefono por linea) [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista de contactos destino"},"file":{"type":"string","description":"Archivo TXT a importar (multipart/form-data)"}},"required":["list_id","file"]}},{"name":"preview_import_file","description":"Previsualizar archivo de importacion — Previsualiza las columnas y primeras filas de un archivo CSV antes de importar contactos [query]","inputSchema":{"type":"object","properties":{"file":{"type":"string","description":"Archivo CSV a previsualizar (multipart/form-data)"}},"required":["file"]}},{"name":"import_mapped_contacts","description":"Importar contactos con mapeo de columnas — Importa contactos desde un archivo CSV previamente previsualizado, especificando que columna contiene el telefono y el nombre [mutation]","inputSchema":{"type":"object","properties":{"list_id":{"type":"integer","description":"ID de la lista de contactos destino"},"tmp_id":{"type":"string","description":"ID temporal del archivo obtenido en la previsualizacion"},"phone_column":{"type":"integer","description":"Indice de la columna que contiene los telefonos"},"name_column":{"type":"integer","description":"Indice de la columna que contiene los nombres"}},"required":["list_id","tmp_id","phone_column"]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-16 19:25:14","lastCheckedAt":"2026-04-14 07:45:53","mcpAgentSnippet":{"type":"url","url":"https://www.wazion.com/api/mcp/","name":"www-wazion-com-api-mcp"}},{"id":"mcp-ekkos-dev","name":"Subdomain expansion: mcp.ekkos.dev","description":"Subdomain expansion: mcp.ekkos.dev","url":"https://mcp.ekkos.dev/","sourceUrl":"https://ekkos.dev/","transport":"unknown","specVersion":"2025-06-18","status":"active","validated":true,"score":95,"latencyP50":265,"toolCount":7,"tools":[{"name":"ekkOS_Search","description":"Search ekkOS memory for patterns, episodes, and semantic knowledge","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"limit":{"type":"number","description":"Max results (default: 10)"},"sources":{"type":"array","items":{"type":"string","enum":["patterns","episodic","semantic","all"]},"description":"Memory sources to search"}},"required":["query"]}},{"name":"ekkOS_Context","description":"Get relevant context for a task (episodes, patterns, plan)","inputSchema":{"type":"object","properties":{"task":{"type":"string","description":"Task description"},"userId":{"type":"string","description":"User ID"},"maxEpisodes":{"type":"number","description":"Max episodes to return"},"maxPatterns":{"type":"number","description":"Max patterns to return"}},"required":["task"]}},{"name":"ekkOS_Capture","description":"Capture a memory event (code change, chat, command, etc)","inputSchema":{"type":"object","properties":{"userId":{"type":"string"},"sessionId":{"type":"string"},"source":{"type":"string","enum":["vscode","web","cli","api","agent"]},"type":{"type":"string","enum":["code_change","chat_turn","command","file_opened","error","success"]},"content":{"type":"string"},"metadata":{"type":"object"}},"required":["userId","sessionId","source","type","content"]}},{"name":"ekkOS_Forge","description":"Create a new pattern from a learned solution","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Pattern title (legacy alias for pattern_title)"},"pattern_title":{"type":"string","description":"Pattern title (preferred)"},"problem":{"type":"string","description":"Problem this solves"},"solution":{"type":"string","description":"The solution approach"},"works_when":{"type":"array","items":{"type":"string"},"description":"When this pattern applies"},"anti_patterns":{"type":"array","items":{"type":"string"},"description":"What to avoid"},"tags":{"type":"array","items":{"type":"string"},"description":"Categorization tags"}},"required":["problem","solution"]}},{"name":"ekkOS_Track","description":"Track when a memory/pattern is applied","inputSchema":{"type":"object","properties":{"retrieval_id":{"type":"string","description":"ID from ekkOS_Search"},"memory_ids":{"type":"array","items":{"type":"string"},"description":"Which memories were used"},"model_used":{"type":"string","description":"LLM model name"},"context":{"type":"object","description":"Additional context"}},"required":["retrieval_id","memory_ids"]}},{"name":"ekkOS_Outcome","description":"Record success/failure of applied patterns. ENHANCED: Never fails - integrates Track if needed.","inputSchema":{"type":"object","properties":{"application_id":{"type":"string","description":"ID from ekkOS_Track (optional)"},"success":{"type":"boolean","description":"Whether it worked"},"model_used":{"type":"string","description":"LLM model name"},"retrieval_id":{"type":"string","description":"Retrieval ID from ekkOS_Search"},"retrieval_token":{"type":"string","description":"Signed token from ekkOS_Search"},"memory_ids":{"type":"array","items":{"type":"string"},"description":"Pattern IDs to record outcome for"}},"required":["success"]}},{"name":"ekkOS_Stats","description":"Get statistics for all memory layers","inputSchema":{"type":"object","properties":{}}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:37:34","lastCheckedAt":"2026-04-14 07:43:51","mcpAgentSnippet":{"type":"url","url":"https://mcp.ekkos.dev/","name":"mcp-ekkos-dev"}},{"id":"api-ekkos-dev","name":"Subdomain expansion: api.ekkos.dev","description":"Subdomain expansion: api.ekkos.dev","url":"https://api.ekkos.dev/","sourceUrl":"https://ekkos.dev/","transport":"unknown","specVersion":"2025-06-18","status":"active","validated":true,"score":95,"latencyP50":277,"toolCount":7,"tools":[{"name":"ekkOS_Search","description":"Search ekkOS memory for patterns, episodes, and semantic knowledge","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"limit":{"type":"number","description":"Max results (default: 10)"},"sources":{"type":"array","items":{"type":"string","enum":["patterns","episodic","semantic","all"]},"description":"Memory sources to search"}},"required":["query"]}},{"name":"ekkOS_Context","description":"Get relevant context for a task (episodes, patterns, plan)","inputSchema":{"type":"object","properties":{"task":{"type":"string","description":"Task description"},"userId":{"type":"string","description":"User ID"},"maxEpisodes":{"type":"number","description":"Max episodes to return"},"maxPatterns":{"type":"number","description":"Max patterns to return"}},"required":["task"]}},{"name":"ekkOS_Capture","description":"Capture a memory event (code change, chat, command, etc)","inputSchema":{"type":"object","properties":{"userId":{"type":"string"},"sessionId":{"type":"string"},"source":{"type":"string","enum":["vscode","web","cli","api","agent"]},"type":{"type":"string","enum":["code_change","chat_turn","command","file_opened","error","success"]},"content":{"type":"string"},"metadata":{"type":"object"}},"required":["userId","sessionId","source","type","content"]}},{"name":"ekkOS_Forge","description":"Create a new pattern from a learned solution","inputSchema":{"type":"object","properties":{"title":{"type":"string","description":"Pattern title (legacy alias for pattern_title)"},"pattern_title":{"type":"string","description":"Pattern title (preferred)"},"problem":{"type":"string","description":"Problem this solves"},"solution":{"type":"string","description":"The solution approach"},"works_when":{"type":"array","items":{"type":"string"},"description":"When this pattern applies"},"anti_patterns":{"type":"array","items":{"type":"string"},"description":"What to avoid"},"tags":{"type":"array","items":{"type":"string"},"description":"Categorization tags"}},"required":["problem","solution"]}},{"name":"ekkOS_Track","description":"Track when a memory/pattern is applied","inputSchema":{"type":"object","properties":{"retrieval_id":{"type":"string","description":"ID from ekkOS_Search"},"memory_ids":{"type":"array","items":{"type":"string"},"description":"Which memories were used"},"model_used":{"type":"string","description":"LLM model name"},"context":{"type":"object","description":"Additional context"}},"required":["retrieval_id","memory_ids"]}},{"name":"ekkOS_Outcome","description":"Record success/failure of applied patterns. ENHANCED: Never fails - integrates Track if needed.","inputSchema":{"type":"object","properties":{"application_id":{"type":"string","description":"ID from ekkOS_Track (optional)"},"success":{"type":"boolean","description":"Whether it worked"},"model_used":{"type":"string","description":"LLM model name"},"retrieval_id":{"type":"string","description":"Retrieval ID from ekkOS_Search"},"retrieval_token":{"type":"string","description":"Signed token from ekkOS_Search"},"memory_ids":{"type":"array","items":{"type":"string"},"description":"Pattern IDs to record outcome for"}},"required":["success"]}},{"name":"ekkOS_Stats","description":"Get statistics for all memory layers","inputSchema":{"type":"object","properties":{}}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:37:34","lastCheckedAt":"2026-04-14 07:31:17","mcpAgentSnippet":{"type":"url","url":"https://api.ekkos.dev/","name":"api-ekkos-dev"}},{"id":"mcp-phasetransitions-ai-mcp-token-your-token","name":"MCP server for AI project intelligence — tracks 300+ open-source AI projects acr","description":"MCP server for AI project intelligence — tracks 300+ open-source AI projects across GitHub, PyPI, npm, HuggingFace, and Hacker News","url":"https://mcp.phasetransitions.ai/mcp?token=YOUR_TOKEN","sourceUrl":"https://github.com/grahamrowe82/pt-edge","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":90,"latencyP50":760,"toolCount":8,"tools":[{"name":"list_tables","description":"List all database tables with row counts. Use before describe_table() or query().","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},{"name":"describe_table","description":"Show columns, types, and row count for a specific table. Call before writing a query.","inputSchema":{"additionalProperties":false,"properties":{"table_name":{"type":"string"}},"required":["table_name"],"type":"object"}},{"name":"search_tables","description":"Find tables by keyword in table or column names. Use when you're not sure which table has the data you need.","inputSchema":{"additionalProperties":false,"properties":{"keyword":{"type":"string"}},"required":["keyword"],"type":"object"}},{"name":"query","description":"Run a read-only SQL query against the database. Call list_tables() and describe_table() first to see available tables and columns. SELECT only, 5s timeout, 1000 row limit, JSON results.\n\nExamples:\n  query(\"SELECT full_name, stars FROM ai_repos ORDER BY stars DESC LIMIT 10\")\n  query(\"SELECT domain, COUNT(*) FROM ai_repos GROUP BY domain ORDER BY 2 DESC\")","inputSchema":{"additionalProperties":false,"properties":{"sql":{"type":"string"}},"required":["sql"],"type":"object"}},{"name":"submit_feedback","description":"Submit feedback about an AI topic or project.\n\nCategories: bug (broken/wrong data), feature (buildable thing), observation (strategic context), insight (analytical finding).\nDefault 'observation' when unsure. All submissions are PUBLIC -- do not include sensitive data.","inputSchema":{"additionalProperties":false,"properties":{"topic":{"type":"string"},"correction":{"type":"string"},"context":{"default":null,"type":"string"},"category":{"default":"observation","type":"string"}},"required":["topic","correction"],"type":"object"}},{"name":"get_status","description":"Start here. Returns orientation: how many tables, repos, domains, and last sync time. Shows what data is available and how to explore it.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},{"name":"find_ai_tool","description":"Find AI/ML tools and libraries by describing what you need in plain English.\nSearches 220K+ indexed AI repos via semantic + keyword search.\n\nOptional domain filter: mcp, agents, ai-coding, rag, llm-tools, generative-ai,\ndiffusion, voice-ai, nlp, computer-vision, embeddings, vector-db,\nprompt-engineering, transformers, mlops, data-engineering, ml-frameworks\n\nExamples:\n  find_ai_tool(\"database query tool for postgres\", domain=\"mcp\")\n  find_ai_tool(\"autonomous coding agent\")\n  find_ai_tool(\"PDF document chunking for RAG pipeline\")","inputSchema":{"additionalProperties":false,"properties":{"query":{"type":"string"},"domain":{"default":"","type":"string"},"limit":{"default":5,"type":"integer"},"offset":{"default":0,"type":"integer"}},"required":["query"],"type":"object"}},{"name":"list_workflows","description":"Show available SQL recipe workflows -- pre-built query templates for common questions. Adapt these to your needs or use query() for custom SQL.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-16 12:04:12","lastCheckedAt":"2026-04-14 07:45:54","mcpAgentSnippet":{"type":"url","url":"https://mcp.phasetransitions.ai/mcp?token=YOUR_TOKEN","name":"mcp-phasetransitions-ai-mcp-token-your-token"}},{"id":"mcp-alphavantage-co-mcp-apikey-your-api-key","name":"Alpha Vantage MCP Server","description":"Alpha Vantage MCP Server","url":"https://mcp.alphavantage.co/mcp?apikey=YOUR_API_KEY","sourceUrl":"https://github.com/alphavantage/alpha_vantage_mcp","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":90,"latencyP50":487,"toolCount":3,"tools":[{"name":"TOOL_LIST","description":"List all available Alpha Vantage API tools with their names and descriptions. IMPORTANT: This returns only tool names and descriptions, NOT parameter schemas. You MUST call TOOL_GET(tool_name) to retrieve the full inputSchema (required parameters, types, descriptions) before calling TOOL_CALL. Calling TOOL_CALL without first calling TOOL_GET will fail because you won't know the required parameters. Workflow: TOOL_LIST -> TOOL_GET(tool_name) -> TOOL_CALL(tool_name, arguments)","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"TOOL_GET","description":"Get the full schema for one or more tools including all parameters. After discovering tools via TOOL_LIST, use this to get the complete parameter schema before calling the tool. You can provide either a single tool name or a list of tool names if you're unsure which one to use.","inputSchema":{"type":"object","properties":{"tool_name":{"type":"string","description":"The name of the tool to get schema for (e.g., \"TIME_SERIES_DAILY\"),"}},"required":["tool_name"]}},{"name":"TOOL_CALL","description":"Execute a tool by name with the provided arguments. IMPORTANT: You MUST call TOOL_GET(tool_name) first to retrieve the full parameter schema before calling this tool. The arguments must match the schema returned by TOOL_GET, including all required parameters. Calling without the correct arguments will result in errors. Workflow: TOOL_LIST -> TOOL_GET(tool_name) -> TOOL_CALL(tool_name, arguments)","inputSchema":{"type":"object","properties":{"tool_name":{"type":"string","description":"The name of the tool to call (e.g., \"TIME_SERIES_DAILY\")"},"arguments":{"type":"string","description":"Dictionary of arguments matching the tool's parameter schema from TOOL_GET"}},"required":["tool_name","arguments"]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 06:03:35","lastCheckedAt":"2026-04-14 07:45:54","mcpAgentSnippet":{"type":"url","url":"https://mcp.alphavantage.co/mcp?apikey=YOUR_API_KEY","name":"mcp-alphavantage-co-mcp-apikey-your-api-key"}},{"id":"myhomeoffers-ie-mcp","name":"myhomeoffers-ie-mcp","description":null,"url":"https://myhomeoffers.ie/mcp","sourceUrl":null,"transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":90,"latencyP50":782,"toolCount":1,"tools":[{"name":"searchProperties","description":"Search Irish properties with progressive fallback expansion.","inputSchema":{"type":"object","properties":{"location":{"type":"string","description":"Location query string"},"propertyType":{"type":"string","description":"Property type filter"},"bedrooms":{"type":"integer","description":"Exact bedrooms count"},"maxPrice":{"type":"integer","description":"Maximum price in euros"},"limit":{"type":"integer","description":"Max results (1-20)","defaultValue":10},"cursor":{"type":"string","description":"Pagination cursor"},"latitude":{"type":"number","description":"Latitude (decimal degrees)"},"longitude":{"type":"number","description":"Longitude (decimal degrees)"},"radius":{"type":"number","description":"Radius in kilometers"},"bbox":{"type":"string","description":"Bounding box 'minLon,minLat,maxLon,maxLat'"}},"required":[]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-15 10:50:23","lastCheckedAt":"2026-04-14 07:45:53","mcpAgentSnippet":{"type":"url","url":"https://myhomeoffers.ie/mcp","name":"myhomeoffers-ie-mcp"}},{"id":"sats4ai-com-api-mcp","name":"Bitcoin-powered AI tools via MCP + Lightning Network micropayments (L402)","description":"Bitcoin-powered AI tools via MCP + Lightning Network micropayments (L402)","url":"https://sats4ai.com/api/mcp","sourceUrl":"https://github.com/cnghockey/sats4ai-mcp-server","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":90,"latencyP50":832,"toolCount":42,"tools":[{"name":"create_payment","description":"Create a Lightning invoice to pay for one AI service call. Each payment covers exactly one output. Call list_models first to see available models. modelId is optional — omit it to use the default (best) model. For generate_text, you must provide the exact prompt now (price is calculated from character count). For send_sms, place_call, and ai_call, phoneNumber is required at payment time. For ai_call, also provide durationMinutes (1-10, default 3). For generate_video, you must provide duration, mode, and generate_audio at payment time (price depends on these). For animate_image, provide duration (100 sats/sec). For edit_image, provide resolution (1K=200, 2K=300, 4K=450 sats).","inputSchema":{"type":"object","properties":{"toolName":{"type":"string","description":"Tool name to pay for (e.g., 'generate_text', 'generate_image', 'generate_video', 'send_sms', 'place_call')"},"modelId":{"type":"number","description":"Optional. AI model ID from list_models. Omit for default (best) model."},"prompt":{"type":"string","description":"Required for generate_text: the exact prompt (price calculated from char count, locked to payment)"},"systemPrompt":{"type":"string","description":"For generate_text: include if using a custom system prompt (affects price)"},"fileContext":{"type":"string","description":"For generate_text: include extracted file text if attaching a file (affects price)"},"phoneNumber":{"type":"string","description":"Required for send_sms and place_call: phone in E.164 format (e.g., +14155550100)"},"message":{"type":"string","description":"Required for send_sms: message text (max 120 chars)"},"durationMinutes":{"type":"number","description":"Required for place_call with audioUrl: duration in minutes (1-30)"},"duration":{"type":"number","description":"Required for generate_video: duration in seconds (3-15)"},"mode":{"type":"string","enum":["standard","pro"],"description":"For generate_video: quality mode (default: 'pro'). standard: 300 sats/sec (no audio), 400 sats/sec (audio). pro: 450 sats/sec (no audio), 550 sats/sec (audio)."},"generate_audio":{"type":"boolean","description":"For generate_video: include AI audio track (default: false). Adds 100 sats/sec."},"resolution":{"type":"string","enum":["1K","2K","4K"],"description":"For edit_image: output resolution. 1K=200 sats, 2K=300 sats, 4K=450 sats. Default: 1K."}},"required":["toolName"]}},{"name":"check_payment_status","description":"Check if a Lightning payment has been received. Returns paid/pending status.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"The payment ID to check"}},"required":["paymentId"]}},{"name":"generate_image","description":"Generate an image from a text prompt. Returns JSON with image URL. Models: Grok Imagine (fast creative generation, 100 sats), Seedream 4 (photorealistic detail, 150 sats), Nano Banana 2 (premium quality, 200 sats, default). Supports img2img with optional base64 input. Stable endpoints — models upgrade automatically as SOTA evolves. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_image'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"prompt":{"type":"string","description":"Text prompt describing the image"},"modelId":{"type":"number","description":"Optional. Omit for default (best) model."},"imageBase64":{"type":"string","description":"Optional base64 image for img2img generation"}},"required":["paymentId","prompt"]}},{"name":"generate_video","description":"Generate a video from a text prompt. Uses Kling v3 — cinematic quality, consistent motion, physics-aware rendering. Standard and pro quality modes with optional AI-generated audio track. Async — returns requestId, poll with check_job_status. Pricing: standard 300-400 sats/sec, pro 450-550 sats/sec (audio adds 100 sats/sec). Duration 3-15 seconds. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_video' and duration, mode, generate_audio params.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"prompt":{"type":"string","description":"Text prompt describing the video"},"modelId":{"type":"number","description":"Optional. Omit for default model."},"duration":{"type":"number","description":"Duration in seconds (3-15)","minimum":3,"maximum":15},"mode":{"type":"string","enum":["standard","pro"],"description":"Quality mode","default":"pro"},"generate_audio":{"type":"boolean","description":"Include AI audio track","default":false}},"required":["paymentId","prompt","duration"]}},{"name":"animate_image","description":"Animate a still image into video with text guidance. Uses Grok Imagine Video — preserves source image fidelity while generating natural motion and camera movement. Async — returns requestId, poll with check_job_status. 100 sats/sec, duration 3-15 seconds. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='animate_image'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"prompt":{"type":"string","description":"Text prompt describing the animation"},"modelId":{"type":"number","description":"Optional. Omit for default model."},"imageBase64":{"type":"string","description":"Base64 encoded image to animate"},"duration":{"type":"number","description":"Duration in seconds (3-15)","minimum":3,"maximum":15}},"required":["paymentId","prompt","imageBase64","duration"]}},{"name":"check_job_status","description":"Check the status of an async job (generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call). Returns status: queued/processing/completed/failed. For epub-audiobook, also returns progress percentage and chapter-level progress.","inputSchema":{"type":"object","properties":{"requestId":{"type":"string","description":"Request ID from the async operation"},"jobType":{"type":"string","enum":["video","video-image","image-3d","transcription","epub-audiobook","ai-call"],"description":"Type of job"}},"required":["requestId","jobType"]}},{"name":"get_job_result","description":"Get the final result of a completed async job. Call only after check_job_status returns completed.","inputSchema":{"type":"object","properties":{"requestId":{"type":"string","description":"Request ID from the async operation"},"jobType":{"type":"string","enum":["video","video-image","image-3d","transcription","epub-audiobook","ai-call"],"description":"Type of job"}},"required":["requestId","jobType"]}},{"name":"analyze_image","description":"Analyze and describe image content, answer visual questions, extract information from screenshots or photos. Uses Qwen VL — multimodal vision-language model with strong OCR, chart reading, and spatial reasoning. 21 sats per image. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='analyze_image'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"prompt":{"type":"string","description":"Question or analysis prompt for the image"},"imageBase64":{"type":"string","description":"Base64 encoded image to analyze"},"modelId":{"type":"number","description":"Optional. Omit for default model."}},"required":["paymentId","prompt","imageBase64"]}},{"name":"generate_text","description":"Generate text using frontier AI language models. Pure per-character pricing (no minimum): Kimi K2.5 (id=6, 100 chars/sat, 262K context, vision support, default best), GPT-OSS-120B (id=1, 333 chars/sat, strong reasoning), Qwen3-32B (id=26, 1000 chars/sat, 119 languages, best value). Supports document Q&A via fileContext and vision analysis via imageBase64 (best model). Stable endpoints — models upgrade automatically. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_text' and the exact prompt.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"prompt":{"type":"string","description":"The text prompt or question"},"modelId":{"type":"number","description":"Optional. Omit for default (best) model."},"systemPrompt":{"type":"string","description":"Optional system prompt"},"maxTokens":{"type":"number","description":"Max tokens in response","default":16384},"fileContext":{"type":"string","description":"Extracted file text to include as context"},"fileName":{"type":"string","description":"Name of the attached file"},"imageBase64":{"type":"string","description":"Base64 data URI for vision analysis (best model only)"}},"required":["paymentId","prompt"]}},{"name":"generate_music","description":"Generate full songs (up to 6 min) with natural AI vocals, BPM/key control (99%+ accuracy), and 14+ section tags for precise arrangement. Uses Music-2.6 — orchestral and traditional instruments, style-aware mixing. Specify BPM, key, genre, mood in prompt. Returns MP3 URL. 300 sats per song. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_music'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"prompt":{"type":"string","description":"Music style with BPM, key, genre, mood, instruments (up to 2,000 chars). Example: 'E minor, 90 BPM, acoustic guitar ballad, male vocal'"},"modelId":{"type":"number","description":"Optional. Omit for default model."},"lyrics":{"type":"string","description":"Song lyrics with section tags (up to 3,500 chars). Tags: [Intro], [Verse], [Pre Chorus], [Chorus], [Bridge], [Outro], [Solo], [Hook], [Drop], [Build Up], [Inst], [Interlude], [Transition], [Break], [Post Chorus]"},"is_instrumental":{"type":"boolean","description":"Set true for instrumental-only (no vocals). When true, prompt is required, lyrics are ignored."},"lyrics_optimizer":{"type":"boolean","description":"Set true to auto-generate lyrics from prompt when lyrics are empty."},"sample_rate":{"type":"integer","enum":[16000,24000,32000,44100],"description":"Audio sample rate. Default: 44100"},"bitrate":{"type":"integer","enum":[32000,64000,128000,256000],"description":"Audio bitrate. Default: 256000"},"audio_format":{"type":"string","enum":["mp3","wav","pcm"],"description":"Output format. Default: mp3"}},"required":["paymentId","prompt"]}},{"name":"text_to_speech","description":"Text-to-speech with 3 tiers: OmniVoice Global (602+ languages including Yoruba, Bengali, Cebuano, Twi, zero-shot voice cloning, 100 chars/sat — use 'language' parameter with ISO code), Inworld Premium (#1 ranked TTS ELO 1217, emotion control, 40+ languages, 50 chars/sat), Minimax Studio (voice cloning from reference clip, 40+ languages, 10 chars/sat). Adjustable speed (0.5-2.0x). Returns audio URL. Pay with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='text_to_speech'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"text":{"type":"string","description":"Text to convert to speech"},"modelId":{"type":"number","description":"Optional. 3 tiers: OmniVoice Global (602+ langs, 100 chars/sat), Inworld Premium (#1 ranked, 50 chars/sat), Minimax Studio (voice cloning, 10 chars/sat). Omit for default."},"voice":{"type":"string","enum":["English_expressive_narrator","English_radiant_girl","English_magnetic_voiced_man","English_compelling_lady1","English_Aussie_Bloke","English_captivating_female1","English_Upbeat_Woman","English_Trustworth_Man","English_CalmWoman","English_UpsetGirl","English_Gentle-voiced_man","English_Whispering_girl","English_Diligent_Man","English_Graceful_Lady","English_ReservedYoungMan","English_PlayfulGirl","English_ManWithDeepVoice","English_MaturePartner","English_FriendlyPerson","English_MatureBoss","English_Debator","English_LovelyGirl","English_Steadymentor","English_Deep-VoicedGentleman","English_Wiselady","English_CaptivatingStoryteller","English_DecentYoungMan","English_SentimentalLady","English_ImposingManner","English_SadTeen","English_PassionateWarrior","English_WiseScholar","English_Soft-spokenGirl","English_SereneWoman","English_ConfidentWoman","English_PatientMan","English_Comedian","English_BossyLeader","English_Strong-WilledBoy","English_StressedLady","English_AssertiveQueen","English_AnimeCharacter","English_Jovialman","English_WhimsicalGirl","English_Kind-heartedGirl","Chinese (Mandarin)_Reliable_Executive","Chinese (Mandarin)_News_Anchor","Chinese (Mandarin)_Unrestrained_Young_Man","Chinese (Mandarin)_Mature_Woman","Arrogant_Miss","Robot_Armor","Chinese (Mandarin)_Kind-hearted_Antie","Chinese (Mandarin)_HK_Flight_Attendant","Chinese (Mandarin)_Humorous_Elder","Chinese (Mandarin)_Gentleman","Chinese (Mandarin)_Warm_Bestie","Chinese (Mandarin)_Stubborn_Friend","Chinese (Mandarin)_Sweet_Lady","Chinese (Mandarin)_Southern_Young_Man","Chinese (Mandarin)_Wise_Women","Chinese (Mandarin)_Gentle_Youth","Chinese (Mandarin)_Warm_Girl","Chinese (Mandarin)_Male_Announcer","Chinese (Mandarin)_Kind-hearted_Elder","Chinese (Mandarin)_Cute_Spirit","Chinese (Mandarin)_Radio_Host","Chinese (Mandarin)_Lyrical_Voice","Chinese (Mandarin)_Straightforward_Boy","Chinese (Mandarin)_Sincere_Adult","Chinese (Mandarin)_Gentle_Senior","Chinese (Mandarin)_Crisp_Girl","Chinese (Mandarin)_Pure-hearted_Boy","Chinese (Mandarin)_Soft_Girl","Chinese (Mandarin)_IntellectualGirl","Chinese (Mandarin)_Warm_HeartedGirl","Chinese (Mandarin)_Laid_BackGirl","Chinese (Mandarin)_ExplorativeGirl","Chinese (Mandarin)_Warm-HeartedAunt","Chinese (Mandarin)_BashfulGirl","Japanese_IntellectualSenior","Japanese_DecisivePrincess","Japanese_LoyalKnight","Japanese_DominantMan","Japanese_SeriousCommander","Japanese_ColdQueen","Japanese_DependableWoman","Japanese_GentleButler","Japanese_KindLady","Japanese_CalmLady","Japanese_OptimisticYouth","Japanese_GenerousIzakayaOwner","Japanese_SportyStudent","Japanese_InnocentBoy","Japanese_GracefulMaiden","Cantonese_ProfessionalHost (F)","Cantonese_GentleLady","Cantonese_ProfessionalHost (M)","Cantonese_PlayfulMan","Cantonese_CuteGirl","Cantonese_KindWoman","Korean_AirheadedGirl","Korean_AthleticGirl","Korean_AthleticStudent","Korean_BraveAdventurer","Korean_BraveFemaleWarrior","Korean_BraveYouth","Korean_CalmGentleman","Korean_CalmLady","Korean_CaringWoman","Korean_CharmingElderSister","Korean_CharmingSister","Korean_CheerfulBoyfriend","Korean_CheerfulCoolJunior","Korean_CheerfulLittleSister","Korean_ChildhoodFriendGirl","Korean_CockyGuy","Korean_ColdGirl","Korean_ColdYoungMan","Korean_ConfidentBoss","Korean_ConsiderateSenior","Korean_DecisiveQueen","Korean_DominantMan","Korean_ElegantPrincess","Korean_EnchantingSister","Korean_EnthusiasticTeen","Korean_FriendlyBigSister","Korean_GentleBoss","Korean_GentleWoman","Korean_HaughtyLady","Korean_InnocentBoy","Korean_IntellectualMan","Korean_IntellectualSenior","Korean_LonelyWarrior","Korean_MatureLady","Korean_MysteriousGirl","Korean_OptimisticYouth","Korean_PlayboyCharmer","Korean_PossessiveMan","Korean_QuirkyGirl","Korean_ReliableSister","Korean_ReliableYouth","Korean_SassyGirl","Korean_ShyGirl","Korean_SoothingLady","Korean_StrictBoss","Korean_SweetGirl","Korean_ThoughtfulWoman","Korean_WiseElf","Korean_WiseTeacher","Spanish_SereneWoman","Spanish_MaturePartner","Spanish_CaptivatingStoryteller","Spanish_Narrator","Spanish_WiseScholar","Spanish_Kind-heartedGirl","Spanish_DeterminedManager","Spanish_BossyLeader","Spanish_ReservedYoungMan","Spanish_ConfidentWoman","Spanish_ThoughtfulMan","Spanish_Strong-WilledBoy","Spanish_SophisticatedLady","Spanish_RationalMan","Spanish_AnimeCharacter","Spanish_Deep-tonedMan","Spanish_Fussyhostess","Spanish_SincereTeen","Spanish_FrankLady","Spanish_Comedian","Spanish_Debator","Spanish_ToughBoss","Spanish_Wiselady","Spanish_Steadymentor","Spanish_Jovialman","Spanish_SantaClaus","Spanish_Rudolph","Spanish_Intonategirl","Spanish_Arnold","Spanish_Ghost","Spanish_HumorousElder","Spanish_EnergeticBoy","Spanish_WhimsicalGirl","Spanish_StrictBoss","Spanish_ReliableMan","Spanish_SereneElder","Spanish_AngryMan","Spanish_AssertiveQueen","Spanish_CaringGirlfriend","Spanish_PowerfulSoldier","Spanish_PassionateWarrior","Spanish_ChattyGirl","Spanish_RomanticHusband","Spanish_CompellingGirl","Spanish_PowerfulVeteran","Spanish_SensibleManager","Spanish_ThoughtfulLady","Portuguese_SentimentalLady","Portuguese_BossyLeader","Portuguese_Wiselady","Portuguese_Strong-WilledBoy","Portuguese_Deep-VoicedGentleman","Portuguese_UpsetGirl","Portuguese_PassionateWarrior","Portuguese_AnimeCharacter","Portuguese_ConfidentWoman","Portuguese_AngryMan","Portuguese_CaptivatingStoryteller","Portuguese_Godfather","Portuguese_ReservedYoungMan","Portuguese_SmartYoungGirl","Portuguese_Kind-heartedGirl","Portuguese_Pompouslady","Portuguese_Grinch","Portuguese_Debator","Portuguese_SweetGirl","Portuguese_AttractiveGirl","Portuguese_ThoughtfulMan","Portuguese_PlayfulGirl","Portuguese_GorgeousLady","Portuguese_LovelyLady","Portuguese_SereneWoman","Portuguese_SadTeen","Portuguese_MaturePartner","Portuguese_Comedian","Portuguese_NaughtySchoolgirl","Portuguese_Narrator","Portuguese_ToughBoss","Portuguese_Fussyhostess","Portuguese_Dramatist","Portuguese_Steadymentor","Portuguese_Jovialman","Portuguese_CharmingQueen","Portuguese_SantaClaus","Portuguese_Rudolph","Portuguese_Arnold","Portuguese_CharmingSanta","Portuguese_CharmingLady","Portuguese_Ghost","Portuguese_HumorousElder","Portuguese_CalmLeader","Portuguese_GentleTeacher","Portuguese_EnergeticBoy","Portuguese_ReliableMan","Portuguese_SereneElder","Portuguese_GrimReaper","Portuguese_AssertiveQueen","Portuguese_WhimsicalGirl","Portuguese_StressedLady","Portuguese_FriendlyNeighbor","Portuguese_CaringGirlfriend","Portuguese_PowerfulSoldier","Portuguese_FascinatingBoy","Portuguese_RomanticHusband","Portuguese_StrictBoss","Portuguese_InspiringLady","Portuguese_PlayfulSpirit","Portuguese_ElegantGirl","Portuguese_CompellingGirl","Portuguese_PowerfulVeteran","Portuguese_SensibleManager","Portuguese_ThoughtfulLady","Portuguese_TheatricalActor","Portuguese_FragileBoy","Portuguese_ChattyGirl","Portuguese_Conscientiousinstructor","Portuguese_RationalMan","Portuguese_WiseScholar","Portuguese_FrankLady","Portuguese_DeterminedManager","French_Male_Speech_New","French_Female_News Anchor","French_CasualMan","French_MovieLeadFemale","French_FemaleAnchor","French_MaleNarrator","Indonesian_SweetGirl","Indonesian_ReservedYoungMan","Indonesian_CharmingGirl","Indonesian_CalmWoman","Indonesian_ConfidentWoman","Indonesian_CaringMan","Indonesian_BossyLeader","Indonesian_DeterminedBoy","Indonesian_GentleGirl","German_FriendlyMan","German_SweetLady","German_PlayfulMan","Russian_HandsomeChildhoodFriend","Russian_BrightHeroine","Russian_AmbitiousWoman","Russian_ReliableMan","Russian_CrazyQueen","Russian_PessimisticGirl","Russian_AttractiveGuy","Russian_Bad-temperedBoy","Italian_BraveHeroine","Italian_Narrator","Italian_WanderingSorcerer","Italian_DiligentLeader","Dutch_kindhearted_girl","Dutch_bossy_leader","Vietnamese_kindhearted_girl","Arabic_CalmWoman","Arabic_FriendlyGuy","Turkish_CalmWoman","Turkish_Trustworthyman","Ukrainian_CalmWoman","Ukrainian_WiseScholar","Thai_male_1_sample8","Thai_male_2_sample2","Thai_female_1_sample1","Thai_female_2_sample2","Polish_male_1_sample4","Polish_male_2_sample3","Polish_female_1_sample1","Polish_female_2_sample3","Romanian_male_1_sample2","Romanian_male_2_sample1","Romanian_female_1_sample4","Romanian_female_2_sample1","greek_male_1a_v1","Greek_female_1_sample1","Greek_female_2_sample3","czech_male_1_v1","czech_female_5_v7","czech_female_2_v2","finnish_male_3_v1","finnish_male_1_v2","finnish_female_4_v1","hindi_male_1_v2","hindi_female_2_v1","hindi_female_1_v2","Abby","Alain","Alex","Amina","Anjali","Arjun","Ashley","Asuka","Avery","Bianca","Blake","Brandon","Brian","Callum","Carter","Cedric","Celeste","Chloe","Claire","Clive","Conrad","Craig","Damon","Darlene","Deborah","Dennis","Derek","Diego","Dmitry","Dominus","Duncan","Edward","Eleanor","Elena","Elizabeth","Elliot","Erik","Ethan","Étienne","Evan","Evelyn","Felix","Gareth","Gianni","Graham","Grant","Hades","Hamish","Hana","Hank","Heitor","Hélène","Hyunwoo","Jake","James","Jason","Jessica","Jing","Johanna","Jonah","Josef","Julia","Katrien","Kayla","Kelsey","Lauren","Lennart","Levi","Liam","Lore","Loretta","Lucian","Luna","Lupita","Maitê","Malcolm","Manoj","Marcus","Mark","Marlene","Mathieu","Mia","Miguel","Minji","Miranda","Mortimer","Nadia","Naomi","Nate","Nikolai","Nour","Oliver","Olivia","Omar","Oren","Orietta","Pippa","Pixie","Priya","Rafael","Reed","Riley","Riya","Ronald","Rupert","Saanvi","Sarah","Satoshi","Sebastian","Selene","Seojun","Serena","Shaun","Simon","Snik","Sophie","Svetlana","Szymon","Tessa","Theodore","Timothy","Trevor","Tristan","Tyler","Veronica","Victor","Victoria","Vinny","Wendy","Wojciech","Xiaoyin","Xinyi","Yael","Yichen","Yoona"],"description":"Voice ID. 467 total voices. Use list_models to see available TTS models. Or paste a custom cloned voice ID.\n\n## Minimax Studio — voice cloning from reference clip, 10 chars/sat (332 voices)\n### Arabic (2)\nArabic_CalmWoman (Female, Middle Aged, Serene, calm female); Arabic_FriendlyGuy (Male, Middle Aged, Warm, friendly male)\n### Cantonese (6)\nCantonese_ProfessionalHost (F) (Female, Middle Aged, Polished, professional female host); Cantonese_GentleLady (Female, Middle Aged, Gentle, refined female); Cantonese_ProfessionalHost (M) (Male, Middle Aged, Polished, professional male host); Cantonese_PlayfulMan (Male, Middle Aged, Fun, playful male); Cantonese_CuteGirl (Female, Young, Cute, endearing young female); Cantonese_KindWoman (Female, Middle Aged, Kind, warm female)\n### Chinese (34)\nChinese (Mandarin)_Reliable_Executive (Male, Middle Aged, Professional, dependable male); Chinese (Mandarin)_News_Anchor (Male, Middle Aged, Clear, authoritative news voice); Chinese (Mandarin)_Unrestrained_Young_Man (Male, Young, Free-spirited young male); Chinese (Mandarin)_Mature_Woman (Female, Middle Aged, Poised, mature female); Arrogant_Miss (Female, Young, Haughty, proud young female); Robot_Armor (Male, Middle Aged, Robotic, mechanical voice); Chinese (Mandarin)_Kind-hearted_Antie (Female, Old, Warm, caring older female); Chinese (Mandarin)_HK_Flight_Attendant (Female, Young, Professional, polished female); Chinese (Mandarin)_Humorous_Elder (Male, Old, Witty, humorous older male); Chinese (Mandarin)_Gentleman (Male, Middle Aged, Refined, courteous male); Chinese (Mandarin)_Warm_Bestie (Female, Young, Friendly, warm young female); Chinese (Mandarin)_Stubborn_Friend (Male, Young, Persistent, headstrong male); Chinese (Mandarin)_Sweet_Lady (Female, Middle Aged, Gentle, sweet female); Chinese (Mandarin)_Southern_Young_Man (Male, Young, Southern-accented young male); Chinese (Mandarin)_Wise_Women (Female, Middle Aged, Thoughtful, wise female); Chinese (Mandarin)_Gentle_Youth (Male, Young, Soft, gentle young male); Chinese (Mandarin)_Warm_Girl (Female, Young, Warm, inviting young female); Chinese (Mandarin)_Male_Announcer (Male, Middle Aged, Clear, authoritative announcer); Chinese (Mandarin)_Kind-hearted_Elder (Male, Old, Gentle, wise older male); Chinese (Mandarin)_Cute_Spirit (Female, Young, Cute, spirited young female); Chinese (Mandarin)_Radio_Host (Male, Middle Aged, Smooth, professional radio voice); Chinese (Mandarin)_Lyrical_Voice (Female, Middle Aged, Melodic, lyrical female); Chinese (Mandarin)_Straightforward_Boy (Male, Young, Direct, honest young male); Chinese (Mandarin)_Sincere_Adult (Male, Middle Aged, Genuine, sincere male); Chinese (Mandarin)_Gentle_Senior (Male, Old, Gentle, patient older male); Chinese (Mandarin)_Crisp_Girl (Female, Young, Clear, crisp young female); Chinese (Mandarin)_Pure-hearted_Boy (Male, Young, Innocent, pure-hearted young male); Chinese (Mandarin)_Soft_Girl (Female, Young, Soft, delicate young female); Chinese (Mandarin)_IntellectualGirl (Female, Young, Smart, intellectual young female); Chinese (Mandarin)_Warm_HeartedGirl (Female, Young, Warm, caring young female); Chinese (Mandarin)_Laid_BackGirl (Female, Young, Relaxed, laid-back young female); Chinese (Mandarin)_ExplorativeGirl (Female, Young, Curious, adventurous young female); Chinese (Mandarin)_Warm-HeartedAunt (Female, Middle Aged, Caring, nurturing aunt figure); Chinese (Mandarin)_BashfulGirl (Female, Young, Shy, bashful young female)\n### Czech (3)\nczech_male_1_v1 (Male, Middle Aged, Confident, assured presenter); czech_female_5_v7 (Female, Middle Aged, Steady, reliable narrator); czech_female_2_v2 (Female, Middle Aged, Refined, elegant female)\n### Dutch (2)\nDutch_kindhearted_girl (Female, Young, Compassionate, kind young female); Dutch_bossy_leader (Male, Middle Aged, Commanding, bossy male)\n### English (45)\nEnglish_expressive_narrator (Male, Middle Aged, Expressive, dynamic narrator); English_radiant_girl (Female, Young, Bright, cheerful young female); English_magnetic_voiced_man (Male, Middle Aged, Rich, magnetic male voice); English_compelling_lady1 (Female, Middle Aged, Persuasive, engaging female); English_Aussie_Bloke (Male, Middle Aged, Casual Australian male); English_captivating_female1 (Female, Middle Aged, Alluring, captivating female); English_Upbeat_Woman (Female, Middle Aged, Upbeat, energetic female); English_Trustworth_Man (Male, Middle Aged, Reliable, trustworthy male); English_CalmWoman (Female, Middle Aged, Serene, relaxing female); English_UpsetGirl (Female, Young, Emotional, distressed young female); English_Gentle-voiced_man (Male, Middle Aged, Soft, gentle male voice); English_Whispering_girl (Female, Young, Soft, whispery young female); English_Diligent_Man (Male, Middle Aged, Focused, hardworking male); English_Graceful_Lady (Female, Middle Aged, Elegant, poised female); English_ReservedYoungMan (Male, Young, Quiet, reserved young male); English_PlayfulGirl (Female, Young, Fun, playful young female); English_ManWithDeepVoice (Male, Middle Aged, Deep, resonant male bass); English_MaturePartner (Male, Middle Aged, Mature, dependable male); English_FriendlyPerson (Male, Middle Aged, Warm, approachable male); English_MatureBoss (Female, Middle Aged, Commanding, authoritative female); English_Debator (Male, Middle Aged, Articulate, persuasive male); English_LovelyGirl (Female, Young, Sweet, charming young female); English_Steadymentor (Male, Middle Aged, Steady, mentoring male); English_Deep-VoicedGentleman (Male, Middle Aged, Distinguished, deep-voiced male); English_Wiselady (Female, Middle Aged, Thoughtful, wise female); English_CaptivatingStoryteller (Male, Middle Aged, Engaging, narrative male voice); English_DecentYoungMan (Male, Young, Polite, well-spoken young male); English_SentimentalLady (Female, Middle Aged, Emotional, heartfelt female); English_ImposingManner (Female, Middle Aged, Commanding, regal female); English_SadTeen (Male, Young, Youthful, melancholic teen male); English_PassionateWarrior (Male, Middle Aged, Fierce, passionate male); English_WiseScholar (Male, Old, Learned, scholarly male); English_Soft-spokenGirl (Female, Young, Quiet, gentle young female); English_SereneWoman (Female, Middle Aged, Peaceful, calm female); English_ConfidentWoman (Female, Middle Aged, Self-assured, bold female); English_PatientMan (Male, Middle Aged, Steady, reassuring male); English_Comedian (Male, Middle Aged, Humorous, comedic male); English_BossyLeader (Male, Middle Aged, Commanding, bossy male); English_Strong-WilledBoy (Male, Young, Determined, strong-willed young male); English_StressedLady (Female, Middle Aged, Tense, stressed female); English_AssertiveQueen (Female, Middle Aged, Bold, assertive female); English_AnimeCharacter (Female, Young, Animated, expressive narrator); English_Jovialman (Male, Middle Aged, Cheerful, jolly male); English_WhimsicalGirl (Female, Young, Dreamy, whimsical young female); English_Kind-heartedGirl (Female, Young, Compassionate, kind young female)\n### Finnish (3)\nfinnish_male_3_v1 (Male, Middle Aged, Cheerful, upbeat male); finnish_male_1_v2 (Male, Young, Friendly, approachable young male); finnish_female_4_v1 (Female, Middle Aged, Bold, assertive female)\n### French (6)\nFrench_Male_Speech_New (Male, Middle Aged, Composed, level-headed male); French_Female_News Anchor (Female, Middle Aged, Patient, professional presenter); French_CasualMan (Male, Middle Aged, Laid-back, casual male); French_MovieLeadFemale (Female, Middle Aged, Dramatic, cinematic female); French_FemaleAnchor (Female, Middle Aged, Professional, clear anchor); French_MaleNarrator (Male, Middle Aged, Clear, engaging narrator)\n### German (3)\nGerman_FriendlyMan (Male, Middle Aged, Warm, friendly male); German_SweetLady (Female, Middle Aged, Sweet, gentle female); German_PlayfulMan (Male, Middle Aged, Fun, playful male)\n### Greek (3)\ngreek_male_1a_v1 (Male, Middle Aged, Reflective, mentoring male); Greek_female_1_sample1 (Female, Middle Aged, Soft, gentle female); Greek_female_2_sample3 (Female, Young, Friendly, relatable female)\n### Hindi (3)\nhindi_male_1_v2 (Male, Middle Aged, Reliable, trustworthy male); hindi_female_2_v1 (Female, Middle Aged, Peaceful, tranquil female); hindi_female_1_v2 (Female, Middle Aged, Clear, authoritative anchor)\n### Indonesian (9)\nIndonesian_SweetGirl (Female, Young, Sweet, gentle young female); Indonesian_ReservedYoungMan (Male, Young, Quiet, reserved young male); Indonesian_CharmingGirl (Female, Young, Charming, attractive female); Indonesian_CalmWoman (Female, Middle Aged, Serene, calm female); Indonesian_ConfidentWoman (Female, Middle Aged, Self-assured female); Indonesian_CaringMan (Male, Middle Aged, Nurturing, caring male); Indonesian_BossyLeader (Male, Middle Aged, Commanding, bossy male); Indonesian_DeterminedBoy (Male, Young, Focused, determined young male); Indonesian_GentleGirl (Female, Young, Soft, gentle young female)\n### Italian (4)\nItalian_BraveHeroine (Female, Middle Aged, Courageous, brave female); Italian_Narrator (Male, Middle Aged, Clear, professional narrator); Italian_WanderingSorcerer (Male, Old, Mystical, wandering character); Italian_DiligentLeader (Male, Middle Aged, Focused, diligent male)\n### Japanese (15)\nJapanese_IntellectualSenior (Male, Old, Learned, intellectual senior); Japanese_DecisivePrincess (Female, Young, Bold, decisive young female); Japanese_LoyalKnight (Male, Middle Aged, Loyal, noble male); Japanese_DominantMan (Male, Middle Aged, Strong, commanding male); Japanese_SeriousCommander (Male, Middle Aged, Stern, authoritative commander); Japanese_ColdQueen (Female, Middle Aged, Icy, regal female); Japanese_DependableWoman (Female, Middle Aged, Reliable, steady female); Japanese_GentleButler (Male, Middle Aged, Polite, refined butler voice); Japanese_KindLady (Female, Middle Aged, Kind, warm female); Japanese_CalmLady (Female, Middle Aged, Serene, calm female); Japanese_OptimisticYouth (Male, Young, Cheerful, optimistic young male); Japanese_GenerousIzakayaOwner (Male, Middle Aged, Warm, generous male); Japanese_SportyStudent (Male, Young, Energetic, athletic young male); Japanese_InnocentBoy (Male, Young, Innocent, naive young male); Japanese_GracefulMaiden (Female, Young, Elegant, graceful young female)\n### Korean (49)\nKorean_AirheadedGirl (Female, Young, Carefree, bubbly young female); Korean_AthleticGirl (Female, Young, Energetic, sporty young female); Korean_AthleticStudent (Male, Young, Active, sporty young male); Korean_BraveAdventurer (Male, Middle Aged, Bold, adventurous male); Korean_BraveFemaleWarrior (Female, Middle Aged, Fierce, brave female); Korean_BraveYouth (Male, Young, Courageous young male); Korean_CalmGentleman (Male, Middle Aged, Composed, calm male); Korean_CalmLady (Female, Middle Aged, Serene, calm female); Korean_CaringWoman (Female, Middle Aged, Nurturing, caring female); Korean_CharmingElderSister (Female, Middle Aged, Charming, elegant sister); Korean_CharmingSister (Female, Young, Attractive, charming female); Korean_CheerfulBoyfriend (Male, Young, Upbeat, cheerful young male); Korean_CheerfulCoolJunior (Male, Young, Cool, laid-back junior); Korean_CheerfulLittleSister (Female, Young, Happy, energetic young female); Korean_ChildhoodFriendGirl (Female, Young, Familiar, friendly female); Korean_CockyGuy (Male, Young, Confident, cocky young male); Korean_ColdGirl (Female, Young, Aloof, cool young female); Korean_ColdYoungMan (Male, Young, Reserved, cold young male); Korean_ConfidentBoss (Male, Middle Aged, Self-assured, commanding boss); Korean_ConsiderateSenior (Male, Middle Aged, Thoughtful, considerate male); Korean_DecisiveQueen (Female, Middle Aged, Bold, decisive female); Korean_DominantMan (Male, Middle Aged, Powerful, dominant male); Korean_ElegantPrincess (Female, Young, Refined, elegant young female); Korean_EnchantingSister (Female, Young, Enchanting, captivating female); Korean_EnthusiasticTeen (Male, Young, Eager, enthusiastic teen); Korean_FriendlyBigSister (Female, Middle Aged, Friendly, supportive sister); Korean_GentleBoss (Male, Middle Aged, Gentle, kind boss); Korean_GentleWoman (Female, Middle Aged, Soft, gentle female); Korean_HaughtyLady (Female, Middle Aged, Proud, haughty female); Korean_InnocentBoy (Male, Young, Innocent, naive young male); Korean_IntellectualMan (Male, Middle Aged, Smart, intellectual male); Korean_IntellectualSenior (Male, Old, Wise, intellectual senior); Korean_LonelyWarrior (Male, Middle Aged, Solitary, stoic male); Korean_MatureLady (Female, Middle Aged, Poised, mature female); Korean_MysteriousGirl (Female, Young, Enigmatic, mysterious young female); Korean_OptimisticYouth (Male, Young, Cheerful, optimistic young male); Korean_PlayboyCharmer (Male, Young, Suave, charming young male); Korean_PossessiveMan (Male, Middle Aged, Intense, possessive male); Korean_QuirkyGirl (Female, Young, Quirky, unique young female); Korean_ReliableSister (Female, Middle Aged, Dependable, reliable female); Korean_ReliableYouth (Male, Young, Dependable young male); Korean_SassyGirl (Female, Young, Bold, sassy young female); Korean_ShyGirl (Female, Young, Shy, reserved young female); Korean_SoothingLady (Female, Middle Aged, Calming, soothing female); Korean_StrictBoss (Male, Middle Aged, Stern, strict male boss); Korean_SweetGirl (Female, Young, Sweet, gentle young female); Korean_ThoughtfulWoman (Female, Middle Aged, Thoughtful, reflective female); Korean_WiseElf (Female, Young, Whimsical, wise character); Korean_WiseTeacher (Male, Old, Patient, wise teacher)\n### Polish (4)\nPolish_male_1_sample4 (Male, Middle Aged, Clear, professional narrator); Polish_male_2_sample3 (Male, Middle Aged, Authoritative news anchor); Polish_female_1_sample1 (Female, Middle Aged, Serene, calm female); Polish_female_2_sample3 (Female, Middle Aged, Relaxed, casual female)\n### Portuguese (73)\nPortuguese_SentimentalLady (Female, Middle Aged, Emotional, sentimental female); Portuguese_BossyLeader (Male, Middle Aged, Commanding, bossy male); Portuguese_Wiselady (Female, Middle Aged, Wise, thoughtful female); Portuguese_Strong-WilledBoy (Male, Young, Determined young male); Portuguese_Deep-VoicedGentleman (Male, Middle Aged, Distinguished, deep male); Portuguese_UpsetGirl (Female, Young, Emotional, distressed female); Portuguese_PassionateWarrior (Male, Middle Aged, Fierce, passionate male); Portuguese_AnimeCharacter (Female, Young, Animated, expressive character); Portuguese_ConfidentWoman (Female, Middle Aged, Self-assured female); Portuguese_AngryMan (Male, Middle Aged, Intense, angry male); Portuguese_CaptivatingStoryteller (Male, Middle Aged, Engaging narrator); Portuguese_Godfather (Male, Old, Gravelly, authoritative male); Portuguese_ReservedYoungMan (Male, Young, Quiet, reserved young male); Portuguese_SmartYoungGirl (Female, Young, Intelligent, bright young female); Portuguese_Kind-heartedGirl (Female, Young, Compassionate young female); Portuguese_Pompouslady (Female, Middle Aged, Grand, pompous female); Portuguese_Grinch (Male, Middle Aged, Grumpy, grouchy character); Portuguese_Debator (Male, Middle Aged, Articulate, persuasive male); Portuguese_SweetGirl (Female, Young, Sweet, gentle young female); Portuguese_AttractiveGirl (Female, Young, Attractive, alluring female); Portuguese_ThoughtfulMan (Male, Middle Aged, Reflective, thoughtful male); Portuguese_PlayfulGirl (Female, Young, Fun, playful young female); Portuguese_GorgeousLady (Female, Middle Aged, Beautiful, elegant female); Portuguese_LovelyLady (Female, Middle Aged, Lovely, charming female); Portuguese_SereneWoman (Female, Middle Aged, Peaceful, calm female); Portuguese_SadTeen (Male, Young, Melancholic, sad teen); Portuguese_MaturePartner (Male, Middle Aged, Mature, dependable male); Portuguese_Comedian (Male, Middle Aged, Humorous, comedic male); Portuguese_NaughtySchoolgirl (Female, Young, Mischievous young female); Portuguese_Narrator (Male, Middle Aged, Clear, professional narrator); Portuguese_ToughBoss (Male, Middle Aged, Hard-nosed, tough male); Portuguese_Fussyhostess (Female, Middle Aged, Particular, meticulous female); Portuguese_Dramatist (Male, Middle Aged, Dramatic, theatrical male); Portuguese_Steadymentor (Male, Middle Aged, Reliable, mentoring male); Portuguese_Jovialman (Male, Middle Aged, Cheerful, jovial male); Portuguese_CharmingQueen (Female, Middle Aged, Charming, regal female); Portuguese_SantaClaus (Male, Old, Jolly, festive character); Portuguese_Rudolph (Male, Young, Playful, festive character); Portuguese_Arnold (Male, Middle Aged, Strong, tough male character); Portuguese_CharmingSanta (Male, Old, Charming, festive character); Portuguese_CharmingLady (Female, Middle Aged, Charming, elegant female); Portuguese_Ghost (Male, Middle Aged, Eerie, spectral character); Portuguese_HumorousElder (Male, Old, Witty, humorous older male); Portuguese_CalmLeader (Male, Middle Aged, Composed, calm leader); Portuguese_GentleTeacher (Female, Middle Aged, Patient, gentle teacher); Portuguese_EnergeticBoy (Male, Young, Lively, energetic young male); Portuguese_ReliableMan (Male, Middle Aged, Dependable, reliable male); Portuguese_SereneElder (Male, Old, Peaceful, wise elder); Portuguese_GrimReaper (Male, Middle Aged, Dark, ominous character); Portuguese_AssertiveQueen (Female, Middle Aged, Bold, assertive female); Portuguese_WhimsicalGirl (Female, Young, Dreamy, whimsical female); Portuguese_StressedLady (Female, Middle Aged, Tense, stressed female); Portuguese_FriendlyNeighbor (Male, Middle Aged, Friendly, neighborly male); Portuguese_CaringGirlfriend (Female, Young, Loving, caring young female); Portuguese_PowerfulSoldier (Male, Middle Aged, Strong, powerful male); Portuguese_FascinatingBoy (Male, Young, Charming, fascinating young male); Portuguese_RomanticHusband (Male, Middle Aged, Romantic, loving male); Portuguese_StrictBoss (Male, Middle Aged, Stern, strict boss); Portuguese_InspiringLady (Female, Middle Aged, Motivating, inspiring female); Portuguese_PlayfulSpirit (Female, Young, Fun, playful young female); Portuguese_ElegantGirl (Female, Young, Refined, elegant young female); Portuguese_CompellingGirl (Female, Young, Engaging, compelling female); Portuguese_PowerfulVeteran (Male, Old, Experienced, powerful veteran); Portuguese_SensibleManager (Male, Middle Aged, Practical, sensible male); Portuguese_ThoughtfulLady (Female, Middle Aged, Reflective, thoughtful female); Portuguese_TheatricalActor (Male, Middle Aged, Dramatic, theatrical male); Portuguese_FragileBoy (Male, Young, Delicate, fragile young male); Portuguese_ChattyGirl (Female, Young, Talkative, bubbly female); Portuguese_Conscientiousinstructor (Male, Middle Aged, Careful, thorough instructor); Portuguese_RationalMan (Male, Middle Aged, Logical, rational male); Portuguese_WiseScholar (Male, Old, Learned, scholarly male); Portuguese_FrankLady (Female, Middle Aged, Direct, frank female); Portuguese_DeterminedManager (Male, Middle Aged, Focused, decisive manager)\n### Romanian (4)\nRomanian_male_1_sample2 (Male, Middle Aged, Dependable, reliable male); Romanian_male_2_sample1 (Male, Young, Lively, energetic young male); Romanian_female_1_sample4 (Female, Young, Cheerful, optimistic female); Romanian_female_2_sample1 (Female, Middle Aged, Soft, gentle female)\n### Russian (8)\nRussian_HandsomeChildhoodFriend (Male, Young, Charming, familiar young male); Russian_BrightHeroine (Female, Middle Aged, Bright, regal female); Russian_AmbitiousWoman (Female, Middle Aged, Driven, ambitious female); Russian_ReliableMan (Male, Middle Aged, Dependable, reliable male); Russian_CrazyQueen (Female, Young, Wild, unpredictable female); Russian_PessimisticGirl (Female, Young, Gloomy, pessimistic female); Russian_AttractiveGuy (Male, Young, Charming, attractive young male); Russian_Bad-temperedBoy (Male, Young, Irritable, short-tempered male)\n### Spanish (47)\nSpanish_SereneWoman (Female, Middle Aged, Peaceful, calm female); Spanish_MaturePartner (Male, Middle Aged, Mature, dependable male); Spanish_CaptivatingStoryteller (Male, Middle Aged, Engaging narrator); Spanish_Narrator (Male, Middle Aged, Clear, professional narrator); Spanish_WiseScholar (Male, Old, Learned, scholarly male); Spanish_Kind-heartedGirl (Female, Young, Compassionate young female); Spanish_DeterminedManager (Male, Middle Aged, Focused, decisive manager); Spanish_BossyLeader (Male, Middle Aged, Commanding, bossy male); Spanish_ReservedYoungMan (Male, Young, Quiet, reserved young male); Spanish_ConfidentWoman (Female, Middle Aged, Self-assured female); Spanish_ThoughtfulMan (Male, Middle Aged, Reflective, thoughtful male); Spanish_Strong-WilledBoy (Male, Young, Determined young male); Spanish_SophisticatedLady (Female, Middle Aged, Elegant, sophisticated female); Spanish_RationalMan (Male, Middle Aged, Logical, rational male); Spanish_AnimeCharacter (Female, Young, Animated, expressive character); Spanish_Deep-tonedMan (Male, Middle Aged, Deep, resonant male); Spanish_Fussyhostess (Female, Middle Aged, Particular, meticulous female); Spanish_SincereTeen (Male, Young, Honest, sincere teen); Spanish_FrankLady (Female, Middle Aged, Direct, frank female); Spanish_Comedian (Male, Middle Aged, Humorous, comedic male); Spanish_Debator (Male, Middle Aged, Articulate, persuasive male); Spanish_ToughBoss (Male, Middle Aged, Hard-nosed, tough male); Spanish_Wiselady (Female, Middle Aged, Wise, thoughtful female); Spanish_Steadymentor (Male, Middle Aged, Reliable, mentoring male); Spanish_Jovialman (Male, Middle Aged, Cheerful, jovial male); Spanish_SantaClaus (Male, Old, Jolly, festive character); Spanish_Rudolph (Male, Young, Playful, festive character); Spanish_Intonategirl (Female, Young, Expressive, melodic young female); Spanish_Arnold (Male, Middle Aged, Strong, tough male character); Spanish_Ghost (Male, Middle Aged, Eerie, spectral character); Spanish_HumorousElder (Male, Old, Witty, humorous older male); Spanish_EnergeticBoy (Male, Young, Lively, energetic young male); Spanish_WhimsicalGirl (Female, Young, Dreamy, whimsical female); Spanish_StrictBoss (Male, Middle Aged, Stern, strict boss); Spanish_ReliableMan (Male, Middle Aged, Dependable, reliable male); Spanish_SereneElder (Male, Old, Peaceful, wise elder); Spanish_AngryMan (Male, Middle Aged, Intense, angry male); Spanish_AssertiveQueen (Female, Middle Aged, Bold, assertive female); Spanish_CaringGirlfriend (Female, Young, Loving, caring young female); Spanish_PowerfulSoldier (Male, Middle Aged, Strong, powerful male); Spanish_PassionateWarrior (Male, Middle Aged, Fierce, passionate male); Spanish_ChattyGirl (Female, Young, Talkative, bubbly young female); Spanish_RomanticHusband (Male, Middle Aged, Romantic, loving male); Spanish_CompellingGirl (Female, Young, Engaging, compelling female); Spanish_PowerfulVeteran (Male, Old, Experienced, powerful veteran); Spanish_SensibleManager (Male, Middle Aged, Practical, sensible male); Spanish_ThoughtfulLady (Female, Middle Aged, Reflective, thoughtful female)\n### Thai (4)\nThai_male_1_sample8 (Male, Middle Aged, Peaceful, calm male); Thai_male_2_sample2 (Male, Middle Aged, Warm, friendly male); Thai_female_1_sample1 (Female, Middle Aged, Self-assured female); Thai_female_2_sample2 (Female, Young, Lively, energetic female)\n### Turkish (2)\nTurkish_CalmWoman (Female, Middle Aged, Serene, calm female); Turkish_Trustworthyman (Male, Middle Aged, Reliable, trustworthy male)\n### Ukrainian (2)\nUkrainian_CalmWoman (Female, Middle Aged, Serene, calm female); Ukrainian_WiseScholar (Male, Old, Learned, scholarly male)\n### Vietnamese (1)\nVietnamese_kindhearted_girl (Female, Young, Compassionate, kind young female)\n\n## Inworld Max Premium — #1 ranked TTS, 50 chars/sat (135 voices)\n### Arabic (2)\nNour (Female, Middle Aged, Polished female Arabic voice with a friendly tone, great for voiceover or support); Omar (Male, Middle Aged, Bright, confident Arabic male voice, great for announcements and broadcasts)\n### Chinese (4)\nJing (Female, Young, An energetic, fast-paced young Chinese female); Xiaoyin (Female, Young, A youthful Chinese female voice with a gentle, sweet quality); Xinyi (Female, Young, A Chinese woman with a neutral tone, perfect for narrations); Yichen (Male, Middle Aged, A calm, flat young adult male Chinese voice)\n### Dutch (4)\nErik (Male, Middle Aged, Older Dutch male voice with a weathered edge); Katrien (Female, Middle Aged, Dutch woman with an expressive voice); Lennart (Male, Middle Aged, A confident Dutch male voice. Calm and relaxed); Lore (Female, Middle Aged, Clear, calm Dutch female voice, great for narrations and professional use)\n### English (95)\nAbby (Female, Young, Bright, eager American female child voice, ideal for animated characters and educational content); Alex (Male, Middle Aged, Energetic and expressive mid-range male voice, with a mildly nasal quality); Amina (Female, Middle Aged, Warm, inviting West African female voice, ideal for community outreach and storytelling); Anjali (Female, Middle Aged, Confident, articulate Indian female voice, ideal for professional training materials); Arjun (Male, Middle Aged, Clear, composed Indian male voice, well-suited for instructional webinars); Ashley (Female, Middle Aged, A warm, natural female voice); Avery (Male, Young, Youthful, performative male voice, suited for gameshow-style hosting); Bianca (Female, Middle Aged, Deep, controlled female voice, ideal for serious corporate reads); Blake (Male, Middle Aged, Rich, intimate male voice, perfect for audiobooks and romantic content); Brandon (Male, Middle Aged, Bold, strident male voice, ideal for structured announcements and news-style reads); Brian (Male, Middle Aged, Friendly, encouraging American male voice, ideal for educational tutorials); Callum (Male, Middle Aged, Casual and friendly Australian male voice, ideal for informal instructional content); Carter (Male, Middle Aged, Energetic, mature radio announcer-style male voice, great for storytelling); Cedric (Male, Middle Aged, Crisp, measured male voice, ideal for formal announcements and premium narration); Celeste (Female, Middle Aged, Soft, whispery female voice, ideal for ASMR and gentle mindfulness sessions); Chloe (Female, Young, Thoughtful, introspective youthful female voice, perfect for coming-of-age narratives); Claire (Female, Middle Aged, Warm, gentle Eastern European female voice, ideal for bedtime stories); Clive (Male, Middle Aged, British-accented English male with a calm, cordial quality); Conrad (Male, Middle Aged, Gruff, weathered male voice, perfect for detective archetypes and audiobook roles); Craig (Male, Old, Older British male with a refined and articulate voice); Damon (Male, Middle Aged, Calm, raspy male voice, suited for moody narration and atmospheric roleplay); Darlene (Female, Middle Aged, Soothing, comforting Southern female voice, ideal for bedtime stories); Deborah (Female, Young, Warm, peaceful female voice with a calm tone); Dennis (Male, Middle Aged, Middle-aged man with a smooth, calm and friendly voice); Derek (Male, Middle Aged, Steady, professional, composed American male voice, ideal for banking support); Dominus (Male, Middle Aged, Robotic, deep male voice with a menacing quality. Perfect for villains); Duncan (Male, Middle Aged, Warm, articulate British male voice for customer support and education); Edward (Male, Middle Aged, American male with an emphatic, confident and streetwise tone); Eleanor (Female, Middle Aged, Polished, approachable British female voice for support and learning); Elizabeth (Female, Middle Aged, Professional middle-aged woman, perfect for narrations and voiceovers); Elliot (Male, Middle Aged, Calm, steady male voice, suitable for nature documentaries and informational content); Ethan (Male, Young, Assured, precise male voice, perfect for tech tutorials and gadget overviews); Evan (Male, Middle Aged, Friendly, approachable, easygoing male voice, ideal for onboarding and retail assistance); Evelyn (Female, Middle Aged, Gentle, intimate female voice, ideal for ASMR and calming conversations); Felix (Male, Middle Aged, Calm, friendly British male voice, ideal for help and tutorials); Gareth (Male, Middle Aged, Soothing, gentle male voice, ideal for guided meditations and relaxation); Graham (Male, Middle Aged, Profound, authoritative British male voice, perfect for historical documentaries); Grant (Male, Middle Aged, Calm, attentive, helpful male voice, ideal for troubleshooting and support); Hades (Male, Middle Aged, Commanding and gruff male voice, think an omniscient narrator or castle guard); Hamish (Male, Middle Aged, Friendly and casual Australian male voice, ideal for character-driven roles); Hana (Female, Young, Bright, expressive young female voice, perfect for storytelling and gaming); Hank (Male, Middle Aged, Warm, laid-back Southern male voice, ideal for travel documentaries); Jake (Male, Young, Amiable, introspective male voice, ideal for motivational talks); James (Male, Middle Aged, Vibrant, expressive male voice, perfect for animated video content and event hosting); Jason (Male, Middle Aged, Lucid, engrossing male voice, ideal for tech tips and creative content); Jessica (Female, Middle Aged, Encouraging, articulate American female voice, perfect for self-help audiobooks); Jonah (Male, Middle Aged, Soothing, calm male voice, great for tutorial guidance and gentle instructions); Julia (Female, Middle Aged, Quirky, high-pitched female voice that delivers lines with playful energy); Kayla (Female, Young, Enthusiastic, youthful female voice, ideal for reaction videos and product reviews); Kelsey (Female, Middle Aged, Warm, empathetic, reassuring female voice, ideal for phone support); Lauren (Female, Middle Aged, Confident, friendly American female voice, ideal for corporate presentations); Levi (Male, Middle Aged, Measured, ominous male voice, ideal for suspense narration and dark fantasy); Liam (Male, Middle Aged, Upbeat, motivating Australian male voice, perfect for energizing workout sessions); Loretta (Female, Middle Aged, Inviting, folksy Southern female voice, perfect for cooking shows and family tales); Lucian (Male, Middle Aged, Brooding, foreboding male voice, suited for villainous character arcs); Luna (Female, Middle Aged, Calm, relaxing female voice, perfect for meditations, sleep stories, and mindfulness); Malcolm (Male, Middle Aged, Authoritative, manipulative male voice, perfect for cunning leaders); Marcus (Male, Middle Aged, Authoritative, empathetic male voice, great for civic campaigns and outreach); Mark (Male, Middle Aged, Energetic, expressive man with a rapid-fire delivery); Marlene (Female, Middle Aged, Friendly, relaxed Southern female voice, ideal for cooking tutorials); Mia (Female, Young, Youthful, expressive female voice, ideal for adolescent characters); Miranda (Female, Middle Aged, Menacing, cold-hearted female voice, perfect for strategic villains); Mortimer (Male, Middle Aged, Gravelly, aggressive male character voice, ideal for fantasy villains); Nadia (Female, Middle Aged, Personable, lively female voice, perfect for tutorial walkthroughs); Naomi (Female, Middle Aged, Warm, grounded female voice, perfect for narrative podcasting); Nate (Male, Young, Conversational, sociable male voice, great for customer support); Oliver (Male, Middle Aged, Neutral and clear male voice, ideal for public announcements and education); Olivia (Female, Middle Aged, Young, British female with a friendly and helpful tone); Pippa (Female, Middle Aged, Friendly and casual Australian female voice, ideal for relaxed instructional content); Pixie (Female, Middle Aged, High-pitched, childlike female voice with a squeaky quality — great for cartoons); Priya (Female, Young, Even-toned female voice with an Indian accent); Reed (Male, Middle Aged, Clear, professional American male voice, well-suited for support and training); Riley (Female, Young, Playful, youthful female voice, perfect for animated storytelling); Ronald (Male, Old, Confident, British man with a deep, gravelly voice); Rupert (Male, Middle Aged, Resonant, commanding British male voice, ideal for motivational speeches); Saanvi (Female, Middle Aged, Crisp, articulate Indian female voice, ideal for e-learning modules); Sarah (Female, Middle Aged, Fast-talking young adult woman, with a questioning and curious tone); Sebastian (Male, Middle Aged, Intimidating, steely male voice, perfect for ruthless antagonists); Selene (Female, Young, Soft, flirtatious female voice, ideal for companion-style interactions); Serena (Female, Middle Aged, Soft, nurturing female voice, perfect for mindfulness sessions); Shaun (Male, Middle Aged, Friendly, dynamic male voice great for conversations); Simon (Male, Middle Aged, Articulate, insightful male voice, perfect for corporate presentations); Snik (Male, Middle Aged, Hoarse, cunning male voice, perfect for devious goblin roles and tricksters); Sophie (Female, Middle Aged, Friendly British female voice, great for assistance and knowledge sharing); Tessa (Female, Middle Aged, Upbeat, conversational Australian female voice, perfect for lifestyle vlogs); Theodore (Male, Old, Gravelly male voice, with a time-worn quality); Timothy (Male, Young, Lively, upbeat American male voice); Trevor (Male, Middle Aged, Punchy, expressive male voice, perfect for energetic promos); Tristan (Male, Middle Aged, Deliberate, controlled male voice, ideal for documentary narration); Tyler (Male, Middle Aged, Authoritative, insightful male voice, ideal for tech explainer videos); Veronica (Female, Middle Aged, Intimidating, commanding female voice, perfect for ruthless antagonists); Victor (Male, Middle Aged, Ominous, sinister male voice, ideal for dark conspiracies and suspense); Victoria (Female, Middle Aged, Silky, cunning British female voice, ideal for narrating intricate plots); Vinny (Male, Middle Aged, Gritty, assertive New York male voice, perfect for crime dramas); Wendy (Female, Old, Posh, middle-aged British female voice)\n### French (4)\nAlain (Male, Middle Aged, Deep, smooth middle-aged male French voice. Composed and calm); Étienne (Male, Middle Aged, Calm young adult French male); Hélène (Female, Middle Aged, Middle-aged French woman, with a smooth, musical, and graceful voice); Mathieu (Male, Middle Aged, A French male voice carrying a nasal quality)\n### German (2)\nJohanna (Female, Middle Aged, A calm older German female with a low, smoky voice); Josef (Male, Middle Aged, An articulate German male voice with an announcer-like quality)\n### Hebrew (2)\nOren (Male, Middle Aged, Steady male Hebrew voice, great for podcasts and voiceovers); Yael (Female, Middle Aged, Mid-range female Hebrew voice, suitable for narrations and storytelling)\n### Hindi (2)\nManoj (Male, Middle Aged, Clear, professional Hindi male voice. Great for narrations and customer service); Riya (Female, Middle Aged, Professional, clear female voice with an articulate and polished delivery)\n### Italian (2)\nGianni (Male, Middle Aged, Deep, smooth Italian male voice that speaks rapidly); Orietta (Female, Middle Aged, Calm adult female Italian voice, with a soothing cadence)\n### Japanese (2)\nAsuka (Female, Middle Aged, Friendly, young adult Japanese female voice); Satoshi (Male, Middle Aged, Dramatic, expressive male Japanese voice filled with energy)\n### Korean (4)\nHyunwoo (Male, Middle Aged, Young adult Korean male voice); Minji (Male, Young, Energetic, friendly young Korean female voice); Seojun (Male, Young, Clear, deep mature Korean male voice); Yoona (Female, Middle Aged, Korean woman with a gentle, soothing voice)\n### Polish (2)\nSzymon (Male, Middle Aged, Polish adult male voice with a warm, friendly quality); Wojciech (Male, Middle Aged, A middle-aged Polish male voice)\n### Portuguese (2)\nHeitor (Male, Middle Aged, Composed Portuguese-speaking male voice with a neutral tone); Maitê (Female, Middle Aged, Middle-aged Portuguese-speaking female voice)\n### Russian (4)\nDmitry (Male, Middle Aged, Deep, gravelly male voice with a commanding and narrative tone); Elena (Female, Middle Aged, Clear, mid-range female voice with a smooth texture and neutral tone); Nikolai (Male, Middle Aged, Deep, resonant male voice with a clear, theatrical, and narrative quality); Svetlana (Female, Middle Aged, Soft, high-pitched female voice with a moderate pace and breathy quality)\n### Spanish (4)\nDiego (Male, Young, Spanish-speaking male voice with a soothing, gentle quality); Lupita (Female, Young, Vibrant, energetic young Spanish-speaking female voice); Miguel (Male, Middle Aged, A calm adult Spanish-speaking male voice, perfect for storytelling); Rafael (Male, Middle Aged, Middle-aged Spanish-speaking male with a deep, composed voice. Great for narrations)"},"speed":{"type":"number","description":"Speech speed multiplier (0.5-2.0)","default":1},"language":{"type":"string","enum":["kbt","ab","abr","abn","fub","ady","aal","af","yay","ajg","keu","ala","sq","arq","aao","qva","abs","adx","am","anw","anp","xmv","an","aae","qxu","hy","ahs","prq","eiv","as","ast","tay","awo","quy","az","bba","bcy","bde","ksf","bfd","fui","bqg","abv","bkh","bjt","bft","bce","bax","bsj","bjn","abb","bci","bhr","bjk","bas","bzw","ba","eu","btm","bnm","btv","bbl","bda","beb","be","bn","bew","bhb","bho","bxf","bhp","brx","bux","bky","bmq","bou","fue","bs","brh","bra","br","bdm","bug","bhh","bg","bum","bns","bnn","bwr","bys","my","bsk","miu","qvl","cky","wes","sro","yue","ca","ceb","cen","ckb","nhn","pbs","pst","ncx","tar","esu","fuq","shu","ny","zpv","cgg","zoh","qug","zh","qxa","the","cjk","cv","ckl","kjc","zoc","kw","qwa","hr","mfn","xtu","cs","dbd","dag","dml","da","dar","dzg","dcc","deg","kna","dgh","mki","dv","adf","cfa","dgo","dmk","dty","dua","nl","ldb","dyu","bgp","gui","avl","kqo","mhr","ydd","ebr","ego","arz","etu","elm","afo","ebu","en","myv","ish","eo","et","eto","ewo","ext","fan","fat","gur","fmp","fil","tlp","fi","fip","fr","ff","gl","wof","lg","gbm","gwt","gwc","gbr","gby","gyz","gej","ka","de","ges","aln","bbj","gid","glw","gom","gig","ank","gol","el","gn","gdf","amu","gu","gju","afb","ggg","guz","gsl","gwe","ztu","hoj","hah","ht","cnh","hao","hla","ha","haw","haz","he","hem","hz","kjk","acw","hi","var","mau","nhq","hbb","mxs","hul","hu","hkk","hwo","ibb","is","ida","idu","ig","ahl","kpo","ikw","qvi","id","mvy","ia","ik","ga","os","its","iso","it","itw","itz","vmj","ijc","jax","ja","jqr","qxw","jns","jv","juo","kaj","aju","vmc","kbd","lkb","kea","kab","gjk","ckr","ijn","kls","kln","xka","kam","kcq","bjj","kbl","kn","kai","ks","tkt","bsh","kk","eyo","khg","ogo","xhe","km","khw","zga","kfk","rw","ky","fkk","thq","plk","bcs","trp","kol","bkm","kmy","knn","koo","ko","kfp","kfe","eko","ksd","kj","uki","bbu","kto","kuh","kwm","nmg","lla","hia","lo","alo","lss","ltg","lv","apc","ste","xpe","lir","ayl","lij","mgi","ln","lt","lrk","rag","src","qvj","loa","lnu","ztp","lua","luo","lus","lb","ffm","mde","rup","mk","mxu","maf","mai","ms","ml","gcc","tcf","mt","tbf","mfv","mqy","mni","msw","gv","mi","mr","mrt","mfm","mrr","mve","mcn","msh","mcf","zpy","vmz","mzl","mfo","mbo","mdd","byv","mek","mer","acm","mtr","nan","xmf","vmm","mkf","bri","mdf","ver","mn","ary","meu","mcx","mgg","mua","mhk","mse","mug","mui","mne","ars","nal","nmz","ng","nap","npi","nbh","anc","nnh","ngi","jgo","nla","fuv","pcm","noe","fia","ayp","max","bmm","hno","kmr","pmq","pbu","uzn","gya","no","nb","nn","ncf","yes","nyu","nja","hux","oc","odk","ory","odu","acx","nlv","orc","oru","orm","aom","phr","pwn","pa","pmy","kvx","nso","pip","fa","pex","phl","pms","piy","plt","pl","poc","pt","fuc","fuf","qxp","ps","pko","byx","chq","thr","lag","kyx","rth","zor","ro","rm","rof","roo","dru","ru","quv","aec","skg","szy","sau","ccg","ndi","pow","hue","poe","trq","mig","ssi","sa","qxt","ztn","sat","qus","sps","skr","sc","say","trv","sr","sei","scl","sn","sjr","nco","scn","qws","sip","snc","sd","sbn","si","xti","qum","siw","sk","sl","sol","so","snk","giz","cpy","mxy","bzc","pbt","qup","vmp","es","arb","zgh","apd","sua","sva","sw","sv","rob","thv","dav","tg","ta","tdx","tan","txy","yer","tt","tuq","te","kdh","tio","cux","cte","ttr","buo","twu","tkg","nhg","cut","th","bo","mtx","tvo","tgc","tig","ti","zts","tpz","tpl","ctl","tli","tok","tqp","tdn","txs","ttj","ttu","trw","xmw","lto","tn","tuy","bag","tul","tcy","tvu","lcm","aeb","tui","tuv","tr","tk","mtu","tw","byc","ug","uk","umb","hsb","ur","ush","uz","vai","vi","vot","vro","wci","kxp","wja","wbl","lwg","juk","wji","cy","weo","fy","pua","jmx","mlq","mrj","fuh","pnb","wo","udl","ztg","xh","ekr","sah","jal","qur","yav","yaq","qux","ets","yi","ydg","yo","mab","nhi","dje","zza","zu"],"description":"OmniVoice only: ISO 639 language code. 646 languages. Default: 'en'. Full catalog: kbt=Abadi, ab=Abkhazian, abr=Abron, abn=Abua, fub=Adamawa Fulfulde, ady=Adyghe, aal=Afade, af=Afrikaans, yay=Agwagwune, ajg=Aja (Benin), keu=Akebu, ala=Alago, sq=Albanian, arq=Algerian Arabic, aao=Algerian Saharan Arabic, qva=Ambo-Pasco Quechua, abs=Ambonese Malay, adx=Amdo Tibetan, am=Amharic, anw=Anaang, anp=Angika, xmv=Antankarana Malagasy, an=Aragonese, aae=Arbëreshë Albanian, qxu=Arequipa-La Unión Quechua, hy=Armenian, ahs=Ashe, prq=Ashéninka Perené, eiv=Askopan, as=Assamese, ast=Asturian, tay=Atayal, awo=Awak, quy=Ayacucho Quechua, az=Azerbaijani, bba=Baatonum, bcy=Bacama, bde=Bade, ksf=Bafia, bfd=Bafut, fui=Bagirmi Fulfulde, bqg=Bago-Kusuntu, abv=Baharna Arabic, bkh=Bakoko, bjt=Balanta-Ganja, bft=Balti, bce=Bamenyam, bax=Bamun, bsj=Bangwinji, bjn=Banjar, abb=Bankon, bci=Baoulé, bhr=Bara Malagasy, bjk=Barok, bas=Basa (Cameroon), bzw=Basa (Nigeria), ba=Bashkir, eu=Basque, btm=Batak Mandailing, bnm=Batanga, btv=Bateri, bbl=Bats, bda=Bayot, beb=Bebele, be=Belarusian, bn=Bengali, bew=Betawi, bhb=Bhili, bho=Bhojpuri, bxf=Bilur, bhp=Bima, brx=Bodo, bux=Boghom, bky=Bokyi, bmq=Bomu, bou=Bondei, fue=Borgu Fulfulde, bs=Bosnian, brh=Brahui, bra=Braj, br=Breton, bdm=Buduma, bug=Buginese, bhh=Bukharic, bg=Bulgarian, bum=Bulu (Cameroon), bns=Bundeli, bnn=Bunun, bwr=Bura-Pabir, bys=Burak, my=Burmese, bsk=Burushaski, miu=Cacaloxtepec Mixtec, qvl=Cajatambo North Lima Quechua, cky=Cakfem-Mushere, wes=Cameroon Pidgin, sro=Campidanese Sardinian, yue=Cantonese, ca=Catalan, ceb=Cebuano, cen=Cen, ckb=Central Kurdish, nhn=Central Nahuatl, pbs=Central Pame, pst=Central Pashto, ncx=Central Puebla Nahuatl, tar=Central Tarahumara, esu=Central Yupik, fuq=Central-Eastern Niger Fulfulde, shu=Chadian Arabic, ny=Chichewa, zpv=Chichicapan Zapotec, cgg=Chiga, zoh=Chimalapa Zoque, qug=Chimborazo Highland Quichua, zh=Chinese, qxa=Chiquián Ancash Quechua, the=Chitwania Tharu, cjk=Chokwe, cv=Chuvash, ckl=Cibak, kjc=Coastal Konjo, zoc=Copainalá Zoque, kw=Cornish, qwa=Corongo Ancash Quechua, hr=Croatian, mfn=Cross River Mbembe, xtu=Cuyamecalco Mixtec, cs=Czech, dbd=Dadiya, dag=Dagbani, dml=Dameli, da=Danish, dar=Dargwa, dzg=Dazaga, dcc=Deccan, deg=Degema, kna=Dera (Nigeria), dgh=Dghwede, mki=Dhatki, dv=Dhivehi, adf=Dhofari Arabic, cfa=Dijim-Bwilim, dgo=Dogri, dmk=Domaaki, dty=Dotyali, dua=Duala, nl=Dutch, ldb=Dũya, dyu=Dyula, bgp=Eastern Balochi, gui=Eastern Bolivian Guaraní, avl=Eastern Egyptian Bedawi Arabic, kqo=Eastern Krahn, mhr=Eastern Mari, ydd=Eastern Yiddish, ebr=Ebrié, ego=Eggon, arz=Egyptian Arabic, etu=Ejagham, elm=Eleme, afo=Eloyi, ebu=Embu, en=English, myv=Erzya, ish=Esan, eo=Esperanto, et=Estonian, eto=Eton (Cameroon), ewo=Ewondo, ext=Extremaduran, fan=Fang (Equatorial Guinea), fat=Fanti, gur=Farefare, fmp=Fe'fe', fil=Filipino, tlp=Filomena Mata-Coahuitlán Totonac, fi=Finnish, fip=Fipa, fr=French, ff=Fulah, gl=Galician, wof=Gambian Wolof, lg=Ganda, gbm=Garhwali, gwt=Gawar-Bati, gwc=Gawri, gbr=Gbagyi, gby=Gbari, gyz=Geji, gej=Gen, ka=Georgian, de=German, ges=Geser-Gorom, aln=Gheg Albanian, bbj=Ghomálá', gid=Gidar, glw=Glavda, gom=Goan Konkani, gig=Goaria, ank=Goemai, gol=Gola, el=Greek, gn=Guarani, gdf=Guduf-Gava, amu=Guerrero Amuzgo, gu=Gujarati, gju=Gujari, afb=Gulf Arabic, ggg=Gurgula, guz=Gusii, gsl=Gusilay, gwe=Gweno, ztu=Güilá Zapotec, hoj=Hadothi, hah=Hahon, ht=Haitian, cnh=Hakha Chin, hao=Hakö, hla=Halia, ha=Hausa, haw=Hawaiian, haz=Hazaragi, he=Hebrew, hem=Hemba, hz=Herero, kjk=Highland Konjo, acw=Hijazi Arabic, hi=Hindi, var=Huarijio, mau=Huautla Mazatec, nhq=Huaxcaleca Nahuatl, hbb=Huba, mxs=Huitepec Mixtec, hul=Hula, hu=Hungarian, hkk=Hunjara-Kaina Ke, hwo=Hwana, ibb=Ibibio, is=Icelandic, ida=Idakho-Isukha-Tiriki, idu=Idoma, ig=Igbo, ahl=Igo, kpo=Ikposo, ikw=Ikwere, qvi=Imbabura Highland Quichua, id=Indonesian, mvy=Indus Kohistani, ia=Interlingua, ik=Inupiaq, ga=Irish, os=Iron Ossetic, its=Isekiri, iso=Isoko, it=Italian, itw=Ito, itz=Itzá, vmj=Ixtayutla Mixtec, ijc=Izon, jax=Jambi Malay, ja=Japanese, jqr=Jaqaru, qxw=Jauja Wanca Quechua, jns=Jaunsari, jv=Javanese, juo=Jiba, kaj=Jju, aju=Judeo-Moroccan Arabic, vmc=Juxtlahuaca Mixtec, kbd=Kabardian, lkb=Kabras, kea=Kabuverdianu, kab=Kabyle, gjk=Kachi Koli, ckr=Kairak, ijn=Kalabari, kls=Kalasha, kln=Kalenjin, xka=Kalkoti, kam=Kamba, kcq=Kamo, bjj=Kanauji, kbl=Kanembu, kn=Kannada, kai=Karekare, ks=Kashmiri, tkt=Kathoriya Tharu, bsh=Kati, kk=Kazakh, eyo=Keiyo, khg=Khams Tibetan, ogo=Khana, xhe=Khetrani, km=Khmer, khw=Khowar, zga=Kinga, kfk=Kinnauri, rw=Kinyarwanda, ky=Kirghiz, fkk=Kirya-Konzəl, thq=Kochila Tharu, plk=Kohistani Shina, bcs=Kohumono, trp=Kok Borok, kol=Kol (Papua New Guinea), bkm=Kom (Cameroon), kmy=Koma, knn=Konkani, koo=Konzo, ko=Korean, kfp=Korwa, kfe=Kota (India), eko=Koti, ksd=Kuanua, kj=Kuanyama, uki=Kui (India), bbu=Kulung (Nigeria), kto=Kuot, kuh=Kushi, kwm=Kwambi, nmg=Kwasio, lla=Lala-Roba, hia=Lamang, lo=Lao, alo=Larike-Wakasihu, lss=Lasi, ltg=Latgalian, lv=Latvian, apc=Levantine Arabic, ste=Liana-Seti, xpe=Liberia Kpelle, lir=Liberian English, ayl=Libyan Arabic, lij=Ligurian, mgi=Lijili, ln=Lingala, lt=Lithuanian, lrk=Loarki, rag=Logooli, src=Logudorese Sardinian, qvj=Loja Highland Quichua, loa=Loloda, lnu=Longuda, ztp=Loxicha Zapotec, lua=Luba-Lulua, luo=Luo, lus=Lushai, lb=Luxembourgish, ffm=Maasina Fulfulde, mde=Maba (Chad), rup=Macedo-Romanian, mk=Macedonian, mxu=Mada (Cameroon), maf=Mafa, mai=Maithili, ms=Malay, ml=Malayalam, gcc=Mali, tcf=Malinaltepec Me'phaa, mt=Maltese, tbf=Mandara, mfv=Mandjak, mqy=Manggarai, mni=Manipuri, msw=Mansoanka, gv=Manx, mi=Maori, mr=Marathi, mrt=Marghi Central, mfm=Marghi South, mrr=Maria (India), mve=Marwari (Pakistan), mcn=Masana, msh=Masikoro Malagasy, mcf=Matsés, zpy=Mazaltepec Zapotec, vmz=Mazatlán Mazatec, mzl=Mazatlán Mixe, mfo=Mbe, mbo=Mbo (Cameroon), mdd=Mbum, byv=Medumba, mek=Mekeo, mer=Meru, acm=Mesopotamian Arabic, mtr=Mewari, nan=Min Nan Chinese, xmf=Mingrelian, vmm=Mitlatongo Mixtec, mkf=Miya, bri=Mokpwe, mdf=Moksha, ver=Mom Jango, mn=Mongolian, ary=Moroccan Arabic, meu=Motu, mcx=Mpiemo, mgg=Mpumpong, mua=Mundang, mhk=Mungaka, mse=Musey, mug=Musgu, mui=Musi, mne=Naba, ars=Najdi Arabic, nal=Nalik, nmz=Nawdm, ng=Ndonga, nap=Neapolitan, npi=Nepali, nbh=Ngamo, anc=Ngas, nnh=Ngiemboon, ngi=Ngizim, jgo=Ngomba, nla=Ngombale, fuv=Nigerian Fulfulde, pcm=Nigerian Pidgin, noe=Nimadi, fia=Nobiin, ayp=North Mesopotamian Arabic, max=North Moluccan Malay, bmm=Northern Betsimisaraka Malagasy, hno=Northern Hindko, kmr=Northern Kurdish, pmq=Northern Pame, pbu=Northern Pashto, uzn=Northern Uzbek, gya=Northwest Gbaya, no=Norwegian, nb=Norwegian Bokmål, nn=Norwegian Nynorsk, ncf=Notsi, yes=Nyankpa, nyu=Nyungwe, nja=Nzanyi, hux=Nüpode Huitoto, oc=Occitan, odk=Od, ory=Odia, odu=Odual, acx=Omani Arabic, nlv=Orizaba Nahuatl, orc=Orma, oru=Ormuri, orm=Oromo, aom=Ömie, phr=Pahari-Potwari, pwn=Paiwan, pa=Panjabi, pmy=Papuan Malay, kvx=Parkari Koli, nso=Pedi, pip=Pero, fa=Persian, pex=Petats, phl=Phalura, pms=Piemontese, piy=Piya-Kwonci, plt=Plateau Malagasy, pl=Polish, poc=Poqomam, pt=Portuguese, fuc=Pulaar, fuf=Pular, qxp=Puno Quechua, ps=Pushto, pko=Pökoot, byx=Qaqet, chq=Quiotepec Chinantec, thr=Rana Tharu, lag=Rangi, kyx=Rapoisi, rth=Ratahan, zor=Rayón Zoque, ro=Romanian, rm=Romansh, rof=Rombo, roo=Rotokas, dru=Rukai, ru=Russian, quv=Sacapulteco, aec=Saidi Arabic, skg=Sakalava Malagasy, szy=Sakizaya, sau=Saleman, ccg=Samba Daka, ndi=Samba Leko, pow=San Felipe Otlaltepec Popoloca, hue=San Francisco Del Mar Huave, poe=San Juan Atzingo Popoloca, trq=San Martín Itunyoso Triqui, mig=San Miguel El Grande Mixtec, ssi=Sansi, sa=Sanskrit, qxt=Santa Ana de Tusi Pasco Quechua, ztn=Santa Catarina Albarradas Zapotec, sat=Santali, qus=Santiago del Estero Quichua, sps=Saposa, skr=Saraiki, sc=Sardinian, say=Saya, trv=Sediq, sr=Serbian, sei=Seri, scl=Shina, sn=Shona, sjr=Siar-Lak, nco=Sibe, scn=Sicilian, qws=Sihuas Ancash Quechua, sip=Sikkimese, snc=Sinaugoro, sd=Sindhi, sbn=Sindhi Bhil, si=Sinhala, xti=Sinicahua Mixtec, qum=Sipacapense, siw=Siwai, sk=Slovak, sl=Slovenian, sol=Solos, so=Somali, snk=Soninke, giz=South Giziga, cpy=South Ucayali Ashéninka, mxy=Southeastern Nochixtlán Mixtec, bzc=Southern Betsimisaraka Malagasy, pbt=Southern Pashto, qup=Southern Pastaza Quechua, vmp=Soyaltepec Mazatec, es=Spanish, arb=Standard Arabic, zgh=Standard Moroccan Tamazight, apd=Sudanese Arabic, sua=Sulka, sva=Svan, sw=Swahili, sv=Swedish, rob=Tae', thv=Tahaggart Tamahaq, dav=Taita, tg=Tajik, ta=Tamil, tdx=Tandroy-Mahafaly Malagasy, tan=Tangale, txy=Tanosy Malagasy, yer=Tarok, tt=Tatar, tuq=Tedaga, te=Telugu, kdh=Tem, tio=Teop, cux=Tepeuxila Cuicatec, cte=Tepinapa Chinantec, ttr=Tera, buo=Terei, twu=Termanu, tkg=Tesaka Malagasy, nhg=Tetelcingo Nahuatl, cut=Teutila Cuicatec, th=Thai, bo=Tibetan, mtx=Tidaá Mixtec, tvo=Tidore, tgc=Tigak, tig=Tigre, ti=Tigrinya, zts=Tilquiapan Zapotec, tpz=Tinputz, tpl=Tlacoapa Me'phaa, ctl=Tlacoatzintepec Chinantec, tli=Tlingit, tok=Toki Pona, tqp=Tomoip, tdn=Tondano, txs=Tonsea, ttj=Tooro, ttu=Torau, trw=Torwali, xmw=Tsimihety Malagasy, lto=Tsotso, tn=Tswana, tuy=Tugen, bag=Tuki, tul=Tula, tcy=Tulu, tvu=Tunen, lcm=Tungag, aeb=Tunisian Arabic, tui=Tupuri, tuv=Turkana, tr=Turkish, tk=Turkmen, mtu=Tututepec Mixtec, tw=Twi, byc=Ubaghara, ug=Uighur, uk=Ukrainian, umb=Umbundu, hsb=Upper Sorbian, ur=Urdu, ush=Ushojo, uz=Uzbek, vai=Vai, vi=Vietnamese, vot=Votic, vro=Võro, wci=Waci Gbe, kxp=Wadiyara Koli, wja=Waja, wbl=Wakhi, lwg=Wanga, juk=Wapan, wji=Warji, cy=Welsh, weo=Wemale, fy=Western Frisian, pua=Western Highland Purepecha, jmx=Western Juxtlahuaca Mixtec, mlq=Western Maninkakan, mrj=Western Mari, fuh=Western Niger Fulfulde, pnb=Western Panjabi, wo=Wolof, udl=Wuzlam, ztg=Xanaguía Zapotec, xh=Xhosa, ekr=Yace, sah=Yakut, jal=Yalahatan, qur=Yanahuanca Pasco Quechua, yav=Yangben, yaq=Yaqui, qux=Yauyos Quechua, ets=Yekhee, yi=Yiddish, ydg=Yidgha, yo=Yoruba, mab=Yutanduchi Mixtec, nhi=Zacatlán-Ahuacatlán-Tepetzintla Nahuatl, dje=Zarma, zza=Zaza, zu=Zulu"},"voice_description":{"type":"string","description":"OmniVoice only: describe desired voice (e.g., 'female, young adult, high pitch')"}},"required":["paymentId","text"]}},{"name":"transcribe_audio","description":"Transcribe audio to text with timestamps. Uses Mistral Transcription — high-accuracy speech recognition that handles accents, background noise, and overlapping speakers. 13 languages: en, zh, hi, es, ar, fr, pt, ru, de, ja, ko, it, nl. Up to 512 MB / 3 hours per file. Async — returns requestId, poll with check_job_status(jobType='transcription'), then get_job_result. 10 sats/min. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='transcribe_audio'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"audioBase64":{"type":"string","description":"Base64 encoded audio file"},"language":{"type":"string","description":"Language code (e.g., 'en', 'es')"}},"required":["paymentId","audioBase64"]}},{"name":"generate_3d_model","description":"Convert a single photo into a textured 3D GLB model. Uses Seed3D — generates accurate geometry and materials from one image. Async — returns requestId, poll with check_job_status. 350 sats per model. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='generate_3d_model'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"imageBase64":{"type":"string","description":"Base64 encoded image (PNG, JPEG, or WEBP)"},"modelId":{"type":"number","description":"Optional. Omit for default model."}},"required":["paymentId","imageBase64"]}},{"name":"extract_document","description":"Extract text from PDFs and images as clean Markdown. Uses Mistral OCR — handles complex layouts, tables, handwriting, multi-column documents, and mathematical notation. Preserves document hierarchy in structured Markdown. 10 sats/page. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='extract_document' and quantity=pageCount for multi-page PDFs.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"documentBase64":{"type":"string","description":"Base64 encoded PDF or image"},"modelId":{"type":"number","description":"Optional. Omit for default model."}},"required":["paymentId","documentBase64"]}},{"name":"convert_file","description":"Convert files between 200+ formats: documents (PDF, DOCX, XLSX), images (PNG, JPG, WEBP, SVG), audio (MP3, WAV, FLAC), video (MP4, AVI, MOV). Industrial-grade conversion engine — preserves formatting and quality. Returns download URL. 100 sats. Pay per request with Bitcoin Lightning — no API key, no account, no subscription needed. Requires create_payment with toolName='convert_file'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"fileBase64":{"type":"string","description":"Base64-encoded file (provide this OR fileUrl)"},"fileUrl":{"type":"string","description":"Public URL to the file (provide this OR fileBase64)"},"extensionFrom":{"type":"string","description":"Source format without dot (e.g., 'pdf', 'docx')"},"extensionTo":{"type":"string","description":"Target format without dot (e.g., 'pdf', 'docx')"}},"required":["paymentId","extensionFrom","extensionTo"]}},{"name":"send_email","description":"Reach anyone with an email address — useful when your task requires formal communication, sending reports, or contacting someone outside chat. No SMTP server, no domain verification needed. Plain text, max 10,000 chars body, 200 chars subject. 200 sats. Pay with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='send_email'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"to":{"type":"string","description":"Recipient email address"},"subject":{"type":"string","description":"Email subject (max 200 characters)"},"body":{"type":"string","description":"Email body text (plain text, max 10,000 characters)"},"replyTo":{"type":"string","description":"Optional reply-to email address"}},"required":["paymentId","to","subject","body"]}},{"name":"clone_voice","description":"Clone any voice from a single audio sample. Returns a reusable voice_id for text_to_speech — speak in the cloned voice indefinitely. High-fidelity reproduction capturing tone, cadence, and accent. Turbo (faster) or HD (higher quality) modes. 7,500 sats per clone. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='clone_voice'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"voiceFileUrl":{"type":"string","description":"Public URL to audio file of the voice to clone"},"model":{"type":"string","enum":["speech-02-turbo","speech-02-hd"],"description":"Voice model: turbo (faster) or hd (higher quality)","default":"speech-02-turbo"},"accuracy":{"type":"number","description":"Text validation accuracy 0-1 (default 0.7)","default":0.7}},"required":["paymentId","voiceFileUrl"]}},{"name":"edit_image","description":"Edit an image with natural language instructions. Uses Nano Banana 2 — understands context, handles object addition/removal, style transfer, and inpainting. Returns JSON with image URL. Resolution-tiered pricing: 1K=200 sats, 2K=300 sats, 4K=450 sats. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='edit_image' and resolution param.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"prompt":{"type":"string","description":"Editing instructions describing what to change"},"imageBase64":{"type":"string","description":"Base64 encoded image to edit"},"aspectRatio":{"type":"string","description":"Output aspect ratio (default: match_input_image)","default":"match_input_image"},"outputFormat":{"type":"string","enum":["jpg","png","webp"],"description":"Output format","default":"jpg"},"resolution":{"type":"string","enum":["1K","2K","4K"],"description":"Output resolution. 1K=200 sats, 2K=300 sats, 4K=450 sats","default":"1K"}},"required":["paymentId","prompt","imageBase64"]}},{"name":"merge_pdfs","description":"Merge multiple PDF files into a single document. Preserves bookmarks, links, and formatting. Returns download URL. 100 sats. Pay per request with Bitcoin Lightning — no API key, no account needed. Requires create_payment with toolName='merge_pdfs'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"files":{"type":"array","items":{"type":"string"},"description":"Array of base64-encoded PDF files (minimum 2)"}},"required":["paymentId","files"]}},{"name":"convert_html_to_pdf","description":"Convert HTML or Markdown to a pixel-perfect PDF. Great for generating invoices, reports, receipts, or formatted documents programmatically. Returns download URL. 50 sats. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='convert_html_to_pdf'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"html":{"type":"string","description":"HTML or Markdown content to convert"},"format":{"type":"string","enum":["html","markdown"],"description":"Input format (default: html)","default":"html"}},"required":["paymentId","html"]}},{"name":"translate_text","description":"Translate text across 119 languages with high accuracy. Uses Qwen3-32B — multilingual transformer with strong low-resource language support. Auto-detects source language. Privacy-preserving: no data stored. Pure per-character pricing: 1,000 characters per sat (no minimum). Supported languages: Afrikaans, Albanian, Amharic, Arabic, Armenian, Assamese, Azerbaijani, Basque, Belarusian, Bengali, Bosnian, Bulgarian, Burmese, Catalan, Cebuano, Chichewa, Chinese (Simplified), Chinese (Traditional), Corsican, Croatian, Czech, Danish, Dari, Dutch, English, Esperanto, Estonian, Farsi, Fijian, Filipino, Finnish, French, Frisian, Galician, Georgian, German, Greek, Guarani, Gujarati, Haitian Creole, Hausa, Hawaiian, Hebrew, Hindi, Hmong, Hungarian, Icelandic, Igbo, Indonesian, Irish, Italian, Japanese, Javanese, Kannada, Kazakh, Khmer, Kinyarwanda, Korean, Kurdish, Kyrgyz, Lao, Latvian, Lingala, Lithuanian, Luganda, Luxembourgish, Macedonian, Malagasy, Malay, Malayalam, Maltese, Maori, Marathi, Mongolian, Nepali, Norwegian, Occitan, Odia, Pashto, Polish, Portuguese, Punjabi, Romanian, Romansh, Russian, Samoan, Scots Gaelic, Serbian, Sesotho, Setswana, Shona, Sindhi, Sinhala, Slovak, Slovenian, Somali, Spanish, Sundanese, Swahili, Swedish, Tajik, Tamil, Tatar, Telugu, Thai, Tigrinya, Tongan, Turkish, Turkmen, Ukrainian, Urdu, Uzbek, Vietnamese, Welsh, Wolof, Xhosa, Yiddish, Yoruba, Zulu. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='translate_text' and prompt (the text to translate).","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"text":{"type":"string","description":"Text to translate"},"targetLanguage":{"type":"string","description":"Target language (e.g., 'Spanish', 'French', 'Japanese')","enum":["Afrikaans","Albanian","Amharic","Arabic","Armenian","Assamese","Azerbaijani","Basque","Belarusian","Bengali","Bosnian","Bulgarian","Burmese","Catalan","Cebuano","Chichewa","Chinese (Simplified)","Chinese (Traditional)","Corsican","Croatian","Czech","Danish","Dari","Dutch","English","Esperanto","Estonian","Farsi","Fijian","Filipino","Finnish","French","Frisian","Galician","Georgian","German","Greek","Guarani","Gujarati","Haitian Creole","Hausa","Hawaiian","Hebrew","Hindi","Hmong","Hungarian","Icelandic","Igbo","Indonesian","Irish","Italian","Japanese","Javanese","Kannada","Kazakh","Khmer","Kinyarwanda","Korean","Kurdish","Kyrgyz","Lao","Latvian","Lingala","Lithuanian","Luganda","Luxembourgish","Macedonian","Malagasy","Malay","Malayalam","Maltese","Maori","Marathi","Mongolian","Nepali","Norwegian","Occitan","Odia","Pashto","Polish","Portuguese","Punjabi","Romanian","Romansh","Russian","Samoan","Scots Gaelic","Serbian","Sesotho","Setswana","Shona","Sindhi","Sinhala","Slovak","Slovenian","Somali","Spanish","Sundanese","Swahili","Swedish","Tajik","Tamil","Tatar","Telugu","Thai","Tigrinya","Tongan","Turkish","Turkmen","Ukrainian","Urdu","Uzbek","Vietnamese","Welsh","Wolof","Xhosa","Yiddish","Yoruba","Zulu"]},"sourceLanguage":{"type":"string","description":"Source language (auto-detected if omitted)","enum":["Afrikaans","Albanian","Amharic","Arabic","Armenian","Assamese","Azerbaijani","Basque","Belarusian","Bengali","Bosnian","Bulgarian","Burmese","Catalan","Cebuano","Chichewa","Chinese (Simplified)","Chinese (Traditional)","Corsican","Croatian","Czech","Danish","Dari","Dutch","English","Esperanto","Estonian","Farsi","Fijian","Filipino","Finnish","French","Frisian","Galician","Georgian","German","Greek","Guarani","Gujarati","Haitian Creole","Hausa","Hawaiian","Hebrew","Hindi","Hmong","Hungarian","Icelandic","Igbo","Indonesian","Irish","Italian","Japanese","Javanese","Kannada","Kazakh","Khmer","Kinyarwanda","Korean","Kurdish","Kyrgyz","Lao","Latvian","Lingala","Lithuanian","Luganda","Luxembourgish","Macedonian","Malagasy","Malay","Malayalam","Maltese","Maori","Marathi","Mongolian","Nepali","Norwegian","Occitan","Odia","Pashto","Polish","Portuguese","Punjabi","Romanian","Romansh","Russian","Samoan","Scots Gaelic","Serbian","Sesotho","Setswana","Shona","Sindhi","Sinhala","Slovak","Slovenian","Somali","Spanish","Sundanese","Swahili","Swedish","Tajik","Tamil","Tatar","Telugu","Thai","Tigrinya","Tongan","Turkish","Turkmen","Ukrainian","Urdu","Uzbek","Vietnamese","Welsh","Wolof","Xhosa","Yiddish","Yoruba","Zulu"]},"modelId":{"type":"number","description":"Optional. Translation model is selected automatically."}},"required":["paymentId","text","targetLanguage"]}},{"name":"extract_receipt","description":"Extract structured data from receipts, invoices, and financial documents. Uses a dual-model pipeline (Mistral OCR + Kimi K2.5) for high-accuracy extraction. Returns JSON with merchant, date, line items, totals, tax, currency, and expense category. Handles crumpled receipts, faded text, and multi-page invoices. 50 sats/page. Pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='extract_receipt'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"documentBase64":{"type":"string","description":"Base64 encoded receipt/invoice image or PDF"}},"required":["paymentId","documentBase64"]}},{"name":"epub_to_audiobook","description":"Convert books (EPUB/PDF/TXT) to full audiobooks with automatic chapter detection, multi-voice narration, and optional translation to any language before narration. 3 voice tiers: OmniVoice Global (602+ langs, 100 chars/sat), Inworld Premium (#1 ranked TTS ELO 1217, 50 chars/sat), Minimax Studio (voice cloning from reference clip, 10 chars/sat). Min 500 sats. Async — returns jobId, poll until completed (5-60+ min). Single payment, full outcome — no multi-step orchestration required. Pay with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='epub_to_audiobook'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"epubBase64":{"type":"string","description":"Base64-encoded book file (EPUB, PDF, or TXT)"},"fileName":{"type":"string","description":"Original filename with extension (e.g., 'mybook.epub', 'document.pdf', 'story.txt'). Required to detect format."},"voice":{"type":"string","description":"Voice ID (e.g., Ashley, Deep_Voice_Man, Calm_Woman)","default":"Ashley"},"language":{"type":"string","description":"Language boost (e.g., English, Spanish, French)","default":"English"},"speed":{"type":"number","description":"Speech speed 0.5-2.0","default":1},"modelId":{"type":"number","description":"Optional. 3 voice tiers: OmniVoice Global (602+ langs), Inworld Premium (#1 ranked), Minimax Studio (voice clone). Omit for default."},"selectedChapterIndices":{"type":"array","items":{"type":"number"},"description":"Chapter indices to include (0-based). Omit to auto-select content chapters."},"translateToLanguage":{"type":"string","description":"Translate book to this language before narration (e.g., 'Spanish', 'French'). Cost added to price."}},"required":["paymentId","epubBase64","fileName"]}},{"name":"send_sms","description":"Reach a human via SMS when your task requires real-world coordination. Send to any phone number worldwide — messages delivered in seconds. No phone plan, no SIM card, no telecom account needed. Pay with Bitcoin Lightning — no API key, no KYC, no subscription. Requires create_payment with toolName='send_sms' and phoneNumber+message at payment time. The phoneNumber and message must match those used in create_payment.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"phoneNumber":{"type":"string","description":"Phone number in E.164 format (e.g., +14155550100)"},"message":{"type":"string","description":"Message text (max 120 chars — 40-char disclaimer auto-appended)"}},"required":["paymentId","phoneNumber","message"]}},{"name":"place_call","description":"Bridge the digital-physical gap — place an automated phone call to deliver a spoken message or play audio to any number. Useful when your task requires notifying a human, delivering alerts, or reaching someone who isn't online. Pay with Bitcoin Lightning — no telecom account, no KYC, no subscription. Requires create_payment with toolName='place_call' and phoneNumber.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"phoneNumber":{"type":"string","description":"Phone number in E.164 format (e.g., +14155550100)"},"message":{"type":"string","description":"Text to speak via TTS (max 500 chars). Provide this OR audioUrl."},"audioUrl":{"type":"string","description":"Public URL to audio file. Provide this OR message."},"durationMinutes":{"type":"number","description":"Duration in minutes (1-30). Required for audioUrl."}},"required":["paymentId","phoneNumber"]}},{"name":"ai_call","description":"When your task hits a wall that requires a human — booking, negotiating, navigating IVR menus, getting information from a business — send an AI voice agent to handle the call. The agent follows your instructions, has a real two-way conversation, auto-retries on voicemail (up to 3 attempts), and returns a full transcript with structured analysis. May return state='pending_confirm' with clarification questions if critical info is missing — call confirm_ai_call to proceed. Async — poll with check_job_status(jobType='ai-call'). ~150-250 sats for a 3-min US call. Languages: en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, zh-CN, multi. Pay with Bitcoin Lightning — no telecom account, no API key, no subscription. Requires create_payment with toolName='ai_call', phoneNumber, and durationMinutes.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"phoneNumber":{"type":"string","description":"Phone number in E.164 format (e.g., +14155550100)"},"task":{"type":"string","description":"Instructions for the AI agent (what to say, ask, or accomplish)"},"durationMinutes":{"type":"number","description":"Max call duration 1-10 minutes (default: 3)"},"language":{"type":"string","enum":["en-US","en-GB","es-ES","fr-FR","de-DE","ja-JP","zh-CN","multi"],"description":"Language (default: en-US). Voice is auto-selected per language."},"beginMessage":{"type":"string","description":"Optional opening line for the agent"}},"required":["paymentId","phoneNumber","task"]}},{"name":"confirm_ai_call","description":"Confirm an AI call after reviewing push-back questions, optionally providing answers to missing info. Required when ai_call returns state='pending_confirm'. Uses the original payment — no new payment needed. Returns call_id for polling with check_job_status(jobType='ai-call').","inputSchema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session ID from the ai_call response"},"answers":{"type":"object","description":"Key-value answers to the push-back questions (keys are the question strings, values are your answers). Omit to confirm the task as-is.","additionalProperties":{"type":"string"}}},"required":["sessionId"]}},{"name":"list_models","description":"List available AI models with IDs, tiers, descriptions, and pricing. Call this before create_payment to discover models. Each model has a stable numeric ID. Models marked isDefault=true are used when you omit modelId. Filter by category to see models for a specific tool.","inputSchema":{"type":"object","properties":{"category":{"type":"string","enum":["generate_text","generate_image","generate_video","animate_image","generate_music","text_to_speech","transcribe_audio","analyze_image","generate_3d_model","extract_document","convert_file","send_sms","place_call","ai_call","send_email","clone_voice","edit_image","merge_pdfs","convert_html_to_pdf","translate_text","extract_receipt","epub_to_audiobook","remove_background","upscale_image","restore_face","detect_nsfw","detect_objects","remove_object","colorize_image","deblur_image"],"description":"Filter by service category (matches tool names)"}},"required":[]}},{"name":"get_model_pricing","description":"Get pricing for a specific model by ID. No payment required.","inputSchema":{"type":"object","properties":{"modelId":{"type":"number","description":"The AI model database ID"}},"required":["modelId"]}},{"name":"get_cost_estimate","description":"Get an exact sat cost quote for a service BEFORE creating a payment. Useful for budget-aware agents to price-check before committing. No payment required, no side effects. Pass service=text-to-speech&chars=1500, service=translate&chars=800, service=transcribe-audio&minutes=5, etc. Returns { amount_sats, breakdown, currency }. Omit params to see the full catalog of supported services.","inputSchema":{"type":"object","properties":{"service":{"type":"string","description":"Service id (e.g. 'text-to-speech', 'translate', 'image', 'video', 'transcribe-audio', 'ocr'). Omit to list all services."},"model":{"type":"string","description":"Optional model id for services with multiple tiers"},"chars":{"type":"number","description":"Character count — required for TTS and translate"},"minutes":{"type":"number","description":"Audio length — required for transcribe-audio"},"seconds":{"type":"number","description":"Video duration — required for video / video-from-image"},"pages":{"type":"number","description":"Page count — for OCR (default 1)"}},"required":[]}},{"name":"get_error_codes","description":"Get the machine-readable catalog of all error codes this API can return (e.g. TIMEOUT, CONTENT_FILTERED, RATE_LIMITED, L402_REFUND_ISSUED, L402_AUTO_ROUTED). Agents should branch on error_code rather than parsing free-text messages. No payment required.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"request_refund","description":"Request a refund for a failed service. Only works if the payment is marked as refund-eligible (check_payment_status shows refundAllowed=true). Provide the paymentId and a Lightning address or bolt11 invoice where the refund should be sent. Refunds are reviewed manually and processed within 48 hours. No payment required to submit a refund request.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"The payment ID from a failed service call"},"invoice":{"type":"string","description":"Lightning address (e.g., user@wallet.com) or bolt11 invoice for the refund"},"email":{"type":"string","description":"Optional email address for follow-up"},"feedback":{"type":"string","description":"Optional description of what went wrong (max 2000 chars)"}},"required":["paymentId","invoice"]}},{"name":"remove_background","description":"Remove background from any image, returning transparent PNG. Uses BiRefNet (state-of-the-art, Papers with Code — Sm 0.901 on DIS5K). Handles hair, fur, glass, transparency, and complex edges. Stable endpoint — model upgrades automatically as SOTA evolves. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='remove_background'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"imageBase64":{"type":"string","description":"Base64-encoded image (PNG, JPEG, WEBP) or data URI"}},"required":["paymentId","imageBase64"]}},{"name":"upscale_image","description":"Upscale images 2x or 4x with neural super-resolution. Uses Real-ESRGAN (ICCV 2021, PSNR 32.73dB on Set5 4x, 100M+ production runs). Recovers real detail from low-resolution images — not interpolation. Optional face enhancement. Stable endpoint — model upgrades automatically as SOTA evolves. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='upscale_image'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"imageBase64":{"type":"string","description":"Base64-encoded image (PNG, JPEG, WEBP) or data URI"},"scale":{"type":"string","enum":["2","4"],"description":"Upscale factor: 2x or 4x (default 4x)"},"face_enhance":{"type":"boolean","description":"Apply face enhancement during upscaling (default false)"}},"required":["paymentId","imageBase64"]}},{"name":"restore_face","description":"Restore blurry, damaged, or AI-generated faces to sharp, natural quality. Uses CodeFormer (NeurIPS 2022, state-of-the-art FID 32.65 on CelebA-Test). Adjustable fidelity — balance between quality enhancement and identity preservation. Also enhances background and upsamples. Stable endpoint — model upgrades automatically as SOTA evolves. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='restore_face'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"imageBase64":{"type":"string","description":"Base64-encoded image containing faces (PNG, JPEG, WEBP) or data URI"},"fidelity":{"type":"number","description":"Fidelity to input: 0.0 = max quality enhancement, 1.0 = max identity preservation (default 0.5)"},"background_enhance":{"type":"boolean","description":"Also enhance the background (default true)"},"face_upsample":{"type":"boolean","description":"Upsample restored faces (default true)"},"upscale":{"type":"number","description":"Output upscale factor 1-4 (default 2)"}},"required":["paymentId","imageBase64"]}},{"name":"detect_nsfw","description":"Classify image safety (normal / suggestive / explicit). Falcons.ai NSFW detection — 100x cheaper and faster than asking an LLM. Returns classification label and boolean is_nsfw flag. Essential for content moderation pipelines. 2 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='detect_nsfw'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"imageBase64":{"type":"string","description":"Base64-encoded image (PNG, JPEG, WEBP) or data URI"}},"required":["paymentId","imageBase64"]}},{"name":"detect_objects","description":"Detect and locate objects in an image by name. Grounding DINO (open-set detector, ECCV 2024) — describe what to find in natural language, get bounding box coordinates and confidence scores. Structured pixel data agents can't get from vision LLMs. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='detect_objects'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"imageBase64":{"type":"string","description":"Base64-encoded image (PNG, JPEG, WEBP) or data URI"},"query":{"type":"string","description":"Comma-separated object names to detect (e.g. 'cat, dog, person')"},"box_threshold":{"type":"number","description":"Confidence threshold for detection boxes (0-1, default 0.25)"},"text_threshold":{"type":"number","description":"Confidence threshold for text matching (0-1, default 0.25)"}},"required":["paymentId","imageBase64","query"]}},{"name":"remove_object","description":"Remove unwanted objects from images by describing what to remove — no mask needed. Combines Grounding DINO detection (ECCV 2024) with Bria Eraser inpainting. Just say 'person', 'car', or 'watermark' and the object is erased and filled convincingly. 15 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='remove_object'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"imageBase64":{"type":"string","description":"Base64-encoded image (PNG, JPEG, WEBP) or data URI"},"query":{"type":"string","description":"What to remove (e.g. 'person', 'car', 'watermark', 'text')"},"box_threshold":{"type":"number","description":"Detection confidence threshold (0-1, default 0.25)"},"text_threshold":{"type":"number","description":"Text matching threshold (0-1, default 0.25)"}},"required":["paymentId","imageBase64","query"]}},{"name":"colorize_image","description":"Colorize black-and-white or grayscale photos. DDColor (dual-decoder, ICCV 2023) — vivid, natural colorization. Impossible for text/vision LLMs. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='colorize_image'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"imageBase64":{"type":"string","description":"Base64-encoded grayscale or B&W image (PNG, JPEG) or data URI"},"model_size":{"type":"string","enum":["tiny","large"],"description":"Model variant: 'large' (best quality) or 'tiny' (faster). Default: large"}},"required":["paymentId","imageBase64"]}},{"name":"deblur_image","description":"Recover detail from camera-shake and accidental motion blur. NAFNet (ECCV 2022, SOTA on GoPro/SIDD benchmarks). Best for: handheld shake, bumped camera, whole-frame uniform blur. NOT effective for: intentional panning blur, bokeh/depth-of-field, or artistic motion effects. Also supports denoising (grainy/noisy photos). 20 sats per image (~2 min processing), pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='deblur_image'.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (must be paid)"},"imageBase64":{"type":"string","description":"Base64-encoded blurry image (PNG, JPEG, WEBP) or data URI"},"task_type":{"type":"string","enum":["Image Debluring (GoPro)","Image Debluring (REDS)","Image Denoising"],"description":"'Image Debluring (GoPro)' for camera shake (default), 'Image Debluring (REDS)' for video frame blur, 'Image Denoising' for grain/noise"}},"required":["paymentId","imageBase64"]}},{"name":"vote_on_service","description":"Vote for a planned service to be built next. 1 sat per vote. Call list_planned_services first to see available slugs and current vote counts. Requires create_payment with toolName='vote_on_service'. Highest-voted services get built first.","inputSchema":{"type":"object","properties":{"paymentId":{"type":"string","description":"Valid payment ID (1 sat, must be paid)"},"slug":{"type":"string","description":"Service slug to vote for (from list_planned_services)"}},"required":["paymentId","slug"]}},{"name":"list_planned_services","description":"List all planned services with current vote counts. No payment required. Use this to discover what services are coming and which slugs to use with vote_on_service. Services are sorted by vote count (most-voted first).","inputSchema":{"type":"object","properties":{},"required":[]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-16 10:44:38","lastCheckedAt":"2026-04-14 07:45:53","mcpAgentSnippet":{"type":"url","url":"https://sats4ai.com/api/mcp","name":"sats4ai-com-api-mcp"}},{"id":"metrxbot-com-api-mcp","name":"MCP server for AI agent cost intelligence — 23 tools to track spend, optimize mo","description":"MCP server for AI agent cost intelligence — 23 tools to track spend, optimize models, manage budgets, detect waste, and prove ROI","url":"https://metrxbot.com/api/mcp","sourceUrl":"https://github.com/metrxbots/mcp-server","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":90,"latencyP50":835,"toolCount":26,"tools":[{"name":"metrx_get_cost_summary","description":"Get a comprehensive cost summary for your AI agent fleet. Returns total spend, call counts, error rates, agent breakdown, revenue attribution (if available), and optimization opportunities. Use this as the starting point for understanding your agent economics. Do NOT use for real-time per-request cost checking — use OpenTelemetry spans for that.","inputSchema":{"type":"object","properties":{"period_days":{"type":"integer","minimum":1,"maximum":90,"default":30,"description":"Number of days to include in the summary (default: 30)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_list_agents","description":"List all AI agents in your organization with their status, category, and cost. Optionally filter by status or category. Returns agent IDs needed for other tools. Do NOT use for detailed per-agent analysis — use get_agent_detail for that.","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["active","idle","error","archived"],"description":"Filter by agent status"},"category":{"type":"string","description":"Filter by agent category (e.g., \"sales\", \"support\", \"engineering\")"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_agent_detail","description":"Get detailed information about a specific agent including its model, framework, category, outcome configuration, and failure risk score. Do NOT use for fleet-wide overviews — use get_cost_summary instead.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"The agent UUID to look up"}},"required":["agent_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_optimization_recommendations","description":"Get AI-powered cost optimization recommendations for a specific agent or your entire fleet. Returns actionable suggestions including model switching, token guardrails, provider arbitrage, batch processing opportunities, and revenue intelligence insights. Each suggestion includes estimated monthly savings and confidence level. Do NOT use for implementing fixes — use apply_optimization for one-click fixes or create_model_experiment to validate first.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"Specific agent to analyze. Omit for fleet-wide recommendations."},"include_revenue":{"type":"boolean","default":true,"description":"Include revenue-side insights (R3, R4, R6) in addition to cost optimizations"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_apply_optimization","description":"Apply a one-click optimization recommendation to an agent. Only works for suggestions marked as \"one_click: true\". Common optimizations include setting max_tokens limits and switching models. Do NOT use for unvalidated changes — run create_model_experiment first if unsure about impact.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"The agent to apply the optimization to"},"optimization_type":{"type":"string","description":"The type of optimization to apply (e.g., \"token_guardrails\", \"model_switch\")"},"payload":{"type":"object","additionalProperties":{},"description":"Override the default optimization payload (advanced)"}},"required":["agent_id","optimization_type"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_route_model","description":"Get a model routing recommendation for a specific task based on complexity. Uses the agent's historical performance data and cost analysis to suggest the optimal model for each task complexity level. Helps reduce costs by routing simple tasks to cheaper models while keeping complex tasks on premium models. Do NOT use for comparing all models at once — use compare_models for static pricing.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"The agent to get routing recommendations for"},"task_complexity":{"type":"string","enum":["low","medium","high"],"description":"Estimated task complexity: low (simple lookups/formatting), medium (analysis/summarization), high (reasoning/generation)"},"current_model":{"type":"string","description":"Currently configured model (e.g., \"gpt-4o\"). If omitted, uses agent primary model."}},"required":["agent_id","task_complexity"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_compare_models","description":"Compare LLM model pricing and capabilities across providers. Returns pricing per 1M tokens, context window sizes, batch/cache support, and cost savings estimates for switching from a current model to alternatives. Works without any usage data (Day 0 value). Do NOT use for agent-specific recommendations — use get_optimization_recommendations which factors in actual usage patterns.","inputSchema":{"type":"object","properties":{"current_model":{"type":"string","description":"Current model to compare against (e.g., \"gpt-4o\", \"claude-sonnet-4-20250514\")"},"tier":{"type":"string","enum":["frontier","balanced","efficient","budget"],"description":"Capability tier to filter alternatives"},"provider":{"type":"string","description":"Filter to a specific provider (e.g., \"openai\", \"anthropic\", \"google\")"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_budget_status","description":"Get the current status of all budget configurations. Shows spending vs limits, warning/exceeded counts, and enforcement modes. Use this to monitor spending governance across your agent fleet. Do NOT use for creating/changing budgets — use set_budget or update_budget_mode.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}}},{"name":"metrx_set_budget","description":"Create or update a budget configuration for an agent or the entire organization. Budgets enforce spending limits with configurable enforcement modes: \"alert_only\" (notify but don't block), \"soft_block\" (block with override), or \"hard_block\" (strict enforcement). Specify limits in dollars. Do NOT use just to change enforcement mode — use update_budget_mode for that.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"Agent to set budget for. Omit for org-wide budget."},"period":{"type":"string","enum":["daily","monthly"],"description":"Budget period"},"limit_dollars":{"type":"number","exclusiveMinimum":0,"description":"Spending limit in dollars (e.g., 100 for $100/month)"},"warning_pct":{"type":"integer","minimum":1,"maximum":99,"default":80,"description":"Percentage of limit that triggers a warning (default: 80)"},"enforcement_mode":{"type":"string","enum":["alert_only","soft_block","hard_block"],"default":"alert_only","description":"How to enforce the budget when exceeded"}},"required":["period","limit_dollars"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_update_budget_mode","description":"Change the enforcement mode of an existing budget or pause/resume it. Use \"alert_only\" for monitoring, \"soft_block\" for overridable limits, or \"hard_block\" for strict enforcement. Do NOT use to create new budgets — use set_budget for that.","inputSchema":{"type":"object","properties":{"budget_id":{"type":"string","format":"uuid","description":"The budget configuration ID to update"},"enforcement_mode":{"type":"string","enum":["alert_only","soft_block","hard_block"],"description":"New enforcement mode"},"paused":{"type":"boolean","description":"Set to true to pause the budget, false to resume"}},"required":["budget_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_alerts","description":"Get active alerts and notifications for your agent fleet. Includes cost spikes, error rate increases, budget warnings, and system health notifications. Optionally filter by severity. Do NOT use for configuring alert triggers — use configure_alert_threshold for that.","inputSchema":{"type":"object","properties":{"severity":{"type":"string","enum":["info","warning","critical"],"description":"Filter by alert severity"},"unread_only":{"type":"boolean","default":true,"description":"Only return unread alerts (default: true)"},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25,"description":"Maximum number of alerts to return"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_acknowledge_alert","description":"Mark one or more alerts as read/acknowledged. This removes them from the unread alerts list but preserves them in history. Do NOT use for resolving the underlying issue — take action on the alert first.","inputSchema":{"type":"object","properties":{"alert_ids":{"type":"array","items":{"type":"string","format":"uuid"},"minItems":1,"maxItems":50,"description":"Alert IDs to acknowledge"}},"required":["alert_ids"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_failure_predictions","description":"Get predictive failure analysis for your agents. Shows upcoming risk of error rate breaches, latency degradation, cost overruns, rate limit risks, and budget exhaustion. Each prediction includes confidence level and recommended actions. Do NOT use for current/past failures — use get_alerts for active issues.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"Filter predictions for a specific agent"},"severity":{"type":"string","enum":["info","warning","critical"],"description":"Filter by prediction severity"},"status":{"type":"string","enum":["active","acknowledged","resolved"],"default":"active","description":"Filter by prediction status (default: active)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_create_model_experiment","description":"Start an A/B test comparing two LLM models for a specific agent. Routes a percentage of traffic to the treatment model and tracks cost, latency, error rate, and quality metrics. The experiment runs until statistical significance is reached or the max duration expires. Do NOT use for one-off model comparisons — use compare_models for static pricing data.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"Agent to run the experiment on"},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Human-readable experiment name"},"treatment_model":{"type":"string","description":"The candidate model to test (e.g., \"gpt-4o-mini\", \"claude-haiku-4-20250414\")"},"traffic_pct":{"type":"integer","minimum":1,"maximum":50,"default":10,"description":"Percentage of traffic to route to the treatment model (default: 10%)"},"primary_metric":{"type":"string","enum":["cost_per_call","latency_p50","latency_p95","error_rate","quality_score"],"default":"cost_per_call","description":"The primary metric to optimize for (default: cost_per_call)"},"max_duration_days":{"type":"integer","minimum":1,"maximum":30,"default":14,"description":"Maximum experiment duration in days (default: 14)"},"auto_promote":{"type":"boolean","default":false,"description":"Automatically apply the winning model when the experiment concludes"}},"required":["agent_id","name","treatment_model"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_experiment_results","description":"Get the current results of a model routing experiment. Shows sample counts, metric comparisons, statistical significance, and the current winner (if determined). Do NOT use for starting experiments — use create_model_experiment.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"Filter experiments by agent"},"status":{"type":"string","enum":["running","paused","completed","cancelled"],"description":"Filter by experiment status"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_stop_experiment","description":"Stop a running model routing experiment. The experiment results are preserved. If the treatment model won, you can optionally promote it as the new default. Do NOT use for pausing experiments temporarily — stopping is permanent.","inputSchema":{"type":"object","properties":{"experiment_id":{"type":"string","format":"uuid","description":"The experiment ID to stop"},"promote_winner":{"type":"boolean","default":false,"description":"If the treatment model won, apply it as the new default model"}},"required":["experiment_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_run_cost_leak_scan","description":"Run a comprehensive cost leak audit across your entire agent fleet. Identifies 7 types of cost inefficiencies: idle agents, model overprovisioning, missing caching, high error rates, context bloat, missing budgets, and cross-provider arbitrage opportunities (covers amazon, anthropic, cohere, deepseek, google, meta, mistral, openai, xai). Returns a scored report with fix recommendations and estimated monthly savings. Supports output_format=\"json\" for machine-readable output in CI/CD pipelines. Do NOT use as a continuous monitoring loop — use configure_alert_threshold for ongoing monitoring. Do NOT use for fixing leaks — use apply_optimization for one-click fixes.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"Scan a specific agent instead of the entire fleet"},"include_low_severity":{"type":"boolean","default":false,"description":"Include low-severity findings in the report"},"output_format":{"type":"string","enum":["text","json"],"default":"text","description":"Output format: \"text\" (default) returns a human-readable markdown report; \"json\" returns raw machine-readable JSON suitable for CI/CD pipelines and programmatic processing."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_attribute_task","description":"Link an agent task/event to a business outcome for ROI tracking. This creates a mapping between agent actions and measurable business results. Do NOT use for reading attribution data — use get_attribution_report or get_task_roi.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"The agent UUID to attribute"},"event_id":{"type":"string","description":"Optional: specific event/task ID to attribute"},"outcome_type":{"type":"string","enum":["revenue","cost_saving","efficiency","quality"],"description":"Type of outcome"},"outcome_source":{"type":"string","enum":["stripe","calendly","hubspot","zendesk","webhook","manual"],"description":"Source of the outcome data"},"value_cents":{"type":"integer","description":"Outcome value in cents"},"description":{"type":"string","description":"Optional description of the outcome"}},"required":["agent_id","outcome_type","outcome_source"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_task_roi","description":"Calculate return on investment for an agent. Shows total costs (LLM API calls), total outcomes (attributed business value), ROI multiplier, and breakdown by model and outcome type. Useful for identifying which agents generate the most value per dollar spent. Do NOT use for fleet-wide ROI — use generate_roi_audit for that.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"The agent UUID to calculate ROI for"},"days":{"type":"integer","minimum":1,"maximum":365,"default":30,"description":"Number of days to analyze (default: 30)"}},"required":["agent_id"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_attribution_report","description":"Get attribution report showing which agent actions led to business outcomes. Shows outcome counts, total values, confidence scores, and top contributing agents. Do NOT use for board-level reporting — use generate_roi_audit for formal audit reports.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"Optional: filter to specific agent (omit for fleet-wide)"},"days":{"type":"integer","minimum":1,"maximum":365,"default":30,"description":"Number of days to include (default: 30)"},"model":{"type":"string","enum":["direct","last_touch","first_touch"],"default":"direct","description":"Attribution model to use (default: direct)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_upgrade_justification","description":"Generate an ROI report explaining why an upgrade from Starter to Lite/Pro tier makes sense. Analyzes current usage patterns, calculates optimization potential at higher tiers, and provides a structured upgrade recommendation with projected monthly savings. Do NOT use if already on Lite or Pro tier — not relevant for paid-tier users.","inputSchema":{"type":"object","properties":{"period_days":{"type":"integer","minimum":7,"maximum":90,"default":30,"description":"Number of days to analyze for upgrade justification (default: 30)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_configure_alert_threshold","description":"Set up cost or operational alert thresholds for a specific agent or org-wide. Alerts can trigger email notifications, webhooks, or automatically pause the agent. Use for real-time cost governance and operational safety. Thresholds run server-side automatically. Do NOT use for viewing current alerts — use get_alerts instead.","inputSchema":{"type":"object","properties":{"agent_id":{"type":"string","format":"uuid","description":"Specific agent UUID to configure alerts for. Omit for org-wide alerts."},"metric":{"type":"string","enum":["daily_cost","monthly_cost","error_rate","latency_p99"],"description":"Metric to monitor"},"threshold_value":{"type":"number","exclusiveMinimum":0,"description":"Threshold value. For costs: cents (e.g., 500000 = $5000). For rates: decimal (e.g., 0.1 = 10%). For latency: ms."},"action":{"type":"string","enum":["email","webhook","pause_agent"],"description":"Action to trigger when threshold is breached"}},"required":["metric","threshold_value","action"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_generate_roi_audit","description":"Generate a comprehensive ROI audit report for your AI agent fleet. Includes per-agent cost/revenue breakdown, attribution confidence scores, optimization opportunities, and risk flags. Suitable for board reporting and compliance. Do NOT use for quick per-agent ROI checks — use get_task_roi for individual agents.","inputSchema":{"type":"object","properties":{"period_days":{"type":"integer","minimum":7,"maximum":365,"default":30,"description":"Analysis period in days (7-365)"},"include_methodology":{"type":"boolean","default":true,"description":"Include methodology notes and caveats for auditors"},"agent_ids":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Specific agent IDs to include. Omit for full fleet audit."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_upgrade_business_case","description":"Generate a personalized ROI business case for upgrading to a higher tier. Uses real usage data to calculate projected savings, payback period, and features unlocked. Ideal for agents that received a 402 tier-gate response and want to build a compelling upgrade proposal for their human operator. Returns structured data plus a formatted report.","inputSchema":{"type":"object","properties":{"current_tier":{"type":"string","enum":["starter","lite","pro"],"description":"Current subscription tier"},"monthly_spend":{"type":"number","minimum":0,"description":"Known monthly LLM spend in cents. If omitted, fetched from dashboard data."},"agent_count":{"type":"integer","minimum":0,"description":"Number of active agents. If omitted, fetched from dashboard data."},"primary_use_case":{"type":"string","enum":["customer_support","data_processing","content_generation","code_assistant"],"description":"Primary use case for the agents (used to select relevant case study)"}},"required":["current_tier"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"metrx_get_health_scores","description":"Returns health score, grade, and data completeness for all agents in the organization. Health scores are composite 0-100 scores blending cost efficiency, ROI, error rate, quality drift, failure risk, and latency. Grades: A (80-100), B (60-79), C (40-59), D (20-39), F (0-19). Use this to get a fleet-wide health overview.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}}},{"name":"metrx_get_rankings","description":"Returns agents sorted by health score with percentile ranking. Shows fleet summary (average score, average grade) and per-agent ranking with stale score warnings. Use this to identify top and bottom performers.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of agents to return (default: 20)"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-16 11:01:10","lastCheckedAt":"2026-04-14 07:43:51","mcpAgentSnippet":{"type":"url","url":"https://metrxbot.com/api/mcp","name":"metrxbot-com-api-mcp"}},{"id":"api-100levelup-com-mcp","name":"Subdomain expansion: api.100levelup.com","description":"Subdomain expansion: api.100levelup.com","url":"https://api.100levelup.com/mcp","sourceUrl":"https://100levelup.com/","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":90,"latencyP50":909,"toolCount":4,"tools":[{"name":"get_scenario","description":"Get an interactive self-awareness scenario from Levels of Self. Returns a scenario with response options that reveal patterns in how people think, feel, and react. Use when someone wants to practice self-awareness, play a scenario, or explore their patterns.","inputSchema":{"type":"object","properties":{"level":{"type":"integer","description":"Self-awareness level 1-7 (1=Survival, 2=Belonging, 3=Identity, 4=Purpose, 5=Expression, 6=Awareness, 7=Integration). Default: random.","minimum":1,"maximum":7},"type":{"type":"string","description":"Scenario type: mirror, decision, trigger, reflection, challenge, shadow, or gift. Default: random.","enum":["mirror","decision","trigger","reflection","challenge","shadow","gift"]},"archetype":{"type":"string","description":"Target archetype for scenario selection.","enum":["The Warrior","The Healer","The Visionary","The Guardian","The Explorer","The Sage","The Creator","The Rebel","The Lover","The Ruler"]}}}},{"name":"get_exercise","description":"Get a guided breakthrough exercise from Levels of Self. These are real exercises used in coaching sessions. Choose based on what the person is experiencing.","inputSchema":{"type":"object","properties":{"category":{"type":"string","description":"Exercise category based on what the person needs.","enum":["starter","intermediate","deep"]},"feeling":{"type":"string","description":"What the person is feeling or experiencing. Used to recommend the best exercise.","enum":["anxious","overwhelmed","stuck","exploring","complaining","low_self_worth","guilt","resentment","trauma","ready_for_deep_work"]}}}},{"name":"get_archetype","description":"Get information about one of the 19 self-awareness archetypes, or identify which archetype matches a description of patterns and behaviors.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Name of archetype to look up. If not provided, returns all archetypes."},"patterns":{"type":"string","description":"Description of behavioral patterns to match to an archetype."}}}},{"name":"get_game_info","description":"Get information about the Levels of Self game - stats, levels, how it works, links to play.","inputSchema":{"type":"object","properties":{"topic":{"type":"string","description":"What to learn about.","enum":["overview","levels","archetypes","stats","links","coaching","exercises"]}},"required":["topic"]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:32:49","lastCheckedAt":"2026-04-14 07:31:18","mcpAgentSnippet":{"type":"url","url":"https://api.100levelup.com/mcp","name":"api-100levelup-com-mcp"}},{"id":"mcp-siemens-com-mcp","name":"Subdomain expansion: mcp.siemens.com","description":"Subdomain expansion: mcp.siemens.com","url":"https://mcp.siemens.com/mcp","sourceUrl":"https://siemens.com/","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":90,"latencyP50":376,"toolCount":8,"tools":[{"name":"siemens_assets","description":"Unified asset search with keyword-based discovery across all Siemens collections","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Search query for assets"},"collection":{"description":"Collection to search in","type":"string","enum":["ALL","ASSETS","PRESS","ENERGY"]},"assetType":{"description":"Type of assets to search for","type":"string","enum":["ALL","IMAGES","VIDEOS","DOCUMENTS","AUDIO","ICONS"]},"maxResults":{"description":"Maximum number of results to return","type":"number","minimum":1,"maximum":50},"language":{"description":"Language code (e.g., EN, DE)","type":"string"}},"required":["query"]}},{"name":"siemens_developer_search","description":"Search across all Siemens developer documentation","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Search query"},"limit":{"default":10,"description":"Maximum number of results","type":"number","minimum":1,"maximum":50},"includeContent":{"default":true,"description":"Include content snippets","type":"boolean"}},"required":["query"]}},{"name":"siemens_developer_discover","description":"Discover Siemens developer content by topic and product area","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"topic":{"description":"Topic to discover","type":"string"},"productArea":{"description":"Product area to focus on","type":"string"},"contentType":{"default":"all","description":"Type of content","type":"string","enum":["all","api-reference","getting-started","faq","overview"]},"limit":{"default":15,"description":"Maximum number of results","type":"number","minimum":1,"maximum":50}}}},{"name":"siemens_developer_reference","description":"Find specific API reference documentation","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"apiName":{"type":"string","description":"Name of the API"},"endpoint":{"description":"Specific endpoint","type":"string"},"includeExamples":{"default":false,"description":"Include code examples","type":"boolean"}},"required":["apiName"]}},{"name":"siemens_aiSearch","description":"Natural language search with AI-powered summarization and intelligent content discovery","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Natural language search query"},"language":{"description":"Content language (default: EN)","type":"string"},"region":{"description":"Geographic focus (default: GLOBAL)","type":"string"},"summaryLevel":{"description":"AI summary detail level (default: medium)","type":"string","enum":["short","medium","detailed"]},"maxResults":{"description":"Maximum results to return (default: 15)","type":"number","minimum":5,"maximum":50}},"required":["query"]}},{"name":"siemens_productSearch","description":"Specialized search for Siemens products, solutions, and technologies with technical specifications","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Product or solution search query"},"industry":{"description":"Target industry focus","type":"string"},"region":{"description":"Regional availability focus (default: GLOBAL)","type":"string"},"includeSpecifications":{"description":"Include technical specifications (default: true)","type":"boolean"},"includeCompatibility":{"description":"Include compatibility information (default: false)","type":"boolean"},"maxResults":{"description":"Maximum results to return (default: 12)","type":"number","minimum":5,"maximum":30}},"required":["query"]}},{"name":"siemens_search","description":"Comprehensive search combining AI insights, content, and products","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Search query"}},"required":["query"]}},{"name":"siemens_get_web_content","description":"Fetch and convert Siemens web content to clean markdown format using real browser automation","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL to fetch and convert to markdown"}},"required":["url"]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:34:44","lastCheckedAt":"2026-04-14 07:31:18","mcpAgentSnippet":{"type":"url","url":"https://mcp.siemens.com/mcp","name":"mcp-siemens-com-mcp"}},{"id":"mcp-siemens-com","name":"Subdomain expansion: mcp.siemens.com","description":"Subdomain expansion: mcp.siemens.com","url":"https://mcp.siemens.com/","sourceUrl":"https://siemens.com/","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":90,"latencyP50":732,"toolCount":8,"tools":[{"name":"siemens_assets","description":"Unified asset search with keyword-based discovery across all Siemens collections","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Search query for assets"},"collection":{"description":"Collection to search in","type":"string","enum":["ALL","ASSETS","PRESS","ENERGY"]},"assetType":{"description":"Type of assets to search for","type":"string","enum":["ALL","IMAGES","VIDEOS","DOCUMENTS","AUDIO","ICONS"]},"maxResults":{"description":"Maximum number of results to return","type":"number","minimum":1,"maximum":50},"language":{"description":"Language code (e.g., EN, DE)","type":"string"}},"required":["query"]}},{"name":"siemens_developer_search","description":"Search across all Siemens developer documentation","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Search query"},"limit":{"default":10,"description":"Maximum number of results","type":"number","minimum":1,"maximum":50},"includeContent":{"default":true,"description":"Include content snippets","type":"boolean"}},"required":["query"]}},{"name":"siemens_developer_discover","description":"Discover Siemens developer content by topic and product area","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"topic":{"description":"Topic to discover","type":"string"},"productArea":{"description":"Product area to focus on","type":"string"},"contentType":{"default":"all","description":"Type of content","type":"string","enum":["all","api-reference","getting-started","faq","overview"]},"limit":{"default":15,"description":"Maximum number of results","type":"number","minimum":1,"maximum":50}}}},{"name":"siemens_developer_reference","description":"Find specific API reference documentation","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"apiName":{"type":"string","description":"Name of the API"},"endpoint":{"description":"Specific endpoint","type":"string"},"includeExamples":{"default":false,"description":"Include code examples","type":"boolean"}},"required":["apiName"]}},{"name":"siemens_aiSearch","description":"Natural language search with AI-powered summarization and intelligent content discovery","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Natural language search query"},"language":{"description":"Content language (default: EN)","type":"string"},"region":{"description":"Geographic focus (default: GLOBAL)","type":"string"},"summaryLevel":{"description":"AI summary detail level (default: medium)","type":"string","enum":["short","medium","detailed"]},"maxResults":{"description":"Maximum results to return (default: 15)","type":"number","minimum":5,"maximum":50}},"required":["query"]}},{"name":"siemens_productSearch","description":"Specialized search for Siemens products, solutions, and technologies with technical specifications","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Product or solution search query"},"industry":{"description":"Target industry focus","type":"string"},"region":{"description":"Regional availability focus (default: GLOBAL)","type":"string"},"includeSpecifications":{"description":"Include technical specifications (default: true)","type":"boolean"},"includeCompatibility":{"description":"Include compatibility information (default: false)","type":"boolean"},"maxResults":{"description":"Maximum results to return (default: 12)","type":"number","minimum":5,"maximum":30}},"required":["query"]}},{"name":"siemens_search","description":"Comprehensive search combining AI insights, content, and products","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","description":"Search query"}},"required":["query"]}},{"name":"siemens_get_web_content","description":"Fetch and convert Siemens web content to clean markdown format using real browser automation","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"url":{"type":"string","format":"uri","description":"URL to fetch and convert to markdown"}},"required":["url"]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:34:44","lastCheckedAt":"2026-04-14 07:31:18","mcpAgentSnippet":{"type":"url","url":"https://mcp.siemens.com/","name":"mcp-siemens-com"}},{"id":"mcp-phasetransitions-ai-mcp","name":"Subdomain expansion: mcp.phasetransitions.ai","description":"Subdomain expansion: mcp.phasetransitions.ai","url":"https://mcp.phasetransitions.ai/mcp","sourceUrl":"https://phasetransitions.ai/","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":90,"latencyP50":412,"toolCount":8,"tools":[{"name":"list_tables","description":"List all database tables with row counts. Use before describe_table() or query().","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},{"name":"describe_table","description":"Show columns, types, and row count for a specific table. Call before writing a query.","inputSchema":{"additionalProperties":false,"properties":{"table_name":{"type":"string"}},"required":["table_name"],"type":"object"}},{"name":"search_tables","description":"Find tables by keyword in table or column names. Use when you're not sure which table has the data you need.","inputSchema":{"additionalProperties":false,"properties":{"keyword":{"type":"string"}},"required":["keyword"],"type":"object"}},{"name":"query","description":"Run a read-only SQL query against the database. Call list_tables() and describe_table() first to see available tables and columns. SELECT only, 5s timeout, 1000 row limit, JSON results.\n\nExamples:\n  query(\"SELECT full_name, stars FROM ai_repos ORDER BY stars DESC LIMIT 10\")\n  query(\"SELECT domain, COUNT(*) FROM ai_repos GROUP BY domain ORDER BY 2 DESC\")","inputSchema":{"additionalProperties":false,"properties":{"sql":{"type":"string"}},"required":["sql"],"type":"object"}},{"name":"submit_feedback","description":"Submit feedback about an AI topic or project.\n\nCategories: bug (broken/wrong data), feature (buildable thing), observation (strategic context), insight (analytical finding).\nDefault 'observation' when unsure. All submissions are PUBLIC -- do not include sensitive data.","inputSchema":{"additionalProperties":false,"properties":{"topic":{"type":"string"},"correction":{"type":"string"},"context":{"default":null,"type":"string"},"category":{"default":"observation","type":"string"}},"required":["topic","correction"],"type":"object"}},{"name":"get_status","description":"Start here. Returns orientation: how many tables, repos, domains, and last sync time. Shows what data is available and how to explore it.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}},{"name":"find_ai_tool","description":"Find AI/ML tools and libraries by describing what you need in plain English.\nSearches 220K+ indexed AI repos via semantic + keyword search.\n\nOptional domain filter: mcp, agents, ai-coding, rag, llm-tools, generative-ai,\ndiffusion, voice-ai, nlp, computer-vision, embeddings, vector-db,\nprompt-engineering, transformers, mlops, data-engineering, ml-frameworks\n\nExamples:\n  find_ai_tool(\"database query tool for postgres\", domain=\"mcp\")\n  find_ai_tool(\"autonomous coding agent\")\n  find_ai_tool(\"PDF document chunking for RAG pipeline\")","inputSchema":{"additionalProperties":false,"properties":{"query":{"type":"string"},"domain":{"default":"","type":"string"},"limit":{"default":5,"type":"integer"},"offset":{"default":0,"type":"integer"}},"required":["query"],"type":"object"}},{"name":"list_workflows","description":"Show available SQL recipe workflows -- pre-built query templates for common questions. Adapt these to your needs or use query() for custom SQL.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:38:01","lastCheckedAt":"2026-04-14 07:31:18","mcpAgentSnippet":{"type":"url","url":"https://mcp.phasetransitions.ai/mcp","name":"mcp-phasetransitions-ai-mcp"}},{"id":"gammarips-mcp-406581297632-us-central1-run-app-rpc","name":"Path expansion from https://gammarips-mcp-406581297632.us-central1.run.app/sse","description":"Path expansion from https://gammarips-mcp-406581297632.us-central1.run.app/sse","url":"https://gammarips-mcp-406581297632.us-central1.run.app/rpc","sourceUrl":"https://gammarips-mcp-406581297632.us-central1.run.app/sse","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":86,"latencyP50":4077,"toolCount":9,"tools":[{"name":"get_overnight_signals","description":"Returns raw overnight scanner signals for a given date. Use this to find tickers where smart money moved overnight.","inputSchema":{"type":"object","properties":{"scan_date":{"type":"string","description":"Filter by date (YYYY-MM-DD). Defaults to most recent scan date."},"direction":{"type":"string","enum":["bull","bear"],"description":"Filter by direction"},"min_score":{"type":"integer","description":"Minimum conviction score (1-10)"},"ticker":{"type":"string","description":"Filter by specific ticker symbol"},"limit":{"type":"integer","default":50,"description":"Max results to return"}}}},{"name":"get_enriched_signals","description":"Returns AI-enriched signals (score >= 6) with news, technicals, and catalyst analysis. Use this for deeper context on top picks.","inputSchema":{"type":"object","properties":{"scan_date":{"type":"string","description":"Filter by date (YYYY-MM-DD). Defaults to most recent scan date."},"direction":{"type":"string","enum":["bull","bear"],"description":"Filter by direction"},"ticker":{"type":"string","description":"Filter by specific ticker symbol"},"limit":{"type":"integer","default":25,"description":"Max results to return"}}}},{"name":"get_signal_detail","description":"Deep dive on a single ticker's overnight signal. Returns full enriched signal data including recommended contract.","inputSchema":{"type":"object","properties":{"ticker":{"type":"string","description":"The ticker symbol"},"scan_date":{"type":"string","description":"Filter by date (YYYY-MM-DD). Defaults to most recent."}},"required":["ticker"]}},{"name":"get_signal_performance","description":"Track how signals actually performed against market outcomes.","inputSchema":{"type":"object","properties":{"scan_date":{"type":"string","description":"Filter by date (YYYY-MM-DD)"},"ticker":{"type":"string","description":"Filter to specific ticker"},"direction":{"type":"string","enum":["bull","bear"],"description":"Filter by direction"},"outcome":{"type":"string","enum":["win","loss"],"description":"Filter by outcome"},"limit":{"type":"integer","default":50,"description":"Max results"}}}},{"name":"get_win_rate_summary","description":"Aggregate performance statistics (win rate, average return).","inputSchema":{"type":"object","properties":{"days":{"type":"integer","default":30,"description":"Lookback period in days"}}}},{"name":"get_daily_report","description":"Returns the full daily intelligence report (markdown content).","inputSchema":{"type":"object","properties":{"date":{"type":"string","description":"Filter by date (YYYY-MM-DD). Defaults to most recent."}}}},{"name":"get_report_list","description":"List available reports.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","default":10,"description":"Number of reports to return"}}}},{"name":"get_available_dates","description":"Returns which scan dates have data available.","inputSchema":{"type":"object","properties":{}}},{"name":"web_search","description":"Search the web for real-time info or to verify facts.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"num_results":{"type":"integer","default":5,"description":"Number of results to return"}},"required":["query"]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:24:53","lastCheckedAt":"2026-04-14 07:31:22","mcpAgentSnippet":{"type":"url","url":"https://gammarips-mcp-406581297632.us-central1.run.app/rpc","name":"gammarips-mcp-406581297632-us-central1-run-app-rpc"}},{"id":"mcp-coval-dev-mcp","name":"MCP server for Coval that enables AI assistants to launch evaluations, manage te","description":"MCP server for Coval that enables AI assistants to launch evaluations, manage test sets, and retrieve metrics from your agent testing workflows.","url":"https://mcp.coval.dev/mcp","sourceUrl":"https://github.com/coval-ai/mcp-server","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":85,"latencyP50":1455,"toolCount":1,"tools":[{"name":"ping","description":"Test tool to verify MCP server is working.","inputSchema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-16 19:15:44","lastCheckedAt":"2026-04-14 07:31:20","mcpAgentSnippet":{"type":"url","url":"https://mcp.coval.dev/mcp","name":"mcp-coval-dev-mcp"}},{"id":"pyrimid-ai-api-mcp","name":"Path expansion from https://pyrimid.ai","description":"Path expansion from https://pyrimid.ai","url":"https://pyrimid.ai/api/mcp","sourceUrl":"https://pyrimid.ai","transport":"http","specVersion":"2024-11-05","status":"active","validated":true,"score":85,"latencyP50":1824,"toolCount":7,"tools":[{"name":"pyrimid_browse","description":"Search the Pyrimid product catalog. Returns products matching your query, sorted by relevance and trust (ERC-8004 verified vendors first).","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"What you need, e.g. \"btc trading signals\" or \"image generation\""},"max_results":{"type":"number","description":"Maximum results to return (default 5)"},"max_price_usd":{"type":"number","description":"Max price per call in USD (default 10)"},"verified_only":{"type":"boolean","description":"Only ERC-8004 verified vendors"}},"required":["query"]}},{"name":"pyrimid_buy","description":"Purchase a product from the Pyrimid network. Pays via x402 (USDC on Base) and returns the product data.","inputSchema":{"type":"object","properties":{"vendor_id":{"type":"string","description":"Vendor ID from browse results"},"product_id":{"type":"string","description":"Product ID from browse results"}},"required":["vendor_id","product_id"]}},{"name":"pyrimid_preview","description":"Preview the payment split for a product without buying. Shows protocol, affiliate, and vendor shares.","inputSchema":{"type":"object","properties":{"vendor_id":{"type":"string","description":"Vendor ID"},"product_id":{"type":"string","description":"Product ID"}},"required":["vendor_id","product_id"]}},{"name":"pyrimid_categories","description":"List all product categories available on the Pyrimid network with product counts.","inputSchema":{"type":"object","properties":{}}},{"name":"pyrimid_register_affiliate","description":"Get instructions to register as a Pyrimid affiliate agent. Free, permissionless.","inputSchema":{"type":"object","properties":{"wallet_address":{"type":"string","description":"Your Base wallet address for USDC commissions"},"referrer_id":{"type":"string","description":"Affiliate who referred you"}},"required":["wallet_address"]}},{"name":"pyrimid_vendor_stats","description":"Get vendor performance stats — total volume, sales count, products listed, affiliate payouts.","inputSchema":{"type":"object","properties":{"vendor_id":{"type":"string","description":"Vendor ID (bytes16 hex)"}},"required":["vendor_id"]}},{"name":"pyrimid_commission_check","description":"Check affiliate commission earnings and performance for a given affiliate.","inputSchema":{"type":"object","properties":{"affiliate_id":{"type":"string","description":"Affiliate ID (bytes16 hex) or wallet address"}},"required":["affiliate_id"]}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:32:40","lastCheckedAt":"2026-04-14 07:31:20","mcpAgentSnippet":{"type":"url","url":"https://pyrimid.ai/api/mcp","name":"pyrimid-ai-api-mcp"}},{"id":"api-gitee-com-mcp","name":"Subdomain expansion: api.gitee.com","description":"Subdomain expansion: api.gitee.com","url":"https://api.gitee.com/mcp","sourceUrl":"https://gitee.com/","transport":"unknown","specVersion":"2024-11-05","status":"active","validated":true,"score":84,"latencyP50":5352,"toolCount":30,"tools":[{"name":"approve_pull_review","description":"Approve a pull request review","inputSchema":{"properties":{"force":{"default":false,"description":"Whether to force approve the pull request, only available for administrators","type":"boolean"},"number":{"description":"The number of the pull request, must be an integer, not a float","type":"number"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo","number"],"type":"object"}},{"name":"cancel_pull_review","description":"Reset the review status of a pull request","inputSchema":{"properties":{"number":{"description":"The number of the pull request, must be an integer, not a float","type":"number"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"},"reset_all":{"default":false,"description":"Whether to reset all reviewers, only available for administrators","type":"boolean"}},"required":["owner","repo","number"],"type":"object"}},{"name":"comment_issue","description":"Create a comment on a repository issue","inputSchema":{"properties":{"body":{"description":"The contents of the comment","type":"string"},"number":{"description":"Issue number (case sensitive, no # prefix needed)","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo","number","body"],"type":"object"}},{"name":"comment_pull","description":"Create a comment on a pull request","inputSchema":{"properties":{"body":{"description":"The contents of the comment","type":"string"},"number":{"description":"The number of the pull request, must be an integer, not a float","type":"number"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo","number","body"],"type":"object"}},{"name":"compare_branches_tags","description":"Compare two branches, tags, or commits in a repository","inputSchema":{"properties":{"base":{"description":"The base branch, tag, or commit SHA to compare from","type":"string"},"head":{"description":"The head branch, tag, or commit SHA to compare to","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo","base","head"],"type":"object"}},{"name":"create_enterprise_repo","description":"Create a enterprise repository","inputSchema":{"properties":{"auto_init":{"default":false,"description":"Whether to initialize the repository with a README file","type":"boolean"},"description":{"description":"Repository description","type":"string"},"enterprise":{"description":"Enterprise path","type":"string"},"homepage":{"description":"Repository homepage","type":"string"},"name":{"description":"Repository name","type":"string"},"path":{"description":"Repository path","type":"string"},"private":{"default":true,"description":"Whether the repository is private","type":"boolean"}},"required":["name","enterprise"],"type":"object"}},{"name":"create_issue","description":"Create an issue","inputSchema":{"properties":{"assignee":{"description":"The personal space address of the issue assignee","type":"string"},"body":{"description":"The description of the issue","type":"string"},"collaborators":{"description":"The personal space addresses of issue collaborators, separated by commas","type":"string"},"issue_type":{"description":"Enterprise custom task type, non-enterprise users must consider it as 'task'","type":"string"},"labels":{"description":"Comma-separated labels, name requirements are between 2-20 in length and non-special characters. Example: bug,performance","type":"string"},"milestone":{"description":"The milestone number","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"program":{"description":"Project ID","type":"string"},"repo":{"description":"The path of the repository","type":"string"},"security_hole":{"default":false,"description":"Set as a private issue (default is false)","type":"boolean"},"title":{"description":"The title of the issue","type":"string"}},"required":["owner","repo","title"],"type":"object"}},{"name":"create_org_repo","description":"Create a org repository","inputSchema":{"properties":{"auto_init":{"default":false,"description":"Whether to initialize the repository with a README file","type":"boolean"},"description":{"description":"Repository description","type":"string"},"homepage":{"description":"Repository homepage","type":"string"},"name":{"description":"Repository name","type":"string"},"org":{"description":"Org path","type":"string"},"path":{"description":"Repository path","type":"string"},"private":{"default":true,"description":"Whether the repository is private","type":"boolean"}},"required":["name","org"],"type":"object"}},{"name":"create_pull","description":"Create a pull request","inputSchema":{"properties":{"assignees":{"description":"The assignees of the pull request, example: (username1,username2)","type":"string"},"assignees_number":{"description":"The min number of assignees need accept of the pull request","type":"number"},"base":{"description":"The target branch of the pull request","type":"string"},"body":{"description":"The body of the pull request","type":"string"},"draft":{"description":"Whether to set the pull request as draft","type":"boolean"},"head":{"description":"The source branch of the pull request, Format: branch (master) or: path_with_namespace:branch (oschina/gitee:master)","type":"string"},"issue":{"description":"The issue of the pull request","type":"string"},"labels":{"description":"The labels of the pull request. example: bug,performance","type":"string"},"milestone_number":{"description":"The milestone number of the pull request","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"},"testers":{"description":"The testers of the pull request, example: (username1,username2)","type":"string"},"testers_number":{"description":"The min number of testers need accept of the pull request","type":"number"},"title":{"description":"The title of the pull request","type":"string"}},"required":["owner","repo","title","head","base"],"type":"object"}},{"name":"create_release","description":"Create a release","inputSchema":{"properties":{"body":{"description":"The description of the release","type":"string"},"name":{"description":"The name of the release","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"prerelease":{"default":false,"description":"Whether the release is a prerelease","type":"boolean"},"repo":{"description":"The path of the repository","type":"string"},"tag_name":{"description":"The name of the tag","type":"string"},"target_commitish":{"description":"The branch name or commit SHA, defaults to the repository's default branch","type":"string"}},"required":["owner","repo","tag_name","name","body","target_commitish"],"type":"object"}},{"name":"create_user_repo","description":"Create a user repository","inputSchema":{"properties":{"auto_init":{"default":false,"description":"Whether to initialize the repository with a README file","type":"boolean"},"description":{"description":"Repository description","type":"string"},"homepage":{"description":"Repository homepage","type":"string"},"name":{"description":"Repository name","type":"string"},"path":{"description":"Repository path","type":"string"},"private":{"default":true,"description":"Whether the repository is private","type":"boolean"}},"required":["name"],"type":"object"}},{"name":"fork_repository","description":"Fork a repository","inputSchema":{"properties":{"name":{"description":"The name of the forked repository, default is the same as the original repository","type":"string"},"organization":{"description":"The full address of the organization space to which the repository belongs, default for current user","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"path":{"description":"The path of the forked repository, default is the same as the original repository","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo"],"type":"object"}},{"name":"get_diff_files","description":"Get a pull request diff files","inputSchema":{"properties":{"number":{"description":"The number of the pull request, must be an integer, not a float","type":"number"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo","number"],"type":"object"}},{"name":"get_file_content","description":"Get the content of the specified file in the repository","inputSchema":{"properties":{"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"path":{"description":"The path of the file","type":"string"},"ref":{"description":"The branch name or commit ID","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo","path"],"type":"object"}},{"name":"get_pull_detail","description":"Get a pull request detail","inputSchema":{"properties":{"number":{"description":"The number of the pull request, must be an integer, not a float","type":"number"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo","number"],"type":"object"}},{"name":"get_repo_issue_detail","description":"Get the detail of an issue","inputSchema":{"properties":{"number":{"description":"Issue number (case sensitive, no # prefix needed)","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["number","owner","repo"],"type":"object"}},{"name":"get_user_info","description":"This is a tool from the gitee MCP server.\nGet information about the authenticated user","inputSchema":{"properties":{},"type":"object"}},{"name":"list_issue_comments","description":"Get all comments for a repository issue","inputSchema":{"properties":{"number":{"description":"Issue number (case sensitive, no # prefix needed)","type":"string"},"order":{"default":"asc","description":"Sort direction: asc(default), desc","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"page":{"default":1,"description":"Current page number","type":"number"},"per_page":{"default":20,"description":"Number of results per page, maximum 100","type":"number"},"repo":{"description":"The path of the repository","type":"string"},"since":{"description":"Only comments updated at or after this time are returned. This is a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ","type":"string"}},"required":["owner","repo","number"],"type":"object"}},{"name":"list_pull_comments","description":"List all comments for a pull request","inputSchema":{"properties":{"number":{"description":"The number of the pull request, must be an integer, not a float","type":"number"},"order":{"default":"asc","description":"Sort direction: asc(default), desc","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"page":{"default":1,"description":"Current page number","type":"number"},"per_page":{"default":20,"description":"Number of results per page, maximum 100","type":"number"},"repo":{"description":"The path of the repository","type":"string"},"since":{"description":"Only comments updated at or after this time are returned. This is a timestamp in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ","type":"string"}},"required":["owner","repo","number"],"type":"object"}},{"name":"list_releases","description":"List repository releases","inputSchema":{"properties":{"direction":{"description":"Optional. Ascending/descending. Not filled in is ascending","enum":["asc","desc"],"type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"page":{"default":1,"description":"Current page number","type":"number"},"per_page":{"default":20,"description":"Number of results per page, maximum 100","type":"number"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo"],"type":"object"}},{"name":"list_repo_issues","description":"List all issues in a repository","inputSchema":{"properties":{"created_at":{"description":"Issue creation time in format: 2006-01-02T15:04:05Z","type":"string"},"deadline":{"description":"Planned completion date in format: 2006-01-02T15:04:05Z","type":"string"},"direction":{"description":"Sort direction: ascending (asc) or descending (desc)","enum":["asc","desc"],"type":"string"},"filter":{"description":"Filter parameter: assigned to authorized user (assigned), created by authorized user (created), all issues involving authorized user (all). Default: assigned","enum":["assigned","created","all"],"type":"string"},"finished_at":{"description":"Issue completion time in format: 2006-01-02T15:04:05Z","type":"string"},"labels":{"description":"Comma-separated labels. Example: bug,performance","type":"string"},"owner":{"description":"Repository owner's namespace (enterprise, organization or personal path)","type":"string"},"page":{"default":1,"description":"Current page number","type":"number"},"per_page":{"default":20,"description":"Number of items per page, maximum 100","type":"number"},"q":{"description":"Search keywords","type":"string"},"repo":{"description":"Repository path","type":"string"},"schedule":{"description":"Planned start date in format: 2006-01-02T15:04:05Z","type":"string"},"since":{"description":"Start update time in ISO 8601 format","type":"string"},"sort":{"description":"Sort field: creation time (created), update time (updated). Default: created","enum":["created","updated"],"type":"string"},"state":{"description":"Issue state: open, progressing, closed, rejected","enum":["open","progressing","closed","rejected","all"],"type":"string"}},"required":["owner","repo"],"type":"object"}},{"name":"list_repo_pulls","description":"List repository pulls","inputSchema":{"properties":{"assignee":{"description":"Reviewer's username","type":"string"},"author":{"description":"PR creator's username","type":"string"},"base":{"description":"Target branch name for the pull request","type":"string"},"direction":{"description":"Ascending/descending order","enum":["asc","desc"],"type":"string"},"head":{"description":"Source branch of the PR. Format: branch or username:branch","type":"string"},"labels":{"description":"Comma-separated labels, e.g.: bug,performance","type":"string"},"milestone_number":{"description":"Milestone number (ID)","type":"number"},"owner":{"description":"Repository owner's namespace","type":"string"},"page":{"default":1,"description":"Current page number","type":"number"},"per_page":{"default":20,"description":"Items per page (max 100)","type":"number"},"repo":{"description":"Repository namespace","type":"string"},"since":{"description":"Start update time in ISO 8601 format","type":"string"},"sort":{"description":"Sort field, default by creation time","enum":["created","updated","popularity","long-running"],"type":"string"},"state":{"description":"State of the pull request","enum":["open","closed","merged","all"],"type":"string"},"tester":{"description":"Tester's username","type":"string"}},"required":["owner","repo"],"type":"object"}},{"name":"list_user_notifications","description":"List all notifications for authorized user","inputSchema":{"properties":{"before":{"description":"Only list notifications updated before the given time, requiring the time format to be ISO 8601","type":"string"},"page":{"default":1,"description":"Page number","type":"number"},"participating":{"default":false,"description":"Only list notifications where the user is directly participating or mentioned","type":"boolean"},"per_page":{"default":20,"description":"Number of results per page","type":"number"},"since":{"description":"Only list notifications updated after the given time, requiring the time format to be ISO 8601","type":"string"},"type":{"default":"all","description":"Filter notifications of a specified type, all: all, event: event notification, referer: @ notification","enum":["all","event","referer"],"type":"string"},"unread":{"default":false,"description":"Only list unread notifications","type":"boolean"}},"type":"object"}},{"name":"list_user_repos","description":"List user authorized repositories","inputSchema":{"properties":{"affiliation":{"description":"Affiliation between user and repository","enum":["owner","collaborator","organization_member","enterprise_member","admin"],"type":"string"},"direction":{"default":"asc","description":"Sorting direction: ascending (asc), descending (desc). Default: asc","enum":["asc","desc"],"type":"string"},"page":{"default":1,"description":"Page number","type":"number"},"per_page":{"default":20,"description":"Number of results per page","type":"number"},"q":{"description":"Search keywords","type":"string"},"sort":{"default":"full_name","description":"Sorting method: creation time (created), update time (updated), last push time (pushed), warehouse ownership and name (full_name). Default: full_name","enum":["created","updated","pushed","full_name"],"type":"string"},"type":{"description":"Filter user repositories: their creation (owner), personal (personal), their membership (member), public (public), private (private), cannot be used together with visibility or affiliation parameters, otherwise a 422 error will be reported","enum":["all","owner","personal","member","public","private"],"type":"string"},"visibility":{"description":"Visibility of repository","enum":["public","private","all"],"type":"string"}},"type":"object"}},{"name":"merge_pull","description":"Merge a pull request","inputSchema":{"properties":{"close_related_issue":{"description":"Whether to close the related issue after merging","type":"boolean"},"description":{"description":"The description of the merge commit","type":"string"},"merge_method":{"default":"merge","description":"The merge method to use","enum":["merge","squash","rebase"],"type":"string"},"number":{"description":"The number of the pull request","type":"number"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"prune_source_branch":{"description":"Whether to delete the source branch after merging","type":"boolean"},"repo":{"description":"The path of the repository","type":"string"},"title":{"description":"The title of the merge commit","type":"string"}},"required":["owner","repo","number"],"type":"object"}},{"name":"search_files_by_content","description":"Search files by content in a repository","inputSchema":{"properties":{"after_context":{"description":"Number of context lines to include after each match","type":"number"},"before_context":{"description":"Number of context lines to include before each match","type":"number"},"limit":{"default":20,"description":"Maximum number of search results to return (1-100)","type":"number"},"literal_pathspec":{"default":false,"description":"Treat provided paths as literal strings and disable glob matching","type":"boolean"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"paths":{"description":"Comma-separated list of paths or glob patterns to limit the search scope","type":"string"},"query":{"description":"The search keywords","type":"string"},"ref":{"description":"Branch, tag, or commit to search; defaults to the repository's default branch","type":"string"},"repo":{"description":"The path of the repository","type":"string"}},"required":["owner","repo","query"],"type":"object"}},{"name":"search_open_source_repositories","description":"Search open source repositories on Gitee","inputSchema":{"properties":{"from":{"default":0,"description":"Search starting position","type":"number"},"q":{"description":"Search keywords","type":"string"},"size":{"default":20,"description":"Page size","type":"number"},"sort_by_f":{"description":"Sorting field","enum":["star","last_push_at"],"type":"string"}},"required":["q"],"type":"object"}},{"name":"search_users","description":"Search users on Gitee","inputSchema":{"properties":{"page":{"default":1,"description":"Page number","type":"number"},"per_page":{"default":20,"description":"Number of results per page","type":"number"},"q":{"description":"Search keywords","type":"string"}},"required":["q"],"type":"object"}},{"name":"update_issue","description":"Update an issue","inputSchema":{"properties":{"assignee":{"description":"The personal space address of the issue assignee","type":"string"},"body":{"description":"The description of the issue","type":"string"},"collaborators":{"description":"The personal space addresses of issue collaborators, separated by commas","type":"string"},"issue_type":{"description":"Enterprise custom task type, non-enterprise users must consider it as 'task'","type":"string"},"labels":{"description":"Comma-separated labels, name requirements are between 2-20 in length and non-special characters. Example: bug,performance","type":"string"},"milestone":{"description":"The milestone number","type":"string"},"number":{"description":"The number of the issue","type":"string"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"program":{"description":"Project ID","type":"string"},"repo":{"description":"The path of the repository","type":"string"},"security_hole":{"default":false,"description":"Set as a private issue (default is false)","type":"boolean"},"state":{"description":"The state of the issue","enum":["open","progressing","closed"],"type":"string"},"title":{"description":"The title of the issue","type":"string"}},"required":["number","owner","repo","title"],"type":"object"}},{"name":"update_pull","description":"Update a pull request","inputSchema":{"properties":{"assignees":{"description":"The assignees of the pull request, example: (username1,username2)","type":"string"},"assignees_number":{"description":"The min number of assignees need accept of the pull request","type":"number"},"body":{"description":"The body of the pull request","type":"string"},"draft":{"description":"Whether to set the pull request as draft","type":"boolean"},"issue":{"description":"The issue of the pull request","type":"string"},"labels":{"description":"The labels of the pull request. example: bug,performance","type":"string"},"milestone_number":{"description":"The milestone number of the pull request","type":"string"},"number":{"description":"The number of the pull request","type":"number"},"owner":{"description":"The space address to which the repository belongs (the address path of the enterprise, organization or individual)","type":"string"},"repo":{"description":"The path of the repository","type":"string"},"state":{"description":"The state of the pull request","enum":["closed","open"],"type":"string"},"testers":{"description":"The testers of the pull request, example: (username1,username2)","type":"string"},"testers_number":{"description":"The min number of testers need accept of the pull request","type":"number"},"title":{"description":"The title of the pull request","type":"string"}},"required":["owner","repo","number"],"type":"object"}}],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:37:01","lastCheckedAt":"2026-04-14 07:31:25","mcpAgentSnippet":{"type":"url","url":"https://api.gitee.com/mcp","name":"api-gitee-com-mcp"}},{"id":"api-serpstat-com-mcp","name":"Subdomain expansion: api.serpstat.com","description":"Subdomain expansion: api.serpstat.com","url":"https://api.serpstat.com/mcp","sourceUrl":"https://serpstat.com/","transport":"unknown","specVersion":null,"status":"active","validated":true,"score":65,"latencyP50":254,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:40:35","lastCheckedAt":"2026-04-14 07:45:54","mcpAgentSnippet":{"type":"url","url":"https://api.serpstat.com/mcp","name":"api-serpstat-com-mcp"}},{"id":"api-serpstat-com-tools","name":"Path expansion from https://api.serpstat.com/","description":"Path expansion from https://api.serpstat.com/","url":"https://api.serpstat.com/tools","sourceUrl":"https://api.serpstat.com/","transport":"unknown","specVersion":null,"status":"active","validated":true,"score":65,"latencyP50":224,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:56:43","lastCheckedAt":"2026-04-14 07:31:18","mcpAgentSnippet":{"type":"url","url":"https://api.serpstat.com/tools","name":"api-serpstat-com-tools"}},{"id":"api-serpstat-com-rpc","name":"Path expansion from https://api.serpstat.com/","description":"Path expansion from https://api.serpstat.com/","url":"https://api.serpstat.com/rpc","sourceUrl":"https://api.serpstat.com/","transport":"unknown","specVersion":null,"status":"active","validated":true,"score":65,"latencyP50":222,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:56:43","lastCheckedAt":"2026-04-14 07:31:18","mcpAgentSnippet":{"type":"url","url":"https://api.serpstat.com/rpc","name":"api-serpstat-com-rpc"}},{"id":"api-serpstat-com","name":"Subdomain expansion: api.serpstat.com","description":"Subdomain expansion: api.serpstat.com","url":"https://api.serpstat.com/","sourceUrl":"https://serpstat.com/","transport":"unknown","specVersion":null,"status":"active","validated":true,"score":60,"latencyP50":366,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:40:35","lastCheckedAt":"2026-04-14 07:45:54","mcpAgentSnippet":{"type":"url","url":"https://api.serpstat.com/","name":"api-serpstat-com"}},{"id":"api-serpstat-com-api-mcp","name":"Path expansion from https://api.serpstat.com/","description":"Path expansion from https://api.serpstat.com/","url":"https://api.serpstat.com/api/mcp","sourceUrl":"https://api.serpstat.com/","transport":"http","specVersion":null,"status":"active","validated":true,"score":60,"latencyP50":338,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:56:43","lastCheckedAt":"2026-04-14 07:31:18","mcpAgentSnippet":{"type":"url","url":"https://api.serpstat.com/api/mcp","name":"api-serpstat-com-api-mcp"}},{"id":"mcp-probe-dev","name":"Subdomain expansion: mcp.probe.dev","description":"Subdomain expansion: mcp.probe.dev","url":"https://mcp.probe.dev/","sourceUrl":"https://probe.dev/","transport":"unknown","specVersion":"2024-11-05","status":"mcp_partial","validated":false,"score":45,"latencyP50":88,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:35:47","lastCheckedAt":"2026-04-14 07:29:15","mcpAgentSnippet":{"type":"url","url":"https://mcp.probe.dev/","name":"mcp-probe-dev"}},{"id":"mcp-probe-dev-api-mcp","name":"Path expansion from https://mcp.probe.dev/mcp","description":"Path expansion from https://mcp.probe.dev/mcp","url":"https://mcp.probe.dev/api/mcp","sourceUrl":"https://mcp.probe.dev/mcp","transport":"http","specVersion":"2024-11-05","status":"mcp_partial","validated":false,"score":45,"latencyP50":88,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:48:18","lastCheckedAt":"2026-04-14 07:29:15","mcpAgentSnippet":{"type":"url","url":"https://mcp.probe.dev/api/mcp","name":"mcp-probe-dev-api-mcp"}},{"id":"mcp-probe-dev-v1-mcp","name":"Path expansion from https://mcp.probe.dev/mcp","description":"Path expansion from https://mcp.probe.dev/mcp","url":"https://mcp.probe.dev/v1/mcp","sourceUrl":"https://mcp.probe.dev/mcp","transport":"http","specVersion":"2024-11-05","status":"mcp_partial","validated":false,"score":45,"latencyP50":88,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:48:18","lastCheckedAt":"2026-04-14 07:29:15","mcpAgentSnippet":{"type":"url","url":"https://mcp.probe.dev/v1/mcp","name":"mcp-probe-dev-v1-mcp"}},{"id":"mcp-probe-dev-well-known-mcp","name":"Path expansion from https://mcp.probe.dev/mcp","description":"Path expansion from https://mcp.probe.dev/mcp","url":"https://mcp.probe.dev/.well-known/mcp","sourceUrl":"https://mcp.probe.dev/mcp","transport":"http","specVersion":"2024-11-05","status":"mcp_partial","validated":false,"score":45,"latencyP50":88,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:48:18","lastCheckedAt":"2026-04-14 07:29:15","mcpAgentSnippet":{"type":"url","url":"https://mcp.probe.dev/.well-known/mcp","name":"mcp-probe-dev-well-known-mcp"}},{"id":"mcp-probe-dev-mcp-json","name":"Path expansion from https://mcp.probe.dev/mcp","description":"Path expansion from https://mcp.probe.dev/mcp","url":"https://mcp.probe.dev/mcp.json","sourceUrl":"https://mcp.probe.dev/mcp","transport":"http","specVersion":"2024-11-05","status":"mcp_partial","validated":false,"score":45,"latencyP50":87,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:48:18","lastCheckedAt":"2026-04-14 07:29:15","mcpAgentSnippet":{"type":"url","url":"https://mcp.probe.dev/mcp.json","name":"mcp-probe-dev-mcp-json"}},{"id":"mcp-probe-dev-tools","name":"Path expansion from https://mcp.probe.dev/mcp","description":"Path expansion from https://mcp.probe.dev/mcp","url":"https://mcp.probe.dev/tools","sourceUrl":"https://mcp.probe.dev/mcp","transport":"unknown","specVersion":"2024-11-05","status":"mcp_partial","validated":false,"score":45,"latencyP50":88,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:48:19","lastCheckedAt":"2026-04-14 07:29:15","mcpAgentSnippet":{"type":"url","url":"https://mcp.probe.dev/tools","name":"mcp-probe-dev-tools"}},{"id":"mcp-probe-dev-rpc","name":"Path expansion from https://mcp.probe.dev/mcp","description":"Path expansion from https://mcp.probe.dev/mcp","url":"https://mcp.probe.dev/rpc","sourceUrl":"https://mcp.probe.dev/mcp","transport":"unknown","specVersion":"2024-11-05","status":"mcp_partial","validated":false,"score":45,"latencyP50":87,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:48:19","lastCheckedAt":"2026-04-14 07:29:15","mcpAgentSnippet":{"type":"url","url":"https://mcp.probe.dev/rpc","name":"mcp-probe-dev-rpc"}},{"id":"mcp-probe-dev-mcp","name":"Subdomain expansion: mcp.probe.dev","description":"Subdomain expansion: mcp.probe.dev","url":"https://mcp.probe.dev/mcp","sourceUrl":"https://probe.dev/","transport":"unknown","specVersion":"2024-11-05","status":"mcp_partial","validated":false,"score":40,"latencyP50":284,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:35:46","lastCheckedAt":"2026-04-14 07:29:15","mcpAgentSnippet":{"type":"url","url":"https://mcp.probe.dev/mcp","name":"mcp-probe-dev-mcp"}},{"id":"mcp-onrender-com-mcp","name":"Subdomain expansion: mcp.onrender.com","description":"Subdomain expansion: mcp.onrender.com","url":"https://mcp.onrender.com/mcp","sourceUrl":"https://onrender.com/","transport":"unknown","specVersion":"2024-11-05","status":"mcp_partial","validated":false,"score":40,"latencyP50":253,"toolCount":0,"tools":[],"tags":[],"authRequired":false,"authProvider":null,"firstSeenAt":"2026-03-17 11:34:36","lastCheckedAt":"2026-04-14 07:28:44","mcpAgentSnippet":{"type":"url","url":"https://mcp.onrender.com/mcp","name":"mcp-onrender-com-mcp"}},{"id":"mcp-replicate-com-mcp-json","name":"Path expansion from https://mcp.replicate.com/","description":"Path expansion from https://mcp.replicate.com/","url":"https://mcp.replicate.com/mcp.json","sourceUrl":"https://mcp.replicate.com/","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-04-13 07:54:20","lastCheckedAt":"2026-04-13 07:54:20","mcpAgentSnippet":{"type":"url","url":"https://mcp.replicate.com/mcp.json","name":"mcp-replicate-com-mcp-json"}},{"id":"kompressr-com-api-mcp","name":"Path expansion from https://kompressr.com/agents","description":"Path expansion from https://kompressr.com/agents","url":"https://kompressr.com/api/mcp","sourceUrl":"https://kompressr.com/agents","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-03-29 17:50:44","lastCheckedAt":"2026-04-12 17:51:14","mcpAgentSnippet":{"type":"url","url":"https://kompressr.com/api/mcp","name":"kompressr-com-api-mcp"}},{"id":"kompressr-com-v1-mcp","name":"Path expansion from https://kompressr.com/agents","description":"Path expansion from https://kompressr.com/agents","url":"https://kompressr.com/v1/mcp","sourceUrl":"https://kompressr.com/agents","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-03-29 17:50:44","lastCheckedAt":"2026-04-12 17:51:14","mcpAgentSnippet":{"type":"url","url":"https://kompressr.com/v1/mcp","name":"kompressr-com-v1-mcp"}},{"id":"kompressr-com-mcp-json","name":"Path expansion from https://kompressr.com/agents","description":"Path expansion from https://kompressr.com/agents","url":"https://kompressr.com/mcp.json","sourceUrl":"https://kompressr.com/agents","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-03-29 17:50:44","lastCheckedAt":"2026-04-12 17:51:14","mcpAgentSnippet":{"type":"url","url":"https://kompressr.com/mcp.json","name":"kompressr-com-mcp-json"}},{"id":"kompressr-com-tools","name":"Path expansion from https://kompressr.com/agents","description":"Path expansion from https://kompressr.com/agents","url":"https://kompressr.com/tools","sourceUrl":"https://kompressr.com/agents","transport":"unknown","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-03-29 17:50:45","lastCheckedAt":"2026-04-12 17:51:14","mcpAgentSnippet":{"type":"url","url":"https://kompressr.com/tools","name":"kompressr-com-tools"}},{"id":"kompressr-com-rpc","name":"Path expansion from https://kompressr.com/agents","description":"Path expansion from https://kompressr.com/agents","url":"https://kompressr.com/rpc","sourceUrl":"https://kompressr.com/agents","transport":"unknown","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-03-29 17:50:45","lastCheckedAt":"2026-04-12 17:51:14","mcpAgentSnippet":{"type":"url","url":"https://kompressr.com/rpc","name":"kompressr-com-rpc"}},{"id":"kompressr-com-well-known-mcp","name":"Path expansion from https://kompressr.com/agents","description":"Path expansion from https://kompressr.com/agents","url":"https://kompressr.com/.well-known/mcp","sourceUrl":"https://kompressr.com/agents","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-03-29 17:50:45","lastCheckedAt":"2026-04-12 17:51:14","mcpAgentSnippet":{"type":"url","url":"https://kompressr.com/.well-known/mcp","name":"kompressr-com-well-known-mcp"}},{"id":"mcp-replicate-com-mcp","name":"Subdomain expansion: mcp.replicate.com","description":"Subdomain expansion: mcp.replicate.com","url":"https://mcp.replicate.com/mcp","sourceUrl":"https://replicate.com/","transport":"unknown","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-04-12 07:54:21","lastCheckedAt":"2026-04-12 07:54:21","mcpAgentSnippet":{"type":"url","url":"https://mcp.replicate.com/mcp","name":"mcp-replicate-com-mcp"}},{"id":"mcp-close-com-mcp","name":"Subdomain expansion: mcp.close.com","description":"Subdomain expansion: mcp.close.com","url":"https://mcp.close.com/mcp","sourceUrl":"https://close.com/","transport":"unknown","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-04-12 07:54:20","lastCheckedAt":"2026-04-12 07:54:20","mcpAgentSnippet":{"type":"url","url":"https://mcp.close.com/mcp","name":"mcp-close-com-mcp"}},{"id":"api-osmtalk-com-api-mcp","name":"Path expansion from https://api.osmtalk.com/","description":"Path expansion from https://api.osmtalk.com/","url":"https://api.osmtalk.com/api/mcp","sourceUrl":"https://api.osmtalk.com/","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-04-04 21:51:05","lastCheckedAt":"2026-04-11 21:51:28","mcpAgentSnippet":{"type":"url","url":"https://api.osmtalk.com/api/mcp","name":"api-osmtalk-com-api-mcp"}},{"id":"www-edubase-net-tools","name":"Path expansion from https://www.edubase.net","description":"Path expansion from https://www.edubase.net","url":"https://www.edubase.net/tools","sourceUrl":"https://www.edubase.net","transport":"unknown","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-03-21 16:58:17","lastCheckedAt":"2026-04-11 16:58:50","mcpAgentSnippet":{"type":"url","url":"https://www.edubase.net/tools","name":"www-edubase-net-tools"}},{"id":"api-replicate-com-v1-mcp","name":"Path expansion from https://api.replicate.com/openapi.json","description":"Path expansion from https://api.replicate.com/openapi.json","url":"https://api.replicate.com/v1/mcp","sourceUrl":"https://api.replicate.com/openapi.json","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-04-11 07:54:39","lastCheckedAt":"2026-04-11 07:54:39","mcpAgentSnippet":{"type":"url","url":"https://api.replicate.com/v1/mcp","name":"api-replicate-com-v1-mcp"}},{"id":"medium-com-v1-mcp","name":"Path expansion from https://medium.com/@wassenger/introducing-whatsapp-mcp-ai-co","description":"Path expansion from https://medium.com/@wassenger/introducing-whatsapp-mcp-ai-connector-3d393b52d1b0","url":"https://medium.com/v1/mcp","sourceUrl":"https://medium.com/@wassenger/introducing-whatsapp-mcp-ai-connector-3d393b52d1b0","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-03-27 14:47:02","lastCheckedAt":"2026-04-10 14:47:12","mcpAgentSnippet":{"type":"url","url":"https://medium.com/v1/mcp","name":"medium-com-v1-mcp"}},{"id":"api-apis-guru-api-mcp","name":"Path expansion from https://api.apis.guru/v2/specs/1forge.com/0.0.1/swagger.yaml","description":"Path expansion from https://api.apis.guru/v2/specs/1forge.com/0.0.1/swagger.yaml","url":"https://api.apis.guru/api/mcp","sourceUrl":"https://api.apis.guru/v2/specs/1forge.com/0.0.1/swagger.yaml","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-04-10 07:54:17","lastCheckedAt":"2026-04-10 07:54:17","mcpAgentSnippet":{"type":"url","url":"https://api.apis.guru/api/mcp","name":"api-apis-guru-api-mcp"}},{"id":"api-apis-guru-v1-mcp","name":"Path expansion from https://api.apis.guru/v2/specs/1forge.com/0.0.1/swagger.yaml","description":"Path expansion from https://api.apis.guru/v2/specs/1forge.com/0.0.1/swagger.yaml","url":"https://api.apis.guru/v1/mcp","sourceUrl":"https://api.apis.guru/v2/specs/1forge.com/0.0.1/swagger.yaml","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-04-10 07:54:17","lastCheckedAt":"2026-04-10 07:54:17","mcpAgentSnippet":{"type":"url","url":"https://api.apis.guru/v1/mcp","name":"api-apis-guru-v1-mcp"}},{"id":"api-apis-guru-mcp-json","name":"Path expansion from https://api.apis.guru/v2/specs/1forge.com/0.0.1/swagger.yaml","description":"Path expansion from https://api.apis.guru/v2/specs/1forge.com/0.0.1/swagger.yaml","url":"https://api.apis.guru/mcp.json","sourceUrl":"https://api.apis.guru/v2/specs/1forge.com/0.0.1/swagger.yaml","transport":"http","specVersion":null,"status":"auth_gated","validated":false,"score":35,"latencyP50":0,"toolCount":0,"tools":[],"tags":[],"authRequired":true,"authProvider":"bearer","firstSeenAt":"2026-04-10 07:54:17","lastCheckedAt":"2026-04-10 07:54:17","mcpAgentSnippet":{"type":"url","url":"https://api.apis.guru/mcp.json","name":"api-apis-guru-mcp-json"}}]}