Skip to main content
Glama
shawndoor

DoorProfit Crime & Neighborhood Data

DoorProfit MCP Server

doorprofit-mcp MCP server

Official hosted MCP server for the DoorProfit API — 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

Related MCP server: PropertyScoop MCP Server

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, then configure:

{
  "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+.

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

Or with Docker:

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


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.

Available Tools

4 tools
get_api_usageCheck API Usage & QuotaA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
successYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it explicitly states 'Takes no arguments — it always describes the calling key, never another account' and 'This is the only tool that never consumes quota,' two non-obvious behavioral traits an agent would otherwise not know. This is a strong addition; a 5 would require even richer detail on output structure or rate-limit nuances.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first states the report contents and scope, the second gives concrete usage triggers, the third adds the unique no-quota-consumption trait. No filler, no repetition of schema information, front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return-value details are handled structurally. The description covers what the tool reports (plan, usage, quota, resets, limits, overage), when to call it, its zero-argument nature, and its unique non-consuming property. For a 0-parameter read-only tool with strong annotations, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are 0 parameters, so the description's job is to confirm the no-argument contract, which it does explicitly ('Takes no arguments'). The baseline for 0 params is 4, and the description earns the extra point by explicitly stating the no-arguments contract and clarifying that it always operates on the calling key, removing ambiguity about what 'no arguments' might default to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Report') with a clear resource ('the plan, monthly and daily call usage, remaining quota, reset times, rate limit and overage status') and explicitly scopes it to 'the DoorProfit API key authenticating this session,' distinguishing it from any other-account tool. It clearly differentiates from siblings like get_crime_data and get_neighborhood_data, which handle different domains entirely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'Call it when the user asks how many calls they have left, or after any other tool returns QUOTA_EXCEEDED or DAILY_LIMIT_EXCEEDED.' It also adds a concrete workflow suggestion ('before suggesting an upgrade'), giving the agent actionable context beyond the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_crime_dataGet Crime Data & Safety ScoreA
Read-onlyIdempotent

