Offendersearch
Search all 58 US sex-offender registries in one call — scored matches with official record citations.
Documentation
Offendersearch MCP Server
Search all 58 US sex-offender registries — every US state, DC and the territories — from any MCP client: Claude Desktop, Claude Code, or any agent runtime that speaks the Model Context Protocol.
One tool call returns scored, de-duplicated, provenance-tagged records from a
continuously updated national dataset with 100% US coverage. Built on the official
Python mcp SDK (FastMCP).
Tools
| Tool | What it does |
|---|---|
search_offenders | Search every registry for one person/location — name, DOB, age, city/state/ZIP, street address, GIS radius, or free text. Returns scored matches with per-registry outcome (sourceStatus) and plain-language warnings. |
batch_search | Up to 1,000 lookups in one call, row-in/row-out, each through the same engine as a single search. |
get_registry_coverage | The public coverage catalog: every registry code, scope, legal status and health. No API key needed. |
Results carry matchConfidence, matchBasis (why it matched), DOB verification
state, aliases, addresses, offense detail, and a per-source citation with
lastCheckedAt — so an agent can cite exactly which registry said what.
Auth — an API key, free to get
Create a key at offendersearch.app — it works immediately: 25 free searches, no card required.
- Local (stdio): set
OFFENDERSEARCH_API_KEY. - Remote (streamable-HTTP): each request forwards its own
X-API-Keyheader — multi-tenant by design.
Quick start (Claude Desktop, local stdio)
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
claude_desktop_config.json:
{
"mcpServers": {
"offendersearch": {
"command": "python",
"args": ["/path/to/services/mcp-server/server.py"],
"env": { "OFFENDERSEARCH_API_KEY": "os_live_..." }
}
}
}
Remote / self-hosted (streamable-HTTP)
MCP_TRANSPORT=streamable-http OFFENDERSEARCH_API_KEY="os_live_..." python server.py
# or: uvicorn server:http_app (see Dockerfile)
Client config for a hosted instance (per-request key, no env secret):
{
"mcpServers": {
"offendersearch": {
"url": "https://<your-host>/mcp",
"headers": { "X-API-Key": "os_live_..." }
}
}
}
Example exchange
User: Is a John Doe, born 1980-04-12, on any registry in New Jersey?
Agent →
search_offenders(first_name="John", last_name="Doe", dob="1980-04-12", state="NJ")Agent: One candidate matched with a full date-of-birth confirmation (
dobVerification: dob_match, confidence 1.0): John A. Doe, registered in NJ, with the official registry record linked. All 58 registries were searched to completion (sourcesIncomplete: 0).
Reading results responsibly
- If
counts.sourcesIncomplete > 0, the records are a lower bound — relaywarnings[0]rather than reporting a clean "no match". - A match is a candidate, not an identification — verify DOB and photograph.
- Results are public-record data and not a consumer report; do not use them for FCRA-covered decisions without appropriate process.
More
- API docs: https://offendersearch.app/docs
- OpenAPI: https://offendersearch.app/openapi.json
- MCP page: https://offendersearch.app/mcp-server
Offendersearch resources
- Sex offender registry search — search every US registry from one dashboard, free tier included
- Sex offender statistics by state — ranked counts and per-1,000-resident rates for all 56 US jurisdictions
- Open data downloads — free aggregate CSVs (by state and by city)
- Background check API documentation — REST reference, normalized record schema, quickstarts
- State registry guides — how each state's registry works and how to search it
- MCP server guide — hosted endpoint, Claude Desktop and ChatGPT connector setup
- API pricing — metered, $0.15 per call, volume tiers