Finance

stripe-verify - Claude MCP Skill

End-to-end verification of Stripe integration. Deep testing including real checkout flows, webhook delivery, and subscription state transitions.

SEO Guide: Enhance your AI agent with the stripe-verify tool. This Model Context Protocol (MCP) server allows Claude Desktop and other LLMs to end-to-end verification of stripe integration. deep testing including real checkout flows, webhook d... Download and configure this skill to unlock new capabilities for your AI workflow.

🌟1 stars • 1 forks
šŸ“„0 downloads

Documentation

SKILL.md
# Stripe Verify

Comprehensive end-to-end verification. Go deep — billing bugs are expensive.

## Objective

Prove the integration works. Not "looks right" — actually works. Test real flows, verify real state changes, confirm real webhook delivery.

## Process

**1. Configuration Verification**

Before functional tests, verify all configuration:

```bash
# Env vars exist
bunx convex env list | rg "^(STRIPE_|CONVEX_WEBHOOK_TOKEN=)"
bunx convex env list --prod | rg "^(STRIPE_|CONVEX_WEBHOOK_TOKEN=)"
vercel env ls --environment=production 2>/dev/null | rg "^(STRIPE_|CONVEX_WEBHOOK_TOKEN=)" || true

# Token parity (Next/Vercel ↔ Convex) - P0 invariant
vercel env pull .env.vercel-parity-check --environment=production --yes >/dev/null
vercel_token=$(rg "^CONVEX_WEBHOOK_TOKEN=" .env.vercel-parity-check | head -n1 | cut -d= -f2-)
rm -f .env.vercel-parity-check
convex_token=$(bunx convex env get --prod CONVEX_WEBHOOK_TOKEN 2>/dev/null || true)
[ -n "$vercel_token" ] && [ -n "$convex_token" ] && [ "$vercel_token" = "$convex_token" ] && echo "āœ“ CONVEX_WEBHOOK_TOKEN parity (prod)" || echo "āœ— CONVEX_WEBHOOK_TOKEN parity failed (prod)"

# Webhook URL accessible
curl -s -o /dev/null -w "%{http_code}" -I -X POST "$WEBHOOK_URL"
# Must be 4xx or 5xx, not 3xx

# Stripe CLI connected
stripe listen --print-json --latest
```

**2. Checkout Flow Test**

Create a real test checkout session:

```bash
# Trigger checkout (via app or API)
# Complete with Stripe test card: 4242 4242 4242 4242

# Verify:
# - Session created successfully
# - Redirect works
# - Success page loads
# - POST /api/stripe/checkout/confirm succeeds (or equivalent return-page sync)
# - Webhook received (check logs)
# - Subscription created in Stripe Dashboard
# - User state updated in database
```

**3. Webhook Delivery Test**

Verify webhooks are actually delivering:

```bash
# Check pending webhooks
stripe events list --limit 5 | jq '.data[] | {id, type, pending_webhooks}'

# Resend a recent event
stripe events resend <event_id> --webhook-endpoint <endpoint_id>

# Watch logs for delivery
vercel logs <app> --json | grep webhook
```

All recent events should have `pending_webhooks: 0`.

**4. Subscription State Transitions**

Test each state transition:

**New → Trial**
- Create account
- Verify trial starts
- Verify trial end date correct

**Trial → Active**
- Complete checkout during trial
- Verify remaining trial honored (trial_end passed to Stripe)
- Verify local state updated

**Active → Canceled**
- Cancel subscription (via customer portal or API)
- Verify access continues until period end
- Verify state reflects cancellation

**Canceled → Resubscribed**
- Resubscribe after cancellation
- Verify new subscription created
- Verify billing starts immediately (no new trial)

**Trial Expired**
- Let trial expire (or simulate)
- Verify access revoked
- Verify proper messaging to user

**5. Edge Case Testing**

**Webhook Idempotency**
- Resend the same webhook event twice
- Verify no duplicate processing
- Verify no state corruption

**Out-of-Order Webhooks**
- If possible, simulate events arriving out of order
- Verify system handles gracefully

**Payment Failure**
- Use Stripe test card for decline: 4000 0000 0000 0002
- Verify subscription goes to past_due
- Verify access policy for past_due state

**6. Access Control Verification**

Test that access control actually works:

- Active subscriber → can access features
- Trial user → can access features
- Expired trial → blocked
- Canceled (in period) → can access
- Canceled (past period) → blocked
- Past due → depends on policy (usually grace period)

**7. Business Model Compliance**

Verify against `business-model-preferences`:

- Single pricing tier? (no multiple options)
- Trial honored on upgrade? (check Stripe subscription has trial_end)
- No freemium logic? (expired trial = no access)

**8. Subscription Management UX**

Verify against `stripe-subscription-ux` requirements:

**Settings Page Exists:**
- [ ] Settings page has subscription section
- [ ] Current plan name displayed
- [ ] Subscription status with visual indicator
- [ ] Next billing date shown
- [ ] Payment method displayed (brand + last4)

**Stripe Portal Integration:**
- [ ] "Manage Subscription" button exists
- [ ] Button creates portal session and redirects
- [ ] Return URL configured correctly

**Billing History:**
- [ ] Past invoices displayed
- [ ] Invoice PDFs downloadable
- [ ] Payment statuses shown

**State-Specific UX:**
- [ ] Trial banner shows for trialing users
- [ ] Canceled state shows period end date
- [ ] Past due state shows payment update CTA
- [ ] Active state shows "all good" indicator

**This is a hard requirement.** If subscription management UX is missing,
verification fails. Users must be able to manage their billing.

## Output

Verification report:

```
STRIPE VERIFICATION REPORT
=========================

CONFIGURATION
āœ“ All env vars present
āœ“ Webhook URL responds correctly
āœ“ Stripe CLI connected

CHECKOUT FLOW
āœ“ Session creates
āœ“ Payment succeeds
āœ“ Webhook received
āœ“ State updated

SUBSCRIPTION STATES
āœ“ Trial → Active
āœ“ Active → Canceled
āœ“ Canceled → Resubscribed
⚠ Trial expiration: not tested (would require waiting)

EDGE CASES
āœ“ Idempotent webhook handling
āœ“ Payment decline handled
āœ— Out-of-order webhooks: not testable

ACCESS CONTROL
āœ“ Active: access granted
āœ“ Trial: access granted
āœ“ Expired: access denied
āœ“ Canceled in-period: access granted

BUSINESS MODEL
āœ“ Single tier
āœ“ Trial completion on upgrade
āœ“ No freemium

SUBSCRIPTION MANAGEMENT UX
āœ“ Settings page has subscription section
āœ“ Plan name and status displayed
āœ“ Next billing date shown
āœ“ Payment method displayed
āœ“ Manage Subscription button works
āœ“ Billing history accessible
āœ“ Trial banner for trialing users
āœ“ Canceled state messaging
⚠ Past due state: not tested

---
STATUS: VERIFIED (with minor gaps)
```

## When to Run

- After `stripe-setup` (new integration)
- After `stripe-reconcile` (fixes applied)
- Before production deployment
- Periodically as health check

## Deep Mode

This skill defaults to deep verification. Don't skip tests to save time. Billing bugs cost more than the time spent testing.

Signals

Avg rating⭐ 0.0
Reviews0
Favorites0

Information

Repository
phrazzld/claude-config
Author
phrazzld
Last Sync
3/2/2026
Repo Updated
3/1/2026
Created
1/23/2026

Reviews (0)

No reviews yet. Be the first to review this skill!