LocalPro MCP server
2026년 11월 13일 커밋10가지 홈 서비스 업종에 걸친 검증된 미국 현지 서비스 제공업체 데이터를 AI agent에게 제공합니다.
다른 이름 LocalProDev/mcp-server, mcp-server
- 스타
- 1
- Tools
- 6
- 다운로드, 30일
- —
- 최신 버전
- 3.1.0
- 마지막 커밋
- 2026년 11월 13일
- 라이선스
- MIT
LocalPro MCP란?
LocalPro은(는) MCP server입니다. 10가지 홈 서비스 업종에 걸친 검증된 미국 현지 서비스 제공업체 데이터를 AI agent에게 제공합니다. 6개 도구를 제공합니다. 예: niche_id, state, city.
프로젝트 README에서 생성된 요약
LocalPro MCP server 정보
LocalPro는 미국 내 9,000개 이상의 검증된 현지 서비스 제공업체 데이터베이스를 AI agent에게 제공합니다. 이 MCP server는 수해 복구, 기초 수리, 라돈 완화, 바닥 코팅을 포함한 10가지 특정 홈 서비스 카테고리를 지원합니다. 비즈니스 설명, 서비스 목록, LocalPro 평점을 포함한 상세 프로필을 제공하여 AI 어시스턴트가 신뢰할 수 있는 계약자를 찾을 수 있도록 설계되었습니다.
개발자는 원격 HTTP transport를 사용하여 이 server를 Claude Code, Claude Desktop 또는 Cursor에 통합할 수 있습니다. 주요 검색 및 목록 도구는 공개되어 있어 API key가 필요 없지만, 사용자는 get_provider 도구를 통해 특정 가격 배열이나 전문 자격증과 같은 프리미엄 필드에 접근할 수 있는 선택적 API key를 제공할 수 있습니다. 시스템은 agent가 먼저 니치(niche)를 탐색한 다음, 도시와 서비스 유형을 식별하고 최종 검색을 수행하는 구조화된 방식을 사용합니다.
활용 사례
- 1현지 라돈 전문가 찾기AI agent가 Denver와 같은 특정 도시의 라돈 완화 업체를 검색할 수 있습니다.
- 2상세 계약자 자격 정보 조회agent가 단일 제공업체에 대한 자격증 및 가격 모델을 포함한 특정 비즈니스 세부 정보를 가져올 수 있습니다.
- 3특정 서비스 유형별 필터링사용자가 특정 니치 내에서 에폭시 바닥 코팅과 같은 특정 작업으로 검색 결과 범위를 좁힐 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
LocalPro MCP 설치 방법
형식 확인: 2026년 11월 10일Claude Code에 LocalPro MCP 설치
$ claude mcp add --transport http mcp-server https://mcp.localpro.dev/mcpCursor에 LocalPro MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"mcp-server": {
"url": "https://mcp.localpro.dev/mcp"
}
}
}VS Code에 LocalPro MCP 설치
.vscode/mcp.json
{
"servers": {
"mcp-server": {
"type": "http",
"url": "https://mcp.localpro.dev/mcp"
}
}
}Codex에 LocalPro MCP 설치
~/.codex/config.toml
[mcp_servers.mcp-server] url = "https://mcp.localpro.dev/mcp"
Gemini CLI에 LocalPro MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"mcp-server": {
"httpUrl": "https://mcp.localpro.dev/mcp"
}
}
}LocalPro MCP 도구 6
README에서 감지됨niche_idstatecityservice_typelimitprovider_slug
| niche_id | — | |
| state | — | |
| city | — | |
| service_type | — | |
| limit | — | |
| provider_slug | — |
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식
- 소스 저장소 연결 및 접근 가능localprodev/mcp-server is public and reachablegithub.com/localprodev/mcp-server ↗통과
- 패키지가 이 저장소를 소스로 지정검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-13github.com/localprodev/mcp-server ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지와 의존성에 심각한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음6 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 endpoint가 MCP 핸드셰이크에 응답initialize answered with protocol 2025-06-18 in 134 ms통과
README
GitHub에서 보기LocalPro MCP Server
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.
What it does
LocalPro exposes a curated database of 9,000+ fully profiled local trade and service businesses across 10 live categories. Every provider passes a quality check before it is served, and carries a LocalPro Rating, a business description, and a services list, plus (where available) LocalPro-written business and review summaries. No incomplete profiles.
All data is LocalPro-owned: collected and verified by us, corrected by business owners who claim their listing, and increasingly backed by first-party customer reviews left on the directories themselves.
Live Now
| Category | Niche ID | Providers | States | Example Services |
|---|---|---|---|---|
| Water Damage Restoration | soaked-local |
1,850+ | 49 | Flood cleanup, mold remediation, structural drying |
| Commercial Electrical | hire-electrical |
1,150+ | 35 | Commercial & industrial wiring, service upgrades, maintenance |
| Foundation Repair | slab-local |
1,050+ | 28 | Pier installation, mudjacking, foam injection, leveling |
| Crawl Space Repair | crawl-local |
1,000+ | 42 | Encapsulation, vapor barrier, structural repair, waterproofing |
| Mold & Asbestos | abate-local |
975+ | 24 | Mold, asbestos, lead paint remediation |
| Septic Services | pump-local |
850+ | 31 | Pumping, inspection, drain field repair |
| Basement Waterproofing | basement-local |
625+ | 25 | Interior/exterior waterproofing, drainage, sump pumps |
| Floor Coating | coated-local |
575+ | 48 | Epoxy, polyaspartic, metallic, flake, concrete polishing |
| Laundry Services | suds-local |
575+ | 39 | Wash & fold, dry cleaning, pickup & delivery |
| Radon | radon-local |
250+ | 18 | Testing, mitigation, sub-slab depressurization |
Coming Soon
| Category | Niche ID | Status |
|---|---|---|
| Chimney Services | chimney-local |
Live provider data; description + service enrichment in progress |
| Well Water Services | wellwater-local |
Provider data in preparation (county-based model) |
Quick Start
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.
60-second probe
Confirm the server is live without any client setup:
curl -s https://mcp.localpro.dev/.well-known/mcp.json | head -20
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.
Claude Code CLI
claude mcp add --transport http localpro https://mcp.localpro.dev/mcp
That's it — list_niches, search_providers, etc. are now available in your Claude Code session.
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"localpro": {
"url": "https://mcp.localpro.dev/mcp"
}
}
}
(Add an "X-API-Key" header inside a "headers" block only if you have a premium key.)
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"localpro": {
"url": "https://mcp.localpro.dev/mcp"
}
}
}
Raw HTTP (JSON-RPC)
The MCP protocol is JSON-RPC over HTTP. Because this server runs in stateless mode, you can call any public tool directly:
curl -s -X POST https://mcp.localpro.dev/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_niches","arguments":{}}}'
You'll get back a Server-Sent-Events frame with the 10 niches, their slugs, and current provider counts.
TypeScript SDK
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
const transport = new StreamableHTTPClientTransport(
new URL('https://mcp.localpro.dev/mcp'),
);
const client = new Client({ name: 'localpro-example', version: '1.0' });
await client.connect(transport);
const niches = await client.callTool({ name: 'list_niches', arguments: {} });
console.log(niches);
const denver = await client.callTool({
name: 'search_providers',
arguments: { niche_id: 'radon-local', city: 'denver-co', limit: 3 },
});
console.log(denver);
Install: npm i @modelcontextprotocol/sdk
Python SDK
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
async with streamablehttp_client("https://mcp.localpro.dev/mcp") as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
niches = await session.call_tool("list_niches", {})
print(niches)
denver = await session.call_tool(
"search_providers",
{"niche_id": "radon-local", "city": "denver-co", "limit": 3},
)
print(denver)
asyncio.run(main())
Install: pip install mcp
Tools
list_niches
Discover available service directories. Call this first.
Parameters: none
Example response:
{
"meta": {
"schema_version": "3.0",
"total_results": 10,
"niche": null,
"data_freshness": {
"last_verified_at": "2026-09-22 12:57:07"
},
"data_note": "Use niche_id values with search_providers, list_cities, and list_service_types."
},
"results": [
{
"niche_id": "soaked-local",
"name": "Water Damage Restoration Contractors",
"slug": "water-damage-restoration",
"domain": "soakedlocal.com",
"provider_count": 1128
}
]
}
list_cities
Find 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:
{ "niche_id": "radon-local", "state": "CO" }
Example response:
{
"meta": {
"schema_version": "1.0",
"total_results": 3,
"niche": "radon-local",
"data_note": "Use slug values with search_providers city parameter."
},
"results": [
{ "name": "Denver", "state": "CO", "slug": "denver-co", "provider_count": 18 },
{ "name": "Colorado Springs", "state": "CO", "slug": "colorado-springs-co", "provider_count": 7 },
{ "name": "Fort Collins", "state": "CO", "slug": "fort-collins-co", "provider_count": 4 }
]
}
list_service_types
Get 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:
{
"meta": { "schema_version": "1.0", "total_results": 7, "niche": "coated-local" },
"results": [
{ "type": "epoxy", "label": "Epoxy Floor Coating" },
{ "type": "polyaspartic", "label": "Polyaspartic Coating" },
{ "type": "metallic_epoxy", "label": "Metallic Epoxy" },
{ "type": "flake_chip", "label": "Flake / Chip Broadcast" },
{ "type": "concrete_polishing", "label": "Concrete Polishing" },
{ "type": "concrete_sealing", "label": "Concrete Sealing" },
{ "type": "polyurea", "label": "Polyurea Coating" }
]
}
search_providers
Search 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:
{ "niche_id": "coated-local", "city": "denver-co", "service_type": "epoxy", "limit": 3 }
Example response:
{
"meta": {
"schema_version": "3.0",
"total_results": 3,
"niche": "coated-local",
"data_freshness": {
"last_verified_at": "2026-09-18 09:41:02"
},
"data_note": "Verified providers only. Visit listing_url for full contact details."
},
"results": [
{
"name": "Colorado Concrete Coatings",
"description": "Full-service garage floor coating company serving the Denver metro.",
"city": "Denver",
"state": "CO",
"rating": { "tier": "established", "label": "Established" },
"services": [
{ "type": "epoxy", "label": "Epoxy Floor Coating" },
{ "type": "polyaspartic", "label": "Polyaspartic Coating" }
],
"pricing_summary": "$6-9/sq ft",
"coverage_area": "Denver metro, Front Range, 50-mile radius",
"years_in_business": 8,
"listing_url": "https://coatedlocal.com/providers/denver-co/colorado-concrete-coatings/",
"pro_available": true
}
]
}
get_provider
Get 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:
{
"meta": {
"schema_version": "3.0",
"total_results": 1,
"niche": "coated-local",
"data_freshness": { "last_verified_at": "2026-09-18 09:41:02" }
},
"results": [
{
"name": "Colorado Concrete Coatings",
"description": "Full-service garage floor coating company...",
"rating": { "tier": "established", "label": "Established", "star": 4.8, "review_count": 12 },
"summary": "Full-service epoxy floor coating contractor specializing in garage and commercial floors across the Denver metro.",
"review_summary": "Customers single out on-time, on-budget garage and commercial floor jobs and a crew that cleans up after itself.",
"years_in_business": 8,
"services": [
{ "type": "epoxy", "label": "Epoxy Floor Coating" },
{ "type": "polyaspartic", "label": "Polyaspartic Coating" }
],
"pricing": ["$6-9/sq ft"],
"certifications": ["Penntek Certified Installer"],
"coverage_area": "Denver metro, Front Range",
"service_areas": [
{ "city": "Denver", "state": "CO", "radius_miles": 50 }
],
"service_details": [
{
"type": "epoxy",
"label": "Epoxy Floor Coating",
"pricing_model": "per_sqft",
"price_range": "$6–$9",
"turnaround": "two_day"
}
],
"listing_url": "https://coatedlocal.com/providers/denver-co/colorado-concrete-coatings/",
"json_ld": { "@context": "https://schema.org", "@type": "LocalBusiness", "...": "..." },
"credibility": { "verified": true, "listing_tier": "claimed", "data_sources": ["business_website", "owner_verified", "customer_reviews"] },
"citation": { "display_name": "Colorado Concrete Coatings — Denver, CO", "...": "..." }
}
]
}
Schema Reference
Response Envelope
Every response is wrapped in a consistent envelope:
{
meta: {
schema_version: string // Currently "3.0"
total_results: number // Count of items in results array
niche: string | null // Niche ID if applicable
data_freshness: {
last_verified_at: string | null // Most recent verification date among the records returned
}
data_note: string // Context about the data returned
}
results: Array<T> // Tool-specific result objects
}
Freshness. last_verified_at is the date LocalPro last verified the newest record in the response. Each provider carries its own verification date in credibility.verification_date.
Migrating from 2.x: rating is now an object (the LocalPro Rating) rather than a number; review_count moved inside it and appears only with first-party reviews. summary and review_summary are top-level strings. business_status, map links, opening hours and geo coordinates are no longer returned. data_freshness is a single last_verified_at date.
Error Response
Errors use the same envelope with an error object:
{
meta: { schema_version: string }
error: {
code: string // "NOT_FOUND" | "INTERNAL_ERROR" | "UNAUTHORIZED" | "FORBIDDEN"
message: string // Human-readable error description
}
}
Provider Fields
| 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 |
object | no | LocalPro Rating — see below (always present) |
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 }] |
summary |
string | LocalPro-written overview of the business (when available) |
review_summary |
string | LocalPro-written "what customers say" summary; no raw review text or reviewer PII (when available) |
json_ld |
object | Schema.org LocalBusiness JSON-LD; AggregateRating included only when backed by first-party reviews |
credibility |
object | { verified, listing_tier, verification_date, data_sources } |
citation |
object | Pre-formatted strings: { display_name, in_text, attribution } |
rating object (LocalPro Rating):
| Field | Type | Description |
|---|---|---|
tier |
string | established / well-reviewed / reviewed / unrated: standing relative to other providers in the same category |
label |
string | Display label for the tier |
star |
number | 1.0–5.0, present only when backed by first-party customer reviews |
review_count |
number | Count of published first-party reviews, present alongside star |
Results are ranked by listing tier, then by LocalPro Rating.
Nullable Fields
Fields marked nullable return null when data is unavailable — they are never omitted from the response. Arrays return [] when empty, never null.
Access Tiers
Public (no authentication)
All search and list tools work without an API key:
list_niches,list_cities,list_service_types,search_providersget_providerreturns basic data (name, description, LocalPro Rating, services, pricing summary, listing URL)- Rate limited to 30 requests/minute per IP
Premium (API key)
Include an X-API-Key header to unlock additional data on get_provider:
- Full pricing array (vs. summary string)
- Certifications and credentials
- Rate limited to 30 requests/minute per key
X-API-Key: your-api-key
Request an API key at localpro.dev or email will@localpro.dev.
Discovery
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 details
Data Policy
- What's returned: Business name, city, state, LocalPro Rating, services, certifications, pricing ranges, coverage area, LocalPro-written business and review summaries, and a link to the full listing page.
- What's withheld: Phone numbers, email addresses, physical addresses, and websites are available only on the listing page (via
listing_url). This protects provider data while driving traffic to the directory. - Provenance: Listings are built from public business information and, where we can confirm it belongs to the business, the company's own website. Every listing passes a quality check before it is served. Owners can claim and correct their listing; customers can leave first-party reviews on the directory. Permanently closed businesses are filtered automatically.
- Freshness: Each response states when its records were last verified (
last_verified_at). Listings are re-verified as needed, not on a fixed cycle.
Rate Limits
| 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.
Data Quality
Every provider returned by the API has been verified and meets a minimum completeness threshold:
- LocalPro Rating — present on 100% of results
- Business description — present on 100% of results
- Services list — present on 100% of results
- Name, city, state — present on 100% of results
Per-category provider and state counts are in Live Now, generated from the live database.
Additional fields (pricing, certifications, coverage area, years in business, business and review summaries) are available on most providers but not guaranteed. Fields without data return explicit null — never omitted, never empty strings.
Two additional categories are being prepared for launch.
Self-Hosting
LocalPro runs as a Cloudflare Worker with a D1 database binding. To deploy your own instance:
npm install
npx wrangler secret put API_KEY # Set your production API key
npx wrangler deploy
Requires a Cloudflare account with a D1 database named laced-directory.
Operator
LocalPro is built and operated by Laced Labs LLC.
License
MIT
LocalPro MCP 질문
LocalPro MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add --transport http mcp-server https://mcp.localpro.dev/mcp를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
LocalPro MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
LocalPro MCP는 어떤 도구를 제공하나요?
6개 도구를 제공합니다. 예: niche_id, state, city, service_type, limit.
LocalPro를 사용하려면 API key가 필요한가요?
모든 검색 및 목록 도구는 공개되어 있으므로 API key가 필요하지 않습니다. 전체 가격 배열이나 인증 정보와 같은 pro 필드를 사용하려면 선택 사항으로 API key를 사용할 수 있습니다.