CityAlert
Free live public-safety incident map: global crime, fire, disaster, weather and news feeds
¿Debería usar esto?
Calidad y seguridad
Hallazgos (2)
- LOWen get_crime_year
- LOWen get_news
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"cityalert": {
"url": "https://cityalert.live/api/mcp"
}
}
}Puntos de conexión remotos
https://cityalert.live/api/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (8)
🟢list_regions
List CityAlert focus regions (key, label, center, zoom, bbox). Use region keys with get_incidents.
Esquema de entrada
{
"type": "object",
"properties": {}
}Esquema de salida
{
"type": "object",
"properties": {
"regions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
},
"center": {
"type": "array",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
],
"items": false,
"minItems": 2,
"maxItems": 2
},
"zoom": {
"type": "number"
},
"bbox": {
"type": "array",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
},
{
"type": "number"
}
],
"items": false,
"minItems": 4,
"maxItems": 4
},
"quakeStats": {
"type": "boolean"
},
"major": {
"type": "boolean"
},
"country": {
"type": "boolean"
},
"state": {
"type": "boolean"
}
},
"required": [
"key",
"label",
"center",
"zoom",
"bbox"
],
"additionalProperties": false
}
}
},
"required": [
"regions"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_incidents(region, category, groups, minSeverity, q, ...)
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).
Esquema de entrada
{
"type": "object",
"properties": {
"region": {
"description": "Focus-region key, e.g. 'vancouver' (see list_regions)",
"type": "string"
},
"category": {
"description": "Incident category",
"type": "string",
"enum": [
"crime",
"fire",
"disaster",
"weather",
"unrest",
"health",
"infra",
"alert",
"report"
]
},
"groups": {
"description": "Normalized subtypes to include, e.g. ['violent','property','collision','wildfire']. See group keys in the /api/incidents OpenAPI doc.",
"type": "array",
"items": {
"type": "string"
}
},
"minSeverity": {
"description": "Minimum severity (low < medium < high < critical)",
"type": "string",
"enum": [
"low",
"medium",
"high",
"critical"
]
},
"q": {
"description": "Case-insensitive substring match on type/title/neighbourhood",
"type": "string",
"maxLength": 100
},
"source": {
"description": "Feed source, e.g. 'usgs', 'gdacs', 'eccc', 'vpd', 'bcws', 'vernon-media', 'manual'",
"type": "string"
},
"bbox": {
"description": "[minLon, minLat, maxLon, maxLat]",
"minItems": 4,
"maxItems": 4,
"type": "array",
"items": {
"type": "number"
}
},
"limit": {
"description": "Max incidents to return (default 50)",
"type": "integer",
"minimum": 1,
"maximum": 5000
},
"detail": {
"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.",
"type": "string",
"enum": [
"compact",
"full"
]
},
"refresh": {
"description": "Re-fetch upstream feeds instead of returning the shared ~15-minute snapshot. Only honored for API keys with real-time entitlement; ignored otherwise.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Esquema de salida
{
"type": "object",
"properties": {
"total": {
"type": "number"
},
"returned": {
"type": "number"
},
"incidents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"source": {
"type": "string"
},
"category": {
"type": "string"
},
"group": {
"type": "string"
},
"type": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"time": {
"type": "string"
},
"severity": {
"type": "string"
},
"url": {
"type": "string"
},
"region": {
"type": "string"
},
"nhood": {
"type": "string"
},
"approximate": {
"type": "boolean"
},
"count": {
"type": "number"
},
"sources": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string",
"enum": [
"pending",
"active",
"resolved",
"hidden"
]
},
"confirms": {
"type": "number"
},
"resolves": {
"type": "number"
},
"flags": {
"type": "number"
},
"reporter": {
"type": "object",
"properties": {
"handle": {
"type": "string"
},
"role": {
"anyOf": [
{
"type": "string",
"enum": [
"curator",
"moderator"
]
},
{
"type": "null"
}
]
},
"reports": {
"type": "number"
},
"confirmed": {
"type": "number"
}
},
"required": [
"handle",
"role",
"reports",
"confirmed"
],
"additionalProperties": false
}
},
"required": [
"id",
"source",
"category",
"type",
"title",
"lat",
"lon",
"time",
"severity"
],
"additionalProperties": false
}
},
"feeds": {
"type": "object",
"properties": {
"count": {
"type": "number"
},
"failed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"source": {
"type": "string"
},
"error": {
"type": "string"
}
},
"required": [
"source"
],
"additionalProperties": false
}
}
},
"required": [
"count",
"failed"
],
"additionalProperties": false
},
"region": {
"type": "string"
},
"delayed": {
"type": "boolean"
},
"delayMinutes": {
"type": "number"
},
"textTruncated": {
"type": "string"
}
},
"required": [
"total",
"returned",
"incidents",
"feeds"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_trends
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.
Esquema de entrada
{
"type": "object",
"properties": {}
}Esquema de salida
{
"type": "object",
"properties": {
"generatedAt": {
"type": "string"
},
"crime": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"history": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"properties": {},
"additionalProperties": false
}
},
"quakes": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": false
}
},
"gdacs": {
"type": "array",
"items": {
"type": "object",
"properties": {},
"additionalProperties": false
}
},
"statcan": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"reports": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"snapshot": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"errors": {
"type": "array",
"items": {
"type": "string"
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_crime_year(year, includeIncidents)
Full-year VPD crime data: totals and ranked neighbourhood stats. Vancouver only, 2003-present.
Esquema de entrada
{
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": 2003,
"maximum": 2026,
"description": "Year, 2003 to present"
},
"includeIncidents": {
"description": "Include every incident point (large; default false)",
"type": "boolean"
}
},
"required": [
"year"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Esquema de salida
{
"type": "object",
"properties": {
"year": {
"type": "number"
},
"total": {
"type": "number"
},
"byType": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "number"
}
},
"byNeighbourhood": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"count": {
"type": "number"
},
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
},
"required": [
"name",
"count",
"lat",
"lon"
],
"additionalProperties": false
}
},
"incidents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"source": {
"type": "string"
},
"category": {
"type": "string"
},
"group": {
"type": "string"
},
"type": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"time": {
"type": "string"
},
"severity": {
"type": "string"
},
"url": {
"type": "string"
},
"region": {
"type": "string"
},
"nhood": {
"type": "string"
},
"approximate": {
"type": "boolean"
},
"count": {
"type": "number"
},
"sources": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string",
"enum": [
"pending",
"active",
"resolved",
"hidden"
]
},
"confirms": {
"type": "number"
},
"resolves": {
"type": "number"
},
"flags": {
"type": "number"
},
"reporter": {
"type": "object",
"properties": {
"handle": {
"type": "string"
},
"role": {
"anyOf": [
{
"type": "string",
"enum": [
"curator",
"moderator"
]
},
{
"type": "null"
}
]
},
"reports": {
"type": "number"
},
"confirmed": {
"type": "number"
}
},
"required": [
"handle",
"role",
"reports",
"confirmed"
],
"additionalProperties": false
}
},
"required": [
"id",
"source",
"category",
"type",
"title",
"lat",
"lon",
"time",
"severity"
],
"additionalProperties": false
}
}
},
"required": [
"year",
"total",
"byType",
"byNeighbourhood"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_news(place, refresh)
Per-region safety news items, or news for an arbitrary place name.
Esquema de entrada
{
"type": "object",
"properties": {
"place": {
"description": "Place name for ad-hoc news, e.g. 'Kelowna'",
"type": "string",
"maxLength": 60
},
"refresh": {
"description": "Bypass the news cache (API keys with real-time entitlement only)",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Esquema de salida
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"link": {
"type": "string"
},
"source": {
"type": "string"
},
"published": {
"type": "string"
},
"region": {
"type": "string"
},
"regionLabel": {
"type": "string"
},
"image": {
"type": "string"
}
},
"required": [
"id",
"title",
"link",
"source",
"published"
],
"additionalProperties": false
}
},
"place": {
"type": "string"
},
"fetchedAt": {
"type": "string"
}
},
"required": [
"items"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟡submit_report(title, lat, lon, category, severity, ...)
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.
Esquema de entrada
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Short headline, 1–200 chars"
},
"lat": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "Latitude, -90 to 90"
},
"lon": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "Longitude, -180 to 180"
},
"category": {
"description": "Incident category (default 'report')",
"type": "string",
"enum": [
"crime",
"fire",
"disaster",
"weather",
"unrest",
"health",
"infra",
"alert",
"report"
]
},
"severity": {
"description": "low | medium | high | critical (default 'medium')",
"type": "string",
"enum": [
"low",
"medium",
"high",
"critical"
]
},
"description": {
"description": "Details, up to 2000 chars",
"type": "string",
"maxLength": 2000
}
},
"required": [
"title",
"lat",
"lon"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Esquema de salida
{
"type": "object",
"properties": {
"report": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"source": {
"type": "string"
},
"category": {
"type": "string"
},
"group": {
"type": "string"
},
"type": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"time": {
"type": "string"
},
"severity": {
"type": "string"
},
"url": {
"type": "string"
},
"region": {
"type": "string"
},
"nhood": {
"type": "string"
},
"approximate": {
"type": "boolean"
},
"count": {
"type": "number"
},
"sources": {
"type": "array",
"items": {
"type": "string"
}
},
"status": {
"type": "string",
"enum": [
"pending",
"active",
"resolved",
"hidden"
]
},
"confirms": {
"type": "number"
},
"resolves": {
"type": "number"
},
"flags": {
"type": "number"
},
"reporter": {
"type": "object",
"properties": {
"handle": {
"type": "string"
},
"role": {
"anyOf": [
{
"type": "string",
"enum": [
"curator",
"moderator"
]
},
{
"type": "null"
}
]
},
"reports": {
"type": "number"
},
"confirmed": {
"type": "number"
}
},
"required": [
"handle",
"role",
"reports",
"confirmed"
],
"additionalProperties": false
}
},
"required": [
"id",
"source",
"category",
"type",
"title",
"lat",
"lon",
"time",
"severity"
],
"additionalProperties": false
}
},
"required": [
"report"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_dashboard(id)
Read a saved dashboard by id (shareable, read-only).
Esquema de entrada
{
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Esquema de salida
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟡create_dashboard(name, config)
Create a shareable dashboard. Returns {id, token} — the token grants write access via PUT /api/dashboards, so save it.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"config": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "Dashboard config object, e.g. {areas, categories, defaultTab}"
}
},
"required": [
"config"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Esquema de salida
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Prompts recomendados
get_incidentsget_incidentslist_regionslist_regionslist_regionsget_incidentsComunidad
Evidencia