# io.github.andretaki/hazmat-cfr-mcp (npm · hazmat-cfr-mcp)

Complete 49 CFR 172.101 hazmat table lookup with special-provision decoding, cited to eCFR.

- Trust score: 66/100 (medium)
- Change this week: +20
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `hazmat-cfr-mcp`: 66/100 (this document), [markdown](https://verifymcp.io/servers/andretaki-hazmat-cfr-mcp/hazmat-cfr-mcp.md), [page](https://verifymcp.io/servers/andretaki-hazmat-cfr-mcp/hazmat-cfr-mcp)

## Channel facts

- Registry: `npm`
- Package: `hazmat-cfr-mcp`
- Version: `0.3.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 40 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 81/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 918 tokens (~83/item across 11 items; 11 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add andretaki-hazmat-cfr-mcp -- npx -y hazmat-cfr-mcp
```

### Codex

```bash
codex mcp add andretaki-hazmat-cfr-mcp -- npx -y hazmat-cfr-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "andretaki-hazmat-cfr-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "hazmat-cfr-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add andretaki-hazmat-cfr-mcp --command npx --arg -y --arg hazmat-cfr-mcp
```

### Hermes

```yaml
mcp_servers:
  andretaki-hazmat-cfr-mcp:
    command: "npx"
    args: ["-y", "hazmat-cfr-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "andretaki-hazmat-cfr-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "hazmat-cfr-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 66, +45)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 21, −25)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 46, +22)

- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 24, −22)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (11)

### `lookup_hazmat_entry` (~83 tokens)

Lookup Hazmat Entry

Look up a hazardous material by UN/NA number or proper shipping name in the complete 49 CFR 172.101 Hazardous Materials Table (pinned eCFR snapshot). Returns matching entries with decoded symbols and special provisions.

Input parameters:

- `query` (string, required): UN/NA number or proper shipping name, e.g. UN1090 or Acetone.

### `classify_shipping_description` (~57 tokens)

Classify Shipping Description

Parse a basic DOT shipping description into UN/NA number, proper shipping name, hazard class, and packing group.

Input parameters:

- `text` (string, required): Free text such as 'UN1090, Acetone, 3, PG II'.

### `validate_basic_hazmat_description` (~133 tokens)

Validate Basic Hazmat Description

Validate a structured DOT hazmat description against the complete 49 CFR 172.101 Hazardous Materials Table.

Input parameters:

- `hazardClass` (string): Primary hazard class/division, e.g. 3, 5.1, 8.
- `idNumber` (string): UN/NA number, e.g. UN1830.
- `packingGroup` (string): Packing group I, II, III, 1, 2, or 3.
- `properShippingName` (string): Proper shipping name.
- `subsidiaryRisks` (array): Subsidiary hazard classes/divisions.

### `get_label_requirements` (~54 tokens)

Get Label Requirements

Return hazard label codes for a UN/NA number or proper shipping name from the complete 49 CFR 172.101 Hazardous Materials Table.

Input parameters:

- `query` (string, required): UN/NA number or proper shipping name.

### `check_basic_segregation` (~63 tokens)

Check Basic Segregation

Run conservative pairwise segregation warnings for supplied hazard classes using a small encoded subset of 49 CFR 177.848 logic.

Input parameters:

- `hazardClasses` (array, required): Hazard classes/divisions, e.g. ['3', '8', '5.1'].

### `check_limited_quantity_eligibility` (~154 tokens)

Check Limited Quantity Eligibility

Conservative helper for common Class 3/Class 8 limited quantity candidate screening. Does not certify shipment compliance.

Input parameters:

- `hazardClass` (string, required): Primary hazard class/division, currently scoped to Class 3 and Class 8.
- `innerPackageKg` (number): Inner package mass in kilograms; used as an approximate liter-equivalent fallback.
- `innerPackageMl` (number): Inner package liquid volume in milliliters.
- `isCombinationPackaging` (boolean): Whether reviewed packaging is a combination package.
- `outerGrossKg` (number): Gross outer package weight in kilograms.
- `packingGroup` (string): Packing group I, II, III, 1, 2, or 3.

### `get_shipping_requirements` (~86 tokens)

Get Shipping Requirements

One-call summary of what it takes to ship a material: identity, labels, decoded packaging references, special provisions, vessel stowage, and placarding — with citations. Looks up by UN/NA number or proper shipping name.

Input parameters:

- `query` (string, required): UN/NA number or proper shipping name, e.g. UN1830 or 'sulfuric acid'.

### `get_placard` (~58 tokens)

Get Placard

Return the 49 CFR 172.504 placard name and quantity threshold for a hazard class/division.

Input parameters:

- `hazardClass` (string, required): Hazard class or division, e.g. 3, 2.3, 8.

### `decode_special_provision` (~75 tokens)

Decode Special Provision

Decode one or more Column 7 special-provision codes (e.g. IB2, T8, A3, 148) into their 49 CFR 172.102 text.

Input parameters:

- `codes` (array, required): Special-provision codes, e.g. ['IB2', 'T8', 'A3'].

### `decode_packaging_reference` (~101 tokens)

Decode Packaging Reference

Resolve a Column 8A/8B/8C packaging value (e.g. '150', '202', 'None') to the 49 CFR part 173 section it references.

Input parameters:

- `code` (string): The column value, e.g. '150', '202', '242', or 'None'.
- `column` (string, required): Which packaging column: exceptions (8A), nonBulk (8B), bulk (8C).

### `explain_cfr_source` (~54 tokens)

Explain CFR Source

Explain which public CFR source backs a field or rule in this server.

Input parameters:

- `topic` (string, required): A field/rule such as 'proper shipping name', 'label', 'segregation', or 'shipping papers'.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/andretaki-hazmat-cfr-mcp/hazmat-cfr-mcp#diagnostics

## Score history

- 2026-08-03: 66
- 2026-08-02: 66
- 2026-08-01: 21
- 2026-07-31: 21
- 2026-07-30: 46
- 2026-07-28: 24
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/hazmat-cfr-mcp
- Socket report: https://socket.dev/npm/package/hazmat-cfr-mcp
- Repository: https://github.com/andretaki/hazmat-cfr-mcp
- Changelog RSS feed: https://verifymcp.io/servers/andretaki-hazmat-cfr-mcp/hazmat-cfr-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/andretaki-hazmat-cfr-mcp/hazmat-cfr-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/andretaki-hazmat-cfr-mcp/hazmat-cfr-mcp
