MCP server for realistic license scanning across:
- local repositories (
scan_repo) - Docker images (
scan_image)
The server aggregates multiple evidence sources (SBOM, Trivy, optional ScanCode, package metadata), filters low-signal noise by default, and returns actionable findings for operational decision-making.
- Default focus is application/runtime dependencies.
- OS package noise (
dpkg/rpm/apk) is excluded unlessinclude_os_packages=true. - Findings are categorized and deduplicated with severity and rationale.
- Reports are persisted under
~/.cache/license-mcp/scans/<scan-id>/.
Generated artifacts include:
sbom.spdx.jsonsbom.cyclonedx.jsontrivy-license.jsonscancode.json(optional)python-licenses.jsonnpm-licenses.jsonrpm-licenses.jsondpkg-licenses.jsonapk-licenses.jsonreview_candidates.jsonreview_summary.jsonreview.md
For image scans:
dockerdaemon reachabletar
For repo scans:
syftlocal binary, or Docker (for Syft fallback container)trivylocal binary, or Docker (for Trivy fallback container)- optional:
scancode(local) or ScanCode docker image - optional: local
.venv/.venv-devandnode_modulesfor richer app metadata
Install once globally (pipx):
cd /home/carlo/mcp-license-scanner
pipx install .Alternative if pipx is unavailable (uv):
cd /home/carlo/mcp-license-scanner
uv tool install --force .If reinstalling after updates (pipx):
cd /home/carlo/mcp-license-scanner
pipx reinstall .Add one global MCP server entry in ~/.codex/config.toml:
[mcp_servers.license_scan]
command = "license-mcp"
args = ["serve"]This keeps repository impact minimal or zero, because config is user-level.
Direct CLI use (outside MCP):
license-mcp scan-repo --repo-path /path/to/repo
license-mcp scan-image --image-ref ubuntu:24.04Run MCP server manually:
license-mcp servescan_reposcan_imageget_reportlist_recent_scanshealth