{"_id":"@arvoretech/launchdarkly-mcp","_rev":"6-a80bbdb38bb92722d3f3a857c54bc674","name":"@arvoretech/launchdarkly-mcp","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@arvoretech/launchdarkly-mcp","version":"1.0.0","keywords":["mcp","launchdarkly","feature-flags","feature-toggles","llm","ai","arvore"],"author":{"name":"Arvore"},"license":"MIT","_id":"@arvoretech/launchdarkly-mcp@1.0.0","maintainers":[{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"}],"homepage":"https://github.com/arvoreeducacao/arvore-mcp-servers#readme","bugs":{"url":"https://github.com/arvoreeducacao/arvore-mcp-servers/issues"},"bin":{"launchdarkly-mcp":"dist/index.js"},"dist":{"shasum":"005c2ecade19ea921fdadb31c8e7a7472c371e05","tarball":"https://registry.npmjs.org/@arvoretech/launchdarkly-mcp/-/launchdarkly-mcp-1.0.0.tgz","fileCount":29,"integrity":"sha512-1n+XPMgDl6QFfhWfZsvnWQrTEJmREqIsJMnwHoLFftbFWt6Z0i2ky40Z8oc2ahMkz8QzpE31qMsoA+/NqxDkLA==","signatures":[{"sig":"MEQCIGZcNSwqpPCYAeJblzkfGiDBFXnTrnGnOncqUk+8qXzKAiARp24djnYCeEe4uVq4+OoYe6dsDg4y4YDGrzcIbDJhfg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215138},"main":"dist/index.js","type":"module","gitHead":"39aeef5857e4c9db4afa0d3c76bc59fde02fa2c2","scripts":{"dev":"tsx src/index.ts","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","start":"node dist/index.js","lint:fix":"eslint src/**/*.ts --fix","test:cov":"vitest run --coverage"},"_npmUser":{"name":"joao.barros.arvore","email":"joao.barros@arvore.com.br"},"repository":{"url":"git+https://github.com/arvoreeducacao/arvore-mcp-servers.git","type":"git","directory":"packages/launchdarkly"},"_npmVersion":"10.8.2","description":"LaunchDarkly MCP Server for feature flag management via session-based authentication","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.22.4","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/launchdarkly-mcp_1.0.0_1771349628534_0.9275616780840001","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-02-17T17:33:48.458Z","modified":"2026-06-16T21:13:16.798Z","1.0.0":"2026-02-17T17:33:48.683Z"},"bugs":{"url":"https://github.com/arvoreeducacao/arvore-mcp-servers/issues"},"author":{"name":"Arvore"},"license":"MIT","homepage":"https://github.com/arvoreeducacao/arvore-mcp-servers#readme","keywords":["mcp","launchdarkly","feature-flags","feature-toggles","llm","ai","arvore"],"repository":{"url":"git+https://github.com/arvoreeducacao/arvore-mcp-servers.git","type":"git","directory":"packages/launchdarkly"},"description":"LaunchDarkly MCP Server for feature flag management via session-based authentication","maintainers":[{"email":"joao.barros@arvore.com.br","name":"joao.barros.arvore"},{"email":"rafasouza@protonmail.com","name":"rafsouza"},{"email":"pedro.adas@gmail.com","name":"pedro.adas"},{"email":"guilhermebscontact@gmail.com","name":"guilhermebs"},{"email":"ricardorbxx1@gmail.com","name":"ricardoraposorfox"},{"email":"jvgcunha2002@gmail.com","name":"jott4"},{"email":"vitor.piovezan@arvore.com.br","name":"vitor.piovezan"}],"readme":"# LaunchDarkly MCP Server\n\nA Model Context Protocol (MCP) server for managing LaunchDarkly feature flags. Uses session-based authentication (email/password) with direct API calls — no external dependencies beyond the MCP SDK.\n\n## Features\n\n- **Feature Flags**: List, search, create, delete, toggle ON/OFF\n- **Targeting Rules**: Add rules with clauses (in, contains, segmentMatch, etc.)\n- **Segments**: List and inspect segments\n- **Multi-environment**: Operate on any environment (production, test, etc.)\n- **Semantic Patch**: Full support for LaunchDarkly's semantic patch API\n- **Auto re-auth**: Automatically re-authenticates if session expires\n\n## Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `LAUNCHDARKLY_EMAIL` | Yes | — | Account email |\n| `LAUNCHDARKLY_PASSWORD` | Yes | — | Account password |\n| `LAUNCHDARKLY_BASE_URL` | No | `https://app.launchdarkly.com` | LaunchDarkly base URL |\n| `LAUNCHDARKLY_PROJECT` | No | `default` | Default project key |\n| `LAUNCHDARKLY_ENVIRONMENT` | No | `production` | Default environment key |\n\n## Cursor IDE Integration\n\nAdd to `.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"launchdarkly\": {\n      \"command\": \"node\",\n      \"args\": [\"packages/launchdarkly/dist/index.js\"],\n      \"env\": {\n        \"LAUNCHDARKLY_EMAIL\": \"your-email@example.com\",\n        \"LAUNCHDARKLY_PASSWORD\": \"your-password\",\n        \"LAUNCHDARKLY_PROJECT\": \"default\",\n        \"LAUNCHDARKLY_ENVIRONMENT\": \"production\"\n      }\n    }\n  }\n}\n```\n\n## Available MCP Tools\n\n### Flags\n\n| Tool | Description |\n|------|-------------|\n| `list_flags` | List flags with pagination, filtering, and sorting |\n| `get_flag` | Get detailed flag info (variations, rules, targeting) |\n| `search_flags` | Search flags by name or key |\n| `create_flag` | Create a new boolean feature flag |\n| `delete_flag` | Permanently delete a flag |\n| `toggle_flag` | Turn a flag ON or OFF in a specific environment |\n| `get_flag_statuses` | Get evaluation status of specific flags |\n\n### Targeting\n\n| Tool | Description |\n|------|-------------|\n| `add_flag_rule` | Add a targeting rule with clauses and variation |\n| `update_flag_targeting` | Send raw semantic patch instructions (advanced) |\n\n### Segments\n\n| Tool | Description |\n|------|-------------|\n| `list_segments` | List segments in a project/environment |\n| `get_segment` | Get segment details including rules |\n\n### Project\n\n| Tool | Description |\n|------|-------------|\n| `list_projects` | List all projects |\n| `list_environments` | List environments in a project |\n\n## Targeting Rule Operators\n\nThe `add_flag_rule` tool supports these clause operators:\n\n| Operator | Description | Example |\n|----------|-------------|---------|\n| `in` | Exact match | `access_token in [\"TOKEN1\", \"TOKEN2\"]` |\n| `contains` | String contains | `email contains \"@company.com\"` |\n| `startsWith` | String starts with | `name startsWith \"admin\"` |\n| `endsWith` | String ends with | `domain endsWith \".edu\"` |\n| `matches` | Regex match | `key matches \"^test-.*\"` |\n| `lessThan` | Numeric less than | `age lessThan 18` |\n| `greaterThanOrEqual` | Numeric gte | `score greaterThanOrEqual 100` |\n| `segmentMatch` | In segment | `Context in segment \"beta-users\"` |\n\n## Development\n\n```bash\npnpm install\npnpm dev       # Run with tsx\npnpm build     # Compile TypeScript\npnpm lint      # Run ESLint\npnpm test      # Run tests\n```\n\n## Architecture\n\n- **`LaunchDarklyClient`**: Handles login (2-step cookie auth) and API requests\n- **`LaunchDarklyMCPTools`**: Tool implementations and response formatting\n- **`LaunchDarklyMCPServer`**: MCP server with stdio transport and tool registration\n- **Validation**: Zod schemas for all inputs\n- **Auth**: Cookie-based session via `/internal/account/login` + `/internal/account/login2`\n\n## Authentication Flow\n\n1. `POST /internal/account/login` with email + password\n2. `PUT /internal/account/login2` with email\n3. Session cookies (`ldso`, `pa_ldso`, `ob_ldso`) captured and reused\n4. On 401, automatically re-authenticates\n\n## License\n\nMIT\n","readmeFilename":"README.md"}