AirDNA MCP Server beta

Bring AirDNA short-term-rental analytics and pricing into your AI assistant.

Connect

Add AirDNA to your AI assistant, then sign in with your AirDNA account. The assistant gets tools scoped to your plan and connected properties — see Access.

Add AirDNA from the Claude directory

One click from the connector directory, then sign in with AirDNA.

Add AirDNA to Claude →

Or add it manually:

Settings → Connectors → Add custom connector, then fill in both fields and sign in:

Remote MCP server URLhttps://mcp.airdna.co
OAuth Client ID (under Advanced settings)478a2ed7-0d70-4feb-a340-d8c96dcd4c2b
claude mcp add --transport http \
  --client-id 478a2ed7-0d70-4feb-a340-d8c96dcd4c2b \
  airdna https://mcp.airdna.co

claude mcp login airdna

A browser opens to sign in with AirDNA. The client ID is public; no secret required.

codex mcp add airdna \
  --url https://mcp.airdna.co \
  --oauth-client-id 478a2ed7-0d70-4feb-a340-d8c96dcd4c2b

codex mcp login airdna --scopes mcp,offline_access

A browser opens to sign in with AirDNA. The client ID is public; no secret required.

Support for Cursor, VS Code and other MCP clients is on the way. Check back soon.

After connecting

Ask your assistant: what AirDNA tools do you have? If no tools appear, sign out and authenticate again. Access is based on your AirDNA plan and connected properties.

Access & plans

What you can do depends on your AirDNA account. Two tiers:

Any AirDNA account

For-sale data, on every plan, no properties required. The for-sale tools cover MLS inventory with AirDNA's short-term-rental projections attached, and for now they are the only data tools available without Adapt — plus submit_feedback, open to everyone for sharing feedback or reporting issues.

AirDNA Adapt users

Listings, pricing, rules, comps and portfolio tools require AirDNA Adapt with connected properties. Once your properties are onboarded to Adapt these tools light up; until then they return a “no connected properties” message. Pushing rates to your PMS requires a trial or paid Adapt plan.

Each tool below is labeled with the entitlement component it needs. Tools you don't have access to are simply hidden from your assistant.

Recipes

Starting prompts for your own assistant. Open one to see the full prompt, copy it, fill in the brackets, and send it. Each names the tools it needs, so a client that has them will route straight there.

The chips on each card are the entitlement components it uses. A + chip is optional — the recipe works without it and says which section to drop, so the same prompt suits any plan. A tool your plan doesn't cover is hidden from your assistant rather than returning an error, so each recipe says what to do when a tool simply isn't there.

Your properties

Strategy & Rules Overview adapt rms_read A plain-English read on what your pricing setup actually does — not which preset you picked.

list_my_listings get_listing_details preview_strategy

Explain what my pricing setup is actually doing, in plain English.

Start with list_my_listings using view="full". If I have more than one listing, show me the list and ask which one I mean before going further. Then call get_listing_details with include=["rules"] for that listing.

Give me these sections:

- Posture — one sentence naming what my setup effectively does, for example "a premium hold with strong far-out protection but soft last-minute pricing."
- Active rules — a table: what each rule does, the dates it covers, and what it means for my nightly rate in practice.
- Conflicts — any rules that contradict each other, cancel out, or will never fire. Name them directly.
- Gaps — anything I would reasonably expect to have set and don't: a price floor, a ceiling, weekend minimum stays.

Use section headings, not numbered sections. Translate settings into rate outcomes. Don't just list the fields back to me or restate the strategy's name. This is read-only: don't change anything.
Portfolio Check-In adapt rms_read How the next few months are pacing versus the same point last year, and where the gaps are.

get_portfolio_performance list_my_listings

Show me how my portfolio is pacing compared with this point last year.

Call get_portfolio_performance twice with view="pacing_metrics": once with as_of_date set to today, and once with as_of_date set to the same day one year ago. Compare the two.

Give me these sections:

- Month by month — a table: revenue, occupancy, and ADR on the books now versus the same point last year, with the difference.
- Behind and ahead — the two or three months furthest behind, and the two or three ahead.
- Rate or occupancy — for each month that's behind, which of the two is the problem.
- Verdict — on track or not, and what I should look at first.

Use section headings, not numbered sections. If a month has very little on the books yet, say so rather than reading a trend into it. Use list_my_listings if you need to name specific listings.
Listing Benchmarking adapt rms_read One listing measured against its own prior year and against what its comps are charging.

