LaunchDarkly MCP server: 20 tools, two routes
What an AI agent can change through LaunchDarkly, which of the two servers you should be running, and how many of its tools alter what users see.
Last verified 1 September 2026 · from LaunchDarkly's repository, its documentation and the server's own tools/list response
This page is one of 90 in a directory of monitoring and developer tools. Each page checks what an AI coding agent can get out of the tool through its MCP server, the connector that lets the agent query the tool directly.
Summary
LaunchDarkly publishes two MCP servers. Its README says which to use: the hosted one at mcp.launchdarkly.com/mcp/launchdarkly. LaunchDarkly calls that server more feature complete and more frequently updated.
The local package exists for EU and Federal instances, which do not yet support the hosted server. That is its stated purpose, not a general-purpose alternative.
The local server registers 20 tools, and ten of them write. Creating, updating and deleting flags and AI configs are all available with no read-only mode, which for a feature-flag product means an agent can change what users see.
What is the LaunchDarkly MCP server?
It is LaunchDarkly's server for the Model Context Protocol. LaunchDarkly controls feature flags, so the agent gains tools for reading and changing which features are on for whom.
Half the surface is AI configs, LaunchDarkly's newer product for managing model and prompt selection behind a flag. Eleven of the twenty tools name ai-config directly.
There are two servers. The hosted one is the default recommendation. The local one covered here is for EU and Federal instances, and LaunchDarkly says plainly that it lags the hosted server.
LaunchDarkly covers release in full. Code references reach part of the way into code review. AI configs reach part of the way into agent operation. Nothing reaches production observability or cost.
| Part of the work | What LaunchDarkly has here | Can an agent reach it |
|---|---|---|
| Code, tests & review | Code references | Partial. get-code-references shows where a flag is used in your source, which is review context rather than a review product |
| CI & release | Feature flags, environments, targeting | Yes. Core strength. Progressive delivery is what the product is for |
| Production observability | Audit log | No telemetry. The audit log records what changed in LaunchDarkly, not how the system behaved afterwards |
| Agent observability & evals | AI config targeting | Partial. AI configs control which model and prompt an agent runs on. There are no traces or evaluations here |
| AI cost management | None | No token or model spend data |
For an agent, that means LaunchDarkly answers what is switched on for whom, and can change it. An agent connected here can tell you which flags are live in production and where they are referenced in code. It cannot tell you whether turning a flag on made anything worse. Run this connector beside an observability connector, and give it tighter permissions than most.
What can an AI agent do with LaunchDarkly?
| Task | Tools | Works | Watch out for |
|---|---|---|---|
| Find what is switched on in production | list-feature-flags get-flag-status-across-environments | Yes | Status is per environment; name the environment rather than assuming production |
| Find where a flag is used in code | get-code-references | Yes | Needs the code-references integration configured in LaunchDarkly |
| See who changed a flag and when | get-audit-log-entries | Yes | Records LaunchDarkly changes only, not deployments |
| Change a flag's targeting | update-feature-flag get-environments | Yes | A write that reaches users immediately. Keep it off the allowlist |
| Manage which model an agent uses | list-ai-configs get-ai-config-targeting update-ai-config-targeting | Yes | Updating targeting changes model or prompt selection in production |
| Create or remove a flag | create-feature-flag delete-feature-flag | Yes | Deletion is permanent and reaches every environment |
| Check whether a rollout caused an incident | No | No telemetry. LaunchDarkly knows the flag flipped, not what happened next |
Ten of the twenty tools write, and on a feature-flag product a write is a production change with no deploy in between. This is the connector on which an allowlist matters most.
20 tools registered, all on by default, of which 10 write
- Flags3
list-feature-flagsget-feature-flagget-flag-status-across-environments- Flags, write3
create-feature-flagupdate-feature-flagdelete-feature-flag- AI configs4
list-ai-configsget-ai-configget-ai-config-targetingget-ai-config-variation- AI configs, write7
create-ai-configupdate-ai-configdelete-ai-configupdate-ai-config-targetingcreate-ai-config-variationupdate-ai-config-variationdelete-ai-config-variation- Context3
get-environmentsget-audit-log-entriesget-code-references
Half the surface is AI configs, LaunchDarkly's product for managing model and prompt selection behind a flag. Counted from the server's own tools/list response on 21 August 2026.
What connecting costs before the first question
A context window is the amount of text a model can hold at once, and connecting uses some of it before the agent asks anything. Every tool the server registers sends its name, description and input schema to the model when the session starts. The tool list is charged whether or not a single tool is called.
LaunchDarkly's cost sits mostly in its schemas rather than its prose: descriptions average 150 characters, while input schemas average 713, because flag and targeting objects are structurally large.
| Tool set | Tools | Tokens (GPT-5.6, GPT-5.5) | Tokens (GPT-4, GPT-3.5) | Tokens (Claude Haiku 4.5 to Opus 5) | Share of a 200,000-token window |
|---|---|---|---|---|---|
| Every tool, as registered | 20 | 3,866 to 6,769 | 3,717 to 6,792 | 5,888 to 7,681 | 1.9% to 3.8% |
Encodings: GPT-5.6, GPT-5.5 o200k_base; GPT-4, GPT-3.5 cl100k_base; Claude Haiku 4.5 to Opus 5 count_tokens. Counted 21 August 2026 from tools/list on the published @launchdarkly/mcp-server package, run locally with a placeholder key.
Registration is static, so no LaunchDarkly account was involved. Figures cover name, description and input schema. The two models in column one share the o200k_base encoding, so they get one count. The spread is formatting, about 75%, wide because the schemas carry most of the payload. Reasoning tokens are output, spent per request. The tool list is input, charged once at connection.
The Claude figures are measured rather than encoded. Anthropic publishes no local tokenizer, so the definitions were sent to the API's count_tokens endpoint and a no-tools baseline subtracted. The range covers two tokenizer generations rather than two serializations. Haiku 4.5 and Opus 4.6 sit at the low end, Opus 5 and Sonnet 5 at the high end. The gap between them is about a third.
Can LaunchDarkly watch your own AI agents?
LaunchDarkly sits on the control side of this stage rather than the observing side: it decides what an agent runs on, and records nothing about what happened. Read from LaunchDarkly’s MCP documentation on 21 August 2026.
| Signal | Covered | Notes |
|---|---|---|
| Trace and session tracking | No | No trace, span or session is stored, so nothing can be read back |
| Eval scores on recorded traffic | No | There are no evaluations in the product to read |
| Prompt version tracking | Partial | AI configs hold the model and prompt an agent runs on, so a change is visible as configuration. That is what will run, not what did |
| Offline experiments | No | Experimentation targets flags rather than model output |
| Token and cost tracking | No | No tool returns a token count or a cost figure |
LaunchDarkly MCP server limits: where answers come back incomplete
LaunchDarkly's first constraint is specific to a connector that can change live flags.
The agent says: “I updated the flag.” Users saw the change immediately.
A feature-flag change takes effect without a deploy. That is the product working as designed, and it means update-feature-flag, update-ai-config-targeting and delete-feature-flag are production changes made from a chat window.
Ten of LaunchDarkly's twenty tools write, and the server has no read-only mode. The MCP client allowlist is the only gate.
Guard: Approve read tools only. In Claude Code, run /permissions and leave every create-, update- and delete- tool unapproved.
The agent says: “I have all the LaunchDarkly tools.” The hosted server has more.
LaunchDarkly states that the hosted server is more feature complete and receives more frequent updates than this self-managed one, which it provides for EU and Federal instances that do not yet support hosted.
So an absent capability here is not necessarily absent from LaunchDarkly. It may simply not have reached the local package.
Guard: Use the hosted server unless you are on an EU or Federal instance. Check the hosted server's tools before concluding something is unsupported.
The agent says: “This flag is not used anywhere in code.” The code-references integration was never set up.
get-code-references reads data that LaunchDarkly's code-references scanner populates from your repositories. Without that integration it returns nothing, and an unused flag and an unscanned repository look identical.
Guard: Confirm the code-references integration is configured before treating an empty result as evidence a flag is dead.
How to configure LaunchDarkly MCP for agents
- 1
Use the hosted server unless you cannot
LaunchDarkly states the hosted server is more feature complete and receives more frequent updates. This package exists for EU and Federal instances.
- 2
Allowlist read tools
Ten of the twenty write, and on a feature-flag product a write reaches users without a deploy.
- 3
Scope the access token
LD_ACCESS_TOKENcarries whatever the token was granted, across every project and environment it can reach. - 4
Set up code references if you want them
get-code-referencesreturns nothing without LaunchDarkly's repository scanner, and an unscanned repository looks the same as an unused flag.
Paste this into your agent’s instructions
A flag answer is only meaningful with its environment, and an empty code-references result is easy to misread as a dead flag. The block makes the agent state both.
When you answer using LaunchDarkly MCP tools, state: - The project and environment each flag status came from. A flag can be on in one environment and off in another. - Whether code references are configured. An empty result may mean the repository was never scanned, not that the flag is unused. - Whether you changed anything. Flag and targeting updates reach users without a deploy. Never state that data does not exist. State that none was returned under the constraints above. Write your answer in ASD-STE100 Simplified Technical English. Use short sentences with one idea in each.
Do you need the MCP server at all?
Yes, and LaunchDarkly's own guidance points that way. The hosted server is the recommended surface, and the REST API covers the same operations with the same key.
The connector's advantage is that flag and targeting shapes are complicated, and the schemas describe them, so an agent can construct a valid targeting change without being handed the API reference.
That advantage cuts both ways here. A tool that makes a targeting change easy to write also makes it easy to apply by mistake.
Use the hosted server unless your instance is EU or Federal. Keep write tools off the allowlist either way.
LaunchDarkly MCP server setup
The hosted server at mcp.launchdarkly.com/mcp/launchdarkly is the recommended route and needs no install. The local package runs with npx and takes an access token, either as --api-key or in LD_ACCESS_TOKEN.
The local package is intended for EU and Federal instances, which do not yet support the hosted server.
Claude Code, hosted
The recommended route. No token appears in the config because the hosted server authenticates through its own OAuth flow on first connect.
claude mcp add --transport http launchdarkly https://mcp.launchdarkly.com/mcp/launchdarkly
Claude Code, local
For EU and Federal instances. This process holds an access token.
claude mcp add-json "launchdarkly" '{"command":"npx",
"args":["-y","@launchdarkly/mcp-server","start","--api-key","<your-token>"]}'Cursor
In ~/.cursor/mcp.json for all projects, or .cursor/mcp.json in one.
{"mcpServers":{"launchdarkly":{"command":"npx",
"args":["-y","@launchdarkly/mcp-server","start","--api-key","$LD_ACCESS_TOKEN"],
"env":{"LD_ACCESS_TOKEN":"<your-token>"}}}}Codex CLI
Codex reads TOML, so the JSON blocks above will not transfer.
[mcp_servers.launchdarkly]
command = "npx"
args = ["-y", "@launchdarkly/mcp-server", "start", "--api-key", "$LD_ACCESS_TOKEN"]
env = { LD_ACCESS_TOKEN = "<your-token>" }Every other client
Each block below is the configuration for one client, with the file path and the key that client expects.
Claude Desktop
macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Windows %APPDATA%\Claude\claude_desktop_config.json. There is no CLI. Edit through Settings, Developer, Edit Config.
Quit and restart fully for changes to load. Paths in args must be absolute. Logs at ~/Library/Logs/Claude/mcp.log.
{"mcpServers":{"launchdarkly":{"command":"npx",
"args":["-y","@launchdarkly/mcp-server","start","--api-key","$LD_ACCESS_TOKEN"],
"env":{"LD_ACCESS_TOKEN":"<your-token>"}}}}Gemini CLI
~/.gemini/settings.json globally, or .gemini/settings.json per project. Key mcpServers. CLI: gemini mcp add.
{"mcpServers":{"launchdarkly":{"command":"npx",
"args":["-y","@launchdarkly/mcp-server","start","--api-key","$LD_ACCESS_TOKEN"],
"env":{"LD_ACCESS_TOKEN":"<your-token>"}}}}VS Code Copilot
.vscode/mcp.json per workspace, or your user profile. CLI: code --add-mcp.
{"servers":{"launchdarkly":{"command":"npx",
"args":["-y","@launchdarkly/mcp-server","start","--api-key","$LD_ACCESS_TOKEN"],
"env":{"LD_ACCESS_TOKEN":"<your-token>"}}}}The key is `servers`, not `mcpServers`. VS Code is the only client that uses that name, and copying a config from anywhere else fails silently.
Windsurf
~/.codeium/windsurf/mcp_config.json, which is the path Windsurf documents. Key mcpServers, the same JSON shape as Cursor, carrying the same access token.
Zed
~/.config/zed/settings.json, carrying the same access token as the blocks above.
The key is `context_servers`. Zed does not call them MCP servers in config, so searching its settings for mcp finds nothing.
Google Antigravity
~/.gemini/config/mcp_config.json globally, or .agents/mcp_config.json per project. Key mcpServers. There is no CLI. Use the /mcp overlay in the editor. Supports stdio, streamable HTTP, SSE and websocket.
{"mcpServers":{"launchdarkly":{"command":"npx",
"args":["-y","@launchdarkly/mcp-server","start","--api-key","$LD_ACCESS_TOKEN"],
"env":{"LD_ACCESS_TOKEN":"<your-token>"}}}}Amp (Sourcegraph)
~/.config/amp/settings.json or .amp/settings.json, carrying the same access token. The amp mcp CLI covers approve, doctor and oauth.
The key is `amp.mcpServers`, namespaced. A bare mcpServers block is ignored.
Cline
~/.cline/mcp.json per the docs. The source also reads ~/.cline/data/settings/cline_mcp_settings.json. Key mcpServers, standard JSON shape, carrying the same access token. Supports stdio, streamable HTTP and SSE.
Goose (Block)
~/.config/goose/config.yaml, carrying the same access token.
YAML, and servers are called `extensions`. Goose does not use the MCP vocabulary in config at all. Add one interactively with goose configure, or per session with goose session --with-extension.
Kiro (AWS)
.kiro/settings/mcp.json per workspace, or ~/.kiro/settings/mcp.json globally. Key mcpServers, standard JSON shape, carrying the same access token.
Warp
~/.warp/.mcp.json or .warp/.mcp.json. Key mcpServers, standard shape, carrying the same access token. Also addable through the /agent-add-mcp skill.
JetBrains Junie
.junie/mcp/mcp.json per project, or ~/.junie/mcp/mcp.json. Key mcpServers, carrying the same access token. Use /mcp in the CLI to manage.
Roo Code
.roo/mcp.json per project. The global file is mcp_settings.json, opened from the Roo Code MCP settings view with Edit Global MCP. Key mcpServers, carrying the same access token.
Continue
.continue/mcpServers/*.yaml, one file per server, carrying the same access token.
YAML, and `mcpServers` is a list, not an object. Every JSON client keys servers by name. Continue takes an array, so a converted config will not parse.
Trae
.trae/mcp.json per project, or paste into the UI under Raw Config (JSON). Key mcpServers, standard shape, carrying the same access token.
Devin
Devin has no config file to edit. Servers are added through a web form in the settings UI, and Devin's documentation states you do not need to write or paste JSON. The block below is the shape those fields describe, shown for reference. Either route uses the same access token.
Non-default instance
Point the local server at an EU or Federal endpoint with --server-url, alongside the token.
LD_ACCESS_TOKEN=<your-token> \ npx -y @launchdarkly/mcp-server start \ --server-url https://app.eu.launchdarkly.com
Read-only access, permissions and security
Half the tools change production
Ten of the twenty create, update or delete flags and AI configs, and a flag change takes effect without a deploy.
There is no read-only mode
The server offers no flag equivalent to a read-only switch, so the client's allowlist is the only gate.
AI config targeting selects the model
update-ai-config-targetingchanges which model or prompt an agent runs on in production, which changes how the agent behaves, not just how it is configured.The token carries broad reach
An access token spans the projects and environments it was granted, so scope it to the smallest set that answers your questions.
Troubleshooting
- A flag looks off but users still see the feature
- Flag status is per environment. Use
get-flag-status-across-environmentsand name the environment rather than assuming production. - No code references for a flag you know is used
get-code-referencesreads data from LaunchDarkly's repository scanner. Without that integration the result is empty, which looks identical to an unused flag.- 401 on connect
- The access token is missing or scoped to another instance. For EU or Federal, set
--server-urlto the correct endpoint. - A capability exists in LaunchDarkly but not in the server
- LaunchDarkly states the hosted server is more feature complete than this local one. Check the hosted server before concluding the product lacks it.
- A flag changed that you did not change
- Write tools have no server-side gate. Remove every
create-,update-anddelete-tool from your client's allowlist, and checkget-audit-log-entriesfor what happened.
LaunchDarkly MCP server: Reference
| Item | Value |
|---|---|
| Status | Repository pushed 21 August 2026 · MIT license |
| Adoption | 27 stars |
| Package | @launchdarkly/mcp-server on npm; hosted server at mcp.launchdarkly.com/mcp/launchdarkly |
| Scope | The local server is for EU and Federal instances; hosted is recommended otherwise |
| Auth | LD_ACCESS_TOKEN, or --api-key on the command line |
| Tools | 20, all on by default, of which 10 write |
| Read-only | None. Gate the write tools in the client |
What engineers report
The local server has a small public footprint, so the useful signals are LaunchDarkly's own guidance and the read-write split.
| What was checked | What it shows |
|---|---|
| Stars | 27 |
| Last push | 21 August 2026 |
| License | MIT |
| Tools | 20, of which 10 write |
| Stated purpose | EU and Federal instances; hosted server recommended otherwise |
“Using an API key makes it difficult to use your MCP in an IDE because we can't push the key to our source code. ... Many MCPs in the IDE now just send you to authenticate, rather than working with a static API key.”
“The CLI defaults
--api-keyto an empty string, and the nullish coalescing operator in the security module doesn't treat it as nullish, so the env var is never read.”
Repository facts from the GitHub API, retrieved 21 August 2026. Tool counts and the read-write split come from the server's own tools/list response.
Should you connect an agent to LaunchDarkly?
Yes, though it is no longer actively maintained. Best for EU and Federal instances, read tools only, with flag changes left to a reviewed process.
- Strongest fit
- Teams on EU or Federal LaunchDarkly instances who want an agent auditing which flags are live and where they are referenced.
- Main advantage
- Schemas that describe flag and targeting structures well enough for an agent to work with them correctly.
- Main weakness
- LaunchDarkly says this server lags the hosted one, so a missing capability may be a packaging gap rather than a product gap.
- Operational risk
- Half the tools change live flags with no deploy in between, and there is no read-only mode.
From Oodle
One platform for agent traces and infrastructure
Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface, from $10 per million spans.
See agent observabilityFrequently asked questions
How many tools does the LaunchDarkly MCP server have?
20 on the local server, of which 10 write. Counted from the server's own tools/list response on the published npm package, 21 August 2026.
Should I use the hosted or the local server?
Hosted, unless your instance is EU or Federal. LaunchDarkly states the hosted server is more feature complete and receives more frequent updates.
Can an agent turn a feature on for real users?
Yes. update-feature-flag takes effect without a deploy, and the server has no read-only mode. Restrict write tools in your MCP client.
What are the AI config tools for?
AI configs control which model and prompt an agent runs on, managed behind a flag. Eleven of the twenty tools cover them, and updating targeting changes model selection in production.
Can it tell me whether a rollout caused a problem?
No. LaunchDarkly records the flag change; the effect is in your telemetry. Pair it with an observability connector.