Offendersearch
Search US sex-offender registries and criminal records, with per-source citations.
| Endpoint | https://mcp.offendersearch.app/mcp (streamable-http) |
|---|---|
| Registry version | 1.29.1 |
| Now | 10 tools · grade F (0) · pin ts_22925de2a758f436f6461c8cf9fdf480 · protocol 2025-06-18 |
| First / last listed | 2026-10-28 05:12 UTC / 2026-10-28 05:12 UTC |
| Grade over time | 2026-10-28: F (0), 10 tools |
Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.
Tools: search_offenders batch_search get_registry_coverage search_criminal get_criminal_coverage map_viewport map_area map_route map_group map_open_record
search_offenders | Search US sex-offender registries for one person and/or location.
Fans out across all 58 registries (or the ones named in `jurisdictions`),
de-duplicates people across registries, scores each match, and returns the
normalized records. Supply whatever identifiers you have — all args are
optional but at least a name, location, or free-text `q` should be given.
Returns a SearchR params: first_name, last_name, dob, age, city, state, zipcode, address, lat, lng, radius_miles, q, jurisdictions, match, freshness, location_scoped, extensive, deadline_ms |
batch_search | Run many person/location lookups in one call (row-in / row-out).
Each row goes through the SAME engine as search_offenders, so a row's records
are identical to what a single search would return. A row that fails is
reported with status='error' in place and never aborts the batch. Max 1000 rows.
Returns: { count, results: [ { index, status, counts{records,sourcesQueried,
sourc params: queries*, jurisdictions, match, freshness, location_scoped, extensive |
get_registry_coverage | List every registry we cover plus its scope, legal status, and health.
Public coverage catalog (no API key required). Use it to discover the
`jurisdictions` codes accepted by search_offenders / batch_search and to
check per-registry freshness/health before relying on a result.
Returns: { count, registries: [ SourceInfo ] } where each SourceInfo is:
- id: registry code (e.g. params: none |
search_criminal | Search US criminal records — county jail bookings, state prison custody, court cases and warrants.
Covers county jail rosters, statewide prison systems, court sources, warrant
systems and statewide registries across the states, DC and the territories,
plus the federal layer — which is a separate system holding offences no state
search will surface.
A surname is REQUIRED. Supp params: lastName*, firstName, dob, birthYear, age, state, county, limit |
get_criminal_coverage | List the criminal-record jurisdictions searched, with kind and status.
Use it to discover which states and counties are reachable and which are
answering today, before relying on an empty result. Depth is uneven by design:
counties publish independently, so a state with many county jurisdictions is
not "better covered" than one that publishes a single statewide source — it is
params: none |
map_viewport | Get what to draw for one map view: clusters, pins, or named pins.
Send the view as `bbox`, or as `lat` + `lng` + `radius_miles`. The detail
returned depends on the zoom the view is answered at (the response states it
in `zoom`):
- zoom 3-12 -> mode 'clusters': a count per grid cell. Each cluster has
`count`, `bbox`, `breakdown` and `expansionZoom` (fit the map to `bbox` params: bbox, lat, lng, radius_miles, zoom, housing, street_only, detail, sandbox |
map_area | Get what to draw inside a drawn shape: a polygon, or a line with a buffer.
The same answer as map_viewport for the shape's bounding box, limited to what
is inside the shape, at the same detail levels (clusters, pins, or named pins
at zoom 15+). The response adds `shape: 'polygon' | 'route'`.
Returns: { shape, mode, zoom, bbox, datasetVersion, total, breakdown {street,
housed, params: polygon, route_points, buffer_miles, zoom, housing, street_only, detail, sandbox |
map_route | Exact counts of registered addresses along one walking or bus route.
Counts a corridor either side of the line, a radius around each stop, or
both, and returns exact numbers per leg and per stop with nameless pins and
their distances. Never an estimate and never partial: the answer is complete
or the call fails without a charge.
Returns: { shape: 'route', profile, measure, de params: path, polyline, polyline_precision, stops, profile, measure, corridor_miles, stop_radius_feet, parcel_allowance_feet, detail, housing, street_only, sandbox, external_id |
map_group | List the people behind a many-people pin or an approximate-area pin.
Returns: { total, page, perPage, totalPages, kind: 'address' | 'area', named,
members: [ { id, addressType, label, housingStatus, hasPhoto } ] }. Members
carry `label` only when the group id came from a view at zoom 15 or closer
(`named: true`). Each member `id` opens with map_open_record.
Billing: one map r params: group_id*, page, per_page |
map_open_record | Open the complete record behind one map marker, or behind a saved reference.
Returns: { record, recordRef, billing: { billed, unit, reason }, notice }.
`record` is the same Record object search_offenders returns. `recordRef`
('mr_...') is a lasting reference: keep it to open the same record later,
after the marker id has expired.
Billing: one record open per person per map re params: marker_id* |
Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.