Insurance Book Monitoring
Re-screen a list of insured properties for flood, wildfire and severe-weather exposure in batches, and route anything that crosses a threshold to manual review.
A list of locations (batch) · Tools: fetch_batch, get_usage
· 1 lookup per property (13 fields). Check get_usage before a large book.
Example prompt
“Here are 40 policy addresses from our coastal book. Re-screen them and give me the ones that are now in a FEMA high-risk flood zone or within 2 km of a past wildfire.”
Or pick the insurance_book_monitoring prompt from the Isopleth MCP server in your client.
How it works
- Call get_usage first and confirm the book fits in the remaining lookups and the plan's batch size; if not, tell the user how many locations will run and stop for confirmation.
- Split the list into chunks no larger than the plan's max_batch (smaller chunks of 10 to 25 are kinder to slow upstream sources) and call fetch_batch for each chunk with the fields listed below. Pass an idempotency_key per chunk so a retry is not charged twice.
- Results are index-aligned with the input. Keep the policy id or input row with each result.
- Flag a property for review when: within_floodplain_polygon is true, the flood zone starts with A or V, coastal_high_hazard is true, a past fire perimeter is within 2,000 m, or the fire hazard severity zone is High or Very High (the fire fields come from CAL FIRE, so outside California lean on wildfire_annual_frequency and tree_canopy_pct). Let the user change these thresholds.
- Locations with ok false or with partial_failures go to a retry list, not the clear list.
Fields used
within_floodplain_polygon: True when this point lies inside a FEMA Special Flood Hazard Area (the 1%-annual-chance floodplain) in the National Flood Hazard Layer.nfhl_flood_zone: FEMA flood zone code at this point from the National Flood Hazard Layer, such as AE, A, AO, VE or X. Where several zones overlap, the one that sets the flood-insurance requirement is used.coastal_high_hazard: True when the FEMA flood zone here is a V zone (V, VE, V1-30): a coastal area exposed to waves 3 feet or higher.coast_distance_m: Distance in meters to the closest tidal shoreline NOAA maps, including bays, estuaries, tidal rivers and harbor structures. A small number can mean a tidal river far from the open sea, so use open_ocean_distance_m for ocean exposure.elevation: Height of the ground at this point in meters, relative to the NAVD88 datum. Read from the USGS 3D Elevation Program 10 m elevation model; the USGS point-query service fills gaps.intersects_wetland: True when this point lies inside a wetland mapped by the U.S. Fish and Wildlife Service National Wetlands Inventory.fire_hazard_severity_zone_class: California's official Fire Hazard Severity Zone at this point (Moderate, High, Very High, or Non-Wildland), as mapped by CAL FIRE's Office of the State Fire Marshal. California only.nearest_fire_perimeter_distance_m: Distance in meters from this point to the edge of the closest past wildfire in CAL FIRE's FRAP fire perimeter history. 0 when the point is inside a burned area.most_recent_burn_year: Year of the most recent wildfire in CAL FIRE's FRAP history that burned this point, or of the nearest fire when none covered it.wildfire_annual_frequency: Expected wildfire events per year for the census tract containing this point, from the FEMA National Risk Index.tree_canopy_pct: Percent of the ground covered by tree canopy (0 to 100) from the USFS/NLCD Tree Canopy Cover product, sampled on an approximately 120 m grid. Lower 48 states.tornado_annual_frequency: Expected tornado events per year for the census tract containing this point, from the FEMA National Risk Index.hail_annual_frequency: Expected hail events per year for the census tract containing this point, from the FEMA National Risk Index.
Tool call
What the agent sends to fetch_batch:
{
"locations": [
{
"address": "100 Main St, Anytown, FL"
},
{
"lat": 29.95,
"lng": -90.07
}
],
"fields": [
"within_floodplain_polygon",
"nfhl_flood_zone",
"coastal_high_hazard",
"coast_distance_m",
"elevation",
"intersects_wetland",
"fire_hazard_severity_zone_class",
"nearest_fire_perimeter_distance_m",
"most_recent_burn_year",
"wildfire_annual_frequency",
"tree_canopy_pct",
"tornado_annual_frequency",
"hail_annual_frequency"
],
"idempotency_key": "book-2026-q4-chunk-001"
}
Output
Three lists: flagged for review (with the reason for each flag), clear, and retry later. Include the lookups used.
SKILL.md
Save this as isopleth-insurance-book-monitoring/SKILL.md in your agent's skills folder
(for Claude Code, ~/.claude/skills/), or download it.
---
name: isopleth-insurance-book-monitoring
description: Re-screen a list of insured properties for flood, wildfire and severe-weather exposure in batches, and route anything that crosses a threshold to manual review. Uses the Isopleth MCP server (https://api.isopleth.dev/mcp).
---
# Insurance Book Monitoring
Re-screen a list of insured properties for flood, wildfire and severe-weather exposure in batches, and route anything that crosses a threshold to manual review.
## Requirements
- The Isopleth MCP server connected at `https://api.isopleth.dev/mcp` with an API key in the `Authorization: Bearer` header (see https://isopleth.dev/docs/mcp).
- Tools used: `fetch_batch`, `get_usage`.
- Cost: 1 lookup per property (13 fields). Check get_usage before a large book.
## Steps
1. Call get_usage first and confirm the book fits in the remaining lookups and the plan's batch size; if not, tell the user how many locations will run and stop for confirmation.
2. Split the list into chunks no larger than the plan's max_batch (smaller chunks of 10 to 25 are kinder to slow upstream sources) and call fetch_batch for each chunk with the fields listed below. Pass an idempotency_key per chunk so a retry is not charged twice.
3. Results are index-aligned with the input. Keep the policy id or input row with each result.
4. Flag a property for review when: within_floodplain_polygon is true, the flood zone starts with A or V, coastal_high_hazard is true, a past fire perimeter is within 2,000 m, or the fire hazard severity zone is High or Very High (the fire fields come from CAL FIRE, so outside California lean on wildfire_annual_frequency and tree_canopy_pct). Let the user change these thresholds.
5. Locations with ok false or with partial_failures go to a retry list, not the clear list.
## Arguments
```json
{
"fields": [
"within_floodplain_polygon",
"nfhl_flood_zone",
"coastal_high_hazard",
"coast_distance_m",
"elevation",
"intersects_wetland",
"fire_hazard_severity_zone_class",
"nearest_fire_perimeter_distance_m",
"most_recent_burn_year",
"wildfire_annual_frequency",
"tree_canopy_pct",
"tornado_annual_frequency",
"hail_annual_frequency"
]
}
```
## Output
Three lists: flagged for review (with the reason for each flag), clear, and retry later. Include the lookups used.
Every value carries its source, license and attribution. Keep the source next to each value, and show the attributions if you share the results.
Connect your agent
ChatGPT
ChatGPT connects with your Isopleth sign-in, no key needed. Custom MCP servers are available on ChatGPT web for Pro, Business, Enterprise and Edu accounts (workspace admins may need to allow them).
- Open Plugins in ChatGPT, select +, then Add custom MCP server. (Older layouts: Settings → Apps → Create, with developer mode on.)
- Name it Isopleth and enter the server URL
https://api.isopleth.dev/mcp. - Choose OAuth for authentication and leave the client ID and secret blank. ChatGPT registers itself.
- Accept the risk notice and create it. ChatGPT opens the Isopleth sign-in: enter your email, open the sign-in link we send you in the same browser, and choose Allow access.
- Start a chat, type
@and pick Isopleth.
Claude.ai (web, desktop and mobile)
Claude connects with your Isopleth sign-in too. Custom connectors are on Pro, Max, Team and Enterprise plans; on Team and Enterprise an owner adds the connector first, then each person connects their own Isopleth account.
- Go to Customize → Connectors (formerly Settings → Connectors), select Add, then Add custom connector.
- Name it Isopleth and enter
https://api.isopleth.dev/mcp. Keep the detected sign-in settings and leave the OAuth client fields blank. - Select Connect, sign in to Isopleth with your email and choose Allow access.
- Turn Isopleth on from the connectors menu in a chat. A connector added on claude.ai also shows up in Claude Desktop and the mobile apps.
How app sign-in works
- Approving an app gives it access to Isopleth's MCP tools only. It can't see your API keys or billing, and its token is refused by the REST API.
- Lookups made through an app count against your plan, with the same rate limit and daily cap as your API keys. All your connected apps share one rate limit.
- Access tokens expire after an hour and the app renews them quietly. Renewal stops after 30 days without use.
- See and disconnect apps any time under Connected apps on your dashboard. A disconnected app loses access immediately.
- Technical details: OAuth 2.1 with PKCE (S256), dynamic client registration and client ID metadata documents, and
discovery at
https://api.isopleth.dev/.well-known/oauth-protected-resource/mcp.
Claude Code
claude mcp add --transport http isopleth https://api.isopleth.dev/mcp --header "Authorization: Bearer $ISOPLETH_KEY"
Or skip the key: add it without the header, then run /mcp in Claude Code and choose to authenticate.
Claude Desktop
The simplest route is the connector set up on claude.ai, which Claude Desktop picks up. To
use an API key instead, go through the mcp-remote bridge (needs Node.js 18 or later): open Settings →
Developer → Edit Config, add this to claude_desktop_config.json, then restart Claude Desktop.
{
"mcpServers": {
"isopleth": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.isopleth.dev/mcp",
"--header",
"Authorization:${ISOPLETH_AUTH}"
],
"env": {
"ISOPLETH_AUTH": "Bearer YOUR_ISOPLETH_KEY"
}
}
}
}
Cursor
Add to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project). Leave out
headers to sign in with your Isopleth account instead of a key.
{
"mcpServers": {
"isopleth": {
"url": "https://api.isopleth.dev/mcp",
"headers": {
"Authorization": "Bearer YOUR_ISOPLETH_KEY"
}
}
}
}
VS Code (Copilot agent mode)
Add to .vscode/mcp.json. VS Code asks for the key once and stores it securely. Without the
headers block VS Code offers to sign in with your Isopleth account.
{
"servers": {
"isopleth": {
"type": "http",
"url": "https://api.isopleth.dev/mcp",
"headers": {
"Authorization": "Bearer ${input:isopleth-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "isopleth-key",
"description": "Isopleth API key",
"password": true
}
]
}
OpenAI Codex CLI
Add to ~/.codex/config.toml and export ISOPLETH_KEY in your shell.
[mcp_servers.isopleth] url = "https://api.isopleth.dev/mcp" bearer_token_env_var = "ISOPLETH_KEY"
Other MCP clients
Any client that supports Streamable HTTP works: server URL https://api.isopleth.dev/mcp, then either the header
Authorization: Bearer <your key> or the client's OAuth sign-in. Clients that only speak stdio can use
the mcp-remote bridge shown for Claude Desktop.