Biblioteca · Lanzamiento: pagos, secretos, normas y registros

Pagos y cobros: Stripe MCP, suscripciones, webhooks

Creador70 minActualizado: octubre de 2026
84 de 105 en la biblioteca

Tiempo: ~25 min de teoría + 45 min de práctica


Lo esencial

Stripe no es solo "aceptar un pago". Es el sistema operativo del dinero de tu negocio con IA. Y Stripe MCP convierte a Claude en tu operador financiero: crea productos, lee transacciones y administra suscripciones con texto, sin abrir el panel.

🎨 Imagínalo así: antes, el dinero se movía a través del cajero del banco: tenías que ir en persona, llenar papeles, esperar. Stripe MCP es como tener la API del banco dentro de la cabeza de Claude. Le dices "crea un enlace de pago de $49/mes" y lo hace al instante.


Conceptos clave

  • Stripe MCP: la herramienta oficial de Stripe para administrarlo a través de Claude
  • Payment Link: un enlace sin sitio web: se lo mandas al cliente y él paga
  • Subscription: un pago recurrente (la base de los ingresos de un SaaS)
  • Webhook: Stripe toca la puerta de tu servidor cuando pasa algo
  • Dunning: el manejo automático de pagos atrasados
  • MRR/ARR: las métricas de salud de un negocio de suscripción

Teoría

Por qué Stripe y no otra opción

Así se ve la elección de un servicio de pagos para un desarrollador independiente (las comisiones cambian según el servicio y el país; consulta las tarifas vigentes en los sitios oficiales):

Servicio Tipo Comisión Particularidad
Stripe Procesador de pagos A octubre de 2026 en EE. UU.: 2.9% + 30¢ por cobro con tarjeta, más 1.5% por tarjeta internacional y 1% por conversión de moneda. En otros países las tarifas son distintas MCP oficial; los impuestos y la contabilidad corren por tu cuenta
Paddle Merchant of Record Consulta el sitio El servicio actúa como vendedor y se encarga de los impuestos sobre las ventas, por eso la comisión suele ser más alta
Lemon Squeezy Merchant of Record Consulta el sitio El mismo modelo que Paddle
PayPal Servicio de pagos Consulta el sitio La mayoría de los compradores lo conocen

Stripe no porque sea "el mejor" en abstracto. Sino porque tiene un MCP oficial, buena documentación y cualquier desarrollador del mundo conoce su API.

Importante: Stripe no funciona en todos los países. Antes de empezar, revisa en el sitio de Stripe si tu país está soportado. Si no, busca los servicios de pago disponibles donde vives.

Stripe MCP: qué es y para qué sirve

Stripe MCP es el servidor oficial de Stripe que conecta la API de Stripe directamente a Claude Code. A octubre de 2026 es un servidor remoto en https://mcp.stripe.com, con inicio de sesión mediante OAuth. Una vez conectado, puedes administrar tu negocio con texto.

bash
# Conectamos Stripe MCP (servidor remoto)
claude mcp add --transport http stripe https://mcp.stripe.com/

# Luego, en Claude Code, abre /mcp y completa la autorización de Stripe (OAuth)

Stripe también ofrece una instalación de un solo comando: npm install -g @stripe/cli@latest y luego stripe agent setup. Conecta por sí sola el MCP y las habilidades para tu agente.

Después de conectarlo, en Claude aparecen estas herramientas:

  • stripe_api_search y stripe_api_details: encontrar un método de la API de Stripe y ver sus parámetros
  • stripe_api_read: leer datos: clientes, suscripciones, facturas, saldo
  • stripe_api_write: crear y cambiar: productos, precios, enlaces de pago, suscripciones
  • get_stripe_account_info: información de la cuenta
  • stripe_analytics: métricas y reportes (a octubre de 2026, en vista previa)
  • search_stripe_documentation: búsqueda en la documentación de Stripe

La lista de herramientas puede cambiar; la vigente está en la documentación de Stripe MCP. Para las acciones peligrosas, por ejemplo un reembolso, Stripe pide confirmar mediante un enlace: la persona sigue dentro del circuito. Empieza en modo de prueba (sandbox) y confirma tú mismo las acciones con dinero.

Si conectas el MCP con una clave en lugar de OAuth: a partir del 31.10.2026, Stripe MCP no acepta claves secretas ni restringidas comunes sin la etiqueta Agent. Necesitas una clave de tipo Agent (agent API key) u OAuth.

🎨 Imagínalo así: antes administrabas Stripe desde el panel web, como manejar un auto mirando por un periscopio. El MCP es como sentarte al volante como se debe.

Operaciones básicas con el MCP

Crear un producto y un precio:

Escribe esto en el chat
Tú: Crea el producto "AI Content Tool" a $49 al mes, en modo suscripción

Claude [stripe_api_write: crear producto]: {
  "name": "AI Content Tool",
  "description": "Monthly AI content generation subscription"
}

