Developers and AI assistants
Operator licence API and MCP server
Look up any GB goods vehicle or PSV operator licence from your own code or from an AI assistant. The JSON API and the MCP server are free, need no key and return the same records as this website, with the DVSA file date and the source on every result.
At a glance
- MCP server (Streamable HTTP)https://haulierscope.co.uk/mcp
- JSON APIhttps://haulierscope.co.uk/api/v1
- OpenAPI 3.1https://haulierscope.co.uk/openapi.json
- DataDVSA file dated 7 September 2026
The data is the operator licence file that DVSA publishes as open data, read each time DVSA publishes a new file (usually weekly), with Companies House, DVSA earned recognition and Traffic Commissioner context. Read the methodology for what each field means and data status for the date of every source.
MCP server
The Model Context Protocol (MCP) lets an AI assistant call tools on another service. Our MCP server gives assistants such as Claude, ChatGPT, Cursor and VS Code direct, structured access to operator licence data. Ask a question in plain words, for example “Is OF2071131 valid, and how many vehicles does it authorise?”, and the assistant calls the right tool and cites the DVSA file date.
- Address:
https://haulierscope.co.uk/mcp - Transport: Streamable HTTP. Each request is answered with JSON; there are no sessions to manage.
- Sign-in: none. All tools are read-only.
- Server card: https://haulierscope.co.uk/mcp/server-card
Connect your assistant
Claude Code
claude mcp add --transport http haulierscope https://haulierscope.co.uk/mcpAdd --scope user to use it in every project, or --scope project to share it through .mcp.json.
Claude (claude.ai and Claude Desktop)
Open Settings, then Connectors, and choose Add custom connector. Name it HaulierScope, paste https://haulierscope.co.uk/mcp as the URL and choose no sign-in. On Team and Enterprise plans an owner adds the connector for the organisation first.
Cursor
Add HaulierScope to Cursor, or add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"haulierscope": {
"url": "https://haulierscope.co.uk/mcp"
}
}
}VS Code (GitHub Copilot)
Add HaulierScope to VS Code, or add this to .vscode/mcp.json:
{
"servers": {
"haulierscope": {
"type": "http",
"url": "https://haulierscope.co.uk/mcp"
}
}
}ChatGPT
Turn on developer mode (Settings, then Security and login), then add a new connector with the URL https://haulierscope.co.uk/mcp and no authentication. The server also has the search and fetch tools that deep research uses.
OpenAI Codex, Gemini CLI and others
codex mcp add haulierscope --url https://haulierscope.co.uk/mcp
gemini mcp add --transport http haulierscope https://haulierscope.co.uk/mcpAny client that supports remote MCP servers over Streamable HTTP can use the same address. Older clients can bridge with npx mcp-remote https://haulierscope.co.uk/mcp.
Test it from a terminal
npx @modelcontextprotocol/inspector --cli https://haulierscope.co.uk/mcp --transport http --method tools/list
npx @modelcontextprotocol/inspector --cli https://haulierscope.co.uk/mcp --transport http \
--method tools/call --tool-name get_licence --tool-arg licence_number=OF2071131MCP tools
Every tool is read-only and returns structured content with a published output schema, plus the same JSON as text.
| Tool | Arguments | What it returns |
|---|---|---|
search_operators | query, filters?, limit? | Find operators by company name, licence number or company number. Filters: traffic area, goods or PSV, status, licence type, in the latest file. |
get_licence | licence_number | The full record of one licence: holder, type, status, vehicles, trailers, continuation date, operating centres, Companies House status, earned recognition, public inquiries, decisions and change history. |
get_company | company_number | Every licence of one company, with totals and its Companies House, Gazette and Traffic Commissioner context. |
area_stats | area | Licences, operators, vehicles, licence mix, largest operators and towns for one of the eight traffic areas. |
recent_changes | release?, area?, change_type?, limit?, offset? | What changed between one DVSA file and the one before, with before and after values. |
upcoming_public_inquiries | area? | Public inquiries the Traffic Commissioners have listed for companies, with date, venue, grounds and the official notice. |
insolvency_watch | area?, limit? | Licence holders that Companies House shows in liquidation, administration or receivership, with Gazette insolvency notices. |
filing_watch | area?, limit? | Licence holders whose accounts were overdue at the Companies House register date. |
new_licences | month?, area?, limit? | New operator licences granted in a month, from the Traffic Commissioners' weekly bulletins. |
licences_ended | month?, area?, limit? | Licences published as revoked, surrendered or terminated in a month, with the official heading and bulletin for each. |
tc_decisions | area?, outcome?, limit? | Traffic Commissioner regulatory decisions, with outcome, dates, appeal status and the decision document. |
biggest_operators | kind, area? | The biggest haulage companies or coach and bus operators by vehicles authorised, nationally or in one traffic area. |
data_status | none | The date and age of every source, and every DVSA file we hold. |
search, fetch | query / id | The search-and-fetch pair that ChatGPT deep research and company knowledge use. fetch returns the Markdown version of a page. |
JSON API
Plain HTTPS GET requests, JSON responses, no key. The full description is in openapi.json (OpenAPI 3.1), which code generators and API tools can read directly.
| Request | Returns |
|---|---|
GET /api/v1/search?q=wincanton | Search by name, licence number or company number. Optional: area, category, status, licence_type, in_current_file, limit. |
GET /api/v1/licences/{licence_number} | One licence. |
GET /api/v1/companies/{company_number} | One company and all its licences. |
GET /api/v1/areas | The eight traffic areas with licence and vehicle counts. |
GET /api/v1/areas/{area} | Statistics for one traffic area (slug, letter or name). |
GET /api/v1/changes?release=YYYY-MM-DD | Changes in one DVSA file. Optional: area, type, limit, offset. |
GET /api/v1/public-inquiries?area=scotland | Upcoming public inquiries for companies. |
GET /api/v1/insolvency-watch?area=wales | Licence holders in liquidation, administration or receivership, with Gazette notices. |
GET /api/v1/filing-watch?area=wales | Licence holders with accounts overdue at Companies House. |
GET /api/v1/new-licences?month=YYYY-MM | New operator licences granted in a month. Optional: area, limit. |
GET /api/v1/licences-ended?month=YYYY-MM | Licences revoked, surrendered or terminated in a month, in the official wording. Optional: area, limit. |
GET /api/v1/tc-decisions?area=wales | Traffic Commissioner decisions. Optional: outcome, limit. |
GET /api/v1/rankings/haulage-companies?area=wales | Biggest operators by vehicles authorised (haulage-companies or coach-and-bus-operators). |
GET /api/v1/earned-recognition?area=wales | DVSA earned recognition operators, by traffic area. |
GET /api/v1/status | Source dates and the DVSA files we hold. |
curl https://haulierscope.co.uk/api/v1/licences/of2071131A licence number is two letters and seven digits. The first letter is O for goods vehicles or P for buses and coaches; the second letter is the traffic area. Upper or lower case both work.
What every response contains
Every API response and every MCP tool result carries source, file_date (the date of the DVSA file the data describes), canonical_url (the page on this site), markdown_url and attribution. Quote the file date and link the canonical URL when you show the data.
{
"source": "DVSA operator licence data (Traffic Commissioners' goods and public service vehicle operator licence records)",
"file_date": "2026-09-07",
"canonical_url": "https://haulierscope.co.uk/licence/of2071131",
"markdown_url": "https://haulierscope.co.uk/licence/of2071131.md",
"attribution": "Contains public sector information licensed under the Open Government Licence v3.0. Contains Companies House data.",
"data": {
"licence_number": "OF2071131",
"licence_type": "Standard International",
"status": "valid",
"in_current_file": true,
"vehicles_authorised": 2853,
"trailers_authorised": 3604,
"continuation_date": "2029-01-31",
"holder": {
"type": "company",
"name": "WINCANTON HOLDINGS LIMITED",
"company_number": "02155951",
"operator_type": "Limited Company",
"company_url": "https://haulierscope.co.uk/company/wincanton-holdings-limited-02155951"
},
"traffic_area": "East of England",
"…": "operating centres, Companies House, earned recognition, inquiries, decisions, history"
}
}Errors use HTTP status codes (400, 404, 429, 503) and a JSON body with an error.code and a plain-English error.message.
Markdown versions of pages
Every public page has a clean Markdown version for language models. Add .md to the address, for example /area/scotland.md or /index.md for the home page, or request the normal address with the header Accept: text/markdown. Each version starts with a one-paragraph answer and the source and date, and links to the normal pages. Browsers and search engines always get the normal page.
curl -H "Accept: text/markdown" https://haulierscope.co.uk/guides/vet-a-haulierDiscovery files
- /llms.txt: a short map of the site for language models.
- /llms-full.txt: the guides, methodology and data documentation in one file.
- /okf/index.md: the same knowledge as an Open Knowledge Format bundle of linked Markdown files.
- /openapi.json and /.well-known/api-catalog: the API description and its catalogue entry.
- /mcp/server-card and /.well-known/ai-catalog.json: the MCP server card and the site’s AI catalogue.
Rules for using the data
- Attribution. Licence data is open data under the Open Government Licence v3.0. Show “Contains public sector information licensed under the Open Government Licence v3.0.” with it, and “Contains Companies House data.” when you show company facts.
- Privacy. We never hold director, partner or transport manager names or correspondence addresses. Sole traders and partnerships are people: they are never named here, they are found only by exact licence number, and their records are minimal. Do not use the data to identify them. See the privacy notice.
- Wording. A licence that is not in the latest DVSA file is “not in the DVSA file dated” that date: the file does not say why. The status “unmapped” is not valid. The continuation date is not an expiry date.
- Independence. HaulierScope is independent and is not the official register. For the official record, use the GOV.UK service “Find lorry or bus operators”.
Rate limits and caching
Each connection can make 60 requests at once, then one request a second. The response headers X-RateLimit-Limit and X-RateLimit-Remaining show where you are; over the limit, you get HTTP 429 with a Retry-After header. Sole-trader and partnership licences have a lower hourly limit, the same as their web pages. Most responses can be cached for five minutes; the data changes when DVSA publishes a new file, so caching for longer is fine for most uses.
Need higher volumes, a bulk list check or alerts when a licence changes? That is what monitoring is for. Questions: contact us.