Free live public-safety incident map: global crime, fire, disaster, weather and news feeds
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional CityAlert API key (ca_…). Free tools work without it; a paid key unlocks real-time refresh and the history tools (get_trends, get_crime_year). Self-serve at https://cityalert.live/account
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create a shareable dashboard. Returns {id, token} — the token grants write access via PUT /api/dashboards, so save it.
Dashboard config object, e.g. {areas, categories, defaultTab}
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Create a shareable dashboard. Returns {id, token} — the token grants write access via PUT /api/dashboards, so save it.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| config* | object | Dashboard config object, e.g. {areas, categories, defaultTab} |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"config"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"config": {
"type": "object",
"description": "Dashboard config object, e.g. {areas, categories, defaultTab}",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}Full-year VPD crime data: totals and ranked neighbourhood stats. Vancouver only, 2003-present.
| Argument | Type | Description |
|---|---|---|
| year* | integer | Year, 2003 to present |
| includeIncidents | boolean | Include every incident point (large; default false) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"year"
],
"properties": {
"year": {
"type": "integer",
"maximum": 2026,
"minimum": 2003,
"description": "Year, 2003 to present"
},
"includeIncidents": {
"type": "boolean",
"description": "Include every incident point (large; default false)"
}
}
}Read a saved dashboard by id (shareable, read-only).
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Merged live incidents from all feeds plus manual reports. Filter by region key, category, group, severity, source, or bbox. Results come from a shared ~15-minute snapshot; real-time refresh requires an API key with that entitlement (details: cityalert.live/developers).
| Argument | Type | Description |
|---|---|---|
| q | string | Case-insensitive substring match on type/title/neighbourhood |
| bbox | array | [minLon, minLat, maxLon, maxLat] |
| limit | integer | Max incidents to return (default 50) |
| detail | string | Response detail. 'full' (default): every field incl. description, neighbourhood and reporter/vote metadata. 'compact': id/type/title/coords/time/severity/url only — about half the tokens, for list-style answers. |
| groups | array | Normalized subtypes to include, e.g. ['violent','property','collision','wildfire']. See group keys in the /api/incidents OpenAPI doc. |
| region | string | Focus-region key, e.g. 'vancouver' (see list_regions) |
| source | string | Feed source, e.g. 'usgs', 'gdacs', 'eccc', 'vpd', 'bcws', 'vernon-media', 'manual' |
| refresh |
Per-region safety news items, or news for an arbitrary place name.
| Argument | Type | Description |
|---|---|---|
| place | string | Place name for ad-hoc news, e.g. 'Kelowna' |
| refresh | boolean | Bypass the news cache (API keys with real-time entitlement only) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"place": {
"type": "string",
"maxLength": 60,
"description": "Place name for ad-hoc news, e.g. 'Kelowna'"
},
"refresh": {
"type": "boolean",
"description": "Bypass the news cache (API keys with real-time entitlement only)"
}
}
}Historical aggregates: VPD crime by year/month/type (6y), USGS M4+ quakes per region (10y), GDACS global events (3y), report and live snapshot stats. Use for questions about patterns over time — crime trends, quake frequency, disaster cadence. For what's happening right now, use get_incidents.
No arguments.
{
"type": "object",
"properties": {}
}List CityAlert focus regions (key, label, center, zoom, bbox). Use region keys with get_incidents.
No arguments.
{
"type": "object",
"properties": {}
}File a manual geolocated incident report (same as POST /api/reports). Reports are moderated before they appear publicly. Errors: 'report submission disabled' if the caller is blocked; 'rate limited' past 20 reports/hour via MCP.
| Argument | Type | Description |
|---|---|---|
| lat* | number | Latitude, -90 to 90 |
| lon* | number | Longitude, -180 to 180 |
| title* | string | Short headline, 1–200 chars |
| category | string | Incident category (default 'report') |
| severity | string | low | medium | high | critical (default 'medium') |
| description | string | Details, up to 2000 chars |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude, -90 to 90"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude, -180 to 180"
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Short headline, 1–200 chars"
},
"category": {
"enum": [
"crime",
"fire",
"disaster",
"weather",
"unrest",
"health",
"infra",
"alert",
"report"
],
"type": "string",
"description": "Incident category (default 'report')"
},
"severity": {
"enum": [
"low",
"medium",
"high",
"critical"
],
"type": "string",
"description": "low | medium | high | critical (default 'medium')"
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Details, up to 2000 chars"
}
}
}| boolean |
| Re-fetch upstream feeds instead of returning the shared ~15-minute snapshot. Only honored for API keys with real-time entitlement; ignored otherwise. |
| category | string | Incident category |
| minSeverity | string | Minimum severity (low < medium < high < critical) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"q": {
"type": "string",
"maxLength": 100,
"description": "Case-insensitive substring match on type/title/neighbourhood"
},
"bbox": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 4,
"minItems": 4,
"description": "[minLon, minLat, maxLon, maxLat]"
},
"limit": {
"type": "integer",
"maximum": 5000,
"minimum": 1,
"description": "Max incidents to return (default 50)"
},
"detail": {
"enum": [
"compact",
"full"
],
"type": "string",
"description": "Response detail. 'full' (default): every field incl. description, neighbourhood and reporter/vote metadata. 'compact': id/type/title/coords/time/severity/url only — about half the tokens, for list-style answers."
},
"groups": {
"type": "array",
"items": {
"type": "string"
},
"description": "Normalized subtypes to include, e.g. ['violent','property','collision','wildfire']. See group keys in the /api/incidents OpenAPI doc."
},
"region": {
"type": "string",
"description": "Focus-region key, e.g. 'vancouver' (see list_regions)"
},
"source": {
"type": "string",
"description": "Feed source, e.g. 'usgs', 'gdacs', 'eccc', 'vpd', 'bcws', 'vernon-media', 'manual'"
},
"refresh": {
"type": "boolean",
"description": "Re-fetch upstream feeds instead of returning the shared ~15-minute snapshot. Only honored for API keys with real-time entitlement; ignored otherwise."
},
"category": {
"enum": [
"crime",
"fire",
"disaster",
"weather",
"unrest",
"health",
"infra",
"alert",
"report"
],
"type": "string",
"description": "Incident category"
},
"minSeverity": {
"enum": [
"low",
"medium",
"high",
"critical"
],
"type": "string",
"description": "Minimum severity (low < medium < high < critical)"
}
}
}