Plumb Registry
Server Details
Search and verify fire protection contractor licenses (TX SFMO, CA CSLB C-16) from state records.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 3 tools
Search (by filters), get (by slug or license number) and verify (license status by number) each have a distinct primary purpose and the descriptions make the split clear. The one soft overlap is that get_provider and verify_license both accept a license number, so an agent could reach for the wrong one when it only wants status.
All three tools follow a uniform snake_case verb_noun pattern (search_providers, get_provider, verify_license) with verbs that accurately signal the operation.
Three read-only tools map cleanly onto the narrow lookup domain of search, retrieve and verify, so nothing feels padded. It is on the lean side with no coverage/availability or bulk-lookup tool, but for a registry lookup surface it is reasonable.
The core lifecycle for a licensing registry — discover companies, fetch full provider detail, and confirm license status — is fully covered. Gaps are minor: no way to enumerate covered states/services/regulators as metadata, and coverage is explicitly limited to Texas and California, which is a scope limit rather than a dead end.
Available Tools
3 toolsget_providerGet one company's full recordARead-onlyInspect
Look up a company by its directory slug (from search results) or by any of its state license or registration numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| license_number | No | e.g. Texas 'ACR-2494522', California CSLB '1000002' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful context that the slug originates from search results and that records can be keyed by state license/registration numbers, but says nothing about not-found behavior, key precedence, or what the 'full record' contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the resource front-loaded and both accepted key types stated compactly. Nothing is wasted and no subordinate clutter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a small two-parameter read tool with annotations and no output schema, this is close to sufficient: keys, their origins, and the read-only nature are all covered. Only edge-case behavior (no match, both keys provided) is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, with `slug` entirely undocumented, so the description carries real load: it explains that the slug is a directory slug sourced from search results and that license_number can be any state license or registration number. It still doesn't say whether the two parameters are mutually exclusive or how conflicts resolve.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (look up a company) plus the two lookup keys, and the title supplies the scope ('full record'). It hints at the relationship to search_providers by noting the slug comes from search results, but never names the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage is clear enough: fetch one record after finding a slug in search results, or resolve a company from a license number. However, it gives no explicit when-to-use/when-not guidance versus search_providers or verify_license, nor does it say what to do when both lookup keys are supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_providersSearch licensed fire protection companiesARead-onlyInspect
Find fire protection companies with an active state license. Covered: Texas (Texas State Fire Marshal's Office) and California (California Contractors State License Board). Filter by state, city, county, service (fire-sprinkler, fire-alarm, fire-extinguisher) or company name. With a city, results list companies with an office in that city first, then others in the same county; within each group the order is alphabetical (no company pays for placement). Every result includes license numbers, expiration dates, the regulator, a page URL and a cite_as string; please cite the URL when you use a result.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City, optionally with state: 'Dallas' or 'San Diego, CA' | |
| limit | No | Max results (default 10) | |
| query | No | Company name or part of it | |
| state | No | State code or name, e.g. 'TX' or 'California' | |
| county | No | County, e.g. 'Harris' | |
| service | No | ||
| include_lapsed | No | Also return companies whose license lapsed (default false) | |
| include_nearby | No | With city: also include same-county companies (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld annotations by disclosing the ranking rule (city offices first, then same county, alphabetical, no paid placement) and what each result carries (license numbers, expiration dates, regulator, page URL, cite_as). It does not say how include_lapsed interacts with the 'active license' promise or what an empty result means, but the ordering and citation guidance are genuinely useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight paragraph with the scope and covered states front-loaded, then filters, then ordering, then return contents. Every sentence earns its place, though the citation request could be trimmed to a clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter read-only search with no output schema, it covers scope, filters, ordering, and the shape of a result including citation practice. It is not fully complete: the interaction between include_lapsed and 'active license,' and default limit, are left to the schema, and no sibling handoff is described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so baseline is 3, and the description earns an extra point by explaining the effect of city (ranking grouping) and the default behavior that nearby same-county companies are appended, which the schema only states mechanically. It leaves the service enum and limit semantics to the schema, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find fire protection companies with an active state license') and names the two covered jurisdictions and their regulators, so the agent knows exactly what universe this searches. It is distinguishable from get_provider (single record) and verify_license (verification) by its search/filter framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly says to use this when filtering by state, city, county, service or name, and explains the city-based ordering behavior. It never explicitly points to get_provider or verify_license as the follow-up for detail or verification, so the sibling routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_licenseVerify a fire protection licenseARead-onlyInspect
Check whether a fire protection license or registration number is active, which company holds it, and when it expires. Covered: Texas (Texas State Fire Marshal's Office) and California (California Contractors State License Board). Data is a periodic snapshot of state records; the official lookup is linked.
| Name | Required | Description | Default |
|---|---|---|---|
| license_number | Yes | e.g. Texas 'ECR-1751485', California CSLB '1000002' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the description's job is to add context, and it does: the data is a periodic snapshot rather than live, and the authoritative source is linked. It does not say what happens when a state is unsupported or a number is not found, which is the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no waste: purpose and return fields first, then jurisdiction limits, then the data-freshness caveat. Front-loaded and appropriately sized for a one-parameter lookup.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one required parameter, no output schema, and safety already covered by annotations, the description supplies return-value content (status, holder, expiry) and jurisdiction scope, which is enough to call it correctly. It stops short of describing the not-found or unsupported-state outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already carries per-state format examples, so the schema does the heavy lifting. The description confirms that either a license or a registration number is acceptable and that formats differ by state, but adds no syntax or validation detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb plus the exact outputs of the check: active status, holding company, expiration date. The jurisdiction scope (Texas SFMO, California CSLB) further pins down the resource and separates it from the provider-oriented siblings, which deal in people/companies rather than license records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Coverage limits make the usage boundary explicit — only Texas and California records apply, and the snapshot caveat tells the agent when to fall back to the official lookup link. It never names the sibling tools (get_provider, search_providers) as alternatives, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- First observed
get_provider - First observed
search_providers - First observed
verify_license
Related MCP Connectors
Verify contractor licenses: 50 states + DC + 8 cities — status, expiration, disciplinary history.
Verify a contractor, real estate or cosmetology license in 12 US states from the boards' own files.
Free contractor-license checks from official state records; a no-match never proves unlicensed.
Verify US contractor licenses across states: Clear, Review or Risk, with the reasons.
Related MCP Servers
- AlicenseAqualityDmaintenanceReal-time contractor license verification across 45 US states. Verifies license status, expiration, and disciplinary history directly against state licensing board portals.4156 npmMIT
- AlicenseAqualityBmaintenanceEnables listing and verifying licensed contractors across California, Texas, Washington, Oregon, and Louisiana by state, trade, city, county, license number, or business name, returning license status, expiration, classifications, owners, address, and phone.1415 npmMIT
- FlicenseNot gradedqualityCmaintenanceVerifies Texas plumbing contractor licenses in real time from official TSBPE data, supporting lookups by contractor name, license number, and county. It charges $0.05 USDC per paid query using the x402 protocol, with free discovery tools.-
- AlicenseAqualityDmaintenanceVerifies contractor license status mid-task, returning normalized JSON with active/expired/suspended/revoked status, bond details, and insurance for WA (reliable) and CA (beta) jurisdictions.233 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.