The short version. To connect Lodgify to Claude today, you run an MCP server: a small program that wraps the Lodgify Public API and exposes it to Claude as tools. Once connected, Claude can read your properties, bookings, availability calendars, and nightly rates and answer questions about them in plain English. The fastest route is a ready-made community server you launch with one command; the sturdiest is a tiny read-only server you build yourself in about twenty minutes.
MCP (the Model Context Protocol) is an open standard from Anthropic that lets AI assistants talk to outside systems. Lodgify has announced a first-party MCP at mcp.lodgify.com, but as of July 2026 it is in early access behind a waitlist, so this guide covers what you can actually run right now.
Three routes, one decision
Unlike most PMSes, Lodgify gives you a real choice here. Pick based on how much you want to trust third-party code versus how soon you want this working.
Official Lodgify MCP
First-party, from Lodgify itself, at mcp.lodgify.com. It advertises reading bookings, updating settings, and triggering workflows from any MCP-capable assistant, Claude included. The catch: as of July 2026 it is early access, behind a waitlist.
Community MCP server
An open-source server that already wraps Lodgify's Public API v2. The most actively maintained is @mikerob/lodgify-mcp (MIT licensed, 20+ tools across properties, bookings, availability, and rates). One config entry and your API key; no code.
Build your own
A ~90-line read-only server you write yourself against the Public API. You see every line that touches your key, you control exactly which endpoints Claude can reach, and nothing changes underneath you. This guide includes the full file.
What you can ask once it's connected
Sized for the small-portfolio operator Lodgify is built for: a handful to a few dozen units, one person wearing the revenue, ops, and guest-comms hats.
What the Lodgify Public API exposes
Everything below is from Lodgify's own API reference at docs.lodgify.com. The API is REST, JSON only, served from api.lodgify.com in two versions (v1 and v2), and authenticated with an API key sent in an X-ApiKey header. The v2 read endpoints this guide uses:
| Endpoint | What it returns |
|---|---|
| GET/v2/properties | Paged list of your properties (50 per page max) with rooms, address, and coordinates. |
| GET/v2/reservations/bookings | Paged bookings list. Filter by stay (Upcoming, Current, Historic, arrival or departure date) or by updatedSince; optionally include transactions and quote details. |
| GET/v2/availability/{propertyId} | Availability calendar for a property over a date range, with available-unit counts per period. |
| GET/v2/rates/calendar | Nightly rates for a property and room type over a date range, including price per day and min/max stay. |
The API goes further than these four: v2 also covers deleted properties, rate settings, external bookings, payment links, quotes, and message-thread details, and v1 adds webhooks plus write operations like creating bookings and updating rates. According to Lodgify's rate-limit documentation, v2 allows 750 requests per minute, which a conversational workload will never approach.
Prerequisites
Three things: a Lodgify account with Public API access (the key lives at Settings, then Public API; if the page offers to let you request access instead of showing a key, API access is not switched on for your account yet), Node.js 18 or newer (check with node --version), and either Claude Desktop or Claude Code.
Get your Lodgify API key
Log in to Lodgify, open Settings, and go to the page called Public API. Copy the key you find there. According to Lodgify's authorization docs, every API request carries this key in an HTTP header named X-ApiKey.
Route B: run the community server
If you are comfortable running open-source code, this is the ten-minute path. @mikerob/lodgify-mcp is an MIT-licensed, unofficial server on npm that exposes 20+ Lodgify tools (properties, bookings, availability, rates, and more). Add it straight to your Claude Desktop config; npx fetches it on launch:
{
"mcpServers": {
"lodgify": {
"command": "npx",
"args": ["-y", "@mikerob/lodgify-mcp"],
"env": {
"LODGIFY_API_KEY": "your-lodgify-api-key"
}
}
}
}
Fully quit and reopen Claude Desktop, and you are done: skip to step 5. Two things to know before you pick this route: it is community-maintained, not from Lodgify, so review the source on GitHub if that matters to you, and its tool set includes more than reads, so Claude will have access to write-capable tools too (Claude still asks permission before each call). If you would rather have a hard read-only guarantee, take route C.
Route C: build your own read-only server
Scaffold a Node project with the official MCP SDK and zod:
mkdir lodgify-mcp && cd lodgify-mcp
npm init -y
npm pkg set type="module"
npm install @modelcontextprotocol/sdk zod
Then save this as index.js. Four tools, all GET, mapped one-to-one onto the v2 endpoints in the table above:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const API_BASE = "https://api.lodgify.com";
const API_KEY = process.env.LODGIFY_API_KEY;
if (!API_KEY) {
console.error("Set LODGIFY_API_KEY first.");
process.exit(1);
}
// Authenticated GET. The key rides in the X-ApiKey header on every request.
async function get(path, params = {}) {
const url = new URL(`${API_BASE}${path}`);
for (const [k, v] of Object.entries(params)) {
if (v !== undefined && v !== null && v !== "") url.searchParams.set(k, String(v));
}
const res = await fetch(url, {
headers: { "X-ApiKey": API_KEY, Accept: "application/json" },
});
if (!res.ok) throw new Error(`Lodgify ${res.status}: ${await res.text()}`);
return res.json();
}
function json(data) {
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
}
const server = new McpServer({ name: "lodgify", version: "1.0.0" });
server.registerTool(
"list_properties",
{
description: "List properties on the Lodgify account, paged, 50 per page max. Includes each property's rooms (room type ids are needed for rates).",
inputSchema: {
page: z.number().optional().describe("Page number, default 1"),
size: z.number().optional().describe("Items per page, max 50"),
},
},
async ({ page, size }) =>
json(await get("/v2/properties", { page: page ?? 1, size: size ?? 50, includeCount: true }))
);
server.registerTool(
"list_bookings",
{
description: "List bookings, paged. Filter by stay window: Upcoming, Current, Historic, or All.",
inputSchema: {
stayFilter: z.enum(["Upcoming", "Current", "Historic", "All"]).optional()
.describe("Which bookings to include, default Upcoming"),
updatedSince: z.string().optional().describe("Only bookings updated since this date-time"),
page: z.number().optional().describe("Page number, default 1"),
size: z.number().optional().describe("Items per page, default 50"),
},
},
async ({ stayFilter, updatedSince, page, size }) =>
json(await get("/v2/reservations/bookings", {
stayFilter: stayFilter ?? "Upcoming",
updatedSince,
page: page ?? 1,
size: size ?? 50,
includeCount: true,
}))
);
server.registerTool(
"get_availability",
{
description: "Availability calendar for one property over a date range, with available-unit counts per period.",
inputSchema: {
propertyId: z.number().describe("Property id from list_properties"),
start: z.string().describe("Start date, YYYY-MM-DD"),
end: z.string().describe("End date, YYYY-MM-DD"),
},
},
async ({ propertyId, start, end }) =>
json(await get(`/v2/availability/${propertyId}`, { start, end }))
);
server.registerTool(
"get_rates",
{
description: "Nightly rates calendar for a property and room type over a date range: price per day, min and max stay.",
inputSchema: {
houseId: z.number().describe("Property id from list_properties"),
roomTypeId: z.number().describe("Room type id from the property's rooms array"),
startDate: z.string().describe("Start date, YYYY-MM-DD"),
endDate: z.string().describe("End date, YYYY-MM-DD"),
},
},
async ({ houseId, roomTypeId, startDate, endDate }) =>
json(await get("/v2/rates/calendar", { houseId, roomTypeId, startDate, endDate }))
);
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("Lodgify MCP server running on stdio");
Connect it to Claude
Add a lodgify entry to your config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %AppData%\Claude\claude_desktop_config.json on Windows), then fully quit and reopen the app.
{
"mcpServers": {
"lodgify": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/lodgify-mcp/index.js"],
"env": {
"LODGIFY_API_KEY": "your-lodgify-api-key"
}
}
}
}
claude mcp add \
--env LODGIFY_API_KEY=your-lodgify-api-key \
--transport stdio lodgify \
-- node /ABSOLUTE/PATH/TO/lodgify-mcp/index.js
Confirm with claude mcp list. Add --scope user to make it available in every project.
Ask away
Start a new conversation. Claude asks permission the first time it calls each tool; approve, and you're set.
Who checks in over the next 7 days? Group by property, note party size.
Show December's nightly rates for each property as a table.
Which Saturdays this month have a departure and an arrival at the
same unit? Those are my same-day turnovers.
Where Zapier fits (and where it doesn't)
Lodgify also has a Zapier integration, and it is worth understanding what it is for, because it is not a Claude connection. Zapier is event-driven: something happens in Lodgify, a Zap fires, another app reacts. Its Lodgify triggers include:
Use Zapier when you want automation without conversation: push new bookings into a spreadsheet, ping Slack when a guest messages, sync to a calendar. Use MCP when you want to ask questions: interrogate the whole portfolio, cross-reference bookings against rates, draft messages from live data. Plenty of operators end up running both, since they solve different problems.
What about "Lodgify AI"?
If you searched "lodgify ai" and landed here: Lodgify does ship AI natively, and it is a different thing from what this guide builds. The Lodgify AI Assistant is a GPT-powered tool inside the unified inbox that reads the latest guest message and drafts a personalized reply from your account and reservation data, covering things like check-in instructions, amenities, policies, and local recommendations. According to Travolution's coverage of the launch, it rolled out to all Lodgify customers worldwide in September 2023, and co-founder and CEO Dennis Klett framed it as saving hosts time on guest communications.
The scope difference is the point. The AI Assistant answers one guest, inside one thread, inside Lodgify's interface. Connecting Claude via MCP gives an assistant read access across the whole account, so it can answer portfolio-level questions no inbox tool addresses: pacing, gaps, turnovers, rate spreads. They complement each other rather than compete.
Troubleshooting
401 Unauthorized on every call
The key is wrong, or the header is. Lodgify authenticates with an HTTP header named exactly X-ApiKey, not Authorization and not a query parameter. Re-copy the key from Settings, then Public API, and check for stray whitespace in your config.
No API key on my Public API page
If Settings shows a Public API page that offers to let you request access rather than showing a key, API access is not enabled on your account yet. Request it there or ask Lodgify support; the API is an account-level capability, not something the MCP server can work around.
Claude doesn't see any Lodgify tools
Claude Desktop only reads its config at startup. Fully quit (Cmd+Q on macOS, quit from the tray icon on Windows) and reopen; closing the window is not enough. Still nothing? Check the JSON is valid, the path to index.js is absolute, and node is on your PATH.
Bookings come back empty but I definitely have bookings
Check the stay filter. The server defaults stayFilter to Upcoming, so past stays will not appear unless Claude passes Historic or All. Ask the question with a time frame ("bookings that already happened this year") and Claude will pick the right filter.
429 Too Many Requests
Lodgify's documented limits are 600 requests per minute on v1 and 750 per minute on v2, far beyond conversational use, so a 429 usually means something is looping. If Claude is paging through a large portfolio, ask it to narrow by date or property instead of pulling everything.
I want Claude to write: confirm bookings, change rates, send messages
The v1 API has write endpoints (create booking, update rates, add messages to a booking) and the key you already have can call them. Route B's community server exposes some writes; for route C you would add POST/PUT tools deliberately. Before you do, remember the trade: a read-only server is provably harmless, and most of the day-to-day value here is in reading and drafting anyway.
The other half of the turnover question. Once Claude can tell you which units are same-day turnovers, the next question is whether those turnovers were actually done right. RapidEye reads the photos your cleaners already capture at each turnover and flags damage and missed cleaning before the next guest checks in. It pairs naturally with a booking-data connection like this one.
FAQ
Does Lodgify have an official MCP server?
Yes, one is coming. Lodgify has a first-party MCP at mcp.lodgify.com that it says will connect assistants like Claude, ChatGPT, and Gemini to your account, but as of July 2026 it is early access behind a waitlist. Join it, and run one of the two routes above in the meantime.
Is "Lodgify AI" the same as connecting Claude?
No. Lodgify's AI Assistant drafts replies to individual guest messages inside the unified inbox (GPT-powered, live for all customers since September 2023). An MCP connection gives Claude read access to the whole portfolio for cross-cutting questions. Different tools, both useful.
Is it safe to connect my real account?
The route C server is read-only: every tool is a GET, so Claude can look but not touch. Be aware that per Lodgify's docs the API key itself carries write permissions, so the read-only guarantee lives in the server code, which is exactly why building it yourself is attractive. The key stays in an environment variable on your machine, and Claude asks before each tool call.
Can Claude send guest messages through Lodgify?
Not with this build. v2 lets you read message-thread details, and v1 has add-message write endpoints, so it is technically possible. The workflow we recommend: Claude drafts from booking data, you paste and send from the Lodgify inbox.
Can I do this with other PMSes too?
Yes, the pattern is identical for any PMS with a public REST API; only the auth step changes. See the full Claude guides library for Hostaway, Guesty via wrappers, OwnerRez, Hospitable, and Hostfully, or our RapidEye API if you want inspection results in the same conversation.
More from this series
Sources
- Lodgify API docs: Authorization (X-ApiKey, Settings then Public API, read and write permissions)https://docs.lodgify.com/docs/authorization
- Lodgify API docs: Rate Limits (600/min v1, 750/min v2)https://docs.lodgify.com/docs/rate-limits
- Lodgify API reference: List of bookings (/v2/reservations/bookings)https://docs.lodgify.com/reference/getallasync
- Lodgify API reference: Availability calendar by property (/v2/availability/{propertyId})https://docs.lodgify.com/reference/getcalendarbyproperty
- Lodgify API reference: Nightly rates (/v2/rates/calendar)https://docs.lodgify.com/reference/ratescalendar-v2
- Lodgify MCP: official first-party MCP, early access waitlisthttps://mcp.lodgify.com/
- lodgify-mcp: unofficial community MCP server for Lodgify (MIT, npm @mikerob/lodgify-mcp)https://github.com/MikeRobGIT/lodgify-mcp
- Zapier: Lodgify integrations (triggers list)https://zapier.com/apps/lodgify/integrations
- Travolution: Lodgify launches AI Assistant to optimise guest communicationshttps://www.travolution.com/news/travel-sectors/accommodation/lodgify-launches-ai-assistant-to-optimise-guest-communications/
- Model Context Protocol: Build an MCP serverhttps://modelcontextprotocol.io/quickstart/server
Independent integration guide. RapidEye is not affiliated with or endorsed by Lodgify or Anthropic. API behavior, dashboard menus, and the official MCP's availability can change; confirm specifics against the official docs above. Last reviewed July 19, 2026.

