{"name":"io.github.canopy-labs/featureflip","slug":"canopy-labs-featureflip","title":"Featureflip","description":"Manage Featureflip feature flags, targeting and rollouts from AI agents and editors.","url":"https://mcp.market/server/canopy-labs-featureflip","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":31,"stars":0,"forks":0,"downloads_week":350,"last_push_at":"2026-09-18T04:54:40.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/canopy-labs/featureflip-mcp","website":"https://featureflip.io/docs/integrations/mcp/","version":"0.1.7","remotes":[],"packages":[{"registryType":"npm","identifier":"@featureflip/mcp","version":"0.1.7","transport":{"type":"stdio"},"environmentVariables":[{"description":"Featureflip API token. A personal token (ffp_) acts as you; a service token (ffs_) is a scoped machine identity for CI and agents.","isRequired":true,"format":"string","isSecret":true,"name":"FEATUREFLIP_TOKEN"},{"description":"Management API base URL. Defaults to https://api.featureflip.io.","format":"string","default":"https://api.featureflip.io","name":"FEATUREFLIP_API_URL"},{"description":"Organization slug. Only needed for a personal token that can reach more than one organization.","format":"string","name":"FEATUREFLIP_ORG"}]}],"tools":[{"name":"archive_flag","description":"Archive a flag (soft-hide, evaluation stops serving it). Reversible with restore_flag. Refused with FLAG_RECENTLY_EVALUATED while live traffic is still evaluating the flag, because archiving makes every caller fall back to its own hardcoded default — normally that means the code removal has merged but not deployed yet, and the refusal clears itself once it has.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_flag","description":"Create a feature flag. type is one of Boolean|String|Number|Json. Boolean flags get true/false variations automatically; for other types pass initialVariations. The flag is created in every environment of the project (disabled).","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_flag","description":"PERMANENTLY delete a flag across all environments. Fails with FLAG_HAS_DEPENDENTS if other flags use it as a prerequisite. Prefer archive_flag unless the flag must be fully removed.","write_action":true,"price_micros":0,"input_schema":null},{"name":"find_stale_flags","description":"Find flags that look ready for code cleanup: not updated in N days AND either enabled in every environment (verify rollout is complete before removing — per-rule percentage ramps are not inspected) or disabled in every environment (dead — remove flag and code path). Checks at most … candidates per call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"flag_status","description":"Compact cross-environment view of one flag: enabled state, strategy, default variation, and prerequisites per environment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_flag","description":"Get one feature flag with its variations and metadata. Address by flag key or id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_segment","description":"Get one user segment (its conditions, id, and metadata) by key or id.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_targeting","description":"Get a flag's current targeting configuration (enabled flag + ordered rules) in one environment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_environments","description":"List the environments of a project (e.g. development, staging, production).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_flags","description":"List feature flags in a project. Filter with search (key/name substring), tag, type, archived. Paginated via cursor.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_projects","description":"List projects in the Featureflip organization. Paginated: pass cursor from next_cursor to continue.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_segments","description":"List reusable user segments in a project. Segments are referenced from targeting rules via userSegmentId.","write_action":false,"price_micros":0,"input_schema":null},{"name":"manage_variation","description":"Manage a flag's variations. action=add requires key + value; action=update/remove require variationId (get ids via get_flag). Removing a variation fails with VARIATION_HAS_DEPENDENTS if other flags depend on it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"restore_flag","description":"Restore a previously archived flag.","write_action":false,"price_micros":0,"input_schema":null},{"name":"toggle_flag","description":"Enable or disable a flag in ONE environment. Affects live evaluation immediately — double-check the environment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_flag","description":"Update flag name/description/tags/clientSideVisible. Key and type are immutable. Use toggle_flag / update_targeting for behavior changes.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_flag_environment_config","description":"Update a flag's per-environment serving config: defaultVariationId (served on fallthrough, required), strategy (SingleVariation | PercentageRollout | TargetedRollout — only SingleVariation is currently supported at the environment level), and prerequisites. Percentage rollouts are configured on targeting rules via update_targeting.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_targeting","description":"REPLACE all targeting rules of a flag in one environment (full PUT — rules not included are removed). Rules are evaluated in order. Get the current rules first with get_targeting.","write_action":true,"price_micros":0,"input_schema":null},{"name":"wrap_feature","description":"Create a Boolean feature flag and get back the SDK code snippet to guard the new code path with it. Returns the snippet only — apply the edit yourself. The flag starts DISABLED in every environment; enable it with toggle_flag when ready.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-09-19T19:34:41.054Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:34:41.056Z","components":{"code":{"score":25,"max":25,"notes":["27 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@featureflip/mcp","version":"0.1.7","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-09-18T04:55:48.692Z","repositoryUrl":"git+https://github.com/canopy-labs/featureflip-mcp.git"}],"repo":{"found":true,"owner":"canopy-labs","repo":"featureflip-mcp","archived":false,"pushedAt":"2026-09-18T04:54:40Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/266229830?v=4","ownerCreatedAt":"2026-03-07T05:44:52Z","license":"Apache-2.0"},"icon":{"url":"https://featureflip.io/favicon.svg","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":350,"license":"Apache-2.0","lastPushAt":"2026-09-18T04:54:40.000Z","score":31}}}},"grade_history":[],"reviews":[]}