Stripe + Brevo Integration
Stripe + Brevo
Connect Stripe’s payment data to Brevo’s engagement layer. Every payment event, subscription created, payment failed, refund issued, becomes a trigger for targeted messaging.
MCP Servers Used
| Server | Package | Auth | Purpose |
|---|---|---|---|
| Stripe MCP | @stripe/mcp | API key | Payments, subscriptions, customers, invoices, products, knowledge base |
| Brevo MCP | mcp.brevo.com/v1/brevo/mcp | Token | Contacts, email, SMS, WhatsApp, campaigns, event tracking |
Setup
Step 1: Connect Both MCP Servers
{ "mcpServers": { "stripe": { "command": "npx", "args": ["-y", "@stripe/mcp"], "env": { "STRIPE_SECRET_KEY": "sk_live_your-stripe-key" } }, "brevo": { "command": "npx", "args": [ "mcp-remote", "https://mcp.brevo.com/v1/brevo/mcp", "--header", "Authorization: Bearer ${BREVO_MCP_TOKEN}" ], "env": { "BREVO_MCP_TOKEN": "your-brevo-mcp-token" } } }}Step 2: Verify
> Show me my Stripe subscriptions created this week> List my Brevo email templatesUse Case 1: Payment Event Campaign Agent
Map Stripe events to Brevo engagement:
---name: stripe-payment-campaignsdescription: Trigger Brevo campaigns from Stripe payment eventsversion: 1.0.0temperature: 0.2tools: - stripe - brevo_contacts - brevo_email_campaign_management - brevo_templates - brevo_sms_campaignstriggers: - event: payment_intent.succeeded - event: invoice.payment_failed - event: customer.subscription.created - event: customer.subscription.deleted - event: charge.refunded---
# Payment Event Campaign Agent
Listen for Stripe payment events and trigger the appropriateBrevo engagement campaign.
## Event-to-Campaign Mapping
| Stripe Event | Brevo Action | Timing ||-------------|-------------|--------|| `payment_intent.succeeded` | Send receipt + thank you email | Immediate || `invoice.payment_failed` | Send payment failed email + SMS | Immediate || `invoice.payment_failed` (2nd attempt) | Send urgent SMS with update link | +24h || `customer.subscription.created` | Welcome sequence (3 emails over 7 days) | Immediate || `customer.subscription.updated` | Plan change confirmation email | Immediate || `customer.subscription.deleted` | Cancellation survey + win-back sequence | Immediate + 7 days || `charge.refunded` | Refund confirmation + feedback request | Immediate || `invoice.upcoming` | Renewal reminder with usage summary | 3 days before |
## Failed Payment Recovery
Critical revenue recovery flow:
1. **Attempt 1 fails**: Email with "Update payment method" CTA2. **+24 hours**: SMS with direct link to billing portal3. **+72 hours**: Email from founder: "We don't want to lose you"4. **+7 days (final)**: Last chance email with grace period deadline
## Rules- ALWAYS sync Stripe customer email to Brevo before sending- NEVER expose full payment details in emails (last 4 digits only)- Track events: stripe_payment_email_sent, stripe_recovery_success- For failed payments, stop sequence immediately if payment succeedsUse Case 2: Subscription Lifecycle Agent
Manage the full subscription journey:
---name: stripe-subscription-lifecycledescription: Manage subscription engagement from signup through renewalversion: 1.0.0temperature: 0.3tools: - stripe - brevo_contacts - brevo_email_campaign_management - brevo_segments - brevo_templatestriggers: - schedule: "0 8 * * *"---
# Subscription Lifecycle Agent
Daily check of subscription states to drive engagement:
## Daily Tasks
1. **New subscriptions (last 24h)** - Create/update Brevo contact with plan details - Add to plan-specific segment - Trigger onboarding sequence
2. **Renewals coming (next 7 days)** - Send renewal reminder with usage summary - For annual plans: send "year in review" email
3. **Trials expiring (next 3 days)** - Send trial-to-paid conversion email - SMS reminder on last day
4. **Recently churned (last 7 days)** - Add to win-back segment - Schedule win-back sequence (day 7, 14, 30)
## Brevo Attributes from Stripe
| Stripe Data | Brevo Attribute ||------------|-----------------|| subscription.plan.name | PLAN_NAME || subscription.current_period_end | RENEWAL_DATE || subscription.status | SUBSCRIPTION_STATUS || customer.currency | CURRENCY || invoice.amount_paid (sum) | LIFETIME_REVENUE || subscription.created | SUBSCRIPTION_START |
## Rules- ALWAYS use customer's currency when displaying amounts- Segment by plan tier for differentiated messaging- Track MRR impact of each campaign for ROI reportingExample: Real-Time Orchestration
You: "I see we had 5 failed payments today. Check which ones are subscription customers and start the recovery sequence."
Claude: Checking Stripe for failed payments today...[Uses stripe MCP to list recent failed invoices]
Found 5 failed payments:- 3 are subscription customers (monthly plans)- 2 are one-time payments
For the 3 subscription customers:[Uses brevo_contacts to verify contacts exist][Uses brevo_email_campaign_management to send payment failed email][Uses brevo_sms_campaigns to queue SMS follow-ups for +24h]
Recovery sequence started for 3 customers:- [email protected], Pro plan ($49/mo), email sent- [email protected], Business plan ($99/mo), email sent- [email protected], Pro plan ($49/mo), email sent- SMS follow-ups scheduled for tomorrow if not resolved
For the 2 one-time payments:[Uses brevo_email_campaign_management to send payment retry email]- Simple retry emails sentNext Steps
- Shopify + Brevo, E-commerce integration
- HubSpot + Brevo, CRM integration
- Custom API + Brevo, Build your own connector