CityAlert

Free live public-safety incident map: global crime, fire, disaster, weather and news feeds

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
90%
Integridad del esquema
76%
Calidad de los nombres
100%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (2)

  • LOWTool 'get_crime_year' description lacks action verben get_crime_year
  • LOWTool 'get_news' description lacks action verben get_news

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~3,180Tokens (definiciones de herramientas)
~3.9 KBTamaño de respuesta típico
Impacto significativo en la atención (2.48% del contexto de 128k)

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-http

Qué puede hacer

Inventario de herramientas

Herramientas (8)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢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

retrieve_data
Get details about [item] from CityAlert
Herramientas esperadas: get_incidents
fetch_info
Fetch [information type] using CityAlert
Herramientas esperadas: get_incidents
list_items
List all [items] available in CityAlert
Herramientas esperadas: list_regions
browse_collection
Show me the [collection] from CityAlert
Herramientas esperadas: list_regions
explore_workflow
List available [items], then get details for each one using CityAlert
Herramientas esperadas: list_regionsget_incidents

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada8 herramientas
verificadoversión no registrada8 herramientas
verificadoversión no registrada8 herramientas