list_my_listings get_portfolio_performance get_listing_comps get_listing_comp_performance get_listing_comp_rates

Benchmark one of my listings against last year and against its comps.

Use list_my_listings to find the listing — ask me which one if I have more than one. Then pull:
- get_portfolio_performance with view="pacing_metrics" and listing_ids set to that listing, once with as_of_date today and once with as_of_date one year ago
- get_listing_comp_performance and get_listing_comp_rates for the next 90 days

Give me these sections:

- Month by month — a table: my occupancy and ADR on the books, mine at this point last year, and what my comps are charging for the same dates.
- Out of line — specific dates or weekends where my rates are clearly off the comps, in either direction.
- What last year says — for each of those, what my prior-year booking behaviour suggests I should do.
- Act on first — the three dates worth acting on, numbered in priority order.

Use section headings, not numbered sections; Act on first is the only numbered list, and the numbers there mean priority. Be concrete about dates and dollar amounts, and state which currency you're reporting in. If this listing has no comps stored, tell me that instead of substituting market averages.
Last-Minute Rescue adapt rms_readrms_write Open dates in the next two weeks, and whether I should decrease the rates.

get_listing_details get_listing_comp_rates get_listing_comp_performance save_listing_rules

Find revenue I'm leaving on the table in the next two weeks.

For [LISTING NAME], call get_listing_details with include=["calendar","reservations","rules"], calendar_start_date today and calendar_end_date 14 days out. Then call get_listing_comp_rates and get_listing_comp_performance for the same window.

For each open date, work out whether comps are booked or also sitting open, and how late bookings usually arrive for this listing based on my reservation history.

Give me these sections:

- Headline — whether I have open dates that should see a price decrease. If none do, say so and stop there; skip the rest.
- Dates — a table of available dates, my price, my comps' booked rates, and a suggested price.
- Rules to change — any rule I have set that's working against me, for example a minimum-night stay that could orphan a night.
- Suggested changes — a bulleted list. Require my explicit approval before using save_listing_rules to apply them.

Use section headings, not numbered sections. State which currency you're reporting in. Keep the output simple, approachable, and concise.

Research

For-Sale Buy Box any account for_sale For-sale inventory screened against what each property would earn as a short-term rental.

get_for_sale_metrics get_for_sale_listings

Screen for-sale properties in [MARKET OR SUBMARKET NAME] against what they would earn as short-term rentals.

This is MLS inventory with AirDNA's STR projections attached. The estimated_ fields are projections for a property that isn't operating yet, not observed performance — never present them as actuals.

If the for-sale tools aren't in your tool list, my plan doesn't include for-sale data. Tell me that and stop. Don't substitute observed short-term-rental performance or market averages: neither carries an asking price, so neither can answer this.

Start with get_for_sale_metrics for the area (a combined_market_id or combined_submarket_id filter is required — a market or submarket name works, an id is not needed), grouped by bedrooms, over list_price, estimated_yield, estimated_revenue and estimated_daily_rate. group_by takes exactly one field, so run it again with property_type if I ask for that cut. Any group with fewer than three listings comes back with a count and null metrics — report the count, say the group is too small, and don't interpolate.

Read that aggregate out loud before you pull a single listing, because the listings call returns only the top rows of a yield sort and I can't tell what's typical without it. Tell me, per bedroom count: how many listings are in the group, the mean and the p50 as two separate numbers, and the p25-to-p75 yield spread. Where mean and p50 diverge sharply, say which one you're using and why. If p25, p50 and p75 come back identical the group is effectively a single data point — say so rather than reporting a zero spread as consensus.

Then commit to the one or two bedroom counts worth shopping, and say what a normal yield looks like there. Anything in the listings below that sits above the p75 for its group is projecting earnings that are uncommon in the area — say so alongside it, so I read it as an upside case rather than the going rate.

Then call get_for_sale_listings over the same filters, sorted on estimated_yield descending, limit 10 (maximum 100).

Give me these sections:

- Where the value is — which bedroom counts carry the best yield.
- Candidates — a table: address, bedrooms, bathrooms, square footage, list price, estimated annual revenue, estimated occupancy and estimated yield.
- Attribution — every listing you show must carry its disclaimer, brokerage_name and brokerage_phone. This is a licensing requirement, not a formatting preference: if you shorten the table, keep these.
- What I'd look at — two or three listings, and what to verify about each.

