About license-verify-mcp
license-verify-mcp is an MCP server for checking US contractor licenses against state data, including surety bond and insurance details. Washington is live and California is beta; charges apply only to successful matches, not misses or source failures.
Key features
- 01Verify license status
- 02Retrieve bond and insurance details
- 03List supported states and data sources
- 04Search by license number or business name
- 05Charge only for successful matches
Use cases
- 01Check whether a contractor license is active
- 02Confirm contractor bond and insurance
- 03Review supported jurisdictions and sources
- 04Screen contractor credentials before procurement
MCP support
The MCP server exposes `verify_license` and `list_supported_jurisdictions` for compatible clients to query license, bond, insurance, and jurisdiction information.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
2Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| jurisdiction | string | Yes | Two-letter US state code. Supported: 'WA' (Washington, via WA L&I open data), 'CA' (California, via CSLB). Call list_supported_jurisdictions to see all options. |
| business_name | string | No | Business name or partial business name to search for. Case-insensitive partial match. May return multiple results if ambiguous — check the 'matches' array in that case. |
| license_number | string | No | Contractor license or registration number to look up (e.g. 'ECOSTSC758NN'). Case-insensitive exact match. Preferred over business_name for unambiguous results. |
Details
From the project READMEContractor License + Bond + Insurance Verify (MCP, agent-payable)
The only MCP-native license check that returns official SURETY BOND + INSURANCE from state data — not just active/inactive status. Pay-per-success: $0.03 full result, $0.01 status-only, FREE on a miss. WA live (official L&I), CA beta (CSLB).
Tools: verify_license, list_supported_jurisdictions.
Quickstart
// Call
{ "tool": "verify_license", "jurisdiction": "WA", "license_number": "ECOSTSC758NN" }
// Response (abridged)
{
"found": true,
"result": {
"status": "active",
"bonded": { "is_bonded": true, "details": "Surety: NORTH RIVER INSURANCE COMPANY THE; Amount: $30,000" },
"insured": { "has_insurance": true, "details": "Carrier: State National Ins Co Inc; Coverage: $1,000,000" }
}
}
| Result | Price |
|---|---|
| Full (status + bond + insurance) | $0.03 |
Status-only (no bond/insurance match, or statusOnly: true) | $0.01 |
Miss (found: false) | FREE |
Jurisdictions
| State | Status | Source | Bond + Insurance |
|---|---|---|---|
| WA | ✅ Live | WA L&I open data (data.wa.gov) | ✅ Real data (bzff-4fmt + ciwg-agsx datasets) |
| CA | ⚠️ Beta | CSLB HTML (cslb.ca.gov) | ✅ Parsed when CSLB is up |
Washington is the reliable, production-ready jurisdiction. Official WA L&I open data is served via Socrata JSON — no scraping, no rate limits, bond and insurance data included from dedicated datasets.
California is beta. CSLB does not publish an open API; the provider fetches the HTML detail page directly. CSLB rate-limits or 503s automated requests intermittently. When unavailable, verify_license returns a clean SESSION_ERROR — you are never charged on source failures. Do not rely on CA for production workflows until a stable server-side CSLB run is confirmed.
Apify Actor
Agentic-payments eligible — pay-per-event pricing + limited permissions + no Standby mode.
Pricing
| Event | Price |
|---|---|
license-verification | $0.03 — full result (status + bond + insurance) |
status-only-result | $0.01 — status found, no bond/insurance match (or statusOnly: true) |
Charged only on found: true. Validation errors, not-found results, and source failures are not charged.
Input
{
"jurisdiction": "WA",
"license_number": "ECOSTSC758NN"
}
| Field | Type | Required | Notes |
|---|---|---|---|
jurisdiction | "WA" | "CA" | ✅ | WA = live; CA = beta |
license_number | string | one of ↓ | WA: alphanumeric. CA: numeric, ≤8 digits |
business_name | string | one of ↑ | WA only. Partial match, may return matches[] |
Output (default dataset)
{
"found": true,
"jurisdiction": "WA",
"query": { "license_number": "ECOSTSC758NN" },
"result": {
"license_number": "ECOSTSC758NN",
"business_name": "!ECO STAR C G CONSTRUCTION LLC",
"status": "active",
"license_type": "CONSTRUCTION CONTRACTOR",
"bonded": {
"is_bonded": true,
"details": "Surety: NORTH RIVER INSURANCE COMPANY THE; Bond #: 46CF842686; Amount: $30,000; Effective: 2025-08-05; Expires: Until Canceled"
},
"insured": {
"has_insurance": true,
"details": "Carrier: State National Ins Co Inc; Policy: NXT9PTHTLT-01-GL; Coverage: $1,000,000; Agency: Next Insurance Inc; Effective: 2026-06-12; Expires: 2027-06-12"
},
"effective_date": "2025-08-15",
"expiration_date": "2027-08-15"
},
"source_url": "https://data.wa.gov/resource/m8qx-ubtq",
"retrieved_at": "2026-06-26T01:34:37.598Z",
"raw": { ... }
}
status is always one of: active | expired | suspended | revoked | unknown.
On failure: { "found": false, "error": "SESSION_ERROR|NETWORK_ERROR|...", "message": "..." } — never a crash, never a charge.
Local test
npm install
npm run build
echo '{"jurisdiction":"WA","license_number":"ECOSTSC758NN"}' \
> storage/key_value_stores/default/INPUT.json
npx apify run
MCP Server (stdio)
For use with Claude Desktop, Smithery, or any MCP-compatible agent.
Tools
verify_license — verify a contractor's license status.
jurisdiction(required):"WA"or"CA"license_numberand/orbusiness_name(at least one required)
list_supported_jurisdictions — list all states with their status and data source.
Config (Claude Desktop)
{
"mcpServers": {
"license-verify": {
"command": "node",
"args": ["/absolute/path/to/license-verify-mcp/dist/index.js"]
}
}
}
Run
npm install && npm run build
npm run start:mcp # stdio MCP server
npm run smoke # hit real WA + CA endpoints, must be 8/8 PASS
Adding a State
- Create
src/providers/<CODE>.tsimplementing theProviderinterface ({ info, verify() }) - Register it in
src/providers/index.ts
No other changes needed in server or Actor.
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.