PermitStack

U.S. building permits, permit histories by address and contractors from city and county records.

我该使用它吗

质量与安全性

A
描述质量
100%
模式完整度
95%
命名质量
100%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~2,382token 数(工具定义)
~2.8 KB典型响应大小
对注意力有中等影响(占 128k 上下文窗口的 1.86%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `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
}

社区

评价此服务器

证据

最近观测

已验证未记录版本6 个工具