Skip to main content
Glama
OwnerRez MCP Server

OwnerRez MCP Server

by palarkin

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

  1. An OwnerRez account (with admin access, so you can create a key).

  2. Claude Desktop — the free app. Download it here: https://claude.ai/download

  3. 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-MCP

This downloads the program into a folder and moves you into it.

Step 2 — Get your OwnerRez key

  1. Log in to OwnerRez.

  2. Go to Settings → Advanced Tools → Developer/API Settings.

  3. Click Create Personal Access Token, give it any name (like "Claude"), and create it.

  4. 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 .env

A 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_here

Save 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 build

The 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 pwd shows 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

  1. In OwnerRez, go to Settings → Advanced Tools → Developer/API Settings and click Create App.

  2. Fill it in like this. The web addresses can be exactly these — they just have to be real addresses, not "localhost":

    • Name: Claude

    • Homepage URL: https://example.com

    • OAuth Redirect URL: https://example.com/callback

    • OAuth API scope: Full read and write

    • Token expiration policy: None – tokens do not expire

    • Webhook URL: https://example.com/webhook (leave Webhook User/Password blank)

  3. Save it, then copy the Client ID (starts with c_) and the Client Secret (starts with s_). The secret is shown only once — copy it now.

  4. Open the Users tab and click Grant Access To Me.

B) Get your messaging token

  1. Open this web address in your browser — replace YOUR_CLIENT_ID with 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=x
  2. Click 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 after code= (it starts with tc_).

  3. 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/callback

    Do this within 10 minutes of step 1 (the code expires quickly). It saves the token into your .env file automatically.

C) Restart

Fully quit and reopen Claude. Guest messaging is now on. ✅

Tip: keep https://example.com/callback identical 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

  • node or git "command not found" → Node.js (or Git) isn't installed. Install Node.js from https://nodejs.org and try again.

  • probe.mjs shows a 401 error → your email or key is wrong. Re-check the two lines in your .env file (the key must start with pt_), 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 .env file 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 tools
ownerrez_get_availabilityGet AvailabilityA
Read-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 BookingA
Read-onlyIdempotent

Fetch a single booking by id.

Inputs: id (required), include_guest, include_charges.

ownerrez_get_guestGet GuestA
Read-onlyIdempotent

Fetch a single guest by id (full contact record).

Inputs: id (required).

ownerrez_get_inquiryGet InquiryA
Read-onlyIdempotent

Fetch a single inquiry by id (full detail, including thread_ids for messaging).

Inputs: id (required).

ownerrez_get_messageGet MessageA
Read-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 OwnerA
Read-onlyIdempotent

Fetch a single owner by id.

Inputs: id (required).

ownerrez_get_owner_statementGet Owner StatementA
Read-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 PropertyA
Read-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)A
Read-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 BookingsA
Read-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 DepositsA
Read-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)A
Read-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 OwnersB
Read-onlyIdempotent

List all property owners (id, name, contact, last_owner_statement_id).

Inputs: active, include_fields.

ownerrez_list_owner_statementsList Owner Statements (official)A
Read-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 PaymentsA
Read-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 PropertiesA
Read-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 RefundsA
Read-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 MessagesA
Read-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 GuestsA
Read-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)A
DestructiveIdempotent

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

    A3.9/5.0

    Scored across 21 tools

    Disambiguation5/5

    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).

    Naming Consistency5/5

    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.

    Tool Count4/5

    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.

    Completeness3/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      F
      maintenance
      Connects 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
    • A
      license
      A
      quality
      C
      maintenance
      Connects OwnerRez property management data to MCP clients, enabling natural-language queries about bookings, check-ins, guest messaging, expenses, and webhooks.
      18
      MIT