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.
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.
# 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_searchystripe_api_details: encontrar un método de la API de Stripe y ver sus parámetrosstripe_api_read: leer datos: clientes, suscripciones, facturas, saldostripe_api_write: crear y cambiar: productos, precios, enlaces de pago, suscripcionesget_stripe_account_info: información de la cuentastripe_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.
Operaciones básicas con el MCP
Crear un producto y un precio:
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:
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_XXXXXLe 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:
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 montoWebhooks: 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:
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 '', 200El 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:
Cliente → Payment Link → webhook de Stripe → tu servidor
↓
Claude analiza el evento
↓
crea la cuenta / la activa / la bloquea
↓
envía el email de bienvenidaClaude puede manejar estos eventos con inteligencia. Por ejemplo, cuando se cancela una suscripción:
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:
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
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 reportPráctica
Paso 1: Obtener la clave de API de Stripe
- Regístrate en stripe.com
- Dashboard → Developers → API keys (los nombres de los menús de Stripe cambian; trabaja en modo de prueba)
- 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
- Guárdalas en
.env:Código STRIPE_SECRET_KEY=sk_test_xxx STRIPE_PUBLISHABLE_KEY=pk_test_xxx
Paso 2: Conectar Stripe MCP
# 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 listaPaso 3: Crear tu primer producto con Claude
En Claude Code escribe:
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
- Abre el payment link en el navegador
- Usa la tarjeta de prueba de Stripe:
4242 4242 4242 4242 - Cualquier fecha futura, cualquier CVC
- Revisa en Stripe Dashboard → Payments
Paso 5: Correr un webhook local (opcional)
# 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.succeededPaso 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