Skip to main content
Glama
nnnkkk7

Bucketeer MCP Server

by nnnkkk7

createFeatureFlag

Create a new feature flag in Bucketeer to control feature releases, define variations, and manage rollout strategies.

Instructions

Create a new feature flag in the specified environment

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesUnique identifier for the feature flag (alphanumeric, hyphens, underscores)
nameYesHuman-readable name for the feature flag
descriptionNoDescription of the feature flag
environmentIdNoEnvironment ID (uses default if not provided)
variationsYesList of variations (at least 2 required)
tagsNoTags for the feature flag
defaultOnVariationIndexYesIndex of the variation to serve when flag is on (0-based)
defaultOffVariationIndexYesIndex of the variation to serve when flag is off (0-based)
variationTypeNoType of the variation values (default: STRING)

Implementation Reference

  • The async handler function that parses and validates input with Zod schema, creates a BucketeerClient instance, constructs the CreateFeatureRequest, calls the createFeature API method, logs the result, and returns structured success or error content.
    handler: async (input: unknown) => {
      try {
        // Validate input
        const params = createFlagSchema.parse(input);
        
        // Validate variation indices
        if (params.defaultOnVariationIndex >= params.variations.length) {
          throw new Error(`defaultOnVariationIndex ${params.defaultOnVariationIndex} is out of bounds. Must be less than ${params.variations.length}`);
        }
        if (params.defaultOffVariationIndex >= params.variations.length) {
          throw new Error(`defaultOffVariationIndex ${params.defaultOffVariationIndex} is out of bounds. Must be less than ${params.variations.length}`);
        }
        
        logger.debug('Creating feature flag', params);
        
        // Create API client
        const client = new BucketeerClient(config.bucketeerHost, config.bucketeerApiKey);
        
        // Prepare request
        const request: CreateFeatureRequest = {
          id: params.id,
          name: params.name,
          description: params.description,
          environmentId: getEnvironmentId(params.environmentId),
          variations: params.variations,
          tags: params.tags,
          defaultOnVariationIndex: params.defaultOnVariationIndex,
          defaultOffVariationIndex: params.defaultOffVariationIndex,
          variationType: params.variationType,
        };
        
        // Make API call
        const response = await client.createFeature(request);
        
        logger.info(`Successfully created feature flag: ${response.feature.id}`);
        
        return {
          content: [{
            type: 'text',
            text: JSON.stringify({
              success: true,
              feature: response.feature,
            }, null, 2),
          }],
        };
      } catch (error) {
        logger.error('Failed to create feature flag', error);
        
        if (error instanceof z.ZodError) {
          return {
            content: [{
              type: 'text',
              text: JSON.stringify({
                success: false,
                error: 'Invalid input parameters',
                details: error.errors,
              }, null, 2),
            }],
            isError: true,
          };
        }
        
        return {
          content: [{
            type: 'text',
            text: JSON.stringify({
              success: false,
              error: error instanceof Error ? error.message : 'Unknown error',
            }, null, 2),
          }],
          isError: true,
        };
      }
  • Zod schema used for runtime input validation within the handler, defining properties like id, name, variations, indices, and variationType.
    export const createFlagSchema = z.object({
      id: z.string()
        .min(1, 'Feature flag ID is required')
        .regex(/^[a-zA-Z0-9-_]+$/, 'ID must contain only alphanumeric characters, hyphens, and underscores'),
      name: z.string().min(1, 'Feature flag name is required'),
      description: z.string().optional().default(''),
      environmentId: z.string().optional(),
      variations: z.array(variationSchema).min(2, 'At least 2 variations are required'),
      tags: z.array(z.string()).optional(),
      defaultOnVariationIndex: z.number().min(0),
      defaultOffVariationIndex: z.number().min(0),
      variationType: z.nativeEnum(VariationType).optional().default(VariationType.STRING),
    });
  • JSON Schema object defined within the tool for MCP protocol input validation and documentation.
    inputSchema: {
      type: 'object' as const,
      properties: {
        id: {
          type: 'string',
          description: 'Unique identifier for the feature flag (alphanumeric, hyphens, underscores)',
        },
        name: {
          type: 'string',
          description: 'Human-readable name for the feature flag',
        },
        description: {
          type: 'string',
          description: 'Description of the feature flag',
        },
        environmentId: {
          type: 'string',
          description: 'Environment ID (uses default if not provided)',
        },
        variations: {
          type: 'array',
          description: 'List of variations (at least 2 required)',
          items: {
            type: 'object',
            properties: {
              value: {
                type: 'string',
                description: 'The value returned when this variation is served',
              },
              name: {
                type: 'string',
                description: 'Name of the variation',
              },
              description: {
                type: 'string',
                description: 'Description of the variation',
              },
            },
            required: ['value', 'name'],
          },
        },
        tags: {
          type: 'array',
          items: { type: 'string' },
          description: 'Tags for the feature flag',
        },
        defaultOnVariationIndex: {
          type: 'number',
          description: 'Index of the variation to serve when flag is on (0-based)',
        },
        defaultOffVariationIndex: {
          type: 'number',
          description: 'Index of the variation to serve when flag is off (0-based)',
        },
        variationType: {
          type: 'string',
          enum: ['STRING', 'BOOLEAN', 'NUMBER', 'JSON'],
          description: 'Type of the variation values (default: STRING)',
        },
      },
      required: ['id', 'name', 'variations', 'defaultOnVariationIndex', 'defaultOffVariationIndex'],
    },
  • The tools array registers createFlagTool alongside other flag management tools, likely used for MCP server toolset initialization.
    export const tools = [
      listFlagsTool,
      createFlagTool,
      getFlagTool,
      updateFlagTool,
      archiveFlagTool,
    ];

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/nnnkkk7/bucketeer-mcp'

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