← Back to lizo.ai

Lizo AI MCP Server

Real Estate Investment Analytics via Model Context Protocol

MCP Server · Read-only · OAuth 2.0

Analyze US real estate markets directly from Claude

Analyze US real estate markets directly from ChatGPT

lizo.ai's MCP Server gives Claude access to 100+ KPIs across every US ZIP code and MSA (Metropolitan Statistical Area) — cap rates, rent growth, appreciation, occupancy, population trends, crime rates, income levels, and more.

lizo.ai's MCP Server gives ChatGPT access to 100+ KPIs across every US ZIP code and MSA (Metropolitan Statistical Area) — cap rates, rent growth, appreciation, occupancy, population trends, crime rates, income levels, and more.

Ask Claude to analyze a location, evaluate a deal, screen ZIP codes by investment criteria, or compare markets — all backed by lizo.ai's real estate database updated through 2026.

Ask ChatGPT to analyze a location, screen ZIP codes by investment criteria, compare markets, or pull data on a specific property — all backed by lizo.ai's real estate database updated through 2026.

Endpoint: https://app.lizo.ai/mcp/  ·  Auth: OAuth 2.0 (Authorization Code + PKCE)

Endpoint: https://app.lizo.ai/gptmcp/  ·  Auth: OAuth 2.0 (Authorization Code + PKCE)

Available Tools

location_analysis read-only

Invoke this tool when the user wants to understand how a specific ZIP code or address performs relative to its broader metro area. Typical triggers: "how does [ZIP] compare to the MSA," "is this ZIP above or below metro average," "benchmark [ZIP] against the market," "how does this submarket stack up."

Before calling: confirm you have a ZIP code. The MSA can be inferred from the ZIP — do not require the user to name it explicitly.

After receiving data: synthesize into a short market read and present a side-by-side comparison — ZIP value vs. MSA average vs. 3-mile radius, 5-mile radius — for each key metric. Lead with the overall verdict: is this ZIP a stronger or weaker submarket than the metro average, and on which metrics specifically. Cover rent trajectory, occupancy trend, supply pipeline, and 3-year outlook. Conclude with an investment climate rating. Flag any metric where the gap is unusually large (positive or negative).

Parameters

primary_zipstring5-digit US ZIP code of the subject property
zip_codes_3milestring[]?ZIP codes within 3-mile radius (optional)
zip_codes_5milestring[]?ZIP codes within 5-mile radius (optional)
get_zip_code_data read-only

Invoke this tool when the user wants to get data or an analysis on a specific ZIP code. Typical triggers: "what's the market like in [ZIP]," "give me the KPIs for [ZIP code]," "show me data for 85281," "what are the rent and occupancy numbers in this ZIP."

Before calling: confirm you have a ZIP code. Do not call without one. If the user provides an address instead of a ZIP, extract or infer the ZIP before calling.

After receiving data: lead with the strongest market signal — whether the ZIP is outperforming, in-line, or underperforming vs. its MSA. Present rent, occupancy, and rent growth as the primary metrics. Highlight the 3-year outlook if available. Synthesize into a short market read. Ask if the user wants full data. Create the data in a table.

Parameters

zip_codestring5-digit US ZIP code
compare_msa read-only

Invoke this tool when the user wants to compare two or more metro areas against each other. Typical triggers: "compare Phoenix and Atlanta," "which MSA is performing better," "show me Dallas vs. Denver," "I'm deciding between two markets — which one is stronger."

Before calling: confirm at least two MSA names. If the user provides city names instead of formal MSA names, map them (e.g., "Chicago" → "Chicago-Naperville-Elgin MSA"). If only one MSA is given, ask for the second before calling.

After receiving data: synthesize into a short market read and present a structured comparison table with one row per MSA and columns for each key metric. Declare a clear winner per metric. End with an overall summary of which MSA presents the stronger opportunity, framed around the user's stated investment goal if known.

Parameters

msa_codestringMSA code (e.g. "35620" for New York-Newark)
compare_zip_code read-only

