Skip to main content
Glama
nnnkkk7

Bucketeer MCP Server

by nnnkkk7

Bucketeer MCP Server

A Model Context Protocol (MCP) server for managing feature flags in Bucketeer, an open-source feature flag management platform.

Features

This MCP server provides tools for basic CRUD operations on Bucketeer feature flags:

  • listFeatureFlags - List all feature flags with filtering and pagination

  • createFeatureFlag - Create a new feature flag

  • getFeatureFlag - Get a specific feature flag by ID

  • updateFeatureFlag - Update an existing feature flag

  • archiveFeatureFlag - Archive a feature flag (make it inactive)

Related MCP server: hackle-mcp

Prerequisites

  • Node.js 18 or higher

  • A Bucketeer instance with API access

  • An API key with appropriate permissions (READ, WRITE, or ADMIN)

Installation

  1. Clone this repository:

git clone https://github.com/yourusername/bucketeer-mcp.git
cd bucketeer-mcp
  1. Install dependencies:

npm install
  1. Build the project:

npm run build
  1. Create a .env file based on .env.example:

cp .env.example .env
  1. Configure your environment variables in .env:

BUCKETEER_HOST=api.bucketeer.io
BUCKETEER_API_KEY=your-api-key-here
BUCKETEER_ENVIRONMENT_ID=your-environment-id
LOG_LEVEL=info

Usage

Running the Server

Start the MCP server:

npm start

For development with auto-reload:

npm run dev

MCP Client Configuration

To use this server with an MCP client, add it to your MCP client configuration:

{
  "mcpServers": {
    "bucketeer": {
      "command": "node",
      "args": ["/path/to/bucketeer-mcp/dist/index.js"],
      "env": {
        "BUCKETEER_HOST": "api.bucketeer.io",
        "BUCKETEER_API_KEY": "your-api-key",
        "BUCKETEER_ENVIRONMENT_ID": "your-environment-id"
      }
    }
  }
}

Available Tools

listFeatureFlags

List all feature flags in the specified environment.

Parameters:

  • environmentId (optional) - Environment ID (uses default if not provided)

  • pageSize (optional) - Number of items per page (1-100, default: 20)

  • cursor (optional) - Pagination cursor for next page

  • tags (optional) - Filter by tags

  • orderBy (optional) - Field to order by (CREATED_AT, UPDATED_AT, NAME)

  • orderDirection (optional) - Order direction (ASC, DESC)

  • searchKeyword (optional) - Search keyword for feature name or ID

  • maintainer (optional) - Filter by maintainer email

  • archived (optional) - Filter by archived status

createFeatureFlag

Create a new feature flag.

Parameters:

  • id (required) - Unique identifier (alphanumeric, hyphens, underscores)

  • name (required) - Human-readable name

  • description (optional) - Description of the feature flag

  • environmentId (optional) - Environment ID (uses default if not provided)

  • variations (required) - Array of variations (at least 2)

    • value (required) - The value returned when this variation is served

    • name (required) - Name of the variation

    • description (optional) - Description of the variation

  • tags (optional) - Tags for the feature flag

  • defaultOnVariationIndex (required) - Index of variation when flag is on (0-based)

  • defaultOffVariationIndex (required) - Index of variation when flag is off (0-based)

  • variationType (optional) - Type of the variation values: STRING (default), BOOLEAN, NUMBER, or JSON

getFeatureFlag

Get a specific feature flag by ID.

Parameters:

  • id (required) - The ID of the feature flag to retrieve

  • environmentId (optional) - Environment ID (uses default if not provided)

  • featureVersion (optional) - Specific version of the feature to retrieve

updateFeatureFlag

Update an existing feature flag.

Parameters:

  • id (required) - The ID of the feature flag to update

  • comment (required) - Comment for the update (required for audit trail)

  • environmentId (optional) - Environment ID (uses default if not provided)

  • name (optional) - New name for the feature flag

  • description (optional) - New description

  • tags (optional) - New tags

  • enabled (optional) - Enable or disable the feature flag

  • archived (optional) - Archive or unarchive the feature flag

Note:

  • This tool requires a comment for audit trail purposes

  • It does not support updating variations. To modify variations, you would need to archive the current flag and create a new one.

archiveFeatureFlag

Archive a feature flag (make it inactive). Archived flags will return the default value defined in your code for all users.

Parameters:

  • id (required) - The ID of the feature flag to archive

  • environmentId (optional) - Environment ID (uses default if not provided)

  • comment (required) - Comment for the archive action (required for audit trail)

Note: This operation archives the flag rather than permanently deleting it. The flag can be unarchived later if needed.

API Key Permissions

