PermitStack
U.S. building permits, permit histories by address and contractors from city and county records.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"permits": {
"url": "https://mcp.permit-stack.com/mcp"
}
}
}원격 엔드포인트
https://mcp.permit-stack.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (6)
🟢search_permits(city, state, zip_code, category, status, ...)
Search U.S. building permits by location (city, state, ZIP code, or a lat/lng radius), category, status, property type, filing or issue date range, estimated project value, contractor name, or free text. Returns up to 25 permits per call with address, dates, category, status, estimated value, contractor and description, plus the total number of matches. Response fields: `total` is exact unless `total_capped` is true, in which case it is a lower bound; when `total_unknown` is true the count could not be computed and `total` is null. `account_window_clamped`, `account_window_days` and `account_window_from` are set when the connected account covers a limited date range, and the results then cover only that range. Category HVAC also matches MECHANICAL, and MECHANICAL also matches HVAC. date_after/date_before match whichever date a permit has (issued, else filed), for feeds that publish only one of the two. Results carry no property owner name, owner mailing address or permit applicant name fields.
입력 스키마
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name, e.g. 'Austin', 'Boston', 'Miami-Dade County'"
},
"state": {
"type": "string",
"description": "Two-letter US state code, e.g. 'TX', 'MA', 'FL'"
},
"zip_code": {
"type": "string",
"description": "5-digit ZIP code"
},
"category": {
"type": "string",
"description": "Permit category (case-insensitive). Common values: SOLAR, ROOFING, HVAC, NEW_CONSTRUCTION, POOL, ELECTRICAL, PLUMBING, DEMOLITION, MECHANICAL, RENOVATION."
},
"status": {
"type": "string",
"description": "Permit status, e.g. 'ISSUED', 'FINAL', 'EXPIRED', 'FILED'"
},
"jurisdiction": {
"type": "string",
"description": "Jurisdiction name or partial name, e.g. 'Wake County', 'Tacoma'"
},
"property_type": {
"type": "string",
"description": "Property type, one of: residential, commercial, industrial, mixed_use, institutional, unknown (case-insensitive)"
},
"filed_after": {
"type": "string",
"description": "ISO date (YYYY-MM-DD): only permits filed on or after this date"
},
"filed_before": {
"type": "string",
"description": "ISO date (YYYY-MM-DD): only permits filed on or before this date"
},
"issued_after": {
"type": "string",
"description": "ISO date (YYYY-MM-DD): only permits issued on or after this date"
},
"issued_before": {
"type": "string",
"description": "ISO date (YYYY-MM-DD): only permits issued on or before this date"
},
"date_after": {
"type": "string",
"description": "ISO date (YYYY-MM-DD): only permits dated on or after this date, using the issue date, else the filing date"
},
"date_before": {
"type": "string",
"description": "ISO date (YYYY-MM-DD): only permits dated on or before this date, using the issue date, else the filing date"
},
"min_value": {
"type": "number",
"description": "Minimum estimated project value in dollars"
},
"max_value": {
"type": "number",
"description": "Maximum estimated project value in dollars"
},
"lat": {
"type": "number",
"description": "Latitude for radius search (use with lng)"
},
"lng": {
"type": "number",
"description": "Longitude for radius search (use with lat)"
},
"radius_miles": {
"type": "number",
"description": "Radius in miles for lat/lng search (max 50, default 5)"
},
"q": {
"type": "string",
"description": "Free-text search over description, address, and permit number"
},
"contractor_name": {
"type": "string",
"description": "Filter by contractor name (partial match supported)"
},
"per_page": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 25,
"description": "Results per page (default 25, max 25)"
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Page number, 1-based (default 1)"
},
"start": {
"type": "integer",
"minimum": 1,
"description": "Instead of page: 1-based position of the first result to return, e.g. start=24 continues after result 23 (as named in `_notes`)"
}
},
"additionalProperties": false
}🟢get_permit(permit_number, city, state)
Look up a permit by the permit number assigned by the issuing jurisdiction, optionally narrowed by city and state. The number is matched exactly (ignoring case), and the same number can exist in several jurisdictions, so up to 5 matching permits are returned; give the city or state to tell them apart. If nothing matches exactly and a city or state was given, permits in that place whose number contains the text are returned instead, and `match` says "partial". When the connected account covers a limited date range, `account_window_from` is set and only permits from that date onward are searched. Results carry no property owner name, owner mailing address or permit applicant name fields.
입력 스키마
{
"type": "object",
"properties": {
"permit_number": {
"type": "string",
"description": "The permit number from the issuing jurisdiction"
},
"city": {
"type": "string",
"description": "City where the permit was issued (optional, narrows the match)"
},
"state": {
"type": "string",
"description": "Two-letter state code (optional, narrows the match)"
}
},
"required": [
"permit_number"
],
"additionalProperties": false
}🟢get_property_history(address, city, state, zip, per_page, ...)
Permit history for one property, looked up by street address (house number and street name, e.g. '123 Main St'). Optional city, state and ZIP narrow the match when the same street address exists in several places. Returns a property profile (permit timeline, category breakdown, contractors) and up to 25 permit records per page, newest first; `has_more` says whether the next page has more. Covers all permit categories. When the connected account covers a limited date range, the profile and records cover only that range, `account_window_from` is set, and `_notes` says so: the result is then not the property's full permit history. Results carry no property owner name, owner mailing address or permit applicant name fields.
입력 스키마
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "Street address with house number, e.g. '123 Main St' (min 3 characters)"
},
"city": {
"type": "string",
"description": "Optional city, to tell identical street addresses apart"
},
"state": {
"type": "string",
"description": "Optional two-letter state code"
},
"zip": {
"type": "string",
"description": "Optional ZIP code (prefix-matched)"
},
"per_page": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 25,
"description": "Results per page (default 25, max 25)"
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Page number, 1-based (default 1)"
},
"start": {
"type": "integer",
"minimum": 1,
"description": "Instead of page: 1-based position of the first result to return, e.g. start=24 continues after result 23 (as named in `_notes`)"
}
},
"required": [
"address"
],
"additionalProperties": false
}🟢search_contractors(name, city, state, specialty, min_permits, ...)
Search contractors by name, city, state or specialty. Returns up to 25 contractors per call with the contractor UUID, name, licence number and licence state, home city and state, total permit count, first and last permit dates, specialties and activity score (0-100), sorted by activity score (highest first). Project values are not included; get_contractor_permits lists a contractor's permits with their estimated values.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Contractor name (partial match)"
},
"city": {
"type": "string",
"description": "City where the contractor has worked"
},
"state": {
"type": "string",
"description": "Two-letter state code"
},
"specialty": {
"type": "string",
"description": "Specialty/trade to filter by, e.g. 'solar', 'roofing', 'hvac'"
},
"min_permits": {
"type": "integer",
"minimum": 0,
"description": "Only contractors with at least this many permits"
},
"per_page": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 25,
"description": "Results per page (default 25, max 25)"
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Page number, 1-based (default 1)"
},
"start": {
"type": "integer",
"minimum": 1,
"description": "Instead of page: 1-based position of the first result to return, e.g. start=24 continues after result 23 (as named in `_notes`)"
}
},
"additionalProperties": false
}🟢get_contractor_permits(contractor_id, per_page, page, start)
List the permits pulled by one contractor, identified by the contractor UUID from search_contractors. Returns up to 25 permits per page with the contractor's work history fields (dates, categories, values). Results carry no property owner name, owner mailing address or permit applicant name fields.
입력 스키마
{
"type": "object",
"properties": {
"contractor_id": {
"type": "string",
"description": "Contractor UUID from search_contractors results"
},
"per_page": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 25,
"description": "Results per page (default 25, max 25)"
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Page number, 1-based (default 1)"
},
"start": {
"type": "integer",
"minimum": 1,
"description": "Instead of page: 1-based position of the first result to return, e.g. start=24 continues after result 23 (as named in `_notes`)"
}
},
"required": [
"contractor_id"
],
"additionalProperties": false
}🟢get_coverage(state, name)
Describe PermitStack's coverage: total permits, jurisdictions (active, archive, frozen) and states. On a signed-in connection it also lists covered jurisdictions with their permit counts, county and `data_through` (the date of the newest permit held), filterable by state and by name, up to 25 per call, largest first. Without sign-in it returns the platform totals only.
입력 스키마
{
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "Optional two-letter state code to list only that state's jurisdictions"
},
"name": {
"type": "string",
"description": "Optional text matched against jurisdiction names, e.g. 'Austin' or 'County'"
}
},
"additionalProperties": false
}커뮤니티
증거