OwnerRez MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OwnerRez MCP Server Who's checking in this week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OwnerRez + Claude (OwnerRez MCP Server)
This lets you talk to your OwnerRez account using Claude, in plain English. Once it's set up, you can ask things like:
"Who's checking in this week?"
"How much did I make this month?"
"Show me the owner statement for Jane Smith."
"Which properties had the most bookings in the last 30 days?"
You don't need to be technical. Just follow the steps below in order. It takes about 15 minutes.
Before you start, you need three things
An OwnerRez account (with admin access, so you can create a key).
Claude Desktop — the free app. Download it here: https://claude.ai/download
Node.js — a free tool that runs this program. Download the "LTS" version here: https://nodejs.org — click the big button, open the file, and click through the installer.
What's the "Terminal"? It's an app on your computer where you type commands. On a Mac, press
Cmd + Space, type Terminal, and press Enter. On Windows, search for PowerShell. You'll paste a few commands into it below — just copy, paste, and press Enter.
Related MCP server: realtycalendar-mcp
Step 1 — Download this program
Paste this into your Terminal and press Enter:
git clone https://github.com/palarkin/OwnerRez-MCP.git
cd OwnerRez-MCPThis downloads the program into a folder and moves you into it.
Step 2 — Get your OwnerRez key
Log in to OwnerRez.
Go to Settings → Advanced Tools → Developer/API Settings.
Click Create Personal Access Token, give it any name (like "Claude"), and create it.
Copy the token — it starts with
pt_. You only see it once, so copy it now.
Step 3 — Add your email and key
In your Terminal, paste this to create your settings file:
cp .env.example .env
open -e .env # on Windows use: notepad .envA text editor will open. Fill in the two lines with your OwnerRez email and the pt_ key you
just copied, so they look like this:
OWNERREZ_EMAIL=you@example.com
OWNERREZ_TOKEN=pt_your_key_hereSave the file and close it. (This file stays on your computer and is never shared.)
Step 4 — Set it up
Paste these two commands (one at a time) and press Enter after each:
npm install
npm run buildThe first downloads what the program needs; the second gets it ready to run. Wait for each to finish.
Check it works: paste node probe.mjs and press Enter. You should see ✅ Auth OK with your
account name. If you do, everything's connected correctly. 🎉
Step 5 — Connect it to Claude
Paste this exactly — it plugs the program into Claude:
claude mcp add ownerrez --scope user -- node "$(pwd)/dist/index.js"Then fully quit Claude Desktop and reopen it (don't just close the window).
Prefer to use the Claude Desktop app's settings instead? You can add it there under Settings → Connectors/MCP, pointing to the file path that
pwdshows you followed by/dist/index.js. The command above is the easy way if you have the Claude command installed.
Step 6 — Try it!
In Claude, type something like:
"Using OwnerRez, who is checking in this week?"
That's it — you're done.
Optional — turn on guest messaging (advanced)
Everything above works with your regular key. Guest messaging (reading and sending messages to guests) needs one extra thing: an OwnerRez "OAuth app." It's more involved — set aside about 15 extra minutes. If you don't need messaging, skip this section entirely.
A) Create the OAuth app in OwnerRez
In OwnerRez, go to Settings → Advanced Tools → Developer/API Settings and click Create App.
Fill it in like this. The web addresses can be exactly these — they just have to be real addresses, not "localhost":
Name:
ClaudeHomepage URL:
https://example.comOAuth Redirect URL:
https://example.com/callbackOAuth API scope:
Full read and writeToken expiration policy:
None – tokens do not expireWebhook URL:
https://example.com/webhook(leave Webhook User/Password blank)
Save it, then copy the Client ID (starts with
c_) and the Client Secret (starts withs_). The secret is shown only once — copy it now.Open the Users tab and click Grant Access To Me.
B) Get your messaging token
Open this web address in your browser — replace
YOUR_CLIENT_IDwith your Client ID:https://app.ownerrez.com/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=https://example.com/callback&scope=full&state=xClick to approve. Your browser jumps to a page like
https://example.com/callback?code=tc_.... The page itself doesn't matter — look at the address bar and copy the part aftercode=(it starts withtc_).Back in your Terminal (in the same folder), paste this — filling in your Client ID, Client Secret, and the
tc_code — then press Enter:node oauth-setup.mjs YOUR_CLIENT_ID YOUR_CLIENT_SECRET YOUR_CODE https://example.com/callbackDo this within 10 minutes of step 1 (the code expires quickly). It saves the token into your
.envfile automatically.
C) Restart
Fully quit and reopen Claude. Guest messaging is now on. ✅
Tip: keep
https://example.com/callbackidentical everywhere — in the app settings, in the web address in B1, and in the command in B3. They must match exactly.
If something goes wrong
nodeorgit"command not found" → Node.js (or Git) isn't installed. Install Node.js from https://nodejs.org and try again.probe.mjsshows a 401 error → your email or key is wrong. Re-check the two lines in your.envfile (the key must start withpt_), or make a new key in OwnerRez.Claude doesn't see the tools → make sure you fully quit and reopened Claude, and that Step 4 finished without errors.
Good to know
Your key and email live only in the
.envfile on your computer. They are never uploaded or shared.Anything that would change your data (like updating a rate) always asks you to confirm first — it won't change anything on its own.
Guest messaging needs one extra setup step (an OwnerRez "OAuth app"). Everything else works with just the key above — see the optional messaging section above to turn it on.
For developers
See BLUEPRINT.md for the architecture, the full list of tools, remote/HTTP
hosting, and how to run the tests (npm test).
Available Tools
21 toolsownerrez_get_availabilityGet AvailabilityARead-onlyIdempotent
Show what's booked/blocked for a property in a date range (OwnerRez has no calendar endpoint; availability is derived from bookings). Returns bookings overlapping [from, to].
Inputs: to (required), from (required), property_id (required), status.
ownerrez_get_bookingGet BookingARead-onlyIdempotent
Fetch a single booking by id.
Inputs: id (required), include_guest, include_charges.
ownerrez_get_guestGet GuestARead-onlyIdempotent
Fetch a single guest by id (full contact record).
Inputs: id (required).
ownerrez_get_inquiryGet InquiryARead-onlyIdempotent
Fetch a single inquiry by id (full detail, including thread_ids for messaging).
Inputs: id (required).
ownerrez_get_messageGet MessageARead-onlyIdempotent
Fetch a single message by id. NOTE: messaging is unavailable with a Personal Access Token (requires an OAuth app).
Inputs: id (required).
ownerrez_get_ownerGet OwnerARead-onlyIdempotent
Fetch a single owner by id.
Inputs: id (required).
ownerrez_get_owner_statementGet Owner StatementARead-onlyIdempotent
Return an owner statement. Prefers OwnerRez's official statement (by statement_id, or the latest / period-matching one for an owner_id); if none exists or the official source is unavailable, synthesizes one from booking charges (needs from+to). Set synthesize=true to force the estimate.
Inputs: to, from, owner_id, synthesize, +3 more.
ownerrez_get_propertyGet PropertyARead-onlyIdempotent
Fetch a single property by id, including full detail (owner_id, check-in/out rules, capacity, address).
Inputs: id (required).
ownerrez_get_scheduleGet Schedule (arrivals / departures / turnovers)ARead-onlyIdempotent
The operational schedule for a date range across all properties (or one): who arrives, who departs, who stays through, and same-day turnovers. One call — no need to pass property ids.
Inputs: to (required), from (required), property_id.
ownerrez_list_bookingsList BookingsARead-onlyIdempotent
Search bookings. Requires property_ids OR since_utc. Compact view by default (id, property, guest, arrival, departure, status); full=true for every field. Use limit to cap. include_charges adds owner_amount/commission (implies full).
Inputs: to, from, full, limit, +4 more.
ownerrez_list_depositsList DepositsARead-onlyIdempotent
List deposits (payouts grouping). Provide booking_id (for one booking) or since_utc (recent activity) — one is required to keep results bounded.
Inputs: limit, since_utc, booking_id.
ownerrez_list_inquiriesList Inquiries (leads)ARead-onlyIdempotent
List pre-booking guest inquiries/leads: requested dates, party size, source channel, and the thread_ids used to read/reply via the messaging tools. Compact by default; full=true for every field.
Inputs: full, limit, since_utc, property_ids.
ownerrez_list_ownersList OwnersBRead-onlyIdempotent
List all property owners (id, name, contact, last_owner_statement_id).
Inputs: active, include_fields.
ownerrez_list_owner_statementsList Owner Statements (official)ARead-onlyIdempotent
List an owner's real OwnerRez statements (id, period, owner payout, paid/unpaid), newest first. Use the id with ownerrez_get_owner_statement.
Inputs: owner_id (required).
ownerrez_list_paymentsList PaymentsARead-onlyIdempotent
List payments (guest → you). Provide booking_id (for one booking) or since_utc (recent activity) — one is required to keep results bounded.
Inputs: limit, since_utc, booking_id.
ownerrez_list_propertiesList PropertiesARead-onlyIdempotent
List properties. Returns a compact view by default (id, name, active, beds/baths, guests, city, type); set full=true for every field. Use limit to cap results.
Inputs: full, limit, active, include_tags, +1 more.
ownerrez_list_refundsList RefundsARead-onlyIdempotent
List refunds. Provide booking_id (for one booking) or since_utc (recent activity) — one is required to keep results bounded.
Inputs: limit, since_utc, booking_id.
ownerrez_list_thread_messagesList Thread MessagesARead-onlyIdempotent
Fetch all messages on a single conversation thread. Requires a thread_id (OwnerRez has no global message list). NOTE: messaging is unavailable with a Personal Access Token (requires an OAuth app).
Inputs: thread_id (required).
ownerrez_search_guestsSearch GuestsARead-onlyIdempotent
Find guests by name or email (the q parameter). Compact results by default; full=true for every field.
Inputs: q (required), full, limit.
ownerrez_send_messageSend MessageA
Post a message to a guest thread. NOTE: unavailable with a Personal Access Token (requires an OAuth app). WARNING: in production this reaches the real guest. Without confirm=true it only previews and sends nothing. Use the guest's real name, not template codes.
Inputs: body (required), thread_id (required), confirm, attachment_url.
ownerrez_update_rateUpdate Rate (spot rate)ADestructiveIdempotent
Set the nightly rate for specific dates on a property (spot rates). Without confirm=true it only previews. amount=null means 'use the seasonal default'. Optionally set min/max nights.
Inputs: dates (required), amount (required), property_id (required), confirm, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 21 tools
Each tool targets a distinct resource and action: properties, bookings, guests, owners, statements, payments, deposits, refunds, inquiries, messages, availability, and rates. While some tools have similar list/get patterns, their resource names clearly differentiate them, and potential overlaps like get_schedule vs. get_availability are resolved by scope (all properties vs. one property).
All tools follow a consistent ownerrez_verb_noun pattern using snake_case: list for collections, get for single items, search for guests, send for messages, update for rates. No camelCase or irregular verbs are used, making the naming predictable and easy to navigate.
At 21 tools, the set is slightly heavier than the typical 3-15 well-scoped range but still reasonable for a property management domain covering many resource types. Each tool has a clear purpose, and the count is not excessive enough to feel bloated.
The server provides comprehensive read coverage (properties, bookings, guests, owners, statements, payments, deposits, refunds, inquiries) and a couple of write actions (send_message, update_rate). However, it lacks create, update, or delete operations for core entities like bookings, properties, and guests, which are notable gaps that could require workarounds.
Maintenance
Related MCP Connectors
Manage OwnerRez properties, bookings, guests, quotes and inquiries.
Ask your AI about your Airbnb and VRBO listings, bookings, guest messages and reviews. Read-only.
Property management AI: work orders, vendors, appliances, and triage for Claude and ChatGPT.
Manage vacation rentals, bookings, calendars and operations with OAuth and action approvals.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceConnects Claude to the Hospitable API v2 for managing vacation rental properties, reservations, guest messages, and reviews.-
- AlicenseNot gradedqualityFmaintenanceConnects AI agents to RealtyCalendar accounts, allowing users to query bookings, availability, and check-ins via natural language, with local-first privacy and read-only access.MIT
- AlicenseBqualityCmaintenanceMCP server that connects OwnerRez to Claude and other MCP clients, enabling natural language management of bookings, guest communication, property info, expenses, and webhooks.183MIT
- AlicenseAqualityCmaintenanceConnects OwnerRez property management data to MCP clients, enabling natural-language queries about bookings, check-ins, guest messaging, expenses, and webhooks.18MIT