updateFeatureFlag
Modify an existing feature flag's properties including name, description, tags, enabled status, and archived state while maintaining an audit trail with required comments.
Instructions
Update an existing feature flag
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| archived | No | Archive or unarchive the feature flag | |
| comment | Yes | Comment for the update (required for audit trail) | |
| description | No | New description for the feature flag | |
| enabled | No | Enable or disable the feature flag | |
| environmentId | No | Environment ID (uses default if not provided) | |
| id | Yes | The ID of the feature flag to update | |
| name | No | New name for the feature flag | |
| tags | No | New tags for the feature flag |
Implementation Reference
- src/tools/update-flag.ts:77-187 (handler)Executes the tool logic: validates input with Zod, creates BucketeerClient, builds UpdateFeatureRequest with provided fields, calls updateFeature API, returns success response with feature details or error.handler: async (input: unknown) => { try { // Validate input const params = updateFlagSchema.parse(input); logger.debug("Updating feature flag", params); // Create API client const client = new BucketeerClient( config.bucketeerHost, config.bucketeerApiKey, ); // Prepare request const request: UpdateFeatureRequest = { id: params.id, comment: params.comment, environmentId: getEnvironmentId(params.environmentId), }; // Only add fields that are being updated if (params.name !== undefined) { request.name = params.name; } if (params.description !== undefined) { request.description = params.description; } if (params.tags !== undefined) { request.tags = { values: params.tags }; } if (params.enabled !== undefined) { request.enabled = params.enabled; } if (params.archived !== undefined) { request.archived = params.archived; } // Make API call const response = await client.updateFeature(request); logger.info(`Successfully updated feature flag: ${response.feature.id}`); return { content: [ { type: "text", text: JSON.stringify( { success: true, feature: response.feature, updated: { ...(params.name !== undefined && { name: params.name }), ...(params.description !== undefined && { description: params.description, }), ...(params.tags !== undefined && { tags: params.tags }), ...(params.enabled !== undefined && { enabled: params.enabled, }), ...(params.archived !== undefined && { archived: params.archived, }), }, }, null, 2, ), }, ], }; } catch (error) { logger.error("Failed to update feature flag", error); if (error instanceof z.ZodError) { return { content: [ { type: "text", text: JSON.stringify( { success: false, error: "Invalid input parameters", details: error.issues, }, 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, }; } },
- src/tools/update-flag.ts:8-31 (schema)Zod schema used for input validation in the handler, ensuring required fields and at least one updatable field.export const updateFlagSchema = z .object({ id: z.string().min(1, "Feature flag ID is required"), comment: z.string().min(1, "Comment is required for all updates"), environmentId: z.string().optional(), name: z.string().optional(), description: z.string().optional(), tags: z.array(z.string()).optional(), enabled: z.boolean().optional(), archived: z.boolean().optional(), }) .refine( (data) => { // At least one update field must be provided return ( data.name !== undefined || data.description !== undefined || data.tags !== undefined || data.enabled !== undefined || data.archived !== undefined ); }, { message: "At least one field to update must be provided" }, );
- src/tools/index.ts:7-13 (registration)The updateFlagTool is included in the exported tools array, which is imported and used by the MCP server for tool listing and execution.export const tools = [ listFlagsTool, createFlagTool, getFlagTool, updateFlagTool, archiveFlagTool, ];
- src/server.ts:8-8 (registration)Imports the tools array containing updateFlagTool for use in MCP server request handlers.import { tools } from "./tools/index.js";
- src/tools/update-flag.ts:38-76 (schema)JSON schema provided in the tool definition for MCP tool listing and client-side validation.inputSchema: { type: "object" as const, properties: { id: { type: "string", description: "The ID of the feature flag to update", }, comment: { type: "string", description: "Comment for the update (required for audit trail)", }, environmentId: { type: "string", description: "Environment ID (uses default if not provided)", }, name: { type: "string", description: "New name for the feature flag", }, description: { type: "string", description: "New description for the feature flag", }, tags: { type: "array", items: { type: "string" }, description: "New tags for the feature flag", }, enabled: { type: "boolean", description: "Enable or disable the feature flag", }, archived: { type: "boolean", description: "Archive or unarchive the feature flag", }, }, required: ["id", "comment"], },