mcpField
E
EnvSync-LE

EnvSync-LE

本地服务
letools.dev开发工具1今天更新

关于 EnvSync-LE

EnvSync-LE 比较多个 dotenv 文件中的变量名,并报告缺失或多余的键;它不读取值,也不修改文件。该工具面向 VS Code 系编辑器、终端、CI 和支持 MCP 的 Agent。

主要功能

  1. 01以自动、手动或模板模式比较 dotenv 键
  2. 02监视文件变更并自动检查
  3. 03状态栏问题计数和 Markdown 报告
  4. 04为终端或 CI 提供 CLI 输出及退出码
  5. 05MCP 工具接收文件内容而非路径

适用场景

  1. 01在部署前发现缺失的环境变量键
  2. 02在 CI 中检查 dotenv 文件一致性
  3. 03让 Agent 比较提供的 dotenv 内容而不暴露值

MCP 相关

stdio MCP 服务提供 `compare_env_files`,接收文件内容并返回缺失或多余的键名。它不会读取文件或发起网络请求。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"nolindnaidoo-envsync-le": {
"command": "npx",
"args": [
"-y",
"envsync-le-mcp"
]
}
}
}
启动命令npx -y envsync-le-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmenvsync-le-mcp2.5.0

工具

1

收录的工具列表 · 更新于 3 天前

参数类型必填说明
modeenum否"auto" 会与所有键的并集进行比较;"template" 会与一个文件进行比较。auto | template
filesarray是要比较的 dotenv 文件。
maxResultsinteger否返回的键不匹配项上限(默认 500)。meta.truncated 报告是否有结果被省略。
templatePathstring否指定哪个文件是模板。mode 为 "template" 时必填。
caseSensitiveboolean否比较键名时是否区分大小写。

详细介绍

EnvSync-LE 徽标

EnvSync-LE:轻松同步 .env

在 .env 文件中找出缺失的键,避免问题发生
自动检查、状态栏计数器,以及简洁的 Markdown 报告

从 VS Code Marketplace 安装 Open VSX 下载量 npm 上的 envsync-le-mcp npm 上的 envsync-le crates.io 上的 envsync-le LE Tools


VS Code 中的 EnvSync-LE

觉得有用? 点赞或评分能帮助其他开发者发现它 — ★ GitHub · ★ Open VSX · ★ Marketplace

功能介绍

EnvSync-LE 会比较工作区中 .env 文件的变量名,并指出哪些文件缺少哪些键。它绝不会读取或比较变量值,也不会修改你的文件。支持 VS Code 及基于 VS Code 的编辑器,例如 Cursor 和 VSCodium(可从 Open VSX 安装)。

  • 自动检查 — 每当受监视的 .env 文件发生变化,都会运行防抖同步检查
  • 状态栏计数器 — 显示当前问题数量,单击即可查看完整报告
  • Markdown 报告 — Show Details 会列出每个文件缺少的所有键
  • 三种比较模式 — auto(所有键的并集)、manual(仅比较你列出的文件)、template(根据一个参考文件验证所有内容;也会报告文件中存在但模板中缺少的键)
  • 忽略列表 — 暂时排除文件(例如 .env.example),不对其进行检查

安装

位置可获得的功能安装方式
VS Code在编辑器中实时进行相同的比较Marketplace
Cursor、VSCodium、Windsurf相同的扩展Open VSX
终端或 CI 步骤对整个目录树执行相同的检查,并返回退出代码npx envsync-le · npm 或 cargo install envsync-le · crates.io
任何 MCP Agent,通过 Node通过标准输入输出调用 compare_env_filesnpx envsync-le-mcp · npm

在 AI Agent 中使用

同一引擎也可作为 MCP 服务运行,因此 Agent 可以直接调用它,而不必由你运行命令。

编辑器方法
VS Code 1.101+无需安装 — 扩展会在 Agent 模式下注册 compare_env_files
Claude Codeclaude mcp add envsync-le -- npx -y envsync-le-mcp
Cursor、Windsurf 及其他工具将其指向 npx envsync-le-mcp