Different operations require different permission levels:

  • READ: Required for listFeatureFlags and getFeatureFlag

  • WRITE: Required for createFeatureFlag, updateFeatureFlag, and archiveFeatureFlag

Development

Project Structure

bucketeer-mcp/
├── src/
│   ├── api/
│   │   └── client.ts       # Bucketeer API client
│   ├── tools/
│   │   ├── list-flags.ts   # List feature flags tool
│   │   ├── create-flag.ts  # Create feature flag tool
│   │   ├── get-flag.ts     # Get feature flag tool
│   │   ├── update-flag.ts  # Update feature flag tool
│   │   ├── archive-flag.ts # Archive feature flag tool
│   │   └── index.ts        # Tool exports
│   ├── types/
│   │   └── bucketeer.ts    # TypeScript type definitions
│   ├── utils/
│   │   └── logger.ts       # Logging utility
│   ├── config.ts           # Configuration management
│   ├── server.ts           # MCP server implementation
│   └── index.ts            # Entry point
├── .env.example            # Environment variables template
├── .gitignore
├── package.json
├── tsconfig.json
└── README.md

Linting

Run the linter:

npm run lint

Building

Build the TypeScript code:

npm run build

Troubleshooting

Common Issues

  1. Authentication errors: Ensure your API key is valid and has the necessary permissions

  2. Environment ID not found: Verify the environment ID exists in your Bucketeer instance

  3. Connection errors: Check that the BUCKETEER_HOST is correct and accessible

Logging

The server logs to stderr in JSON format. Adjust the log level using the LOG_LEVEL environment variable:

  • error - Only errors

  • warn - Warnings and errors

  • info - General information (default)

  • debug - Detailed debug information

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Available Tools

5 tools
archiveFeatureFlagC

Archive a feature flag (make it inactive)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the feature flag to archive
environmentIdNoEnvironment ID (uses default if not provided)
commentYesComment for the archive action (required for audit trail)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('archive') and outcome ('make it inactive'), but doesn't mention critical details like whether this is reversible, requires specific permissions, affects audit trails, or has side effects on dependent systems. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and outcome, making it easy to scan and understand quickly without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of archiving (a mutation operation), no annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like reversibility, permissions, or response format, which are essential for safe and effective tool invocation by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the schema fully documents all three parameters. The description adds no additional meaning beyond what the schema provides, such as explaining the purpose of 'comment' beyond audit trails or default behavior for 'environmentId'. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('archive') and resource ('feature flag') with the outcome ('make it inactive'), which is specific and unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'updateFeatureFlag', which might also modify flag status, leaving some room for confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'updateFeatureFlag' or 'createFeatureFlag'. It lacks context about prerequisites, such as whether the flag must be active, or exclusions, such as not using it for temporary deactivation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createFeatureFlagC

Create a new feature flag in the specified environment

ParametersJSON 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)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a creation operation but doesn't mention any behavioral traits like required permissions, whether the flag becomes active immediately, rate limits, or what happens on duplicate IDs. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that immediately states the tool's purpose without unnecessary words. It's perfectly front-loaded and wastes no space, making it easy for an agent to parse quickly while scanning available tools.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 9 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what happens after creation, error conditions, or how this tool fits into the broader feature flag lifecycle with its siblings. The agent would need to rely heavily on the schema alone, missing important contextual information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema, not explaining relationships between parameters or providing usage examples. This meets the baseline expectation when schema coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('feature flag in the specified environment'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its siblings like 'updateFeatureFlag' or 'archiveFeatureFlag' beyond the basic verb difference, missing an opportunity to clarify the specific creation context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'updateFeatureFlag' or 'archiveFeatureFlag'. It mentions 'specified environment' but doesn't explain prerequisites, dependencies, or typical use cases, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getFeatureFlagC

