DoorProfit Crime & Neighborhood Data

US crime scores, incidents, neighborhood demographics, rent data, and offender search by address.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
75%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,507Tokens (tool definitions)
~5.8 KBTypical response size
Moderate attention impact (1.96% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "doorprofit": {
      "url": "https://api.doorprofit.com/mcp"
    }
  }
}

Remote endpoints

https://api.doorprofit.com/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_crime_data(address, lat, lng)

Crime safety grade and nearby incident counts for one US address or coordinate pair. Returns a letter score (A+ safest through F), a short description of that grade, and — in cities where police publish incident data — counts by crime type within 1000ft for the same period the grade was built from (date_from/date_to; this varies by city and is not a live feed). incidents is null where we do not have incident data; a count of 0 means none were reported in that period. There is no national-average breakdown and no list of individual incidents. Use this for "is this address/neighborhood safe?" questions. Do NOT use it for demographics, income, rent or schools (use get_neighborhood_data) or for registered offenders (use search_offenders) — neither is included here. Pass either address or lat+lng, not both. US locations only; requires a DoorProfit API key and consumes 1 call from that key's quota, except for the free test address "500 Main St, Dallas, TX 75202".

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Full US street address, e.g. \"500 Adams St, Tulsa, OK\". Provide either address OR lat+lng."
    },
    "lat": {
      "type": "number",
      "description": "Latitude (use together with lng, as an alternative to address)."
    },
    "lng": {
      "type": "number",
      "description": "Longitude (use together with lat, as an alternative to address)."
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "success": {
      "type": "boolean"
    },
    "test_mode": {
      "type": "boolean",
      "description": "True when querying the free test address."
    },
    "location": {
      "type": "object",
      "description": "The resolved location for the query.",
      "properties": {
        "address": {
          "type": [
            "string",
            "null"
          ],
          "description": "Formatted address."
        },
        "city": {
          "type": [
            "string",
            "null"
          ]
        },
        "state": {
          "type": [
            "string",
            "null"
          ],
          "description": "Two-letter state code."
        },
        "zipcode": {
          "type": [
            "string",
            "null"
          ]
        },
        "county": {
          "type": [
            "string",
            "null"
          ]
        },
        "lat": {
          "type": "number"
        },
        "lng": {
          "type": "number"
        }
      },
      "additionalProperties": true
    },
    "crime_score": {
      "type": [
        "string",
        "null"
      ],
      "description": "Letter safety grade from A+ (safest) to F."
    },
    "crime_numeric": {
      "type": [
        "number",
        "null"
      ],
      "description": "0-1 scale where 1 is safest."
    },
    "crime_description": {
      "type": [
        "string",
        "null"
      ],
      "description": "Human-readable explanation of the score."
    },
    "crime_score_source": {
      "type": [
        "string",
        "null"
      ],
      "description": "\"incidents\" when the grade comes from reported incidents on that block, \"block_group\" otherwise."
    },
    "incidents": {
      "type": [
        "object",
        "null"
      ],
      "description": "Incident counts within radius_feet for date_from through date_to. Null when this city does not publish incident data.",
      "properties": {
        "radius_feet": {
          "type": "integer"
        },
        "date_from": {
          "type": "string",
          "description": "YYYY-MM-DD start of the city scoring period."
        },
        "date_to": {
          "type": "string",
          "description": "YYYY-MM-DD end of the city scoring period."
        },
        "count": {
          "type": "integer",
          "description": "Sum of by_type."
        },
        "by_type": {
          "type": "object",
          "description": "Counts for the 12 types the grade uses. Every key is present; 0 means none reported.",
          "properties": {
            "murder": {
              "type": "integer"
            },
            "shooting": {
              "type": "integer"
            },
            "assault": {
              "type": "integer"
            },
            "sexual_offense": {
              "type": "integer"
            },
            "robbery": {
              "type": "integer"
            },
            "kidnapping": {
              "type": "integer"
            },
            "weapons": {
              "type": "integer"
            },
            "theft": {
              "type": "integer"
            },
            "burglary": {
              "type": "integer"
            },
            "drug_offense": {
              "type": "integer"
            },
            "vandalism": {
              "type": "integer"
            },
            "arson": {
              "type": "integer"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "success"
  ],
  "additionalProperties": true
}
🟢get_neighborhood_data(address, lat, lng)

Profile of the neighborhood (or census block group) containing one US address or coordinate pair: demographics, median household income, home values, rent by bedroom count, education attainment, cost-of-living indices, climate and natural-disaster risk. Use this when the question is about who lives in an area or what it costs to live there. Do NOT use it for crime or safety scores (use get_crime_data) — no crime data is returned here. Pass either address or lat+lng, not both. The neighborhood field is null where no data exists for the location. US locations only; requires a DoorProfit API key and consumes 1 call from that key's quota, except for the free test address "500 Main St, Dallas, TX 75202".

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Full US street address, e.g. \"500 Adams St, Tulsa, OK\". Provide either address OR lat+lng."
    },
    "lat": {
      "type": "number",
      "description": "Latitude (use together with lng, as an alternative to address)."
    },
    "lng": {
      "type": "number",
      "description": "Longitude (use together with lat, as an alternative to address)."
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "success": {
      "type": "boolean"
    },
    "test_mode": {
      "type": "boolean",
      "description": "True when querying the free test address."
    },
    "location": {
      "type": "object",
      "description": "The resolved location for the query.",
      "properties": {
        "address": {
          "type": [
            "string",
            "null"
          ],
          "description": "Formatted address."
        },
        "city": {
          "type": [
            "string",
            "null"
          ]
        },
        "state": {
          "type": [
            "string",
            "null"
          ],
          "description": "Two-letter state code."
        },
        "zipcode": {
          "type": [
            "string",
            "null"
          ]
        },
        "county": {
          "type": [
            "string",
            "null"
          ]
        },
        "lat": {
          "type": "number"
        },
        "lng": {
          "type": "number"
        }
      },
      "additionalProperties": true
    },
    "neighborhood": {
      "type": [
        "object",
        "null"
      ],
      "description": "Neighborhood data; null when no data exists for the location.",
      "properties": {
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": "Named neighborhood, when one exists."
        },
        "data_source": {
          "type": "string",
          "description": "\"neighborhood\" or \"block_group\"."
        },
        "demographics": {
          "type": "object",
          "description": "Population, density, median age, gender, race, and age distribution.",
          "additionalProperties": true
        },
        "income": {
          "type": "object",
          "description": "Median/average household income and income distribution.",
          "additionalProperties": true
        },
        "housing": {
          "type": "object",
          "description": "Median home value, households, year built, occupancy.",
          "additionalProperties": true
        },
        "education": {
          "type": "object",
          "description": "Education attainment percentages.",
          "additionalProperties": true
        },
        "cost_of_living": {
          "type": "object",
          "description": "Cost indices (100 = national average).",
          "additionalProperties": true
        },
        "rent": {
          "type": "object",
          "description": "Median/average rent, by bedroom count.",
          "additionalProperties": true
        },
        "weather": {
          "type": "object",
          "description": "Temperatures, precipitation, and natural disaster risk indices.",
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    }
  },
  "required": [
    "success"
  ],
  "additionalProperties": true
}
🟢search_offenders(address, lat, lng, radius, first_name, ...)

Search US registered offenders in one of two modes. Location mode: pass address or lat+lng, plus an optional radius in miles (default 1, capped at 3); results include each offender's distance from the search point. Name mode: pass at least one of first_name, last_name or dob, optionally narrowed by city/state/zipcode — those three filters alone are not accepted. Location parameters take precedence when both are supplied. Use this only for registered-offender questions; for an overall safety grade use get_crime_data instead. Results are paginated (page, limit, max 100 per page) and each page requested requires a DoorProfit API key and consumes 1 call from that key's quota.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "type": "string",
      "description": "Full US street address, e.g. \"500 Adams St, Tulsa, OK\". Provide either address OR lat+lng."
    },
    "lat": {
      "type": "number",
      "description": "Latitude (use together with lng, as an alternative to address)."
    },
    "lng": {
      "type": "number",
      "description": "Longitude (use together with lat, as an alternative to address)."
    },
    "radius": {
      "type": "number",
      "description": "Search radius in miles for location searches (default 1, max 3)."
    },
    "first_name": {
      "type": "string",
      "description": "First name for name-based searches."
    },
    "last_name": {
      "type": "string",
      "description": "Last name for name-based searches."
    },
    "dob": {
      "type": "string",
      "description": "Date of birth, YYYY-MM-DD."
    },
    "city": {
      "type": "string",
      "description": "City filter for name-based searches."
    },
    "state": {
      "type": "string",
      "description": "Two-letter state code filter, e.g. \"OK\"."
    },
    "zipcode": {
      "type": "string",
      "description": "Zipcode filter for name-based searches."
    },
    "page": {
      "type": "integer",
      "description": "Page number (default 1)."
    },
    "limit": {
      "type": "integer",
      "description": "Results per page (default 50, max 100)."
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "success": {
      "type": "boolean"
    },
    "test_mode": {
      "type": "boolean"
    },
    "search_type": {
      "type": "string",
      "description": "\"gis\" for location searches, \"name\" for name searches."
    },
    "offenders": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "address": {
            "type": [
              "string",
              "null"
            ]
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "state": {
            "type": [
              "string",
              "null"
            ]
          },
          "zipcode": {
            "type": [
              "string",
              "null"
            ]
          },
          "lat": {
            "type": [
              "number",
              "null"
            ]
          },
          "lng": {
            "type": [
              "number",
              "null"
            ]
          },
          "distance": {
            "type": [
              "number",
              "null"
            ],
            "description": "Miles from the search point."
          },
          "photo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Photo URL."
          },
          "age": {
            "type": [
              "integer",
              "string",
              "null"
            ]
          },
          "risk_level": {
            "type": [
              "string",
              "null"
            ]
          },
          "offense": {
            "type": [
              "string",
              "null"
            ],
            "description": "Primary offense description."
          }
        },
        "additionalProperties": true
      }
    },
    "offenders_count": {
      "type": "integer",
      "description": "Results on this page."
    },
    "total_count": {
      "type": "integer",
      "description": "Total matching results."
    },
    "page": {
      "type": "integer"
    },
    "total_pages": {
      "type": "integer"
    },
    "radius": {
      "type": [
        "number",
        "null"
      ],
      "description": "Search radius in miles (location searches only)."
    }
  },
  "required": [
    "success"
  ],
  "additionalProperties": true
}
🟢get_api_usage

