CDL endorsement prerequisites and testing sequence
Getting a CDL endorsement is a sequence, not a single application: which test type is required (knowledge-only vs. knowledge plus skills), whether the endorsement can be added at the commercial-learner's-permit (CLP) stage or only after a full CDL, and — for the hazardous materials endorsement specifically — a separate federal TSA security threat assessment that gates issuance independent of the state testing process, with its own renewal clock. Each record is one endorsement type, carrying the required test, its CLP eligibility, what the permit actually lets you drive once you have it, and any federal prerequisite beyond state testing. Being allowed an endorsement on a CLP is not the same as being allowed to do the work: a learner's permit tanker endorsement covers an empty tank only, and a permit passenger or school bus endorsement carries no passengers but examiners and trainees. Answers 'can I get my tanker endorsement on a learner's permit', 'can I haul a load on it', 'do I need a background check for a hazmat endorsement', 'how often does the TSA hazmat clearance have to be renewed'.
The data
| Endorsement | Test required | Allowed on a CLP (learner's permit) |
|---|---|---|
| Double/Triple Trailers | a knowledge test | No — a CLP may carry only the Passenger, School bus and Tank vehicle endorsements, and this is not one of them |
| Hazardous Materials | a knowledge test | No — a CLP may carry only the Passenger, School bus and Tank vehicle endorsements, and this is not one of them |
| Passenger | a knowledge and a skills test | Yes — 383.93(a)(2) names this among the only endorsements allowed on a commercial learner's permit |
| School bus | a knowledge and a skills test | Yes — 383.93(a)(2) names this among the only endorsements allowed on a commercial learner's permit |
| Tank vehicle | a knowledge test | Yes — 383.93(a)(2) names this among the only endorsements allowed on a commercial learner's permit |
Where this came from
Every record above links the page it was taken from and quotes the sentence that states it. These are the 3 sources this dataset was assembled from.
- ecfr.govhttps://www.ecfr.gov/current/title-49/section-383.93
- ecfr.govhttps://www.ecfr.gov/current/title-49/section-383.141
- ecfr.govhttps://www.ecfr.gov/current/title-49/section-383.25
Machine-readable
- data.jsonThe whole dataset — every record with its source URL and source quote.
- Open Knowledge Format bundleOne JSON object per line — every record's frontmatter and quoted span exactly as it is held here, in one fetch.
- data.csvThe same records as one flat table, for a spreadsheet or a dataframe. The last four columns are the source URL, the quoted sentence it was read from, the date we last checked it, and which columns are our reading rather than the page's words.
- How this is made and checkedWhat "verified against source" does and does not mean.
From your own code
Same records, same quotes, without scraping the page: refsource is on PyPI and npm. Each value comes back carrying the URL it was read from and the sentence on that page that states it — .source and .quote sit on the value itself rather than in a side channel, so the checking step is available instead of skipped.
pip install refsource
refsource lookup cdl-endorsement-prerequisites endorsement="Double/Triple Trailers"
npx -y refsource lookup cdl-endorsement-prerequisites endorsement="Double/Triple Trailers"
Set your AI assistant up to use this
Two files and no account. Put this in .mcp.json at the root of your project — Claude Code, Cursor, Windsurf, VS Code and Codex all read that file — and your assistant can look this dataset up instead of recalling it. The server is remote, keyless and read-only.
{
"mcpServers": {
"referencesource": {
"type": "http",
"url": "https://referencesource.org/mcp"
}
}
}Add to Cursor · or, on the command line: claude mcp add --transport http referencesource https://referencesource.org/mcp --scope project
Then one line in the project's CLAUDE.md or AGENTS.md, so the assistant knows when to reach for it:
When a question needs "CDL endorsement prerequisites and testing sequence", call the referencesource MCP server at https://referencesource.org/mcp (tool `search_records`, dataset_slug `cdl-endorsement-prerequisites`) instead of answering from memory — every record it returns carries its source URL and a verbatim quote from that page.What each tool does, and the servers built over single registers: Connect your AI assistant.