# Stripe MCP Server Model Context Protocol (MCP) server for Stripe API integration. Provides comprehensive access to Stripe's payment processing, subscription management, and customer data. ## Features - 🔐 **Secure Authentication** - Bearer token authentication with API key - 🔄 **Automatic Retries** - Exponential backoff with configurable retry logic - 📊 **Pagination Support** - Cursor-based pagination with automatic iteration - 🎯 **Idempotency** - Built-in idempotency key support for safe retries - 🛡️ **Type Safety** - Comprehensive TypeScript types for all Stripe entities - 🚀 **Lazy Loading** - Tool modules loaded on-demand for better performance - 🔌 **Dual Transport** - Supports both stdio and HTTP/SSE transports - 📦 **Resource Handlers** - Pre-built resources for common UI needs ## Installation ```bash npm install ``` ## Configuration Create a `.env` file based on `.env.example`: ```bash # Required STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxxxxxxxxxxx # Optional STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxx PORT=3000 TRANSPORT_MODE=stdio # stdio | http | dual ``` ### Environment Variables | Variable | Required | Description | |----------|----------|-------------| | `STRIPE_SECRET_KEY` | ✅ Yes | Your Stripe secret API key (starts with `sk_test_` or `sk_live_`) | | `STRIPE_WEBHOOK_SECRET` | ❌ No | Webhook signing secret for webhook verification (starts with `whsec_`) | | `PORT` | ❌ No | HTTP server port for SSE transport (default: 3000) | | `TRANSPORT_MODE` | ❌ No | Transport mode: `stdio`, `http`, or `dual` (default: stdio) | ## Usage ### Development Mode ```bash npm run dev ``` ### Production Build ```bash npm run build npm start ``` ### Transport Modes #### stdio (Default) Used by MCP clients like Claude Desktop: ```bash npm start # or TRANSPORT_MODE=stdio npm start ``` #### HTTP/SSE For web-based integrations: ```bash TRANSPORT_MODE=http npm start # Server available at http://localhost:3000 ``` #### Dual Transport Run both simultaneously: ```bash TRANSPORT_MODE=dual npm start ``` ## Tool Categories The server provides lazy-loaded tool modules organized by functionality: ### 💳 Payments - `charges` - Create, retrieve, update, and list charges - `payment-intents` - Manage payment intents - `payment-methods` - Handle payment methods - `refunds` - Process and manage refunds - `disputes` - Handle payment disputes ### 👥 Customers - `customers` - Create and manage customers ### 📅 Subscriptions - `subscriptions` - Manage recurring subscriptions - `invoices` - Handle invoices and billing ### 🏷️ Products & Pricing - `products` - Manage products - `prices` - Handle pricing models ### 💰 Payouts & Balance - `payouts` - Manage payouts to bank accounts - `balance` - Check account balance and transactions ### 🔔 Events & Webhooks - `events` - Retrieve and search events - `webhooks` - Manage webhook endpoints ## Resource URIs Pre-built resources for UI applications: | URI | Description | |-----|-------------| | `stripe://dashboard` | Account overview and key metrics | | `stripe://customers` | Customer list | | `stripe://payments/recent` | Recent payments and charges | | `stripe://subscriptions/active` | Active subscriptions | | `stripe://invoices/unpaid` | Unpaid invoices | ## API Client Features ### Automatic Pagination ```typescript // Iterate through all customers for await (const customer of client.paginate('customers')) { console.log(customer.email); } ``` ### Idempotency Keys ```typescript // Safe retry with idempotency const result = await client.create('charges', data, { idempotencyKey: client.generateIdempotencyKey() }); ``` ### Retry Logic - Automatic retry on 429 (rate limit), 409 (conflict), and 5xx errors - Exponential backoff with jitter - Respects `Stripe-Should-Retry` and `Retry-After` headers - Configurable retry count (default: 3) ### Form Encoding Stripe requires `application/x-www-form-urlencoded` for POST requests. The client automatically handles: - Nested object encoding with dot notation - Array parameters - Metadata fields - Null/undefined value filtering ## Type Safety All Stripe entities use branded ID types for additional type safety: ```typescript type CustomerId = string & { __brand: 'CustomerId' }; type PaymentIntentId = string & { __brand: 'PaymentIntentId' }; ``` This prevents accidentally mixing different ID types. ## Error Handling The server provides structured error responses: ```json { "error": { "type": "api_error", "message": "The API key provided is invalid.", "code": "invalid_api_key" } } ``` Common error types: - `api_error` - Stripe API errors - `card_error` - Card-related errors - `rate_limit_error` - Too many requests - `invalid_request_error` - Invalid parameters - `authentication_error` - Invalid API key ## Health Check When running in HTTP mode, health check available at: ```bash curl http://localhost:3000/health ``` Response: ```json { "status": "healthy", "service": "@mcpengine/stripe", "version": "1.0.0", "timestamp": "2024-01-18T12:00:00.000Z", "uptime": 123.45, "memory": { "rss": 45678, "heapTotal": 23456, "heapUsed": 12345 }, "node": "v22.0.0" } ``` ## Graceful Shutdown The server handles shutdown signals gracefully: - `SIGTERM` - Kubernetes/Docker shutdown - `SIGINT` - Ctrl+C in terminal - `SIGUSR2` - Nodemon restart Cleanup process: 1. Stop accepting new connections 2. Finish processing active requests 3. Close MCP server connection 4. Exit with code 0 ## Development ### Project Structure ``` stripe/ ├── src/ │ ├── clients/ │ │ └── stripe.ts # Stripe API client │ ├── types/ │ │ └── index.ts # TypeScript type definitions │ ├── tools/ # Tool modules (lazy-loaded) │ │ ├── customers.ts │ │ ├── charges.ts │ │ └── ... │ ├── server.ts # MCP server implementation │ └── main.ts # Entry point ├── package.json ├── tsconfig.json ├── .env.example └── README.md ``` ### Adding New Tools 1. Create a new file in `src/tools/` 2. Export an array of `ToolModule` objects 3. Register in `TOOL_MODULES` in `src/server.ts` ### Testing ```bash # Type check npm run build # Run in dev mode npm run dev ``` ## Security Considerations - **Never commit `.env` file** - Contains sensitive API keys - **Use test keys in development** - Keys starting with `sk_test_` - **Rotate keys regularly** - Especially after security incidents - **Webhook signature verification** - Use `STRIPE_WEBHOOK_SECRET` for webhooks - **Idempotency keys** - Prevent duplicate charges on retries ## Stripe API Version This server uses Stripe API version `2024-01-18`. The version is set in the `Stripe-Version` header for all requests. ## License MIT ## Support For issues and questions: - Stripe API Docs: https://stripe.com/docs/api - MCP Protocol: https://github.com/anthropics/model-context-protocol