Police-reported incidents, stats, comparisons and safety scores for 11 US cities.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
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.
Compare incident stats (by category, violent vs property, hour, weekday, 90-day trend) for 2-5 points with the same radius.
lat,lon;lat,lon (2-5 points)
ISO date, exclusive
ISO date, inclusive; the free server covers the last 180 days
Search radius in metres, 1-1000 (default 500)
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http crime-data-api https://crimedata.dev/mcp
Compare incident stats (by category, violent vs property, hour, weekday, 90-day trend) for 2-5 points with the same radius.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO date, exclusive |
| from | string | ISO date, inclusive; the free server covers the last 180 days |
| points* | string | lat,lon;lat,lon (2-5 points) |
| category | string | |
| radius_m | number | Search radius in metres, 1-1000 (default 500) |
{
"type": "object",
"required": [
"points"
],
"properties": {
"to": {
"type": "string",
"description": "ISO date, exclusive"
},
"from": {
"type": "string",
"description": "ISO date, inclusive; the free server covers the last 180 days"
},
"points": {
"type": "string",
"description": "lat,lon;lat,lon (2-5 points)"
},
"category": {
"enum": [
"homicide",
"sexual_offense",
"robbery",
"assault",
"burglary",
"vehicle_theft",
"theft_from_vehicle",
"theft",
"fraud",
"vandalism",
"weapons",
"drugs",
"dui",
"trespass",
"harassment",
"public_order",
"traffic",
"non_criminal",
"other"
],
"type": "string"
},
"radius_m": {
"type": "number",
"description": "Search radius in metres, 1-1000 (default 500)"
}
}
}Covered cities, data source, licence and freshness.
No arguments.
{
"type": "object",
"properties": {}
}Recent police-reported incidents near a point in covered US cities, newest first.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO date, exclusive |
| lat | number | Latitude (WGS84); or pass address instead |
| lon | number | Longitude (WGS84) |
| from | string | ISO date, inclusive; the free server covers the last 180 days |
| limit | number | Max rows, 1-50 (default 50) |
| address | string | US street address, used instead of lat and lon |
| category | string | |
| radius_m | number | Search radius in metres, 1-1000 (default 500) |
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "ISO date, exclusive"
},
"lat": {
"type": "number",
"description": "Latitude (WGS84); or pass address instead"
},
"lon": {
"type": "number",
"description": "Longitude (WGS84)"
},
"from": {
"type": "string",
"description": "ISO date, inclusive; the free server covers the last 180 days"
},
"limit": {
"type": "number",
"description": "Max rows, 1-50 (default 50)"
},
"address": {
"type": "string",
"description": "US street address, used instead of lat and lon"
},
"category": {
"enum": [
"homicide",
"sexual_offense",
"robbery",
"assault",
"burglary",
"vehicle_theft",
"theft_from_vehicle",
"theft",
"fraud",
"vandalism",
"weapons",
"drugs",
"dui",
"trespass",
"harassment",
"public_order",
"traffic",
"non_criminal",
"other"
],
"type": "string"
},
"radius_m": {
"type": "number",
"description": "Search radius in metres, 1-1000 (default 500)"
}
}
}Safety score 0-100 (higher = fewer incidents) and A-F grade for a point: incident density percentile against sampled occupied-area cells of the city (same radius) over its last 12 months. Not a prediction of personal risk; not comparable across cities. Outside covered cities it returns coverage "city_fallback": the city's FBI city-wide violent/property rates per 100k and national percentiles, no grade. May include a "tract" block: 2020 Census tract population and incidents per 1,000 estimated residents in the radius per year (tract residents only, so commercial and nightlife areas overstate risk).
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude (WGS84); or pass address instead |
| lon | number | Longitude (WGS84) |
| address | string | US street address, used instead of lat and lon |
| radius_m | number | Search radius in metres, 1-1000 (default 500) |
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"description": "Latitude (WGS84); or pass address instead"
},
"lon": {
"type": "number",
"description": "Longitude (WGS84)"
},
"address": {
"type": "string",
"description": "US street address, used instead of lat and lon"
},
"radius_m": {
"type": "number",
"description": "Search radius in metres, 1-1000 (default 500)"
}
}
}Incident counts by category and by month near a point.
| Argument | Type | Description |
|---|---|---|
| to | string | ISO date, exclusive |
| lat | number | Latitude (WGS84); or pass address instead |
| lon | number | Longitude (WGS84) |
| from | string | ISO date, inclusive; the free server covers the last 180 days |
| address | string | US street address, used instead of lat and lon |
| category | string | |
| radius_m | number | Search radius in metres, 1-1000 (default 500) |
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "ISO date, exclusive"
},
"lat": {
"type": "number",
"description": "Latitude (WGS84); or pass address instead"
},
"lon": {
"type": "number",
"description": "Longitude (WGS84)"
},
"from": {
"type": "string",
"description": "ISO date, inclusive; the free server covers the last 180 days"
},
"address": {
"type": "string",
"description": "US street address, used instead of lat and lon"
},
"category": {
"enum": [
"homicide",
"sexual_offense",
"robbery",
"assault",
"burglary",
"vehicle_theft",
"theft_from_vehicle",
"theft",
"fraud",
"vandalism",
"weapons",
"drugs",
"dui",
"trespass",
"harassment",
"public_order",
"traffic",
"non_criminal",
"other"
],
"type": "string"
},
"radius_m": {
"type": "number",
"description": "Search radius in metres, 1-1000 (default 500)"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.