CMMC 2.0 Level 2 compliance scanner and admin dashboard for web application teams
Project description
cmmc2-toolkit
A self-contained Python package that gives any web application team a CMMC 2.0 Level 2 compliance scanner and admin dashboard — installable via pip, zero infrastructure required.
Features
- 62 controls — all CMMC Level 1 (17), Level 2 practices, and optional Level 3 (24) controls
- Auto-scan for 5 platforms: Flask, Django, FastAPI, Express/Node.js, Spring Boot
- Dashboard — per-project compliance tracker with status, progress, target dates, and audit log
- POA&M — Plan of Action & Milestones view for Gap / Partial / Manual controls
- Excel export — one-click 3-tab workbook (Dashboard, POA&M, Audit Log)
- Audit log — every status change timestamped and attributed to a user
- REST API — agent ingest endpoint for CI/CD pipeline integration
Quickstart
pip install cmmc2-toolkit
cmmc2 serve # launch dashboard at http://localhost:5050
cmmc2 scan --path /path/to/project # run programmatic checks (CLI mode)
cmmc2 export --out poam.xlsx # export POA&M to Excel
On first launch the dashboard creates an admin account automatically (admin / BWIadmin!2026 — change it immediately).
Supported platforms
| Platform | Auto-detected by | Auto-checks |
|---|---|---|
| Flask | flask in requirements / app.py |
25 controls |
| Django | django in requirements / manage.py |
25 controls |
| FastAPI | fastapi in requirements / main.py |
25 controls |
| Express / Next.js | express or next in package.json |
25 controls |
| Spring Boot / WildFly | spring-boot in pom.xml / WEB-INF |
25 controls |
Unsupported platforms fall back to full manual tracking mode.
Dashboard
cmmc2 serve --port 5050
- Create projects by URL or local path
- Run a live scan against a local codebase
- Track status (Pass / Gap / Partial / Manual) per control
- Every status change requires a note — written to the immutable audit log
- Level 3 controls (NIST SP 800-172) are opt-in per project
- Export the full workbook (Dashboard + POA&M + Audit Log tabs) with one click
On Windows, use the included serve.ps1 launcher if cmmc2 is not yet on your PATH.
Architecture
cmmc2toolkit/
├── controls.py # 62 CMMC control definitions (L1 + L2 + L3)
├── models.py # Control, Finding dataclasses
├── cli.py # click CLI (scan | serve | export | init)
├── detector/ # auto-detect platform from project files
├── adapters/ # platform-specific check runners
├── checks/ # atomic grep-based check functions
├── store/ # SQLiteStore + StoreBase ABC
├── auth/ # password hashing, TOTP, session management
├── dashboard/ # Flask micro-app (routes + Jinja2 templates)
└── export.py # openpyxl 3-tab Excel export
Contributing an adapter
- Subclass
AdapterBaseincmmc2toolkit/adapters/adapter_<platform>.py - Implement
check_all() -> list[Finding] - Register it in
adapters/base.py→get_adapter()registry - Add fingerprint rules in
detector/fingerprints.py - Open a PR
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cmmc2_toolkit-0.2.0.tar.gz.
File metadata
- Download URL: cmmc2_toolkit-0.2.0.tar.gz
- Upload date:
- Size: 50.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d0357034a0a90c3ed5e2a4b20a2ccf11cd256b618f65ade6d54a9a2aa5fdd84
|
|
| MD5 |
9d9eb04d2c12bb5c112f26fcd872a61c
|
|
| BLAKE2b-256 |
ba2faecc936f74f8134dea32fcfad2ab56530f7727fb651bfc2e7236e7fcd8e0
|
File details
Details for the file cmmc2_toolkit-0.2.0-py3-none-any.whl.
File metadata
- Download URL: cmmc2_toolkit-0.2.0-py3-none-any.whl
- Upload date:
- Size: 68.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dbb3347e9846fa6abdf9346fe0a12f5b73b9805ebbd4dffe556d05b7eb694773
|
|
| MD5 |
0ba2426eeb44d45377273c44cab5c7c0
|
|
| BLAKE2b-256 |
576aaa0b50bd96e462ec1ad5285a928b4aa60570ca2a72d7fc401bf62ff348e7
|