{"_id":"@dopplerhq/mcp-server","_rev":"5-1f27d070db36ccc053535075f1cd9ca8","name":"@dopplerhq/mcp-server","dist-tags":{"latest":"1.0.5"},"versions":{"0.0.0":{"name":"@dopplerhq/mcp-server","version":"0.0.0","_id":"@dopplerhq/mcp-server@0.0.0","maintainers":[{"name":"dopplerhq-bot","email":"bot@doppler.com"},{"name":"doppler-admin","email":"engineering-admin@doppler.com"}],"dist":{"shasum":"a347e45e3dfd7bab19c0e7b14cbfbde2b7c3704f","tarball":"https://registry.npmjs.org/@dopplerhq/mcp-server/-/mcp-server-0.0.0.tgz","fileCount":1,"integrity":"sha512-UcGznzZZXOLBfRwI8NvF9Ob9m+Bq9x276iszwIid3NWAmUEldj5xFObebqgTroKO9f17ZIQB6cU1WfqUNuNxgQ==","signatures":[{"sig":"MEUCIQDlPwYQ7ZEOT223m92I3UQlrmprVQOXLH8SU5Yj4ZR0wwIgGhTX6BD5zkccujiqC7cig+JriJoNZsQFEuCHTwWnLgs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167},"gitHead":"742c7fdfa0389da9519f0d928c9f0f74d1cf2961","scripts":{},"_npmUser":{"name":"doppler-admin","email":"engineering-admin@doppler.com"},"_npmVersion":"10.4.0","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.6.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.0.0_1761677537875_0.09144638312235887","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@dopplerhq/mcp-server","version":"1.0.3","keywords":["mcp","doppler","secrets","api","openapi","model-context-protocol"],"license":"Apache-2.0","_id":"@dopplerhq/mcp-server@1.0.3","maintainers":[{"name":"dopplerhq-bot","email":"bot@doppler.com"},{"name":"doppler-admin","email":"engineering-admin@doppler.com"}],"homepage":"https://github.com/DopplerHQ/mcp-server#readme","bugs":{"url":"https://github.com/DopplerHQ/mcp-server/issues"},"bin":{"doppler-mcp":"bin/doppler-mcp"},"dist":{"shasum":"ec26582f471b5bd16635fa61b4f275468c0872f9","tarball":"https://registry.npmjs.org/@dopplerhq/mcp-server/-/mcp-server-1.0.3.tgz","fileCount":53,"integrity":"sha512-3udLlAOz9/tG1sID93Aup5DLyHNSTgIZDowxXp5G2DsHcqMfLSxp6IioVaIjbbXL+urkX5a6BkcJu580fOJWLA==","signatures":[{"sig":"MEYCIQDa0XHPwrA0cvNsSS5utLcjlMy31YqIypj0sx8R+NZl1wIhAMkgkBfFgTD0Ud1BbD1OsbBdvdYvI8prMXfIU6CpnNdh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dopplerhq%2fmcp-server@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":307056},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"9f313b901df0824466f6a55f2f2cf78154b22f35","private":false,"scripts":{"dev":"tsx --esm src/index.ts","test":"vitest run","build":"tsc && cp doppler-openapi.json dist/","start":"node dist/index.js","prebuild":"npm run fetch-openapi","test:watch":"vitest","fetch-openapi":"curl -s https://docs.doppler.com/openapi/core.json -o doppler-openapi.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b3bcde1f-525e-4358-9b5b-892c41388468"}},"repository":{"url":"git+https://github.com/DopplerHQ/mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for Doppler API with auto-generated tools from OpenAPI specification","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.22.0","fastmcp":"^3.10.0","@napi-rs/keyring":"^1.1.6"},"publishConfig":{"provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^2.0.0","prettier":"^3.6.2","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.0.3_1771886705815_0.4779904695678676","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@dopplerhq/mcp-server","version":"1.0.4","keywords":["mcp","doppler","secrets","api","openapi","model-context-protocol"],"license":"Apache-2.0","_id":"@dopplerhq/mcp-server@1.0.4","maintainers":[{"name":"dopplerhq-bot","email":"bot@doppler.com"},{"name":"doppler-admin","email":"engineering-admin@doppler.com"}],"homepage":"https://github.com/DopplerHQ/mcp-server#readme","bugs":{"url":"https://github.com/DopplerHQ/mcp-server/issues"},"bin":{"doppler-mcp":"bin/doppler-mcp"},"dist":{"shasum":"20d76a8bbd95a339c85ba350f56505b5a02c1c6d","tarball":"https://registry.npmjs.org/@dopplerhq/mcp-server/-/mcp-server-1.0.4.tgz","fileCount":54,"integrity":"sha512-mgWh0DsKIeFhbEWnzyhSW9bR9qLwazGyjlKmuc/iTqui782ew7t4tLHR+GwzNIbk6xA1CQNS9z84wBavqgiIUw==","signatures":[{"sig":"MEUCIQC/3GSjEda7dOgNFGzW3+voPytWpkBiTV9B6b5bPYiz3AIgSBanwq8CxuH+FECwP2JayJsca9DwcEUfqF7ovc5FGYQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dopplerhq%2fmcp-server@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":476370},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"5876f94686d549c4e02cff0727c64004dc481435","private":false,"scripts":{"dev":"tsx --esm src/index.ts","test":"vitest run","build":"tsc && cp doppler-openapi.json dist/","start":"node dist/index.js","prebuild":"npm run fetch-openapi","test:watch":"vitest","fetch-openapi":"curl -s https://docs.doppler.com/openapi/core.json -o doppler-openapi.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b3bcde1f-525e-4358-9b5b-892c41388468"}},"repository":{"url":"git+https://github.com/DopplerHQ/mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for Doppler API with auto-generated tools from OpenAPI specification","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.22.0","fastmcp":"^3.10.0","@napi-rs/keyring":"^1.1.6"},"publishConfig":{"provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","vitest":"^2.0.0","prettier":"^3.6.2","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.0.4_1771967488425_0.4032926379014723","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@dopplerhq/mcp-server","version":"1.0.5","private":false,"description":"MCP server for Doppler API with auto-generated tools from OpenAPI specification","main":"dist/index.js","type":"module","packageManager":"pnpm@10.33.2","bin":{"doppler-mcp":"bin/doppler-mcp"},"scripts":{"fetch-openapi":"curl -s https://docs.doppler.com/openapi/core.json -o doppler-openapi.json","prebuild":"npm run fetch-openapi","build":"tsc && cp doppler-openapi.json dist/","dev":"tsx src/index.ts","start":"node dist/index.js","test":"vitest run","test:watch":"vitest"},"keywords":["mcp","doppler","secrets","api","openapi","model-context-protocol"],"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/DopplerHQ/mcp-server.git"},"publishConfig":{"provenance":true},"dependencies":{"@napi-rs/keyring":"^1.1.6","fastmcp":"^3.10.0","zod":"^3.22.0"},"devDependencies":{"@types/node":"^20.0.0","prettier":"^3.6.2","tsx":"^4.0.0","typescript":"^6.0.0","vitest":"^4.0.0"},"engines":{"node":">=20.0.0"},"gitHead":"f3b76a93c9b8dce337a46059f3499b7aba8967c1","types":"./dist/index.d.ts","_id":"@dopplerhq/mcp-server@1.0.5","bugs":{"url":"https://github.com/DopplerHQ/mcp-server/issues"},"homepage":"https://github.com/DopplerHQ/mcp-server#readme","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-q0h8w3DWwFJwjNElNMOIqRP2D5jV7vpTbowvLeB9EQJnrJ6VEkDyUAkNfSHupe86xZDUZX2TDsftmJaws1wZAw==","shasum":"8c27dc28887d66718d6f9228e74cd9260fdd2fd2","tarball":"https://registry.npmjs.org/@dopplerhq/mcp-server/-/mcp-server-1.0.5.tgz","fileCount":54,"unpackedSize":486997,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dopplerhq%2fmcp-server@1.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD66NR2gSlRtdUilwWgcnFCGWpXPg2Mno3XGtP7G0L9uQIhAPjfAWTalO29Zf5eC3C4fU+1uYyauEdvK05ytAMO2hQN"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b3bcde1f-525e-4358-9b5b-892c41388468"}},"directories":{},"maintainers":[{"name":"dopplerhq-bot","email":"bot@doppler.com"},{"name":"doppler-admin","email":"engineering-admin@doppler.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-server_1.0.5_1780603857353_0.29835715727315115"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-28T18:52:17.874Z","modified":"2026-06-04T20:10:57.780Z","0.0.0":"2025-10-28T18:52:18.034Z","1.0.3":"2026-02-23T22:45:06.015Z","1.0.4":"2026-02-24T21:11:28.557Z","1.0.5":"2026-06-04T20:10:57.496Z"},"bugs":{"url":"https://github.com/DopplerHQ/mcp-server/issues"},"license":"Apache-2.0","homepage":"https://github.com/DopplerHQ/mcp-server#readme","keywords":["mcp","doppler","secrets","api","openapi","model-context-protocol"],"repository":{"type":"git","url":"git+https://github.com/DopplerHQ/mcp-server.git"},"description":"MCP server for Doppler API with auto-generated tools from OpenAPI specification","maintainers":[{"name":"dopplerhq-bot","email":"bot@doppler.com"},{"name":"doppler-admin","email":"engineering-admin@doppler.com"}],"readme":"# Doppler MCP Server\n\nMCP (Model Context Protocol) server that provides AI assistants with access to the Doppler API for secrets management.\n\n> [!IMPORTANT]\n> The Doppler MCP Server is experimental and intended for development, testing, and evaluation purposes. Because outputs are non-deterministic and vary with the connected model, query, and server configuration, always use a token scoped only to the actions, projects, and environments you intend to allow, and review agentic output for alignment with your security and compliance requirements.\n\n## Quick Start\n\n**1. Authenticate:**\n\n```bash\nnpx @dopplerhq/mcp-server login\n```\n\n**2. Add to your MCP client configuration (e.g., Claude Desktop):**\n\n```json\n{\n  \"mcpServers\": {\n    \"doppler\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dopplerhq/mcp-server\"]\n    }\n  }\n}\n```\n\n### With Service Token\n\nAlternatively, use a service token instead of logging in:\n\n```json\n{\n  \"mcpServers\": {\n    \"doppler\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dopplerhq/mcp-server\"],\n      \"env\": {\n        \"DOPPLER_TOKEN\": \"<your-doppler-token>\"\n      }\n    }\n  }\n}\n```\n\nSee [Service Tokens](https://docs.doppler.com/docs/service-tokens) to create a config-scoped token.\n\n## Commands\n\n```\nlogin              Authenticate with Doppler (interactive)\nlogout             Clear cached auth credentials\n```\n\n## Options\n\n```\n--read-only        Only expose read operations (GET endpoints)\n--project <name>   Override auto-detected project\n--config <name>    Override auto-detected config\n--verbose, -v      Enable verbose logging to stderr\n-h, --help         Show help message\n```\n\n### Examples\n\n**Read-only mode**\n\n```json\n{\n  \"mcpServers\": {\n    \"doppler\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dopplerhq/mcp-server\", \"--read-only\"]\n    }\n  }\n}\n```\n\n**Restrict to a specific project**:\n\n```json\n{\n  \"mcpServers\": {\n    \"doppler\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dopplerhq/mcp-server\", \"--project\", \"my-app\"]\n    }\n  }\n}\n```\n\n**Restrict to a specific config**:\n\n```json\n{\n  \"mcpServers\": {\n    \"doppler\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@dopplerhq/mcp-server\",\n        \"--project\",\n        \"my-app\",\n        \"--config\",\n        \"production\"\n      ]\n    }\n  }\n}\n```\n\n## Implicit Scope Detection\n\nThe server automatically detects scope based on your token's access:\n\n| Token Access                   | Auto-Detected Scope                          |\n| ------------------------------ | -------------------------------------------- |\n| Single project                 | `--project` set automatically                |\n| Single project + single config | `--project` and `--config` set automatically |\n| Multiple projects              | No auto-detection (use CLI flags)            |\n\nThis means **scoped service tokens work out of the box** without any CLI flags:\n\n```json\n{\n  \"mcpServers\": {\n    \"doppler\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dopplerhq/mcp-server\", \"--read-only\"],\n      \"env\": {\n        \"DOPPLER_TOKEN\": \"dp.st.xxx\"\n      }\n    }\n  }\n}\n```\n\nCLI flags always take precedence over auto-detected values.\n\n## Security Best Practices\n\n**Use scoped service tokens, not CLI flags, for access control.** The `--project` and `--config` flags provide a convenient UX layer but are not a substitute for proper token scoping. Always create service tokens with the minimum required permissions:\n\n1. **Scope tokens to specific projects** in the Doppler dashboard\n2. **Use read-only tokens** when write access isn't needed\n3. **Combine read-only tokens with `--read-only`** for defense in depth:\n\n```json\n{\n  \"mcpServers\": {\n    \"doppler\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@dopplerhq/mcp-server\", \"--read-only\"],\n      \"env\": {\n        \"DOPPLER_TOKEN\": \"dp.st.readonly_token\"\n      }\n    }\n  }\n}\n```\n\nNote: The server cannot determine read/write permissions from the token, so if you're using a read-only token, add `--read-only` to only expose read tools. This prevents write tools from appearing in Claude's tool list and avoids failed API calls.\n\n## Available Tools\n\nThe server auto-generates tools from the [Doppler OpenAPI spec](https://docs.doppler.com/reference/api). The tools available depend on your flags:\n\n### No flags (full access)\n\nAll Doppler API tools including:\n\n- **Workplace**: `workplace_get`, `workplace_update`\n- **Users & Groups**: `users_list`, `groups_list`, `service_accounts_list`\n- **Projects**: `projects_list`, `projects_create`, `projects_get`, `projects_delete`\n- **Environments**: `environments_list`, `environments_create`, `environments_get`\n- **Configs**: `configs_list`, `configs_create`, `configs_get`, `configs_update`, `configs_lock`\n- **Secrets**: `secrets_list`, `secrets_get`, `secrets_update`, `secrets_download`\n- **Integrations**: `integrations_list`, `syncs_list`, `webhooks_list`\n\n### With `--read-only`\n\nRead-only tools only (GET operations). Write operations like `_create`, `_update`, `_delete` are not exposed.\n\n### With `--project`\n\nOrg-level tools are filtered out (`workplace_*`, `activity_logs_*`). The `project` parameter is auto-injected into tool calls that accept it.\n\n### With `--config`\n\nOnly config and secret management tools:\n\n- `configs_get`, `configs_update`, `configs_lock`, `configs_unlock`\n- `secrets_list`, `secrets_get`, `secrets_update`, `secrets_download`\n- `config_logs_list`, `config_logs_rollback`\n\nBoth `project` and `config` parameters are auto-injected.\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Run tests\npnpm test\n\n# Build\npnpm run build\n\n# Run locally\nDOPPLER_TOKEN=dp.xxx pnpm start\n```\n\n## Branch and Release Flow\n\nNew work should branch from main and target main in PRs.\n\nTo release, push a tag in the format `vX.X.X` following semantic versioning. This triggers the publish workflow which builds and publishes to NPM.\n","readmeFilename":"README.md"}