MCP Dependency Pinning
Supply-chain protection for MCP servers installed via package runners like npx and uvx.
Edison Watch prevents supply-chain attacks by automatically pinning MCP server dependencies on first run.
Purpose
MCP servers installed via package runners (npx, uvx) can be vulnerable to supply-chain attacks if dependencies are updated maliciously. Pinning ensures:
- Reproducible execution: Same exact code runs every time
- Tamper resistance: Lockfiles are stored securely and cannot be modified without admin action
- Version control: Exact package versions are locked, preventing unexpected updates
How It Works
-
First-Run Resolution: When a server using
npxoruvxis first mounted, Edison Watch:- Resolves the full transitive dependency graph
- Generates a lockfile (npm:
package-lock.json, Python:uv.lock) - Stores the lockfile securely in the local database
-
Ephemeral Runtime: On each mount:
- Creates a temporary runtime directory
- Installs dependencies from the stored lockfile (not from package registries)
- Executes the server from the isolated runtime environment
-
Fail-Closed: If pinning fails (network issues, corrupted lockfile), the server will not start. This ensures no unpinned code executes.
Admin Controls
All pinning management is done through the admin dashboard:
- View Status: See pinned package versions and dates in server overview
- Clear Pin: Remove cached lockfile to force re-pinning (useful after package updates)
- Clear All Pins: Bulk operation to clear all server pins
No command-line or environment variable configuration is required-all controls are UI-driven for security and auditability.