Report the plan, monthly and daily call usage, remaining quota, reset times, rate limit and overage status for the DoorProfit API key authenticating this session. Takes no arguments — it always describes the calling key, never another account. Call it when the user asks how many calls they have left, or after any other tool returns QUOTA_EXCEEDED or DAILY_LIMIT_EXCEEDED, to confirm the limit and reset time before suggesting an upgrade. This is the only tool that never consumes quota.

Input Schema

{
  "type": "object",
  "properties": {}
}

Output Schema

{
  "type": "object",
  "properties": {
    "success": {
      "type": "boolean"
    },
    "data": {
      "type": "object",
      "properties": {
        "plan": {
          "type": "object",
          "description": "Plan type, name, and monthly price.",
          "additionalProperties": true
        },
        "monthly": {
          "type": "object",
          "description": "Monthly limit, used, remaining, and reset time.",
          "additionalProperties": true
        },
        "daily": {
          "type": "object",
          "description": "Daily limit, used, remaining, and reset time.",
          "additionalProperties": true
        },
        "rate_limit": {
          "type": "object",
          "description": "Requests-per-second limit.",
          "additionalProperties": true
        },
        "overage": {
          "type": "object",
          "description": "Overage billing status (paid plans).",
          "additionalProperties": true
        },
        "account": {
          "type": "object",
          "description": "Account and subscription status.",
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    }
  },
  "required": [
    "success"
  ],
  "additionalProperties": true
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools