API and agents
MCP server
The remote MCP server for AI assistants: connect Claude, Codex or Cursor, sign in in the browser, and the tools it offers.
Cadastre's remote MCP server lets AI assistants such as Claude Code, Codex and Cursor read Cadastre's datasets, metro profiles, screens and rankings, with the same access, rights and attribution as the API. It needs no account: add the address and your assistant can use the public datasets at once, at 30 requests a minute. Sign in once in the browser for higher limits (there is no key to copy or manage). It is read-only and free while in beta.
Connect
The server's address is:
https://getcadastre.com/mcpIt speaks MCP's Streamable HTTP transport, and answers without a sign-in: your assistant connects with the address alone.
For higher limits, sign in with the sign-in address instead:
https://getcadastre.com/mcp?auth=requiredIt is the same server, but it asks a client without a token to sign in (MCP clients start signing in only when asked). The first time your assistant uses it, the assistant opens a Cadastre page in your browser: sign in if you need to, choose which of your accounts it may use, and approve. That is all. Only an account with API access turned on can be chosen (it is what gives the higher limits; write to support@getcadastre.com to ask for it); the page marks the others.
The Cadastre CLI prints, and with --write makes, the setup for Claude Code, Codex, Cursor and VS Code: cadastre mcp add claude-code (or codex, cursor, vscode).
Claude Code
claude mcp add --transport http cadastre https://getcadastre.com/mcpThat is all; add --scope user to have it in every project. To sign in for higher limits, add the sign-in address instead, then run /mcp in Claude Code, choose cadastre and Authenticate:
claude mcp add --transport http cadastre "https://getcadastre.com/mcp?auth=required"Codex
codex mcp add cadastre --url https://getcadastre.com/mcpOr in ~/.codex/config.toml:
[mcp_servers.cadastre]
url = "https://getcadastre.com/mcp"To sign in for higher limits, use https://getcadastre.com/mcp?auth=required as the URL and run codex mcp login cadastre.
Cursor
In ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"cadastre": { "url": "https://getcadastre.com/mcp" }
}
}With the sign-in address as the url, Cursor offers to sign in to the server; that opens Cadastre's sign-in page in your browser.
VS Code
code --add-mcp '{"name":"cadastre","type":"http","url":"https://getcadastre.com/mcp"}'That adds it to your user profile. For one workspace, put it in .mcp.json at the workspace root:
{
"mcpServers": {
"cadastre": { "type": "http", "url": "https://getcadastre.com/mcp" }
}
}With the sign-in address as the url, VS Code opens the sign-in in your browser on first use.
Any other client
Any MCP client that supports Streamable HTTP connects with the address alone, and one that supports the MCP authorization flow signs in with the sign-in address (Gemini CLI, OpenCode and others sign in the same way). Clients register themselves through dynamic client registration; Cadastre does not yet accept client ID metadata documents, so a client that prefers them falls back to registering. Registration is for public clients (token_endpoint_auth_method none, with PKCE). A client that can only send a fixed header can use an API key instead of signing in:
claude mcp add --transport http cadastre https://getcadastre.com/mcp --header "Authorization: Bearer cad_key_..."Treat a key like a password: it acts as you, in the account it was made in, until you revoke it.
How sign-in works
The server follows the MCP authorization specification (opens in a new tab), so clients find everything themselves:
- At the sign-in address, a request without a token is answered
401withWWW-Authenticate: Bearer resource_metadata="https://getcadastre.com/.well-known/oauth-protected-resource/mcp", scope="read"(athttps://getcadastre.com/mcpit is served without a sign-in). A token or key that is not valid is answered401at either address, never served as if there were none. - That protected resource metadata names the resource (
https://getcadastre.com/mcp) and the authorization server, whose metadata lists its endpoints. - The client registers itself (dynamic client registration), sends you to the consent page with PKCE, and asks for a token for
https://getcadastre.com/mcp.
The only scope is read: the assistant can read data and run screens and rankings, never see or change your projects, account or settings. A token for the MCP server does not work on the API, and the reverse. Access tokens last an hour and are refreshed without asking you again; the approval itself lasts 90 days. Settings > Authorized apps lists every app you approved, with Disconnect. Leaving an account, or changing your password, disconnects its apps at once.
If the account's API access is turned off, the app keeps working with the limits of no sign-in (whoami says so); write to support@getcadastre.com. If Cadastre's Terms were updated, it answers 403 terms_required until you accept them in a browser.
Tools
Every tool is read-only (readOnlyHint), returns a short Markdown summary for the assistant to read and the same JSON the API returns as structured content, and ends with the credit its sources require. A tool that cannot answer (an unknown metro, a measure that is not served) returns an error that says what to try instead.
whoami
Says who this connection acts as: the Cadastre user, the account whose access it uses (and their role in it), and the credential (an OAuth connection or an API key) with its scopes, or that it is not signed in (anonymous: public datasets only); and its rate limits. Use it to check the connection works and which limits apply. It returns no data figures.
No arguments.
list_datasets
Lists the datasets Cadastre serves: each one's key, name, publisher, licence, the years (vintages) its values are for, the geographies it has values at (msa = metro areas, county, state) and how many measures it has. Use it to see what data Cadastre has; it lists datasets, not their measures.
No arguments.
describe_dataset
Describes one dataset: publisher, licence, source link, refresh cadence, vintages, geographies, and every measure it provides (name, label, unit, and the geographies each has values at).
| Argument | Type | Required | What it is |
|---|---|---|---|
dataset | string | yes | The dataset's key, as list_datasets gives it (e.g. acs, bls-unemployment). |
search_measures
Searches the measures (named figures such as unemployment_rate, population or fema_nri_risk_index) by words in their name, label or unit, optionally only those with values at one geography or from one dataset. Returns each measure's name (the identifier a measure is asked for by), label, unit, dataset and the geographies it has values at. With no query it lists every measure, a page at a time.
| Argument | Type | Required | What it is |
|---|---|---|---|
query | string | no | Words to find in a measure's name, label or unit, e.g. unemployment, gdp, obesity, percent. |
geography | one of msa, county, state | no | Only measures with values at this geography. msa = U.S. metro areas (OMB core-based statistical areas, by five-digit CBSA code); county = counties (five-digit FIPS); state = states (two-digit FIPS). |
dataset | string | no | Only this dataset's measures (a key from list_datasets). |
page | integer | no | Page number, from 1. |
per_page | integer | no | Rows per page (default 50, at most 200). |
describe_measure
Describes one measure: its label, unit and dataset, and at each geography (msa, county, state) how a value is made (published by the source, or computed by Cadastre, e.g. a population-weighted mean of a metro's counties), which years (vintages) the values are for, and how many regions have one.
| Argument | Type | Required | What it is |
|---|---|---|---|
measure | string | yes | The measure's name, as search_measures gives it. |
measure_values
Gives every region's value of one measure at one geography: metro areas (the default), counties or states, optionally only those in one state, in order of geographic code. Use it to see a measure across all metros, or across the counties of a state. Says the unit, the vintages and whether Cadastre computed the values. Paged, 50 rows by default.
| Argument | Type | Required | What it is |
|---|---|---|---|
measure | string | yes | The measure's name, as search_measures gives it. |
geography | one of msa, county, state | no | The geography to list (default msa). msa = U.S. metro areas (OMB core-based statistical areas, by five-digit CBSA code); county = counties (five-digit FIPS); state = states (two-digit FIPS). |
state | string (52 codes) | no | Only regions in this state (USPS code); for metros, those partly in it. |
page | integer | no | Page number, from 1. |
per_page | integer | no | Rows per page (default 50, at most 200). |
find_metros
Finds U.S. metro areas (MSAs, the current OMB delineations) by words in their name and/or by state. Returns each metro's CBSA code (the identifier a metro is asked for by), name, states, whether all its states have right-to-work laws, and population where it is served. With neither filter it lists all of them (about 390), a page at a time.
| Argument | Type | Required | What it is |
|---|---|---|---|
query | string | no | Words in the metro's name, e.g. Dallas, Austin, Salt Lake. |
state | string (52 codes) | no | Only metros that lie at least partly in this state (USPS code). |
page | integer | no | Page number, from 1. |
per_page | integer | no | Rows per page (default 50, at most 200). |
get_metro
Gives one metro area's profile: its name, CBSA code, states and right-to-work status, and every measure Cadastre serves that the metro has a value for, with the value, unit, the years (vintages) it is for and how it was made (published for the metro, or computed by Cadastre from its counties).
| Argument | Type | Required | What it is |
|---|---|---|---|
metro | string or integer | yes | A metro's five-digit CBSA code (e.g. 12420 for Austin-Round Rock-San Marcos, TX), its region id (a UUID) or its slug, as find_metros returns them. |
compare_metros
Puts up to 25 metro areas side by side on up to 50 measures. Without measures it uses the standard site-selection figures (population, growth, manufacturing share of GDP, unemployment, hazard risk, industrial power price, where served).
| Argument | Type | Required | What it is |
|---|---|---|---|
metros | list of strings or integers | yes | The metros to compare. Each one is given as a metro's five-digit CBSA code (e.g. 12420 for Austin-Round Rock-San Marcos, TX), its region id (a UUID) or its slug, as find_metros returns them. |
measures | list of strings | no | Measure names (from search_measures) with metro values. Default: the standard figures. |
screen_metros
Screens the U.S. metro areas by pass/fail Requirements, as Cadastre's project page does: an optional list of states (a metro partly in one is in scope), a minimum population tier, a minimum manufacturing share of GDP, a maximum unemployment rate, a minimum five-year population growth, a maximum FEMA hazard risk score, a maximum industrial electricity price and right-to-work states only. Returns the funnel (how many metros remain after each step) and the metros that pass, with the values the Requirements read. It filters; it does not order the metros. Read-only.
| Argument | Type | Required | What it is |
|---|---|---|---|
states | list of strings (codes) | no | Limit the scope to metros in these states (USPS codes). Omit for the whole country. |
requirements | object: tier, min_mfg_share, max_unemployment, min_growth, max_hazard, max_elec_price, rtw_only | no | Pass/fail Requirements; omit any not wanted. Percentages are percent (4.5 means 4.5%). |
limit | integer | no | How many passing metros to list (default 25); the count and funnel cover all of them. |
rank_metros
Ranks the U.S. metro areas that pass an optional screen (states and pass/fail Requirements: population tier, manufacturing share, unemployment, growth, hazard, power price, right-to-work) on weighted criteria, as Cadastre's project page does: each criterion is a measure with metro values (given by name), a direction (higher_better or lower_better) and a weight; each metro's value is scored 0-100 by percentile among the metros that pass, and the scores are blended by weight into a composite. A criterion's optional cutoff eliminates the metros it holds for. Returns the ranked metros with their composite and, per criterion, value, score and contribution to the composite (the contributions add up to it). Read-only.
| Argument | Type | Required | What it is |
|---|---|---|---|
states | list of strings (codes) | no | Limit the scope to metros in these states (USPS codes). Omit for the whole country. |
requirements | object: tier, min_mfg_share, max_unemployment, min_growth, max_hazard, max_elec_price, rtw_only | no | Pass/fail Requirements applied before ranking; omit any not wanted. |
criteria | list of objects | yes | The weighted criteria, each on a different measure with metro values. |
include_eliminated | boolean | no | Also list the metros a criterion's cutoff eliminated, after the ranked ones (default false). |
limit | integer | no | How many metros to list (default 25); the count and funnel cover all of them. |
incentive_programs
Lists the economic-development incentive programs that federal, state and local governments offer businesses (tax credits, grants, loans, loan guarantees, property tax abatements, sales and use tax exemptions, training grants, infrastructure, bond financing, zones), read from their official pages and reviewed by Cadastre. Filter by state, by metro (federal, the metro's states and its local governments) and by mechanism. Every value comes with the sentence it was quoted from and the page; a field the page does not state is null. A program is not an award or proof that a site qualifies, and a place with none listed is not covered yet. Requires API access.
| Argument | Type | Required | What it is |
|---|---|---|---|
state | string (52 codes) | no | Federal programs, the state's own and its local governments' (USPS code). |
metro | string or integer | no | A metro's five-digit CBSA code (e.g. 12420 for Austin-Round Rock-San Marcos, TX), its region id (a UUID) or its slug, as find_metros returns them. Federal, the metro's states' and its local governments' programs. |
mechanism | string (11 codes) | no | Only programs of this kind. |
page | integer | no | Page number, from 1. |
per_page | integer | no | Rows per page (default 50, at most 200). |
Measures are named the way search_measures lists them (for example unemployment_rate or population). Metros are named by their five-digit CBSA code, which find_metros gives. Geographies are msa (metro areas), county and state.
Attribution
Every tool result ends with Sources and required credit: for each dataset behind the figures, its credit line, publisher, licence, the date Cadastre retrieved it, and any disclaimer or condition its publisher sets (CDC's "Source: CDC" and its no-endorsement statement, for example). The same list is in the structured content as attribution. When you, or your assistant, show or publish figures from Cadastre, show that credit with them. Values marked as computed by Cadastre are Cadastre's aggregates of county figures or its own derivations, not figures the publisher printed. Use of the server and what it returns is governed by the Terms of Service. Rights and attribution explains each source's terms.
Limits
- Without a sign-in, 30 requests a minute and 2,000 a day per network address, shared with the API.
- Signed in, with an account that has API access, 60 requests a minute and 10,000 a day per connected app or API key, and 50,000 a day per account across all of them, shared with the API.
- Every message counts, including the client's start-up messages (a session starts with about four). Over a limit the server answers
429withRetry-After. - An assistant that connects from its maker's servers (Claude on claude.ai, ChatGPT) has a larger allowance without a sign-in, 600 requests a minute and 50,000 a day per address, but everyone whose requests leave from that address shares it. A shared network (an office, a mobile carrier) shares its address's ordinary allowance. Sign in, with the sign-in address, for an allowance of your own.
- Paged tools return 50 rows by default and at most 200; ask for the next
pageor narrow by state, geography or dataset. Screens and rankings list the first 25 metros unless asked for more withlimit; their counts and funnels always cover every metro. - Comparisons take up to 25 metros and 50 measures; a ranking up to 20 criteria.
What is not served
- Geometry: answers carry names and codes, never boundaries, points or lines.
- Parcel data: property-level records are not part of the MCP server or the API.
- Restricted sources: datasets whose terms do not allow it (County Health Rankings, for example) are never served; see Rights and attribution.
- Listings: Cadastre does not hold property listings.
Only datasets whose terms Cadastre has approved for programmatic access are served; list_datasets shows which.