Claude Code 中的 Agent 调用 envsync-le MCP 服务

compare_env_files(files[], mode?, templatePath?, caseSensitive?, maxResults?)

直接接收文件内容,并报告哪些文件缺少哪些键。只返回键名,绝不返回值 — dotenv 文件存放着凭据,而回答并不需要这些值。

该服务接收内容并返回数据 — 不会读取任何文件,也不会自行发出网络请求。它以 envsync-le-mcp 的名称发布在 npm 上,并以 io.github.nolindnaidoo/envsync-le 的名称发布在 MCP 注册表中。

手动配置 — 适用于任何带 MCP 配置文件的宿主

大多数宿主会读取 JSON 配置。添加一个条目:

{
  "mcpServers": {
    "envsync-le": {
      "command": "npx",
      "args": ["-y", "envsync-le-mcp"]
    }
  }
}

-y 会跳过首次运行时的安装提示。如果不想跟踪版本更新,可以固定版本 — [email protected]。

不想每次启动都通过 npx 运行?可以安装一次,然后指向二进制文件:

npm install -g envsync-le-mcp
{
  "mcpServers": {
    "envsync-le": { "command": "envsync-le-mcp" }
  }
}

它通过 stdio 使用 MCP,无需环境变量、API 密钥,也无需自行配置。将其接入任何工具前,可以先检查:

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y envsync-le-mcp

这会打印工具列表并退出 — 如果看到 compare_env_files,就说明服务运行正常。

文件分类

文件名类型
.env基础
.env.local、.env.*.local本地覆盖
.env.example、.env.template模板
.env.production、.env.prod生产环境
.env.development、.env.dev开发环境
.env.test测试
anything.env、未知片段基础

分类依据基名中的片段 — app.device.env 不属于 “开发环境”,且 Windows 路径也能正确分类。

命令行工具

同一比较功能也可在终端或 CI 步骤中运行:Rust 命令行工具位于 crate/,与扩展共享一个样本集 — crate/fixtures/ — 因此两者读取 dotenv 文件的方式 绝不会不同。 可以通过 npm 安装:npm install -g envsync-le(或使用 npx envsync-le 运行);也可以通过 crates.io 使用 cargo install envsync-le 安装。两种方式 安装的是同一条命令,输出也逐字节保持一致。

envsync-le .                            # have these environments drifted? JSON on stdout when piped
envsync-le --template .env.example .    # will this deploy break?
envsync-le mcp                          # the same comparison over MCP on stdio

终端中的 envsync-le

可从 npm (envsync-le) 或 crates.io 安装 (envsync-le)。两种方式安装的都是同一个 envsync-le 命令。

npm 上的 envsync-le crates.io 上的 envsync-le

npm install -g envsync-le   # or run it once: npx envsync-le
cargo install envsync-le
.env: missing STRIPE_KEY, SENTRY_DSN (in .env.example)
.env.production: missing SENTRY_DSN (in .env.example)
out of sync — 2 files with mismatches across 3 files

退出代码就是结果 — 同步时为 0,不同步时为 1,问题格式错误时为 2。 完全找不到 dotenv 文件时返回 0:没有任何文件可与之不同步。与此系列中的提取工具不同,它没有列表可供 继续传递;这个数字就是答案。

它绝不读取任何值。 只会解析、比较或 报告键名,并通过三项独立检查来确保这一点,而非仅作承诺。

命令

命令描述
EnvSync-LE: Show Details运行同步检查并打开 Markdown 报告
EnvSync-LE: Compare Files比较两个或更多所选 .env 文件的键集合
EnvSync-LE: Set Template将 .env 文件设为参考模板
EnvSync-LE: Clear Template恢复自动比较
EnvSync-LE: Ignore File将 .env 文件排除在同步检查之外
EnvSync-LE: Unignore File重新纳入之前忽略的文件
EnvSync-LE: Clear Ignored Files清空忽略列表
EnvSync-LE: Open Settings打开筛选为 EnvSync-LE 设置的 VS Code 设置
EnvSync-LE: Help & Troubleshooting内置文档

