agentlock
npm audit for your AI agent's extensions. Inventory the MCP servers (and skills)
your project has installed, resolve each to its npm/PyPI package, and flag the
known-vulnerable, abandoned, and unpinned ones — with a CI gate.
You wire up MCP servers with npx -y some-server and uvx some-server and never think
about them again. But they're third-party code with full tool access — and the supply
chain is real: mcp-remote shipped CVE-2025-6514 (CVSS 9.6, OS command injection)
with 437K+ weekly downloads. Generic SBOM scanners don't look at your agent layer. agentlock does.
pipx install mujin-agentlock
agentlock scan # audit this project's MCP servers / skills
agentlock scan --global # also include ~/.claude.json etc.
remote-proxy (mcp-server, .mcp.json)
npm:mcp-remote@0.0.5 · vulnerable [VULNERABLE]
! GHSA-6xpm-ggf7-wc3p (CVE-2025-6514) OS command injection via untrusted MCP server connections
everything (mcp-server, .mcp.json)
npm:@modelcontextprotocol/server-everything · ok [unpinned]
3 extension(s): 1 vulnerable, 0 stale, 1 unpinned
What it checks
For each MCP server it can resolve to a registry package:
- Known vulnerabilities — queried against OSV.dev (free, no key).
- Abandoned / stale — no release in
--stale-days(default 365), via the npm/PyPI registry. - Unpinned — launched with a floating version (
npx -y pkg), so you can't reproduce what runs.
Where it reads extensions from: .mcp.json, .cursor/mcp.json, .vscode/mcp.json,
.claude/settings.json, .claude/skills/, and (--global) ~/.claude.json.
Honest scope
There is no MCP-specific advisory feed yet, so agentlock maps an MCP server to its underlying npm/PyPI package and audits that. It catches dependency CVEs (like the one above) and abandonment — it does not detect MCP-specific tool-poisoning in an otherwise-clean package. Local-path and remote-URL servers have no registry to audit and are listed as skipped. (For content risks in a specific skill/server, pair it with agentaudit.)
CI gate
# .github/workflows/agent-supply-chain.yml
jobs:
agentlock:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: { python-version: "3.11" }
- run: pipx install mujin-agentlock
- run: agentlock scan --fail-on vuln # fail the build on a known-vulnerable extension
--fail-on {vuln,stale,unpinned,none}, --json, --offline (inventory only). Zero dependencies.
Part of a set
- agentaudit — audit an extension's code for risky patterns.
- agentsync — keep agent config files in sync.
- skillbudget — budget always-loaded context tokens.
- mcpdrift — catch MCP server contract drift.
agentaudit audits one extension's code; agentlock audits your whole fleet of installed extensions.
Built by Mujin Labs — tooling for the autonomous-agent era. MIT.
Metadata
Release files for mujin-agentlock 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| mujin_agentlock-0.1.0.tar.gz | 10.4 kB | Without provenance | Details for mujin_agentlock-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| mujin_agentlock-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for mujin_agentlock-0.1.0-py3-none-any.whl |
Total release size: 21.9 kB
Release files / mujin_agentlock-0.1.0.tar.gz
| Download URL | mujin_agentlock-0.1.0.tar.gz |
|---|---|
| Size | 10.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8ca54e0b69d0ddc07212542cf0210be77a9b2d983515722c9d35bd9d9a81f1e4
|
|
BLAKE2b-256 checksum How to use checksums |
65686174c5aae2b652cabbd242da2924b0fa4ce4fcefe1fa0d48251f18b45aa1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.3
|
Release files / mujin_agentlock-0.1.0-py3-none-any.whl
| Download URL | mujin_agentlock-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9e2b7a618565e781215888209839f0100d564fafcab7200922a05b920d0f38e6
|
|
BLAKE2b-256 checksum How to use checksums |
d5a481847a9128f9cd8fb9ac314e835ac330f9b13a0871e07d580d4663861005
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.3
|
Security for mujin-agentlock 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.