LicenseGuard
rcc-aoki/license-guardDecides whether an open source dependency's license **actually obligates you** — given how your project ships. Generic license scanners answer a different question ("what license is this?") and then warn on everything. LicenseGuard evaluates the license against your distribution model, so the same license produces different verdicts: | How you ship | AGPL-3.0 dependency | |---|---| | SaaS (network-accessible) | **blocked** — §13 network clause | | Internal use only | allowed | | Distributed binary / on-prem | **blocked** — inherited GPL distribution terms | | **devDependency** (never in the artifact) | **allowed** | That last row is the point. A build-time linter under AGPL never ships, so it triggers nothing — but tools that warn on it anyway train people to ignore every warning they produce. The same distinctions run through the rest of the license landscape, and they are not interchangeable: - **GPL** obligations attach to *distribution*. Running GPL code as a network service is not distribution. - **AGPL** adds §13, which attaches to *network interaction* — a separate trigger from GPL's distribution terms. - **MPL / EPL / CDDL** are file-scoped and linkage-independent. MPL-2.0 §3.3 explicitly permits distributing a Larger Work under your own terms. - **LGPL** is the one that actually depends on linkage: static linking carries a relinking obligation, dynamic linking does not. ## Tools | Tool | When to call it | |---|---| | `check_dependency_license` | Before adding a single dependency | | `check_manifest_licenses` | To audit a whole manifest or lockfile | | `explain_license` | To see what a license requires across every distribution model | ## Coverage **npm · PyPI · Go modules · crates.io** Reads `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `requirements.txt`, `pyproject.toml`, `poetry.lock`, `uv.lock`, `go.mod`, `go.sum`, `Cargo.toml`, `Cargo.lock` — so transitive dependencies are covered, which matters because problem licenses usually arrive as a dependency of a dependency rather than one you added on purpose. Dependencies that cannot be resolved are reported as `not-checked` or `review`, never as `allowed`. An incomplete scan is never presented as clean. ## Run it locally instead No auth on the hosted endpoint. If you would rather not send a lockfile to a third-party service, the same policy engine runs on your machine: ``` docker run -i --rm ghcr.io/rccaoki-wq/license-guard ``` Only package names and versions reach public registries. An end-to-end test pins the hosted and local paths together so they cannot disagree. ## Disclaimer Informational only, based on published license texts and declared dependency metadata. Not legal advice, and it does not claim to identify every obligation.
Score: 100/100
Handshake verified by our own probe.
Tools · 3
Determine whether adding or keeping a single open source dependency creates a legal obligation, given how this project ships. Call this BEFORE adding a new dependency to a project, and when auditing a…
Scan an entire dependency manifest and report every dependency whose license creates an obligation for this shipping model. Use when reviewing a project as a whole, preparing for due diligence, or aft…
Given an SPDX license identifier or expression, explain what it requires across every shipping model at once. Use when the question is about the license itself rather than a specific package — for exa…
Resources · 20
What MIT requires, and the verdict for each way of shipping software.
licenseguard://license/MIT
What Apache-2.0 requires, and the verdict for each way of shipping software.
licenseguard://license/Apache-2.0
What BSD-3-Clause requires, and the verdict for each way of shipping software.
licenseguard://license/BSD-3-Clause
What BSD-2-Clause requires, and the verdict for each way of shipping software.
licenseguard://license/BSD-2-Clause
What ISC requires, and the verdict for each way of shipping software.
licenseguard://license/ISC
What GPL-2.0-only requires, and the verdict for each way of shipping software.
licenseguard://license/GPL-2.0-only
What GPL-3.0-only requires, and the verdict for each way of shipping software.
licenseguard://license/GPL-3.0-only
What LGPL-2.1-only requires, and the verdict for each way of shipping software.
licenseguard://license/LGPL-2.1-only
What LGPL-3.0-only requires, and the verdict for each way of shipping software.
licenseguard://license/LGPL-3.0-only
What AGPL-3.0-only requires, and the verdict for each way of shipping software.
licenseguard://license/AGPL-3.0-only
What MPL-2.0 requires, and the verdict for each way of shipping software.
licenseguard://license/MPL-2.0
What EPL-2.0 requires, and the verdict for each way of shipping software.
licenseguard://license/EPL-2.0
What SSPL-1.0 requires, and the verdict for each way of shipping software.
licenseguard://license/SSPL-1.0
What BUSL-1.1 requires, and the verdict for each way of shipping software.
licenseguard://license/BUSL-1.1
What Elastic-2.0 requires, and the verdict for each way of shipping software.
licenseguard://license/Elastic-2.0
What CC0-1.0 requires, and the verdict for each way of shipping software.
licenseguard://license/CC0-1.0
What Unlicense requires, and the verdict for each way of shipping software.
licenseguard://license/Unlicense
What Zlib requires, and the verdict for each way of shipping software.
licenseguard://license/Zlib
What CC-BY-4.0 requires, and the verdict for each way of shipping software.
licenseguard://license/CC-BY-4.0
What CC-BY-NC-4.0 requires, and the verdict for each way of shipping software.
licenseguard://license/CC-BY-NC-4.0
Prompts · 2
Find this project's dependency manifest and check every dependency, including transitive ones, against the way the project ships.
Explain how two licenses differ for one specific way of shipping software, rather than in the abstract.
How to use
Claude Desktop or claude.ai: add a custom connector (Customize → Connectors; on Team and Enterprise plans an owner adds it under Organization settings → Connectors) with this server URL: https://licenseguard.tenchorooms.com/mcp
Cursor or Cline: add to your MCP config:
{
"mcpServers": {
"licenseguard": {
"url": "https://licenseguard.tenchorooms.com/mcp",
"transport": "http"
}
}
}