默认情况下,没有命令绑定快捷键。可在编辑器的 键盘快捷方式 中为任意命令绑定快捷键。

设置

设置默认值描述
envsync-le.enabledtrue同步检查总开关
envsync-le.watchPatterns[".env*"]要监视和比较的文件的 Glob 模式
envsync-le.excludePatterns[]要排除的 Glob 模式;不含 / 的模式匹配基本文件名(因此 .env.*.local 也会排除嵌套文件)
envsync-le.notificationLevelimportantall = 缺失键 + 额外键,important = 缺失键 + 错误,silent = 不显示任何内容
envsync-le.statusBar.enabledtrue显示状态栏项(立即生效)
envsync-le.debounceMs1000文件更改后到运行同步检查的延迟时间
envsync-le.caseSensitivetrue将 DB_URL 和 db_url 视为不同的键
envsync-le.comparisonModeautoauto、manual 或 template
envsync-le.compareOnlyFiles[]在手动模式下,只比较这些文件(相对于工作区的路径)
envsync-le.templateFile—模板模式的参考文件(通过 Set Template 设置)
envsync-le.temporaryIgnore[]当前忽略的文件(由忽略命令管理)
envsync-le.telemetryEnabledfalse仅本地的事件日志(参见“隐私”)

解析说明

  • 键必须匹配 [A-Za-z_][A-Za-z0-9_.-]*,因此 spring.datasource.url 这类带点的名称也有效;= 左侧的任何其他内容都会被报告为该行的解析错误(文件其余部分仍会计入)。
  • 接受 export KEY=value;重复的键只计一次。
  • 用 "、' 或 ` 引起来的值可以跨越多行;未闭合的引号会被报告为错误。
  • 在 auto 模式下,参考键集合是所有键的并集,因此只有在 template 模式下才会出现“额外键”。

语言

除英语外,还有十二种语言:

德语 · 西班牙语 · 法语 · 印度尼西亚语 · 意大利语 · 日语 · 韩语 · 葡萄牙语(巴西)· 俄语 · 乌克兰语 · 越南语 · 简体中文

两个部分都已翻译:清单(命令标题、设置名称和描述),以及扩展运行时显示的所有内容(通知、状态栏、快速选择和提示词,以及报告标题)。帮助页面以英语编写。扩展会遵循 VS Code 的显示语言,因此会与编辑器当前设置的语言一致;扩展本身没有单独的语言设置。

隐私与安全

  • 不访问网络。 此扩展绝不会向任何地方发送数据。telemetryEnabled 设置只会将事件写入本地输出通道,供你查看(envsync-le)。
  • 绝不会读取、显示或记录值——只比较键名。
  • MCP 服务只返回键名,绝不返回值。 凭证存放在 dotenv 文件中,因此服务只报告缺少或多余的键,不会透露其内容。它将文件内容作为参数,而非路径,因此不会读取任何文件,也不会发起网络调用;打包门禁会断言响应中不含已知值。
  • 错误通知会对主目录和类似凭证的片段进行脱敏。
  • 评分提示最多出现两次。 第 3 次成功使用时,扩展会询问你是否愿意评分;如果你选择了 稍后 或将其关闭,则会在第 20 次使用时再询问一次。选择 不再询问 后便不会再提示。你自行将 notificationLevel 设置为 important 或 silent,也会关闭此提示。计数保存在 VS Code 的扩展存储中,不会向任何地方发送数据;点击 评分 会在浏览器中打开你安装时使用的发布平台页面——VS Code Marketplace 或 Open VSX。

文档

内容位置
此工具可以说什么——范围、输出约定、拒绝事项、非目标crate/SPEC.md
扩展的构建与内部机制——架构、不变量、工具链、发布AGENTS.md
CLI 的构建与内部机制crate/AGENTS.md
变更内容CHANGELOG.md · crate/CHANGELOG.md
此工具的页面及其他 15 个工具letools.dev/tools/envsync-le

