Skip to main content
Glama
DynamicEndpoints

Advanced PocketBase MCP Server

create_stripe_product

Create and manage products in Stripe for integration with PocketBase databases, enabling payment processing and subscription setup.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • 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}`);
        }
      }
    );
  • 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}`);
      }
    }
  • 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']
      }
    },

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/advanced-pocketbase-mcp-server'

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