[{"data":1,"prerenderedAt":1597},["ShallowReactive",2],{"navigation_docs":3,"-integrations-mcp":158,"-integrations-mcp-surround":1595},[4,35,143],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F1.quickstart","i-lucide-fast-forward",{"title":16,"path":17,"stem":18,"icon":19},"Core Concepts","\u002Fgetting-started\u002Fcore-concepts","1.getting-started\u002F2.core-concepts","i-lucide-workflow",{"title":21,"path":22,"stem":23,"icon":24},"Configs Anatomy","\u002Fgetting-started\u002Fconfigs","1.getting-started\u002F3.configs","i-lucide-file-cog",{"title":26,"path":27,"stem":28,"icon":29},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers",{"title":31,"path":32,"stem":33,"icon":34},"JSON Schema Validation","\u002Fgetting-started\u002Fjson-schema-validation","1.getting-started\u002F5.json-schema-validation","i-lucide-braces",{"title":36,"defaultOpen":37,"path":38,"stem":39,"children":40,"page":6},"SDKs",true,"\u002Fsdks","2.sdks",[41,46,72,97,113],{"title":42,"path":43,"stem":44,"icon":45},"Available SDKs","\u002Fsdks\u002Favailable-sdks","2.sdks\u002F1.available-sdks","i-lucide-list",{"title":47,"icon":48,"defaultOpen":37,"path":49,"stem":50,"children":51,"page":6},"Browser SDKs","i-lucide-monitor","\u002Fsdks\u002Fbrowser","2.sdks\u002F2.browser",[52,57,62,67],{"title":53,"path":54,"stem":55,"icon":56},"Javascript","\u002Fsdks\u002Fbrowser\u002Fjavascript","2.sdks\u002F2.browser\u002F1.javascript","cd-logos-javascript",{"title":58,"path":59,"stem":60,"icon":61},"React","\u002Fsdks\u002Fbrowser\u002Freact","2.sdks\u002F2.browser\u002F2.react","cd-logos-react-light",{"title":63,"path":64,"stem":65,"icon":66},"Vue","\u002Fsdks\u002Fbrowser\u002Fvue","2.sdks\u002F2.browser\u002F3.vue","cd-logos-vue",{"title":68,"path":69,"stem":70,"icon":71},"OpenFeature Web","\u002Fsdks\u002Fbrowser\u002Fopenfeature-web","2.sdks\u002F2.browser\u002F4.openfeature-web","cd-logos-openfeature",{"title":73,"icon":74,"defaultOpen":37,"path":75,"stem":76,"children":77,"page":6},"Mobile SDKs","i-lucide-smartphone","\u002Fsdks\u002Fmobile","2.sdks\u002F3.mobile",[78,82,87,92],{"title":79,"path":80,"stem":81,"icon":61},"React Native","\u002Fsdks\u002Fmobile\u002Freact-native","2.sdks\u002F3.mobile\u002F1.react-native",{"title":83,"path":84,"stem":85,"icon":86},"Flutter","\u002Fsdks\u002Fmobile\u002Fflutter","2.sdks\u002F3.mobile\u002F2.flutter","cd-logos-flutter",{"title":88,"path":89,"stem":90,"icon":91},"Swift","\u002Fsdks\u002Fmobile\u002Fswift","2.sdks\u002F3.mobile\u002F3.swift","cd-logos-swift",{"title":93,"path":94,"stem":95,"icon":96},"Android","\u002Fsdks\u002Fmobile\u002Fandroid","2.sdks\u002F3.mobile\u002F4.android","cd-logos-android",{"title":98,"icon":99,"defaultOpen":37,"path":100,"stem":101,"children":102,"page":6},"Meta-framework SDKs","i-lucide-monitor-smartphone","\u002Fsdks\u002Fmeta","2.sdks\u002F4.meta",[103,108],{"title":104,"path":105,"stem":106,"icon":107},"Next.js","\u002Fsdks\u002Fmeta\u002Fnextjs","2.sdks\u002F4.meta\u002F1.nextjs","cd-logos-nextjs",{"title":109,"path":110,"stem":111,"icon":112},"Nuxt","\u002Fsdks\u002Fmeta\u002Fnuxt","2.sdks\u002F4.meta\u002F2.nuxt","cd-logos-nuxt",{"title":114,"icon":115,"defaultOpen":37,"path":116,"stem":117,"children":118,"page":6},"Server SDKs","i-lucide-server","\u002Fsdks\u002Fserver","2.sdks\u002F5.server",[119,124,128,133,138],{"title":120,"path":121,"stem":122,"icon":123},"Node.js","\u002Fsdks\u002Fserver\u002Fnode-js","2.sdks\u002F5.server\u002F1.node-js","cd-logos-nodejs",{"title":125,"path":126,"stem":127,"icon":71},"OpenFeature Node.js","\u002Fsdks\u002Fserver\u002Fopenfeature-node","2.sdks\u002F5.server\u002F2.openfeature-node",{"title":129,"path":130,"stem":131,"icon":132},"Python","\u002Fsdks\u002Fserver\u002Fpython","2.sdks\u002F5.server\u002F3.python","cd-logos-python",{"title":134,"path":135,"stem":136,"icon":137},"Java","\u002Fsdks\u002Fserver\u002Fjava","2.sdks\u002F5.server\u002F4.java","cd-logos-java",{"title":139,"path":140,"stem":141,"icon":142},".NET","\u002Fsdks\u002Fserver\u002Fdotnet","2.sdks\u002F5.server\u002F5.dotnet","cd-logos-dotnet",{"title":144,"defaultOpen":37,"path":145,"stem":146,"children":147,"page":6},"Integrations","\u002Fintegrations","3.integrations",[148,153],{"title":149,"path":150,"stem":151,"icon":152},"Terraform","\u002Fintegrations\u002Fterraform","3.integrations\u002F1.terraform","cd-logos-terraform",{"title":154,"path":155,"stem":156,"icon":157},"MCP","\u002Fintegrations\u002Fmcp","3.integrations\u002F2.mcp","cd-logos-mcp",{"id":159,"title":160,"body":161,"description":1588,"extension":1589,"links":1590,"meta":1591,"navigation":1592,"path":155,"seo":1593,"stem":156,"__hash__":1594},"docs\u002F3.integrations\u002F2.mcp.md","MCP Server",{"type":162,"value":163,"toc":1574},"minimark",[164,168,173,177,188,204,207,211,259,262,266,373,376,391,394,398,413,475,489,640,651,655,670,766,769,773,783,1006,1013,1017,1026,1123,1127,1134,1183,1189,1193,1207,1305,1308,1346,1351,1355,1372,1522,1525,1529,1550,1554,1570],[165,166],"div",{"hidden":37,"dataTitleIcon":167},"mcp",[169,170,172],"h2",{"id":171},"introduction","Introduction",[174,175,176],"p",{},"The ConfigDirector MCP server allows AI coding assistants to read and update your projects, environments, configs, and targeting rules. It runs as a hosted endpoint, so there is nothing to install:",[178,179,184],"pre",{"className":180,"code":182,"language":183},[181],"language-text","https:\u002F\u002Fmcp.configdirector.com\n","text",[185,186,182],"code",{"__ignoreMap":187},"",[174,189,190,191,199,200,203],{},"It speaks the ",[192,193,198],"a",{"href":194,"rel":195,"target":197},"https:\u002F\u002Fmodelcontextprotocol.io",[196],"nofollow","\\_blank","Model Context Protocol"," over Streamable HTTP and authenticates with a ConfigDirector API token. Every update an assistant makes goes through the same validations as the dashboard and the Admin API. Updates to configs show in the audit log with a source of ",[201,202,154],"strong",{},".",[174,205,206],{},"Code assistant tool calls count as Admin API requests usage within your billing plan, one tool call counts as one Admin API request.",[169,208,210],{"id":209},"create-an-api-token","Create an API token",[212,213,214,222,246,249,252],"ol",{},[215,216,217,218,221],"li",{},"In the ConfigDirector dashboard, open ",[201,219,220],{},"API Tokens"," and create a token.",[215,223,224,225,228,229,232,233,236,237,228,240,232,243,203],{},"Choose the permissions the assistant needs. For exploring and answering questions, ",[185,226,227],{},"Projects: Read",", ",[185,230,231],{},"Environments: Read",", and ",[185,234,235],{},"Configs: Read"," are enough. If you want the assistant to be able to create and update configs and flags, add ",[185,238,239],{},"Configs: Create",[185,241,242],{},"Configs: Update Settings",[185,244,245],{},"Configs: Update Targeting Rules",[215,247,248],{},"It's recommended that you set an expiration on the token since it will be stored on your workstation to configure your coding tool of choice.",[215,250,251],{},"Copy the token, and optionally save it into a password manager. Do not commit the token into source control.",[215,253,254,255,258],{},"The examples below use an environment variable named ",[185,256,257],{},"CONFIGDIRECTOR_TOKEN",", wherever the tool supports that, to provide the API token.",[174,260,261],{},"The MCP server only exposes the tools that match your token's permissions, so a read-only token produces a read-only assistant.",[169,263,265],{"id":264},"what-the-assistant-can-do","What the assistant can do",[267,268,269,282],"table",{},[270,271,272],"thead",{},[273,274,275,279],"tr",{},[276,277,278],"th",{},"Tools",[276,280,281],{},"What they do",[283,284,285,305,324,340,353,363],"tbody",{},[273,286,287,302],{},[288,289,290,228,293,228,296,228,299],"td",{},[185,291,292],{},"list_projects",[185,294,295],{},"get_project",[185,297,298],{},"create_project",[185,300,301],{},"update_project",[288,303,304],{},"Retrieve projects general information. Create and update projects in your organization.",[273,306,307,321],{},[288,308,309,228,312,228,315,228,318],{},[185,310,311],{},"list_environments",[185,313,314],{},"get_environment",[185,316,317],{},"create_environment",[185,319,320],{},"update_environment",[288,322,323],{},"Retrieve environments within a project. Create new environments, and update environments.",[273,325,326,337],{},[288,327,328,228,331,228,334],{},[185,329,330],{},"list_configs",[185,332,333],{},"get_config",[185,335,336],{},"get_config_activity",[288,338,339],{},"Retrieve Configs, their targeting rules per environment, and their most recent evaluations.",[273,341,342,350],{},[288,343,344,228,347],{},[185,345,346],{},"create_config",[185,348,349],{},"update_config_settings",[288,351,352],{},"Create configs, feature flags, kill switches, or experiments. Update their settings, for example, the allowed values in an enum.",[273,354,355,360],{},[288,356,357],{},[185,358,359],{},"update_targeting_rules",[288,361,362],{},"Update the targeting rules of a config in a given environment.",[273,364,365,370],{},[288,366,367],{},[185,368,369],{},"get_targeting_rules_reference",[288,371,372],{},"Retrieves the targeting rules format, operators, and target types. This is used by the assistant to write valid targeting rules",[174,374,375],{},"Things you can ask once connected:",[377,378,379,382,385,388],"ul",{},[215,380,381],{},"\"List the flags in the checkout project.\"",[215,383,384],{},"\"Create a kill switch called payments-v2 in the checkout project, off in all environments.\"",[215,386,387],{},"\"In production, roll new-search out to 10 percent of users, and to everyone whose email ends in @example.com.\"",[215,389,390],{},"\"Which configs in production have not been evaluated in the last week?\"",[174,392,393],{},"The assistant sees a short guide to ConfigDirector's vocabulary when it connects (roles, lifetimes, types, and how targeting rules work), so you can talk about configs, feature flags, and rollouts in plain terms.",[169,395,397],{"id":396},"claude-code","Claude Code",[174,399,400,401,404,405,408,409,412],{},"Add the server for yourself in the current project (the default), for yourself in every project with ",[185,402,403],{},"--scope user",", or for the whole team with ",[185,406,407],{},"--scope project",", which writes ",[185,410,411],{},".mcp.json"," in the project root:",[178,414,418],{"className":415,"code":416,"language":417,"meta":187,"style":187},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","claude mcp add --transport http configdirector https:\u002F\u002Fmcp.configdirector.com \\\n  --header \"Authorization: Bearer ${CONFIGDIRECTOR_TOKEN}\"\n","bash",[185,419,420,453],{"__ignoreMap":187},[421,422,425,429,433,436,440,443,446,449],"span",{"class":423,"line":424},"line",1,[421,426,428],{"class":427},"sbgvK","claude",[421,430,432],{"class":431},"s_sjI"," mcp",[421,434,435],{"class":431}," add",[421,437,439],{"class":438},"stzsN"," --transport",[421,441,442],{"class":431}," http",[421,444,445],{"class":431}," configdirector",[421,447,448],{"class":431}," https:\u002F\u002Fmcp.configdirector.com",[421,450,452],{"class":451},"s_hVV"," \\\n",[421,454,456,459,463,466,469,472],{"class":423,"line":455},2,[421,457,458],{"class":438},"  --header",[421,460,462],{"class":461},"sjJ54"," \"",[421,464,465],{"class":431},"Authorization: Bearer ",[421,467,468],{"class":461},"${",[421,470,257],{"class":471},"su5hD",[421,473,474],{"class":461},"}\"\n",[174,476,477,478,480,481,484,485,488],{},"Or write ",[185,479,411],{}," by hand. Claude Code expands environment variables in the ",[185,482,483],{},"url"," and ",[185,486,487],{},"headers"," fields, so the token stays out of the repository:",[178,490,494],{"className":491,"code":492,"filename":411,"language":493,"meta":187,"style":187},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"mcpServers\": {\n    \"configdirector\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Fmcp.configdirector.com\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${CONFIGDIRECTOR_TOKEN}\"\n      }\n    }\n  }\n}\n","json",[185,495,496,502,521,537,561,581,594,616,622,628,634],{"__ignoreMap":187},[421,497,498],{"class":423,"line":424},[421,499,501],{"class":500},"sP7_E","{\n",[421,503,504,508,512,515,518],{"class":423,"line":455},[421,505,507],{"class":506},"s39Yj","  \"",[421,509,511],{"class":510},"sseR_","mcpServers",[421,513,514],{"class":506},"\"",[421,516,517],{"class":500},":",[421,519,520],{"class":500}," {\n",[421,522,524,527,531,533,535],{"class":423,"line":523},3,[421,525,526],{"class":506},"    \"",[421,528,530],{"class":529},"sZMiF","configdirector",[421,532,514],{"class":506},[421,534,517],{"class":500},[421,536,520],{"class":500},[421,538,540,543,547,549,551,553,556,558],{"class":423,"line":539},4,[421,541,542],{"class":506},"      \"",[421,544,546],{"class":545},"srdBf","type",[421,548,514],{"class":506},[421,550,517],{"class":500},[421,552,462],{"class":461},[421,554,555],{"class":431},"http",[421,557,514],{"class":461},[421,559,560],{"class":500},",\n",[421,562,564,566,568,570,572,574,577,579],{"class":423,"line":563},5,[421,565,542],{"class":506},[421,567,483],{"class":545},[421,569,514],{"class":506},[421,571,517],{"class":500},[421,573,462],{"class":461},[421,575,576],{"class":431},"https:\u002F\u002Fmcp.configdirector.com",[421,578,514],{"class":461},[421,580,560],{"class":500},[421,582,584,586,588,590,592],{"class":423,"line":583},6,[421,585,542],{"class":506},[421,587,487],{"class":545},[421,589,514],{"class":506},[421,591,517],{"class":500},[421,593,520],{"class":500},[421,595,597,600,604,606,608,610,613],{"class":423,"line":596},7,[421,598,599],{"class":506},"        \"",[421,601,603],{"class":602},"swQdS","Authorization",[421,605,514],{"class":506},[421,607,517],{"class":500},[421,609,462],{"class":461},[421,611,612],{"class":431},"Bearer ${CONFIGDIRECTOR_TOKEN}",[421,614,615],{"class":461},"\"\n",[421,617,619],{"class":423,"line":618},8,[421,620,621],{"class":500},"      }\n",[421,623,625],{"class":423,"line":624},9,[421,626,627],{"class":500},"    }\n",[421,629,631],{"class":423,"line":630},10,[421,632,633],{"class":500},"  }\n",[421,635,637],{"class":423,"line":636},11,[421,638,639],{"class":500},"}\n",[174,641,642,643,646,647,650],{},"Type ",[185,644,645],{},"\u002Fmcp"," inside Claude Code to check: the server should show as connected with its tools listed. From a terminal, ",[185,648,649],{},"claude mcp list"," shows the same.",[169,652,654],{"id":653},"cursor","Cursor",[174,656,657,658,661,662,665,666,669],{},"Create ",[185,659,660],{},".cursor\u002Fmcp.json"," in the project, or ",[185,663,664],{},"~\u002F.cursor\u002Fmcp.json"," for every project. Cursor expands ",[185,667,668],{},"${env:NAME}"," in this file:",[178,671,673],{"className":491,"code":672,"filename":660,"language":493,"meta":187,"style":187},"{\n  \"mcpServers\": {\n    \"configdirector\": {\n      \"url\": \"https:\u002F\u002Fmcp.configdirector.com\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${env:CONFIGDIRECTOR_TOKEN}\"\n      }\n    }\n  }\n}\n",[185,674,675,679,691,703,721,733,750,754,758,762],{"__ignoreMap":187},[421,676,677],{"class":423,"line":424},[421,678,501],{"class":500},[421,680,681,683,685,687,689],{"class":423,"line":455},[421,682,507],{"class":506},[421,684,511],{"class":510},[421,686,514],{"class":506},[421,688,517],{"class":500},[421,690,520],{"class":500},[421,692,693,695,697,699,701],{"class":423,"line":523},[421,694,526],{"class":506},[421,696,530],{"class":529},[421,698,514],{"class":506},[421,700,517],{"class":500},[421,702,520],{"class":500},[421,704,705,707,709,711,713,715,717,719],{"class":423,"line":539},[421,706,542],{"class":506},[421,708,483],{"class":545},[421,710,514],{"class":506},[421,712,517],{"class":500},[421,714,462],{"class":461},[421,716,576],{"class":431},[421,718,514],{"class":461},[421,720,560],{"class":500},[421,722,723,725,727,729,731],{"class":423,"line":563},[421,724,542],{"class":506},[421,726,487],{"class":545},[421,728,514],{"class":506},[421,730,517],{"class":500},[421,732,520],{"class":500},[421,734,735,737,739,741,743,745,748],{"class":423,"line":583},[421,736,599],{"class":506},[421,738,603],{"class":602},[421,740,514],{"class":506},[421,742,517],{"class":500},[421,744,462],{"class":461},[421,746,747],{"class":431},"Bearer ${env:CONFIGDIRECTOR_TOKEN}",[421,749,615],{"class":461},[421,751,752],{"class":423,"line":596},[421,753,621],{"class":500},[421,755,756],{"class":423,"line":618},[421,757,627],{"class":500},[421,759,760],{"class":423,"line":624},[421,761,633],{"class":500},[421,763,764],{"class":423,"line":630},[421,765,639],{"class":500},[174,767,768],{},"Open Cursor's MCP settings to confirm the server is enabled and its tools are listed. The variable has to be set in the environment Cursor was launched from.",[169,770,772],{"id":771},"vs-code-with-github-copilot","VS Code with GitHub Copilot",[174,774,657,775,778,779,782],{},[185,776,777],{},".vscode\u002Fmcp.json",". The ",[185,780,781],{},"inputs"," entry makes VS Code prompt for the token once and store it securely, so nothing sensitive goes in the file:",[178,784,786],{"className":491,"code":785,"filename":777,"language":493,"meta":187,"style":187},"{\n  \"inputs\": [\n    {\n      \"type\": \"promptString\",\n      \"id\": \"configdirector-token\",\n      \"description\": \"ConfigDirector API token\",\n      \"password\": true\n    }\n  ],\n  \"servers\": {\n    \"configdirector\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Fmcp.configdirector.com\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${input:configdirector-token}\"\n      }\n    }\n  }\n}\n",[185,787,788,792,805,810,829,849,869,883,887,892,905,917,936,955,968,986,991,996,1001],{"__ignoreMap":187},[421,789,790],{"class":423,"line":424},[421,791,501],{"class":500},[421,793,794,796,798,800,802],{"class":423,"line":455},[421,795,507],{"class":506},[421,797,781],{"class":510},[421,799,514],{"class":506},[421,801,517],{"class":500},[421,803,804],{"class":500}," [\n",[421,806,807],{"class":423,"line":523},[421,808,809],{"class":500},"    {\n",[421,811,812,814,816,818,820,822,825,827],{"class":423,"line":539},[421,813,542],{"class":506},[421,815,546],{"class":529},[421,817,514],{"class":506},[421,819,517],{"class":500},[421,821,462],{"class":461},[421,823,824],{"class":431},"promptString",[421,826,514],{"class":461},[421,828,560],{"class":500},[421,830,831,833,836,838,840,842,845,847],{"class":423,"line":563},[421,832,542],{"class":506},[421,834,835],{"class":529},"id",[421,837,514],{"class":506},[421,839,517],{"class":500},[421,841,462],{"class":461},[421,843,844],{"class":431},"configdirector-token",[421,846,514],{"class":461},[421,848,560],{"class":500},[421,850,851,853,856,858,860,862,865,867],{"class":423,"line":583},[421,852,542],{"class":506},[421,854,855],{"class":529},"description",[421,857,514],{"class":506},[421,859,517],{"class":500},[421,861,462],{"class":461},[421,863,864],{"class":431},"ConfigDirector API token",[421,866,514],{"class":461},[421,868,560],{"class":500},[421,870,871,873,876,878,880],{"class":423,"line":596},[421,872,542],{"class":506},[421,874,875],{"class":529},"password",[421,877,514],{"class":506},[421,879,517],{"class":500},[421,881,882],{"class":506}," true\n",[421,884,885],{"class":423,"line":618},[421,886,627],{"class":500},[421,888,889],{"class":423,"line":624},[421,890,891],{"class":500},"  ],\n",[421,893,894,896,899,901,903],{"class":423,"line":630},[421,895,507],{"class":506},[421,897,898],{"class":510},"servers",[421,900,514],{"class":506},[421,902,517],{"class":500},[421,904,520],{"class":500},[421,906,907,909,911,913,915],{"class":423,"line":636},[421,908,526],{"class":506},[421,910,530],{"class":529},[421,912,514],{"class":506},[421,914,517],{"class":500},[421,916,520],{"class":500},[421,918,920,922,924,926,928,930,932,934],{"class":423,"line":919},12,[421,921,542],{"class":506},[421,923,546],{"class":545},[421,925,514],{"class":506},[421,927,517],{"class":500},[421,929,462],{"class":461},[421,931,555],{"class":431},[421,933,514],{"class":461},[421,935,560],{"class":500},[421,937,939,941,943,945,947,949,951,953],{"class":423,"line":938},13,[421,940,542],{"class":506},[421,942,483],{"class":545},[421,944,514],{"class":506},[421,946,517],{"class":500},[421,948,462],{"class":461},[421,950,576],{"class":431},[421,952,514],{"class":461},[421,954,560],{"class":500},[421,956,958,960,962,964,966],{"class":423,"line":957},14,[421,959,542],{"class":506},[421,961,487],{"class":545},[421,963,514],{"class":506},[421,965,517],{"class":500},[421,967,520],{"class":500},[421,969,971,973,975,977,979,981,984],{"class":423,"line":970},15,[421,972,599],{"class":506},[421,974,603],{"class":602},[421,976,514],{"class":506},[421,978,517],{"class":500},[421,980,462],{"class":461},[421,982,983],{"class":431},"Bearer ${input:configdirector-token}",[421,985,615],{"class":461},[421,987,989],{"class":423,"line":988},16,[421,990,621],{"class":500},[421,992,994],{"class":423,"line":993},17,[421,995,627],{"class":500},[421,997,999],{"class":423,"line":998},18,[421,1000,633],{"class":500},[421,1002,1004],{"class":423,"line":1003},19,[421,1005,639],{"class":500},[174,1007,1008,1009,1012],{},"Run ",[201,1010,1011],{},"MCP: List Servers"," from the command palette to start the server and see its status. The tools appear in the Copilot chat tools picker in agent mode.",[169,1014,1016],{"id":1015},"windsurf","Windsurf",[174,1018,1019,1020,1023,1024,669],{},"Open the MCP settings from the Cascade panel, or edit ",[185,1021,1022],{},"~\u002F.codeium\u002Fwindsurf\u002Fmcp_config.json",". Windsurf expands ",[185,1025,668],{},[178,1027,1030],{"className":491,"code":1028,"filename":1029,"language":493,"meta":187,"style":187},"{\n  \"mcpServers\": {\n    \"configdirector\": {\n      \"serverUrl\": \"https:\u002F\u002Fmcp.configdirector.com\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${env:CONFIGDIRECTOR_TOKEN}\"\n      }\n    }\n  }\n}\n","mcp_config.json",[185,1031,1032,1036,1048,1060,1079,1091,1107,1111,1115,1119],{"__ignoreMap":187},[421,1033,1034],{"class":423,"line":424},[421,1035,501],{"class":500},[421,1037,1038,1040,1042,1044,1046],{"class":423,"line":455},[421,1039,507],{"class":506},[421,1041,511],{"class":510},[421,1043,514],{"class":506},[421,1045,517],{"class":500},[421,1047,520],{"class":500},[421,1049,1050,1052,1054,1056,1058],{"class":423,"line":523},[421,1051,526],{"class":506},[421,1053,530],{"class":529},[421,1055,514],{"class":506},[421,1057,517],{"class":500},[421,1059,520],{"class":500},[421,1061,1062,1064,1067,1069,1071,1073,1075,1077],{"class":423,"line":539},[421,1063,542],{"class":506},[421,1065,1066],{"class":545},"serverUrl",[421,1068,514],{"class":506},[421,1070,517],{"class":500},[421,1072,462],{"class":461},[421,1074,576],{"class":431},[421,1076,514],{"class":461},[421,1078,560],{"class":500},[421,1080,1081,1083,1085,1087,1089],{"class":423,"line":563},[421,1082,542],{"class":506},[421,1084,487],{"class":545},[421,1086,514],{"class":506},[421,1088,517],{"class":500},[421,1090,520],{"class":500},[421,1092,1093,1095,1097,1099,1101,1103,1105],{"class":423,"line":583},[421,1094,599],{"class":506},[421,1096,603],{"class":602},[421,1098,514],{"class":506},[421,1100,517],{"class":500},[421,1102,462],{"class":461},[421,1104,747],{"class":431},[421,1106,615],{"class":461},[421,1108,1109],{"class":423,"line":596},[421,1110,621],{"class":500},[421,1112,1113],{"class":423,"line":618},[421,1114,627],{"class":500},[421,1116,1117],{"class":423,"line":624},[421,1118,633],{"class":500},[421,1120,1121],{"class":423,"line":630},[421,1122,639],{"class":500},[169,1124,1126],{"id":1125},"openai-codex-cli","OpenAI Codex CLI",[174,1128,1129,1130,1133],{},"Add to ",[185,1131,1132],{},"~\u002F.codex\u002Fconfig.toml",". Codex reads the token from the named environment variable at startup:",[178,1135,1139],{"className":1136,"code":1137,"filename":1132,"language":1138,"meta":187,"style":187},"language-toml shiki shiki-themes material-theme-lighter github-light github-dark","[mcp_servers.configdirector]\nurl = \"https:\u002F\u002Fmcp.configdirector.com\"\nbearer_token_env_var = \"CONFIGDIRECTOR_TOKEN\"\n","toml",[185,1140,1141,1156,1170],{"__ignoreMap":187},[421,1142,1143,1146,1149,1151,1153],{"class":423,"line":424},[421,1144,1145],{"class":500},"[",[421,1147,1148],{"class":427},"mcp_servers",[421,1150,203],{"class":471},[421,1152,530],{"class":427},[421,1154,1155],{"class":500},"]\n",[421,1157,1158,1161,1164,1166,1168],{"class":423,"line":455},[421,1159,1160],{"class":471},"url ",[421,1162,1163],{"class":500},"=",[421,1165,462],{"class":461},[421,1167,576],{"class":431},[421,1169,615],{"class":461},[421,1171,1172,1175,1177,1179,1181],{"class":423,"line":523},[421,1173,1174],{"class":471},"bearer_token_env_var ",[421,1176,1163],{"class":500},[421,1178,462],{"class":461},[421,1180,257],{"class":431},[421,1182,615],{"class":461},[174,1184,1008,1185,1188],{},[185,1186,1187],{},"codex mcp list"," to confirm.",[169,1190,1192],{"id":1191},"gemini-cli","Gemini CLI",[174,1194,1129,1195,1198,1199,1202,1203,1206],{},[185,1196,1197],{},"~\u002F.gemini\u002Fsettings.json",", or to the project's ",[185,1200,1201],{},".gemini\u002Fsettings.json",". Gemini CLI expands ",[185,1204,1205],{},"$NAME"," in string values:",[178,1208,1211],{"className":491,"code":1209,"filename":1210,"language":493,"meta":187,"style":187},"{\n  \"mcpServers\": {\n    \"configdirector\": {\n      \"httpUrl\": \"https:\u002F\u002Fmcp.configdirector.com\",\n      \"headers\": {\n        \"Authorization\": \"Bearer $CONFIGDIRECTOR_TOKEN\"\n      }\n    }\n  }\n}\n","settings.json",[185,1212,1213,1217,1229,1241,1260,1272,1289,1293,1297,1301],{"__ignoreMap":187},[421,1214,1215],{"class":423,"line":424},[421,1216,501],{"class":500},[421,1218,1219,1221,1223,1225,1227],{"class":423,"line":455},[421,1220,507],{"class":506},[421,1222,511],{"class":510},[421,1224,514],{"class":506},[421,1226,517],{"class":500},[421,1228,520],{"class":500},[421,1230,1231,1233,1235,1237,1239],{"class":423,"line":523},[421,1232,526],{"class":506},[421,1234,530],{"class":529},[421,1236,514],{"class":506},[421,1238,517],{"class":500},[421,1240,520],{"class":500},[421,1242,1243,1245,1248,1250,1252,1254,1256,1258],{"class":423,"line":539},[421,1244,542],{"class":506},[421,1246,1247],{"class":545},"httpUrl",[421,1249,514],{"class":506},[421,1251,517],{"class":500},[421,1253,462],{"class":461},[421,1255,576],{"class":431},[421,1257,514],{"class":461},[421,1259,560],{"class":500},[421,1261,1262,1264,1266,1268,1270],{"class":423,"line":563},[421,1263,542],{"class":506},[421,1265,487],{"class":545},[421,1267,514],{"class":506},[421,1269,517],{"class":500},[421,1271,520],{"class":500},[421,1273,1274,1276,1278,1280,1282,1284,1287],{"class":423,"line":583},[421,1275,599],{"class":506},[421,1277,603],{"class":602},[421,1279,514],{"class":506},[421,1281,517],{"class":500},[421,1283,462],{"class":461},[421,1285,1286],{"class":431},"Bearer $CONFIGDIRECTOR_TOKEN",[421,1288,615],{"class":461},[421,1290,1291],{"class":423,"line":596},[421,1292,621],{"class":500},[421,1294,1295],{"class":423,"line":618},[421,1296,627],{"class":500},[421,1298,1299],{"class":423,"line":624},[421,1300,633],{"class":500},[421,1302,1303],{"class":423,"line":630},[421,1304,639],{"class":500},[174,1306,1307],{},"Or add it from the command line:",[178,1309,1311],{"className":415,"code":1310,"language":417,"meta":187,"style":187},"gemini mcp add --transport http configdirector https:\u002F\u002Fmcp.configdirector.com \\\n  --header \"Authorization: Bearer ${CONFIGDIRECTOR_TOKEN}\"\n",[185,1312,1313,1332],{"__ignoreMap":187},[421,1314,1315,1318,1320,1322,1324,1326,1328,1330],{"class":423,"line":424},[421,1316,1317],{"class":427},"gemini",[421,1319,432],{"class":431},[421,1321,435],{"class":431},[421,1323,439],{"class":438},[421,1325,442],{"class":431},[421,1327,445],{"class":431},[421,1329,448],{"class":431},[421,1331,452],{"class":451},[421,1333,1334,1336,1338,1340,1342,1344],{"class":423,"line":455},[421,1335,458],{"class":438},[421,1337,462],{"class":461},[421,1339,465],{"class":431},[421,1341,468],{"class":461},[421,1343,257],{"class":471},[421,1345,474],{"class":461},[174,1347,642,1348,1350],{},[185,1349,645],{}," in Gemini CLI to see the server and its tools.",[169,1352,1354],{"id":1353},"claude-desktop-and-other-tools-without-header-support","Claude Desktop and other tools without header support",[174,1356,1357,1358,1363,1364,1367,1368,1371],{},"Claude Desktop's custom connectors expect OAuth sign-in, which the ConfigDirector server does not offer yet. Until then, bridge it with ",[192,1359,1362],{"href":1360,"rel":1361,"target":197},"https:\u002F\u002Fgithub.com\u002Fgeelen\u002Fmcp-remote",[196],"mcp-remote",", which runs locally and forwards to the hosted server with your token. Edit ",[185,1365,1366],{},"claude_desktop_config.json"," (",[201,1369,1370],{},"Settings → Developer → Edit Config","):",[178,1373,1375],{"className":491,"code":1374,"filename":1366,"language":493,"meta":187,"style":187},"{\n  \"mcpServers\": {\n    \"configdirector\": {\n      \"command\": \"npx\",\n      \"args\": [\"mcp-remote\", \"https:\u002F\u002Fmcp.configdirector.com\", \"--header\", \"Authorization:${AUTH_HEADER}\"],\n      \"env\": {\n        \"AUTH_HEADER\": \"Bearer \u003Cyour token>\"\n      }\n    }\n  }\n}\n",[185,1376,1377,1381,1393,1405,1425,1475,1488,1506,1510,1514,1518],{"__ignoreMap":187},[421,1378,1379],{"class":423,"line":424},[421,1380,501],{"class":500},[421,1382,1383,1385,1387,1389,1391],{"class":423,"line":455},[421,1384,507],{"class":506},[421,1386,511],{"class":510},[421,1388,514],{"class":506},[421,1390,517],{"class":500},[421,1392,520],{"class":500},[421,1394,1395,1397,1399,1401,1403],{"class":423,"line":523},[421,1396,526],{"class":506},[421,1398,530],{"class":529},[421,1400,514],{"class":506},[421,1402,517],{"class":500},[421,1404,520],{"class":500},[421,1406,1407,1409,1412,1414,1416,1418,1421,1423],{"class":423,"line":539},[421,1408,542],{"class":506},[421,1410,1411],{"class":545},"command",[421,1413,514],{"class":506},[421,1415,517],{"class":500},[421,1417,462],{"class":461},[421,1419,1420],{"class":431},"npx",[421,1422,514],{"class":461},[421,1424,560],{"class":500},[421,1426,1427,1429,1432,1434,1436,1439,1441,1443,1445,1448,1450,1452,1454,1456,1458,1461,1463,1465,1467,1470,1472],{"class":423,"line":563},[421,1428,542],{"class":506},[421,1430,1431],{"class":545},"args",[421,1433,514],{"class":506},[421,1435,517],{"class":500},[421,1437,1438],{"class":500}," [",[421,1440,514],{"class":461},[421,1442,1362],{"class":431},[421,1444,514],{"class":461},[421,1446,1447],{"class":500},",",[421,1449,462],{"class":461},[421,1451,576],{"class":431},[421,1453,514],{"class":461},[421,1455,1447],{"class":500},[421,1457,462],{"class":461},[421,1459,1460],{"class":431},"--header",[421,1462,514],{"class":461},[421,1464,1447],{"class":500},[421,1466,462],{"class":461},[421,1468,1469],{"class":431},"Authorization:${AUTH_HEADER}",[421,1471,514],{"class":461},[421,1473,1474],{"class":500},"],\n",[421,1476,1477,1479,1482,1484,1486],{"class":423,"line":583},[421,1478,542],{"class":506},[421,1480,1481],{"class":545},"env",[421,1483,514],{"class":506},[421,1485,517],{"class":500},[421,1487,520],{"class":500},[421,1489,1490,1492,1495,1497,1499,1501,1504],{"class":423,"line":596},[421,1491,599],{"class":506},[421,1493,1494],{"class":602},"AUTH_HEADER",[421,1496,514],{"class":506},[421,1498,517],{"class":500},[421,1500,462],{"class":461},[421,1502,1503],{"class":431},"Bearer \u003Cyour token>",[421,1505,615],{"class":461},[421,1507,1508],{"class":423,"line":618},[421,1509,621],{"class":500},[421,1511,1512],{"class":423,"line":624},[421,1513,627],{"class":500},[421,1515,1516],{"class":423,"line":630},[421,1517,633],{"class":500},[421,1519,1520],{"class":423,"line":636},[421,1521,639],{"class":500},[174,1523,1524],{},"The header value goes through an environment variable because some desktop clients split arguments on spaces. The same bridge works for any client that can only launch a local command.",[169,1526,1528],{"id":1527},"limits-and-billing","Limits and billing",[377,1530,1531,1534,1537,1544],{},[215,1532,1533],{},"Each tool call counts as one Admin API request against your plan's monthly allowance. Connecting and listing tools does not.",[215,1535,1536],{},"An organization can make up to 60 tool calls per minute across all of its tokens. If that limit is exceeded, the assistant receives a message asking it to wait until the next minute.",[215,1538,1539,1540,1543],{},"Any update the assistant makes is validated like any other: type constraints, JSON Schema, and the Free plan's hourly ",[192,1541,1542],{"href":32},"JSON Schema budgets"," all apply, and the assistant receives the same messages you would see in the dashboard.",[215,1545,1546,1547,1549],{},"Every update appears in the config's audit log with the source ",[201,1548,154],{}," and the token owner's name.",[169,1551,1553],{"id":1552},"security-notes","Security notes",[377,1555,1556,1564,1567],{},[215,1557,1558,1559,484,1561,1563],{},"Prefer environment variables or your editor's secret storage over tokens written into config files. Project-level files such as ",[185,1560,411],{},[185,1562,660],{}," are usually committed, do not add an API token to them.",[215,1565,1566],{},"Give each tool its own token with the smallest permission set needed. Revoke the token from the API Tokens page when you are no longer using the tool.",[215,1568,1569],{},"The MCP server never returns SDK keys or API tokens.",[1571,1572,1573],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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);}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .swQdS, html code.shiki .swQdS{--shiki-light:#E53935;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":187,"searchDepth":455,"depth":455,"links":1575},[1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587],{"id":171,"depth":455,"text":172},{"id":209,"depth":455,"text":210},{"id":264,"depth":455,"text":265},{"id":396,"depth":455,"text":397},{"id":653,"depth":455,"text":654},{"id":771,"depth":455,"text":772},{"id":1015,"depth":455,"text":1016},{"id":1125,"depth":455,"text":1126},{"id":1191,"depth":455,"text":1192},{"id":1353,"depth":455,"text":1354},{"id":1527,"depth":455,"text":1528},{"id":1552,"depth":455,"text":1553},"Manage projects, configs, and targeting rules from AI coding tools through the Model Context Protocol","md",null,{},{"title":154,"icon":157},{"title":160,"description":1588},"Yx9N38RtCOBvVIXfTskptmdE_Dg4zVZzWWGroo9BFkY",[1596,1590],{"title":149,"path":150,"stem":151,"description":187,"icon":152,"children":-1},1789677021043]