Appearance
Why It Matters
Committed MCP configs are executable setup, not just prose. Launching a server through npx, uvx, pnpm dlx, yarn dlx, or pipx run makes that execution path depend on mutable package resolution instead of a vendored, pinned, or otherwise reproducible command.
What Triggers
SEC329 applies to committed MCP configuration JSON and triggers when command/args analysis finds a mutable package-runner launcher such as:
npxuvxpnpm dlxyarn dlxpipx run
Examples that trigger:
json
{"command":"npx","args":["@cloudbase/cloudbase-mcp@latest"]}json
{"command":"uvx","args":["demo-mcp"]}Examples that stay clean:
json
{"command":"./scripts/run-mcp.sh","args":[]}json
{"command":"node","args":["./vendor/mcp-server/index.js"]}False Positives
False positives should be low because the detector is structural and gated on parsed MCP config. The practical tradeoff is not “did the pattern exist”, but whether a team intentionally accepts mutable launcher convenience in committed config. The rule stays useful because it points at real execution posture, not generic documentation advice.
Remediation
Replace the mutable launcher with a vendored script, a pinned local binary path, or another reproducible execution path that does not resolve packages dynamically at runtime.