Claude [stripe_api_write: crear precio]: {
  "product": "prod_xxx",
  "unit_amount": 4900,
  "currency": "usd",
  "recurring": {"interval": "month"}
}

Crear un enlace de pago:

Escribe esto en el chat
Tú: Crea un payment link para este precio

Claude [stripe_api_write: crear enlace de pago]: {
  "line_items": [{"price": "price_xxx", "quantity": 1}]
}

Resultado: https://buy.stripe.com/test_XXXXX

Le mandas este enlace al cliente por WhatsApp o por correo: él paga y el dinero te llega a ti. Sin sitio web, sin carrito.

Ver a los clientes:

Escribe esto en el chat
Tú: Muéstrame los últimos 10 clientes y el estado de su suscripción

Claude [stripe_api_read: lista de clientes]: {"limit": 10}
Claude [stripe_api_read: suscripciones del cliente]: {para cada uno}

Resultado: una tabla con nombres, email, estado y monto

Webhooks: Stripe te cuenta lo que pasa

Un webhook es una solicitud HTTP que Stripe envía a tu servidor cuando pasa algo. Hay decenas de eventos; los más importantes:

Evento Qué significa Tu acción
payment_intent.succeeded El pago pasó Activar la cuenta del cliente
customer.subscription.deleted La suscripción se canceló Bloquear el acceso
invoice.payment_failed El pago no pasó Iniciar el dunning
customer.subscription.updated Subió o bajó de plan Cambiar el plan

Un manejador de webhook básico:

python
import os
import stripe
from flask import Flask, request

app = Flask(__name__)
stripe.api_key = os.environ["STRIPE_SECRET_KEY"]
endpoint_secret = os.environ["STRIPE_WEBHOOK_SECRET"]

@app.route('/webhook', methods=['POST'])
def webhook():
    payload = request.data
    sig_header = request.headers.get('Stripe-Signature')
    
    try:
        event = stripe.Webhook.construct_event(
            payload, sig_header, endpoint_secret
        )
    except ValueError:
        return 'Invalid payload', 400
    except stripe.SignatureVerificationError:
        return 'Invalid signature', 400
    
    if event['type'] == 'payment_intent.succeeded':
        payment_intent = event['data']['object']
        # Activar al cliente
        activate_customer(payment_intent['customer'])
    
    elif event['type'] == 'invoice.payment_failed':
        invoice = event['data']['object']
        # Iniciar la secuencia de dunning
        start_dunning(invoice['customer'])
    
    return '', 200

🎨 Imagínalo así: un webhook es como un timbre. No te quedas parado junto a la puerta 24/7 preguntando "¿llegó alguien?". Stripe toca el timbre cuando hace falta.

El modelo de suscripción: cómo te ayuda Claude a armar el cobro de un SaaS

Esquema de un SaaS de suscripción con Claude:

Código
Cliente → Payment Link → webhook de Stripe → tu servidor
                                              ↓
                                    Claude analiza el evento
                                              ↓
                              crea la cuenta / la activa / la bloquea
                                              ↓
                                    envía el email de bienvenida

Claude puede manejar estos eventos con inteligencia. Por ejemplo, cuando se cancela una suscripción:

python
def handle_subscription_cancelled(customer_id):
    # Claude analiza el historial del cliente
    client = anthropic.Anthropic()
    
    customer_history = get_customer_history(customer_id)
    
    response = "".join(b.text for b in client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=500,
        messages=[{
            "role": "user",
            "content": f"""
            El cliente canceló su suscripción. Historial:
            - Antigüedad: {customer_history['months']} meses
            - Uso: {customer_history['usage']} solicitudes/mes
            - Último inicio de sesión: {customer_history['last_login']}
            
            Escribe un email personal para recuperarlo dentro de 7 días.
            Tono: amable, sin presionar.
            """
        }]
    ).content if b.type == "text")
    
    schedule_email(customer_id, response, delay_days=7)

Dunning: los pagos atrasados son dinero que ya es tuyo

El dunning es el proceso de manejar los pagos fallidos. Las tarjetas se bloquean, vencen, se quedan sin fondos. Sin dunning, parte de los ingresos se pierde simplemente porque nadie le recordó al cliente. Stripe ya trae reintentos de cobro integrados y correos de pago fallido: actívalos primero y suma a Claude para darle un tono personal.

Smart dunning con Claude:

python
def smart_dunning_email(customer_id, attempt_number):
    """
    Intento 1 (de inmediato): recordatorio suave
    Intento 2 (día 3): un poco más firme  
    Intento 3 (día 7): último aviso
    """
    customer = get_customer(customer_id)
    
    tone_map = {
        1: "amable, quizá solo olvidó actualizar su tarjeta",
        2: "un poco más serio, ofrecemos ayuda",
        3: "claro, explicamos qué pasará si no paga"
    }
    
    client = anthropic.Anthropic()
    email = "".join(b.text for b in client.messages.create(
        model="claude-haiku-4-5",  # Haiku alcanza para un email
        max_tokens=300,
        messages=[{
            "role": "user",
            "content": f"""
            Intento {attempt_number}/3. Tono: {tone_map[attempt_number]}
            Cliente: {customer['name']}, producto: {customer['product']}
            Escribe un email breve sobre el pago fallido.
            Incluye un enlace directo para actualizar la tarjeta.
            """
        }]
    ).content if b.type == "text")
    
    send_email(customer['email'], email)

