Skip to main content
Glama
DynamicEndpoints

pocketbase-mcp-server

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;
    }
Install Server

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