Use section headings, not numbered sections. State which currency you're reporting in. There is no history for for-sale inventory, so don't describe a price trend or how long the market has been moving. Yield is a projection over an asking price; treat both as estimates.

Tools

27 tools live today. Click a tool for its parameters.

The tool set is growing fast — the market, submarket and STR listing research tools (research any market, not just your own properties) are next, with many more on the way. They are listed here but not callable yet: switch the status filter to coming soon to preview them, or the four research domains will look empty. What a tool returns then depends on your plan — a component you don't hold hides its tools from your assistant rather than erroring, and a wider one adds columns and history to the tools you already have.
27 of 46 tools
ToolDomainAccessStatusWhat it does
get_listing_details Listings & Portfolio read-only live Everything about one of your listings — calendar, reservations, rules, market enrichment.
get_portfolio_performance Listings & Portfolio read-only live Revenue, occupancy and ADR across your portfolio, historical or pacing.
list_my_listings Listings & Portfolio read-only live The properties you've connected, with location, capacity and pricing status.
apply_strategy Pricing & Rules destructive live Install a previewed strategy as the listing's default. Requires a confirmation step.
delete_listing_rules Pricing & Rules destructive live Remove pricing rules from a listing.
get_comp_set Pricing & Rules read-only live One comp set: its name, source and member properties.
get_comp_set_metrics Pricing & Rules read-only live Aggregate ADR, occupancy and revenue across a comp set over a date range.
get_listing_comp_performance Pricing & Rules read-only live How the comp set you benchmark against is performing.
get_listing_comp_rates Pricing & Rules read-only live Day-by-day rate bands across your active comp set, next to your own prices.
get_listing_comps Pricing & Rules read-only live AI-recommended comparable properties near one of your listings.
get_predicted_rates Pricing & Rules read-only live Adapt's nightly price suggestions for a listing, before your rules. Does not take into account any custom rules you have set.
list_my_comp_sets Pricing & Rules read-only live All your comp sets — custom ones and system-recommended ones.
preview_custom_strategy Pricing & Rules read-only live Preview a rule set you assembled yourself before applying it.
preview_listing_rates Pricing & Rules read-only live Your nightly prices with your rules applied, before PMS fees and taxes: exactly what would be pushed. Nothing is sent.
preview_strategy Pricing & Rules read-only live Browse the preset pricing strategies, or preview what one would do to a listing.
push_listing_rates Pricing & Rules destructive live Push previewed rates to your connected PMS. Requires a confirmation step.
save_listing_rule Pricing & Rules mutating live Create or update a single pricing rule on one of your listings.
save_listing_rules Pricing & Rules destructive live Apply several pricing-rule changes to a listing in one call.
set_revenue_goal Pricing & Rules mutating live Set the annual revenue target a listing is tracked against.
delete_user_events Seasons & Events destructive live Remove seasons or events. Their pricing is deleted with them.
list_user_events Seasons & Events read-only live See the seasons and one-off events set up on your listings.
save_user_event Seasons & Events mutating live Create a season or event, or change one. Sets the window, not the prices.
compare_my_markets Market Context read-only live Benchmark the markets your own listings sit in against each other.
get_listing_market_context Market Context read-only live The AirDNA market profile around one of your listings.
get_for_sale_listings For-Sale Research read-only live Homes for sale in a market, each with AirDNA's STR revenue projection.
get_for_sale_metrics For-Sale Research read-only live Price and projection statistics across a market's for-sale inventory.
submit_feedback Feedback mutating live Send the AirDNA team a bug, a data problem or a feature request.

Canonical Metric Keys

Used by compare_markets, rank_markets, rank_submarkets, compare_my_markets and related tools.

KeyDirectionDescription
adr_ltmHigher is betterAverage daily rate (last 12 months)
occupancy_ltmHigher is betterOccupancy rate (last 12 months)
revenue_ltmHigher is betterTotal revenue (last 12 months)
market_scoreHigher is betterOverall market score
investabilityHigher is betterInvestment attractiveness
rental_demandHigher is betterDemand for short-term rentals
regulationLower is betterRegulatory restrictiveness
seasonalityHigher is betterSeasonality score
revenue_growthHigher is betterRevenue growth rate
listing_countHigher is betterNumber of active listings