[{"data":1,"prerenderedAt":212},["ShallowReactive",2],{"blog-post-\u002Fblog\u002Fmanaging-feature-flags-from-claude-code-and-cursor-with-mcp":3},{"id":4,"title":5,"author":6,"body":7,"date":201,"description":202,"draft":203,"extension":204,"image":205,"meta":206,"navigation":207,"path":208,"seo":209,"stem":210,"__hash__":211},"blog\u002Fblog\u002Fmanaging-feature-flags-from-claude-code-and-cursor-with-mcp.md","Managing feature flags from Claude Code and Cursor with MCP","Alejandro Beiderman",{"type":8,"value":9,"toc":194},"minimark",[10,14,19,31,39,43,46,49,113,126,130,133,143,157,163,169,173,176,179,183,190],[11,12,13],"p",{},"Most feature flag work happens in two places at once. You write the code that reads the flag in your editor, then switch to a dashboard to create the flag, enable it for dev\u002Ftest, and later roll it out in production. With the ConfigDirector MCP server, the code assistant that is already in your editor can do the second half for you.",[15,16,18],"h2",{"id":17},"what-the-mcp-server-is","What the MCP server is",[11,20,21,22,30],{},"The ",[23,24,29],"a",{"href":25,"rel":26,"target":28},"https:\u002F\u002Fmodelcontextprotocol.io",[27],"nofollow","\\_blank","Model Context Protocol"," is how coding assistants such as Claude Code, Cursor, and Copilot interact with outside tools. A server exposes a set of tools, the assistant reads the tool descriptions and calls them when a task needs them.",[11,32,33,34,38],{},"ConfigDirector's MCP server is hosted, so there is nothing to install or run. It sits in front of the same Admin API that the dashboard and the Terraform provider use, and it authenticates with an ordinary API token. Every update it makes goes through the same validation as an update from the dashboard, it is recorded in the audit log with the source ",[35,36,37],"strong",{},"MCP",", and counts as one Admin API request per tool call.",[15,40,42],{"id":41},"connecting-claude-code","Connecting Claude Code",[11,44,45],{},"Create an API token in the dashboard with the permissions you want the assistant to have. For a first try, read permissions on projects, environments, and configs are enough to explore. To support a full workflow, add the create, update settings, and update targeting rules permissions on configs. Copy the token to your clipboard before dismissing the page (the token is only shown at creation time).",[11,47,48],{},"Then add the MCP server to claude. The token is read from an environment variable, so it never lands in a file you might commit:",[50,51,56],"pre",{"className":52,"code":53,"language":54,"meta":55,"style":55},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","claude mcp add --transport http configdirector https:\u002F\u002Fmcp.configdirector.com \\\n  --header \"Authorization: Bearer ${CONFIGDIRECTOR_TOKEN}\"\n","bash","",[57,58,59,91],"code",{"__ignoreMap":55},[60,61,64,68,72,75,78,81,84,87],"span",{"class":62,"line":63},"line",1,[60,65,67],{"class":66},"sBMFI","claude",[60,69,71],{"class":70},"sfazB"," mcp",[60,73,74],{"class":70}," add",[60,76,77],{"class":70}," --transport",[60,79,80],{"class":70}," http",[60,82,83],{"class":70}," configdirector",[60,85,86],{"class":70}," https:\u002F\u002Fmcp.configdirector.com",[60,88,90],{"class":89},"sTEyZ"," \\\n",[60,92,94,97,101,104,107,110],{"class":62,"line":93},2,[60,95,96],{"class":70},"  --header",[60,98,100],{"class":99},"sMK4o"," \"",[60,102,103],{"class":70},"Authorization: Bearer ",[60,105,106],{"class":99},"${",[60,108,109],{"class":89},"CONFIGDIRECTOR_TOKEN",[60,111,112],{"class":99},"}\"\n",[11,114,115,116,119,120,125],{},"Type ",[57,117,118],{},"\u002Fmcp"," inside Claude Code and the server shows as connected, with only the tools your token allows. Cursor, VS Code, Windsurf, Codex CLI, and Gemini CLI each have a two-line setup of their own. The ",[23,121,124],{"href":122,"rel":123,"target":28},"https:\u002F\u002Fdocs.configdirector.com\u002Fintegrations\u002Fmcp",[27],"MCP docs page"," has all of them.",[15,127,129],{"id":128},"a-session","A session",[11,131,132],{},"Here is what an ordinary afternoon looks like once the server is connected. Each request is typed to the assistant in plain words, the tool calls happen underneath.",[11,134,135,138,139,142],{},[35,136,137],{},"Creating a kill switch."," \"Create a kill switch called ",[57,140,141],{},"payments-v2"," in the checkout project, off in every environment.\" The assistant lists the projects to find checkout, creates the config with the kill switch role, and reports the key. The switch is off in every environment because that is the initial default targeting rule value it was created with.",[11,144,145,148,149,152,153,156],{},[35,146,147],{},"Rolling out a flag."," \"In production, roll ",[57,150,151],{},"new-search"," out to 10 percent of users, and to everyone whose email ends in ",[57,154,155],{},"@example.com",".\" The assistant reads the flag's current rules for production, then replaces them with two rules: a conditional rule that matches the email domain, and a percentage rule that splits the rest. Because the MCP server provides the assistant with the exact targeting rules format and the operators each attribute supports, it does not have to guess.",[11,158,159,162],{},[35,160,161],{},"Checking what is still in use."," \"Which flags in the checkout project have not been evaluated in the last week?\" The assistant reads the recent evaluation activity of each config, which comes from the SDKs' telemetry, and tells you which ones have not been requested by any SDK. Those are the candidates for cleanup, and the dashboard is where you archive them.",[11,164,165,166,168],{},"Open the audit log afterwards and each change is there, attributed to the token's owner with the source ",[35,167,37],{},", next to the changes made from the dashboard and from Terraform.",[15,170,172],{"id":171},"what-the-server-will-not-do","What the server will not do",[11,174,175],{},"The assistant only sees the tools its token has permission for. A read-only token produces a read-only assistant. There is no tool to archive a config, or to delete a project or an environment. Those destructive operations stay in the dashboard on purpose.",[11,177,178],{},"Each organization can make up to 60 tool calls per minute. Past that, the assistant is told to wait for the next minute rather than being cut off, which keeps a retry loop from doing any harm.",[15,180,182],{"id":181},"try-it","Try it",[11,184,21,185,189],{},[23,186,188],{"href":122,"rel":187,"target":28},[27],"docs page"," has the setup for every supported tool and the full list of what the assistant can do. If you already use ConfigDirector, an API token is all you need. If you do not, the Free plan includes the MCP server.",[191,192,193],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":55,"searchDepth":93,"depth":93,"links":195},[196,197,198,199,200],{"id":17,"depth":93,"text":18},{"id":41,"depth":93,"text":42},{"id":128,"depth":93,"text":129},{"id":171,"depth":93,"text":172},{"id":181,"depth":93,"text":182},"2026-09-17","Connect your coding assistant to ConfigDirector and create flags, roll them out, and check what is live without leaving the editor.",false,"md","\u002Fmcp-blog-headline.webp",{},true,"\u002Fblog\u002Fmanaging-feature-flags-from-claude-code-and-cursor-with-mcp",{"title":5,"description":202},"blog\u002Fmanaging-feature-flags-from-claude-code-and-cursor-with-mcp","W0gpGH8xv8yrFbVNklO0wICcaf2TQ4Uvd7i_LYLIdTs",1789697588165]