CuffTracker
Server Details
Public crime records and area trends for Chicago, Milwaukee, New York, Minneapolis, and Denver.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 5 tools
Each tool has a clearly distinct role: area trends, citywide stats, individual incident pages, place edge resolution, and text search. The descriptions explicitly route users away from likely mistakes, such as using get_crime_stats for a neighborhood or search_crimes for a place name. Boundaries are unusually clear for a set with multiple related crime-query tools.
All names use consistent snake_case and follow a verb_noun pattern: get_area_trends, get_city_crimes, get_crime_stats, resolve_place, search_crimes. The verbs vary appropriately by action while remaining predictable and readable.
Five tools is well scoped for a crime-data server. Each tool covers a necessary operation: trends, stats, raw incidents, place resolution, and text search. No tool appears redundant or missing at this count.
The surface covers the core crime-data workflows: aggregated trends, citywide statistics, incident retrieval, geographic resolution, and text search. Minor gaps exist, such as no explicit pagination control for get_city_crimes or metadata about supported cities, but these are not likely to block most agent tasks.
Available Tools
5 toolsget_area_trendsArea crime trendsRead-onlyIdempotentInspect
Summarizes incidents inside a neighborhood or rough area: counts by crime type compared with the city, counts by month, the noon-to-midnight share, top streets, and a few notable incidents. Takes a place name, such as Harbor View in Milwaukee, or a lat/lon box, and covers up to 450 days in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City the area is in. | |
| days | No | Days ending at the newest incident in the city. Defaults to 90. 400 days is about 14 months. | |
| place | No | Neighborhood or rough area, such as Harbor View or Logan Square. Optional when all four box edges are given. | |
| lat_max | No | North edge of the box. | |
| lat_min | No | South edge of the box. | |
| lon_max | No | East edge of the box. | |
| lon_min | No | West edge of the box. |
get_city_crimesCity incidentsRead-onlyIdempotentInspect
Returns one page of individual incidents in a city, filtered by crime type, location type, dates, text, and an optional lat/lon box. Supports limit/offset pagination. A window longer than 45 days needs a geographic filter: the box, place, or location_descriptions. Chicago's portal withholds about the last seven days. New York publishes complaints after a quarter closes.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City to query. | chicago |
| limit | No | Maximum incidents on this page. Defaults to 25. | |
| place | No | Address text, such as a street name, matched against location, block, and community area. Neighborhood boundaries come from the lat/lon box. | |
| offset | No | Number of incidents to skip. Defaults to 0. pagination.next_offset in the result is the next page, or null when there are no more. | |
| lat_max | No | North edge of the box. | |
| lat_min | No | South edge of the box. | |
| lon_max | No | East edge of the box. | |
| lon_min | No | West edge of the box. | |
| end_date | No | End date, YYYY-MM-DD. Defaults to the newest incident. | |
| start_date | No | Start date, YYYY-MM-DD. Defaults to 30 days before the newest incident. | |
| search_text | No | Text matched against crime type and description. | |
| primary_types | No | Crime types to include, such as THEFT or BATTERY. Defaults to all types. | |
| location_descriptions | No | Location types to include, such as STREET or RESIDENCE. Defaults to all. |
get_crime_statsCitywide crime statsRead-onlyIdempotentInspect
Returns citywide counts, the date range, top crime types, and top location types for one city or all cities. The figures cover whole cities; get_area_trends covers a neighborhood.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City to summarize, or all for every city side by side. | all |
| top_n | No | Number of crime types and location types to list. Defaults to 10. |
resolve_placeResolve a placeRead-onlyIdempotentInspect
Returns the lat/lon box for a neighborhood, street, or rough area such as downtown, with a suggested short incident query for get_city_crimes. get_area_trends accepts the place name directly.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City the place is in. | |
| days | No | Days covered by the suggested incident query. Defaults to 14 or 30 depending on the place. | |
| place | Yes | Neighborhood, street, borough, or a rough area such as downtown or north side. | |
| primary_types | No | Optional crime types to include in the suggested query. |
search_crimesSearch incidentsRead-onlyIdempotentInspect
Searches crime types and descriptions in one city or all cities and returns matching incidents. Matches come from incident text, which rarely names a neighborhood; get_area_trends covers places.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City to search, or all for every city. | all |
| limit | No | Maximum incidents returned. Defaults to 25. | |
| query | Yes | Search text, such as armed robbery or domestic battery. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- Changed
get_area_trends6 fields changed- changed
Input schema / properties / days / descriptionPrevious value: -"Days ending at the newest incident in the city. Default 90. Use 400 for about 14 months."New value: +"Days ending at the newest incident in the city. Defaults to 90. 400 days is about 14 months." - changed
Input schema / properties / lat_max / descriptionPrevious value: -"North edge of the box. Geographic filter."New value: +"North edge of the box." - changed
Input schema / properties / lat_min / descriptionPrevious value: -"South edge of the box. Geographic filter."New value: +"South edge of the box." - changed
Input schema / properties / lon_max / descriptionPrevious value: -"East edge of the box. Geographic filter."New value: +"East edge of the box." - changed
Input schema / properties / lon_min / descriptionPrevious value: -"West edge of the box. Geographic filter."New value: +"West edge of the box." - changed
Input schema / properties / place / descriptionPrevious value: -"Neighborhood or rough area, such as Harbor View or Logan Square. Omit if you pass a box."New value: +"Neighborhood or rough area, such as Harbor View or Logan Square. Optional when all four box edges are given."
- Changed
get_city_crimes14 fields changed- changed
Input schema / properties / end_date / descriptionPrevious value: -"End date in YYYY-MM-DD format."New value: +"End date, YYYY-MM-DD. Defaults to the newest incident." - changed
Input schema / properties / lat_max / descriptionPrevious value: -"North edge. Required geographic filter for a long window."New value: +"North edge of the box." - changed
Input schema / properties / lat_min / descriptionPrevious value: -"South edge. Required geographic filter for a long window."New value: +"South edge of the box." - changed
Input schema / properties / limit / defaultPrevious value: -50New value: +25 - changed
Input schema / properties / limit / descriptionPrevious value: -"Max records to return (1-500)."New value: +"Maximum incidents on this page. Defaults to 25." - changed
Input schema / properties / limit / maximumPrevious value: -500New value: +100 - changed
Input schema / properties / location_descriptions / descriptionPrevious value: -"Filter by location descriptions (e.g., ['STREET', 'RESIDENCE']). Omit for all."New value: +"Location types to include, such as STREET or RESIDENCE. Defaults to all." - changed
Input schema / properties / lon_max / descriptionPrevious value: -"East edge. Required geographic filter for a long window."New value: +"East edge of the box." - changed
Input schema / properties / lon_min / descriptionPrevious value: -"West edge. Required geographic filter for a long window."New value: +"West edge of the box." - changed
Input schema / properties / offset / descriptionPrevious value: -"Records to skip for pagination."New value: +"Number of incidents to skip. Defaults to 0. pagination.next_offset in the result is the next page, or null when there are no more." - changed
Input schema / properties / place / descriptionPrevious value: -"Address text, such as a street name, matched against location, block, and community area. This is not a neighborhood boundary. Harbor View and other neighborhood names need the lat/lon box, or get_area_trends."New value: +"Address text, such as a street name, matched against location, block, and community area. Neighborhood boundaries come from the lat/lon box." - changed
Input schema / properties / primary_types / descriptionPrevious value: -"Filter by crime types (e.g., ['THEFT', 'BATTERY', 'NARCOTICS']). Omit for all types."New value: +"Crime types to include, such as THEFT or BATTERY. Defaults to all types." - changed
Input schema / properties / search_text / descriptionPrevious value: -"Text search across primary_type and description fields."New value: +"Text matched against crime type and description." - changed
Input schema / properties / start_date / descriptionPrevious value: -"Start date in YYYY-MM-DD format."New value: +"Start date, YYYY-MM-DD. Defaults to 30 days before the newest incident."
- Changed
get_crime_stats2 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"City to get stats for. Use 'all' for cross-city comparison."New value: +"City to summarize, or all for every city side by side." - changed
Input schema / properties / top_n / descriptionPrevious value: -"Number of top items to return."New value: +"Number of crime types and location types to list. Defaults to 10."
- Changed
resolve_place2 fields changed- changed
Input schema / properties / days / descriptionPrevious value: -"Days for the suggested incident list. Omit for a short default. Year-long trend windows belong on get_area_trends."New value: +"Days covered by the suggested incident query. Defaults to 14 or 30 depending on the place." - changed
Input schema / properties / primary_types / descriptionPrevious value: -"Optional crime types to carry into the suggested query."New value: +"Optional crime types to include in the suggested query."
- Changed
search_crimes4 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"City to search. Use 'all' for every city."New value: +"City to search, or all for every city." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (1-200)."New value: +"Maximum incidents returned. Defaults to 25." - changed
Input schema / properties / limit / maximumPrevious value: -200New value: +100 - changed
Input schema / properties / query / descriptionPrevious value: -"Search text (e.g., 'armed robbery', 'domestic battery')."New value: +"Search text, such as armed robbery or domestic battery."
3 tool updates
- Added
get_area_trends - Changed
get_city_crimes5 fields changed- changed
Input schema / properties / lat_max / descriptionPrevious value: -"North edge of a resolve_place box."New value: +"North edge. Required geographic filter for a long window." - changed
Input schema / properties / lat_min / descriptionPrevious value: -"South edge of a resolve_place box."New value: +"South edge. Required geographic filter for a long window." - changed
Input schema / properties / lon_max / descriptionPrevious value: -"East edge of a resolve_place box."New value: +"East edge. Required geographic filter for a long window." - changed
Input schema / properties / lon_min / descriptionPrevious value: -"West edge of a resolve_place box."New value: +"West edge. Required geographic filter for a long window." - changed
Input schema / properties / place / descriptionPrevious value: -"Neighborhood or street text from resolve_place. Matched against location, block, and community area."New value: +"Address text, such as a street name, matched against location, block, and community area. This is not a neighborhood boundary. Harbor View and other neighborhood names need the lat/lon box, or get_area_trends."
- Changed
resolve_place1 field changed- changed
Input schema / properties / days / descriptionPrevious value: -"How many days the suggested query should cover. Omit to use a short default."New value: +"Days for the suggested incident list. Omit for a short default. Year-long trend windows belong on get_area_trends."
4 tool updates
- Changed
get_city_crimes6 fields changed- changed
Input schema / properties / city / enumPrevious value: -[ - "chicago", - "milwaukee" -]New value: +[ + "chicago", + "milwaukee", + "new york", + "minneapolis", + "denver" +] - added
Input schema / properties / lat_maxAdded value: +{ + "description": "North edge of a resolve_place box.", + "type": "number" +} - added
Input schema / properties / lat_minAdded value: +{ + "description": "South edge of a resolve_place box.", + "type": "number" +} - added
Input schema / properties / lon_maxAdded value: +{ + "description": "East edge of a resolve_place box.", + "type": "number" +} - added
Input schema / properties / lon_minAdded value: +{ + "description": "West edge of a resolve_place box.", + "type": "number" +} - added
Input schema / properties / placeAdded value: +{ + "description": "Neighborhood or street text from resolve_place. Matched against location, block, and community area.", + "type": "string" +}
- Changed
get_crime_stats1 field changed- changed
Input schema / properties / city / enumPrevious value: -[ - "all", - "chicago", - "milwaukee" -]New value: +[ + "all", + "chicago", + "milwaukee", + "new york", + "minneapolis", + "denver" +]
- Added
resolve_place - Changed
search_crimes2 fields changed- changed
Input schema / properties / city / descriptionPrevious value: -"City to search. Use 'all' for both."New value: +"City to search. Use 'all' for every city." - changed
Input schema / properties / city / enumPrevious value: -[ - "all", - "chicago", - "milwaukee" -]New value: +[ + "all", + "chicago", + "milwaukee", + "new york", + "minneapolis", + "denver" +]
3 tool updates
- First observed
get_city_crimes - First observed
get_crime_stats - First observed
search_crimes
Related MCP Connectors
US crime scores, incidents, neighborhood demographics, rent data, and offender search by address.
Restaurant inspections for Chicago, NYC, Minneapolis, Milwaukee, Austin, and Denver.
US neighborhood Safety Scores, score drivers, geocoding and nearby activity from CrimeScore.io.
Free live public-safety incident map: global crime, fire, disaster, weather and news feeds
Related MCP Servers
- AlicenseAqualityCmaintenanceUS crime safety scores, recent incidents, neighborhood demographics, rent data, and registered-offender search by address. Free tier available.4MIT
- AlicenseNot gradedqualityBmaintenanceEnables querying FBI crime data using UCR/NIBRS statistics through a simple MCP interface.160 npmMIT
- AlicenseNot gradedqualityBmaintenanceExposes the FBI Crime Data Explorer API — crime estimates, agency offense rates, and LEOKA officer safety data via MCP. Supports STDIO or Streamable HTTP transport.292 npm2Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables searching monthly street-level crime, police outcomes, stop and search records, and neighbourhood policing teams published by data.police.uk across England, Wales and Northern Ireland forces plus British Transport Police. Supports flexible area queries by point, polygon, neighbourhood, or whole force over STDIO or Streamable HTTP.160 npm1Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.