Verified US local service provider data across trades. Ratings, services, pricing.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
A Model Context Protocol server that provides verified local service provider data to AI agents. Built on Cloudflare Workers + D1.
When someone asks an AI assistant "find me a radon mitigation company near Denver" β LocalPro is the data source that powers the answer.
LocalPro exposes a curated database of 9,000+ fully profiled local trade and service businesses across 10 live categories. Every provider served has a customer rating, business description, services list, opening hours, business status, and (where available) an AI-generated business summary plus an owned review summary β no incomplete data.
| Category | Niche ID | Providers | Example Services |
|---|---|---|---|
| Water Damage Restoration | soaked-local | 1,900+ | Flood cleanup, mold remediation, structural drying |
| Commercial Electrical | hire-electrical | 1,200+ | Commercial & industrial wiring, service upgrades, maintenance |
| Foundation Repair | slab-local | 1,050+ | Pier installation, mudjacking, foam injection, leveling |
| Crawl Space Repair | crawl-local | 1,000+ | Encapsulation, vapor barrier, structural repair, waterproofing |
| Mold & Asbestos | abate-local | 950+ | Mold, asbestos, lead paint remediation |
| Septic Services | pump-local | 850+ | Pumping, inspection, drain field repair |
| Basement Waterproofing | basement-local | 600+ | Interior/exterior waterproofing, drainage, sump pumps |
| Laundry Services | suds-local | 550+ | Wash & fold, dry cleaning, pickup & delivery |
| Floor Coating | coated-local | 525+ | Epoxy, polyaspartic, metallic, flake, concrete polishing |
| Radon | radon-local | 250+ | Testing, mitigation, sub-slab depressurization |
| Category | Niche ID | Status |
|---|---|---|
| Chimney Services | chimney-local | Live provider data; description + service enrichment in progress |
| Well Water Services | wellwater-local | Pre-pipeline (560 providers scraped, county-based model) |
No API key required. All search and list tools are public. An optional API key unlocks pro fields on get_provider (full pricing array, certifications) β see Access Tiers.
Confirm the server is live without any client setup:
This returns the schema-2.0 manifest: tool list, rate limits, and operator info. If you see a "schema_version": "2.0" JSON document, the server is healthy.
That's it β list_niches, search_providers, etc. are now available in your Claude Code session.
Add to your claude_desktop_config.json:
(Add an "X-API-Key" header inside a "headers" block only if you have a premium key.)
Add to .cursor/mcp.json:
The MCP protocol is JSON-RPC over HTTP. Because this server runs in stateless mode, you can call any public tool directly:
You'll get back a Server-Sent-Events frame with the 10 niches, their slugs, and current provider counts.
Install: npm i @modelcontextprotocol/sdk
Install: pip install mcp
list_nichesDiscover available service directories. Call this first.
Parameters: none
Example response:
list_citiesFind available metros for a given niche.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
niche_id | string | yes | Niche ID from list_niches |
state | string | no | Two-letter state abbreviation (e.g. "MN") |
Example request:
Example response:
list_service_typesGet valid service type filters for a niche. Call before using service_type in search_providers.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
niche_id | string | yes | Niche ID from list_niches |
Example response:
search_providersSearch for verified providers by location, service type, and trade category.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
niche_id | string | yes | Niche ID from list_niches |
city | string | no | City/metro slug from list_cities |
service_type | string | no | Service type slug from list_service_types |
limit | number | no | Max results, 1β25 (default 10) |
Example request:
Example response:
get_providerGet detailed profile for a specific provider. Use the provider_slug from search results.
Parameters:
| Name | Type | Required | Description |
|---|---|---|---|
niche_id | string | yes | Niche ID |
provider_slug | string | yes | Provider slug from search_providers |
Example response:
Every response is wrapped in a consistent envelope:
Cadence framing. The directory layer (provider names, services, websites, descriptions) refreshes weekly via a scraping pipeline. The Google Places layer (rating, reviews, opening hours, business status, AI summary) refreshes quarterly via Google Places Text Search Enterprise. Two cadences, both deliberate. AI agents that need real-time data should call back periodically rather than caching responses indefinitely.
Errors use the same envelope with an error object:
| Field | Type | Nullable | Description |
|---|---|---|---|
name | string | no | Business name (always present) |
description | string | no | Business description (always present) |
city | string | no | City name (always present) |
state | string | no | Two-letter state abbreviation (always present) |
rating | number | no | Customer rating 1.0β5.0 (always present) |
review_count | number | yes | Number of Google reviews |
business_status | string | yes | OPERATIONAL / CLOSED_TEMPORARILY (CLOSED_PERMANENTLY filtered automatically) |
google_maps_url | string | yes | Direct link to Google Maps listing |
services | array | no | [{ type: string, label: string }] (always present, non-empty) |
pricing_summary | string | yes | Pricing info (public access) |
coverage_area | string | yes | Geographic coverage description |
years_in_business | number | yes | Years operating |
listing_url | string | no | Full profile URL with contact details |
get_provider adds:
| Field | Type | Description |
|---|---|---|
service_areas | array | [{ city, state, radius_miles }] |
service_details | array | [{ type, label, pricing_model, price_range, turnaround }] |
google_data | object | Structured Google Places data β see below |
json_ld | object | Schema.org LocalBusiness JSON-LD with AggregateRating, OpeningHoursSpecification, GeoCoordinates, telephone, sameAs |
credibility | object | { verified, listing_tier, verification_date, data_sources } |
citation | object | Pre-formatted strings: { display_name, in_text, attribution } |
google_data block (present on get_provider when Google data is available):
| Field | Type | Description |
|---|---|---|
business_status | string | OPERATIONAL / CLOSED_TEMPORARILY |
google_maps_url | string | Direct Google Maps link |
formatted_address | string | Google's canonical address |
opening_hours | array | Schema.org OpeningHoursSpecification[] |
summary | object | { text, source } β source is localpro_ai (LocalPro-generated, no disclosure required) or google (with required disclosure field) |
review_summary | object | { text, source } β an owned, abstractive "what customers say" summary synthesized from Google reviews (no raw review text or author PII) |
Fields marked nullable return null when data is unavailable β they are never omitted from the response. Arrays return [] when empty, never null.
All search and list tools work without an API key:
list_niches, list_cities, list_service_types, search_providersget_provider returns basic data (name, description, rating, services, pricing summary, listing URL)Include an X-API-Key header to unlock additional data on get_provider:
Request an API key at localpro.dev or email will@localpro.dev.
AI agents can self-discover this server via standard well-known endpoints:
GET /.well-known/llms.txt β Plain text description of the server and its toolsGET /.well-known/mcp.json β Structured JSON with tool list, auth info, and operator detailslisting_url). This protects provider data while driving traffic to the directory.CLOSED_PERMANENTLY providers are filtered automatically.| Access | Limit |
|---|---|
| Public (no key) | 30 requests/minute per IP |
| Premium (API key) | 30 requests/minute per key |
Higher limits available for partners β contact will@localpro.dev.
Every provider returned by the API has been verified and meets a minimum completeness threshold:
| Category | Providers | Coverage |
|---|---|---|
| Water Damage Restoration | 950+ | 49 states |
| Foundation Repair | 1,025+ | 27 states |
| Crawl Space Repair | 1,025+ | 41 states |
| Mold & Asbestos | 950+ | 21 states |
| Septic Services | 850+ | 36 states |
| Basement Waterproofing | 600+ | 26 states |
| Laundry Services | 550+ | 39 states |
| Floor Coating | 500+ | 42 states |
| Radon | 250+ | 15 states |
Additional fields (pricing, certifications, coverage area, years in business, opening hours, a review summary, AI summary) are available on most providers but not guaranteed. Fields without data return explicit null β never omitted, never empty strings.
Directory data is refreshed weekly via the scraping pipeline. Google Places data (ratings, reviews, opening hours, business status) is refreshed quarterly via Text Search Enterprise. Two additional categories are being prepared for launch.
LocalPro runs as a Cloudflare Worker with a D1 database binding. To deploy your own instance:
Requires a Cloudflare account with a D1 database named laced-directory.
LocalPro is built and operated by Laced Labs LLC.
MIT
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/localpro-verified-us-local-service-provider-data)<a href="https://allmcps.com/mcp/localpro-verified-us-local-service-provider-data"><img src="https://allmcps.com/api/badge/localpro-verified-us-local-service-provider-data?style=directory" alt="LocalPro β Verified US Local Service Provider Data on AllMCPs" /></a>