Analítica de MRR/ARR con Claude + datos de Stripe

python
def monthly_revenue_report():
    # Obtenemos los datos de Stripe
    subscriptions = stripe.Subscription.list(status='active', limit=100)
    
    # Divide los planes anuales entre 12 para obtener el monto mensual
    mrr = sum(
        item['price']['unit_amount'] * item.get('quantity', 1) / 100
        for sub in subscriptions.data
        for item in sub['items']['data']
    )
    
    churned_last_month = get_churned_count()
    new_last_month = get_new_customers_count()
    
    # Claude hace el análisis
    client = anthropic.Anthropic()
    report = "".join(b.text for b in client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=800,
        messages=[{
            "role": "user",
            "content": f"""
            Datos del mes:
            - MRR: ${mrr:.2f}
            - ARR (proyección): ${mrr * 12:.2f}
            - Clientes nuevos: {new_last_month}
            - Cancelaron: {churned_last_month}
            - Churn rate: {churned_last_month / (len(subscriptions.data)) * 100:.1f}%
            
            Da un análisis breve (5-7 oraciones) y 2-3 acciones concretas.
            """
        }]
    ).content if b.type == "text")
    
    return report

Práctica

Paso 1: Obtener la clave de API de Stripe

  1. Regístrate en stripe.com
  2. Dashboard → Developers → API keys (los nombres de los menús de Stripe cambian; trabaja en modo de prueba)
  3. Copia la Publishable key (pk_test_...) y la Secret key (sk_test_...). Stripe MCP no necesita estas claves, porque el acceso es por OAuth: las claves te servirán para el script del webhook
  4. Guárdalas en .env:
    Código
    STRIPE_SECRET_KEY=sk_test_xxx
    STRIPE_PUBLISHABLE_KEY=pk_test_xxx

Paso 2: Conectar Stripe MCP

bash
# Conectar Stripe MCP (servidor remoto, acceso por OAuth)
claude mcp add --transport http stripe https://mcp.stripe.com/

# Revisar la conexión y completar la autorización
claude
> /mcp  # debe mostrar stripe en la lista

Paso 3: Crear tu primer producto con Claude

En Claude Code escribe:

Escribe esto en el chat
Crea con Stripe MCP:
1. El producto "Mi servicio de IA" con una descripción en español
2. Un precio de $29 al mes (recurring, monthly)
3. Un payment link para ese precio
Muéstrame el enlace final.

Paso 4: Probar un pago

  1. Abre el payment link en el navegador
  2. Usa la tarjeta de prueba de Stripe: 4242 4242 4242 4242
  3. Cualquier fecha futura, cualquier CVC
  4. Revisa en Stripe Dashboard → Payments

Paso 5: Correr un webhook local (opcional)

bash
# Instalar Stripe CLI
brew install stripe/stripe-cli/stripe

# Escuchar los eventos en local
stripe listen --forward-to localhost:5000/webhook

# En otra terminal, simular un pago
stripe trigger payment_intent.succeeded

Paso 6: Tarea de práctica

Crea con Claude:

  • Un producto con 3 planes: Basic ($9), Pro ($29), Agency ($99)
  • Un payment link para cada plan
  • Un script sencillo que muestre la lista de todas las suscripciones activas
  • Una plantilla de email para un pago atrasado (dunning, intento 1)

Herramientas y recursos

  • Stripe MCP: https://mcp.stripe.com (acceso por OAuth), detalles en docs.stripe.com/mcp
  • Stripe CLI: brew install stripe/stripe-cli/stripe
  • Stripe Docs: docs.stripe.com
  • Tarjetas de prueba de Stripe: docs.stripe.com/testing
  • Webhooks: docs.stripe.com/webhooks
  • Stripe Python SDK: pip install stripe

Conclusiones clave

Stripe MCP convierte a Claude en tu administrador de cobros. Crear productos, administrar suscripciones, el dunning: todo con texto. El webhook son los oídos del sistema: Stripe te dice qué pasa y Claude decide qué hacer con eso. Un payment link sin sitio web es el cobro mínimo viable para tu primer cliente. Empieza por ahí y agrega complejidad conforme crezcas. Las acciones con dinero confírmalas tú.


Siguiente lección

→ MLOps para independientes: monitoreo, drift y reentrenamiento sin un equipo de DevOps

La marca se guarda solo en este navegador y no se envía a ningún sitio. Mi progreso