agentlookups.ai / docs / Plumbline
Plumbline checks a contractor's license, by license number or business name, in official licensing-board records. Use it before you hire someone, to see what the board's record says about the license on the bid. It works on its website, through an AI assistant over MCP, and as a plain HTTPS API.
Every record comes from the agency that issued it: state licensing boards, plus some city and county licensing offices, that publish their rosters as public data. Plumbline covers business licenses and the licenses tradespeople hold in their own name, such as master and journeyman plumbers. Each result names the agency, gives the status in the agency's own words, and dates the record.
Most sources are fetched again every day; a few boards publish on their own nightly or weekly schedule. A failed download can leave an older record in place, so each record carries the date we collected it. Plumbline keeps each downloaded file unchanged, and each record carries the SHA-256 fingerprint (hash) of the file it came from, so it can be checked against its source. The methodology page has the details.
Plumbline is in beta. Lookups are free during beta, with no account and no API key. Features, limits and pricing may change. Rate limits apply.
https://contractors.agentlookups.ai/mcp as the URL.claude mcp add --transport http plumbline https://contractors.agentlookups.ai/mcp
Add a remote MCP server with the URL https://contractors.agentlookups.ai/mcp, transport Streamable HTTP, no authentication. Menu names differ by client and plan. The server keeps no session and replies with plain JSON. It takes POST only, one JSON-RPC request per POST, with the headers content-type: application/json and accept: application/json, text/event-stream. To test it by hand:
curl -X POST https://contractors.agentlookups.ai/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"check_contractor",
"arguments":{"license":"602331","jurisdiction":"CA"}}}'
No MCP needed. This URL returns California license 602331 as JSON:
https://contractors.agentlookups.ai/v1/check?license=602331&jurisdiction=US-CA
To search by name, send name= in place of license=, with an optional city=. To pick one record from a list of candidates, send entity_id=. /v1/coverage lists every source we index, with its latest snapshot. /llms.txt sums up the service for AI agents.
check_contractor: finds a license record by license number or business name, narrowed by jurisdiction (a two-letter state code such as CA, the full state name, or a city code such as NYC) and, if you like, the exact city listed on the record. entity_id picks one record from an earlier answer; offset pages through a long list of candidates. Read-only.Each prompt was run live on September 28, 2026, with the arguments an assistant would send. Board records change, so your answer may differ.
"Is The Home Depot licensed as a contractor in California?"
Call: check_contractor {"name": "The Home Depot", "jurisdiction": "CA"}
Came back: a match. The California Contractors State License Board (CSLB) record for license 602331, a business record, with status "CLEAR" (which Plumbline groups as active), its license classifications, issue and expiry dates, the snapshot date, and a link to CSLB's own license check.
"My plumber is Roto-Rooter in Florida. Are they licensed?"
Call: check_contractor {"name": "Roto-Rooter", "jurisdiction": "FL"}
Came back: candidates. 18 records from the Florida Department of Business and Professional Regulation (DBPR), listed in several cities, and the message "More than one record matched. Use the license number from the bid or contract to disambiguate."
Follow-up: "It's the Orlando office." Call: check_contractor {"name": "Roto-Rooter", "jurisdiction": "FL", "city": "Orlando"}
Came back: a match. DBPR credential record CFC057359 with status "A" (grouped as active), classification CFC, and its expiry date. The answer asks you to check what the classification covers with the agency.
"Check Maryland home improvement license 164285."
Call: check_contractor {"license": "164285", "jurisdiction": "MD"}
Came back: a match. The Maryland Home Improvement Commission (MHIC) record for Transform Sears Home Services LLC, listed in the board's public list of active licenses, with the record's snapshot date (August 30, 2026 for this record). For today's status, use the MHIC lookup the answer links.
"Is Roto-Rooter licensed in Georgia?"
Call: check_contractor {"name": "Roto-Rooter", "jurisdiction": "GA"}
Came back: not covered, with the message "We do not yet cover GA. We do not have its official lookup URL on file; check the jurisdiction's licensing agency directly. Absence from our index is NOT a determination of licensure."
Every answer has a result_type:
match: one record. status groups the board's status as active, inactive, suspended or revoked; raw_status is the board's own wording, or, where the board publishes only a list of active licenses, says the record is on that list. The answer also gives the license classification, the expiry date when the board lists one, the snapshot date (as_of), a link to the agency's own lookup, and where to file a complaint with the agency.candidates: more than one record matched. Narrow it with the license number from the bid or contract, or with the city listed on the record, or call again with one candidate's entity_id. total_candidates and offset page through long lists.no_match_in_index: we hold no record that matches. The message lists common reasons (a different legal name, a license held under an owner's name, another state), and the answer links the agency's lookup.jurisdiction_not_covered: we do not index that place yet. When the answer carries a link, its message says exactly what the link is. For some places it is a consumer-protection or licensing-board page, not a license lookup, so pass on the message's own wording.credential.kind, credential.label and credential.note say which one a record is. An active record is not proof that the license covers your job.not_checked. A match also lists discipline, court records, liens, permits and business registration. Where we have not indexed one, it says not_checked, and its note says absence there means nothing.registries list in /v1/coverage names them), findings.registration reports what it found. Elsewhere it says not_checked. In the service's words: "no_match_in_registry is NOT a determination that a business is unregistered (sole proprietors need none; boards list trade names)."Plumbline asks every assistant to pass these on and not override them. From its llms.txt, word for word:
A no_match_in_index result is NOT a determination that a business is unlicensed.
We report what the public record says, with its date; the issuing agency's live page is authoritative for today.
We report occupational-license records, including licenses individuals hold in their own name (journeyman/master trades). We NEVER build person dossiers: an individual's page is their one license record as the board publishes it, with no aggregation beyond it, and it is never for any FCRA purpose.
/v1/coverage. Do not rely on a list copied from somewhere else, including this page.CA), the full state name (California), or a city code from /v1/coverage such as NYC. Anything else returns the error unrecognized_jurisdiction, which lists the accepted forms. If an answer says "We do not yet cover" and spells out a full state name, ask again with the two-letter code.NYC), ask again with that code. Otherwise check /v1/coverage. If the place is not listed, use that state's or city's own licensing agency./mcp. The client sent GET. This server takes POST only./mcp. The request was a batch (a JSON array), or its body was not valid JSON. Send one JSON-RPC request per POST.One privacy page and one set of terms cover all six agentlookups.ai services. In short: no accounts, no cookies, no trackers. The web server logs requests to /search/, /v1 and /mcp without the words you searched (a request that fails partway can leave them in an error line), and deletes its logs after 14 days. A contractor's record page names the contractor in its address, so a visit to one leaves that name in the page log. If you report a record error, we keep the report, and your email address only if you give it.
Plumbline is run by TopHat Monkey Software LLC.
Last updated: September 28, 2026