Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"civic-library": {
"env": {
"CENSUS_API_KEY": "your-free-census-key-optional"
},
"args": [
"-y",
"civic-library-mcp"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
An MCP server that gives AI agents clean, token-efficient access to US civic & property data — geocoding, census tracts, Opportunity Zones, ACS demographics, and FEMA flood zones — sourced entirely from free federal open data.
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
npx -y 'civic-library-mcp' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked civic-library-mcp against OSV.dev.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in maps
Open-source toolkit for the QVeris capability routing network: CLI, MCP server, Python SDK, skills, and REST API docs for agents to discover, inspect, call, and audit real-world tools.
Hawaii MCP: tours, events, weather, restaurants, and day-plan itineraries across 4 islands.
I Ching hexagram analysis and geographic feng shui for Taiwan locations
Fair meeting point discovery for AI agents with isochrone-based travel time fairness
MCP Security Weekly
Get CVE alerts and security updates for io.github.adriancisnerosspeed-hub/civic-library-mcp and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
An MCP server that gives AI agents clean, token-efficient access to US civic & property data — geocoding, census tracts, Opportunity Zones, ACS demographics, and FEMA flood zones — sourced entirely from free federal open data.
No scraping, no paid keys for the core tools, no proprietary databases. Just the official sources (U.S. Census Bureau, U.S. Treasury CDFI Fund, FEMA), wrapped in a small set of well-described tools that return compact JSON instead of the bloated payloads most data MCPs dump into your context window.
Built for developers working on proptech, real-estate, fintech, civic tech, GIS, and housing research with AI agents.
| Tool | What it does | API key? |
|---|---|---|
geocode_address | US street address → lat/lng + state, county, and 2020 census tract GEOID | None |
lookup_census_tract | lat/lng → the 2020 census tract (with county/state) containing that point | None |
check_opportunity_zone | Is this address / point / tract in a designated Qualified Opportunity Zone? | None |
get_tract_demographics | ACS 5-Year indicators (income, population, home value, poverty rate, …) for a tract | Free Census key |
check_flood_zone | lat/lng → FEMA flood-hazard zone + whether it's a Special Flood Hazard Area | None |
Four of the five tools work with zero configuration. Only get_tract_demographics needs a free Census API key (see below).
Add to your MCP config (e.g. claude_desktop_config.json):
{
"mcpServers": {
"civic-library": {
"command": "npx",
"args": ["-y", "civic-library-mcp"],
"env": {
"CENSUS_API_KEY": "your-free-census-key-optional"
}
}
}
}
claude mcp add civic-library -- npx -y civic-library-mcp
The CENSUS_API_KEY line is optional — leave it out and four of the five tools still work.
get_tract_demographics calls the U.S. Census ACS Data API, which requires a free key. Get one in ~30 seconds at https://api.census.gov/data/key_signup.html and set it as CENSUS_API_KEY in the server's environment.
Check whether a property is in an Opportunity Zone:
// check_opportunity_zone({ "address": "900 Camp St, New Orleans, LA 70130" })
{
"is_opportunity_zone": true,
"tract_geoid_2010": "22071013400",
"designation_type": "Low-Income Community",
"round": "1.0",
"authority": "Tax Cuts and Jobs Act of 2017 (26 U.S.C. § 1400Z-1)",
"resolved_from": "address",
"source": "U.S. Treasury CDFI Fund (designated 2018-12-14)"
}
Flood risk for a coordinate:
// check_flood_zone({ "latitude": 29.9511, "longitude": -90.0715 })
{
"flood_zone": "X",
"zone_subtype": "0.2 PCT ANNUAL CHANCE FLOOD HAZARD",
"in_special_flood_hazard_area": false,
"zone_description": "Moderate-to-minimal risk (outside the 1% annual-chance floodplain).",
"source": "FEMA National Flood Hazard Layer"
}
Tract demographics (needs a key):
// get_tract_demographics({ "tract_geoid": "22071013400",
// "fields": ["population", "median_household_income", "poverty_rate"] })
{
"tract_geoid": "22071013400",
"tract_name": "Census Tract 134, Orleans Parish, Louisiana",
"acs_dataset": "ACS 5-Year 2023",
"population": 2276,
"median_household_income": 41250,
"poverty_rate": 0.231
}
Opportunity Zone designations are keyed to 2010 census tract boundaries, but the default Census geocoder returns 2020 tracts — and tract GEOIDs changed between the two vintages. A naive lookup that matches a 2020 GEOID against the OZ list will silently return wrong answers near any boundary that moved.
check_opportunity_zone handles this correctly: it re-resolves the address/coordinate to its 2010 tract before matching. (You can se