census-mcp-server
Query U.S. Census Bureau data, variables, and geography via MCP. STDIO or Streamable HTTP.
Install / Use
claude mcp add cyanheads -- npx -y github:cyanheads/census-mcp-serverIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AI & Machine LearningSupported Platforms
Tags
Our assessment of census-mcp-server
census-mcp-server scores 71/100 on our quality scale, 879th of 964 AI & Machine Learning skills we index.
Its MCP Server is 20 KB long, well organised into 21 sections with 5 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 3 days ago, so census-mcp-server is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 87/100, with 2 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
census-mcp-server compared with similar skills
All 4 of these similar skills score higher than census-mcp-server; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| census-mcp-server (this skill)by cyanheads | 71 | 3 | 3d ago | MCP Server |
| claude-memby thedotmack | 100 | 114.1k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 109.7k | today | CLAUDE.md |
| Understand-Anythingby Egonex-AI | 100 | 91.1k | 1d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 79.0k | today | CLAUDE.md |
Frequently asked questions
- How do I install census-mcp-server?
- Run
claude mcp add cyanheads -- npx -y github:cyanheads/census-mcp-server. The install tabs above show the steps for each supported agent. - Which AI agents does census-mcp-server work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is census-mcp-server safe to use?
- It is Apache-2.0-licensed and scores 87/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is census-mcp-server still maintained?
- The repository was last updated 3 days ago, so census-mcp-server is actively maintained.
Skill content
View source on GitHubPublic Hosted Server: https://census.caseyjhand.com/mcp
</div>Overview
US Census Bureau demographic, economic, and housing data. Find datasets and variables, resolve place names or addresses to FIPS codes, and query or rank estimates across any set of geographies.
Tools
| Tool | Description |
|:-----|:------------|
| census_list_datasets | Browse available Census Bureau datasets (ACS5 and ACS1 with their profile, subject, and comparison tables, ACS Supplemental Estimates and Selected Population Profiles, Population Estimates, Decennial, County Business Patterns, Economic Census, Nonemployer Statistics) with vintage years and dataset codes. |
| census_list_geographies | List the geography levels supported by a dataset and year, with parent requirements and example FIPS values. |
| census_search_variables | Keyword search across variable labels and concept groups, or lookup by variable or table code. On ACS, returns estimate and margin-of-error codes together. |
| census_get_variable | Fetch full metadata for one or more variable codes — label, concept, predicate type, universe, MOE sibling — including the annotation and flag columns the data tools accept. |
| census_list_predicate_values | List the codes a filter dimension accepts (EMPSZES, LFO, POPGROUP, NAICS2017…), from the dataset dictionary or a live wildcard enumeration. |
| census_resolve_geography | Convert place names (e.g., "King County, WA"), ZIP codes, or street addresses to Census FIPS identifiers via TIGERweb and Census Geocoder. |
| census_query_data | Query a Census dataset for variables at one geography, a comma-separated list of them, or every geography at a level. Returns estimates with MOE, Census sentinel values and withheld business values resolved to their published meanings, and predicate filtering for the business datasets. |
| census_compare_geographies | Rank and compare variables across multiple geographies — all counties in a state, all states nationally, or a named set. Sorted table output, with the same predicate filtering. |
Capability reference
census_list_datasets <sub>tool</sub>
- Returns dataset codes, names, descriptions, and available vintage years, with an optional keyword filter. Covers ACS5 and ACS1 (data profiles, subject tables, comparison profiles, and
acs/acs1/spp),acs/acsse, Population Estimates, the 2020 Decennial files (Redistricting (P.L. 94-171),dec/dhc,dec/dp,dec/sdhc,dec/ddhca,dec/ddhcb),cbp,ecnbasic, andnonemp - Each description names the filter predicates the dataset requires and the geography levels it publishes
- Dataset codes (e.g.,
acs/acs5) are what the other tools take. Case is ignored and a two-part code works by its last part alone (acs5,pl); three-part codes such asacs/acs5/profilemust be given in full available_yearsis exhaustive: any other year fails withyear_not_available, naming the years that work
census_list_geographies <sub>tool</sub>
- Returns one row per geography level and parent hierarchy:
geography_level, whether a parent is required,required_parent_levels, and an example FIPS value.totalLevelscounts each level once geography_levelvalues are the exact inputs tocensus_query_dataandcensus_compare_geographies;yeardefaults to the latest vintage- Fails with
dataset_not_foundoryear_not_available(naming the years served)
census_search_variables <sub>tool</sub>
- Whole-word search across label and concept: every query word must match, otherwise the closest matches come back with a notice. A variable or table code in any case returns that variable, or the whole table in code order, first (
B19013returnsB19013_001EthenB19013_001M) - A code the dataset does not publish gets a notice naming the sibling dataset that holds it (
S1701inacs/acs5points toacs/acs5/subject) orcensus_get_variablefor an attribute column such asB19013_001EA - On ACS datasets, estimate (E suffix) and margin-of-error (M suffix) codes come back together; comparison profiles and the other families publish no margins of error. Also finds predicate codes by keyword (
naics) or code (NAICS2017incbp) limitis an integer from 1 to 100 (default 20), rejected rather than clamped when out of range.offsetpages the complete match ordering;totalMatchescounts matches before paging,truncatedmeans another page exists, andnextOffsetnames it. variables.json is cached per dataset+year (default TTL 24h)
census_get_variable <sub>tool</sub>
- Takes one or more variable codes (case-insensitive) and returns label, concept, predicate type, and the table's universe, in the order given. If
groups.jsoncan't be fetched, variables come back without universe and a notice says to retry - Resolves annotation and flag columns such as
B19013_001EAandEMP_F, withattribute_ofnaming the column each belongs to andattribute_typeits kind (ANNOTATION,FLAG,MARGIN_OF_ERROR). On ACS datasets it also returnsestimate_code/moe_codesibling references - Confirms predicate dimension codes (
NAICS2017,SEX) exist in a dataset;census_list_predicate_valueslists their values.datasetdefaults toacs/acs5andyearto the latest vintage variable_not_foundwhen a code isn't defined, naming the sibling dataset that publishes it when one is found (DP03_0062Einacs/acs5points toacs/acs5/profile)
census_list_predicate_values <sub>tool</sub>
- Lists the codes a filter dimension accepts, read from the dataset dictionary when it publishes a list and enumerated live otherwise.
NAICS*andPOPGROUPhave long lists (thousands of codes; narrow withquery);EMPSZES,LFO,RCPSZES,TAXSTAT, andTYPOPare live-only - Dictionary lists are checked against the rows the dataset actually publishes and unpublished codes are dropped;
sourcesays whether the check ran and the notice gives the number withheld. A dictionary list does not validate publication at a supplied geography level - Live enumeration takes
geography_level(defaultus) and echoes that scope. Codes vary by level; only levels whose dataset metadata permits an unparented wildcard are accepted querymatches code and label; results are sorted by code beforeoffset/limitpaging (limit1 to 500, default 50).totalCountcounts all matches;truncatedmeans another page exists, withnextOffsetonly then. Onecnbasic,within_naicsscopesTAXSTATandTYPOPto one industry- The live route and the dictionary check read the data endpoint, so they need
CENSUS_API_KEY: without a working key a live-only dimension fails withmissing_api_key, while a dictionary list still answers, unchecked, with a notice naming the key
census_resolve_geography <sub>tool</sub>
- Named places (e.g., "King County, WA") resolve via TIGERweb; street addresses resolve to tract level via Census Geocoder, with
block_group_fipsandplace_fips. A 5-digit ZIP (or ZIP+4) resolves to its ZIP Code Tabulation Area (zip code tabulation area) - Auto-detects
geography_typefor state, county, place, tract, and ZIP. Metropolitan/micropolitan statistical areas, combined statistical areas, consolidated cities, and economic places need an explicitgeography_type;economic placereturns the 8-digitecnbasiccode (Seattle03363000) - The place level includes census-designated places, which answer a name only when no incorporated place or county matches exactly; use the full name ("Arlington CDP, VA") or
geography_type: "place"to reach one. Optionalcounty_fipsscopes county and tract resolution (county_scope_unsupportedfor any other level or an address) - Matching ignores case, accepts a state abbreviation or full name, and tolerates Saint/St. and accent differences. New York City boroughs resolve to their counties ("Brooklyn, NY" → Kings County
047) with anotice - A name matching several geographies returns
ambiguous_namewith every candidate's FIPS code and state. Results carrystate_fips(→parent_fips) andfips_summary(→geography_fips) for the next tool; statistical areas and ZCTAs omitstate_fips
census_query_data <sub>tool</sub>
- Requires FIPS codes (use
census_resolve_geographyfor place names).geography_fips: "*"returns every geography at the level within the parent; each row carriesgeography_fipsand the nationally uniquegeography_geoid. Wildcards return up tolimitrows (default 50, max 500) in GEOID order, withoffsetfor paging andtotalCountfor all matches.truncatedis true only when another page exists;nextOffsetnames that page - A comma-separated list (
"06,53", or"033,061"withparent_fips: "53") returns one row per listed code at the same level, in GEOID order and paged the same way; codes take the level's width, no"*"member, and the parents a single code needs. The notice names each listed code no row came back for - Up to 49 variable codes per call, fewer on datasets that add label or record columns (
too_many_variablesstates the maximum). Unknown codes fail withvariable_not_found; level and parent problems fail withparent_requiredorparent_not_accepted. Optionaltract_fips(6 digits, with a concretecounty_fips) scopes a block-group or decennial block query to one tract - Optional
predicatesmap filters the business,pep, anddecdatasets andacs/acs1/spp(e.g.,{"NAICS2017": "5112"}). Unset dimensions take a Census default, echoed per row inapplied_filters;"*"returns one row per category, labelled inrecord.pep/charvreturns several rows per geography, so pin one (e.g.,{"MONTH": "7"}) - ACS se
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
114.1kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
109.7kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
Understand-Anything
91.1kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
headroom
79.0kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