性能

输入大小找到耗时速率扫描速度
4 个文件 x 500 个键0.02 MB1,9100.29 ms6,690,018/秒63.2 MB/s
24 个文件 x 500 个键0.11 MB11,1031.11 ms9,994,077/秒94.5 MB/s
4 个文件 x 8,000 个键0.32 MB31,1722.04 ms15,279,763/秒158.4 MB/s

预热后运行 7 次取中位数,测试环境为 Apple M5 Pro、24 GB RAM、Node 24.3.0。输入由 scripts/benchmark.ts 生成,而非签入仓库,因此上述大小与实际测量值完全一致。运行 bun run benchmark 可复现。

这些数据因机器而异,不会在 CI 中断言——会阻止构建的基准测试,只能说明运行器当时有多忙。

测试

指标覆盖率
语句90.09%
分支83.89%
函数91.86%
行91.51%

28 个文件中共有 353 个测试用例,此外还有一个在真实 VS Code 扩展宿主中运行的集成测试套件,以及一个将构建好的 .vsix 安装到全新配置文件中的端到端测试。

数据由 scripts/coverage-readme.js 根据真实运行生成——文件为 coverage/coverage-summary.json 和 coverage/test-results.json;如果此部分内容有偏差,CI 会失败。运行 bun run test:coverage 可复现,用例数以 vitest 打印的结果为准。

LE 系列的更多工具

为每个模型眼前的工作打造的 16 款单一用途工具。每款都附带一个 Rust CLI 和一个 MCP 服务。一页尽览:letools.dev

提取

  • String-LE — 提取代码库中的所有字符串,方便人工阅读
  • Numbers-LE — 提取代码库中所有硬编码数字,方便人工检查
  • Units-LE — 提取所有带单位的数量并统一格式,遇到含义不明确的数量时会按名称拒绝处理
  • Dates-LE — 提取所有日期和时间戳,并给出每个日期和时间戳解析出的确切时刻
  • IDs-LE — 提取所有 UUID、ULID、NanoID、ObjectId 和 Snowflake,并解码其中的时间
  • IPs-LE — 提取所有 IP 地址、CIDR 网段和 MAC 地址,统一格式并按范围分类
  • URLs-LE — 提取代码库中的所有 URL,并给出协议和确切位置
  • Paths-LE — 提取代码库中的所有文件路径,并说明它们是否仍指向实际内容
  • Colors-LE — 提取代码库中的所有颜色,并指出哪些颜色不在你的调色板中

检查

  • Regex-LE — 查找代码库中的所有正则表达式,并报告哪些可能导致灾难性回溯
  • Versions-LE — 查找某个依赖项在仓库的各个清单文件中受到不同约束的位置
  • i18n-LE — 识别项目使用的 i18n 库,然后依据该库的规则审查其目录
  • Scrape-LE — 在编写抓取器之前检查网页能否抓取,并说明何时无法判断

防护

  • Secrets-LE — 查找代码库中的硬编码凭据,绝不在报告中打印凭据
  • EnvSync-LE — 比较目录树中的 dotenv 文件,并指出哪些文件缺少哪些键
  • Unicode-LE — 查找那些隐藏含义的 Unicode 字符——双向控制字符、不可见字符、同形异义字符、混合文字系统

每款工具都独立运行:没有共享的 crate,也没有发布的核心库。若有两款工具得出相同结论,那是因为这个答案经得起两次验证。

联系 — nolindnaidoo.com · GitHub · LinkedIn

nolindnaidoo 的其他项目

Rust — pixelcoords 和 pixelactions 构成一个工作循环:pixelcoords 回答 位置,pixelactions 在那里执行操作。它们有各自的工具、各自的风格——不属于 LE 系列。

许可证

MIT © nolindnaidoo

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。