envsync-le-mcp
An MCP server that extracts URLs from
documentation, configuration and code — the extraction engine behind the
EnvSync-LE
editor extension, exposed as a tool an agent can call.
No dependencies, no network calls, no filesystem access. Content goes in,
structured results come out.
Use it
Point any MCP host at npx envsync-le-mcp.
Claude Code
claude mcp add envsync-le -- npx -y envsync-le-mcp
Anything with a JSON config — Cursor, Windsurf, Claude Desktop:
{
"mcpServers": {
"envsync-le": {
"command": "npx",
"args": ["-y", "envsync-le-mcp"]
}
}
}
VS Code and Zed need nothing here. Install the extension instead — it
carries this server and registers it for you:
VS Code Marketplace
· Open VSX
· Zed (no listing yet — add it by hand)
No Node? The same compare_env_files tool ships in a static Rust
binary: cargo install envsync-le, then envsync-le mcp
(crates.io). The two servers answer
identically — one fixture corpus runs against both and CI fails if they
diverge. The binary additionally offers envsync_le_check, which
discovers the dotenv files in a directory; this server reads no files,
which is what lets an agent call it anywhere.
Prefer a global install to npx on every launch:
npm install -g envsync-le-mcp
{
"mcpServers": {
"envsync-le": { "command": "envsync-le-mcp" }
}
}
No environment variables, no API key, no configuration of its own. To check it
before wiring it into anything:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y envsync-le-mcp
If that prints the tool name, the server works.
The tool
compare_env_files
content | string | required. The text to scan. |
format | string | The language: markdown, yaml, json, typescript… Required unless filename is given. |
filename | string | Used to infer format when it is absent — README.md resolves to markdown. |
dedupe | boolean | Collapse repeats. Default false. |
maxResults | number | Default 500, ceiling 5000. |
Returns each URL with its protocol and 1-based line and column, plus
meta.truncated so a capped result is never mistaken for a complete one.
{
"ok": true,
"data": {
"files": [
{ "value": "https://example.com/guide", "protocol": "https", "line": 2, "column": 15 }
]
},
"meta": { "count": 1, "truncated": false }
}
Extraction is heuristic, and what it deliberately does not match is
documented as carefully as what it does — see the
extension README.
Also in the MCP registry
io.github.nolindnaidoo/envsync-le —
registry.modelcontextprotocol.io
Nine more like it
One tool each, same shape: content in, structured data out, no network and no
filesystem. Every one is on npm as <name>-mcp and in the MCP registry as
io.github.nolindnaidoo/<name>.
Every tool in the family, one page: letools.dev
Built by
Nolin Naidoo — Chief Engineer, AI/ML & Platform
Architecture. nolindnaidoo.com ·
GitHub ·
LinkedIn
Also from the same workshop
Twelve Rust tools built the same way: small, single-purpose, and driven by a
machine rather than a person. pixelcoords and pixelactions make up one loop —
pixelcoords answers where, pixelactions acts there. The nine LE crates are
the terminal half of the extensions they sit in: the same detection, held to
the extension's own corpus, and an exit code instead of a results editor.
Licence
MIT © Nolin Naidoo