About licensefile
licensefile builds a local dependency license and attribution catalog for repository maintainers. It classifies SPDX licenses, flags conflicts, and reports whether the catalog is blocked.
Key features
- 01Dependency license inventory
- 02License counts and attribution lines
- 03Copyleft and unknown-license flags
- 04Blocked or ok verdict
- 05Local JSON CLI and validation
Use cases
- 01Reviewing dependencies before a repository release
- 02Finding unknown or conflicting dependency licenses
- 03Preparing dependency attribution records
MCP support
The MCP server exposes a `catalog_licenses` tool that accepts a repository license and dependency list, then returns the inventory, flags, attribution lines, and verdict.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
1Saved tool list · updated 1w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| dependencies | array | Yes | Dependencies to catalog (at least one) |
| repo_license | string | Yes | SPDX id of the repository's own license, e.g. MIT |
Details
From the project READMElicensefile
A repository can only ship what its dependencies' licenses allow. licensefile takes the repository's own license and a list of its dependencies, and turns that into a single catalog you can act on:
- Inventory — one entry per dependency, sorted by name,
with the license normalized (trimmed; a missing or empty
license becomes
unknown) and absent version, author, or homepage carried asnull - Counts by license — how many dependencies carry each normalized license, sorted by count descending with ties broken by license name
- Attribution lines — one line per dependency in name
order, shaped
name@version — license — author, where a missing version readsunknownand the author segment is left off entirely when no author was supplied - Flags — at most one per dependency, from the first
matching rule: an unknown license warns; a strong-copyleft
license whose family (
GPLvsAGPL) differs from the repository license's family is an error; a weak-copyleft license in a permissive-licensed repository draws a notice; and a license belonging to none of the known classes, when it is not the repository's own license, is reported as unclassified - Verdict —
blockedwhen any flag is an error, otherwiseok
License classes are the exact, case-sensitive SPDX ids in the spec: a permissive set (MIT, ISC, the BSD clauses, Apache-2.0, and friends), a strong-copyleft set (the GPL and AGPL variants), and a weak-copyleft set (the LGPL variants, MPL-2.0, EPL, EUPL-1.2). Everything is computed locally from the inputs: no network, no configuration, and no license database is consulted. Invalid input — a missing repository license, an empty dependency list, a dependency without a name, a duplicate name, or a wrongly typed field — is rejected with an error naming the offending path, and no partial catalog is produced.
CLI
npx @reneturcios/licensefile catalog --input args.json
npx @reneturcios/licensefile --version
args.json contains the full arguments object:
{
"repo_license": "MIT",
"dependencies": [
{ "name": "alpha", "version": "1.0.0", "license": "MIT", "author": "Ann Example" },
{ "name": "beta", "version": "0.2", "license": "LGPL-2.1-only" },
{ "name": "gamma", "license": "GPL-3.0-only" }
]
}
version, license, author, and homepage are optional
per dependency. The catalog is printed as JSON.
Exit codes: 0 on success, 1 on a runtime error
(including an unreadable or invalid input file, or invalid
input), 2 on a usage error.
MCP server
npx -y @reneturcios/licensefile mcp
MCP client config:
{
"mcpServers": {
"licensefile": {
"command": "npx",
"args": ["-y", "@reneturcios/licensefile", "mcp"]
}
}
}
Tools
-
catalog_licenses— Build a dependency license and attribution inventory for a repository.repo_license(string, required) — SPDX id of the repository's own license, e.g.MITdependencies(array, required, at least one) — dependencies as{name, version?, license?, author?, homepage?}objects;nameis required and must be unique
Returns
{repo_license, dependency_count, inventory, by_license, flags, attribution_lines, verdict}.
Docker
docker run -i ghcr.io/cloudcorprecords/licensefile
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/licensefile catalog --input /w/args.json
Development
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (pure local, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.