Setup guide · Remote MCP server
Set Up the AirROI MCP Server in Any Client
One URL and one header work in 10+ clients. Copy the config for yours, confirm the tools load, and ask your first question.
MCP protocol 2025-11-25Registry com.airroi/mcp
Works with
- Claude
- Codex
- Cursor
- VS Code
- Antigravity
- n8n
What every client needs
- Endpoint
https://mcp.airroi.com- Header
X-API-KEY- Value
- Your AirROI API key
- Transport
- Streamable HTTP, stateless
- Name it
airroi
Every client uses these values; only the config file differs.
- Clients with setup steps
- 14
- Remote URL
- 1
- X-API-KEY header
- 1
- Servers to install
- 0
Before you start
You need three things: an AirROI API key, created in the developer dashboard after a $10 credit deposit; an MCP client that can call a remote HTTP server with a custom header; and the endpoint https://mcp.airroi.com with the X-API-KEY header.
Setup takes under two minutes in most clients.
An AirROI API key
Create it in the developer dashboard after a $10 minimum deposit. Calls start at $0.01, priced like the REST API. tools/list isn't billed but still needs the key.
A client that sends a custom header
It must call a remote Streamable HTTP server and attach X-API-KEY to every request. ChatGPT on the web can't: developer mode takes only OAuth or no-auth servers.
One endpoint, one header
https://mcp.airroi.com plus the X-API-KEY header. No package, no local server. Name the entry airroi so tool calls read clearly.
New to MCP? Read the Airbnb MCP server overview, or compare Airbnb MCP servers to see how market data differs from scrapers and PMS servers.
Every client at a glance
The AirROI MCP server works in any client that reaches a remote Streamable HTTP server and attaches an X-API-KEY header. The table covers 14 clients as of September 2026: where each keeps its config, where the key goes and the gotcha to watch for.
| Client | Status | How to connect | Config location | Key goes in | Watch out for |
|---|---|---|---|---|---|
Claude Code Connect Claude to Airbnb data | Works | claude mcp add --transport http … --header | ~/ (user scope) or .mcp.json (project scope) | Header flag | Needs a Pro, Max, Team, Enterprise or Console account |
Claude Desktop Connect Claude to Airbnb data | Works via mcp-remote | mcp-remote bridge in claude_desktop_config.json | ~/ (macOS) · %APPDATA%\ (Windows) | env block | No spaces around the colon in --header; needs Node.js; restart the app |
Claude on the web and mobile Connect Claude to Airbnb data | Limited (beta) | Custom connector set to No sign-in, with the key under Request headers (beta, limited to some organizations) | Customize → Connectors (Team and Enterprise: owners add it under Organization settings → Connectors) | x-api-key request header | Request headers are a limited beta; community reports the header is sometimes not sent (anthropics/claude-ai-mcp #644) |
Codex in the ChatGPT desktop app Use Airbnb data in Codex and ChatGPT | Works | Settings → MCP servers → Add server, or edit the TOML | ~/ | env_http_headers (recommended) or http_headers | Same file as the CLI; restart after editing |
Codex CLI Use Airbnb data in Codex and ChatGPT | Works | [mcp_servers.airroi] block in config.toml | ~/; project .codex/ in trusted projects only | env_http_headers | codex mcp add has no header flag; "Auth: Unsupported" in codex mcp list is expected |
Codex IDE extension Use Airbnb data in Codex and ChatGPT | Works | Gear menu → MCP servers, or the shared TOML | ~/ | env_http_headers | VS Code detection bug (openai/codex #6465) |
ChatGPT on the web (developer mode) Use Airbnb data in Codex and ChatGPT | Not supported | Not supported for API-key servers | — | OAuth, No Authentication or Mixed only | Doesn't read config.toml; use Codex instead |
Cursor | Works | mcp.json with url + headers | ~/ or .cursor/ | ${env:AIRROI_API_KEY} | Enable the server and check its tools under Customize in the sidebar |
VS Code (Copilot agent mode) | Works | .vscode/mcp.json with "servers" and "type": "http" | Workspace or user settings | ${input:airroi-key} password prompt | The key is servers, not mcpServers |
Devin Desktop (formerly Windsurf) | Works | serverUrl + headers | ~/ (Windows: %APPDATA%\) | ${env:AIRROI_API_KEY} | Renamed from Windsurf on June 2, 2026; older guides still show the ~/.codeium/windsurf path |
Antigravity CLI (Gemini CLI's successor) | Works | serverUrl + headers | ~/ (global) or .agents/ (project) | headers object | Gemini CLI retired for consumer accounts on June 18, 2026; url and httpUrl became serverUrl |
n8n | Works | MCP Client Tool node → HTTP Streamable → Header Auth | n8n credentials | Header name X-API-KEY | Limit the agent to the tools the workflow needs |
OpenAI Agents SDK (Python) | Works | MCPServerStreamableHttp(params={url, headers}) | Your code | Environment variable | Stateless server: no session to keep alive |
Any stdio-only client | Works via mcp-remote | npx mcp-remote bridge | The client's config file | env | Same bridge as Claude Desktop |
Claude Code and Claude Desktop
Claude Code adds AirROI with one terminal command, and --scope user makes it available in every project. Claude Desktop reads a JSON config and reaches the server through the mcp-remote bridge, which needs Node.js.
The full Claude guide covers plans, the web connector and a first real session.
- Config
~/.claude.json(user) or.mcp.json(project)- Key
- The
--headerflag - Check
/mcporclaude mcp list
- Run the command with your key in place of the highlighted placeholder, then check with
/mcp. - Claude Desktop: add the mcp-remote entry from the stdio section to
~/Library/Application Support/Claude/claude_desktop_config.json(Windows:%APPDATA%\Claude\claude_desktop_config.json) and restart the app.
claude mcp add --transport http airroi \
https://mcp.airroi.com \
--header "X-API-KEY: YOUR_API_KEY" --scope userNeed Claude Code first?
The native installer is recommended: curl -fsSL https://claude.ai/install.sh | bash, or irm https://claude.ai/install.ps1 | iex in PowerShell. npm still works with Node.js 22 or later. Claude Code needs a Pro, Max, Team, Enterprise or Console account.
Checked against the Claude Code MCP docs.
Codex (ChatGPT desktop app, CLI, IDE)
Codex reads MCP servers from ~/.codex/config.toml, one file shared by the ChatGPT desktop app, the Codex CLI and the IDE extension. env_http_headers pulls your key from the AIRROI_API_KEY environment variable.
ChatGPT on the web can't connect, because developer mode sends no API-key headers.
- Config
~/.codex/config.toml- Key
env_http_headers→AIRROI_API_KEY- Check
/mcporcodex mcp list
- Export
AIRROI_API_KEY, then paste the block into~/.codex/config.tomlor add it in the desktop app under Settings → MCP servers. - Restart Codex and type
/mcp. "Auth: Unsupported" incodex mcp listis expected.
export AIRROI_API_KEY=YOUR_API_KEY[mcp_servers.airroi]
url = "https://mcp.airroi.com"
env_http_headers = { "X-API-KEY" = "AIRROI_API_KEY" }ChatGPT on the web can't send your key
Developer mode accepts OAuth, No Authentication or Mixed only and doesn't read config.toml. Use Codex instead.
Cursor
Cursor reads remote servers from ~/.cursor/mcp.json for every project or .cursor/mcp.json for one. Add an airroi entry with url and headers.
Cursor resolves ${env:AIRROI_API_KEY} in both fields, so the key stays in your shell profile, not the file. Then confirm the tools under Customize in the sidebar.
- Config
~/.cursor/mcp.json(global) or.cursor/mcp.json(project)- Key
headersvia${env:AIRROI_API_KEY}- Check
- Customize in the sidebar
- Export
AIRROI_API_KEYin your shell profile, then quit and reopen Cursor. - Paste the block into
~/.cursor/mcp.json, or add just theairroientry to an existingmcpServers. - Open Customize and check that airroi is enabled with 29 tools.
- Ask in Agent chat. Cursor asks before running MCP tools by default.
{
"mcpServers": {
"airroi": {
"url": "https://mcp.airroi.com",
"headers": { "X-API-KEY": "${env:AIRROI_API_KEY}" }
}
}
}Sharing it with a repository?
Use .cursor/mcp.json and keep the ${env:AIRROI_API_KEY} reference so nobody commits a key.
Checked against Cursor's MCP docs.
VS Code (Copilot agent mode)
VS Code reads MCP servers from .vscode/mcp.json in a workspace, or your user mcp.json for all workspaces. The top-level key is servers, not mcpServers, and HTTP servers need "type": "http".
An inputs entry with "password": true asks for your key once and keeps it out of the file.
- Config
.vscode/mcp.json, or MCP: Open User Configuration- Key
${input:airroi-key}password prompt- Check
- Configure Tools in the chat input
- Create
.vscode/mcp.json, or run MCP: Open User Configuration to cover every workspace. - Paste the block and choose Start in the inline actions above the entry.
- Enter your key when prompted for
airroi-key. - In Copilot Chat, switch to Agent and open Configure Tools to see the airroi tools.
{
"inputs": [
{
"type": "promptString",
"id": "airroi-key",
"description": "AirROI API key",
"password": true
}
],
"servers": {
"airroi": {
"type": "http",
"url": "https://mcp.airroi.com",
"headers": { "X-API-KEY": "${input:airroi-key}" }
}
}
}servers, not mcpServers
Pasting a Cursor or Claude config is the usual mistake. Only the portable .mcp.json at the workspace root uses mcpServers.
Checked against the VS Code MCP docs.
Devin Desktop (formerly Windsurf)
Devin Desktop, called Windsurf until June 2, 2026, connects to remote servers with a serverUrl field and a headers object in mcp_config.json. It resolves ${env:AIRROI_API_KEY} in headers, so the key can stay in your shell profile.
Open the file from the MCPs section of the agent panel's … menu.
- Config
~/.config/devin/mcp_config.json(Windows:%APPDATA%\devin\mcp_config.json)- Key
headersvia${env:AIRROI_API_KEY}- Check
- MCPs section of the … (Actions) menu
- In the agent panel, open the … (Actions) menu and choose Open MCP config file. It opens the file your install reads.
- Add the
airroientry withserverUrl; Devin also acceptsurl. - Export
AIRROI_API_KEY, restart and check the tool count in the MCPs section. - The agent can use 100 tools across all servers, and AirROI adds 29. Trim others with
disabledTools.
{
"mcpServers": {
"airroi": {
"serverUrl": "https://mcp.airroi.com",
"headers": { "X-API-KEY": "${env:AIRROI_API_KEY}" }
}
}
}Which path does your install read?
Devin's docs list ~/.config/devin/mcp_config.json. Installs carried over from Windsurf also read ~/.codeium/windsurf/mcp_config.json during the transition.
Checked against Devin's MCP docs.
Antigravity CLI (replaces Gemini CLI)
Antigravity CLI replaced Gemini CLI for Google AI Pro, Ultra and free individual accounts on June 18, 2026. It reads MCP servers from ~/.gemini/config/mcp_config.json, shared with the Antigravity IDE, or .agents/mcp_config.json in a workspace.
Remote servers need serverUrl plus a headers object for X-API-KEY.
- Config
~/.gemini/config/mcp_config.json(global) or.agents/mcp_config.json(workspace)- Key
headers, stored in the file- Check
/mcpinagy
- Open
~/.gemini/config/mcp_config.json, creating it if needed. The global file keeps the key out of repositories. - Add the
airroientry withserverUrland your key inheaders. - Run
agyand type/mcpto check that airroi is connected. - Using
.agents/mcp_config.json? Add it to.gitignore; the docs describe no env-var references for headers.
{
"mcpServers": {
"airroi": {
"serverUrl": "https://mcp.airroi.com",
"headers": { "X-API-KEY": "YOUR_API_KEY" }
}
}
}Coming from Gemini CLI?
Rename url or httpUrl to serverUrl after agy plugin import gemini. On a paid Gemini API key, Gemini CLI still works with httpUrl and headers in ~/.gemini/settings.json.
Checked against Google's Antigravity MCP docs.
n8n
n8n connects through the MCP Client Tool node attached to an AI Agent node. Point it at https://mcp.airroi.com with the HTTP Streamable transport and a Header Auth credential named X-API-KEY.
The agent then chooses from all 29 tools, or only the ones you select for that workflow.
- Add an AI Agent node, then attach an MCP Client Tool node to it.
- Set the endpoint to https://mcp.airroi.com and the transport to HTTP Streamable.
- Choose Header Auth and create a credential with name X-API-KEY and your key as the value.
- Optionally limit the tools to the ones your workflow needs, then run the agent.
Two node details
Nodes created at version 1 show an SSE Endpoint field; add a fresh node to get Server Transport. For a fixed step with no agent, the MCP Client node calls one tool.
| Field | Set it to |
|---|---|
| Endpoint | https://mcp.airroi.com |
| Server Transport | HTTP Streamable |
| Authentication | Header Auth |
| Credential name | X-API-KEY |
| Credential value | Your AirROI API key |
| Tools to Include | Selected, then pick what the workflow needs |
One r/n8n builder chained five MCP servers to rate cities for Airbnb investment and had to raise the agent's iteration limit to 30. Market tools return occupancy, ADR and revenue directly.
Checked against n8n's MCP Client Tool docs.
Your own agent (OpenAI Agents SDK and others)
The server is stateless, so any MCP SDK that speaks Streamable HTTP and sets custom headers can call it without keeping a session alive. Pass the URL and an X-API-KEY header read from an environment variable.
The OpenAI Agents SDK and Claude Agent SDK examples below each answer one market question.
OpenAI Agents SDK (Python)
MCPServerStreamableHttp takes the URL and headers in params. Add cache_tools_list=True to skip re-listing tools on each run.
import asyncio, os
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
async def main():
async with MCPServerStreamableHttp(
name="airroi",
params={
"url": "https://mcp.airroi.com",
"headers": {"X-API-KEY": os.environ["AIRROI_API_KEY"]},
},
) as airroi:
agent = Agent(name="STR analyst", mcp_servers=[airroi])
result = await Runner.run(
agent, "Occupancy and ADR for 2-bedroom homes in Nashville?"
)
print(result.final_output)
asyncio.run(main())Checked against the Agents SDK MCP docs.
Claude Agent SDK (TypeScript)
Use type: "http" in mcpServers and allow the tools with mcp__airroi__*; MCP tools you haven't allowed won't run.
import { query } from "@anthropic-ai/claude-agent-sdk";
for await (const message of query({
prompt: "Occupancy and ADR for 2-bedroom homes in Nashville?",
options: {
mcpServers: {
airroi: {
type: "http",
url: "https://mcp.airroi.com",
headers: { "X-API-KEY": process.env.AIRROI_API_KEY ?? "" },
},
},
allowedTools: ["mcp__airroi__*"],
},
})) {
if (message.type === "result" && message.subtype === "success") {
console.log(message.result);
}
}Checked against the Claude Agent SDK MCP docs.
Building an app instead? The REST endpoints behind each tool share the same key and balance. For what teams build, see Airbnb MCP use cases.
Clients that only run local (stdio) servers
Some clients only launch local stdio servers. For those, run mcp-remote, a small Node.js bridge that starts through npx and forwards each request to https://mcp.airroi.com with your header.
It's the only package involved; AirROI publishes none. Write the header with no spaces around the colon.
- Install Node.js 18 or later so
npxis on the client's PATH. - Add the entry with the
mcp-remotecommand and your key inenv. - Write
X-API-KEY:${AIRROI_API_KEY}without spaces; some clients, and Windows, don't escape them inargs. --header-filereads headers from a file, oneName: valueper line, to keep the key off the command line.
{
"mcpServers": {
"airroi": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.airroi.com",
"--header",
"X-API-KEY:${AIRROI_API_KEY}"
],
"env": { "AIRROI_API_KEY": "YOUR_API_KEY" }
}
}
}npx mcp-remote https://mcp.airroi.com --header X-API-KEY:${AIRROI_API_KEY}Checked against the mcp-remote README.
Check that it works
Once connected, your client lists 29 AirROI tools. tools/list isn't billed but still needs the key, so an empty list or an error means the header didn't arrive. Then ask one small question: the 2-call Lisbon market check below, run against the live server, cost $0.11.
| Client | Where to look |
|---|---|
| Claude Code | /mcp or claude mcp list |
| Codex | /mcp or codex mcp list |
| Cursor | Customize in the sidebar |
| VS Code | Configure Tools in the chat input |
| Devin Desktop | MCPs section of the agent panel's … menu |
| Antigravity CLI | /mcp in agy |
| n8n | Tools to Include fills from the server |
Next, try a revenue estimate with comps, a competitor's live calendar or a base price recommendation.
Size up a market outside the US
Prompt
How does a 1-bedroom entire apartment perform on Airbnb in Lisbon? Give me occupancy, ADR and annual revenue in euros.
2 tool calls
airroi_search_markets$0.01query: Lisbon
airroi_market_summary$0.10Lisbon, Lisbon, Portugal · room_type = entire_home · bedrooms = 1 · num_months: 12 · currency: native
Answer written from these results
Over the last 12 months, 1-bedroom entire homes in Lisbon averaged 57% occupancy at an ADR of €130.60, for RevPAR of €77.20 and about €20,600 in average annual revenue per listing. Guests book 49 days ahead on average and stay 5.1 nights, against an average minimum stay of 4.1 nights. The segment has about 5,120 active listings.
Troubleshooting
Most setup failures come down to the header. "401 Missing API key" means a request reached AirROI without X-API-KEY; a server that never appears means the client couldn't parse its config.
Match your symptom below, then restart the client fully after each change, since most clients read their config only at launch.
| Symptom | Likely cause | Fix |
|---|---|---|
401 {"error":"Missing API key"} | The header never arrived. | Name it exactly X-API-KEY, inside headers or the --header flag. |
| The key reference arrives empty | AIRROI_API_KEY isn't set where the client launched. | Export it in your shell profile, then quit and reopen the client. |
| mcp-remote exits or mangles the header | Spaces around the colon split the argument. | Write X-API-KEY:${AIRROI_API_KEY}. Spaces are fine inside env. |
| The server never shows up | The config uses another client's key names. | VS Code: servers. Cursor, Claude Desktop: mcpServers + url. Devin Desktop, Antigravity: mcpServers + serverUrl. |
| Codex shows "Auth: Unsupported" | Expected for header auth. | Nothing to fix; /mcp lists the tools. |
| Claude Desktop says the server failed | Node.js or npx is missing, or the JSON has a typo. | Read the logs: ~/Library/Logs/Claude/mcp*.log (macOS), %APPDATA%\Claude\logs (Windows). |
| Antigravity lists the server, but tools fail | An imported Gemini config still says url or httpUrl. | Rename it to serverUrl and restart agy. |
| ChatGPT on the web has no field for the key | Developer mode takes OAuth or no-auth servers only. | Use Codex in the ChatGPT desktop app, CLI or IDE. |
Protocol details
AirROI runs a remote, stateless MCP server over Streamable HTTP only: no stdio package and no SSE endpoint. It negotiates MCP protocol version 2025-11-25, checks the X-API-KEY header on every request and is listed in the official MCP Registry as com.airroi/mcp.
Here are the details client and SDK authors ask about.
- Endpoint
https://mcp.airroi.com;/mcpworks too.- Transport
- Streamable HTTP only, stateless, with no
Mcp-Session-Id. Legacy HTTP+SSE is deprecated in the current MCP specification. - Protocol version
2025-11-25, negotiated oninitialize(official TypeScript SDK 1.30.0).- Authentication
X-API-KEYon every request, includinginitializeandtools/list. No OAuth, no key in the query string.- Tools
- 29 tools: 26 carry
readOnlyHint, and the other 3 create a download file or scan cursor. None can change a listing, price, booking or message. See Airbnb analytics MCP tools. - Billing
- From $0.01 per call after a $10 deposit, the same per-call pricing as the REST API.
tools/listisn't billed. - Registry
- com.airroi/mcp in the official MCP Registry.
Frequently asked questions
Add an airroi entry under mcpServers in ~/.cursor/mcp.json (global) or .cursor/mcp.json (project), with "url": "https://mcp.airroi.com" and a headers object that sets X-API-KEY to ${env:AIRROI_API_KEY}. Export AIRROI_API_KEY in your shell profile and restart Cursor. Then open Customize in the sidebar and confirm that airroi lists its 29 tools.
Create .vscode/mcp.json with a servers entry (not mcpServers) of "type": "http", "url": "https://mcp.airroi.com" and an X-API-KEY header. Use an inputs password prompt, ${input:airroi-key}, so the key isn't saved in the file. Choose Start above the server entry, enter your key when asked, and use the tools in Copilot Chat's Agent mode.
Open the MCP config file from the MCPs section of the agent panel's … menu, then add an airroi server with "serverUrl": "https://mcp.airroi.com" and a headers object containing X-API-KEY. Devin's docs place the file at ~/.config/devin/mcp_config.json (Windows: %APPDATA%\devin\mcp_config.json), and installs carried over from Windsurf also read ~/.codeium/windsurf/mcp_config.json. Windsurf was renamed Devin Desktop on June 2, 2026.
Gemini CLI stopped serving Google AI Pro, Ultra and free individual accounts on June 18, 2026. Its replacement, Antigravity CLI, works with AirROI: add the server to ~/.gemini/config/mcp_config.json (or .agents/mcp_config.json in a workspace) with "serverUrl": "https://mcp.airroi.com" and an X-API-KEY header. Older Gemini configs used url or httpUrl; Antigravity needs serverUrl.
Yes. Attach an MCP Client Tool node to your AI Agent, then set Endpoint to https://mcp.airroi.com and Server Transport to HTTP Streamable. Choose Header Auth and create a credential with name X-API-KEY and your key as the value. The agent can then call any of the 29 tools, and Tools to Include limits it to the few your workflow needs.
The server didn't receive the X-API-KEY header. Every request needs it, including the first initialize and tools/list. Check three things: the header name is exactly X-API-KEY; your environment variable is exported in the shell that starts the client; and, with mcp-remote, there are no spaces around the colon.
It speaks Streamable HTTP only, the transport the MCP specification recommends for remote servers. The older HTTP+SSE transport is deprecated in the current specification. If your client only supports local stdio servers, run the mcp-remote bridge (npx mcp-remote https://mcp.airroi.com --header X-API-KEY:${AIRROI_API_KEY}), the same approach as in Claude Desktop.
Get your API key
Add $10 in credit, paste your client's config and ask your first market question. One key covers the MCP server and the REST API.