Get a specific feature flag by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the feature flag to retrieve
environmentIdNoEnvironment ID (uses default if not provided)
featureVersionNoSpecific version of the feature to retrieve

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves a feature flag but doesn't describe what happens if the ID doesn't exist (e.g., error handling), whether it's idempotent, authentication needs, rate limits, or the return format. For a read operation with zero annotation coverage, this leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly. Every part of the sentence earns its place by conveying essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is incomplete. It lacks details on behavioral traits (e.g., error handling, return format), usage context relative to siblings, and doesn't address what 'Get' entails beyond the basic action. For a tool with no annotations or output schema, more descriptive context is needed to fully inform an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all three parameters (id, environmentId, featureVersion) with clear descriptions. The description adds no additional meaning beyond implying 'id' is required (matching the schema's required field). Baseline 3 is appropriate as the schema does the heavy lifting, but the description doesn't compensate or enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('a specific feature flag by ID'), making the purpose immediately understandable. It distinguishes from siblings like 'listFeatureFlags' by specifying retrieval of a single item rather than a collection. However, it doesn't explicitly contrast with other siblings like 'archiveFeatureFlag' or 'updateFeatureFlag' beyond the verb difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing flag ID), exclusions (e.g., not for creating or modifying flags), or direct comparisons to siblings like 'listFeatureFlags' for bulk retrieval. Usage is implied by the verb 'Get' but lacks explicit context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listFeatureFlagsC

List all feature flags in the specified environment

ParametersJSON Schema
NameRequiredDescriptionDefault
environmentIdNoEnvironment ID (uses default if not provided)
pageSizeNoNumber of items per page (1-100)
cursorNoPagination cursor for next page
tagsNoFilter by tags
orderByNoField to order by
orderDirectionNoOrder direction
searchKeywordNoSearch keyword for feature name or ID
maintainerNoFilter by maintainer email
archivedNoFilter by archived status

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states it 'lists all' without disclosing key behaviors: it doesn't mention pagination (implied by 'cursor' parameter but not explained), rate limits, authentication needs, or that it might return partial results. The description is minimal and misses critical operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. Every part ('List all feature flags in the specified environment') directly contributes to understanding the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain the return format (e.g., list structure, pagination tokens), error conditions, or how parameters interact (e.g., combining 'tags' and 'searchKeyword'). Given the complexity, more context is needed for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 9 parameters. The description adds no parameter-specific information beyond implying environment filtering, which is already covered in the schema. This meets the baseline for high schema coverage but doesn't enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List all') and resource ('feature flags in the specified environment'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'getFeatureFlag' which might retrieve a single flag, leaving some ambiguity about when to use each.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'getFeatureFlag' for single flags or 'searchKeyword' parameter for filtered results. It lacks context about prerequisites, such as needing environment access, or exclusions like when not to use it for archived flags.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

updateFeatureFlagC

Update an existing feature flag

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the feature flag to update
commentYesComment for the update (required for audit trail)
environmentIdNoEnvironment ID (uses default if not provided)
nameNoNew name for the feature flag
descriptionNoNew description for the feature flag
tagsNoNew tags for the feature flag
enabledNoEnable or disable the feature flag
archivedNoArchive or unarchive the feature flag

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. 'Update an existing feature flag' implies a mutation operation, but it doesn't disclose critical traits like required permissions, whether changes are reversible, rate limits, or what happens to unspecified fields. For a mutation tool with 8 parameters and no annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that states the core purpose without any wasted words. It's appropriately sized for a tool with good schema coverage and gets straight to the point. Every word earns its place, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, mutation operation) and lack of both annotations and output schema, the description is insufficiently complete. It doesn't explain what fields can be updated, what the response looks like, or behavioral constraints. For a feature flag management tool with multiple sibling alternatives, more context about scope and limitations would be needed for effective agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all 8 parameters well-documented in the input schema. The description adds no parameter-specific information beyond what's in the schema, so it doesn't enhance understanding of individual parameters. However, the baseline score of 3 is appropriate since the schema already provides comprehensive parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and resource ('an existing feature flag'), making the purpose immediately understandable. It doesn't differentiate from sibling tools like 'createFeatureFlag' or 'archiveFeatureFlag', but the verb 'Update' versus 'Create' or 'Archive' provides basic distinction. The description is specific enough to understand what the tool does without being tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'archiveFeatureFlag' or 'createFeatureFlag'. It doesn't mention prerequisites (e.g., that the feature flag must exist), exclusions, or contextual factors that would help an agent choose between sibling tools. The agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv1.0.0
    • First observedarchiveFeatureFlag
    • First observedcreateFeatureFlag
    • First observedgetFeatureFlag
    • First observedlistFeatureFlags
    • First observedupdateFeatureFlag

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific CRUD operations on feature flags: list (retrieve all), get (retrieve one), create (add new), update (modify existing), and archive (deactivate). No ambiguity exists between these actions, making tool selection straightforward for an agent.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., listFeatureFlags, createFeatureFlag) with perfect adherence to camelCase. The naming is predictable and readable across all five tools, with no deviations in style or convention.

Tool Count5/5

With 5 tools, this server is well-scoped for managing feature flags, covering essential CRUD operations plus archiving. Each tool earns its place without redundancy, and the count is appropriate for the domain, avoiding being too sparse or bloated.

Completeness5/5

The tool set provides complete lifecycle coverage for feature flags: create, read (list and get), update, and archive (as a soft delete). There are no obvious gaps, and agents can perform all core operations without dead ends in the domain of feature flag management.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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