The Roofing List
Server Details
Find checked US roofers, siding and gutter contractors by city. Read-only, no login.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 2 tools
get_contractor retrieves one contractor by id, while search_contractors finds contractors by city and service type. The two tools have clearly distinct purposes with no overlap.
Both tool names follow a consistent snake_case verb_noun pattern: get_contractor and search_contractors. The singular/plural noun difference is natural and does not break the pattern.
Only two tools are provided, which is slightly below the typical 3–15 range. However, for a simple read-only contractor directory, search and get-by-id cover the core lookup needs, so the count is reasonable.
The surface covers the essential read operations: searching for contractors and retrieving a specific contractor by id. Minor gaps exist, such as no dedicated tool to fetch reviews or browse all contractors, but these are workable around.
Available Tools
2 toolsget_contractorGet contractorARead-onlyIdempotentInspect
Get one contractor from The Roofing List by id. Returns nothing for a business that is closed or no longer listed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The contractor id from search_contractors. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| city | Yes | |
| name | Yes | |
| phone | Yes | |
| state | Yes | |
| rating | No | From reviews published on The Roofing List only. Absent when there are none. |
| trades | Yes | |
| claimed | Yes | |
| website | No | Only present for claimed profiles. |
| profileUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine value beyond that by disclosing the null-result semantics: nothing is returned for a closed or delisted business, which an agent could otherwise misread as an error. It does not go further (e.g., error vs empty distinction, auth requirements).
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?
Two short sentences, zero filler, with the core action front-loaded and the edge-case caveat second. Nothing to trim.
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 an output schema present, the description need not explain the returned record, and it correctly covers the empty-result case. The only gap is the absence of any usage/routing context relative to search_contractors, which would make it fully self-sufficient.
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?
Only one parameter and schema description coverage is 100%, so the schema already fully explains 'id' as coming from search_contractors. The description adds no syntax, format, or range detail beyond the schema, so the baseline 3 applies.
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 ('Get one contractor from The Roofing List by id'), which is clear and unambiguous. The singular 'one contractor ... by id' implicitly distinguishes it from the sibling search_contractors, but the description never names or contrasts with that sibling explicitly, so it falls short of a 5.
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?
There is no explicit when-to-use statement, no exclusions, and no named alternative (search_contractors is only referenced inside the schema's id parameter, not the description). Usage is only inferable from the phrase 'by id', which is thin guidance for a lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contractorsSearch contractorsARead-onlyIdempotentInspect
Find roofing, siding or gutter contractors in a US city from The Roofing List. Returns only listed businesses that are open and passed our contact check. Ratings come from reviews published on The Roofing List only.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | US city name, for example "Austin". | |
| limit | No | How many results, 1 to 25. Default 10. | |
| state | Yes | US state as a USPS code ("TX") or a full name ("Texas"). | |
| trade | Yes | The trade: roofing, siding or gutters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| contractors | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, closed-world read, so the bar is lower. The description adds genuinely useful behavioral context beyond them: results are filtered to listed businesses that are open and passed the contact check, and ratings come only from The Roofing List reviews, which tells the agent the result set is curated and that rating values are not cross-platform aggregates.
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 short sentences, purpose first, then result filtering, then rating provenance — each sentence carries distinct, non-redundant information with no filler or repetition of the schema.
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 an output schema present, return shape need not be described, and the description covers what the tool searches, where data comes from, and what is excluded. The only meaningful gap is behavior when more matches exist than the limit allows (truncation vs. pagination), which is not addressed anywhere.
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 description coverage is 100%, so trade enum values, state format, and the limit range are already documented in the schema. The description restates the trade values but adds no new parameter semantics such as sorting, pagination, or how limit interacts with total matches, so it sits at the baseline.
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?
Specific verb (find) plus resource (roofing/siding/gutter contractors), scoped to a US city, with the data source named (The Roofing List). It never distinguishes itself from the sibling get_contractor, so an agent must infer that search returns lists while get_contractor fetches one record.
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?
"Find ... in a US city" implies the use case (location+trade lookup) and the required trade/city/state combination is discoverable. There is no explicit when-to-use versus get_contractor, no statement about when results would be empty, and no guidance on paging through more than 25 results.
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.
2 tool updates
- First observed
get_contractor - First observed
search_contractors
Related MCP Connectors
Hire evidence-verified home-service contractors. Confirmed-job reviews only; rank is never buyable.
Search licensed US contractors by trade or location, fetch profiles and reviews, and submit leads.
Find owner-operated plumbers, HVAC techs, electricians and roofers in OK, KS, NE, IA and MO.
Find and verify trustworthy US home-services contractors by their un-buyable HomeClip Trust Score.
Related MCP Servers
AlicenseAqualityBmaintenanceProvides free EagleView-style satellite roof measurements and modular Xactimate-style estimating from Google Solar API data, enabling contractors to generate reports and estimates from any address.3MIT- AlicenseAqualityAmaintenanceUnofficial Thumbtack MCP server for searching local service professionals and reading their profiles, ratings, reviews, and credentials. Read-only and anonymous.6340 npmMIT
- AlicenseAqualityDmaintenanceReal-time contractor license verification across 45 US states. Verifies license status, expiration, and disciplinary history directly against state licensing board portals.440 npmMIT
- FlicenseNot gradedqualityBmaintenanceRetrieves vetted Local Services Ads businesses (Google Guaranteed or Screened) as clean JSON for any service and US city, enabling lead generation, local SEO monitoring, and competitor tracking.-
Glama MCP Gateway
Add one secure layer between your agents and this server.