
List experiments in one environment with pagination and filters (flagKey, metricKey, status, archived). Use listprojectexperiments for every environment.
List experiments across every environment of a project with pagination and filters. Each item names its environmentKey for get_experiment.
Get one experiment with its current iteration, metrics and treatments. Use list_experiments for keys.
Create an experiment on a flag with metrics and treatments (not started). Start it with updateexperiment startIteration. Use listmetrics and get_flag for keys, variation IDs and versions.
Start, stop, restart, archive or rename an experiment with semantic patch instructions. Use list_experiments for keys.
Get a project's experimentation randomization units. Use list_projects for keys.
Replace a project's experimentation randomization units. Send the full list; read it first with getexperimentationsettings.
List holdouts in one environment with pagination. Returns keys for get/update_holdout.
Get one holdout with its related experiments. Use list_holdouts for keys.
Create a holdout that keeps a percentage of traffic out of experiments, to measure their combined effect. Use list_metrics for metric keys.
End, rename or remove experiments from a holdout with semantic patch instructions. Use list_holdouts for holdout keys.
List a project's experiment layers (mutually exclusive experiment groups).
Create an experiment layer so experiments in it never share traffic. Reserve traffic for experiments with update_layer.
Rename a layer or change experiment traffic reservations in it with semantic patch. Use list_layers for keys.
List a project's metrics with pagination, filters (query, tags, event kind, numeric) and sorting. Returns metric keys for experiments, holdouts and metric groups.
Get one metric's definition. Use list_metrics for keys.
Create a metric: custom (SDK track event), pageview or click (URL/selector), as conversion or numeric. Use it in createexperiment or createmetric_group.
Update a metric with JSON Patch, e.g. '/name' or '/tags/-'. Use list_metrics for keys.
Delete a metric. Use list_metrics for keys.
List a project's metric groups (funnels and standard groups) with pagination and filters.
Get one metric group with its metrics. Use listmetricgroups for keys.
Create a metric group: an ordered funnel or a standard set of metrics. Use listmetrics for metric keys and listmembers for the maintainer ID.
Update a metric group with JSON Patch, e.g. '/name' or '/metrics'. Use listmetricgroups.
Delete a metric group (its metrics remain). Use listmetricgroups for keys.
List a project's feature flags with pagination, filters (query, tags, state, type, maintainer, status) and sorting. Lean by default (includedetails=true for full objects; summary=false with environmentkey adds targeting). Use listprojects for project keys; getflag for one flag's variations and rules.
Get one flag with its variations (and their IDs) and per-environment targeting: on/off, rules, targets, fallthrough. Pass environmentkey to return one environment only. Use listflags to find keys.
Create a feature flag in a project (boolean by default, or multivariate with variations). Created off in every environment unless isflagon. Use updateflag to change targeting. Use listprojects for project keys.
Change a flag: turn on/off, add targets or rules, change rollout, rename, tag, archive. Send semantic-patch instructions (with environmentkey for targeting) or JSON patch. Use getflag for variation IDs and list_environments for keys.
Permanently delete a flag from every environment. SDKs then serve their fallback value. Prefer updateflag with an archiveFlag instruction to keep history. Use listflags to find keys.
Copy a flag's targeting from one environment to another (e.g. staging to production), optionally limited to some parts. Use list_environments for environment keys.
Get a flag's evaluation status (new, active, inactive, launched) and last-requested time in every environment. Use this to find stale flags. Use list_flags to find keys.
List the evaluation status (new, active, inactive, launched) of every flag in one environment. Use list_environments to find environment keys.
Get one flag's evaluation status and last-requested time in one environment. Use getflagstatusacrossenvs for every environment at once.
List flags in any environment that use this flag as a prerequisite. Check before archiving or deleting a flag. Use list_flags to find keys.
List flags in one environment that use this flag as a prerequisite. Use listdependentflags for every environment.
List the contexts scheduled to be removed from a flag's individual targets in one environment, with removal dates. Use updateflagexpiring_targets to change them.
Schedule, change or cancel the automatic removal of a context from a flag's targets. The context must already be targeted (see getflag). Variation IDs come from getflag.
Check planned update_flag instructions on a migration flag for safety issues (e.g. skipped stages) before applying them. Read-only: nothing is changed.
List a flag's triggers in one environment: webhook URLs that turn the flag on or off from monitoring tools. Returns trigger IDs for get/update/deleteflagtrigger.
Get one flag trigger by ID. Use listflagtriggers to find trigger IDs.
Create a flag trigger that turns the flag on or off when its URL is called (e.g. from Datadog or a generic webhook). Only this response (and updateflagtrigger with cycleTriggerUrl) returns the secret trigger URL. Use listflags and listenvironments for keys.
Enable, disable, regenerate the URL of, or change the action of a flag trigger. Use listflagtriggers to find trigger IDs.
Delete a flag trigger; its URL stops working. Use listflagtriggers to find IDs.
List members following a flag in one environment (they get notified of changes). Use addflagfollower / removeflagfollower to change followers.
List every flag in an environment that has followers, with its followers.
Make a member follow a flag in one environment so they are notified of changes. Use listmembers for member IDs. Undo with removeflag_follower.
Stop a member following a flag in one environment. Use listflagfollowers for IDs.
List pending scheduled changes for a flag in one environment, with execution dates and instructions. Returns IDs for get/update/deletescheduledchange.
Get one scheduled flag change by ID. Use listscheduledchanges to find IDs.
Schedule flag instructions (e.g. turnFlagOn, a rollout change) to apply in one environment at a future time. Same instruction kinds as updateflag. Use listflags and list_environments for keys.
Change a scheduled flag change's execution date or replace its instructions. Use listscheduledchanges for IDs.
Cancel a scheduled flag change. Use listscheduledchanges to find IDs.
List custom workflows (staged rollouts, approval flows) on a flag in one environment, filterable by status. Returns workflow IDs for getworkflow and deleteworkflow.
Get one flag workflow with its stages and execution state. Use list_workflows for IDs.
Create a staged workflow on a flag in one environment (e.g. turn on, wait 2 days, roll to 100%), from stages. Use list_members for maintainer IDs.
Delete a flag workflow, stopping any stages not yet run. Use list_workflows for IDs.
List approval requests across the account with pagination and filters (status, reviewStatus, resourceKind, requestor, assigned reviewers). Returns IDs for get/apply/reviewapprovalrequest.
Get one approval request with its instructions and reviews. Use listapprovalrequests.
Request approval for a flag-wide variation change, or a segment or AI config change. Reviewers act with reviewapprovalrequest; apply with applyapprovalrequest. Flag targeting changes need approvals set on the environment.
Withdraw (delete) an approval request. Use listapprovalrequests to find IDs.
Apply an approved approval request's change. Use listapprovalrequests to find IDs.
Approve, decline or comment on an approval request. You cannot review your own request unless the environment allows it. Use listapprovalrequests to find IDs.
List audit log entries (who changed what, when), newest first, filtered by time window, text, member or resource specifier. Page back by passing pageinfo.nextcursor as 'before'.
Search audit log entries with policy-style resource/action statements (e.g. every updateOn on any flag), plus time, text and member filters. Use listauditlog_entries for simple listing.
Count audit log entries matching resource/action statements in a time window, split into buckets. Use to chart change frequency without reading every entry.
Get one audit log entry with the full before/after diff of the change. Use listauditlog_entries to find IDs.
List the account's webhooks (signing secrets are not returned).
Get one webhook by ID. Use list_webhooks to find IDs.
Create a webhook that POSTs LaunchDarkly change events to a URL, optionally limited by policy statements. The signing secret is never returned by this connector.
Update a webhook with JSON Patch, e.g. disable it with [{"op":"replace","path":"/on","value":false}]. Use list_webhooks to find IDs.
Delete a webhook. Use list_webhooks to find IDs.
List tags in use across the account, filterable by resource type and prefix. Use the tags in flag, segment and metric filters.
Show which account, member and token the current credential belongs to. Use to confirm whose access an agent is acting with.
List repositories scanned by LaunchDarkly code references, optionally with branches and flag references on the default branch, filtered by project or flag key.
Get one code-references repository with its branches. Use listcoderef_repositories.
List the scanned branches of a code-references repository.
Get one branch's flag references (file, line hunks), optionally for one project or flag. Use to find where a flag is used in code before removing it.
List the projects that have code references, with links to their statistics.
Get per-flag code reference counts in a project, optionally for one flag. Flags with no references are candidates for cleanup.
List extinction events: when a flag's last code reference was removed from a branch. Filter by repo, branch, project, flag or time.
List account members with pagination, filters (name/email query, role, team) and sorting. Returns member IDs used as maintainers, followers, reviewers and team members.
Get one account member by ID with role, custom roles and teams. Use list_members for IDs.
Invite people to the LaunchDarkly account by email with a base role or custom roles, optionally into teams. Use listcustomroles and list_teams for keys.
Change a member's role or custom roles with JSON Patch, e.g. [{"op":"replace","path":"/role","value":"writer"}]. Use list_members for IDs.
Remove a member from the account; they lose access immediately. Use list_members for IDs.
Add one member to one or more teams. To remove, use updateteam with a removeMembers instruction. Use listteams for team keys.
List teams with pagination, name/key query filter and sorting. Returns team keys used as flag maintainers and approval reviewers.
Get one team, optionally with members, roles and maintainers. Use list_teams for keys.
Create a team, optionally with members and custom roles. Use listmembers for member IDs and listcustom_roles for role keys.
Change a team with semantic patch: add/remove members or custom roles, rename, describe. Use listmembers for IDs and listcustom_roles for keys.
Delete a team. Members stay in the account. Use list_teams to find keys.
List the members who maintain a team, with pagination. Use list_teams for keys.
List the custom roles granted to a team, with pagination. Use list_teams for keys.
List custom roles with their policies, with pagination. Returns role keys for invitemembers, createteam and get/update/deletecustomrole.
Get one custom role and its policy. Use listcustomroles to find keys.
Create a custom role from policy statements (allow/deny actions on resource specifiers like 'proj/:env/staging:flag/'). Assign it with invitemembers or updatemember.
Update a custom role's name, description or policy with JSON Patch. Use getcustomrole to read the current policy.
Delete a custom role; members and teams holding it lose its permissions. Use listcustomroles to find keys.
List projects in the LaunchDarkly account with offset pagination, filtering by name/key query or tags, and sorting. Start here: every flag, environment and segment tool takes a project_key from this list.
Get one project by key, optionally with its environments. Use list_projects to find keys.
Create a project. Without 'environments', LaunchDarkly adds Test and Production environments. Returns the project key that every project-scoped tool takes.
Update a project with JSON Patch, e.g. [{"op":"replace","path":"/name","value":"New"}] or add a tag at '/tags/-'. Use get_project to read current values.
Permanently delete a project with all its environments, flags and segments. Cannot be undone. Use list_projects to find keys.
Get a project's defaults for new flags: tags, temporary, boolean variation names and client-side availability. Use list_projects to find keys.
Update a project's defaults for new flags with JSON Patch, e.g. [{"op":"replace","path":"/temporary","value":false}]. Read them first with getflagdefaults.
List a project's environments with pagination, query/tag filters and sorting. Returns the environment_key that flag status, targeting, segment and experiment tools take. SDK keys are not returned.
Get one environment's settings (TTL, secure mode, approval settings). SDK and mobile keys are not returned. Use list_environments to find keys.
Create an environment in a project, optionally copying flag settings from another environment. Use list_projects for the project key. Returns the new environment key.
Update an environment with JSON Patch, e.g. [{"op":"replace","path":"/requireComments","value":true}] or '/approvalSettings/required'. Use get_environment to read current values.
Permanently delete an environment and its flag targeting. Cannot be undone. Use list_environments to find keys.
List a project's context kinds (e.g. user, organization, device). Use the kind keys in targeting instructions, getcontexts and evaluatecontext_flags.
Create a context kind, or update its name/description/visibility if the key exists. Use listcontextkinds to see existing kinds.
List segments in one environment with pagination, filters (query, tags, keys, unbounded) and sorting. Returns segment keys for the other segment tools.
Get one segment with its rules and included/excluded targets. Use list_segments for keys.
Create an empty segment in one environment. Add targets and rules afterwards with updatesegment. Use listenvironments for environment keys.
Change a segment: add/remove included or excluded targets, add rules, rename, tag. Send semantic-patch instructions or JSON patch. Use get_segment for rule IDs.
Permanently delete a segment. Flags whose rules reference it stop matching it. Use list_segments to find keys.
Check whether a context key is explicitly included or excluded in a big (list-based) segment. For rule-based segments use evaluatecontextsegments.
List contexts scheduled to be removed from a segment's targets, with removal dates. Change them with updatesegmentexpiring_targets.
Schedule, change or cancel the automatic removal of a context from a segment's included or excluded targets. The context must already be targeted.
List the segments a given context belongs to in one environment, evaluating segment rules. Pass the context object, e.g. {"kind":"user","key":"user-1"}.
Evaluate every flag for a given context in one environment and return the served variation and reason per flag. Use to debug why a user sees a value.
List context attribute names recently seen in an environment, per context kind. Use the names in targeting rule clauses and listcontextattribute_values.
List recently seen values of one context attribute in an environment, e.g. every 'country'. Use listcontextattributes to find attribute names.
Search contexts (users, orgs, devices) seen in an environment in the last 30 days, with a filter expression and cursor pagination. Returns kinds and keys for get_contexts and targeting.
Get the context(s) with a given kind and key in an environment, with their latest attributes. Use search_contexts to find kinds and keys.
Serve a specific variation value of a flag to one context in an environment (an individual target), or pass setting=null to remove it. Use get_flag for variation values.
Validate the LaunchDarkly access token and instance by reading the caller identity. Run first when tools fail with authentication errors.
List a project's views (named collections of flags, segments and AI configs) with pagination, filter and sort. Returns view keys for the other view tools.
Get one view's details. Use listviewlinked_resources for its contents.
Create a view in a project. Add flags or segments to it with linkviewresources.
Update a view's name, description, maintainer or tags. Use list_views for keys.
Delete a view. Linked flags and segments are not deleted. Use list_views for keys.
Add flags, segments or AI configs to a view by key, segment identifier or filter. Undo with unlinkviewresources.
Remove flags, segments or AI configs from a view by key, identifier or filter.
List the flags, segments or AI configs linked to a view, with pagination and search.
List the views a flag, segment or AI config belongs to. Segments need environment_id.
List a project's AI configs (prompt + model configurations served like flags) with pagination, filter and sort. Returns config keys for the other AI config tools.
Get one AI config with its variations. Use listaiconfigs for keys.
Create an AI config in completion, agent or judge mode, optionally with a first variation. Use listmodelconfigs for model keys.
Update an AI config's name, description, tags, maintainer or default variation. Use listaiconfigs for config keys and getaiconfig for variation keys.
Delete an AI config and its variations. Use listaiconfigs for keys.
Add a variation (messages or instructions plus model) to an AI config. Serve it with updateaiconfigtargeting. Use listmodel_configs for model keys.
Get the versions of one AI config variation. Use getaiconfig for variation keys.
Update an AI config variation's name, messages, instructions, model or state (archive). Each update creates a new variation version.
Delete an AI config variation. Use getaiconfig for variation keys.
Get an AI config's targeting in every environment: which variation is served by default, rules and targets, with variation IDs for updateaiconfig_targeting.
Change which AI config variation is served in an environment (default, rules, targets) with semantic patch. Use getaiconfig_targeting for variation IDs.
List model configurations usable in AI config variations, filtered by provider or text and paged. Returns model config keys such as 'OpenAI.gpt-4.1'.
Get one model configuration by key. Use listmodelconfigs for keys.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now