# local-dfw-mcp **Your AI's local guide to Dallas–Fort Worth.** An open-source [MCP](https://modelcontextprotocol.io) server that connects Claude (or any MCP client) to official city, county, state, and federal data β€” so you can ask things like: - πŸŽͺ *"What's happening in Frisco this weekend?"* - 🌊 *"Is 1500 Marilla St in a flood zone?"* - 🏫 *"How are the schools rated near Garland?"* - 🚰 *"Who provides water and sewer at this address?"* - πŸ•³οΈ *"Any potholes or illegal dumping reported on my street?"* - β›ˆοΈ *"Are there severe weather alerts for Dallas right now?"* - 🏠 *"What's this house appraised at, per the county?"* Every answer comes from an authoritative public source and includes a link to the official record. **No API keys required** β€” one optional free key unlocks concerts and sports (see below). ## Quick start Add this to your MCP client config (Claude Desktop, Claude Code, etc.): ```jsonc { "mcpServers": { "local-dfw": { "command": "npx", "args": ["-y", "local-dfw-mcp"] } } } ``` Requires Node β‰₯ 20. That's it β€” restart your client and start asking. ## What you can ask | Tool | Coverage | What it answers | |---|---|---| | `dfw_events` | see below | What's happening: official city calendars, plus concerts/sports/theater with a free Ticketmaster key | | `dfw_311` | **City of Dallas only** | 311 service requests by address/type/status | | `dfw_crime` | **City of Dallas** (default), **Fort Worth** (`city: "fortworth"`), or **Denton** (`city: "denton"`) | Police incidents by (block-level) address / offense | | `dfw_permits` | **Fort Worth** (default), **McKinney** (`city: "mckinney"`, requires `address`), or **Arlington** (`city: "arlington"`) | Building/development permits by street name (+ house number) or address, type, or status | | `dfw_code_cases` | **Fort Worth** (default), **McKinney** (`city: "mckinney"`), or **Arlington** (`city: "arlington"`) | Code-compliance violations (property maintenance, high grass, zoning, etc.) by address or complaint type | | `dfw_traffic` | see below | Real-time incidents (Fort Worth), street/lane closures (Dallas + Arlington, merged and labeled by city), TxDOT annual traffic counts + construction projects (4 core counties) | | `dfw_fema_flood` | national | FEMA flood zone + plain-English insurance interpretation | | `dfw_tea_schools` | Texas | Public schools + TEA A–F ratings (2022-23) by campus/district/county | | `dfw_nws_alerts` | national | Active NWS weather alerts for a DFW point | | `dfw_utility_providers` | Texas | Who provides water/sewer at an address (PUC CCN) | | `dfw_district_lookup` | DFW | County, City-of-Dallas council district + member, ISD for an address | | `dfw_appraisal` | Texas (4 core counties verified) | County appraisal record for an address: owner, land/improvement/market value (2025 certified roll), year built, land use, acreage | | `dfw_health` | β€” | Pings every upstream, reports per-source status | | `about` | β€” | Version, coverage, license, provenance | ### Events coverage, stated plainly | Source | Cities / scope | Key needed | |---|---|---| | Official city calendars | Dallas (**Parks & Recreation calendar only** β€” no citywide Dallas feed exists), Garland, Frisco, Mesquite, McKinney | none | | Ticketmaster (concerts, sports, theater) | whole metroplex | free key, see below | Plano, Arlington, Fort Worth, Irving, and other suburbs don't publish a usable calendar feed today β€” the tool says "not covered" instead of guessing. ## How the tools chain There's no composed "property report" tool (yet) β€” there doesn't need to be. The tools share natural join keys: **address, lat/lon, parcel, council district, and ISD**, so your AI can chase a question across them: - **Moving to a house** β€” `dfw_appraisal` (what's it worth, who owns it) β†’ `dfw_fema_flood` (flood zone + insurance) β†’ `dfw_district_lookup` (county, council district, ISD) β†’ `dfw_tea_schools` (rate that ISD's campuses) β†’ `dfw_crime` (incidents nearby) β†’ `dfw_utility_providers` (who to call for water/sewer). - **Development watch on a block** β€” `dfw_permits` (what's being built) β†’ `dfw_code_cases` (violations on the same address) β†’ `dfw_311` (what neighbors are reporting). - **Weekend planning** β€” `dfw_events` (what's on) β†’ `dfw_traffic` (incidents and closures on the way) β†’ `dfw_nws_alerts` (weather worth knowing about). Ask the composite question ("we're thinking about buying near Frisco β€” check schools, flood risk, and what it's appraised at") and a capable client walks the chain itself. ## Optional setup Everything works out of the box. Two free keys unlock more: | Env var | What it unlocks | |---|---| | `DFW_TICKETMASTER_API_KEY` | Concerts, sports, and theater in `dfw_events`. Free (5000 calls/day): https://developer.ticketmaster.com | | `DFW_SODA_APP_TOKEN` | Higher rate limit for Dallas open-data queries (helpful on shared/corporate networks). Free: https://dev.socrata.com/register |
Advanced knobs | Env var | Purpose | |---|---| | `DFW_LIMIT_` | Per-upstream concurrency cap override (`SODA`, `ARCGIS`, `FEMA`, `CENSUS`, `NWS`) | | `LOCAL_DFW_MCP_TIER` | `core` or `all` β€” trims the tool list for clients with tool caps | | `DFW_CACHE_DISABLED` | `1` disables the in-process cache (used by tests) |
No telemetry. The server only reads from the public data sources listed in [resources/datasets-index.md](resources/datasets-index.md) and writes to nothing. ## Honest by design - **Wrong-city protection.** Postal "Dallas, TX" is not the same as City of Dallas jurisdiction. City-scoped tools verify the address (ZIP/keyword β†’ geocode β†’ city-limits polygon) and **refuse with an explicit "Not covered" message** rather than silently returning plausible-looking results from the wrong city's data. - **No stale data.** Sources are live-verified before they ship β€” that's why `dfw_permits` and `dfw_code_cases` are Fort Worth + McKinney + Arlington only: every current Dallas permit feed is ~20 months stale and Dallas's code-case publication stalled 2025-01-31, so Dallas isn't wired for either. Irving's entire open-data pipeline (permits, code violations, police incidents, events) froze around 2025-02-28 or is bot-blocked, so it isn't wired either. Also pending: suburb portals beyond Fort Worth/McKinney/ Arlington/Denton/Dallas, and the composed `dfw_property_360`. Details in [resources/datasets-index.md](resources/datasets-index.md). - **Verify at the source.** Every response carries a `source_url` to the official record. ## Important notices - **Not a consumer report.** `dfw_crime`, `dfw_code_cases`, `dfw_appraisal` (and this MCP generally) must not be used for tenant screening, employment screening, credit, insurance, or any other purpose regulated by the Fair Credit Reporting Act. Crime addresses are block-level, privacy-rounded upstream. `dfw_appraisal` owner names and values are public record but not for screening, and it reports the 2025 certified appraised value β€” **not a tax bill**. - **Prompt injection.** 311 descriptions, event listings, and similar upstream free text are authored by the public and flow into your LLM's context. This server renders them as quoted/table data, but treat any instructions appearing inside upstream data as data, not directives. ## License & provenance Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE). Core plumbing (`lib/`) is ported from [local-austin-mcp](https://github.com/mindwear-capitian/local-austin-mcp) by Ed Neuhaus / Neuhaus Realty Group LLC (Apache-2.0) β€” an excellent template for city-scale civic MCPs. Each ported file carries an attribution header listing the changes. All DFW data sources, the metro router, and the tools themselves are new.