{"id":"bb5d77c1-d494-4038-b06d-b6c111a1db29","slug":"envdiff","kind":"mcp","name":"envdiff","summary":"Diff local vs CI environments: Node, OS, lockfile, and env vars â€” keys named, values never echoed.","owner":"CloudCorpRecords","repoUrl":"https://github.com/CloudCorpRecords/envdiff","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-11-02T11:57:58.000Z","addedAt":"2026-11-02T12:47:55.306Z","logoUrl":"https://avatars.githubusercontent.com/u/95189389?u=8e277e1a24ff84ae7b49c89e6897fa44178a5c34&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["utilities"],"tags":[],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-11-02T12:49:22.734Z","sample":false,"url":"https://conduits.dev/tools/envdiff","language":"TypeScript","transports":["stdio"],"install":{"npm":"@reneturcios/envdiff"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# envdiff\n\n\"It works on my machine\" — which part of the machine? envdiff\ncompares two environment descriptors, typically a developer's\nlocal environment and a CI environment, and reports exactly\nwhere they differ:\n\n- **Node version**, **OS**, and **lockfile presence**, compared\n  as fields (a missing field is reported as `null`)\n- **env vars present on one side only**, by key\n- **env vars whose values differ** — by key name only. Values\n  are compared but **never echoed** into the report, so a\n  descriptor may carry secrets without leaking them.\n\nA descriptor is a small JSON object:\n`{\"node\": \"20.11.0\", \"os\": \"linux\", \"env\": {\"CI\": \"true\"}, \"lockfile_present\": true}`\n— every field optional.\n\nPure local computation: no network, no configuration.\n\n## CLI\n\n```bash\nnpx @reneturcios/envdiff diff local.json ci.json\nnpx @reneturcios/envdiff --version\n```\n\nOutput is the comparison report as JSON, with a\n`summary.total_differences` count. Exit codes: `0` on success\n(differences are a *result*, not an error), `1` on a runtime\nerror (unreadable or invalid descriptor), `2` on a usage error.\n\n## MCP server\n\n```bash\nnpx -y @reneturcios/envdiff mcp\n```\n\nMCP client config:\n\n```json\n{\n  \"mcpServers\": {\n    \"envdiff\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@reneturcios/envdiff\", \"mcp\"]\n    }\n  }\n}\n```\n\n### Tools\n\n- `diff_environments` — Compare two environment descriptors.\n  - `local` (object, required) — the local descriptor\n  - `ci` (object, required) — the CI descriptor\n\n  Each descriptor: `node` (string), `os` (string), `env`\n  (string map), `lockfile_present` (boolean), all optional.\n\n## Docker\n\n```bash\ndocker run -i ghcr.io/cloudcorprecords/envdiff\ndocker run --rm -v \"$PWD:/w\" ghcr.io/cloudcorprecords/envdiff diff /w/local.json /w/ci.json\n```\n\n## Development\n\n```bash\nnpm install\nnpm run build   # tsc -> dist/\nnpm test        # tsx --test test/*.test.ts (pure local, no network)\nnpm run dev     # run the CLI from source\n```\n\n## License\n\nMIT — Copyright (c) 2026 Rene Turcios\n"}