CityAlert
Server Details
Free live public-safety incident map: global crime, fire, disaster, weather and news feeds
- Status
- Healthy
- Uptime
- 34.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 8 tools
Most tools have distinct purposes: dashboards (create/get), data queries (crime/incidents/news/trends), region metadata, and report submission. get_crime_year and get_trends both return historical crime aggregates, which could cause some confusion, but their scopes differ (VPD yearly vs multi-source trends).
Tool names follow a consistent get_/create_/submit_/list_ verb pattern with clear noun objects. Minor inconsistency: create_dashboard and submit_report are actions while the rest are getters, but the pattern is still predictable and readable.
8 tools is well-scoped for a city safety data platform covering dashboards, incident data, historical trends, news, regions, and reporting. Each tool serves a distinct function without redundancy.
The surface covers core workflows: listing regions, querying incidents/trends/news, creating/reading dashboards, and submitting reports. Minor gaps include no update/delete for dashboards or reports, but the read/write essentials are present.
Available Tools
8 toolscreate_dashboardCreate dashboardInspect
Create a shareable dashboard. Returns {id, token} — the token grants write access via PUT /api/dashboards, so save it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| config | Yes | Dashboard config object, e.g. {areas, categories, defaultTab} |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| token | No |
get_crime_yearGet Vancouver crime yearRead-onlyIdempotentInspect
Full-year VPD crime data: totals and ranked neighbourhood stats. Vancouver only, 2003-present.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Year, 2003 to present | |
| includeIncidents | No | Include every incident point (large; default false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| total | Yes | |
| byType | Yes | |
| incidents | No | |
| byNeighbourhood | Yes |
get_dashboardGet dashboardRead-onlyIdempotentInspect
Read a saved dashboard by id (shareable, read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No |
get_incidentsGet live incidentsRead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Case-insensitive substring match on type/title/neighbourhood | |
| bbox | No | [minLon, minLat, maxLon, maxLat] | |
| limit | No | Max incidents to return (default 50) | |
| detail | No | 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 | No | Normalized subtypes to include, e.g. ['violent','property','collision','wildfire']. See group keys in the /api/incidents OpenAPI doc. | |
| region | No | Focus-region key, e.g. 'vancouver' (see list_regions) | |
| source | No | Feed source, e.g. 'usgs', 'gdacs', 'eccc', 'vpd', 'bcws', 'vernon-media', 'manual' | |
| refresh | No | Re-fetch upstream feeds instead of returning the shared ~15-minute snapshot. Only honored for API keys with real-time entitlement; ignored otherwise. | |
| category | No | Incident category | |
| minSeverity | No | Minimum severity (low < medium < high < critical) |
Output Schema
| Name | Required | Description |
|---|---|---|
| feeds | Yes | |
| total | Yes | |
| region | No | |
| delayed | No | |
| returned | Yes | |
| incidents | Yes | |
| delayMinutes | No | |
| textTruncated | No |
get_newsGet safety newsRead-onlyIdempotentInspect
Per-region safety news items, or news for an arbitrary place name.
| Name | Required | Description | Default |
|---|---|---|---|
| place | No | Place name for ad-hoc news, e.g. 'Kelowna' | |
| refresh | No | Bypass the news cache (API keys with real-time entitlement only) |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| place | No | |
| fetchedAt | No |
get_trendsGet historical trendsRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| crime | No | |
| gdacs | No | |
| errors | No | |
| quakes | No | |
| history | No | |
| reports | No | |
| statcan | No | |
| snapshot | No | |
| generatedAt | No |
list_regionsList focus regionsRead-onlyIdempotentInspect
List CityAlert focus regions (key, label, center, zoom, bbox). Use region keys with get_incidents.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| regions | Yes |
submit_reportSubmit incident reportInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude, -90 to 90 | |
| lon | Yes | Longitude, -180 to 180 | |
| title | Yes | Short headline, 1–200 chars | |
| category | No | Incident category (default 'report') | |
| severity | No | low | medium | high | critical (default 'medium') | |
| description | No | Details, up to 2000 chars |
Output Schema
| Name | Required | Description |
|---|---|---|
| report | Yes |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
- Changed
create_dashboard1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "token": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" +}
- Changed
get_crime_year1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "byNeighbourhood": { + "items": { + "additionalProperties": false, + "properties": { + "count": { + "type": "number" + }, + "lat": { + "type": "number" + }, + "lon": { + "type": "number" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "count", + "lat", + "lon" + ], + "type": "object" + }, + "type": "array" + }, + "byType": { + "additionalProperties": { + "type": "number" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "incidents": { + "items": { + "additionalProperties": false, + "properties": { + "approximate": { + "type": "boolean" + }, + "category": { + "type": "string" + }, + "confirms": { + "type": "number" + }, + "count": { + "type": "number" + }, + "description": { + "type": "string" + }, + "flags": { + "type": "number" + }, + "group": { + "type": "string" + }, + "id": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "lon": { + "type": "number" + }, + "nhood": { + "type": "string" + }, + "region": { + "type": "string" + }, + "reporter": { + "additionalProperties": false, + "properties": { + "confirmed": { + "type": "number" + }, + "handle": { + "type": "string" + }, + "reports": { + "type": "number" + }, + "role": { + "anyOf": [ + { + "enum": [ + "curator", + "moderator" + ], + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "handle", + "role", + "reports", + "confirmed" + ], + "type": "object" + }, + "resolves": { + "type": "number" + }, + "severity": { + "type": "string" + }, + "source": { + "type": "string" + }, + "sources": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "enum": [ + "pending", + "active", + "resolved", + "hidden" + ], + "type": "string" + }, + "time": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "source", + "category", + "type", + "title", + "lat", + "lon", + "time", + "severity" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + }, + "year": { + "type": "number" + } + }, + "required": [ + "year", + "total", + "byType", + "byNeighbourhood" + ], + "type": "object" +}
- Changed
get_dashboard1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" +}
- Changed
get_incidents6 fields changed- changed
Input schema / properties / bbox / itemsPrevious value: -falseNew value: +{ + "type": "number" +} - removed
Input schema / properties / bbox / prefixItemsRemoved value: -[ - { - "type": "number" - }, - { - "type": "number" - }, - { - "type": "number" - }, - { - "type": "number" - } -] - added
Input schema / properties / detailAdded value: +{ + "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.", + "enum": [ + "compact", + "full" + ], + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Max incidents to return (default 250)"New value: +"Max incidents to return (default 50)" - changed
Input schema / properties / refresh / descriptionPrevious value: -"Bypass the feed cache and re-fetch sources"New value: +"Re-fetch upstream feeds instead of returning the shared ~15-minute snapshot. Only honored for API keys with real-time entitlement; ignored otherwise." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "delayMinutes": { + "type": "number" + }, + "delayed": { + "type": "boolean" + }, + "feeds": { + "additionalProperties": false, + "properties": { + "count": { + "type": "number" + }, + "failed": { + "items": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "source": { + "type": "string" + } + }, + "required": [ + "source" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "count", + "failed" + ], + "type": "object" + }, + "incidents": { + "items": { + "additionalProperties": false, + "properties": { + "approximate": { + "type": "boolean" + }, + "category": { + "type": "string" + }, + "confirms": { + "type": "number" + }, + "count": { + "type": "number" + }, + "description": { + "type": "string" + }, + "flags": { + "type": "number" + }, + "group": { + "type": "string" + }, + "id": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "lon": { + "type": "number" + }, + "nhood": { + "type": "string" + }, + "region": { + "type": "string" + }, + "reporter": { + "additionalProperties": false, + "properties": { + "confirmed": { + "type": "number" + }, + "handle": { + "type": "string" + }, + "reports": { + "type": "number" + }, + "role": { + "anyOf": [ + { + "enum": [ + "curator", + "moderator" + ], + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "handle", + "role", + "reports", + "confirmed" + ], + "type": "object" + }, + "resolves": { + "type": "number" + }, + "severity": { + "type": "string" + }, + "source": { + "type": "string" + }, + "sources": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "enum": [ + "pending", + "active", + "resolved", + "hidden" + ], + "type": "string" + }, + "time": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "source", + "category", + "type", + "title", + "lat", + "lon", + "time", + "severity" + ], + "type": "object" + }, + "type": "array" + }, + "region": { + "type": "string" + }, + "returned": { + "type": "number" + }, + "textTruncated": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "returned", + "incidents", + "feeds" + ], + "type": "object" +}
- Changed
get_news2 fields changed- changed
Input schema / properties / refresh / descriptionPrevious value: -"Bypass the news cache"New value: +"Bypass the news cache (API keys with real-time entitlement only)" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "fetchedAt": { + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "image": { + "type": "string" + }, + "link": { + "type": "string" + }, + "published": { + "type": "string" + }, + "region": { + "type": "string" + }, + "regionLabel": { + "type": "string" + }, + "source": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "link", + "source", + "published" + ], + "type": "object" + }, + "type": "array" + }, + "place": { + "type": "string" + } + }, + "required": [ + "items" + ], + "type": "object" +}
- Changed
get_trends1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "crime": { + "anyOf": [ + { + "additionalProperties": false, + "properties": {}, + "type": "object" + }, + { + "type": "null" + } + ] + }, + "errors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "gdacs": { + "items": { + "additionalProperties": false, + "properties": {}, + "type": "object" + }, + "type": "array" + }, + "generatedAt": { + "type": "string" + }, + "history": { + "additionalProperties": { + "additionalProperties": false, + "properties": {}, + "type": "object" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "quakes": { + "items": { + "additionalProperties": false, + "properties": {}, + "type": "object" + }, + "type": "array" + }, + "reports": { + "additionalProperties": false, + "properties": {}, + "type": "object" + }, + "snapshot": { + "additionalProperties": false, + "properties": {}, + "type": "object" + }, + "statcan": { + "anyOf": [ + { + "additionalProperties": false, + "properties": {}, + "type": "object" + }, + { + "type": "null" + } + ] + } + }, + "type": "object" +}
- Changed
list_regions1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "regions": { + "items": { + "additionalProperties": false, + "properties": { + "bbox": { + "items": false, + "maxItems": 4, + "minItems": 4, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "center": { + "items": false, + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "number" + }, + { + "type": "number" + } + ], + "type": "array" + }, + "country": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "label": { + "type": "string" + }, + "major": { + "type": "boolean" + }, + "quakeStats": { + "type": "boolean" + }, + "state": { + "type": "boolean" + }, + "zoom": { + "type": "number" + } + }, + "required": [ + "key", + "label", + "center", + "zoom", + "bbox" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "regions" + ], + "type": "object" +}
- Changed
submit_report7 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Incident category (default 'report')" - added
Input schema / properties / description / descriptionAdded value: +"Details, up to 2000 chars" - added
Input schema / properties / lat / descriptionAdded value: +"Latitude, -90 to 90" - added
Input schema / properties / lon / descriptionAdded value: +"Longitude, -180 to 180" - added
Input schema / properties / severity / descriptionAdded value: +"low | medium | high | critical (default 'medium')" - added
Input schema / properties / title / descriptionAdded value: +"Short headline, 1–200 chars" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "report": { + "additionalProperties": false, + "properties": { + "approximate": { + "type": "boolean" + }, + "category": { + "type": "string" + }, + "confirms": { + "type": "number" + }, + "count": { + "type": "number" + }, + "description": { + "type": "string" + }, + "flags": { + "type": "number" + }, + "group": { + "type": "string" + }, + "id": { + "type": "string" + }, + "lat": { + "type": "number" + }, + "lon": { + "type": "number" + }, + "nhood": { + "type": "string" + }, + "region": { + "type": "string" + }, + "reporter": { + "additionalProperties": false, + "properties": { + "confirmed": { + "type": "number" + }, + "handle": { + "type": "string" + }, + "reports": { + "type": "number" + }, + "role": { + "anyOf": [ + { + "enum": [ + "curator", + "moderator" + ], + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "handle", + "role", + "reports", + "confirmed" + ], + "type": "object" + }, + "resolves": { + "type": "number" + }, + "severity": { + "type": "string" + }, + "source": { + "type": "string" + }, + "sources": { + "items": { + "type": "string" + }, + "type": "array" + }, + "status": { + "enum": [ + "pending", + "active", + "resolved", + "hidden" + ], + "type": "string" + }, + "time": { + "type": "string" + }, + "title": { + "type": "string" + }, + "type": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "source", + "category", + "type", + "title", + "lat", + "lon", + "time", + "severity" + ], + "type": "object" + } + }, + "required": [ + "report" + ], + "type": "object" +}
2 tool updates
- Changed
get_incidents1 field changed- changed
Input schema / properties / category / enumPrevious value: -[ - "crime", - "fire", - "disaster", - "weather", - "unrest", - "health", - "infra", - "report" -]New value: +[ + "crime", + "fire", + "disaster", + "weather", + "unrest", + "health", + "infra", + "alert", + "report" +]
- Changed
submit_report1 field changed- changed
Input schema / properties / category / enumPrevious value: -[ - "crime", - "fire", - "disaster", - "weather", - "unrest", - "health", - "infra", - "report" -]New value: +[ + "crime", + "fire", + "disaster", + "weather", + "unrest", + "health", + "infra", + "alert", + "report" +]
8 tool updates
- First observed
create_dashboard - First observed
get_crime_year - First observed
get_dashboard - First observed
get_incidents - First observed
get_news - First observed
get_trends - First observed
list_regions - First observed
submit_report
Related MCP Connectors
Live worldwide wildfire detections, fire archive, citable stats, aircraft. Free, CC BY 4.0.
US crime scores, incidents, neighborhood demographics, rent data, and offender search by address.
Real-time earthquake events from the US Geological Survey
Live world news deduplicated into story events, with corroboration counts and source links.
Related MCP Servers
- AlicenseAqualityBmaintenanceUS crime safety scores, recent incidents, neighborhood demographics, rent data, and registered-offender search by address. Free tier available.4MIT
- AlicenseNot gradedqualityDmaintenanceEnables real-time monitoring of Seattle Fire Department incident data, allowing users to check for active fires, evacuation orders, and retrieve live emergency response information through natural language queries.MIT
- FlicenseNot gradedqualityBmaintenanceNear-real-time worldwide wildfire ignition data from NASA FIRMS, GOES and Meteosat MTG satellites plus AI-verified witness reports, served by kanari.io as a remote MCP server (no API key). Tools: active_fires, fire_archive_search, fire_details, wildfire_stats, firefighting_aircraft, earliness_cases. Open data, CC BY 4.0.1-
- AlicenseNot gradedqualityCmaintenanceEnables LLM agents to access live seismic data, calculate emergency vehicle routes, and dispatch first responders to incidents.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.