Skip to content

Feature flags

Feature flags a project’s application reads to switch a feature on gradually: each flag carries strategies (all users, a percentage of users or of rollout, chosen user IDs or a user list), scoped to environments. These actions manage the flags and the user lists a strategy can target. Turning a flag inactive keeps its history; deleting it does not. The instance’s own GitLab feature flags are administration actions instead (see Administration).

  • “List the feature flags of project 42”
  • “Roll new-checkout out to 25 percent of users in production”
  • “Create a user list for the beta testers”
  • Dynamic, the default surface: call gitlab_execute_action with action set to the action’s ID, such as feature_flags.feature_flag_create, and its parameters in params. gitlab_find_action finds an ID from a description of the task.
  • Meta (GITLAB_MCP_TOOL_SURFACE=meta): call gitlab_feature_flags with action set to the action’s name, such as feature_flag_create, and its parameters in params.
  • Individual (GITLAB_MCP_TOOL_SURFACE=individual): call the action’s own tool, such as gitlab_feature_flag_create, with its parameters as the arguments.

Every tier serves the whole group, on self-managed instances and on GitLab.com alike.

Read-only actions: 4 of 10, the ones a deployment in read-only mode keeps.

The description of each action, and of each of its parameters, is the text the server serves for it on the default surface, quoted as served. A destructive action runs only once confirmed, unless GITLAB_MCP_YOLO_MODE (or AUTOPILOT) skips that step: the dynamic surface needs confirm: true on gitlab_execute_action, and the other two take a confirm parameter or the client’s prompt (Destructive actions).

ActionIndividual
feature_flags.feature_flag_creategitlab_feature_flag_create
feature_flags.feature_flag_deletegitlab_feature_flag_delete
feature_flags.feature_flag_getgitlab_feature_flag_get
feature_flags.feature_flag_listgitlab_feature_flag_list
feature_flags.feature_flag_updategitlab_feature_flag_update
feature_flags.ff_user_list_creategitlab_ff_user_list_create
feature_flags.ff_user_list_deletegitlab_ff_user_list_delete
feature_flags.ff_user_list_getgitlab_ff_user_list_get
feature_flags.ff_user_list_listgitlab_ff_user_list_list
feature_flags.ff_user_list_updategitlab_ff_user_list_update

Create a feature flag with optional activation strategies and scopes. Returns: the created flag with active state, version, scopes, and strategies. See also: feature_flags.feature_flag_get, feature_flags.feature_flag_update.

  • Meta-tool: gitlab_feature_flags, action feature_flag_create
  • Individual tool: gitlab_feature_flag_create
  • Tier: Free
  • Behavior: writes, not idempotent
ParameterTypeMandatoryDescription
namestringyesFeature flag name
project_idstring/integeryesProject ID or path
activebooleannoWhether the flag is active
descriptionstringnoFeature flag description
strategiesobject[]noActivation strategies for the flag. Each has a name, optional parameters, and optional environment scopes
versionstringnoVersion of the feature flag (new_version_flag)

Delete a feature flag permanently. Returns: a success confirmation naming the flag. See also: feature_flags.feature_flag_get, feature_flags.feature_flag_list.

  • Meta-tool: gitlab_feature_flags, action feature_flag_delete
  • Individual tool: gitlab_feature_flag_delete
  • Tier: Free
  • Behavior: writes, destructive (needs confirmation), idempotent
ParameterTypeMandatoryDescription
namestringyesFeature flag name
project_idstring/integeryesProject ID or path

Get a single feature flag by name. Returns: the flag with active state, version, environment scopes, and activation strategies. See also: feature_flags.feature_flag_list, feature_flags.feature_flag_update, feature_flags.feature_flag_delete.

  • Meta-tool: gitlab_feature_flags, action feature_flag_get
  • Individual tool: gitlab_feature_flag_get
  • Tier: Free
  • Behavior: read-only, idempotent
ParameterTypeMandatoryDescription
namestringyesFeature flag name
project_idstring/integeryesProject ID or path

List feature flags in a project with optional scope filter, ordering, and pagination. Returns: matching feature flags with active state, version, scopes, strategies, and pagination metadata. See also: feature_flags.feature_flag_get, feature_flags.feature_flag_create.

  • Meta-tool: gitlab_feature_flags, action feature_flag_list
  • Individual tool: gitlab_feature_flag_list
  • Tier: Free
  • Behavior: read-only, idempotent
