The short version. You can connect iGMS to Claude, but not with a copy-paste API key. iGMS publishes a documented public API, and access to it runs through the iGMS developer program: you register, create an application to get a client ID and secret, authorize your own account through the OAuth flow, and exchange the returned code for an access token. With that token, a small MCP server on your machine gives Claude read access to your listings, bookings, guests, and cleaning tasks.
MCP (the Model Context Protocol) is an open standard from Anthropic that lets AI assistants talk to outside systems. As of July 2026 there is no official iGMS MCP server, no community one we could find, and no Zapier or Make integration (that is an open feature request on the iGMS feedback board). The API is the path, and this guide walks all of it.
The integration reality, checked July 2026
Before you spend an evening on this, here is what exists and what does not, verified against iGMS's own documentation and feedback board rather than third-party marketing pages.
iGMS public API
Documented at igms.com/docs/airgms-api. OAuth token via the developer program, then simple GET endpoints for listings, bookings, guests, tasks, calendars, and message threads. 1,000 requests per minute.
MCP server
No official one, and no community-built iGMS MCP server we could find as of July 2026. You build a small one yourself. This page includes the whole thing.
Zapier or Make
No iGMS app on Zapier. Zapier and Make support is an open request marked In Review on the iGMS feedback board, not a shipped integration.
What you can ask once it's connected
These are the questions that make the setup worth it for a self-managing host or small team. Claude pulls the raw data through the tools, then does what iGMS dashboards don't: cross-references, drafts, and summarizes.
- "Who checks in over the next 7 days, at which properties, and how many guests each?"
- "Draft a personalized pre-arrival message for each guest arriving this weekend, using their booking dates and property name."
- "List this month's cleaning tasks by property. Which turnovers are same-day, where checkout and the next check-in fall on the same date?"
- "Total my booking revenue by property for last month, including fees and taxes."
- "Which guests have stayed with us more than once? Draft a return-guest discount message for them."
- "Compare bookings created in the last 30 days to the 30 days before. Which platform is growing, Airbnb or Vrbo?"
Before you start
Three things: an iGMS account (you will also need to join the free developer program inside it, step 1), Node.js 18 or newer (check with node --version), and either Claude Desktop or Claude Code.
It also helps to pick your scopes up front. iGMS gates each API method behind named scopes you request during authorization. For a read-only reporting setup, two cover everything this guide uses:
| Scope | What iGMS says it grants |
|---|---|
| messaging | View listings, bookings, guests, and hosts, and send messages to booking guests. We use only the view side; no message-sending tool is registered below. |
| tasks | Company info, list of team members, and the tasks assigned to them, which is where your cleaning and turnover tasks live. |
Other scopes exist (listings, calendar-control, direct-bookings, smart-locks, external-cleaning-management, reports, pricing-management) per the iGMS Getting a Token page. Request only what you will use.
Join the developer program and create an app
According to iGMS's API documentation, "before requesting any tokens, you need to be a registered developer program participant." Sign in to iGMS, then open the developer program page at igms.com/app/developer-program.html. Register, then create an application on that same page. Two values come out of this:
client_id and client_secret, both shown in your list of applications. For the app's redirect_uri, use something you control; for a personal integration, http://localhost:8899/callback is fine, the page does not need to exist because you will copy the code straight out of the address bar.
Authorize your own account
This is the step that replaces the "paste your API key" moment other platforms have. You are both the developer and the user, so you send yourself through the approval screen. Open this URL in your browser, with your own values substituted:
https://igms.com/app/auth.html?client_id=YOUR_CLIENT_ID&redirect_uri=http://localhost:8899/callback&scope=messaging,tasks
iGMS shows an authorization prompt. Click Allow. Your browser is then redirected to the redirect URI with a code=AUTH_CODE parameter in the address bar. The page itself will fail to load (nothing is running on localhost:8899, which is fine). Copy the code value.
Exchange the code for an access token
One request to iGMS's token endpoint turns the code into a token. From your terminal:
curl "https://igms.com/auth/token?grant_type=authorization_code&code=AUTH_CODE&redirect_uri=http://localhost:8899/callback&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
The response is {"access_token": "some-access-token"}. That token is what every API call carries from here on, and per the iGMS docs it allows up to 1,000 requests per minute. Save it somewhere safe; if you see {"error": "Incorrect application credentials"} instead, re-check the client ID and secret.
Scaffold the project
A folder and two dependencies: the official MCP SDK and zod, which describes each tool's inputs. No build step.
mkdir igms-mcp && cd igms-mcp
npm init -y
npm pkg set type="module"
npm install @modelcontextprotocol/sdk zod
Write the server
Save this as index.js. It reads your token from the environment, appends it to each request the way the iGMS API expects, and registers four read-only tools: listings, bookings, guests, and tasks. Every response comes back as data plus a meta block with page and has_next_page, which is how Claude knows to keep paging.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const API_BASE = "https://www.igms.com/api/v1";
const TOKEN = process.env.IGMS_ACCESS_TOKEN;
if (!TOKEN) {
console.error("Set IGMS_ACCESS_TOKEN first.");
process.exit(1);
}
// Authenticated GET. iGMS takes the token as a query string parameter.
async function get(path, params = {}) {
const url = new URL(`${API_BASE}${path}`);
for (const [key, value] of Object.entries(params)) {
if (value !== undefined && value !== null && value !== "") {
url.searchParams.set(key, String(value));
}
}
url.searchParams.set("access_token", TOKEN);
const res = await fetch(url, { headers: { Accept: "application/json" } });
if (!res.ok) throw new Error(`iGMS ${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: "igms", version: "1.0.0" });
server.registerTool(
"list_listings",
{
description: "List the listings managed in iGMS, with property, platform, status, and host. Responses are paginated; meta.has_next_page tells you whether to fetch the next page.",
inputSchema: {
platform_type: z.string().optional().describe("Comma separated platform types, e.g. airbnb"),
page: z.number().optional().describe("Page number, default 1"),
},
},
async ({ platform_type, page }) => json(await get("/listings", { platform_type, page }))
);
server.registerTool(
"list_bookings",
{
description: "List active bookings with check-in/check-out, guest count, status, and a price breakdown (base, extras, fee, tax, total). Filter by date range to keep responses small.",
inputSchema: {
from_date: z.string().optional().describe("Hide bookings ended before this date, YYYY-MM-DD"),
to_date: z.string().optional().describe("Hide bookings starting after this date, YYYY-MM-DD"),
booking_status: z.string().optional().describe("Booking status filter, e.g. accepted"),
platform_type: z.string().optional().describe("Comma separated platform types"),
page: z.number().optional().describe("Page number, default 1"),
},
},
async ({ from_date, to_date, booking_status, platform_type, page }) =>
json(await get("/bookings", { from_date, to_date, booking_status, platform_type, page }))
);
server.registerTool(
"list_guests",
{
description: "List guests with name, platform, emails, and phone numbers. Cross-reference guest_uid with bookings to find repeat guests.",
inputSchema: {
guest_uids: z.string().optional().describe("Comma separated guest UIDs to look up"),
page: z.number().optional().describe("Page number, default 1"),
},
},
async ({ guest_uids, page }) => json(await get("/guests", { guest_uids, page }))
);
server.registerTool(
"list_tasks",
{
description: "List active tasks (cleaning, turnover, maintenance) with property, assigned team member, type, status, and local start/end times.",
inputSchema: {
property_uids: z.string().optional().describe("Comma separated property UIDs"),
from_date: z.string().optional().describe("Hide tasks started before this date, YYYY-MM-DD"),
to_date: z.string().optional().describe("Hide tasks starting after this date, YYYY-MM-DD"),
page: z.number().optional().describe("Page number, default 1"),
},
},
async ({ property_uids, from_date, to_date, page }) =>
json(await get("/tasks", { property_uids, from_date, to_date, page }))
);
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("iGMS MCP server running on stdio");
Connect it to Claude
Point Claude at the server and pass your token.
Add an igms 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": {
"igms": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/igms-mcp/index.js"],
"env": {
"IGMS_ACCESS_TOKEN": "your-access-token"
}
}
}
}
claude mcp add \
--env IGMS_ACCESS_TOKEN=your-access-token \
--transport stdio igms \
-- node /ABSOLUTE/PATH/TO/igms-mcp/index.js
Confirm with claude mcp list. Then start a new conversation, approve the first tool call, and try: "List this week's cleaning tasks by property and flag any same-day turnovers."
Prefer to skip the typing?
Paste this into Claude Code (or any coding agent) and it builds and wires up the server for you. You still do steps 1 through 3 yourself, since only you can join the developer program and click Allow.
Build a local MCP server (Node.js, ESM, @modelcontextprotocol/sdk and zod)
that wraps the iGMS API (base https://www.igms.com/api/v1). Read
IGMS_ACCESS_TOKEN from the environment and append it to every request as
the access_token query string parameter (that is how iGMS authenticates;
there is no header auth). Add an authenticated GET helper that returns the
parsed JSON body; responses have a data array and a meta block with page
and has_next_page. Register these read-only tools: list_listings
(platform_type?, page?) -> /listings; list_bookings (from_date?, to_date?,
booking_status?, platform_type?, page?) -> /bookings; list_guests
(guest_uids?, page?) -> /guests; list_tasks (property_uids?, from_date?,
to_date?, page?) -> /tasks. Dates are YYYY-MM-DD. Use StdioServerTransport;
log startup to stderr. Then make a package.json (type: module), install the
deps, and show me the claude mcp add command, the claude_desktop_config.json
block, and three prompts to try.
Troubleshooting
The token exchange returns "Incorrect application credentials"
The client ID or secret does not match your application, or the redirect_uri in the token request is not identical to the one you used in the authorization URL. iGMS requires them to match exactly. Also note authorization codes are single-use; if the exchange failed once, go through the Allow screen again for a fresh code.
API calls fail even though I have a token
Check the scope you authorized with. Each iGMS method requires specific scopes: /tasks requires tasks, /guests requires messaging, and /bookings accepts messaging among others. If you authorized with too few scopes, redo step 2 with scope=messaging,tasks and exchange a new code.
Claude says it doesn't see any iGMS tools
Claude Desktop only reads its config at startup. Fully quit (Cmd+Q on macOS, right-click tray icon then Quit on Windows) and reopen. Still nothing? Check for invalid JSON in the config file, a wrong absolute path to index.js, or node missing from your PATH.
Claude only sees part of my data
iGMS paginates. Every response carries meta.has_next_page; if it is true, tell Claude to fetch the next page until it is false, or narrow with the date filters on bookings and tasks so a single page covers what you asked about.
Can I skip the OAuth dance entirely?
Not for live data; the developer program flow is the only documented way to get a token. If you just want one-off help, the zero-setup fallback is manual: copy a reservation list or message thread out of iGMS and paste it into Claude. You lose freshness and automation, but it needs no token at all.
Good to know
- It's read-only. The iGMS API can also send guest messages, edit calendars and prices, set door codes, and create or cancel bookings, but none of those are registered here. Every tool above is a GET. If you add write tools later, add them deliberately and test carefully; a wrong calendar write hits a live listing.
- The rate limit is generous. iGMS documents 1,000 requests per minute per access token, far more than a chat session will use. Be a good citizen anyway: filter by date instead of paging your whole history every question.
- Tasks are your turnover feed. The /tasks method returns each task's property, assigned team member, type, status, and local start and end times, which is exactly the data you need to ask Claude about cleaning coverage and same-day turnovers.
- Your token stays with you. It lives in an environment variable in the Claude config, and the server runs locally over stdio. Nothing is sent anywhere except to iGMS's API.
The tasks feed tells you a clean happened; it can't tell you how it went. Once Claude can read your iGMS cleaning tasks, the missing layer is the physical result: did the cleaner miss damage, leave something behind, stage the room wrong? RapidEye reads the photos your cleaners already take at turnover and flags damage and missed issues before the next guest checks in. It also has an API, so findings can flow into the same kind of setup you just built.
FAQ
Does iGMS have an official MCP server?
No. As of July 2026 iGMS does not publish one, and we could not find a community-built iGMS MCP server either. The documented public API means you can build a focused read-only one yourself, which is what this guide does.
Does iGMS integrate with Zapier or Make?
No. There is no iGMS app on Zapier, and Zapier plus Make support exists only as a feature request marked In Review on the iGMS feedback board. If a blog told you otherwise, it was ahead of reality. The API is the real integration surface.
Why is getting a token harder than on other platforms?
iGMS built its API for partner platforms (pricing tools, smart locks, cleaning apps), so it uses an OAuth authorization flow with per-scope consent instead of a personal API key. As a host you simply play both roles: create the app, then authorize your own account. It is a one-time, roughly five-minute detour.
Is it safe to connect my real account?
The server here is read-only, the token stays on your machine, and Claude asks before each tool call. The one iGMS-specific caution: the token travels as a URL query parameter, so keep request URLs out of shared logs and pasted messages.
Can I do this with other PMS platforms too?
Yes, the pattern is identical and usually easier, since most platforms hand you a key directly. Browse all of our Claude guides, including Hospitable, Hostfully, and OwnerRez.
Sources
- Introduction to iGMS APIhttps://www.igms.com/docs/airgms-api/index.html
- iGMS API: Getting a Token (developer program, OAuth flow, scopes, 1,000 req/min)https://www.igms.com/docs/airgms-api/getting-token.html
- List of all available iGMS API methodshttps://www.igms.com/docs/airgms-api/methods/index.html
- iGMS API method: v1/bookingshttps://www.igms.com/docs/airgms-api/methods/v1/bookings.html
- iGMS API method: v1/taskshttps://www.igms.com/docs/airgms-api/methods/v1/tasks.html
- iGMS feedback board: Create Integration with Zapier and Make.com (In Review)https://feedback.igms.com/p/create-integration-with-zapier-and-makecom
- iGMS Integration Marketplacehttps://www.igms.com/marketplace/
- Model Context Protocol: Build an MCP serverhttps://modelcontextprotocol.io/quickstart/server
- Claude Code: Connect to tools via MCPhttps://code.claude.com/docs/en/mcp
Independent integration guide. RapidEye is not affiliated with or endorsed by iGMS or Anthropic. API behavior, scopes, and dashboard pages can change; confirm specifics against the official docs above. Last reviewed July 19, 2026.
Other guides
Connect Turno to Claude
Turno is one of iGMS's marketplace cleaning partners. Same idea, cleaner-side data.
PricingConnect PriceLabs to Claude
Query synced listings and dynamic prices. Also on the iGMS marketplace.
All guidesThe full Claude guide library
Every PMS, pricing, cleaning, and ops tool we've wired to Claude so far.

