payrent-mcp

PayRent MCP lets AI assistants help landlords manage properties, renters, billing, and settlements with security and convenience.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only

What it can do

  • Get Dashboard Summary: Load dashboard metrics for this landlord (occupancy, units, financial summaries). Use when the user asks about portfolio stats or the snapshot is insufficient.
  • Get Service Plan Details: Load this landlord’s PayRent **service plan**: display name, fee fields (subscription, ACH/card rates and per-tx fees, express, onboarding, per-unit pricing, cap), property l
  • List Properties: List rentable units (child properties). Each row: id is the unit id (use it for update_property, delete_property, and invites); parent_property_id is the building id (use it for creat

What data it sees

Do you need an account

No: the server works without sign-in

PayRent MCP lets AI assistants help landlords manage properties, renters, billing, and settlements with security and convenience.

How to connect

How to connect payrent-mcp to Claude

The server address to paste into Claude settings:

https://mcp-payrent--payrent.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect payrent-mcp to ChatGPT

The server address to paste into ChatGPT settings:

https://mcp-payrent--payrent.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect payrent-mcp to Cursor

The server address to paste into Cursor settings:

https://mcp-payrent--payrent.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (23)

Raw names from tools/list. Only developers need these.

get_dashboard_summaryLoad dashboard metrics for this landlord (occupancy, units, financial summaries). Use when the user asks about portfolio stats or the snapshot is insufficient.
get_service_plan_detailsLoad this landlord’s PayRent **service plan**: display name, fee fields (subscription, ACH/card rates and per-tx fees, express, onboarding, per-unit pricing, cap), property limit, trial days, and **features.enabled** / **features.disabled** lists (boolean flags from the plan template, e.g. express funding, renter-pays-fees). Use when they ask about their plan, pricing vs another tier, or what their subscription includes. No parameters.
list_propertiesList rentable units (child properties). Each row: id is the unit id (use it for update_property, delete_property, and invites); parent_property_id is the building id (use it for create_property_unit, update_parent_property, delete_parent_property). Optional status filter (OCCUPIED or VACANT) and address search substring.
list_rentersList renters for this landlord with linked billing account fields (balance, amounts, status)—use this first for “who owes” or portfolio balance questions before calling list_billing_items per tenant. **Defaults to current renters only** (billing_account_state ACTIVE). Pass billing_account_state PENDING for future/invited renters or NOT_ACTIVE for previous/ended leases—only when the landlord asks for those. Optional filters: status (PASTDUE, CURRENT, INACTIVE), search, limit, page.
list_landlord_paymentsACH/card payment transactions for this landlord. Each row includes **payment_gateway**, **status**, amounts, and **meta** when present (stored processor state/failures for Finix/Thryve—check here before calling lookup_processor_payment). Omit renter_id to return **all renters' payments** (use for year-end or portfolio-wide). Optional start_date and end_date (prefer **YYYY-MM-DD**): a row matches if **either** payment **timestamp** or row **created_at** falls in that inclusive calendar range (aligned with dashboard-style periods). **limit** (default 250, max 500) and **page** (1-based) paginate large histories—check response **meta.has_more** and increment **page** instead of many small calls. Pass renter_id only when you need one tenant. Not the same as ledger rent charges—use list_billing_items for charges/credits.
list_renter_transactionsACH/card payment transactions for one renter by **customer_id** (same as user_id / payments.renter_id). No landlord scoping: for signed-in landlords, the renter must belong to you; for admin API integrations, supply the renter id directly. Optional start_date/end_date (YYYY-MM-DD): matches **timestamp** or **created_at** in range, same as list_landlord_payments. **limit** (default 250, max 500) and **page** for long histories—use meta.has_more. Same row shape as list_landlord_payments. Use list_landlord_payments for portfolio-wide or per-landlord views.
list_billing_itemsLedger charge/credit line items for one billing account (billing_item_id, amounts, memos). Pass billing_account_id from list_renters, OR renter_id (+ optional property_id). Optional start_date/end_date (YYYY-MM-DD) filter by order_date. **limit** (default 250, max 500) and **page** (1-based) paginate long ledgers—check **meta.has_more** for more pages.
search_helpSearch **support.payrent.com** (Tavily) for landlord-facing how-to content. Pass a concise **query**. Returns an optional synthesized **answer** plus **articles** (title, snippet, URL from that site only). Cite URLs. Not for account-specific data—use list_* tools.
lookup_processor_paymentLive Finix or Thryve GET for one ACH/card payment—use **only after** list_landlord_payments: call this if payment **meta**/status there is **not** enough to answer, or the landlord needs **current** processor state (settlement, returns, what processor shows now). Same payment_id; Finix/Thryve only; must belong to this landlord. Returns allowlisted processor_snapshot (state, failure fields, etc.). Optional processor must match payment_gateway.
list_settlementsList payout settlements for this landlord: gross/net amounts, status, settlement_date, and property group — the same data behind the app's Settlements tab. Optional filters: property_group_id, property_group_name (substring), date_from/date_to (YYYY-MM-DD, matches created_at), status (comma-separated: pending, completed, failed, error), sort_by, sort_order, page, size (default 10, max 100). Use get_settlement for one settlement's breakdown or get_settlement_transfers for transaction-level detail.
get_settlementFull detail for one settlement: gross/net settlement amounts, total charges, total fees, and the payments/charges/fees line items that make it up. settlement_id is the `id` field from list_settlements (not the processor's own settlement id). Use get_settlement_transfers instead for transaction-by-transaction processor detail.
get_settlement_transfersTransaction/transfer-level detail for one settlement — the same underlying data the PayRent web app uses to build its settlement CSV export (that export is client-side only; there is no separate download endpoint). For Finix settlements this makes a live, paginated call to the Finix API; for Thryve settlements it is derived from local records. Only Finix and Thryve settlements are supported. settlement_id is the `id` field from list_settlements. Optional limit and after_cursor (Finix pagination only).
invite_renter_to_propertyInvite a renter to a vacant unit. New invite: property_id, first/last name, lease_start_date, lease_end_date, and email OR cell_phone. Resend an existing invitation: resend_invite true + renter_id. Withdraw a pending invitation: delete_pending_invite true + renter_id + user_confirmed true. Only applies to PENDING renters — get renter_id from list_renters with billing_account_state PENDING.
create_parent_propertyCreate a parent property (building shell). If property_group_id is omitted the landlord's default portfolio group is used; any override must belong to this landlord. After it succeeds, offer to add a unit under it with create_property_unit.
create_property_unitAdd a rentable unit (child property) under an existing parent property. Address, city, state, and zip are inherited from the parent when omitted. Location data is reused from a sibling unit or the parent when available, otherwise geocoded; passing google_place_id, lat, and long together skips that lookup.
update_propertyUpdate one rentable unit. property_id is the unit id from list_properties. For building-level address changes use update_parent_property instead. Supply at least one of: scalar fields, payment_settings, or disassociate_renter_user_ids. Confirm the exact change with the landlord first, then call with user_confirmed: true.
delete_propertyDelete one rentable unit. Does not touch the parent building or sibling units — use delete_parent_property to remove an entire building. Confirm with the landlord first, then call with user_confirmed: true.
update_parent_propertyUpdate a parent property (building). Address changes sync down to its child units. parent_property_id comes from list_properties.parent_property_id on any unit in that building — not list_properties.id. Confirm with the landlord first, then call with user_confirmed: true.
delete_parent_propertyDelete a parent property and all of its units. Fails if any unit still has an active renter billing account. Use delete_property to remove a single unit instead. Confirm with the landlord first, then call with user_confirmed: true.
create_billing_itemPost a billing transaction to a renter ledger. transaction_type must be one of: Security Deposit, Fee, Credit, Payment, Rent Charge, Refund, Utility, Discount, Late Fee, Parking, Move In, Move Out. Requires billing_account_id and the renter user id.
reset_renter_balanceReset a renter billing account balance to $0 the way the PayRent app does: posts a Credit when the balance is positive or a Fee when it is negative, memo "Reset Account", amount equal to the absolute balance. Requires property_id (unit id) with an ACTIVE or PENDING billing account. Returns ok/skipped if the balance is already zero.
delete_billing_itemDelete a charge or credit line item the landlord created. Payment transactions cannot be deleted. Call list_billing_items first to get billing_item_id. Confirm with the landlord first, then call with user_confirmed: true.
send_email_to_renterSend an email to a linked renter. Show the landlord the full subject and body and get explicit approval before calling — then call once with user_confirmed: true. renter_id must match a list_renters id. Subject and html_body are required; HTML is sanitized server-side and wrapped in standard PayRent email chrome. Content must be professional and lease-related; threats, harassment, housing discrimination, sexual content, and severe profanity are rejected server-side.