Skip to main content

MCP Tool Reference

Complete reference for all 8 tools available through PrairieCloud's MCP server. Each tool maps to a PrairieCloud REST API endpoint and returns structured Census data.

For setup instructions, see the MCP Quickstart.


Authentication

PrairieCloud's MCP server supports two authentication methods:

MethodFormatUse When
Authorization header (preferred)Authorization: Bearer pck_live_xxxxxCursor, Windsurf, custom MCP clients
URL query parameter?api_key=pck_live_xxxxxClaude Desktop (connectors can't send custom headers)

Both methods use your PrairieCloud API key. MCP access requires a paid plan (Pioneer, Pro, Business, or Enterprise).

Connection access and geography workflow access are separate checks:

  • MCP server access: Pioneer, Pro, Business, Enterprise
  • Direct tract/block group data lookup via MCP: Any MCP-enabled plan when you provide a specific FIPS/name
  • Tract wildcard or inline-geometry workflows via MCP: Pro+
  • Block-group wildcard or inline-geometry workflows via MCP: Business+

For detailed setup instructions per platform, see the MCP Quickstart.


Data Tools

These tools retrieve Census data. They're what Claude uses to answer your questions about population, income, housing, and other statistics.

get_census_data

Retrieve U.S. Census Bureau data for specific variables and geographies. This is the most commonly used tool — most questions about Census statistics will use it.

Maps to: GET /v1/data

Parameters

NameTypeRequiredDefaultDescription
variablesstringComma-separated variable names. Use human-readable names like income_median_household, pop_total. Call search_variables first if unsure of the exact name. Max 50 per request.
geostringComma-separated geography specifiers. Formats: state:TX, county:48201, county:Harris County, TX, metro:12420, nation:us, tract:48201311100, tract:Dallas-Fort Worth (metro smart resolution), tract:TX-7 (congressional district smart resolution), block_group:482013111001, block_group:Harris County, TX. Max 25 per request. Direct lookups by specific FIPS/name are available on any MCP-enabled plan; wildcard/smart expansion starts at Pro for tracts and Business for block groups.
datasetstringacs5acs5 (5-Year estimates, more geographies) or acs1 (1-Year estimates, most current, larger geos only).
vintageintegerlatestData year (2005–2024). Omit for the latest available.
include_moebooleanfalseInclude margin of error values. Default false to save context window tokens. Set true for statistical analysis.
include_geometrybooleanfalseInclude GeoJSON boundary polygons (20m resolution) in the response. Enables single-call map/choropleth visualization — data and boundaries together. Requires Pro tier or above.

Example

Ask Claude:

What's the median household income in Harris County, Texas?

Claude calls:

{
"tool": "get_census_data",
"arguments": {
"variables": "income_median_household",
"geo": "county:Harris County, TX"
}
}

Response:

{
"data": {
"county:48201": {
"name": "Harris County, Texas",
"geo_type": "county",
"variables": {
"income_median_household": {
"label": "Median household income (dollars)",
"estimate": 61705,
"unit": "dollar"
}
}
}
},
"metadata": {
"dataset": "acs5",
"vintage": 2024,
"source": "U.S. Census Bureau, American Community Survey 5-Year Estimates",
"variables_requested": 1,
"geographies_returned": 1
}
}

Geometry Example

Ask Claude:

Show me a map of population by tract in Denton County, Texas.

Claude calls:

{
"tool": "get_census_data",
"arguments": {
"variables": "pop_total",
"geo": "tract:Denton County, Texas",
"include_geometry": true
}
}

Returns all 193 tracts with population data and GeoJSON MultiPolygon boundaries in a single response — everything needed to render a choropleth map without any additional API calls.

Single-call mapping

include_geometry=true is a key differentiator versus the raw Census API, which has no geometry at all and forces separate calls to TIGERweb's ArcGIS endpoint. PrairieCloud returns data and boundaries together.


compare_geographies

Compare Census data across multiple geographies side-by-side. Use this when comparing statistics between states, counties, or metros.

Maps to: GET /v1/compare

Parameters

NameTypeRequiredDefaultDescription
variablesstringComma-separated variable names to compare.
geosstringComma-separated geography specifiers (2–10 locations).
datasetstringacs5acs5 or acs1.
vintageintegerlatestData year (2005–2024).

Example

Ask Claude:

Compare the poverty rate and median income in Dallas County vs Travis County, Texas.

Claude calls:

{
"tool": "compare_geographies",
"arguments": {
"variables": "income_median_household",
"geos": "county:Dallas County, TX,county:Travis County, TX"
}
}

Response:

{
"data": {
"county:48113": {
"name": "Dallas County, Texas",
"geo_type": "county",
"variables": {
"income_median_household": {
"label": "Median household income (dollars)",
"estimate": 57617,
"unit": "dollar"
}
}
},
"county:48453": {
"name": "Travis County, Texas",
"geo_type": "county",
"variables": {
"income_median_household": {
"label": "Median household income (dollars)",
"estimate": 85205,
"unit": "dollar"
}
}
}
},
"metadata": {
"dataset": "acs5",
"vintage": 2024,
"source": "U.S. Census Bureau, American Community Survey 5-Year Estimates",
"variables_requested": 1,
"geographies_returned": 2
}
}

get_timeseries

Get historical Census data for a variable across multiple years. Use this for questions about trends and changes over time.

Maps to: GET /v1/timeseries

Parameters

NameTypeRequiredDefaultDescription
variablestringSingle variable name.
geostringSingle geography specifier.
datasetstringacs5acs5 or acs1.
start_yearintegerearliestFirst year of range (2005–2024).
end_yearintegerlatestLast year of range (2005–2024).

Example

Ask Claude:

How has the population of Texas changed since 2015?

Claude calls:

{
"tool": "get_timeseries",
"arguments": {
"variable": "pop_total",
"geo": "state:TX",
"start_year": 2015
}
}

Response:

{
"data": {
"state:48": {
"name": "Texas",
"geo_type": "state",
"timeseries": [
{ "vintage": 2015, "estimate": 26538614 },
{ "vintage": 2016, "estimate": 26956435 },
{ "vintage": 2017, "estimate": 27419612 },
{ "vintage": 2018, "estimate": 27885195 },
{ "vintage": 2019, "estimate": 28260856 },
{ "vintage": 2020, "estimate": 28635442 },
{ "vintage": 2021, "estimate": 29217653 },
{ "vintage": 2022, "estimate": 29527941 },
{ "vintage": 2023, "estimate": 30029572 },
{ "vintage": 2024, "estimate": 30503301 }
]
}
},
"metadata": {
"dataset": "acs5",
"variable": "pop_total",
"source": "U.S. Census Bureau, American Community Survey 5-Year Estimates"
}
}
Dollar values are not inflation-adjusted

When viewing income or other dollar-denominated time series, keep in mind that values are in nominal dollars for each vintage year. Comparing dollar values across years requires external inflation adjustment.


Discovery Tools

These tools help Claude find the right variable names and geography keys before querying data.

search_variables

Search for available Census variables by keyword. Claude calls this automatically when it's unsure of the exact variable name.

Maps to: GET /v1/variables

Parameters

NameTypeRequiredDefaultDescription
searchstringSearch keyword (e.g., income, poverty, housing, education).
topicstringFilter by topic: core, demographics, economics, environment, equity, health, housing, social, transport.
unitstringFilter by unit: count, dollar, percent, year.
limitinteger20Max results (1–200).

Example

Ask Claude:

What poverty-related data is available?

Claude calls:

{
"tool": "search_variables",
"arguments": {
"search": "poverty",
"limit": 10
}
}

Response:

{
"data": [
{
"api_name": "poverty_below",
"label": "Population below poverty level",
"topic": "core",
"unit": "count"
},
{
"api_name": "poverty_under_18",
"label": "Under 18 years below poverty level",
"topic": "core",
"unit": "count"
},
{
"api_name": "poverty_65_and_over",
"label": "65 years and over below poverty level",
"topic": "core",
"unit": "count"
}
],
"metadata": {
"total_results": 24,
"showing": 3
}
}

search_geographies

Search for U.S. geographies by name or type. Use this to find the correct geography key when you know a place name but not its FIPS code.

Maps to: GET /v1/geographies

Parameters

NameTypeRequiredDefaultDescription
searchstringGeography name to search (e.g., Harris County, Houston, Texas).
typestringFilter by geography type: nation, state, county, metro, cd, tract, block_group.
parentstringParent geo key to scope results (e.g., state:48 for Texas counties).
limitinteger20Max results (1–200).

Example

Ask Claude:

Find the FIPS code for Harris County, Texas.

Claude calls:

{
"tool": "search_geographies",
"arguments": {
"search": "Harris County",
"type": "county",
"parent": "state:48"
}
}

Response:

{
"data": [
{
"geo_key": "county:48201",
"name": "Harris County, Texas",
"geo_type": "county",
"fips": "48201"
}
],
"metadata": {
"total_results": 1,
"showing": 1
}
}

list_topics

List all available Census data topics with variable counts. Takes no parameters.

Maps to: GET /v1/topics

Parameters

None.

Example

Ask Claude:

What kinds of Census data are available?

Claude calls:

{
"tool": "list_topics",
"arguments": {}
}

Response:

{
"data": [
{ "topic_key": "core", "label": "Core Demographics", "variable_count": 98 },
{ "topic_key": "demographics", "label": "Demographics", "variable_count": 52 },
{ "topic_key": "economics", "label": "Economics", "variable_count": 48 },
{ "topic_key": "environment", "label": "Environment", "variable_count": 10 },
{ "topic_key": "equity", "label": "Equity & Vulnerability", "variable_count": 19 },
{ "topic_key": "health", "label": "Health", "variable_count": 14 },
{ "topic_key": "housing", "label": "Housing", "variable_count": 85 },
{ "topic_key": "social", "label": "Social Characteristics", "variable_count": 40 },
{ "topic_key": "transport", "label": "Transportation", "variable_count": 26 }
]
}

list_datasets

List available Census datasets with their vintage ranges. Takes no parameters.

Maps to: GET /v1/datasets

Parameters

None.

Example

Ask Claude:

What Census datasets and years are available?

Claude calls:

{
"tool": "list_datasets",
"arguments": {}
}

Response:

{
"data": [
{
"dataset": "acs5",
"name": "American Community Survey 5-Year Estimates",
"vintages": "2009–2024",
"geographies": "392,435 (7 geo levels)"
},
{
"dataset": "acs1",
"name": "American Community Survey 1-Year Estimates",
"vintages": "2005–2024 (no 2020)",
"geographies": "~1,700–1,900 (population ≥ 65,000)"
}
]
}

Location Tools

These tools help resolve physical locations to Census geographies.

geocode

Find all Census geographies containing a specific location. Takes an address or lat/lng coordinates and returns the containing block group, tract, county, metro area, congressional district, state, and nation.

Maps to: GET /v1/geocode

Parameters

ParameterTypeRequiredDefaultDescription
latfloat❌*Latitude (-90 to 90). Required if address is not provided.
lngfloat❌*Longitude (-180 to 180). Required if address is not provided.
addressstring❌*Full street address (e.g., "1600 Pennsylvania Ave NW, Washington DC 20500"). Required if lat/lng are not provided.

*Provide either lat + lng OR address, not both.

Example (coordinates)

Ask Claude:

What Census geographies contain downtown Austin?

Claude calls:

{
"tool": "geocode",
"input": {
"lat": 30.2672,
"lng": -97.7431
}
}

Response:

{
"data": {
"coordinates": {
"latitude": 30.2672,
"longitude": -97.7431
},
"geographies": {
"block_group": {
"geo_key": "block_group:484530011032",
"name": "Block Group 2; Census Tract 11.03; Travis County; Texas"
},
"tract": {
"geo_key": "tract:48453001103",
"name": "Census Tract 11.03; Travis County; Texas"
},
"county": {
"geo_key": "county:48453",
"name": "Travis County, Texas"
},
"metro": {
"geo_key": "metro:12420",
"name": "Austin-Round Rock-San Marcos, TX Metro Area"
},
"congressional_district": {
"geo_key": "congressional_district:4837",
"name": "Congressional District 37 (118th Congress), Texas"
},
"state": {
"geo_key": "state:48",
"name": "Texas"
},
"nation": {
"geo_key": "nation:us",
"name": "United States"
}
}
}
}

Common workflow: Address → Census data

1. geocode(lat=30.2672, lng=-97.7431)
→ returns block_group:484530011032

2. get_census_data(
variables="income_median_household,pop_total",
geo="block_group:484530011032"
)
→ returns median income and population for that block group

This second step is a direct lookup for one returned block group, so any MCP-enabled plan can run it. If you ask for all block groups under a parent geography, that wildcard/smart-expansion workflow requires **Business or Enterprise**. On **Pro**, use the returned tract for expansion workflows.

Notes

  • Available to all tiers (Free+) — this is a discovery tool
  • Geocoding itself is available to all tiers, but follow-on data calls still honor your plan. Direct lookups for the returned tract or block group are allowed on MCP-enabled plans; wildcard expansion, inline geometry, and boundary access follow the tier rules above.
  • Address geocoding uses the Census Bureau geocoder and may be temporarily unavailable. If it fails, use lat/lng coordinates instead.
  • The lat/lng path uses PostGIS spatial lookups against 331,000+ boundary polygons and is always available
  • Not all geography types may be present — a point in rural Alaska might not fall within a metro area

Response Format

All MCP tools return JSON in a standard envelope.

Data tool responses

Data tools (get_census_data, compare_geographies, get_timeseries) return:

{
"data": {
"<geo_key>": {
"name": "Geography Name",
"geo_type": "state",
"variables": {
"<variable_name>": {
"label": "Human-readable label",
"estimate": 12345,
"unit": "count"
}
}
}
},
"metadata": {
"dataset": "acs5",
"vintage": 2024,
"source": "U.S. Census Bureau, American Community Survey 5-Year Estimates",
"variables_requested": 1,
"geographies_returned": 1
}
}

When include_moe is set to true, each variable also includes:

  • margin_of_error — numeric margin of error value (90% confidence interval)
  • moe_annotation — Census annotation flag, if present

By default, margin of error fields are stripped from responses to reduce token usage.

Discovery tool responses

Discovery tools (search_variables, search_geographies, list_topics, list_datasets) return:

{
"data": [ ... ],
"metadata": {
"total_results": 42,
"showing": 20
}
}

Error Messages

When something goes wrong, the MCP server returns a structured error with guidance on how to fix it:

{
"isError": true,
"error": "Variable 'median_income' not found. Did you mean 'income_median_household'? Use search_variables to find the correct name."
}

Claude uses these error messages to self-correct — for example, by calling search_variables to find the right name.

Common errors

ErrorCauseWhat happens next
Variable not foundIncorrect variable nameClaude calls search_variables to find the right name
Geography not foundInvalid geo keyClaude calls search_geographies to look up the correct key
No data for vintageVariable doesn't exist in that yearClaude tries a different vintage
ACS 1-Year not availableGeography has population < 65,000Claude switches to dataset: "acs5"
Vintage 2020 not available (ACS 1-Year)COVID-19 data collection gapClaude uses 2019 or 2021 instead
Too many variablesMore than 50 variables in one requestClaude splits into multiple calls
Too many geographiesMore than 25 geographies in one requestClaude splits into multiple calls
Rate limit exceededMonthly quota used upReturns a retry-after interval
MCP access requires a paid planFree tier API keyYou need to upgrade your plan

Rate Limits

MCP tool calls consume the same monthly quota as REST API calls. There is no separate MCP billing or quota.

  • One tool call = one API request against your monthly limit
  • Rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) are tracked the same way
  • If you hit your quota, Claude will receive a rate limit error and inform you

Check your current usage at dashboard.prairiecloud.io.

PlanMonthly RequestsMCP Access
Free1,000❌ Not available
Pioneer ($19/mo)50,000
Pro ($49/mo)500,000
Business ($299/mo)2,000,000
EnterpriseCustom

Tips for Better Results

  • Be specific. "What's the median household income in Travis County, Texas for 2022?" gives better results than "income data."
  • Ask Claude to search first. If you're not sure what data exists, ask "What variables are available about education?" before requesting specific data.
  • Use comparisons. "Compare X in A vs B" naturally maps to the compare_geographies tool and gives you a clean side-by-side view.
  • Ask about trends. "How has X changed since 2015?" maps to get_timeseries and shows historical context.
  • Request margin of error when it matters. For statistical analysis or small-geography data, ask Claude to include margin of error in the response.

Next Steps

  • MCP Quickstart — Set up Claude Desktop with PrairieCloud
  • Data Guide — Understand datasets, vintages, and variable naming conventions
  • API Reference — REST API docs for code-based access