{
  "markdown": "# NYC Property Intel\n\nMCP 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.\n\n**This is a due diligence tool, not an appraisal tool.** It surfaces public record data only; it does not estimate property values.\n\n## Quickstart — Web Chat (no setup)\n\nThe fastest way to try it: open **[nycpropertyintel.com/chat](https://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.\n\n```\n\"What violations does 123 Atlantic Ave, Brooklyn have?\"\n```\n\n### Free guides & lookups\n\n- [NYC Property Due Diligence Checklist](https://nycpropertyintel.com/nyc-property-due-diligence) — the complete pre-offer checklist across 20+ city data sources\n- [NYC HPD Violations Lookup](https://nycpropertyintel.com/hpd-violations) — Class A/B/C breakdown by address\n- [NYC DOB & ECB Violations Lookup](https://nycpropertyintel.com/dob-violations) — open violations, ECB penalties, Local Law 153 lien risk\n- [NYC Property Owner Lookup](https://nycpropertyintel.com/property-owner-lookup) — the owner and HPD contacts behind an LLC\n- [NYC Eviction History by Address](https://nycpropertyintel.com/nyc-eviction-history-search) — City Marshal executed evictions, 2017–present\n- [Check If You Have an Eviction on Your Record (NYC)](https://nycpropertyintel.com/nyc-eviction-record-check) — tenant-facing guide to court records, screening files, and your rights\n\n## Quickstart — Claude Code / Desktop (hosted MCP)\n\nSign up at [nycpropertyintel.com](https://nycpropertyintel.com) to get a free trial token (10 queries/day for 30 days, including up to 5 full due-diligence reports). Then:\n\n**Claude Code** — run once in your terminal:\n\n```bash\nclaude mcp add --transport http nyc-property-intel \\\n  \"https://nyc-property-intel-production.up.railway.app/mcp\" \\\n  --header \"Authorization: Bearer YOUR_TOKEN\" \\\n  --scope user\n```\n\n**Claude Desktop** — add to `claude_desktop_config.json` (Settings → Developer → Edit Config):\n\n```json\n{\n  \"mcpServers\": {\n    \"nyc-property-intel\": {\n      \"type\": \"http\",\n      \"url\": \"https://nyc-property-intel-production.up.railway.app/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer YOUR_TOKEN\"\n      }\n    }\n  }\n}\n```\n\nThen ask Claude:\n\n```\n\"Look up 350 5th Ave, Manhattan\"\n\"What violations does 123 Atlantic Ave, Brooklyn have?\"\n\"Full due diligence on 123 Atlantic Ave, Brooklyn\"\n```\n\n---\n\n## Self-Hosting\n\n### Prerequisites\n\n- Python 3.12+\n- [uv](https://docs.astral.sh/uv/) package manager\n- PostgreSQL 16+\n- [nycdb](https://github.com/nycdb/nycdb) CLI (`pip install nycdb`)\n\n### 1. Clone and install\n\n```bash\ngit clone https://github.com/ccedacero/nyc-property-intel.git\ncd nyc-property-intel\nuv sync\n```\n\n### 2. Configure environment\n\n```bash\ncp .env.example .env\n# Edit .env:\n#   DATABASE_URL=postgresql://nycdb:nycdb@localhost:5432/nycdb\n#   NYC_GEOCLIENT_SUBSCRIPTION_KEY=your_key  (optional, improves address resolution)\n#   SOCRATA_APP_TOKEN=your_token             (optional, higher rate limits for 311/FDNY/NYPD)\n```\n\n### 3. Set up the database\n\n**Option A: Restore from dump (~10 min)**\n\n```bash\ncreateuser -s nycdb 2>/dev/null; createdb -O nycdb nycdb 2>/dev/null\npg_restore -U nycdb -d nycdb --no-owner --jobs=4 data/nycdb.dump\n```\n\n**Option B: Load from source (~2.5 hours)**\n\n```bash\ncreateuser -s nycdb 2>/dev/null; createdb -O nycdb nycdb 2>/dev/null\nchmod +x scripts/seed_nycdb.sh\n./scripts/seed_nycdb.sh              # all phases\n# or incrementally:\n./scripts/seed_nycdb.sh --phase A    # core data (~30 min)\n./scripts/seed_nycdb.sh --phase B    # sales + DOB (~45 min)\n./scripts/seed_nycdb.sh --phase C    # ACRIS + permits (~90 min)\n```\n\nThen create indexes and materialized views:\n\n```bash\npsql -U nycdb -d nycdb -f scripts/create_indexes.sql\npsql -U nycdb -d nycdb -f scripts/create_views.sql\n```\n\n### 4. Add to Claude Desktop\n\n```json\n{\n  \"mcpServers\": {\n    \"nyc-property-intel\": {\n      \"command\": \"uv\",\n      \"args\": [\"run\", \"nyc-property-intel\"],\n      \"cwd\": \"/absolute/path/to/nyc-property-intel\",\n      \"env\": {\n        \"DATABASE_URL\": \"postgresql://nycdb:nycdb@localhost:5432/nycdb\"\n      }\n    }\n  }\n}\n```\n\n### 5. Add to Claude Code\n\nThe `.mcp.json` in the project root auto-registers when you open this directory. Or add manually to `~/.claude.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"nyc-property-intel\": {\n      \"command\": \"uv\",\n      \"args\": [\"run\", \"nyc-property-intel\"],\n      \"cwd\": \"/absolute/path/to/nyc-property-intel\"\n    }\n  }\n}\n```\n\n---\n\n## 18 Tools\n\n| Tool | Description |\n|------|-------------|\n| `lookup_property` | Resolve any NYC address or BBL to a full property profile: owner, building class, zoning, FAR, assessed value, lot dimensions. **Always call this first.** |\n| `get_property_issues` | HPD housing violations (Class A/B/C), DOB building code violations, and ECB/OATH monetary penalties. Filter by severity, status, and date. |\n| `get_property_history` | DOF sales records and ACRIS deed transfers. Price trajectory, buyer/seller names, document types going back to 2003. |\n| `get_hpd_complaints` | Tenant-reported HPD complaints — leading indicators of building distress before formal violations are issued. |\n| `get_hpd_litigations` | HPD housing court cases, open judgements, and harassment findings against building owners. |\n| `get_hpd_registration` | Legal owner, managing agent, and head officer registration records. |\n| `get_building_permits` | DOB job filings: new buildings, alterations, demolitions, sign permits. Status, cost estimate, applicant name. |\n| `get_liens_and_encumbrances` | DOF tax lien sale list entries and ACRIS mortgage records. Outstanding liens, lender names, amounts, satisfactions. |\n| `get_tax_info` | Tax assessments, market value estimates, taxable value, and active exemptions (421a, J-51, STAR). |\n| `get_rent_stabilization` | Rent-stabilized unit counts by year (2007–2017). Trend analysis for deregulation signal. |\n| `search_comps` | Comparable sales by zip code. Filter by building class, price, date. Includes quarterly market stats. |\n| `search_neighborhood_stats` | Area-level aggregates: property stock, median sale prices, violation rates, rent stabilization share. |\n| `get_fdny_fire_incidents` | FDNY fire and emergency incident history. Fire type, alarm level, spread, casualties, duration. 2013–present, loaded from NYC Open Data. |\n| `get_311_complaints` | 311 service requests at or near a property. Noise, rodents, heat, illegal dumping, and 200+ types. 2010–present, loaded from NYC Open Data. |\n| `get_evictions` | Marshal-executed evictions by address. Residential and commercial. 2017–present, loaded from NYC Open Data. |\n| `get_dob_complaints` | DOB complaints filed before formal violations — the earliest public signal of construction or safety issues. |\n| `get_nypd_crime` | NYPD crime complaints within a configurable radius (default 300 m ≈ 3 blocks). Felony/misdemeanor breakdown, top offenses, year-over-year trend. |\n| `analyze_property` | Full due diligence summary — runs all sub-queries concurrently. Property profile, FAR analysis, financials, risk factors, rent stabilization, comparable sales, and key observations. |\n\n---\n\n## Data Sources\n\nCore data (~19 million rows) is loaded from [nycdb](https://github.com/nycdb/nycdb). All datasets are loaded into PostgreSQL. Socrata API used as fallback only.\n\n| Dataset | Agency | Notes |\n|---------|--------|-------|\n| PLUTO | DCP | Property profiles, zoning, FAR, building class |\n| PAD | DCP | Address-to-BBL resolution |\n| HPD Violations | HPD | Housing code violations by class and status |\n| HPD Complaints | HPD | Tenant complaint records |\n| HPD Registrations | HPD | Owner/agent/officer registration |\n| HPD Litigations | HPD | Housing court cases |\n| DOB Violations | DOB | Building code violations |\n| ECB Violations | OATH/ECB | Environmental Control Board penalties |\n| DOF Rolling Sales | DOF | Recent property sales |\n| DOF Annual Sales | DOF | Historical sales 2003–present |\n| DOF Assessments | DOF | Tax valuations and assessment rolls |\n| DOF Exemptions | DOF | Tax exemption records (421a, J-51, STAR) |\n| DOF Tax Liens | DOF | Annual lien sale list |\n| Rent Stabilization | DOF | Stabilized unit counts by building, 2007–2017 (derived from DOF tax bills via taxbills.nyc / JustFix) |\n| ACRIS | DOF | Deeds, mortgages, liens, satisfactions, UCC filings |\n| FDNY Fire Incidents | FDNY | 2013–present |\n| 311 Service Requests | 311/DOITT | 2010–present |\n| Marshal Evictions | DOI | 2017–present |\n| DOB Complaints | DOB | Loaded from NYC Open Data |\n| NYPD Crime Data | NYPD | 2006–present, geospatial radius |\n\n---\n\n## Architecture\n\n```\nsrc/nyc_property_intel/\n  app.py              # FastMCP instance + system prompt\n  server.py           # Entry point: lifespan, auth middleware, tool registration\n  config.py           # pydantic-settings (reads .env / environment variables)\n  db.py               # asyncpg connection pool + query helpers\n  auth.py             # Token validation, rate limiting, usage logging\n  analytics.py        # PostHog event capture (fire-and-forget)\n  geoclient.py        # NYC GeoClient API + PAD fallback for address resolution\n  socrata.py          # Socrata Open Data API client — fallback for FDNY, 311, NYPD, evictions\n  loops_webhook.py    # Loops.so webhook → auto-provision trial tokens on signup\n  tools/\n    lookup.py         # lookup_property\n    issues.py         # get_property_issues\n    history.py        # get_property_history\n    hpd_complaints.py # get_hpd_complaints\n    hpd_litigations.py# get_hpd_litigations\n    hpd_registration.py# get_hpd_registration\n    permits.py        # get_building_permits\n    liens.py          # get_liens_and_encumbrances\n    tax.py            # get_tax_info\n    rentstab.py       # get_rent_stabilization\n    comps.py          # search_comps\n    neighborhood.py   # search_neighborhood_stats\n    fdny.py           # get_fdny_fire_incidents\n    complaints_311.py # get_311_complaints\n    evictions.py      # get_evictions\n    dob_complaints.py # get_dob_complaints\n    nypd_crime.py     # get_nypd_crime\n    analysis.py       # analyze_property\nscripts/\n  seed_nycdb.sh         # Downloads and loads all nycdb datasets\n  create_indexes.sql    # Performance indexes on critical columns\n  create_views.sql      # Materialized views for fast property lookup\n  manage_tokens.py      # CLI for provisioning and managing customer tokens\n```\n\n---\n\n## Development\n\n```bash\nuv run pytest tests/test_utils.py -q          # unit tests (no DB needed)\nuv run pytest tests/ -m integration -q        # integration tests (needs live DB)\nuv run ruff check src/                         # lint\nuv run nyc-property-intel                      # run server locally (stdio)\n```\n\n---\n\n## Fair Housing\n\nNYC 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](https://nycpropertyintel.com/#fair-housing) for the full policy.\n\n## License\n\nMIT\n\n",
  "bytes": 11310,
  "sha": "b550f62d6d4e47a466a8287279eef876ad1beab1f7af3b92b32c8754bc780988",
  "repo_slug": "ccedacero/nyc-property-intel",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_ccedacero_nyc_property_intel_d22bf361/readme"
}