Skip to main content
Glama
shawndoor

DoorProfit Crime & Neighborhood Data

README.md
# DoorProfit MCP Server

[![doorprofit-mcp MCP server](https://glama.ai/mcp/servers/shawndoor/doorprofit-mcp/badges/score.svg)](https://glama.ai/mcp/servers/shawndoor/doorprofit-mcp)

Official hosted [MCP](https://modelcontextprotocol.io) server for the
[DoorProfit API](https://api.doorprofit.com) — US crime, safety, and
neighborhood data for any address, inside Claude, ChatGPT, Cursor, and any
MCP-capable client.

```
https://api.doorprofit.com/mcp
```

Ask your AI assistant *"Is 500 Adams St in Tulsa safe?"* and it answers with
real data: a letter-grade safety score, recent incidents within 1,000 ft,
neighborhood demographics, income, rent, home values, and more.

## Tools

| Tool | Description | Quota |
|---|---|---|
| `get_crime_data` | Safety score (A+ to F), crime breakdown vs national average, recent incidents within 1,000 ft | 1 call |
| `get_neighborhood_data` | Demographics, income, home values, rent, cost of living, weather & disaster risk | 1 call |
| `search_offenders` | Registered offenders near a location (≤3 mi) or by name | 1 call |
| `get_api_usage` | Your plan, usage, and remaining quota | Free |

## Connect

### Option 1 — OAuth (easiest)

Add `https://api.doorprofit.com/mcp` as a remote MCP server / custom
connector in your client. You'll be prompted to sign in to your DoorProfit
account and approve access. No keys to copy.

### Option 2 — API key

Get a free key at [api.doorprofit.com/signup](https://api.doorprofit.com/signup),
then configure:

```json
{
  "mcpServers": {
    "doorprofit": {
      "url": "https://api.doorprofit.com/mcp",
      "headers": {
        "Authorization": "Bearer dp_your_api_key"
      }
    }
  }
}
```

Clients that only accept a URL can use
`https://api.doorprofit.com/mcp?key=dp_your_api_key` instead.

### Option 3 — stdio bridge

For clients that only speak stdio, this repository contains a small bridge
that exposes the hosted server as a local process. It requires Node 18+.

```json
{
  "mcpServers": {
    "doorprofit": {
      "command": "npx",
      "args": ["-y", "github:shawndoor/doorprofit-mcp"],
      "env": {
        "DOORPROFIT_API_KEY": "dp_your_api_key"
      }
    }
  }
}
```

Or with Docker:

```bash
docker build -t doorprofit-mcp .
docker run -i --rm -e DOORPROFIT_API_KEY=dp_your_api_key doorprofit-mcp
```

The bridge forwards every tool call to `https://api.doorprofit.com/mcp` and
pulls its tool definitions from the same place, falling back to the snapshot
in `src/tools.json` when the API is unreachable. Set `DOORPROFIT_MCP_URL` to
point it somewhere else. Run `npm run sync-tools` to refresh the snapshot
after the hosted tool definitions change.

## Try it free

The test address **`500 Main St, Dallas, TX 75202`** returns real data and
never consumes quota — perfect for kicking the tires.

## Technical details

- **Transport:** Streamable HTTP (stateless)
- **Auth:** OAuth 2.1 (authorization code + PKCE, dynamic client
  registration) or API key
- **Coverage:** United States addresses (street address or lat/lng)
- **Quotas:** tool calls are metered against your DoorProfit plan; free tier
  available, paid plans raise limits

## Links

- [Documentation](https://api.doorprofit.com/docs/#mcp)
- [Sign up (free)](https://api.doorprofit.com/signup)
- [Companion Claude Skill: Property Due Diligence](https://github.com/shawndoor/doorprofit-claude-skills)
- [Privacy](https://api.doorprofit.com/privacy) · [Terms](https://api.doorprofit.com/terms)
- Support: support@doorprofit.com

---

This repository contains the documentation and the open-source stdio bridge
for the hosted server. The data pipeline behind `api.doorprofit.com` is not
open source.

TDQS

A4.4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a clearly distinct data domain: crime/safety, neighborhood demographics, registered offenders, and API usage. The descriptions explicitly cross-reference one another (e.g., 'use search_offenders, not get_crime_data') to prevent misselection. There is no overlap between any two tools.

Naming Consistency4/5

Tools follow a consistent get_/search_ verb-noun pattern (get_crime_data, get_neighborhood_data, get_api_usage, search_offenders). get_ vs search_ is a minor semantic deviation where search_offenders conveys a different query mode, but the pattern is otherwise highly regular.

Tool Count5/5

Four tools is a well-scoped surface for a neighborhood-data server. Each tool covers a distinct domain (crime, demographics, offenders, quota) and earns its place without bloat or redundancy.

Completeness4/5

The surface covers the three core residential-data questions (safety, demographics, offenders) plus operational quota management. Minor gaps exist — no school or transit data — but the stated domains are fully addressed and the free-test-address and pagination details suggest mature handling of edge cases.

Maintenance

ActivitySlowing
ResponsivenessNo issues