Odel
FIPS 140 certificate tracker

FIPS 140 certificate tracker

@808bitsTypeScriptMITUpdated 3 days ago

Every NIST FIPS 140 certificate, plus the modules-in-process queue NIST publishes only as a page.

Server endpointStreamable HTTPNo authProbed

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

fips-mcp

An MCP server over the NIST CMVP data behind 808bits.com/fips: every FIPS 140 cryptographic module validation, plus the queue of submissions still awaiting one.

Read-only, no authentication.

https://fips.808bits.com/mcp
claude mcp add --transport http fips https://fips.808bits.com/mcp

The endpoint speaks POST, as the transport requires. Opening either the hostname or the endpoint in a browser redirects to the tracker. A client's GET /mcp still gets 405, which is what a stateless server owes a request to open an SSE stream, and GET / and GET /health return a JSON descriptor with the data generation dates for anything checking liveness.

Tools

ToolAnswers
fips_certStatus, level, sunset date and validation history for one certificate number.
fips_searchDoes this vendor or product hold a current validation, and at what level.
fips_vendorEverything one company holds, across the spelling variants NIST filed it under.
fips_cveWhich validated modules are associated with a CVE, and which CVEs touch a vendor's.
fips_in_processHas the vendor's replacement actually been submitted, and what phase is it in.
fips_sunsetWhat expires before a given date, and which vendors are about to have nothing valid.

fips_in_process is the one with no equivalent elsewhere. NIST publishes the Modules in Process list as a web page, not as an API, and "it is on MIP" is the milestone people reach for when a validation has lapsed and the replacement has not landed.

Reading the data without getting it wrong

A submission in the queue is a milestone, not a date. 181 modules are in process and the phase dates run back more than a year, so plenty have sat in one phase for longer than that. "It is on MIP" says review started.

An absence from the queue can mean the successor already landed. Ribbon's SBC 5400 sunsets on 2026-09-06 and has held a 140-3 certificate since 2025. Check fips_search for the module name before reporting a gap.

Vendor names are free text at NIST. Cisco holds certificates under three spellings, Thales under two. vendor_key groups the variants of one registration and vendor_display is the spelling NIST used most often. Neither merges corporate families: the nShield line ran nCipher Corporation to Thales to Entrust, so folding those together would credit certificates to a company that sold the product years ago.

112 certificates have no module name or vendor, because NIST published none. Those come back as null with a note rather than as empty strings.

CVE associations are name-based, not boundary-based. They come from matching the vendor and product CPE, so a listed CVE may sit in code the certificate never covered, and a real flaw inside the boundary may not appear at all. 183 associations across 16 certificates.

An empty CVE result is not a clean bill of health, and this is the more misleading direction. Only 16 of 5,504 certificates carry any association, the match does not follow dependencies, and it needs a stable CPE string, so hardware modules come back empty largely regardless of their advisory history. fips_cve for CVE-2014-0160 returns nothing. Every empty result says so, and reports how many certificates carry any association at all, so the number is in front of the caller rather than in this file.

Sunset dates are not uniform. Most active 140-2 certificates move to the historical list on 2026-09-21, but six carry earlier dates of their own.

Where the data comes from

Everything is derived from NIST's published CMVP lists: the validated modules, the historical and revoked lists, and the Modules in Process queue. The server does not scrape NIST on demand. A separate pipeline snapshots the lists, diffs them against the previous snapshot and loads the result, so answers reflect the last refresh rather than this minute. Every response carries the generation date, and GET / reports it too.

This repository holds the server. The dataset it serves is built elsewhere and is not checked in, so a clone will typecheck and deploy but will not have rows to answer with.

Licence

MIT. The certificate data itself is published by NIST and is not covered by it.