
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
license-sentinel
Advanced tools
MCP server that audits Python and npm dependency licenses for compliance before you ship.
Audit Python and npm dependency licenses for compliance before you ship — an MCP server for AI coding agents.
An AI agent can add pdf-renderer to your project in one second. It will not tell you that
pdf-renderer is AGPL-3.0 and that shipping it inside a closed-source product is a license
violation. License data and compatibility rules are things a model cannot reliably recall —
packages relicense between versions (MongoDB → SSPL, Redis → BUSL, Elasticsearch → Elastic-2.0),
and "the source is on GitHub" does not mean "free to ship".
license-sentinel reads what is actually on your disk and judges it against how you
distribute your product.
CLEAN / REVIEW / BLOCK, each with the reason in plain language.| Tool | What it does |
|---|---|
audit_project(path, context) | Scan a project's dependencies and return counts plus every BLOCKING and REVIEW item with reasons. |
check_package(names, context) | Check specific packages or messy license strings before installing. Accepts AGPL-3.0, BUSL-1.1, GPLv3, Apache License 2.0, MIT OR Apache-2.0. |
generate_notices(path, output) | Write a THIRD-PARTY-NOTICES.md attribution document for client hand-off. |
There is also a pre_release_license_review prompt that chains the audit into a go/no-go review.
# run without installing (recommended)
uvx --from license-sentinel license-sentinel
# or install
uv pip install license-sentinel
# or
pip install license-sentinel
Claude Desktop / Cursor / Windsurf / VS Code Copilot / Zed all read the same shape:
{
"mcpServers": {
"license-sentinel": {
"command": "uvx",
"args": ["--from", "license-sentinel", "license-sentinel"]
}
}
}
If you installed with pip instead, use "command": "license-sentinel" with no args.
Restart the client and the three tools appear.
The same dependency is fine in one context and fatal in another, so every tool takes a
context argument:
| Context | Meaning | What it blocks |
|---|---|---|
proprietary (default) | Closed-source product you distribute | GPL/AGPL/SSPL, BUSL/Elastic, non-commercial |
saas-backend | Never distributed, only runs on your servers | AGPL/SSPL (network trigger), BUSL/Elastic |
permissive | Your own project is MIT/Apache/BSD | Anything copyleft that would contaminate your terms |
copyleft-ok | Your own project is GPL family | Only source-available and non-commercial |
.venv/ / venv/ / env/ installed packages (dist-info/METADATA), requirements.txt, pyproject.toml (PEP 621, poetry, dependency-groups)node_modules/*/package.json (including scoped packages), package.json dependenciesIf a dependency is declared but not installed, it is reported with an UNKNOWN license rather
than silently dropped — an unlicensed dependency is all-rights-reserved by default.
No HTTP client is imported anywhere in this package. The scan is read-only (except
generate_notices, which writes the file you name). Nothing is uploaded.
.venv and no
node_modules, declared-only dependencies come back UNKNOWN.LICENSE_SENTINEL_SCAN_CURRENT_ENV=1 to change that.uv sync
python tests/smoke_test.py # 9 tests, no pytest needed
python tests/e2e_check.py # calls the tools end to end
MIT
FAQs
MCP server that audits Python and npm dependency licenses for compliance before you ship.
We found that license-sentinel demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.