Invoke this tool when the user wants to compare two or more specific ZIP codes side-by-side. Typical triggers: "compare 60614 vs 60657," "which ZIP is performing better," "show me these two submarkets," "60614, 60657, 60660 — rank them."

Before calling: confirm you have at least two 5-digit ZIPs. With a single ZIP, use get_zip_code_data or location_analysis instead.

After receiving data: present a structured comparison table with one row per ZIP and columns for each key metric. Declare a clear winner per metric. End with an overall summary of which ZIP presents the stronger opportunity, framed around the user's stated investment goal if known.

Parameters

zip_codesstring[]Two or more 5-digit ZIP codes
find_zip_code read-only

Invoke this tool when the user wants to search for or discover ZIP codes matching specific criteria — not when they already have a ZIP and want data on it. Typical triggers: "find ZIP codes in [city/state] with [characteristic]," "which ZIPs are near [area]," "what ZIP code is [neighborhood/address] in," "find me submarkets in [market] that match [criteria]."

Before calling: confirm the search criteria — geography (city, MSA, or state) and at least one characteristic to filter by (rent range, occupancy threshold, property density, etc.). If the user provides only a general location with no filter criteria, ask what they're looking for before calling. Do not use this tool if the user already has a specific ZIP — use get_zip_code_data instead.

After receiving data: present the matching ZIP codes as a ranked or grouped list. For each ZIP, surface the metric that made it match the search criteria. If the result set is large, highlight the top 5 and offer to show more.

Parameters

filtersobject?KPI filters, e.g. {"cap_rate__gte": 6, "state": "TX"}
order_bystring?Sort field, e.g. "-cap_rate" (default: highest cap rate first)
limitinteger?Max results (default: 50)

Filterable fields: cap_rate, rent_growth, appreciation, total_population, population_growth, median_household_income, share_of_renters, median_rent, employment_rate, median_house_value, violent_crime_rate, state, city

find_msa read-only

Invoke this tool when the user wants to search for or rank MSAs by KPI criteria. Typical triggers: "which MSAs have strong rent growth," "find markets with low vacancy," "top metros for multifamily in Texas."

Before calling: confirm at least one filter criterion or geography. Do not use this if the user already named a specific MSA — use compare_msa instead.

After receiving data: present matching MSAs as a ranked list. For each MSA, surface the metric that drove the ranking. Offer to drill into a specific MSA with compare_msa.

Parameters

filtersobject?KPI filters, e.g. {"rent_growth__gte": 3, "usstate": "TX"}
order_bystring?Sort field (default: "-cap_rate")
limitinteger?Max results, 1–100 (default: 20)
geographystring?US state, abbreviation, or region (optional)
zip_code_vs_msa read-only

Invoke this tool when the user wants to understand how a specific ZIP code performs relative to its broader metro area. Typical triggers: "how does [ZIP] compare to the MSA," "is this ZIP above or below metro average," "benchmark [ZIP] against the market," "how does this submarket stack up."

Before calling: confirm you have a ZIP code. The MSA is inferred automatically — do not require the user to name it explicitly.

After receiving data: synthesize into a short market read and present a side-by-side comparison — ZIP value vs. MSA average vs. 3-mile radius vs. 5-mile radius — for each key metric. Lead with the overall verdict: is this ZIP a stronger or weaker submarket than the metro average, and on which metrics specifically. Use the notable_gaps list to flag metrics where the ZIP diverges from its MSA by 15% or more — these are the most actionable signals.

Parameters

zip_codestring5-digit US ZIP code
compare_rents_data read-only

Invoke this tool when the user wants to compare rent levels or rent growth across markets, ZIP codes, or property types. Typical triggers: "where are rents growing fastest," "compare rents in [A] vs. [B]," "show me rent trends across these ZIPs," "which property type is commanding higher rents."

Before calling: collect at least two comparison targets (ZIP codes or MSA codes). For a ranking ("top markets by rent growth"), use find_zip_code or find_msa instead — this tool is for direct head-to-head comparison.

