--- name: manage-feature-flags description: >- Manage Harness Feature Flags (FME / Split.io) via MCP. List flags by workspace, get flag details, create flags, kill or restore flags per environment, archive or unarchive flags, and delete flags. Use when asked to create a feature flag, kill/restore a flag, list flags, check flag status, enable or disable a feature, or manage feature rollouts. Trigger phrases: feature flag, kill switch, restore flag, create flag, feature rollout, archive flag, FME flag. metadata: author: Harness version: 2.0.0 mcp-server: harness-mcp-v2 license: Apache-2.0 compatibility: Requires Harness MCP v2 server (harness-mcp-v2). Feature Flags are served by the FME (Split.io) backend — operations use the `fme_feature_flag` resource type and require a `workspace_id`. --- # Manage Feature Flags Create, list, kill/restore, and delete Harness FME (Split.io-backed) Feature Flags via MCP. ## Prerequisites FME flags are workspace-scoped (not project-scoped). You must discover the `workspace_id` and `environment_id` before most operations. ### Step 0a: List workspaces ``` Call MCP tool: harness_list Parameters: resource_type: "fme_workspace" ``` ### Step 0b: List environments (per workspace) ``` Call MCP tool: harness_list Parameters: resource_type: "fme_environment" workspace_id: "" ``` ## Instructions ### Step 1: List Existing Flags ``` Call MCP tool: harness_list Parameters: resource_type: "fme_feature_flag" workspace_id: "" ``` Filter by name, tags, or rollout status: ``` Call MCP tool: harness_list Parameters: resource_type: "fme_feature_flag" workspace_id: "" name: "dark_mode" tags: "ui" rollout_status_id: "" # discover via fme_rollout_status ``` ### Step 2: Get Flag Details ``` Call MCP tool: harness_get Parameters: resource_type: "fme_feature_flag" workspace_id: "" feature_flag_name: "" ``` For per-environment targeting/state, use `fme_feature_flag_definition` and pass `environment_id`. ### Step 3: Create a Flag ``` Call MCP tool: harness_create Parameters: resource_type: "fme_feature_flag" workspace_id: "" traffic_type_id: "" # required by FME body: name: "dark_mode" description: "Enable dark mode UI theme" tags: ["ui", "rollout"] ``` ### Step 4: Kill or Restore a Flag (per environment) Kill (turn the flag OFF in one environment): ``` Call MCP tool: harness_execute Parameters: resource_type: "fme_feature_flag" action: "kill" workspace_id: "" feature_flag_name: "" environment_id: "" ``` Restore (re-enable after a kill): ``` Call MCP tool: harness_execute Parameters: resource_type: "fme_feature_flag" action: "restore" workspace_id: "" feature_flag_name: "" environment_id: "" ``` ### Step 5: Archive / Unarchive a Flag ``` Call MCP tool: harness_execute Parameters: resource_type: "fme_feature_flag" action: "archive" # or "unarchive" workspace_id: "" feature_flag_name: "" ``` Archiving is subject to OPA policy checks (returns 409 on violation). Unarchive returns 409 if dependent objects exist. ### Step 6: Update Flag Metadata ``` Call MCP tool: harness_update Parameters: resource_type: "fme_feature_flag" workspace_id: "" feature_flag_name: "" body: description: "Updated description" tags: ["ui", "ga"] ``` ### Step 7: Delete a Flag ``` Call MCP tool: harness_delete Parameters: resource_type: "fme_feature_flag" workspace_id: "" feature_flag_name: "" ``` ## FME Resource Types Reference | Resource Type | Operations | Description | |--------------|-----------|-------------| | `fme_workspace` | list | List FME workspaces | | `fme_environment` | list | List FME environments (per workspace) | | `fme_feature_flag` | list, get, create, update, delete, execute(kill/restore/archive/unarchive) | Flag metadata at workspace scope | | `fme_feature_flag_definition` | list, get | Per-environment rollout targeting and state | | `fme_rollout_status` | list | Discover valid `rollout_status_id` values | | `fme_rule_based_segment` | list, get | Rule-based segments | | `fme_rule_based_segment_definition` | list, get, execute(enable/disable/change_request) | Segment definition per environment | ## Examples - "Create a feature flag for dark mode" — Create `fme_feature_flag` with `body: { name: "dark_mode", ... }` - "Kill the experimental-search flag in production" — Execute `kill` with production `environment_id` - "Restore the new-checkout flag in staging" — Execute `restore` with staging `environment_id` - "List all feature flags in my workspace" — List `fme_feature_flag` for workspace - "Archive the stale beta_banner flag" — Execute `archive` ## Performance Notes - Always discover `workspace_id` and `environment_id` before kill/restore — wrong environment can affect production. - List existing flags before creating to avoid duplicates. - FME does not expose a single "toggle" action — use `kill` (off) and `restore` (on) per environment. ## Troubleshooting ### Flag won't kill/restore - `environment_id` is required — kills are per-environment - Confirm `feature_flag_name` is exact (case-sensitive) - Verify the flag lives in the specified `workspace_id` ### Flag Not Found - FME flags are workspace-scoped — confirm the correct `workspace_id` - Use `harness_list` with `resource_type: "fme_feature_flag"` and no filters to see all flags in the workspace ### Archive fails with 409 - An OPA policy may block archival — review governance policies - For unarchive, remove dependent segments/targeting before retrying