{"serverId":"mcp-registry/io.github.andrew-sondgeroth/zipexplore-mcp","tools":[{"name":"compare_zips","fixed":{"name":"compare_zips","description":"Side-by-side full profiles for 2–5 ZIP codes. Use when the user has\n        finalists and needs to choose between them. Returns the same profile\n        shape as get_zip_profile for each ZIP.\n        ","inputSchema":{"type":"object","title":"compare_zipsArguments","required":["zips"],"properties":{"zips":{"type":"array","items":{"type":"string"},"title":"Zips"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"get_air_quality_profile","fixed":{"name":"get_air_quality_profile","description":"Detailed air quality data for one ZIP code. Use when get_zip_profile's\n        air quality section isn't sufficient depth. Includes EPA AQS pollutant\n        levels (PM2.5, PM10, ozone, NO2, SO2, CO) and AQI summary.\n        ","inputSchema":{"type":"object","title":"get_air_quality_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":119,"tokensAfter":119},{"name":"get_article","fixed":{"name":"get_article","description":"Returns the full prose of a specific ZipExplore research article. Use this for editing, fact-checking, detailed analysis, or when get_research summaries aren't enough. Valid slugs: disappearing-towns, hazard-premium, snap-economy, wealthy-retirees. Each article includes all body sections and methodology notes exactly as published.","inputSchema":{"type":"object","title":"get_articleArguments","required":["slug"],"properties":{"slug":{"type":"string","title":"Slug"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":142,"tokensAfter":142},{"name":"get_business_profile","fixed":{"name":"get_business_profile","description":"Detailed business and employment data for one ZIP code. Use when\n        get_zip_profile's business section isn't sufficient depth. Includes\n        top industries, sector breakdowns, total establishments, employment,\n        and annual payroll from Census BDS/CBP data.\n        ","inputSchema":{"type":"object","title":"get_business_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":132,"tokensAfter":132},{"name":"get_census_profile","fixed":{"name":"get_census_profile","description":"Detailed Census / demographics data for one ZIP code. Use when\n        get_zip_profile's demographics section isn't sufficient depth.\n        Includes population, housing, income distribution, education attainment,\n        economic indicators, internet access, and public assistance rates.\n        ","inputSchema":{"type":"object","title":"get_census_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"get_cost_profile","fixed":{"name":"get_cost_profile","description":"Detailed cost of living data for one ZIP code. Use when get_zip_profile's\n        cost section isn't sufficient depth. Includes fair market rents, housing\n        cost burden, regional price indices, and affordability metrics.\n        ","inputSchema":{"type":"object","title":"get_cost_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"get_crime_profile","fixed":{"name":"get_crime_profile","description":"Detailed crime data for one ZIP code. Use when get_zip_profile's crime\n        section isn't sufficient depth. Includes violent crime rate, property\n        crime rate, and data quality flags (coverage level, Bayesian shrinkage).\n        ","inputSchema":{"type":"object","title":"get_crime_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":119,"tokensAfter":119},{"name":"get_disaster_risk_profile","fixed":{"name":"get_disaster_risk_profile","description":"Detailed natural disaster risk data for one ZIP code. Use when\n        get_zip_profile's disaster risk section isn't sufficient depth. Includes\n        FEMA NRI overall risk score, individual hazard scores (hurricane, tornado,\n        earthquake, wildfire, flood, etc.), and expected annual loss estimates.\n        ","inputSchema":{"type":"object","title":"get_disaster_risk_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":145,"tokensAfter":145},{"name":"get_education_profile","fixed":{"name":"get_education_profile","description":"Detailed school data for one ZIP code. Use when get_zip_profile's\n        education section isn't sufficient depth. Includes school counts,\n        student-teacher ratios, graduation rates, per-pupil spending, Title I\n        percentage, and budget breakdown (instruction vs. admin vs. capital).\n        May reflect data from the nearest ZIP if no schools are in this ZIP.\n        ","inputSchema":{"type":"object","title":"get_education_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":162,"tokensAfter":162},{"name":"get_healthcare_profile","fixed":{"name":"get_healthcare_profile","description":"Detailed healthcare data for one ZIP code. Use when get_zip_profile's\n        healthcare section isn't sufficient depth. Includes hospital count and\n        ratings, nursing homes, beds per capita, primary care and mental health\n        shortage area designations, pharmacy count, and urgent care count.\n        ","inputSchema":{"type":"object","title":"get_healthcare_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":143,"tokensAfter":143},{"name":"get_methodology","fixed":{"name":"get_methodology","description":"Returns ZipExplore's data interpretation guide: reasoning guardrails (associations vs. causes, small-ZIP noise, averages hiding distributions, editorial score weights, drawing conclusions about people from geographic data), quality flag definitions, known data limitations, coverage gap explanations, and per-domain vintage summary. Call this when you have questions about data quality, what a quality_flag code means, why a ZIP has no data, or how to reason carefully about scores and correlations.","inputSchema":{"type":"object","title":"get_methodologyArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":174,"tokensAfter":174},{"name":"get_research","fixed":{"name":"get_research","description":"Returns ZipExplore's published research articles — original data findings on topics including disaster risk vs. housing costs (the Hazard Premium), food insecurity in fully-employed communities (SNAP economy), economically declining towns vs. retirement communities, and income variation among America's oldest ZIP codes. Each entry includes the key finding, specific quantitative results, caveats, and a URL to the full article. Call this when a user asks about these topics or when published findin","inputSchema":{"type":"object","title":"get_researchArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":173,"tokensAfter":173},{"name":"get_search_fields","fixed":{"name":"get_search_fields","description":"Lists every field name, type, and description available for search\n        criteria. Call this when you're unsure what field names to pass to\n        search_zips, or when the user asks what data ZipExplore has.\n        ","inputSchema":{"type":"object","title":"get_search_fieldsArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":98,"tokensAfter":98},{"name":"get_tax_profile","fixed":{"name":"get_tax_profile","description":"Detailed tax data for one ZIP code. Use when get_zip_profile's tax\n        section isn't sufficient depth. Includes state income tax, sales tax,\n        property tax effective rates, excise taxes, and IRS income statistics.\n        ","inputSchema":{"type":"object","title":"get_tax_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":116,"tokensAfter":116},{"name":"get_transit_profile","fixed":{"name":"get_transit_profile","description":"Detailed public transit data for one ZIP code. Use when get_zip_profile's\n        transit section isn't sufficient depth. Includes bus stop count, subway\n        station count, rail station count, light rail count, ferry terminal count,\n        total transit stops, transit commute percentage, and nearest subway/rail\n        distances.\n        ","inputSchema":{"type":"object","title":"get_transit_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":150,"tokensAfter":150},{"name":"get_voting_profile","fixed":{"name":"get_voting_profile","description":"Detailed voting and political data for one ZIP code. Use when\n        get_zip_profile's voting section isn't sufficient depth. Includes\n        presidential election results, partisan lean, congressional and\n        state legislative districts, and state officials.\n        ","inputSchema":{"type":"object","title":"get_voting_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"get_weather_profile","fixed":{"name":"get_weather_profile","description":"Detailed climate data for one ZIP code. Use when get_zip_profile's\n        climate section isn't sufficient depth. Includes annual/monthly temperature\n        averages, precipitation, humidity, and nearest weather station info.\n        ","inputSchema":{"type":"object","title":"get_weather_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"get_zip_centroids","fixed":{"name":"get_zip_centroids","description":"Get the latitude/longitude centroid for one or more ZIP codes (max 200).\n        Use when you need map coordinates for a set of ZIPs.\n        ","inputSchema":{"type":"object","title":"get_zip_centroidsArguments","required":["zips"],"properties":{"zips":{"type":"array","items":{"type":"string"},"title":"Zips"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":100,"tokensAfter":100},{"name":"get_zip_profile","fixed":{"name":"get_zip_profile","description":"Full location profile for one ZIP code across all 12 data domains:\n        demographics, climate, tax, crime, cost of living, voting, education,\n        healthcare, business, air quality, disaster risk, and transit. Use this\n        to get detail on a ZIP after search, or when the user asks about a\n        specific ZIP. For deeper data on one domain, use the domain-specific tools.\n        ","inputSchema":{"type":"object","title":"get_zip_profileArguments","required":["zip"],"properties":{"zip":{"type":"string","title":"Zip"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":161,"tokensAfter":161},{"name":"ping","fixed":{"name":"ping","description":"Returns server status and tool/resource counts. Use this to verify the ZipExplore MCP connection is live.","inputSchema":{"type":"object","title":"pingArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":59,"tokensAfter":59},{"name":"search_zips","fixed":{"name":"search_zips","description":"Find ZIP codes matching one or more criteria. Returns a ranked list with\n        scores. Use this first when the user wants recommendations (e.g. \"find a\n        low-crime suburb near Denver\"). Call get_search_fields first if you're\n        unsure what field names to use.\n\n        criteria: list of {\"field\": str, \"level\": \"low\"|\"medium\"|\"high\"}\n        area_types: \"CITY\" | \"SUBURB\" | \"SMALL_TOWN\" | \"RURAL\"\n        regions: \"northeast\" | \"southeast\" | \"midwest\" | \"southwest\" | \"west\"\n        ","inputSchema":{"type":"object","title":"search_zipsArguments","required":["criteria"],"properties":{"limit":{"type":"integer","title":"Limit","default":10},"states":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"States","default":null},"regions":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Regions","default":null},"criteria":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Criteria"},"area_types":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Area Types","default":null},"minimum_completeness":{"type":"number","title":"Minimum Completeness","default":0.7}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":352,"tokensAfter":352}],"toolsChanged":21,"tokensSaved":0,"todo":[{"tool":"compare_zips","params":["zips"]},{"tool":"get_air_quality_profile","params":["zip"]},{"tool":"get_article","params":["slug"]},{"tool":"get_business_profile","params":["zip"]},{"tool":"get_census_profile","params":["zip"]},{"tool":"get_cost_profile","params":["zip"]},{"tool":"get_crime_profile","params":["zip"]},{"tool":"get_disaster_risk_profile","params":["zip"]},{"tool":"get_education_profile","params":["zip"]},{"tool":"get_healthcare_profile","params":["zip"]},{"tool":"get_tax_profile","params":["zip"]},{"tool":"get_transit_profile","params":["zip"]},{"tool":"get_voting_profile","params":["zip"]},{"tool":"get_weather_profile","params":["zip"]},{"tool":"get_zip_centroids","params":["zips"]},{"tool":"get_zip_profile","params":["zip"]},{"tool":"reverse_geocode","params":["lat","lon"]},{"tool":"search_zips","params":["limit","states","regions","criteria","area_types","minimum_completeness"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}