After receiving data: lead with the highest and lowest performers (highest_rent_growth / lowest_rent_growth). Present effective rent (median_rent) and rent_growth side by side for each geography. Break down rent_by_unit_type (studio / 1BR / 2BR / 3BR) to show which bedroom type drives the spread. Flag any market where rent growth is accelerating vs. plateauing — this is the most actionable signal for investment decisions.

Parameters

zip_codesstring[]?Two or more 5-digit ZIP codes to compare (optional if msa_codes provided)
msa_codesstring[]?Two or more MSA codes to compare (optional if zip_codes provided)
get_asset_data read-only

Invoke this tool when the user wants the full property record for a specific apartment by street address or asset name. Typical triggers: "show me data for [address]," "what's the asset class on [property]," "pull up [property name]," "what's the occupancy at [address]."

Before calling: confirm you have a full street address or asset name. A ZIP code alone is not sufficient — use get_zip_code_data instead.

After receiving data: lead with asset identification (asset_name, address, city/state/zip) and asset_class (A/B/C grade) alongside headline operating metrics. Then break down unit counts and rents by bedroom type (studio/1BR/2BR/3BR, including rent_psf), building details (built_year, built_year_effective, floors, total_units, management company), special_type, amenities, school_district, walk/transit/bike scores, transportation, and policy flags (is_mfh, is_furnished, is_pet_allowed). Flag any gap between the asset's class and its market position.

Parameters

addressstringFull street address of the property
find_asset read-only

Invoke this tool when the user wants to search for apartment properties by location — city, ZIP, MSA, or full address. Typical triggers: "find properties in [market]," "which assets in [ZIP] are class A," "search for garden-style assets in [city]," "find me a comp for [property]."

Before calling: confirm at least a geography. Optionally filter by property_type ('multifamily') or numeric filters (total_units, built_year, floor, rent_1_br, rent_2_br, is_mfh). If the user has already named a specific address, use get_asset_data instead.

After receiving data: present matching assets as a ranked list. Each row carries the full property record: identification (asset_id, asset_name, address, lat/lon), unit counts and rents by bedroom (with rent_psf), building details (built_year, built_year_effective, floors, management company), asset_class (A/B/C grade), special_type, amenities, school_district, walk/transit/bike scores, transportation, and policy flags (is_mfh, is_furnished, is_pet_allowed). Surface asset_class up front when ranking — it's the most actionable signal.

Parameters

geographystringCity, ZIP code, or MSA to search within
property_typestring?Property type filter (optional)
filtersobject?Additional filters such as unit count, size, style (optional)
location_analysis read-only

Invoke this tool when the user wants to understand how a specific ZIP code or address performs relative to its broader metro area. Typical triggers: "how does [ZIP] compare to the MSA," "is this ZIP above or below metro average," "benchmark [ZIP] against the market," "how does this submarket stack up."

Before calling: confirm you have a ZIP code, a full street address, or a city/neighborhood description. The tool will geocode and extract the ZIP automatically.

After receiving data: synthesize into a short market read and present a side-by-side comparison — ZIP value vs. MSA average vs. 3-mile radius, 5-mile radius — for each key metric. Lead with the overall verdict: is this ZIP a stronger or weaker submarket than the metro average, and on which metrics specifically. Cover rent trajectory, occupancy trend, supply pipeline, and 3-year outlook. Conclude with an investment climate rating.

Parameters

primary_zipstring5-digit ZIP, full address, or city/neighborhood description
zip_codes_3milestring[]?ZIP codes within 3-mile radius (optional)
zip_codes_5milestring[]?ZIP codes within 5-mile radius (optional)
get_zip_code_data read-only

Invoke this tool when the user wants raw data for a specific ZIP code — not a comparative analysis. Typical triggers: "what's the market like in [ZIP]," "give me the KPIs for [ZIP code]," "show me data for 85281," "what are the rent and occupancy numbers in this ZIP."

