LaunchDarkly local MCP server

Self-run LaunchDarkly server for managing feature flags and AI Configs on EU and Federal instances

Official · LaunchDarkly TypeScript Local · stdio, Streamable HTTP Developer toolsDevOps and monitoring

64 popularity score ★ 27 ↓ 75k/wk

Connect your client

Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http launchdarkly-local http://localhost:8080/sse --header 'Authorization: Bearer <AUTH_TOKEN>'
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "launchdarkly-local": {
      "url": "http://localhost:8080/sse",
      "headers": {
        "Authorization": "Bearer <AUTH_TOKEN>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "launchdarkly-local": {
      "type": "http",
      "url": "http://localhost:8080/sse",
      "headers": {
        "Authorization": "Bearer <AUTH_TOKEN>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.launchdarkly-local]
url = "http://localhost:8080/sse"
http_headers = { "Authorization" = "Bearer <AUTH_TOKEN>" }
Gemini CLITerminal
gemini mcp add --scope user --transport http --header 'Authorization: Bearer <AUTH_TOKEN>' launchdarkly-local http://localhost:8080/sse
Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

Claude CodeTerminal
claude mcp add launchdarkly-local -- npx -y --package @launchdarkly/mcp-server -- mcp start --api-key '<API_KEY>'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "launchdarkly-local": {
      "command": "npx",
      "args": [
        "-y",
        "--package",
        "@launchdarkly/mcp-server",
        "--",
        "mcp",
        "start",
        "--api-key",
        "<API_KEY>"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "launchdarkly-local": {
      "command": "npx",
      "args": [
        "-y",
        "--package",
        "@launchdarkly/mcp-server",
        "--",
        "mcp",
        "start",
        "--api-key",
        "<API_KEY>"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "launchdarkly-local": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "--package",
        "@launchdarkly/mcp-server",
        "--",
        "mcp",
        "start",
        "--api-key",
        "<API_KEY>"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.launchdarkly-local]
command = "npx"
args = ["-y", "--package", "@launchdarkly/mcp-server", "--", "mcp", "start", "--api-key", "<API_KEY>"]
Gemini CLITerminal
gemini mcp add --scope user launchdarkly-local npx -- -y --package @launchdarkly/mcp-server -- mcp start --api-key '<API_KEY>'
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

FirstTerminal
git clone https://github.com/launchdarkly/mcp-server.git
cd mcp-server
npm install
npm run build
Claude CodeTerminal
claude mcp add launchdarkly-local -- node '<ABSOLUTE_PATH_TO_CLONE>/bin/mcp-server.js' start --api-key '<API_KEY>'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "launchdarkly-local": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/bin/mcp-server.js",
        "start",
        "--api-key",
        "<API_KEY>"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "launchdarkly-local": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/bin/mcp-server.js",
        "start",
        "--api-key",
        "<API_KEY>"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "launchdarkly-local": {
      "type": "stdio",
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/bin/mcp-server.js",
        "start",
        "--api-key",
        "<API_KEY>"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.launchdarkly-local]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/bin/mcp-server.js", "start", "--api-key", "<API_KEY>"]
Gemini CLITerminal
gemini mcp add --scope user launchdarkly-local node -- '<ABSOLUTE_PATH_TO_CLONE>/bin/mcp-server.js' start --api-key '<API_KEY>'

What it does

This is LaunchDarkly's own self-managed MCP server. It runs on your machine, takes a LaunchDarkly API access token, and calls the LaunchDarkly REST API. Through it an assistant can list, read, create, change and delete feature flags and check whether a flag is ready for removal in each environment. It can also set up and run experiments, define the metrics they measure, and manage AI Configs with their variations and targeting. A few read tools cover environments, the audit log and code-reference repositories.

LaunchDarkly now positions it for customers whose accounts live on its EU or Federal instances, which its hosted MCP server does not yet serve. You point it at your instance with --server-url (https://app.eu.launchdarkly.com or https://app.launchdarkly.us). Without that flag it talks to the commercial instance at app.launchdarkly.com.

The source registers 30 tools, half of them read-only. Their MCP names are not the SDK method names in the README's operations list: getStatus there is the tool get-flag-status-across-environments, and the Experiments getExperimentsAnyEnv is list-experiments-any-environment. Each tool carries a read or write scope, and the start command takes --scope read to mount only the 15 read tools, or --tool to mount a chosen few. The README describes neither flag. The code is generated by Speakeasy from LaunchDarkly's API definition, so changes come from upstream rather than by hand.

What it needs

RuntimeNode.js 22+
Runs onmacOS, Windows, Linux
LaunchDarklyAn API access token from the Authorization page, passed as --api-key. EU and Federal accounts also pass --server-url.

Node.js 22.23.4, 24.22.1, 26.12.1 or a later patch of those lines, to run it with npx or from a clone. The README asks for these releases because they reject certificate authorities compromised in October 2026, which could otherwise let someone on the network read the API token. The old mcp-server-bun standalone binaries are no longer published and should not be used. Get the token from LaunchDarkly's Authorization page. The Docker image is pulled from the AWS Marketplace with an authenticated AWS role (use 0.7.1 or later), serves SSE over HTTP on port 8080 rather than stdio, and must be started with --auth-token.

Limits

  • Not covered LaunchDarkly recommends its hosted MCP server wherever available. This one is meant for EU and Federal instances.
  • Not covered Tools cover flags, experiments, metrics, AI Configs, environments, the audit log and code references. There are no tools for segments.
  • Limit create-experiment-iteration wraps an API call the README marks as deprecated.
  • Limit The SSE transport binds to 127.0.0.1 on port 2718 unless --host and --port are given. A non-loopback host needs --auth-token of at least 16 characters.
  • Limit Clients that cannot expand environment variables in their MCP config need the token written into the args or a wrapper script.
  • Platform The old mcp-server-bun standalone binaries are no longer published. They embed a Bun runtime the README says to stop using.

LaunchDarkly says its hosted MCP server is more complete and updated more often, and recommends it wherever available. This one is meant for EU and Federal instances. The tools cover flags, experiments, metrics, AI Configs, environments, the audit log and code references. There are no tools for segments or observability data. The SSE transport binds to 127.0.0.1 on port 2718 unless --host and --port are given, and a non-loopback host needs --auth-token of at least 16 characters. Clients that cannot expand environment variables in their MCP config need the token written into the args or a wrapper script.

Who it suits

Teams on LaunchDarkly's EU or Federal instances who want an assistant to inspect and change flags and AI Configs from their editor, and who are comfortable giving it an API token. Accounts on the commercial instance are better served by LaunchDarkly's hosted server at mcp.launchdarkly.com, which signs in with OAuth and covers more, per LaunchDarkly's own docs. Anyone who wants read-only access should start it with --scope read or use a token with a reader role, since the default mounts tools that create, update and delete flags.

Tools 30

15 only read, 12 change things, 3 can delete or overwrite. A ? marks an optional parameter.

list-feature-flags
List the feature flags in a projectrequest: object
get-feature-flag
Fetch one feature flag and its settingsrequest: object
create-feature-flag changes
Create a new feature flag in a projectrequest: object
update-feature-flag changes
Change a flag with a patch (targeting, variations, settings)request: object
delete-feature-flag deletes
Remove a feature flagrequest: object
get-flag-status-across-environments
Report a flag's lifecycle status in each environment to judge if it can be removedrequest: object
get-environments
List the environments of a projectrequest: object
get-audit-log-entries
Read entries from the account's audit logrequest: object
get-code-references
List repositories that report code references to flagsrequest: object
list-metrics
List a project's metrics, for example to find keys to attach to an experimentrequest: object
get-metric
Fetch the configuration of one metricrequest: object
create-metric changes
Add a metric to a project for experiments or guarded rolloutsrequest: object
update-metric changes
Change a metric with a JSON patchrequest: object
list-experiments
List the experiments in one environment with their current iteration and statusrequest: object
list-experiments-any-environment
List a project's experiments across all its environmentsrequest: object
get-experiment
Fetch one experiment with its iterations, treatments and metricsrequest: object
create-experiment changes
Set up an experiment with a first iteration naming its flag, treatments and metricsrequest: object
update-experiment changes
Start or stop an iteration, or rename or redescribe an experiment, with semantic patchrequest: object
create-experiment-iteration changes
Add a new iteration to an experiment (the underlying API call is marked deprecated)request: object
list-ai-configs
List the AI Configs in a projectrequest: object
get-ai-config
Fetch one AI Configrequest: object
create-ai-config changes
Create a new AI Configrequest: object
update-ai-config changes
Change an AI Config's settingsrequest: object
delete-ai-config deletes
Remove an AI Configrequest: object
get-ai-config-targeting
Show the targeting rules of an AI Configrequest: object
update-ai-config-targeting changes
Change the targeting rules of an AI Configrequest: object
create-ai-config-variation changes
Add a variation to an AI Configrequest: object
get-ai-config-variation
Fetch one variation of an AI Configrequest: object
update-ai-config-variation changes
Change a variation of an AI Configrequest: object
delete-ai-config-variation deletes
Remove a variation from an AI Configrequest: object

Similar servers