ParameterTypeMandatoryDescription
project_idstring/integeryesProject ID or path
order_bystringnoColumn to order results by (e.g. name, created_at, updated_at)
pageintegernoPage number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
page_tokenstringnoKeyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’.
paginationstringnoPagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost.
per_pageintegernoItems per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
scopestring (enabled, disabled)noFilter by scope (enabled or disabled)
sortstring (asc, desc)noSort direction (asc, desc)

Update a feature flag’s name, description, active state, or strategies. Returns: the updated flag with active state, version, scopes, and strategies. See also: feature_flags.feature_flag_get, feature_flags.feature_flag_delete.

  • Meta-tool: gitlab_feature_flags, action feature_flag_update
  • Individual tool: gitlab_feature_flag_update
  • Tier: Free
  • Behavior: writes, idempotent
ParameterTypeMandatoryDescription
namestringyesCurrent feature flag name
project_idstring/integeryesProject ID or path
activebooleannoWhether the flag is active
descriptionstringnoFeature flag description
new_namestringnoNew feature flag name
strategiesobject[]noActivation strategies for the flag. Each has an optional id (to update an existing strategy), a name, optional parameters, and optional environment scopes carrying their own id and _destroy

Create a feature flag user list in a project. Returns: the created list with id, iid, project_id, name, user_xids, created_at, and updated_at. See also: feature_flags.ff_user_list_list, feature_flags.ff_user_list_get, feature_flags.ff_user_list_update.

  • Meta-tool: gitlab_feature_flags, action ff_user_list_create
  • Individual tool: gitlab_ff_user_list_create
  • Tier: Free
  • Behavior: writes, not idempotent
ParameterTypeMandatoryDescription
namestringyesUser list name
project_idstring/integeryesProject ID or path
user_xidsstringyesComma-separated list of user external IDs

Delete a feature flag user list by its user_list_iid. Returns: a success confirmation naming the deleted list. See also: feature_flags.ff_user_list_get, feature_flags.ff_user_list_list.

  • Meta-tool: gitlab_feature_flags, action ff_user_list_delete
  • Individual tool: gitlab_ff_user_list_delete
  • Tier: Free
  • Behavior: writes, destructive (needs confirmation), idempotent
ParameterTypeMandatoryDescription
project_idstring/integeryesProject ID or path
user_list_iidintegeryesFeature flag user list internal ID returned by list or create. Do not use the user list name

Get a single feature flag user list by its user_list_iid. Returns: the list’s id, iid, project_id, name, user_xids, created_at, and updated_at. See also: feature_flags.ff_user_list_list, feature_flags.ff_user_list_update, feature_flags.ff_user_list_delete.

  • Meta-tool: gitlab_feature_flags, action ff_user_list_get
  • Individual tool: gitlab_ff_user_list_get
  • Tier: Free
  • Behavior: read-only, idempotent
ParameterTypeMandatoryDescription
project_idstring/integeryesProject ID or path
user_list_iidintegeryesFeature flag user list internal ID returned by list or create. Do not use the user list name

List feature flag user lists for a project with search, ordering, and offset or keyset pagination. Returns: each list’s id, iid, project_id, name, user_xids, created_at, updated_at, plus pagination metadata. See also: feature_flags.ff_user_list_get, feature_flags.ff_user_list_create.

  • Meta-tool: gitlab_feature_flags, action ff_user_list_list
  • Individual tool: gitlab_ff_user_list_list
  • Tier: Free
  • Behavior: read-only, idempotent
ParameterTypeMandatoryDescription
project_idstring/integeryesProject ID or path
order_bystringnoOrder results by field (e.g. created_at, updated_at, name)
pageintegernoPage number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
page_tokenstringnoKeyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’.
paginationstringnoPagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost.
per_pageintegernoItems per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
searchstringnoSearch by name
sortstring (asc, desc)noSort direction (asc, desc)

Update a feature flag user list’s name or user_xids by its user_list_iid. Returns: the updated list with id, iid, project_id, name, user_xids, created_at, and updated_at. See also: feature_flags.ff_user_list_get, feature_flags.ff_user_list_list, feature_flags.ff_user_list_delete.

  • Meta-tool: gitlab_feature_flags, action ff_user_list_update
  • Individual tool: gitlab_ff_user_list_update
  • Tier: Free
  • Behavior: writes, idempotent
ParameterTypeMandatoryDescription
project_idstring/integeryesProject ID or path
user_list_iidintegeryesFeature flag user list internal ID returned by list or create. Do not use the user list name
namestringnoNew user list name
user_xidsstringnoComma-separated list of user external IDs