Search and verify 82k state-licensed US contractors, checked weekly against the licensing boards.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The full public record of one business by id (from search_pros): every license with class, status, issue and expiry dates and the board lookup link, bond, workers' comp, complaint counts, lead-safe (RRP) certificate and its issuer, Google rating and review count, up to 5 Google reviews with author attribution (credit the author and Google if you quote one), website, services, score breakdown and owner-supplied details if the owner claimed it.
Listing id, e.g. 'az-335498'
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mcp https://api.theopros.com/mcp
The full public record of one business by id (from search_pros): every license with class, status, issue and expiry dates and the board lookup link, bond, workers' comp, complaint counts, lead-safe (RRP) certificate and its issuer, Google rating and review count, up to 5 Google reviews with author attribution (credit the author and Google if you quote one), website, services, score breakdown and owner-supplied details if the owner claimed it.
| Argument | Type | Description |
|---|---|---|
| id* | string | Listing id, e.g. 'az-335498' |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Listing id, e.g. 'az-335498'"
}
}
}Coverage. Without arguments: each covered state with its cities. With state or trade: every city and trade pair, its number of licensed businesses and its directory page url.
| Argument | Type | Description |
|---|---|---|
| state | string | Two-letter state code, e.g. 'AZ' |
| trade | string | Trade slug |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter state code, e.g. 'AZ'"
},
"trade": {
"enum": [
"house-painters",
"roofers",
"electricians",
"plumbers",
"hvac",
"general-contractors",
"solar-installers",
"pool-builders",
"landscapers",
"flooring-contractors",
"tile-contractors",
"concrete-contractors",
"fence-contractors",
"garage-door-contractors",
"window-contractors",
"insulation-contractors",
"cabinet-contractors",
"drywall-contractors",
"masonry-contractors",
"septic-contractors",
"water-treatment",
"pest-control",
"locksmiths",
"security-installers",
"movers",
"asbestos-removal"
],
"type": "string",
"description": "Trade slug"
}
}
}Find state-licensed home-trade businesses by trade, city, state, ZIP, license number or free text; filters combine. Every result has an active license on the state board's register (with the date it was checked), plus a score (0-100) and rank within its city from theoPros' published formula. Example: 'a licensed roofer in Miami with no complaints' is city='Miami', trade='roofers', no_complaints=true. Ordered by text relevance when q is set, otherwise by score with unscored listings last. Up to 100 per page; pass next_cursor to get the next page.
| Argument | Type | Description |
|---|---|---|
| q | string | Free text: business name, license number, phone, ZIP, neighborhood or service such as 'cabinet' |
| zip | string | 5-digit ZIP code of the business's mailing address |
| city | string | City or neighborhood, e.g. 'Mesa', 'Van Nuys' |
| sort | string | Order: score (the default without q; unscored listings last), years licensed, Google rating or review count. With q the default is relevance |
| limit | integer | Results per page, default 20, at most 100 |
| state | string | Two-letter state code, e.g. 'AZ' |
| trade | string | Trade slug |
| cursor | string | next_cursor from the previous page |
| licence | string | License number as the board writes it, e.g. '1027925' (CA), '335498' or 'ROC335498' (AZ), 'CCC1328295' (FL) |
| lead_safe | boolean | Only lead-safe (RRP) certified firms, by EPA or the state's own program (needed for paint work in homes built before 1978) |
| min_years | number | Minimum years licensed |
| min_rating | number | Minimum Google star rating |
| no_complaints | boolean | Only businesses with no open complaints or disciplinary actions on the register; states whose board publishes none are excluded |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"description": "Free text: business name, license number, phone, ZIP, neighborhood or service such as 'cabinet'"
},
"zip": {
"type": "string",
"pattern": "^\\d{5}(-\\d{4})?$",
"description": "5-digit ZIP code of the business's mailing address"
},
"city": {
"type": "string",
"maxLength": 60,
"description": "City or neighborhood, e.g. 'Mesa', 'Van Nuys'"
},
"sort": {
"enum": [
"score",
"years",
"rating",
"reviews"
],
"type": "string",
"description": "Order: score (the default without q; unscored listings last), years licensed, Google rating or review count. With q the default is relevance"
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Results per page, default 20, at most 100"
},
"state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter state code, e.g. 'AZ'"
},
"trade": {
"enum": [
"house-painters",
"roofers",
"electricians",
"plumbers",
"hvac",
"general-contractors",
"solar-installers",
"pool-builders",
"landscapers",
"flooring-contractors",
"tile-contractors",
"concrete-contractors",
"fence-contractors",
"garage-door-contractors",
"window-contractors",
"insulation-contractors",
"cabinet-contractors",
"drywall-contractors",
"masonry-contractors",
"septic-contractors",
"water-treatment",
"pest-control",
"locksmiths",
"security-installers",
"movers",
"asbestos-removal"
],
"type": "string",
"description": "Trade slug"
},
"cursor": {
"type": "string",
"pattern": "^\\d+$",
"description": "next_cursor from the previous page"
},
"licence": {
"type": "string",
"maxLength": 40,
"description": "License number as the board writes it, e.g. '1027925' (CA), '335498' or 'ROC335498' (AZ), 'CCC1328295' (FL)"
},
"lead_safe": {
"type": "boolean",
"description": "Only lead-safe (RRP) certified firms, by EPA or the state's own program (needed for paint work in homes built before 1978)"
},
"min_years": {
"type": "number",
"minimum": 0,
"description": "Minimum years licensed"
},
"min_rating": {
"type": "number",
"maximum": 5,
"minimum": 0,
"description": "Minimum Google star rating"
},
"no_complaints": {
"type": "boolean",
"description": "Only businesses with no open complaints or disciplinary actions on the register; states whose board publishes none are excluded"
}
}
}Check whether a license number belongs to a business theoPros lists, which means the license was active on the state board's register on the date in 'checked'. listed=false means it is not in theoPros: theoPros covers only active licenses in its trades and cities, so check the state board before calling it inactive.
| Argument | Type | Description |
|---|---|---|
| state | string | Two-letter state code, e.g. 'AZ' |
| licence* | string | License number as the board writes it, e.g. '1027925' (CA), '335498' or 'ROC335498' (AZ), 'CCC1328295' (FL) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"licence"
],
"properties": {
"state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter state code, e.g. 'AZ'"
},
"licence": {
"type": "string",
"maxLength": 40,
"description": "License number as the board writes it, e.g. '1027925' (CA), '335498' or 'ROC335498' (AZ), 'CCC1328295' (FL)"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 9, 2026.