create_stripe_product
Create and manage products in Stripe for integration with PocketBase databases, enabling payment processing and subscription setup.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/agent-simple.ts:693-734 (handler)Tool registration and inline handler function for 'create_stripe_product'. Includes Zod input schema validation, lazy initialization of StripeService, calls the service's createProduct method, handles errors, and formats MCP response.this.server.tool( 'create_stripe_product', { description: 'Create a new product in Stripe', inputSchema: { name: z.string().describe('Product name'), description: z.string().optional().describe('Product description'), price: z.number().int().positive().describe('Price in cents'), currency: z.string().length(3).optional().describe('Currency code (default: USD)'), interval: z.enum(['month', 'year', 'week', 'day']).optional().describe('Billing interval for subscriptions') } }, async ({ name, description, price, currency, interval }) => { // Lazy load Stripe service await this.ensureStripeService(); if (!this.stripeService) { throw new Error('Stripe service not available. Please set STRIPE_SECRET_KEY environment variable.'); } try { const product = await this.stripeService.createProduct({ name, description, price, currency: currency || 'usd', interval }); return { content: [{ type: 'text', text: JSON.stringify({ success: true, product }, null, 2) }] }; } catch (error: any) { throw new Error(`Failed to create product: ${error.message}`); } } );
- src/services/stripe.ts:21-66 (helper)Core implementation in StripeService.createProduct: creates Stripe Product and Price objects via Stripe API, then creates a record in PocketBase 'stripe_products' collection to persist the data.async createProduct(data: { name: string; description?: string; price: number; currency?: string; recurring?: boolean; interval?: 'month' | 'year' | 'week' | 'day'; metadata?: Record<string, any>; }): Promise<StripeProduct> { try { // Create product in Stripe const stripeProduct = await this.stripe.products.create({ name: data.name, description: data.description, metadata: data.metadata || {}, }); // Create price in Stripe const stripePrice = await this.stripe.prices.create({ unit_amount: data.price, currency: data.currency || 'usd', product: stripeProduct.id, recurring: data.recurring ? { interval: data.interval || 'month', } : undefined, }); // Save to PocketBase const productRecord = await this.pb.collection('stripe_products').create({ name: data.name, description: data.description, price: data.price, currency: data.currency || 'usd', recurring: data.recurring || false, interval: data.interval, stripeProductId: stripeProduct.id, stripePriceId: stripePrice.id, active: true, metadata: data.metadata || {}, }); return productRecord as unknown as StripeProduct; } catch (error: any) { throw new Error(`Failed to create product: ${error.message}`); } }
- src/agent-simple.ts:697-734 (schema)Zod schema for input validation of the create_stripe_product tool parameters.inputSchema: { name: z.string().describe('Product name'), description: z.string().optional().describe('Product description'), price: z.number().int().positive().describe('Price in cents'), currency: z.string().length(3).optional().describe('Currency code (default: USD)'), interval: z.enum(['month', 'year', 'week', 'day']).optional().describe('Billing interval for subscriptions') } }, async ({ name, description, price, currency, interval }) => { // Lazy load Stripe service await this.ensureStripeService(); if (!this.stripeService) { throw new Error('Stripe service not available. Please set STRIPE_SECRET_KEY environment variable.'); } try { const product = await this.stripeService.createProduct({ name, description, price, currency: currency || 'usd', interval }); return { content: [{ type: 'text', text: JSON.stringify({ success: true, product }, null, 2) }] }; } catch (error: any) { throw new Error(`Failed to create product: ${error.message}`); } } );
- src/worker.ts:298-312 (registration)Tool schema registration in worker.ts for tools/list endpoint (no execution handler).{ name: 'create_stripe_product', description: 'Create a new product in Stripe', inputSchema: { type: 'object', properties: { name: { type: 'string', description: 'Product name' }, description: { type: 'string', description: 'Product description' }, price: { type: 'number', description: 'Price in cents' }, currency: { type: 'string', description: 'Currency code (default: USD)' }, interval: { type: 'string', enum: ['month', 'year', 'week', 'day'], description: 'Billing interval for subscriptions' } }, required: ['name', 'price'] } },