Before calling: confirm you have a 5-digit ZIP code. If the user provides an address instead, extract or infer the ZIP first. For a market vs. metro benchmark, use location_analysis instead.

After receiving data: lead with the strongest market signal — whether the ZIP is outperforming, in-line, or underperforming. Present rent, occupancy, and rent growth as the primary metrics. Surface the 3-year outlook if available. Offer the full KPI table on request.

Parameters

zip_codestring5-digit US ZIP code
compare_zip_code read-only

Invoke this tool when the user wants to compare two or more specific ZIP codes side-by-side. Typical triggers: "compare 60614 vs 60657," "which ZIP is performing better," "show me these two submarkets," "60614, 60657, 60660 — rank them."

Before calling: confirm you have at least two 5-digit ZIPs. With a single ZIP, use get_zip_code_data or location_analysis instead.

After receiving data: present a structured comparison table with one row per ZIP and columns for each key metric. Declare a clear winner per metric. End with an overall summary of which ZIP presents the stronger opportunity, framed around the user's stated investment goal if known.

Parameters

zip_codesstring[]Two or more 5-digit ZIP codes
find_zip_code read-only

Invoke this tool when the user wants to search for or discover ZIP codes matching specific criteria — not when they already have a ZIP and want data on it. Typical triggers: "find ZIP codes in [city/state] with [characteristic]," "screen submarkets with [criteria]," "top ZIPs by [KPI]."

Before calling: confirm the search criteria — geography (city, MSA, or state) and at least one characteristic to filter by. Do not use this tool if the user already has a specific ZIP — use get_zip_code_data instead.

After receiving data: present the matching ZIP codes as a ranked list. For each ZIP, surface the metric that made it match. If the result set is large, highlight the top 5 and offer to show more.

Parameters

filtersobject?KPI filters, e.g. {"cap_rate__gte": 6, "state": "TX"}
order_bystring?Sort field, e.g. "-cap_rate" (default: highest cap rate first)
limitinteger?Max results, 1–200 (default: 50)

Filterable fields: cap_rate, rent_growth, appreciation, total_population, population_growth, median_household_income, share_of_renters, median_rent, employment_rate, median_house_value, violent_crime_rate, state, city

compare_msa read-only

Invoke this tool when the user wants detailed year-over-year KPI data for a specific MSA. Typical triggers: "show me data for [MSA]," "give me the 5-year trajectory for [metro]," "what are the KPIs for the Phoenix MSA."

Before calling: confirm you have the MSA code. If the user gives a city or metro name, use find_msa first to discover the correct code.

After receiving data: present year-over-year trends across the key KPIs — cap rate, rent growth, occupancy, supply, population. Highlight inflection points and the 3-year outlook.

Parameters

msa_codestringMSA code (e.g. "35620" for New York-Newark)
find_msa read-only

Invoke this tool when the user wants to search for or rank MSAs by KPI criteria. Typical triggers: "which MSAs have strong rent growth," "find markets with low vacancy," "top metros for multifamily in Texas."

Before calling: confirm at least one filter criterion or geography. Do not use this if the user already named a specific MSA — use compare_msa instead.

After receiving data: present matching MSAs as a ranked list. For each MSA, surface the metric that drove the ranking. Offer to drill into a specific MSA with compare_msa.

Parameters

filtersobject?KPI filters, e.g. {"rent_growth__gte": 3, "usstate": "TX"}
order_bystring?Sort field (default: "-cap_rate")
limitinteger?Max results, 1–100 (default: 20)
geographystring?US state, abbreviation, or region (optional)
get_asset_data read-only

Invoke this tool when the user references a specific building or asset by address and wants its full property record. Typical triggers: "show me data for [address]," "what's the asset class on [property]," "pull up [property name]," "what's the occupancy at [address]."

Before calling: confirm you have a full street address with at least street number and street name. A ZIP alone is not sufficient — use get_zip_code_data instead.

