🏥 MedSBOM
Open-source FDA/IEC-62304 compliance layer for medical device SBOMs
Turn raw SBOM scans into FDA-submission-ready documentation in seconds, not weeks.
Quick Start • Examples • API Docs • Contributing • Sponsor
The Problem
Medical device manufacturers must (FDA 2023 guidance, PATCH Act, 2026 QMSR):
- Maintain Software Bills of Materials for every device
- Continuously monitor SOUP components for vulnerabilities
- Document a Secure Product Development Framework
- Produce audit-ready evidence of regular vulnerability review (IEC 62304 §7.1.3)
Today: Teams spend 40–80 hours per device manually translating Syft/Grype/Trivy output into regulatory documents. Paid platforms charge $50K–$200K/year.
With MedSBOM: One command. Audit-ready docs in seconds. Free forever.
What MedSBOM Does
┌─────────────┐ ┌──────────────┐ ┌───────────────────────────┐
│ SBOM Input │ ──▶ │ MedSBOM │ ──▶ │ FDA Premarket Summary │
│ (SPDX/CDX) │ │ Engine │ │ SOUP Risk Assessment │
└─────────────┘ │ │ │ Vulnerability Review Log │
│ • CVE match │ │ Audit Trail │
┌─────────────┐ │ • KEV check │ └───────────────────────────┘
│ NVD + KEV │ ──▶ │ • EOL check │
│ feeds │ │ • Risk score│
└─────────────┘ └──────────────┘
Quick Start
Install
pip install medsbom
Generate your SBOM (if you don't have one)
# Using Syft
syft dir:./my-firmware -o cyclonedx-json > my-device.sbom.json
# Using Trivy
trivy fs --format cyclonedx --output my-device.sbom.json ./my-project/
Run MedSBOM
# Check for vulnerabilities and EOL status
medsbom check my-device.sbom.json --device "Insulin Pump" --device-version "2.3.1"
# Generate FDA compliance documents
medsbom report my-device.sbom.json --format all --output ./compliance-docs/
That's it. You now have:
fda_premarket_summary.md— Maps to FDA 2023 Cybersecurity Guidance structuresoup_risk_assessment.md— IEC 62304 §7.1.3 SOUP register with risk levelsvulnerability_review_log.md— Timestamped audit evidence
Features
| Feature | Description |
|---|---|
| SBOM Ingestion | CycloneDX and SPDX JSON (from Syft, Trivy, or any scanner) |
| CVE Matching | Cross-reference against NVD with local caching |
| CISA KEV | Flag actively exploited vulnerabilities |
| EOL Detection | Check end-of-life status via endoflife.date |
| Risk Scoring | Composite score: CVSS + KEV + EOL proximity |
| FDA Docs | Premarket Cybersecurity Summary template |
| IEC 62304 | SOUP Risk Assessment table |
| Audit Trail | Immutable, append-only log for regulatory evidence |
| REST API | FastAPI server for integration and dashboards |
| Docker | Single container, no external dependencies |
CLI Commands
medsbom ingest <sbom-file> # Parse and validate an SBOM
medsbom check <sbom-file> # Vulnerability + EOL check
medsbom report <sbom-file> # Generate compliance documents
medsbom audit # View audit trail
medsbom version # Show version
API
Start the API server:
uvicorn medsbom.api.main:app --host 0.0.0.0 --port 8000
Endpoints:
GET /health— Health checkPOST /api/v1/scans— Upload SBOM and run analysisGET /api/v1/scans/{id}— Get scan resultsGET /api/v1/scans/{id}/report/{format}— Generate report (fda/soup/vuln)GET /api/v1/audit— Audit trail
Interactive docs at: http://localhost:8000/docs
Docker
# CLI mode
docker run --rm -v $(pwd):/data medsbom check /data/my-sbom.json
# API mode
docker compose -f docker/docker-compose.yml up
Configuration
| Environment Variable | Description | Default |
|---|---|---|
NVD_API_KEY |
NVD API key (recommended — 10x faster) | None |
MEDSBOM_CACHE_DIR |
Local cache directory | ~/.medsbom/cache |
MEDSBOM_AUDIT_DB |
Audit database path | ~/.medsbom/audit.db |
Get a free NVD API key: https://nvd.nist.gov/developers/request-an-api-key
Important Disclaimer
⚠️ REGULATORY NOTICE: MedSBOM generates DRAFT compliance documentation to assist with FDA/IEC-62304 workflows. This tool does NOT constitute legal or regulatory advice. All generated output must be reviewed and approved by a qualified regulatory professional before submission to any regulatory body. MedSBOM contributors accept no liability for regulatory decisions made based on this output.
Project Structure
medsbom/
├── cli/ # Typer CLI
├── core/
│ ├── ingest.py # SBOM parsing (CycloneDX + SPDX)
│ ├── cve_match.py # NVD + KEV vulnerability matching
│ ├── eol_check.py # End-of-life checking
│ ├── risk_score.py # Composite risk scoring
│ ├── doc_generator.py # Jinja2 → Markdown/PDF
│ ├── audit.py # Append-only audit trail
│ └── models.py # Pydantic data models
├── api/ # FastAPI REST API
├── templates/ # Jinja2 regulatory doc templates
├── tests/ # Comprehensive test suite
├── examples/ # Sample SBOMs and usage guides
└── docker/ # Container deployment
Contributing
We welcome contributions! See CONTRIBUTING.md for guidelines.
Especially welcome:
- Regulatory template improvements (FDA, IEC 62304, ISO 14971, EU MDR)
- Additional SBOM format support
- Integration with more scanners
- Translations of templates
Sponsor
MedSBOM is free and open source. If it saves your team time and money, consider supporting development:
- GitHub Sponsors — Monthly or one-time support
- Open Collective — Transparent community funding
- Buy Me a Coffee — Quick one-time tips
For enterprise support contracts or custom template development, open an issue or email the maintainers.
License
Apache License 2.0 — see LICENSE.
Chosen specifically for medical device companies: permissive, includes patent grant, no copyleft concerns for proprietary firmware integration.
Built for the medical device community. Free forever.
If MedSBOM helps your team, star the repo and tell your colleagues.
Metadata
Release files for medsbom 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| medsbom-0.1.0.tar.gz | 57.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| medsbom-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 93.3 kB
Release files / medsbom-0.1.0.tar.gz
| Download URL | medsbom-0.1.0.tar.gz |
|---|---|
| Size | 57.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c2141c45ebae968a948f66d14b24464d9e57824c6ea5e39ddf97e50e23d912fe
|
|
BLAKE2b-256 checksum How to use checksums |
0b5290f8ef4cb6daf1fd82092039fc539d04d20857f81ea469eaaccaee117e96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Release files / medsbom-0.1.0-py3-none-any.whl
| Download URL | medsbom-0.1.0-py3-none-any.whl |
|---|---|
| Size | 36.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1052271aacd17bf6c5f8915eaf21a3b34a5d64f21b6a486e07eaf5a310861e41
|
|
BLAKE2b-256 checksum How to use checksums |
92cf20cfda70a3d8d83afbcdeb0178ece0fc485a5b834f702a5a1916295366e3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.0
|
Security for medsbom 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.