Classify7

MCP server

An assistant asked “can I ship this on FedEx” should not answer from memory. The Classify7 MCP server exposes the classification engine as agent-callable tools running entirely locally against the bundled ruleset — no API key, no network call.

Install

Clone the repository and point your client at the server file.

json
{
  "mcpServers": {
    "classify7": {
      "command": "npx",
      "args": ["-y", "tsx", "/path/to/classify7/mcp/server.ts"]
    }
  }
}

Or run it directly: npm run mcp. It speaks JSON-RPC over stdio.

Tools

  • classify_product

    The main tool. Takes a description, a composition list with CAS numbers, SDS text or a UN number to verify, and returns the full determination with evidence, reasoning and citations.

  • lookup_un_number

    Check a UN number someone has already asserted, with or without the prefix. Returns the proper shipping name, class, packing group, labels, air acceptance and shipper notes.

  • check_carrier_eligibility

    What UPS, FedEx, USPS and Amazon FBA accept for a class or a specific UN number, ground and air separately, with the governing publication.

  • classify_lithium_battery

    Resolve PI965 to PI970 and the section, with the marks, labels, documents and aircraft acceptance that follow.

  • get_ruleset_info

    The ruleset version, its content hash, which editions it encodes and how current they are. Call this to state how authoritative an answer is.

What an agent should do with the answer

Every tool description tells the model the same thing this page does: needs_review means the tool declined to decide. Do not fill in a UN number it withheld. Read missingData, ask the user for that one figure, and call again.

json
// classify_product { "description": "nail polish, 15 ml glass bottle" }
{
  "determination": "needs_review",
  "isHazmat": null,
  "unNumber": "UN1263",
  "packingGroup": null,
  "missingData": [{ "field": "flashPointC", "decides": "The Class 3 packing group…" }]
}

A miss on lookup_un_number behaves the same way: it returns found: falseand says “not encoded”, which is not the same as “not a dangerous good”.

Prefer HTTP?

The same engine is behind the JSON API, and the whole ruleset is published at /api/reference if you would rather reason over it directly. There is an llms.txt at the root describing the whole surface, including the thresholds models most often get wrong.

Server version tracks the ruleset: 2026.08.1, hash f31c40d32828554081ce3e567617cd8c. Source at https://classify7.com.