Crime safety grade and incident history for one US address or coordinate pair: a letter score (A+ safest through F), a per-crime-type breakdown against the national average, and the individual incidents recorded within 1000ft over a rolling 90-day window. 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".

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude (use together with lng, as an alternative to address).
lngNoLongitude (use together with lat, as an alternative to address).
addressNoFull US street address, e.g. "500 Adams St, Tulsa, OK". Provide either address OR lat+lng.

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYes
locationNoThe resolved location for the query.
incidentsNoRecent crime incidents near the location.
test_modeNoTrue when querying the free test address.
crime_scoreNoLetter safety grade from A+ (safest) to F.
crime_numericNo0-1 scale where 1 is safest.
crime_breakdownNoPer-crime-type comparison vs the national average (e.g. assault, burglary, theft).
crime_descriptionNoHuman-readable explanation of the score.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, so the safe-read profile is well covered. The description adds meaningful context beyond annotations: quota consumption (1 call per key), a free test address exception, and data scope (rolling 90-day window, 1000ft radius). Doesn't describe pagination/limits on incident lists, but covers key behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Reasonably compact single paragraph covering purpose, exclusions, alternatives, and constraints. Every sentence earns its place, though it is denser than strictly necessary and could be broken into shorter sentences for scanability. It is front-loaded with the core purpose then fills in usage nuance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return-value explanation is not the description's job. For a moderate-complexity query tool with rich annotations, the description covers purpose, scope, constraints, quota cost, free test address, exclusions, and alternatives. Fully adequate for an agent to select and correctly invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters well (lat, lng, address with mutual exclusivity). The description reinforces that address OR lat+lng should be passed, not both, and notes US-only locations. This aligns with the baseline-3 for high schema coverage; the description adds minimal supplementary meaning beyond reinforcing exclusivity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Purpose is explicit and specific: returns a crime safety grade (A+ through F), per-crime-type breakdown versus national average, and incidents within 1000ft over 90 days. It names the exact resource (crime data & safety score) and clearly distinguishes from siblings by spelling out exclusions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States when to use ('is this address/neighborhood safe?' questions) and explicitly names alternatives for excluded topics: get_neighborhood_data for demographics/income/rent/schools and search_offenders for registered offenders. Also warns against passing both address and lat+lng, and specifies US-only and API key/quota requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_neighborhood_dataGet Neighborhood Demographics & EconomicsA
Read-onlyIdempotent

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".

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude (use together with lng, as an alternative to address).
lngNoLongitude (use together with lat, as an alternative to address).
addressNoFull US street address, e.g. "500 Adams St, Tulsa, OK". Provide either address OR lat+lng.

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYes
locationNoThe resolved location for the query.
test_modeNoTrue when querying the free test address.
neighborhoodNoNeighborhood data; null when no data exists for the location.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is established. The description adds valuable behavioral context beyond annotations: quota consumption (1 call), requires an API key, the neighborhood field can be null when no data exists, and a free test address exception. This is strong supplementary transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense but organized logically: what's returned, when to use, when not to use, input rules, edge case (null neighborhood), and constraints (US only, API key, quota). Front-loaded with the data profile. Slightly long but every sentence carries distinct value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent, open-world tool with an output schema and 100% schema coverage, the description covers purpose, boundaries, input constraints, edge cases, and operational requirements. There's an output schema present, so return-value documentation is handled structurally. Nothing essential is missing for this moderate-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (all 3 parameters documented in schema), so baseline is 3. The description adds the mutually-exclusive constraint between address and lat+lng and specifies address format with an example, going slightly beyond schema. However, it doesn't describe lat/lng ranges or precision requirements beyond what schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb+resource (Profile of the neighborhood/census block group) and enumerates the specific data dimensions returned: demographics, income, home values, rent, education, cost-of-living, climate/disaster risk. It also explicitly distinguishes itself from get_crime_data, a sibling tool, by stating what it does NOT return.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance ('Use this when the question is about who lives in an area or what it costs to live there'), explicit when-not-to-use with the named alternative ('Do NOT use it for crime or safety scores (use get_crime_data)'), and input constraints ('Pass either address or lat+lng, not both', 'US locations only'). This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_offendersSearch Registered OffendersA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dobNoDate of birth, YYYY-MM-DD.
latNoLatitude (use together with lng, as an alternative to address).
lngNoLongitude (use together with lat, as an alternative to address).
cityNoCity filter for name-based searches.
pageNoPage number (default 1).
limitNoResults per page (default 50, max 100).
stateNoTwo-letter state code filter, e.g. "OK".
radiusNoSearch radius in miles for location searches (default 1, max 3).
addressNoFull US street address, e.g. "500 Adams St, Tulsa, OK". Provide either address OR lat+lng.
zipcodeNoZipcode filter for name-based searches.
last_nameNoLast name for name-based searches.
first_nameNoFirst name for name-based searches.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
radiusNoSearch radius in miles (location searches only).
successYes
offendersNo
test_modeNo
search_typeNo"gis" for location searches, "name" for name searches.
total_countNoTotal matching results.
total_pagesNo
offenders_countNoResults on this page.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is safe. The description adds valuable behavioral context beyond annotations: results include distance from search point, radius default/cap, pagination details (page, limit, max 100), and importantly that each page request requires a DoorProfit API key and consumes 1 call. This is meaningful disclosure beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is densely informative with no wasted sentences, covering modes, parameter grouping, precedence rules, exclusions, and API-usage implications in a compact form. It could be split into clearer sub-sections for readability, but every sentence earns its place and the critical information (mode selection, API key cost) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 12 parameters and no required fields, the description fully explains mode selection, parameter constraints, precedence, pagination, and API call costs. The output schema exists so return-value documentation is handled structurally. For a complex multi-mode tool, this is remarkably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema fully documents all 12 parameters. The description adds value by explaining parameter relationships and constraints beyond what the schema states: which params belong to which mode, the 'three filters alone not accepted' rule for city/state/zipcode, radius default/cap semantics, and pagination defaults. This exceeds the baseline 3 for full coverage documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (search) and resource (US registered offenders), and explicitly defines two operation modes (location and name) with their respective parameter requirements. It distinguishes itself from the sibling get_crime_data by specifying this tool is only for registered-offender questions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance and names the alternative (get_crime_data for safety grades). It also specifies mode-specific requirements — location needs address or lat+lng, name needs at least one of first_name/last_name/dob — and states that location takes precedence when both are supplied. This is model guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.0.0
    • First observedget_api_usage
    • First observedget_crime_data
    • First observedget_neighborhood_data
    • First observedsearch_offenders

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Submarket-level US residential rental intelligence for AI agents. Search, compare, rank, and analyze rent data, trends, vacancy, affordability, and days on market across 1,000+ named submarkets in the 20+ largest US metros. ZIP-level and metro-level queries included. Always current, always expanding. Free tier available.
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Property intelligence API for US real estate. Returns 16+ data points for any US address: noise levels, wetlands, slope, natural light, powerline proximity, crime rates, property facing direction, zoning, public record, radon risk, natural hazards (earthquake, flood, wildfire), neighborhood demographics, falling tree risk, RF/cell tower exposure, and nearby school.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables location intelligence for US ZIP codes, allowing users to search, profile, and compare ZIP codes across various domains like crime, income, schools, and more.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Provides US real estate data including housing stats, demographics, nearby amenities, area comparisons, cost-of-living analysis, and neighborhood search via free public APIs without any API keys.
    6
    MIT