---
name: permit-rules
description: Quote a Chicagoland town's published residential roofing rules (permit requirement, fee, inspections, ice barrier, layer limit, contractor registration, code edition), each with the town's own source URL and check date. 30 towns.
---

# Roofing Permit Rules for a Town

Each answer is taken from the municipality's own website and carries a verbatim quote,
the source URL and the date checked. A rule the town's pages do not state is reported as
"not published", never guessed. The statewide rule is in the table too: Illinois requires
a licensed roofing contractor (225 ILCS 335/9) and bars a permit to an unlicensed one
(225 ILCS 335/5(a-3)).

## Option 1: A2A agent

`POST https://chicagostormpros.com/a2a`, `SendMessage`, text `permit rules in Aurora` or
data `{"skill":"permit-rules","town":"Aurora"}`. The reply lists the seven rules with
sources and a structured data part.

## Option 2: WebMCP (in-browser)

Pages register `get_permit_rules` with a `town` argument through
`navigator.modelContext.provideContext()`.

## Option 3: Data and pages

- Table: `https://chicagostormpros.com/data/permit-matrix.json`
- Readable version: `https://chicagostormpros.com/roofing-permits/`

## Limits

The MCP gateway at `/mcp` has no permit tool; use the options above. Rules change.
Confirm with the town before work, and treat "not published" as unknown, not as "none".
