{
  "name": "tilopay-insight-engine",
  "title": "Tilopay Insight Engine",
  "version": "0.3.0",
  "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": 27,
    "read": 18,
    "write": 9,
    "destructive": 5
  },
  "groups": [
    {
      "slug": "ventas",
      "title": "Ventas y transacciones",
      "tools": 5
    },
    {
      "slug": "enlaces-de-pago",
      "title": "Enlaces de pago",
      "tools": 5
    },
    {
      "slug": "catalogo",
      "title": "Catálogo",
      "tools": 2
    },
    {
      "slug": "contactos",
      "title": "Contactos",
      "tools": 3
    },
    {
      "slug": "recurrentes",
      "title": "Cobros recurrentes",
      "tools": 5
    },
    {
      "slug": "tarjetas-guardadas",
      "title": "Tarjetas guardadas y cobros masivos",
      "tools": 5
    },
    {
      "slug": "soporte",
      "title": "Soporte y diagnóstico",
      "tools": 2
    }
  ],
  "tools": [
    {
      "name": "tilopay_list_transactions",
      "title": "Listar transacciones de Tilopay",
      "description": "Consulta las transacciones de Tilopay en un rango de fechas. Permite filtrar por moneda, número de orden, correo del cliente y ambiente.",
      "group": "ventas",
      "group_title": "Ventas y transacciones",
      "access": "read",
      "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 a partir de su número de orden.",
      "group": "ventas",
      "group_title": "Ventas y transacciones",
      "access": "read",
      "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: 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",
      "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 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",
      "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"
          },
          {
            "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: captura, reembolso o reversión por el monto indicado. Operación sensible: afecta dinero real.",
      "group": "ventas",
      "group_title": "Ventas y transacciones",
      "access": "destructive",
      "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 para cobrar un monto específico.",
      "group": "enlaces-de-pago",
      "group_title": "Enlaces de pago",
      "access": "write",
      "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 por su ID.",
      "group": "enlaces-de-pago",
      "group_title": "Enlaces de pago",
      "access": "read",
      "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 por su ID.",
      "group": "enlaces-de-pago",
      "group_title": "Enlaces de pago",
      "access": "destructive",
      "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: 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",
      "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.",
            "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",
      "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.",
      "group": "catalogo",
      "group_title": "Catálogo",
      "access": "read",
      "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 por su ID.",
      "group": "catalogo",
      "group_title": "Catálogo",
      "access": "read",
      "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",
      "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",
      "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",
      "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.",
      "group": "recurrentes",
      "group_title": "Cobros recurrentes",
      "access": "read",
      "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",
      "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",
      "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",
      "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. Operación sensible: afecta cobros futuros.",
      "group": "recurrentes",
      "group_title": "Cobros recurrentes",
      "access": "destructive",
      "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).",
      "group": "tarjetas-guardadas",
      "group_title": "Tarjetas guardadas y cobros masivos",
      "access": "read",
      "api_endpoint": "POST /api/v1/collect/get/groups",
      "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",
      "api_endpoint": "POST /api/v1/collect/get/affiliates",
      "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.",
      "group": "tarjetas-guardadas",
      "group_title": "Tarjetas guardadas y cobros masivos",
      "access": "read",
      "api_endpoint": "POST /api/v1/collect/get/massive",
      "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 código del cobro, que devuelve tilopay_saved_cards_list_collections en el campo code.",
      "group": "tarjetas-guardadas",
      "group_title": "Tarjetas guardadas y cobros masivos",
      "access": "read",
      "api_endpoint": "POST /api/v1/collect/get/massive/detail",
      "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 grupos con tarjetas almacenadas. Operación sensible: afecta dinero real.",
      "group": "tarjetas-guardadas",
      "group_title": "Tarjetas guardadas y cobros masivos",
      "access": "destructive",
      "api_endpoint": "POST /api/v1/collect/set/payments",
      "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 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",
      "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 y transacciones, catálogo, recurrentes, tarjetas almacenadas). Útil cuando una herramienta falla, para saber qué parte del API responde.",
      "group": "soporte",
      "group_title": "Soporte y diagnóstico",
      "access": "read",
      "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."
      }
    }
  ]
}