After receiving data: lead with identification (asset_id, asset_name, address, city/state/zip, lat/lon) and asset_class (A/B/C grade). Then present unit counts and rents by bedroom type (with rent_psf), building details (built_year, built_year_effective, floors, total_units, management company), special_type, amenities, school_district, walk/transit/bike scores, transportation, and policy flags (is_mfh, is_furnished, is_pet_allowed).

Parameters

addressstringFull street address of the property
find_asset read-only

Invoke this tool when the user wants to discover specific properties — not when they already know the address. Typical triggers: "find properties in [market]," "search for garden-style assets in [city]," "which properties in ZIP [X] have 100+ units," "find me a comp for [property]."

Before calling: confirm at least a geography (city, ZIP, or MSA) and optionally a property type or size filter. If the user has a specific address, use get_asset_data instead.

After receiving data: present matching assets as a list. Each carries the full property record: identification, lat/lon, unit counts and rents by bedroom (with rent_psf), building details (built_year, built_year_effective, floors, management company), asset_class (A/B/C grade), special_type, amenities, school_district, walk/transit/bike scores, transportation, and policy flags (is_mfh, is_furnished, is_pet_allowed).

Parameters

geographystringCity, ZIP code, or MSA to search within
property_typestring?Property type filter (optional)
filtersobject?Additional filters such as unit count, size, style (optional)

Usage Examples

User prompt "Analyze ZIP code 85281 for multifamily investment"
location_analysis("85281", zip_codes_3mile=[...], zip_codes_5mile=[...])
Example output Cap rate 5.8%, rent growth 3.2% YoY, occupancy 94.1%, MSA average cap rate 5.2%. 12 apartment assets within 3 miles, avg 2BR rent $1,840.
User prompt "Find the top 10 ZIP codes in Texas with cap rate above 6% and population over 20,000"
find_zip_code({"cap_rate__gte": 6, "state": "TX", "total_population__gte": 20000}, order_by="-cap_rate", limit=10)
Example output Ranked table of 10 Texas ZIP codes sorted by cap rate, with rent growth and appreciation data.
User prompt "Pull up data for 350 5th Ave, New York"
get_asset_data("350 5th Ave, New York, NY 10001")
Example output Property details, effective rent, occupancy, unit mix, and competitive position vs. nearby comps.

Requirements

A lizo.ai account is required to use this MCP server. All tools access your account's data permissions.

Ask for an account at app.lizo.ai or email support@lizo.ai.

All tools are read-only — this server only reads market data. It does not write, modify, or delete any user data.

Data covers all US ZIP codes and MSAs. KPI history available from 2021 through 2026 projections.

A lizo.ai account is required to use this MCP server. All tools access your account's data permissions.

Ask for an account at app.lizo.ai or email support@lizo.ai.

All tools are read-only — this server only reads market data. It does not write, modify, or delete any user data.

Data covers all US ZIP codes and MSAs. KPI history available from 2021 through 2026 projections.

How to Connect

1

Create an account at app.lizo.ai if you don't have one.

2

In Claude Desktop or Claude.ai — go to Settings → Connectors → Browse, find lizo.ai, and click Connect.

Claude will open a browser window to authorize access to your lizo.ai account.

3

In Claude Desktop or Claude.ai, go to Settings → Connectors → Custom. Enter name: lizo.ai, URL: https://app.lizo.ai/mcp/

1

Create an account at app.lizo.ai if you don't have one.

2

Enable Developer Mode in ChatGPT — open Settings → Apps & Connectors → Advanced settings (at the bottom of the page) and toggle Developer Mode on. Confirm the warning prompt.

Memory is automatically disabled while Developer Mode is on.

3

Go to Settings → Connectors → Create and fill in:

Name: lizo.ai

Description: Real estate market analytics — ZIP codes, MSAs, and assets across the US.

MCP Server URL: https://app.lizo.ai/gptmcp/

Click Create. ChatGPT will discover the OAuth flow automatically.

4

Authorize — ChatGPT will open a browser window to sign in to your lizo.ai account and approve the connection.

Once connected, open a new chat, click the + button near the composer, choose More, and select lizo.ai to use the tools.