nyc-property-intel
The NYC Property Intel server provides access to 20+ public record datasets for real estate due diligence on any NYC property. Key capabilities include:
Property Lookup: Resolve any address or BBL to a full profile — owner, building class, zoning, FAR, assessed value, and lot dimensions.
Violations & Complaints: Access HPD housing violations (Class A/B/C), DOB code violations, ECB/OATH penalties, HPD tenant complaints, and DOB complaints as early distress signals.
Sales & Ownership History: Track DOF sales records and ACRIS deed transfers (back to 2003) showing price trajectory, buyer/seller names, and document types.
Tax & Financials: Retrieve assessed/market values, tax class, taxable value, and active exemptions (421a, J-51, STAR).
Liens & Encumbrances: View DOF tax lien entries and ACRIS mortgage records including lender names, amounts, and satisfactions.
Building Permits: Review DOB job filings for new buildings, alterations, demolitions, and permits with status and cost estimates.
Rent Stabilization: Check rent-stabilized unit counts (2007–2017) to track deregulation trends.
HPD Registration & Litigation: Look up legal owner, managing agent, and head officer; identify housing court cases, open judgments, and harassment findings.
Comparable Sales & Neighborhood Stats: Find comps by zip code, building class, size, and time period; get area-level aggregates on median prices, violation rates, and rent stabilization share.
FDNY Fire Incidents: Access fire and emergency history (2013–present) including alarm level, spread, casualties, and duration.
311 Complaints: Query 311 service requests (2010–present) covering 200+ types like noise, rodents, and heat.
Evictions: Retrieve marshal-executed eviction records (2017–present) for residential and commercial properties.
NYPD Crime Data: Query crime complaints within a configurable radius with felony/misdemeanor breakdown and year-over-year trends.
Full Due Diligence Report: Run a single comprehensive analysis that concurrently queries all data sources to produce a complete property risk and investment profile.
NYC Property Intel
MCP server that gives Claude AI access to 20+ NYC public record datasets for real estate due diligence. Ask Claude about any NYC property in plain English — violations, liens, sales history, ownership, permits, rent stabilization, zoning, fire history, crime data, and more.
This is a due diligence tool, not an appraisal tool. It surfaces public record data only; it does not estimate property values.
Quickstart — Web Chat (no setup)
The fastest way to try it: open nycpropertyintel.com/chat and ask about any NYC property in plain English. 3 free queries, no signup — no install, no token, and no Claude client needed.
"What violations does 123 Atlantic Ave, Brooklyn have?"Free guides & lookups
NYC Property Due Diligence Checklist — the complete pre-offer checklist across 20+ city data sources
NYC HPD Violations Lookup — Class A/B/C breakdown by address
NYC DOB & ECB Violations Lookup — open violations, ECB penalties, Local Law 153 lien risk
NYC Property Owner Lookup — the owner and HPD contacts behind an LLC
NYC Eviction History by Address — City Marshal executed evictions, 2017–present
Check If You Have an Eviction on Your Record (NYC) — tenant-facing guide to court records, screening files, and your rights
Related MCP server: NYC Property Data MCP Server
Quickstart — Claude Code / Desktop (hosted MCP)
Sign up at nycpropertyintel.com to get a free trial token (10 queries/day for 30 days, including up to 5 full due-diligence reports). Then:
Claude Code — run once in your terminal:
claude mcp add --transport http nyc-property-intel \
"https://nyc-property-intel-production.up.railway.app/mcp" \
--header "Authorization: Bearer YOUR_TOKEN" \
--scope userClaude Desktop — add to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"nyc-property-intel": {
"type": "http",
"url": "https://nyc-property-intel-production.up.railway.app/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}Then ask Claude:
"Look up 350 5th Ave, Manhattan"
"What violations does 123 Atlantic Ave, Brooklyn have?"
"Full due diligence on 123 Atlantic Ave, Brooklyn"Self-Hosting
Prerequisites
1. Clone and install
git clone https://github.com/ccedacero/nyc-property-intel.git
cd nyc-property-intel
uv sync2. Configure environment
cp .env.example .env
# Edit .env:
# DATABASE_URL=postgresql://nycdb:nycdb@localhost:5432/nycdb
# NYC_GEOCLIENT_SUBSCRIPTION_KEY=your_key (optional, improves address resolution)
# SOCRATA_APP_TOKEN=your_token (optional, higher rate limits for 311/FDNY/NYPD)3. Set up the database
Option A: Restore from dump (~10 min)
createuser -s nycdb 2>/dev/null; createdb -O nycdb nycdb 2>/dev/null
pg_restore -U nycdb -d nycdb --no-owner --jobs=4 data/nycdb.dumpOption B: Load from source (~2.5 hours)
createuser -s nycdb 2>/dev/null; createdb -O nycdb nycdb 2>/dev/null
chmod +x scripts/seed_nycdb.sh
./scripts/seed_nycdb.sh # all phases
# or incrementally:
./scripts/seed_nycdb.sh --phase A # core data (~30 min)
./scripts/seed_nycdb.sh --phase B # sales + DOB (~45 min)
./scripts/seed_nycdb.sh --phase C # ACRIS + permits (~90 min)Then create indexes and materialized views:
psql -U nycdb -d nycdb -f scripts/create_indexes.sql
psql -U nycdb -d nycdb -f scripts/create_views.sql4. Add to Claude Desktop
{
"mcpServers": {
"nyc-property-intel": {
"command": "uv",
"args": ["run", "nyc-property-intel"],
"cwd": "/absolute/path/to/nyc-property-intel",
"env": {
"DATABASE_URL": "postgresql://nycdb:nycdb@localhost:5432/nycdb"
}
}
}
}5. Add to Claude Code
The .mcp.json in the project root auto-registers when you open this directory. Or add manually to ~/.claude.json:
{
"mcpServers": {
"nyc-property-intel": {
"command": "uv",
"args": ["run", "nyc-property-intel"],
"cwd": "/absolute/path/to/nyc-property-intel"
}
}
}18 Tools
Tool | Description |
| Resolve any NYC address or BBL to a full property profile: owner, building class, zoning, FAR, assessed value, lot dimensions. Always call this first. |
| HPD housing violations (Class A/B/C), DOB building code violations, and ECB/OATH monetary penalties. Filter by severity, status, and date. |
| DOF sales records and ACRIS deed transfers. Price trajectory, buyer/seller names, document types going back to 2003. |
| Tenant-reported HPD complaints — leading indicators of building distress before formal violations are issued. |
| HPD housing court cases, open judgements, and harassment findings against building owners. |
| Legal owner, managing agent, and head officer registration records. |
| DOB job filings: new buildings, alterations, demolitions, sign permits. Status, cost estimate, applicant name. |
| DOF tax lien sale list entries and ACRIS mortgage records. Outstanding liens, lender names, amounts, satisfactions. |
| Tax assessments, market value estimates, taxable value, and active exemptions (421a, J-51, STAR). |
| Rent-stabilized unit counts by year (2007–2017). Trend analysis for deregulation signal. |
| Comparable sales by zip code. Filter by building class, price, date. Includes quarterly market stats. |
| Area-level aggregates: property stock, median sale prices, violation rates, rent stabilization share. |
| FDNY fire and emergency incident history. Fire type, alarm level, spread, casualties, duration. 2013–present, loaded from NYC Open Data. |
| 311 service requests at or near a property. Noise, rodents, heat, illegal dumping, and 200+ types. 2010–present, loaded from NYC Open Data. |
| Marshal-executed evictions by address. Residential and commercial. 2017–present, loaded from NYC Open Data. |
| DOB complaints filed before formal violations — the earliest public signal of construction or safety issues. |
| NYPD crime complaints within a configurable radius (default 300 m ≈ 3 blocks). Felony/misdemeanor breakdown, top offenses, year-over-year trend. |
| Full due diligence summary — runs all sub-queries concurrently. Property profile, FAR analysis, financials, risk factors, rent stabilization, comparable sales, and key observations. |
Data Sources
Core data (~19 million rows) is loaded from nycdb. All datasets are loaded into PostgreSQL. Socrata API used as fallback only.
Dataset | Agency | Notes |
PLUTO | DCP | Property profiles, zoning, FAR, building class |
PAD | DCP | Address-to-BBL resolution |
HPD Violations | HPD | Housing code violations by class and status |
HPD Complaints | HPD | Tenant complaint records |
HPD Registrations | HPD | Owner/agent/officer registration |
HPD Litigations | HPD | Housing court cases |
DOB Violations | DOB | Building code violations |
ECB Violations | OATH/ECB | Environmental Control Board penalties |
DOF Rolling Sales | DOF | Recent property sales |
DOF Annual Sales | DOF | Historical sales 2003–present |
DOF Assessments | DOF | Tax valuations and assessment rolls |
DOF Exemptions | DOF | Tax exemption records (421a, J-51, STAR) |
DOF Tax Liens | DOF | Annual lien sale list |
Rent Stabilization | DOF | Stabilized unit counts by building, 2007–2017 (derived from DOF tax bills via taxbills.nyc / JustFix) |
ACRIS | DOF | Deeds, mortgages, liens, satisfactions, UCC filings |
FDNY Fire Incidents | FDNY | 2013–present |
311 Service Requests | 311/DOITT | 2010–present |
Marshal Evictions | DOI | 2017–present |
DOB Complaints | DOB | Loaded from NYC Open Data |
NYPD Crime Data | NYPD | 2006–present, geospatial radius |
Architecture
src/nyc_property_intel/
app.py # FastMCP instance + system prompt
server.py # Entry point: lifespan, auth middleware, tool registration
config.py # pydantic-settings (reads .env / environment variables)
db.py # asyncpg connection pool + query helpers
auth.py # Token validation, rate limiting, usage logging
analytics.py # PostHog event capture (fire-and-forget)
geoclient.py # NYC GeoClient API + PAD fallback for address resolution
socrata.py # Socrata Open Data API client — fallback for FDNY, 311, NYPD, evictions
loops_webhook.py # Loops.so webhook → auto-provision trial tokens on signup
tools/
lookup.py # lookup_property
issues.py # get_property_issues
history.py # get_property_history
hpd_complaints.py # get_hpd_complaints
hpd_litigations.py# get_hpd_litigations
hpd_registration.py# get_hpd_registration
permits.py # get_building_permits
liens.py # get_liens_and_encumbrances
tax.py # get_tax_info
rentstab.py # get_rent_stabilization
comps.py # search_comps
neighborhood.py # search_neighborhood_stats
fdny.py # get_fdny_fire_incidents
complaints_311.py # get_311_complaints
evictions.py # get_evictions
dob_complaints.py # get_dob_complaints
nypd_crime.py # get_nypd_crime
analysis.py # analyze_property
scripts/
seed_nycdb.sh # Downloads and loads all nycdb datasets
create_indexes.sql # Performance indexes on critical columns
create_views.sql # Materialized views for fast property lookup
manage_tokens.py # CLI for provisioning and managing customer tokensDevelopment
uv run pytest tests/test_utils.py -q # unit tests (no DB needed)
uv run pytest tests/ -m integration -q # integration tests (needs live DB)
uv run ruff check src/ # lint
uv run nyc-property-intel # run server locally (stdio)Fair Housing
NYC Property Intel provides building and property data from public city records only. It does not provide demographic data, tenant screening, or any analysis based on protected characteristics. See nycpropertyintel.com/#fair-housing for the full policy.
License
MIT
Available Tools
18 toolsanalyze_propertyAInspect
Generate a comprehensive due diligence summary for a NYC property.
Combines data from 14 sources concurrently: property profile, HPD/DOB
violations, HPD complaints, HPD litigations, HPD registration, evictions,
building permits, 311 complaints, sales history, tax assessment, tax liens,
ACRIS mortgages, rent stabilization, and comparable sales. Use this when
the user wants a complete picture of a property for investment analysis.
Inputs: bbl (required).
get_311_complaintsAInspect
Get 311 service request complaints filed at or near a property address.
Queries the local 311 database (NYC Open Data). Covers noise, rodents,
illegal dumping, graffiti, heat/hot water, illegal parking, street
conditions, and ~200 other complaint types.
311 data is a leading-indicator for neighborhood quality and building
distress — complaints are filed *before* violations are issued. High
complaint volume at an address is a red flag for active tenant issues.
Provide either `address` OR `bbl` (not both).
Args:
address: Street address, e.g. "37-06 80th Street, Queens".
bbl: 10-digit NYC BBL. Resolved to street address via PAD table.
complaint_type: Filter by complaint type keyword, e.g. "NOISE",
"RODENT", "HEAT", "ILLEGAL PARKING". Case-insensitive.
since_year: Return only complaints from this year onward (2010–present).
status: Filter by status: "Open" or "Closed".
limit: Max complaints to return (1–100, default 30).
Inputs: address, bbl, complaint_type, since_year, +2 more. Returns: object
get_building_permitsAInspect
Get DOB building permit filings and job applications for a property.
Shows new building, alteration, and demolition applications with costs, status, proposed changes (stories, units, height), and applicant info. Use this to understand planned or completed construction activity.
Inputs: bbl (required), job_type, limit. Returns: object
get_dob_complaintsAInspect
Get DOB complaints filed against a property with the Dept of Buildings.
Queries the DOB Complaints Received dataset (NYC Open Data `eabe-havv`).
Complaints are filed *before* formal violations are issued — they trigger
DOB inspections and are the earliest public signal of construction, safety,
or code issues at a building.
Key insight: compare this with `get_property_issues` violations. If a
property has many complaints but few violations, DOB may not be inspecting.
If complaints are recent and unresolved, it flags active safety concerns.
Common complaint categories: illegal construction (01), elevator (02),
plumbing (03), illegal conversion (04), boiler (05), structural (06),
facade (07), fire egress (09), work without permit (10), electrical (11).
Provide either `address` OR `bbl` (not both).
Args:
address: Street address, e.g. "350 5th Ave, Manhattan".
bbl: 10-digit NYC BBL. Resolved via BIN lookup for accurate matching.
category: Filter by complaint category code, e.g. "01" for
construction without permit, "04" for illegal conversion.
status: Filter by status keyword, e.g. "OPEN", "CLOSED",
"REFERRED TO DA".
since_year: Return only complaints from this year onward.
limit: Max complaints to return (1–100, default 25).
Inputs: address, bbl, category, status, +2 more. Returns: object
get_evictionsAInspect
Get marshal eviction execution records for a property address.
Returns evictions that were *executed* (marshal removed tenant), not just
filed. Covers residential and commercial evictions citywide from 2017.
BBL queries use a local indexed database for fast, exact lookups.
Address queries use the Socrata API for full 126K-row dataset coverage.
Use this to assess tenant instability and cash-flow risk. Many executed
evictions at a building may indicate distressed management, problematic
tenants, or an owner pushing out rent-stabilized tenants.
Provide either `address` OR `bbl` (not both).
Args:
address: Street address, e.g. "123 Main St, Brooklyn".
bbl: 10-digit NYC BBL. Queried directly via BBL index.
eviction_type: Filter by type: "Residential" or "Commercial".
since_year: Return only evictions from this year onward (2017–present).
limit: Max records to return (1–100, default 25).
Inputs: address, bbl, eviction_type, since_year, +1 more. Returns: object
get_fdny_fire_incidentsAInspect
Get FDNY fire and emergency incident history for a property address.
Queries the local FDNY incident database (NYC Open Data dataset 8m42-w767).
Returns fire incidents, structural fires, EMS responses, and other emergency
calls associated with a property's zip code and borough. Falls back to the
Socrata API for finer-grained address matching if local table unavailable.
Use this to identify fire history, structural fire risk, repeated emergency
responses, or patterns of emergency calls at a property's location.
Provide either `address` OR `bbl` (not both). If BBL is given, the tool
resolves it to a zip code before querying.
Args:
address: Street address, e.g. "37-06 80th Street, Queens" or
"350 5th Ave, Manhattan". Borough or zip code recommended.
bbl: 10-digit NYC BBL, e.g. "4008020015". Alternative to address.
incident_type: Filter by incident type keyword, e.g. "FIRE",
"STRUCTURAL", "EMS", "MEDICAL". Case-insensitive.
since_year: Return only incidents from this year onward, e.g. 2018.
Data available from 2013.
limit: Max incidents to return (1–100, default 20).
Inputs: address, bbl, incident_type, since_year, +1 more. Returns: object
get_hpd_complaintsBInspect
Get HPD tenant complaints and reported problems for a property.
Complaints are leading indicators of building distress — they show what
tenants are reporting before formal violations are issued. Categories
include PLUMBING, PAINT/PLASTER, HEAT/HOT WATER, PEST CONTROL, etc.
Use this alongside violations to assess a building's condition.
Note on historical depth: our local DB retains all historical HPD
complaints, while NYC's live Socrata API rolls older records out of
its public feed. As a result, totals reported here may exceed what
data.cityofnewyork.us shows for the same BBL — the extra rows are
real, just no longer surfaced by NYC Open Data.
Inputs: bbl (required), status, category, since_date, +2 more. Returns: object
get_hpd_litigationsBInspect
Get HPD litigation history — cases where HPD sued the building owner.
HPD only litigates the worst-offending buildings. This is a strong red flag for investors. Shows case types (heat/services, harassment, tenant protection), harassment findings, open judgements, and penalties. A building with HPD litigation history carries significant regulatory risk.
Inputs: bbl (required).
get_hpd_registrationAInspect
Get HPD building registration and contact info.
Shows the managing agent, corporate owner, head officer, and site manager for a registered NYC building. Required for buildings with 3+ residential units. Use this to find who manages or owns a building.
Inputs: bbl (required).
get_liens_and_encumbrancesAInspect
Get tax liens and mortgage/encumbrance records for a property.
Shows DOF tax lien sale list entries and ACRIS mortgage documents including lender names, amounts, and satisfaction records. Use this to assess a property's debt profile and lien exposure.
Inputs: bbl (required), include_tax_liens, include_mortgages, limit. Returns: object
get_nypd_crimeAInspect
Get NYPD crime complaints within a radius of a property.
Queries the local NYPD complaint database (NYC Open Data) using a
geospatial bounding-box search centered on the property's lat/lon. Returns
all complaint types — felonies, misdemeanors, and violations — filed within
the specified radius. Falls back to Socrata API if local table is unavailable.
Uses the property's PLUTO coordinates (lot centroid) for accuracy.
Default radius of 300 m covers roughly 3 city blocks in any direction.
Use this to assess neighborhood safety for buyers, lenders, or underwriters.
Compare felony vs misdemeanor breakdown, trend over years, and dominant
offense types (assault, burglary, grand larceny, etc.).
Provide either `address` OR `bbl` (not both).
Args:
address: Street address, e.g. "350 5th Ave, Manhattan".
bbl: 10-digit NYC BBL. Coordinates resolved from PLUTO.
radius_meters: Search radius in meters (50–800, default 300 ≈ 3 blocks).
law_category: Filter by "FELONY", "MISDEMEANOR", or "VIOLATION".
Case-insensitive.
offense: Filter by offense keyword, e.g. "ASSAULT", "BURGLARY",
"GRAND LARCENY", "ROBBERY". Case-insensitive.
since_year: Return only complaints from this year onward (2006–present).
limit: Max complaints to return (1–200, default 50).
Inputs: address, bbl, radius_meters, law_category, +3 more. Returns: object
get_property_historyAInspect
Get the history of a NYC property including sales and ownership transfers.
Pulls sales from DOF records and ownership transfers from ACRIS deed records. Shows sale prices, dates, buyer/seller names, and document types. Use this to understand a property's transaction history and price trajectory.
Inputs: bbl (required), include_sales, include_ownership, include_transactions, +4 more. Returns: object
get_property_issuesAInspect
Get HPD housing violations, DOB building code violations, and ECB/OATH violations for a property.
HPD Class C violations are immediately hazardous. ECB violations include
penalties and balances due. Returns both summary counts and violation
details. Use this to assess a building's regulatory risk profile.
Note on historical depth: our local DB retains all historical HPD
violations and complaints, while NYC's live Socrata API rolls older
records out of its public feed. As a result, the totals reported here
may exceed what data.cityofnewyork.us shows for the same BBL — the
extra rows are real, just no longer surfaced by NYC Open Data.
Inputs: bbl (required), source, status, severity, +3 more. Returns: object
get_rent_stabilizationAInspect
Get rent stabilization history for a property.
Shows stabilized unit counts from 2007-2017 and whether counts are estimated or confirmed by DHCR. Use this to check if a building is rent-stabilized and track unit count changes over time.
Inputs: bbl (required).
get_tax_infoBInspect
Get property tax assessment, market value, and exemption details.
Shows assessed and market values (land and total), tax class, taxable value, and any active tax exemptions like 421a, J-51, or STAR.
Inputs: bbl (required).
lookup_propertyAInspect
Look up a NYC property by address or BBL.
Returns the full property profile including building details, zoning, assessed value, owner, and lot characteristics. This is always the first tool to call — you need a BBL before using other tools.
Inputs: address, bbl, borough. Returns: object
search_compsAInspect
Find comparable property sales and neighborhood market statistics.
Can search by zip code, building class, size, and time period. If a reference BBL is provided, uses that property's characteristics as defaults. Returns individual sales with price per sqft and quarterly market trends.
Inputs: bbl, zip_code, building_class, min_sqft, +6 more. Returns: object
search_neighborhood_statsAInspect
Get aggregate neighborhood statistics for market research and area analysis.
Combines property stock data, sales market activity, violation patterns,
and rent stabilization counts at the zip code or neighborhood level.
Use this to compare areas, identify investment hotspots, or understand
a neighborhood's character before drilling into individual properties.
At least one of zip_code or neighborhood is required.
Inputs: zip_code, neighborhood, building_class, months, +3 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 18 tools
Most tools have distinct purposes clearly described, but there is potential confusion between get_hpd_complaints (complaints) and get_property_issues (violations), as both deal with property condition. Similarly, get_dob_complaints and get_311_complaints might be conflated. However, detailed descriptions mitigate ambiguity.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_evictions, search_comps). The verbs are descriptive and predictable, making it easy for an agent to infer tool functionality from the name.
With 18 tools, the set is comprehensive without being overwhelming. Each tool covers a distinct NYC data source or analysis function, and the count is well-aligned with the server's purpose of providing detailed property intelligence.
The server covers a wide range of NYC property data including violations, complaints, permits, evictions, crime, sales, taxes, and neighborhood statistics. Some niche datasets like flood zones or school quality are missing, but core due diligence needs are met.
Maintenance
Related MCP Connectors
Agent-native MCP server over 49M+ US public and government records, privacy-first, always current.
Property Records MCP — address-level US property records (sales history, assessed value, owner…
Agent-native MCP over US public + government records, entity- and parcel-keyed.
MCP server for querying Tulsa County, Oklahoma property and parcel data for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceBuilt an MCP server that connects Claude Desktop, Cursor, or any MCP client to Northeast Deal Intel's CRE database. 8 tools: • search_deals — filter 14K+ active listings by state, type, score, cap rate • search_comps — 100K+ closed transactions for comp benchmarking • score_deal — submit any property for AI scoring against real comp data • find_1031_candidates — exchange-ready deal filter (price8MIT
- AlicenseAqualityDmaintenanceProvides Claude with access to NYC public property data including property details, sales history, comparable sales, tax benefits, and rent stabilization analysis using natural language.7MIT
- FlicenseAqualityCmaintenanceMCP server that exposes a Hawaii property pipeline as Claude tools, allowing natural language queries about parcel records, hazards, zoning, ADU eligibility, and more, based on real public data.3-
- FlicenseNot gradedqualityDmaintenanceA production-grade MCP server enabling Claude to perform comprehensive NJ real estate workflows including property search, valuation, neighborhood intelligence, investment analysis, and agent tools via 20 tools and 15+ data sources.-