Skip to main content
Glama

create_stripe_product

Generate and manage Stripe products directly from PocketBase using the Model Context Protocol (MCP). Simplify integration and streamline product creation for seamless e-commerce setups.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Primary handler and registration for the 'create_stripe_product' MCP tool. Defines input schema with Zod validation, lazy-initializes StripeService, delegates to its createProduct method, handles errors, and returns standardized 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}`); } } );
  • Core helper method in StripeService class that implements Stripe product creation: creates product and price via Stripe API, persists combined data to PocketBase 'stripe_products' collection, returns typed PocketBase record.
    // Product Management 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}`); } }
  • TypeScript interface defining the structure of StripeProduct records used for input validation and return type casting in the createProduct helper.
    export interface StripeProduct { id: string; name: string; description?: string; price?: number; currency?: string; recurring?: boolean; interval?: 'month' | 'year' | 'week' | 'day'; stripeProductId: string; stripePriceId?: string; active: boolean; metadata?: Record<string, any>; created: string; updated: string; }

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DynamicEndpoints/pocketbase-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server