After Corelight’s MCP drift report, I went through my own agent configs. Here’s the quick audit.
1. Find the configs
Common spots: Cursor uses ~/.cursor/mcp.json and per-project .cursor/mcp.json. Claude Code uses a project .mcp.json and ~/.claude.json. Other agents have their own; check their docs.
2. Look for launchers that resolve on every start
grep -nE '"(uvx|npx|pipx|bunx)"|@latest' ~/.cursor/mcp.json .cursor/mcp.json .mcp.json ~/.claude.json 2>/dev/null
Any hit means that server can pull new code (or new dependencies) from a public registry next time your agent opens a session, even if you pinned the top-level version.
3. Freeze the ones that hold real credentials
Corelight’s working recipe was: pin to a commit, install once from a hash-pinned lock file, launch the installed binary directly, and turn update checks off. In practice for a Python server:
python3 -m venv ~/mcp/servername
~/mcp/servername/bin/pip install --require-hashes -r requirements.lock
Then point the MCP config’s command at ~/mcp/servername/bin/<server> instead of uvx. See my hash-pinning How-To for generating the lock file.
4. Put re-locking on the calendar
Frozen code ages. Re-lock when the maintainer ships a security fix, review the diff, then reinstall.
God Bless, and Happy hacking!