Playwright MCP Server
mcp.so:gsan12345/permitintel
Score: 90/100
Handshake verified by our own probe.
How to earn +10 points
Tools · 31
Wraps GET /api/v1/verify/license. Verify one contractor license against the Florida DBPR record: status, license type, effective and expiration dates, whether it is currently active, days to expiry, a…
Wraps GET /api/v1/permits. Search ingested building-permit records. SEVEN modes, exactly one of which is required: `address` for permits at a street address; `contractor` for a contractor's permit his…
Wraps GET /api/v1/contractors. Look up Florida contractors with their permit activity rolled up: permit count, declared value, activity in the last 12 months, first and last permit dates, top trades, …
Wraps GET /api/v1/roof/{address}. Roof state for one property address: roof age in years derived from the most recent roof permit on record, the date of that permit, and roof material with its source …
Wraps GET /api/v1/rollups. Grouped permit totals for a place instead of a list of permits: set `group` to `county` (with `state`), `zip` (with `county`) or `jurisdiction` (with `state` or `county`), a…
Wraps GET /api/v1/supply/accounts. Ranks Florida-licensed contractors in ONE territory as supplier sales accounts: permits and declared value in the trailing 12 months, momentum (last 90 days versus t…
Wraps GET /api/v1/permits/{id}. One permit by the numeric `id` that search_permits puts on every row, with the matched contractor and its contact included by default. The id is the internal id, NOT th…
Wraps GET /api/v1/contractors/{license}. One contractor profile keyed by DBPR license number, the same profile lookup_contractor returns for `license`, plus `recent_permits` (the 10 newest permits on …
Wraps GET /api/v1/jurisdictions. The jurisdiction codes you can pass to search_permits `jurisdiction` and `county`, so a code is never guessed. Narrow with `state` (two letters), `county` (a code pref…
Wraps GET /api/v1/usage. What the calling key has spent this month: tier, records used, the monthly records limit and what remains, when it resets, and the requests-per-minute limit. Costs 0 records a…
Wraps GET /api/v1/coverage. The machine-readable /coverage page: the headline totals and the per-state counts for everyone, and with a key the per-jurisdiction place list. Costs 0 records on any plan.…
Wraps GET /api/v1/verify/insurance. Coverage status and lapse intel for one licensed business: workers' compensation status (`wc_status`), carrier, policy effective and expiration dates and cancellati…
Wraps GET /api/v1/verify/certifications. Compliance badges for one licensed business in a single call: EPA RRP lead-safe renovation certification and Florida OSD minority or disadvantaged business des…
Wraps GET /api/v1/properties/{address}/risk-insurance. A property-condition and insurance-risk summary for one address derived from the permit history held: roof age, last roof permit date, major-syst…
Wraps GET /api/v1/roof/{address}/evidence. The citation layer behind roof_lookup: the roof permit records on file for one address, each with permit number, jurisdiction, issue date, status, contractor…
Wraps GET /api/v1/roof/coverage. The coverage table behind roof coverage grades: without a key the totals and the A/B/C histogram, with a key the per-jurisdiction rows (property counts, roof-age fill …
Wraps GET /api/v1/roof/structure. Roof geometry — hip, gable, complex, flat or unknown — the signal Florida wind-mitigation credits price off. Look up by `address` (+ `zip`) or by `parcel` + `jurisdic…
Wraps POST /api/v1/roof/batch. Roof age and material for a book of addresses in one call: `items` is 1 to 1,000 objects of { address, zip? } (street line or full one-line address). Costs 1 record per …
Wraps GET /api/v1/monitors. The calling key's always-on license monitors: id, license, the events watched, webhook URL and whether it is active. Costs 1 record per monitor returned. Growth and up; a t…
Wraps POST /api/v1/monitors. WRITE — creates (or reactivates) an always-on monitor on one license for the calling key. `events` is a subset of license_lapse, insurance_lapse, new_permit, cert_expiry (…
Wraps DELETE /api/v1/monitors/{id}. WRITE (destructive) — removes one monitor owned by the calling key, by the id list_monitors or create_monitor returned. Costs 0 records. Growth and up.
Wraps GET /api/v1/monitors/{id}/events. The events one of the calling key's monitors has detected (license lapse, insurance lapse, new permit, certification expiry), for callers without a webhook. `si…
Wraps GET /api/v1/supply/book. The saved accounts in the calling key's supplier book of business, each enriched with live supply intelligence. Filter with `status` (prospect, contacted, active, won, l…
Wraps POST /api/v1/supply/book. WRITE — saves one contractor license to the calling key's book of business, with optional pipeline `status`, owning `rep_id`, `notes`, and `watch=true` to monitor it (n…
Wraps PATCH /api/v1/supply/book. WRITE — updates one saved account by `license`: any of `status`, `rep_id`, `notes`, `watch`, `webhook_url`; fields you omit are left unchanged. Costs 0 records. Growth…
Wraps DELETE /api/v1/supply/book. WRITE (destructive) — removes one account from the calling key's book by `license`, and tears down its watch. Costs 0 records. Growth and up.
Wraps GET /api/v1/supply/reps. The calling key's sales reps, oldest first, each with the `id` you pass as `rep_id` to a book entry or territory. Costs 1 record per rep returned. Growth and up.
Wraps POST /api/v1/supply/reps. WRITE — adds one sales rep (`name`, optional `email`) to the calling key's organization. Costs 0 records: the response echoes your own input. Growth and up.
Wraps GET /api/v1/supply/territories. The calling key's saved territories — named, reusable supply_accounts filters (county, trade, momentum, grade, minimum permits, owning rep). A territory stores th…
Wraps POST /api/v1/supply/territories. WRITE — saves one named territory: a reusable supply_accounts filter of `county`, `trade`, `momentum`, `grade` and `min_permits_12mo`, optionally owned by `rep_i…
Wraps DELETE /api/v1/supply/territories. WRITE (destructive) — deletes one saved territory by `id`. Costs 0 records. Growth and up.
How to use
Claude Desktop or claude.ai: add a custom connector (Customize → Connectors; on Team and Enterprise plans an owner adds it under Organization settings → Connectors) with this server URL: https://permitintel.ai/api/mcp
Cursor or Cline: add to your MCP config:
{
"mcpServers": {
"playwright_mcp_server": {
"url": "https://permitintel.ai/api/mcp",
"transport": "http"
}
}
}