{"id":"6f65cf12-4b9b-4d3b-8b2b-9f2cc4dde8e8","shortId":"pamJyW","kind":"skill","title":"manage-feature-flags","tagline":">-","description":"# Manage Feature Flags\n\nCreate, list, kill/restore, and delete Harness FME (Split.io-backed) Feature Flags via MCP.\n\n## Prerequisites\n\nFME flags are workspace-scoped (not project-scoped). You must discover the `workspace_id` and `environment_id` before most operations.\n\n### Step 0a: List workspaces\n\n```\nCall MCP tool: harness_list\nParameters:\n  resource_type: \"fme_workspace\"\n```\n\n### Step 0b: List environments (per workspace)\n\n```\nCall MCP tool: harness_list\nParameters:\n  resource_type: \"fme_environment\"\n  workspace_id: \"<workspace_id>\"\n```\n\n## Instructions\n\n### Step 1: List Existing Flags\n\n```\nCall MCP tool: harness_list\nParameters:\n  resource_type: \"fme_feature_flag\"\n  workspace_id: \"<workspace_id>\"\n```\n\nFilter by name, tags, or rollout status:\n\n```\nCall MCP tool: harness_list\nParameters:\n  resource_type: \"fme_feature_flag\"\n  workspace_id: \"<workspace_id>\"\n  name: \"dark_mode\"\n  tags: \"ui\"\n  rollout_status_id: \"<uuid>\"   # discover via fme_rollout_status\n```\n\n### Step 2: Get Flag Details\n\n```\nCall MCP tool: harness_get\nParameters:\n  resource_type: \"fme_feature_flag\"\n  workspace_id: \"<workspace_id>\"\n  feature_flag_name: \"<flag_name>\"\n```\n\nFor per-environment targeting/state, use `fme_feature_flag_definition` and pass `environment_id`.\n\n### Step 3: Create a Flag\n\n```\nCall MCP tool: harness_create\nParameters:\n  resource_type: \"fme_feature_flag\"\n  workspace_id: \"<workspace_id>\"\n  traffic_type_id: \"<traffic_type_id>\"   # required by FME\n  body:\n    name: \"dark_mode\"\n    description: \"Enable dark mode UI theme\"\n    tags: [\"ui\", \"rollout\"]\n```\n\n### Step 4: Kill or Restore a Flag (per environment)\n\nKill (turn the flag OFF in one environment):\n\n```\nCall MCP tool: harness_execute\nParameters:\n  resource_type: \"fme_feature_flag\"\n  action: \"kill\"\n  workspace_id: \"<workspace_id>\"\n  feature_flag_name: \"<flag_name>\"\n  environment_id: \"<environment_id>\"\n```\n\nRestore (re-enable after a kill):\n\n```\nCall MCP tool: harness_execute\nParameters:\n  resource_type: \"fme_feature_flag\"\n  action: \"restore\"\n  workspace_id: \"<workspace_id>\"\n  feature_flag_name: \"<flag_name>\"\n  environment_id: \"<environment_id>\"\n```\n\n### Step 5: Archive / Unarchive a Flag\n\n```\nCall MCP tool: harness_execute\nParameters:\n  resource_type: \"fme_feature_flag\"\n  action: \"archive\"      # or \"unarchive\"\n  workspace_id: \"<workspace_id>\"\n  feature_flag_name: \"<flag_name>\"\n```\n\nArchiving is subject to OPA policy checks (returns 409 on violation). Unarchive returns 409 if dependent objects exist.\n\n### Step 6: Update Flag Metadata\n\n```\nCall MCP tool: harness_update\nParameters:\n  resource_type: \"fme_feature_flag\"\n  workspace_id: \"<workspace_id>\"\n  feature_flag_name: \"<flag_name>\"\n  body:\n    description: \"Updated description\"\n    tags: [\"ui\", \"ga\"]\n```\n\n### Step 7: Delete a Flag\n\n```\nCall MCP tool: harness_delete\nParameters:\n  resource_type: \"fme_feature_flag\"\n  workspace_id: \"<workspace_id>\"\n  feature_flag_name: \"<flag_name>\"\n```\n\n## FME Resource Types Reference\n\n| Resource Type | Operations | Description |\n|--------------|-----------|-------------|\n| `fme_workspace` | list | List FME workspaces |\n| `fme_environment` | list | List FME environments (per workspace) |\n| `fme_feature_flag` | list, get, create, update, delete, execute(kill/restore/archive/unarchive) | Flag metadata at workspace scope |\n| `fme_feature_flag_definition` | list, get | Per-environment rollout targeting and state |\n| `fme_rollout_status` | list | Discover valid `rollout_status_id` values |\n| `fme_rule_based_segment` | list, get | Rule-based segments |\n| `fme_rule_based_segment_definition` | list, get, execute(enable/disable/change_request) | Segment definition per environment |\n\n## Examples\n\n- \"Create a feature flag for dark mode\" — Create `fme_feature_flag` with `body: { name: \"dark_mode\", ... }`\n- \"Kill the experimental-search flag in production\" — Execute `kill` with production `environment_id`\n- \"Restore the new-checkout flag in staging\" — Execute `restore` with staging `environment_id`\n- \"List all feature flags in my workspace\" — List `fme_feature_flag` for workspace\n- \"Archive the stale beta_banner flag\" — Execute `archive`\n\n## Performance Notes\n\n- Always discover `workspace_id` and `environment_id` before kill/restore — wrong environment can affect production.\n- List existing flags before creating to avoid duplicates.\n- FME does not expose a single \"toggle\" action — use `kill` (off) and `restore` (on) per environment.\n\n## Troubleshooting\n\n### Flag won't kill/restore\n- `environment_id` is required — kills are per-environment\n- Confirm `feature_flag_name` is exact (case-sensitive)\n- Verify the flag lives in the specified `workspace_id`\n\n### Flag Not Found\n- FME flags are workspace-scoped — confirm the correct `workspace_id`\n- Use `harness_list` with `resource_type: \"fme_feature_flag\"` and no filters to see all flags in the workspace\n\n### Archive fails with 409\n- An OPA policy may block archival — review governance policies\n- For unarchive, remove dependent segments/targeting before retrying","tags":["manage","feature","flags","harness","skills","agent-skills","agents"],"capabilities":["skill","source-harness","skill-manage-feature-flags","topic-agent-skills","topic-agents"],"categories":["harness-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/harness/harness-skills/manage-feature-flags","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add harness/harness-skills","source_repo":"https://github.com/harness/harness-skills","install_from":"skills.sh"}},"qualityScore":"0.457","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 15 github stars · SKILL.md body (5,000 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:06:30.396Z","embedding":null,"createdAt":"2026-05-09T01:05:29.077Z","updatedAt":"2026-05-18T19:06:30.396Z","lastSeenAt":"2026-05-18T19:06:30.396Z","tsv":"'0a':45 '0b':59 '1':78 '2':129 '3':164 '4':201 '409':298,303,614 '5':265 '6':309 '7':337 'action':228,255,281,537 'affect':520 'alway':508 'archiv':266,282,290,498,505,611,620 'avoid':528 'back':16 'banner':502 'base':419,425,429 'beta':501 'block':619 'bodi':187,329,453 'call':48,64,82,102,133,168,217,244,270,313,341 'case':567 'case-sensit':566 'check':296 'checkout':475 'confirm':560,587 'correct':589 'creat':8,165,172,384,441,448,526 'dark':116,189,193,446,455 'definit':158,397,431,437 'delet':12,338,345,386 'depend':305,627 'descript':191,330,332,364 'detail':132 'discov':34,123,411,509 'duplic':529 'enabl':192,240 'enable/disable/change_request':435 'environ':39,61,73,152,161,208,216,235,262,372,376,402,439,469,483,513,518,545,551,559 'exact':565 'exampl':440 'execut':221,248,274,387,434,465,479,504 'exist':80,307,523 'experiment':460 'experimental-search':459 'expos':533 'fail':612 'featur':3,6,17,91,111,142,146,156,177,226,232,253,259,279,287,322,326,350,354,380,395,443,450,487,494,561,599 'filter':95,603 'flag':4,7,18,23,81,92,112,131,143,147,157,167,178,206,212,227,233,254,260,269,280,288,311,323,327,340,351,355,381,389,396,444,451,462,476,488,495,503,524,547,562,571,578,582,600,607 'fme':14,22,56,72,90,110,125,141,155,176,186,225,252,278,321,349,357,365,369,371,375,379,394,407,417,427,449,493,530,581,598 'found':580 'ga':335 'get':130,137,383,399,422,433 'govern':622 'har':13,51,67,85,105,136,171,220,247,273,316,344,593 'id':37,40,75,94,114,122,145,162,180,183,231,236,258,263,286,325,353,415,470,484,511,514,552,577,591 'instruct':76 'kill':202,209,229,243,457,466,539,555 'kill/restore':10,516,550 'kill/restore/archive/unarchive':388 'list':9,46,52,60,68,79,86,106,367,368,373,374,382,398,410,421,432,485,492,522,594 'live':572 'manag':2,5 'manage-feature-flag':1 'may':618 'mcp':20,49,65,83,103,134,169,218,245,271,314,342 'metadata':312,390 'mode':117,190,194,447,456 'must':33 'name':97,115,148,188,234,261,289,328,356,454,563 'new':474 'new-checkout':473 'note':507 'object':306 'one':215 'opa':294,616 'oper':43,363 'paramet':53,69,87,107,138,173,222,249,275,318,346 'pass':160 'per':62,151,207,377,401,438,544,558 'per-environ':150,400,557 'perform':506 'polici':295,617,623 'prerequisit':21 'product':464,468,521 'project':30 'project-scop':29 're':239 're-en':238 'refer':360 'remov':626 'requir':184,554 'resourc':54,70,88,108,139,174,223,250,276,319,347,358,361,596 'restor':204,237,256,471,480,542 'retri':630 'return':297,302 'review':621 'rollout':100,120,126,199,403,408,413 'rule':418,424,428 'rule-bas':423 'scope':27,31,393,586 'search':461 'see':605 'segment':420,426,430,436 'segments/targeting':628 'sensit':568 'singl':535 'skill' 'skill-manage-feature-flags' 'source-harness' 'specifi':575 'split.io':15 'stage':478,482 'stale':500 'state':406 'status':101,121,127,409,414 'step':44,58,77,128,163,200,264,308,336 'subject':292 'tag':98,118,197,333 'target':404 'targeting/state':153 'theme':196 'toggl':536 'tool':50,66,84,104,135,170,219,246,272,315,343 'topic-agent-skills' 'topic-agents' 'traffic':181 'troubleshoot':546 'turn':210 'type':55,71,89,109,140,175,182,224,251,277,320,348,359,362,597 'ui':119,195,198,334 'unarch':267,284,301,625 'updat':310,317,331,385 'use':154,538,592 'valid':412 'valu':416 'verifi':569 'via':19,124 'violat':300 'won':548 'workspac':26,36,47,57,63,74,93,113,144,179,230,257,285,324,352,366,370,378,392,491,497,510,576,585,590,610 'workspace-scop':25,584 'wrong':517","prices":[{"id":"4be249ee-5991-483d-abe7-cd349d73facb","listingId":"6f65cf12-4b9b-4d3b-8b2b-9f2cc4dde8e8","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"harness","category":"harness-skills","install_from":"skills.sh"},"createdAt":"2026-05-09T01:05:29.077Z"}],"sources":[{"listingId":"6f65cf12-4b9b-4d3b-8b2b-9f2cc4dde8e8","source":"github","sourceId":"harness/harness-skills/manage-feature-flags","sourceUrl":"https://github.com/harness/harness-skills/tree/main/skills/manage-feature-flags","isPrimary":false,"firstSeenAt":"2026-05-09T01:05:29.077Z","lastSeenAt":"2026-05-18T19:06:30.396Z"}],"details":{"listingId":"6f65cf12-4b9b-4d3b-8b2b-9f2cc4dde8e8","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"harness","slug":"manage-feature-flags","github":{"repo":"harness/harness-skills","stars":15,"topics":["agent-skills","agents"],"license":"apache-2.0","html_url":"https://github.com/harness/harness-skills","pushed_at":"2026-05-13T01:28:28Z","description":"A collection of structured AI agent skills that   enable Claude Code, Cursor, GitHub Copilot, and   other AI coding assistants to create, operate,   debug, and govern Harness CI/CD workflows through   natural language.","skill_md_sha":"3e0b2cdf13bd5a4173abf5d5007dbad087ecaece","skill_md_path":"skills/manage-feature-flags/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/harness/harness-skills/tree/main/skills/manage-feature-flags"},"layout":"multi","source":"github","category":"harness-skills","frontmatter":{"name":"manage-feature-flags","license":"Apache-2.0","description":">-","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`."},"skills_sh_url":"https://skills.sh/harness/harness-skills/manage-feature-flags"},"updatedAt":"2026-05-18T19:06:30.396Z"}}