Skip to main content
Glama

Bucketeer MCP Server

Official
by bucketeer-io
list-flags.ts3.75 kB
import { z } from "zod"; import { BucketeerClient } from "../api/client.js"; import { config, getEnvironmentId } from "../config.js"; import { logger } from "../utils/logger.js"; import type { ListFeaturesRequest } from "../types/bucketeer.js"; // Input schema for the list-flags tool export const listFlagsSchema = z.object({ environmentId: z.string().optional(), pageSize: z.number().min(1).max(100).optional().default(20), cursor: z.string().optional(), tags: z.array(z.string()).optional(), orderBy: z.enum(["CREATED_AT", "UPDATED_AT", "NAME"]).optional(), orderDirection: z.enum(["ASC", "DESC"]).optional(), searchKeyword: z.string().optional(), maintainer: z.string().optional(), archived: z.boolean().optional(), }); export type ListFlagsInput = z.infer<typeof listFlagsSchema>; export const listFlagsTool = { name: "listFeatureFlags", description: "List all feature flags in the specified environment", inputSchema: { type: "object" as const, properties: { environmentId: { type: "string", description: "Environment ID (uses default if not provided)", }, pageSize: { type: "number", description: "Number of items per page (1-100)", default: 20, }, cursor: { type: "string", description: "Pagination cursor for next page", }, tags: { type: "array", items: { type: "string" }, description: "Filter by tags", }, orderBy: { type: "string", enum: ["CREATED_AT", "UPDATED_AT", "NAME"], description: "Field to order by", }, orderDirection: { type: "string", enum: ["ASC", "DESC"], description: "Order direction", }, searchKeyword: { type: "string", description: "Search keyword for feature name or ID", }, maintainer: { type: "string", description: "Filter by maintainer email", }, archived: { type: "boolean", description: "Filter by archived status", }, }, }, handler: async (input: unknown) => { try { // Validate input const params = listFlagsSchema.parse(input); logger.debug("Listing feature flags", params); // Create API client const client = new BucketeerClient( config.bucketeerHost, config.bucketeerApiKey, ); // Prepare request const request: ListFeaturesRequest = { environmentId: getEnvironmentId(params.environmentId), pageSize: params.pageSize, cursor: params.cursor, tags: params.tags, orderBy: params.orderBy, orderDirection: params.orderDirection, searchKeyword: params.searchKeyword, maintainer: params.maintainer, archived: params.archived, }; // Make API call const response = await client.listFeatures(request); logger.info( `Successfully listed ${response.features.length} feature flags`, ); return { content: [ { type: "text", text: JSON.stringify( { success: true, features: response.features, cursor: response.cursor, totalCount: response.totalCount, }, null, 2, ), }, ], }; } catch (error) { logger.error("Failed to list feature flags", 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, }; } }, };

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

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