{
  "name": "tilopay-insight-engine",
  "title": "Tilopay Insight Engine",
  "version": "0.3.0",
  "verified_at": "2026-09-03",
  "url": "https://mcp.tilopay.com/mcp",
  "transport": "streamable-http",
  "auth": {
    "type": "oauth",
    "note": "El manifiesto declara autenticación OAuth. El usuario dedicado del comercio se autentica por ese flujo; no son credenciales de API pegadas en el cliente."
  },
  "documentation": "https://www.tilopay.com/developers",
  "access_levels": {
    "read": "Solo lee. No modifica nada en la cuenta del comercio.",
    "write": "Modifica estado en la cuenta del comercio.",
    "destructive": "Modifica estado de forma sensible: mueve dinero o borra objetos. Exigir confirmación humana."
  },
  "counts": {
    "total": 39,
    "read": 29,
    "write": 5,
    "destructive": 5,
    "mutating": 10
  },
  "groups": [
    {
      "slug": "ventas",
      "title": "Ventas y transacciones",
      "tools": 5,
      "availability": "default"
    },
    {
      "slug": "enlaces-de-pago",
      "title": "Enlaces de pago",
      "tools": 5,
      "availability": "default"
    },
    {
      "slug": "catalogo",
      "title": "Catálogo",
      "tools": 2,
      "availability": "default"
    },
    {
      "slug": "contactos",
      "title": "Contactos",
      "tools": 3,
      "availability": "default"
    },
    {
      "slug": "recurrentes",
      "title": "Cobros recurrentes",
      "tools": 5,
      "availability": "default"
    },
    {
      "slug": "tarjetas-guardadas",
      "title": "Tarjetas guardadas y cobros masivos",
      "tools": 5,
      "availability": "default"
    },
    {
      "slug": "soporte",
      "title": "Soporte y diagnóstico",
      "tools": 3,
      "availability": "default"
    },
    {
      "slug": "api-bancario",
      "title": "Herramientas bancarias",
      "tools": 11,
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario."
    }
  ],
  "tools": [
    {
      "name": "tilopay_list_transactions",
      "title": "Listar transacciones de Tilopay",
      "description": "Consulta las transacciones de Tilopay en un rango de fechas (formato YYYY-MM-DD HH:mm:ss). Permite filtrar por moneda, número de orden, correo del cliente y ambiente.",
      "group": "ventas",
      "group_title": "Ventas y transacciones",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/ventas",
      "api_endpoint": "POST /api/v1/consultTransactions",
      "input": {
        "parameters": [
          {
            "name": "startDate",
            "type": "string",
            "required": true,
            "description": "Fecha inicial, ej. \"2026-08-01 00:00:00\""
          },
          {
            "name": "endDate",
            "type": "string",
            "required": true,
            "description": "Fecha final, ej. \"2026-08-31 23:59:59\""
          },
          {
            "name": "onlyAproved",
            "type": "boolean",
            "required": false,
            "description": "Solo transacciones aprobadas (por defecto true)"
          },
          {
            "name": "environment",
            "type": "string",
            "required": false,
            "description": "Ambiente, por defecto production",
            "enum": [
              "production",
              "test"
            ]
          },
          {
            "name": "currency",
            "type": "array<string>",
            "required": false,
            "description": "Monedas, ej. [\"USD\",\"CRC\"]"
          },
          {
            "name": "orderNumber",
            "type": "string",
            "required": false,
            "description": "Filtrar por número de orden"
          },
          {
            "name": "email",
            "type": "string",
            "required": false,
            "description": "Filtrar por correo del cliente"
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Máximo de filas a devolver (por defecto 100, máximo 500)"
          }
        ]
      },
      "output": {
        "structuredContent": "{ total, transactions[], environmentNote }",
        "description": "total = filas encontradas antes de aplicar limit; transactions = las filas devueltas; environmentNote avisa si el ambiente consultado no trajo filas."
      }
    },
    {
      "name": "tilopay_get_transaction",
      "title": "Consultar una transacción",
      "description": "Obtiene el detalle de una transacción específica de Tilopay a partir de su número de orden.",
      "group": "ventas",
      "group_title": "Ventas y transacciones",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/ventas",
      "api_endpoint": "POST /api/v1/consult",
      "input": {
        "parameters": [
          {
            "name": "orderNumber",
            "type": "string",
            "required": true,
            "description": "Número de orden de la transacción"
          },
          {
            "name": "merchantId",
            "type": "string",
            "required": false,
            "description": "ID de comercio (opcional)"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_sales_summary",
      "title": "Resumen y tendencias de ventas",
      "description": "Calcula métricas de ventas a partir de las transacciones de Tilopay: totales por moneda, ticket promedio, tasa de aprobación, ventas por día, día de la semana y hora, mejores clientes, motivos de rechazo y tendencia.",
      "group": "ventas",
      "group_title": "Ventas y transacciones",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/ventas",
      "api_endpoint": "POST /api/v1/consultTransactions (y cálculo local)",
      "input": {
        "parameters": [
          {
            "name": "startDate",
            "type": "string",
            "required": true,
            "description": "Fecha inicial \"YYYY-MM-DD HH:mm:ss\""
          },
          {
            "name": "endDate",
            "type": "string",
            "required": true,
            "description": "Fecha final \"YYYY-MM-DD HH:mm:ss\""
          },
          {
            "name": "includeDeclined",
            "type": "boolean",
            "required": false,
            "description": "Incluir transacciones rechazadas para medir tasa de aprobación (por defecto true)"
          },
          {
            "name": "environment",
            "type": "string",
            "required": false,
            "enum": [
              "production",
              "test"
            ]
          },
          {
            "name": "currency",
            "type": "array<string>",
            "required": false
          }
        ]
      },
      "output": {
        "structuredContent": "{ summary, trends, environmentNote }",
        "description": "summary trae range, timezoneNote, totalRows, payments {total, approved, declined, approvalRate}, refunds {total, approved, failed, successRate}, byCurrency por moneda con pagos, costos desglosados (commission, iva_commission, cost, cost_iva, retention_iva, retention_rent, totalDeducted, taxWithholdings, pspCost), netToLiquidate, reconciles y reconciliationDelta; reembolsos; y netForPeriod. Además daily, sample, byWeekday, byHour, topCustomers, declineReasons, refundFailureReasons y transactionTypes. byWeekday, byHour y topCustomers vienen en null si la muestra es insuficiente (menos de 30 filas o menos de 5 días distintos). trends viene en null en ese mismo caso. Las horas y días están en UTC."
      }
    },
    {
      "name": "tilopay_analyze_sales",
      "title": "Agente analista de ventas",
      "description": "Agente que analiza las transacciones de Tilopay en un rango de fechas y devuelve un informe en lenguaje natural: desempeño, tendencias, estacionalidad, calidad de aprobación, riesgos y recomendaciones accionables.",
      "group": "ventas",
      "group_title": "Ventas y transacciones",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/ventas",
      "api_endpoint": "POST /api/v1/consultTransactions (y análisis con modelo)",
      "input": {
        "parameters": [
          {
            "name": "startDate",
            "type": "string",
            "required": true,
            "description": "Fecha inicial \"YYYY-MM-DD HH:mm:ss\""
          },
          {
            "name": "endDate",
            "type": "string",
            "required": true,
            "description": "Fecha final \"YYYY-MM-DD HH:mm:ss\""
          },
          {
            "name": "question",
            "type": "string",
            "required": false,
            "description": "Pregunta o enfoque específico para el análisis (opcional)"
          },
          {
            "name": "environment",
            "type": "string",
            "required": false,
            "enum": [
              "production",
              "test"
            ]
          },
          {
            "name": "currency",
            "type": "array<string>",
            "required": false
          }
        ]
      },
      "output": {
        "structuredContent": "{ report, summary, trends, environmentNote }",
        "description": "report es el informe en lenguaje natural; summary y trends son los mismos de tilopay_sales_summary. Si no hay transacciones en el rango, devuelve solo un texto avisándolo, sin structuredContent."
      }
    },
    {
      "name": "tilopay_modify_transaction",
      "title": "Capturar, reembolsar o reversar",
      "description": "Modifica una transacción de Tilopay: captura (capture), reembolso (refund) o reversión (reversal) por el monto indicado. Operación sensible: afecta dinero real.",
      "group": "ventas",
      "group_title": "Ventas y transacciones",
      "access": "destructive",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/ventas",
      "api_endpoint": "POST /api/v1/processModification",
      "input": {
        "parameters": [
          {
            "name": "orderNumber",
            "type": "string",
            "required": true,
            "description": "Número de orden de la transacción"
          },
          {
            "name": "action",
            "type": "string",
            "required": true,
            "description": "Tipo de modificación",
            "enum": [
              "capture",
              "refund",
              "reversal"
            ]
          },
          {
            "name": "amount",
            "type": "number",
            "required": true,
            "description": "Monto a modificar, mayor que cero"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_create_payment_link",
      "title": "Crear enlace de pago",
      "description": "Crea un enlace de pago (payment link) en Tilopay para cobrar un monto específico.",
      "group": "enlaces-de-pago",
      "group_title": "Enlaces de pago",
      "access": "write",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/enlaces-de-pago",
      "api_endpoint": "POST /api/v1/createLinkPayment",
      "input": {
        "parameters": [
          {
            "name": "amount",
            "type": "number",
            "required": true,
            "description": "Monto a cobrar, mayor que cero"
          },
          {
            "name": "reference",
            "type": "string",
            "required": true,
            "description": "Referencia interna del cobro"
          },
          {
            "name": "description",
            "type": "string",
            "required": true,
            "description": "Descripción del cobro"
          },
          {
            "name": "currency",
            "type": "string",
            "required": false,
            "description": "Moneda, ej. USD o CRC (por defecto USD)"
          },
          {
            "name": "client",
            "type": "string",
            "required": false,
            "description": "Nombre del cliente"
          },
          {
            "name": "client_email",
            "type": "string",
            "required": false,
            "description": "Correo del cliente"
          },
          {
            "name": "client_phone",
            "type": "string",
            "required": false,
            "description": "Teléfono del cliente"
          },
          {
            "name": "type",
            "type": "integer",
            "required": false,
            "description": "Tipo de enlace (0 por defecto)"
          },
          {
            "name": "callback_url",
            "type": "string",
            "required": false,
            "description": "URL de retorno tras el pago"
          },
          {
            "name": "webhook_url",
            "type": "string",
            "required": false,
            "description": "URL de webhook de notificación"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result, linkId, url }",
        "description": "result es la respuesta cruda; linkId y url son el id y la URL del enlace ya extraídos. Si no se envía webhook_url, el servidor pone uno propio para poder avisar cuando se pague."
      }
    },
    {
      "name": "tilopay_get_payment_link",
      "title": "Detalle de un enlace de pago",
      "description": "Obtiene el detalle de un enlace de pago de Tilopay por su ID.",
      "group": "enlaces-de-pago",
      "group_title": "Enlaces de pago",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/enlaces-de-pago",
      "api_endpoint": "GET /api/v1/getDetailLinkPayment/{link_payment_id}/{api_key}",
      "input": {
        "parameters": [
          {
            "name": "linkPaymentId",
            "type": "string",
            "required": true,
            "description": "ID del enlace de pago"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_delete_payment_link",
      "title": "Eliminar enlace de pago",
      "description": "Elimina un enlace de pago de Tilopay por su ID.",
      "group": "enlaces-de-pago",
      "group_title": "Enlaces de pago",
      "access": "destructive",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/enlaces-de-pago",
      "api_endpoint": "POST /api/v1/deleteLinkPayment",
      "input": {
        "parameters": [
          {
            "name": "id",
            "type": "string",
            "required": true,
            "description": "ID del enlace de pago a eliminar"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_send_payment_link_whatsapp",
      "title": "Enviar enlace de pago por WhatsApp",
      "description": "Prepara el envío del enlace de pago por WhatsApp a un contacto: devuelve un enlace wa.me con el mensaje listo. Acepta el nombre de un contacto guardado o un teléfono.",
      "group": "enlaces-de-pago",
      "group_title": "Enlaces de pago",
      "access": "write",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/enlaces-de-pago",
      "input": {
        "parameters": [
          {
            "name": "link_url",
            "type": "string",
            "required": true,
            "description": "URL del enlace de pago"
          },
          {
            "name": "contact_name",
            "type": "string",
            "required": false,
            "description": "Nombre del contacto guardado o del cliente"
          },
          {
            "name": "phone",
            "type": "string",
            "required": false,
            "description": "Teléfono de WhatsApp, ej. +50688887777"
          },
          {
            "name": "amount",
            "type": "number",
            "required": false
          },
          {
            "name": "currency",
            "type": "string",
            "required": false
          },
          {
            "name": "description",
            "type": "string",
            "required": false
          },
          {
            "name": "message",
            "type": "string",
            "required": false,
            "description": "Texto propio del mensaje"
          },
          {
            "name": "save_contact",
            "type": "boolean",
            "required": false,
            "description": "Guardar el contacto en la agenda"
          },
          {
            "name": "send_now",
            "type": "boolean",
            "required": false,
            "description": "Obsoleto: se ignora. Siempre se devuelve el enlace wa.me para enviar con un toque.",
            "deprecated": true
          }
        ]
      },
      "output": {
        "structuredContent": "{ to, message, whatsapp_url }",
        "description": "No envía el mensaje: devuelve el teléfono resuelto, el texto ya redactado y un enlace wa.me para enviarlo con un toque. Si no hay teléfono ni contacto guardado con ese nombre, devuelve error pidiéndolo. Guarda el contacto salvo que save_contact sea false."
      }
    },
    {
      "name": "tilopay_send_payment_link_email",
      "title": "Enviar enlace de pago por correo",
      "description": "Envía el enlace de pago por correo electrónico al cliente. Acepta el nombre de un contacto guardado o un correo.",
      "group": "enlaces-de-pago",
      "group_title": "Enlaces de pago",
      "access": "write",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/enlaces-de-pago",
      "input": {
        "parameters": [
          {
            "name": "link_url",
            "type": "string",
            "required": true,
            "description": "URL del enlace de pago"
          },
          {
            "name": "email",
            "type": "string",
            "required": false,
            "description": "Correo del destinatario"
          },
          {
            "name": "contact_name",
            "type": "string",
            "required": false,
            "description": "Nombre del contacto guardado o del cliente"
          },
          {
            "name": "amount",
            "type": "number",
            "required": false
          },
          {
            "name": "currency",
            "type": "string",
            "required": false
          },
          {
            "name": "description",
            "type": "string",
            "required": false
          },
          {
            "name": "message",
            "type": "string",
            "required": false,
            "description": "Nota adicional para el cliente"
          },
          {
            "name": "save_contact",
            "type": "boolean",
            "required": false,
            "description": "Guardar el contacto en la agenda"
          }
        ]
      },
      "output": {
        "structuredContent": "{ sent, to }",
        "description": "sent es true y to el correo al que se envió. Si no hay correo ni contacto guardado con ese nombre, devuelve error pidiéndolo."
      }
    },
    {
      "name": "tilopay_catalog_list_items",
      "title": "Listar catálogo de productos o servicios",
      "description": "Lista los productos o servicios del catálogo de enlaces de pago de Tilopay.",
      "group": "catalogo",
      "group_title": "Catálogo",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/catalogo",
      "api_endpoint": "GET /api/v1/getLinkPaymentList/{api_key}/{limit}",
      "input": {
        "parameters": [
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Máximo de ítems (por defecto 50, máximo 500)"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_catalog_get_item",
      "title": "Detalle de un ítem del catálogo",
      "description": "Obtiene el detalle de un producto o servicio del catálogo de Tilopay por su ID.",
      "group": "catalogo",
      "group_title": "Catálogo",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/catalogo",
      "api_endpoint": "GET /api/v1/getLinkPaymentById/{link_payment_id}/{api_key}",
      "input": {
        "parameters": [
          {
            "name": "itemId",
            "type": "string",
            "required": true,
            "description": "ID del ítem del catálogo"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_list_contacts",
      "title": "Ver contactos",
      "description": "Lista los contactos guardados del comercio; opcionalmente filtra por nombre.",
      "group": "contactos",
      "group_title": "Contactos",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/contactos",
      "input": {
        "parameters": [
          {
            "name": "search",
            "type": "string",
            "required": false,
            "description": "Texto a buscar en el nombre"
          }
        ]
      },
      "output": {
        "structuredContent": "{ contacts }",
        "description": "Lista de contactos guardados del comercio."
      }
    },
    {
      "name": "tilopay_save_contact",
      "title": "Guardar contacto",
      "description": "Guarda o actualiza un contacto del comercio (nombre, teléfono de WhatsApp y correo) para reutilizarlo en envíos.",
      "group": "contactos",
      "group_title": "Contactos",
      "access": "write",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/contactos",
      "input": {
        "parameters": [
          {
            "name": "name",
            "type": "string",
            "required": true,
            "description": "Nombre del contacto"
          },
          {
            "name": "phone",
            "type": "string",
            "required": false,
            "description": "Teléfono de WhatsApp, ej. +50688887777"
          },
          {
            "name": "email",
            "type": "string",
            "required": false
          },
          {
            "name": "note",
            "type": "string",
            "required": false
          }
        ]
      },
      "output": {
        "structuredContent": "{ contact }",
        "description": "El contacto guardado o actualizado."
      }
    },
    {
      "name": "tilopay_delete_contact",
      "title": "Eliminar contacto",
      "description": "Elimina un contacto guardado del comercio por su nombre.",
      "group": "contactos",
      "group_title": "Contactos",
      "access": "destructive",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/contactos",
      "input": {
        "parameters": [
          {
            "name": "name",
            "type": "string",
            "required": true,
            "description": "Nombre del contacto"
          }
        ]
      },
      "output": {
        "structuredContent": "{ removed }",
        "description": "removed es true. Si no existe un contacto con ese nombre, devuelve error."
      }
    },
    {
      "name": "tilopay_recurring_list_plans",
      "title": "Listar planes de cobro recurrente",
      "description": "Lista los planes de cobro recurrente configurados en Tilopay.",
      "group": "recurrentes",
      "group_title": "Cobros recurrentes",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/recurrentes",
      "api_endpoint": "POST /api/v1/getPlansRepeat",
      "input": {
        "parameters": []
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_recurring_get_plan",
      "title": "Detalle de un plan recurrente",
      "description": "Obtiene el detalle de un plan de cobro recurrente por su ID.",
      "group": "recurrentes",
      "group_title": "Cobros recurrentes",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/recurrentes",
      "api_endpoint": "POST /api/v1/getPlanRepeat",
      "input": {
        "parameters": [
          {
            "name": "id",
            "type": "string",
            "required": true,
            "description": "ID del plan"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_recurring_get_subscriber",
      "title": "Detalle de un suscriptor",
      "description": "Obtiene el detalle de un suscriptor de un plan recurrente por su ID.",
      "group": "recurrentes",
      "group_title": "Cobros recurrentes",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/recurrentes",
      "api_endpoint": "POST /api/v1/getSuscriptorRepeat",
      "input": {
        "parameters": [
          {
            "name": "id",
            "type": "string",
            "required": true,
            "description": "ID del suscriptor"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_recurring_subscriber_payments",
      "title": "Pagos de un suscriptor",
      "description": "Lista los pagos realizados por un suscriptor recurrente.",
      "group": "recurrentes",
      "group_title": "Cobros recurrentes",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/recurrentes",
      "api_endpoint": "POST /api/v1/getSuscriptorPayments",
      "input": {
        "parameters": [
          {
            "name": "id",
            "type": "string",
            "required": true,
            "description": "ID del suscriptor"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_recurring_manage_subscriber",
      "title": "Pausar, reactivar o eliminar un suscriptor",
      "description": "Pausa, reactiva o elimina un suscriptor de un plan recurrente en Tilopay. Operación sensible: afecta cobros futuros.",
      "group": "recurrentes",
      "group_title": "Cobros recurrentes",
      "access": "destructive",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/recurrentes",
      "api_endpoint": "POST /api/v1/pauseSuscriptorRepeat, /reactiveSuscriptorRepeat o /deleteSuscriptorRepeat",
      "input": {
        "parameters": [
          {
            "name": "idSubscriber",
            "type": "string",
            "required": true,
            "description": "ID del suscriptor"
          },
          {
            "name": "action",
            "type": "string",
            "required": true,
            "description": "Acción a realizar",
            "enum": [
              "pause",
              "reactivate",
              "delete"
            ]
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del endpoint correspondiente a la acción: pause, reactivate o delete."
      }
    },
    {
      "name": "tilopay_saved_cards_list_groups",
      "title": "Listar grupos de cobro",
      "description": "Lista los grupos de cobro con tarjetas almacenadas (afiliados) en Tilopay.",
      "group": "tarjetas-guardadas",
      "group_title": "Tarjetas guardadas y cobros masivos",
      "access": "read",
      "availability": "default",
      "input": {
        "parameters": []
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_saved_cards_list_affiliates",
      "title": "Listar afiliados con tarjeta almacenada",
      "description": "Lista los afiliados (clientes con tarjeta almacenada) de un grupo de cobro.",
      "group": "tarjetas-guardadas",
      "group_title": "Tarjetas guardadas y cobros masivos",
      "access": "read",
      "availability": "default",
      "input": {
        "parameters": [
          {
            "name": "group",
            "type": "integer",
            "required": false,
            "description": "ID del grupo (0 para todos)"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_saved_cards_list_collections",
      "title": "Listar cobros masivos",
      "description": "Lista los cobros masivos realizados con tarjetas almacenadas en Tilopay.",
      "group": "tarjetas-guardadas",
      "group_title": "Tarjetas guardadas y cobros masivos",
      "access": "read",
      "availability": "default",
      "input": {
        "parameters": []
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_saved_cards_collection_detail",
      "title": "Detalle de un cobro masivo",
      "description": "Obtiene el detalle de un cobro masivo. Requiere el `code` del cobro (campo `code` devuelto por tilopay_saved_cards_list_collections).",
      "group": "tarjetas-guardadas",
      "group_title": "Tarjetas guardadas y cobros masivos",
      "access": "read",
      "availability": "default",
      "input": {
        "parameters": [
          {
            "name": "code",
            "type": "string",
            "required": true,
            "description": "Código del cobro masivo (campo `code` de la lista de cobros)"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_saved_cards_create_payments",
      "title": "Cobrar a tarjetas almacenadas",
      "description": "Crea cobros a afiliados y/o grupos con tarjetas almacenadas en Tilopay. Operación sensible: afecta dinero real.",
      "group": "tarjetas-guardadas",
      "group_title": "Tarjetas guardadas y cobros masivos",
      "access": "destructive",
      "availability": "default",
      "input": {
        "parameters": [
          {
            "name": "reason",
            "type": "string",
            "required": true,
            "description": "Motivo del cobro, ej. \"Cobro mensualidad\""
          },
          {
            "name": "capture",
            "type": "boolean",
            "required": false,
            "description": "Capturar de inmediato (por defecto true)"
          },
          {
            "name": "users",
            "type": "array<object>",
            "required": false,
            "description": "Afiliados individuales a cobrar. Cada elemento: id (string, requerido), amount (number, requerido, mayor que cero), currency (string, requerido), date (string \"YYYY-MM-DD\", vacío = inmediato)"
          },
          {
            "name": "groups",
            "type": "array<object>",
            "required": false,
            "description": "Grupos a cobrar. Cada elemento: id (string, requerido), amount por afiliado (number, requerido, mayor que cero), currency (string, requerido), date (string \"YYYY-MM-DD\", vacío = inmediato)"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "Respuesta cruda del API de Tilopay bajo la llave `result`."
      }
    },
    {
      "name": "tilopay_help_guides",
      "title": "Ayuda con las guías y tutoriales de Tilopay",
      "description": "Responde dudas de uso del panel de Tilopay (links de pago, catálogo, suscripciones, depósitos de garantía, reembolsos, API/SDK) usando las guías oficiales de tilopay.com/guias. Devuelve extractos y los enlaces a las guías.",
      "group": "soporte",
      "group_title": "Soporte y diagnóstico",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/soporte",
      "input": {
        "parameters": [
          {
            "name": "question",
            "type": "string",
            "required": true,
            "description": "Pregunta del comercio, tal como la escribió"
          }
        ]
      },
      "output": {
        "structuredContent": "{ articles }",
        "description": "Hasta 3 artículos con title, url y excerpt, tomados de tilopay.com/guias. Si no hay coincidencia devuelve articles vacío y un texto con las guías disponibles."
      }
    },
    {
      "name": "tilopay_diagnostics",
      "title": "Diagnóstico de conexión con Tilopay",
      "description": "Verifica las credenciales del usuario y prueba un endpoint de cada grupo (ventas/transacciones, catálogo, recurrentes, tarjetas almacenadas). Úsalo cuando una herramienta falle para saber qué parte del API responde.",
      "group": "soporte",
      "group_title": "Soporte y diagnóstico",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/soporte",
      "input": {
        "parameters": [
          {
            "name": "environment",
            "type": "string",
            "required": false,
            "description": "Ambiente para la prueba de transacciones (por defecto production)",
            "enum": [
              "production",
              "test"
            ]
          }
        ]
      },
      "output": {
        "structuredContent": "{ checks, failed }",
        "description": "checks es una lista con check, ok y detail por cada prueba: credenciales, transacciones, catálogo, recurrentes y tarjetas almacenadas. failed es la cantidad de pruebas con error. Las credenciales se devuelven enmascaradas."
      }
    },
    {
      "name": "tilopay_debug_code",
      "title": "Depurar código",
      "description": "Analiza un fragmento de código o stack trace que envía el usuario y devuelve diagnóstico, causa raíz, corrección concreta y riesgos. No lee repositorios ni ejecuta código.",
      "group": "soporte",
      "group_title": "Soporte y diagnóstico",
      "access": "read",
      "availability": "default",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/soporte",
      "input": {
        "parameters": [
          {
            "name": "code",
            "type": "string",
            "required": true,
            "description": "Fragmento de código, log o stack trace tal como lo envió el usuario"
          },
          {
            "name": "error",
            "type": "string",
            "required": false,
            "description": "Mensaje de error o comportamiento observado, si lo hay"
          },
          {
            "name": "language",
            "type": "string",
            "required": false,
            "description": "Lenguaje o stack (ej. typescript, php, react). Si no se indica, se detecta"
          },
          {
            "name": "context",
            "type": "string",
            "required": false,
            "description": "Qué debería hacer el código o en qué momento falla"
          }
        ]
      },
      "output": {
        "structuredContent": "{ report, truncated, redacted, model }",
        "description": "report es el diagnóstico en texto (diagnóstico, causa raíz, corrección y riesgos). truncated indica si el código se recortó a 12.000 caracteres; redacted, si se ocultaron posibles credenciales antes del análisis; model, el modelo usado. No lee repositorios ni ejecuta el código."
      }
    },
    {
      "name": "baas_list_assignments",
      "title": "Contextos (assignments)",
      "description": "Lista los contextos tenant/cuenta (assignments) disponibles para las credenciales del API bancario del usuario. Úsalo cuando otra herramienta pida assignmentId.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/otras-operaciones",
      "input": {
        "parameters": []
      },
      "output": {
        "structuredContent": "{ assignments[] }",
        "description": "assignments = contextos disponibles con assignment_id, tenant_code, owner_type, country_code y status."
      }
    },
    {
      "name": "baas_diagnostics",
      "title": "Diagnóstico",
      "description": "Verifica las credenciales del API bancario del usuario, el login, el intercambio de token y el acceso a cuentas. Úsalo cuando una consulta falle.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/otras-operaciones",
      "input": {
        "parameters": [
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ checks[], failed }",
        "description": "checks = una fila por verificación (credenciales, login + assignments, cuentas) con ok y detalle; failed = cuántas fallaron. El correo de la credencial se devuelve enmascarado."
      }
    },
    {
      "name": "baas_list_accounts",
      "title": "Listar cuentas",
      "description": "Lista las cuentas accesibles del API bancario, sin saldos: tipo de identificador, valor y moneda.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/otras-operaciones",
      "api_endpoint": "GET /api/public/v1/accounts",
      "input": {
        "parameters": [
          {
            "name": "accountType",
            "type": "string",
            "required": false,
            "description": "Filtro por esquema (IBAN)"
          },
          {
            "name": "accountValue",
            "type": "string",
            "required": false,
            "description": "Filtro por identificador"
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Tamaño de página, entre 1 y 100"
          },
          {
            "name": "cursor",
            "type": "string",
            "required": false,
            "description": "Cursor de la página anterior"
          },
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "result = respuesta del API bancario tal cual."
      }
    },
    {
      "name": "baas_list_balances",
      "title": "Saldos",
      "description": "Lista los saldos en tiempo real de las cuentas accesibles: cuenta, montos y fecha de corte.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/list-balances",
      "api_endpoint": "GET /api/public/v1/accounts/balances",
      "input": {
        "parameters": [
          {
            "name": "accountType",
            "type": "string",
            "required": false,
            "description": "Filtro por esquema (IBAN)"
          },
          {
            "name": "accountValue",
            "type": "string",
            "required": false,
            "description": "Filtro por identificador"
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Tamaño de página, entre 1 y 100"
          },
          {
            "name": "cursor",
            "type": "string",
            "required": false,
            "description": "Cursor de la página anterior"
          },
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "result = respuesta del API bancario tal cual."
      }
    },
    {
      "name": "baas_get_balance",
      "title": "Saldo de una cuenta",
      "description": "Obtiene el saldo actual de una cuenta del API bancario identificada por IBAN.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/otras-operaciones",
      "api_endpoint": "GET /api/public/v1/accounts/balance",
      "input": {
        "parameters": [
          {
            "name": "accountType",
            "type": "string",
            "required": false,
            "description": "Esquema del identificador de la cuenta (IBAN)",
            "enum": [
              "IBAN"
            ]
          },
          {
            "name": "accountValue",
            "type": "string",
            "required": true,
            "description": "Identificador de la cuenta (IBAN)"
          },
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "result = respuesta del API bancario tal cual."
      }
    },
    {
      "name": "baas_list_payments",
      "title": "Pagos",
      "description": "Consulta, sólo lectura, los pagos de una cuenta propia identificada por IBAN, con filtros de fecha, estado, moneda, método y dirección. Paginación por cursor.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/list-payments",
      "api_endpoint": "GET /api/public/v1/transactions/payments",
      "input": {
        "parameters": [
          {
            "name": "accountType",
            "type": "string",
            "required": false,
            "description": "Esquema del identificador de la cuenta (IBAN)",
            "enum": [
              "IBAN"
            ]
          },
          {
            "name": "accountValue",
            "type": "string",
            "required": true,
            "description": "Identificador de la cuenta (IBAN)"
          },
          {
            "name": "dateFrom",
            "type": "string",
            "required": false,
            "description": "Desde, RFC 3339 (2026-01-01T00:00:00Z)"
          },
          {
            "name": "dateTo",
            "type": "string",
            "required": false,
            "description": "Hasta, RFC 3339"
          },
          {
            "name": "status",
            "type": "string",
            "required": false,
            "description": "Estado público del pago",
            "enum": [
              "pending",
              "processing",
              "confirmed",
              "posted",
              "failed"
            ]
          },
          {
            "name": "currency",
            "type": "string",
            "required": false,
            "description": "Moneda ISO 4217 (CRC, USD)"
          },
          {
            "name": "paymentMethodCode",
            "type": "string",
            "required": false,
            "description": "Método de pago",
            "enum": [
              "PIN",
              "SINPE_MOVIL"
            ]
          },
          {
            "name": "direction",
            "type": "string",
            "required": false,
            "description": "OUT = envío, IN = recibido",
            "enum": [
              "OUT",
              "IN"
            ]
          },
          {
            "name": "clientReference",
            "type": "string",
            "required": false,
            "description": "Referencia del comercio"
          },
          {
            "name": "limit",
            "type": "integer",
            "required": false,
            "description": "Tamaño de página, máximo 100 (por defecto 20)"
          },
          {
            "name": "cursor",
            "type": "string",
            "required": false,
            "description": "Cursor de la página anterior"
          },
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "result = respuesta del API bancario tal cual, con su cursor de paginación."
      }
    },
    {
      "name": "baas_search_payment",
      "title": "Buscar un pago",
      "description": "Busca un pago dentro de una cuenta por exactamente uno de: paymentId (UUID), publicId (número) o clientReference. Si se envía más de uno, la herramienta devuelve error.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/search-payment",
      "api_endpoint": "POST /api/public/v1/transactions/payments/search",
      "input": {
        "parameters": [
          {
            "name": "accountType",
            "type": "string",
            "required": false,
            "description": "Esquema del identificador de la cuenta (IBAN)",
            "enum": [
              "IBAN"
            ]
          },
          {
            "name": "accountValue",
            "type": "string",
            "required": true,
            "description": "Identificador de la cuenta (IBAN)"
          },
          {
            "name": "paymentId",
            "type": "string",
            "required": false,
            "description": "UUID interno del pago"
          },
          {
            "name": "publicId",
            "type": "string",
            "required": false,
            "description": "Identificador público numérico"
          },
          {
            "name": "clientReference",
            "type": "string",
            "required": false,
            "description": "Referencia del comercio"
          },
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "result = respuesta del API bancario tal cual."
      }
    },
    {
      "name": "baas_get_payment",
      "title": "Detalle de un pago",
      "description": "Obtiene el detalle de un pago del API bancario por su UUID interno, sólo lectura.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/get-payment",
      "api_endpoint": "GET /api/public/v1/transactions/payments/{payment_id}",
      "input": {
        "parameters": [
          {
            "name": "paymentId",
            "type": "string",
            "required": true,
            "description": "UUID interno del pago"
          },
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "result = respuesta del API bancario tal cual."
      }
    },
    {
      "name": "baas_request_statement",
      "title": "Estado de cuenta",
      "description": "Solicita la generación de un estado de cuenta para una cuenta del API bancario, con rango máximo de 60 días. No mueve dinero: genera un documento de consulta y devuelve request_id con status PENDING.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "write",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/request-statement",
      "api_endpoint": "POST /api/public/v1/accounts/statements",
      "input": {
        "parameters": [
          {
            "name": "accountType",
            "type": "string",
            "required": false,
            "description": "Esquema del identificador de la cuenta (IBAN)",
            "enum": [
              "IBAN"
            ]
          },
          {
            "name": "accountValue",
            "type": "string",
            "required": true,
            "description": "Identificador de la cuenta (IBAN)"
          },
          {
            "name": "dateFrom",
            "type": "string",
            "required": true,
            "description": "Desde, RFC 3339 (2026-01-01T00:00:00Z)"
          },
          {
            "name": "dateTo",
            "type": "string",
            "required": true,
            "description": "Hasta, RFC 3339, como máximo 60 días después de dateFrom"
          },
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "result = respuesta del API bancario con request_id y status. La herramienta solicita el documento sin notificación por correo."
      }
    },
    {
      "name": "baas_get_statement_status",
      "title": "Estado de la solicitud de estado de cuenta",
      "description": "Consulta el estado de una solicitud de estado de cuenta. Cuando está DONE incluye el enlace de descarga firmado y su vencimiento.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/otras-operaciones",
      "api_endpoint": "GET /api/public/v1/accounts/statements/{request_id}",
      "input": {
        "parameters": [
          {
            "name": "requestId",
            "type": "string",
            "required": true,
            "description": "request_id devuelto al solicitar el estado de cuenta"
          },
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ result }",
        "description": "result = respuesta del API bancario tal cual."
      }
    },
    {
      "name": "baas_analyze_payments",
      "title": "Análisis de movimientos",
      "description": "Analiza, sólo lectura, los pagos de una cuenta en un rango de fechas y devuelve un informe en lenguaje natural: éxito, fallas, reversiones, montos netos y recomendaciones. Usa un modelo de lenguaje sobre las cifras calculadas.",
      "group": "api-bancario",
      "group_title": "Herramientas bancarias",
      "access": "read",
      "availability": "on-request",
      "requires": "baas-credentials",
      "requires_note": "Credenciales del API bancario de Tilopay registradas por Tilopay para ese usuario.",
      "documentation": "https://www.tilopay.com/developers/agentes/mcp/api-bancario/analyze-payments",
      "input": {
        "parameters": [
          {
            "name": "accountType",
            "type": "string",
            "required": false,
            "description": "Esquema del identificador de la cuenta (IBAN)",
            "enum": [
              "IBAN"
            ]
          },
          {
            "name": "accountValue",
            "type": "string",
            "required": true,
            "description": "Identificador de la cuenta (IBAN)"
          },
          {
            "name": "dateFrom",
            "type": "string",
            "required": true,
            "description": "Desde, RFC 3339"
          },
          {
            "name": "dateTo",
            "type": "string",
            "required": true,
            "description": "Hasta, RFC 3339"
          },
          {
            "name": "currency",
            "type": "string",
            "required": false,
            "description": "Moneda ISO 4217"
          },
          {
            "name": "direction",
            "type": "string",
            "required": false,
            "description": "OUT = envío, IN = recibido",
            "enum": [
              "OUT",
              "IN"
            ]
          },
          {
            "name": "question",
            "type": "string",
            "required": false,
            "description": "Enfoque específico del análisis"
          },
          {
            "name": "maxItems",
            "type": "integer",
            "required": false,
            "description": "Máximo de pagos a analizar, entre 1 y 1000 (por defecto 300)"
          },
          {
            "name": "assignmentId",
            "type": "string",
            "required": false,
            "description": "Contexto (assignment) del API bancario; se envía sólo cuando hay varios"
          }
        ]
      },
      "output": {
        "structuredContent": "{ summary }",
        "description": "summary trae account, range, totals {count, succeeded, failed, reversed, pending, successRate}, byCurrency con succeededAmount, reversedAmount, netAmount y averageTicket, failureReasons y sample. El informe redactado viene en el texto. Si no hay pagos en el rango, avisa y no analiza."
      }
    }
  ]
}