Run PropLane from your own AI agent. The same 98 tools that power the built-in assistant, exposed over the Model Context Protocol and a plain HTTP API, so you can bring whatever harness you already use.
PropLane exposes its whole capability surface as typed, permission-scoped tools. The assistant inside the product calls those tools; this page is how your agent calls the same ones, with the same per-account scoping and the same confirmation gate on anything that changes data.
https://prop-lane.space/api/mcp, stateless Streamable HTTP. No install, no local process, nothing to keep running.Today the server covers the manager account: your properties, residents, applications, leases, charges, work orders, vendors, calendar and messages. Resident and vendor endpoints are not open yet.
In the portal, go to Settings → API & MCP and copy the MCP server URL. Your client opens PropLane in a browser to sign in and approve the complete manager assistant connection. Choose Create API keywhen you need to grant only the product areas and tools an integration needs:
Read Look up the selected product area. This is right for reporting, dashboards and question-answering.Write Also proposes changes for that area and includes its read tools. Use Advanced tools to choose an exact subset. A write still cannot happen in one step, see Write actions.The key is shown once. PropLane stores only a hash of it, so it cannot be recovered or re-displayed. If you lose it, revoke it and create another. Revoking takes effect on the next request.
Any client that speaks Streamable HTTP connects directly. Claude Code, Cursor, Windsurf and VS Code all take the same server URL. Claude Code can add it with:
claude mcp add --transport http proplane https://prop-lane.space/api/mcp
On first use, the client follows the secure browser sign-in and consent flow. PropLane never asks you to paste a long-lived API key into an MCP configuration.
Building your own loop, or just checking it works? It is ordinary JSON-RPC over POST:
curl -X POST https://prop-lane.space/api/mcp \
-H "Authorization: Bearer <OAuth access token>" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'The server implements initialize, tools/list, tools/call and ping. It is stateless, so there is no session header and GET returns 405. Protocol versions 2024-11-05 through 2025-06-18 are negotiated; newer clients are answered with the latest version supported here.
An MCP connection sees the complete manager catalog after browser authorization. A REST API key sees only its selected tools. Write tools return an approval preview rather than executing. Call tools/listfor the full JSON Schema of each one; this reference has 30read and 68 write tools and is generated from the live registry.
Read (30)
Available when selected in a product area or Advanced tools.
find_recordsFuzzy-search the current landlord's residents, applications, vendors, properties, work orders, and leases by name, email, address, title, or unit, and return matching record ids with display labels.
get_application_detailsGet one of the current landlord's applications in detail: applicant name/email, stage, bucket, desired lease dates and term, room choice, derived screening status, and Checkr check status if one was run.
get_automation_settingsRead the landlord's payment-reminder automation settings: pre-due reminder days, same-day and overdue-daily reminders, late-fee notice timing, and schedule visibility, plus a human-readable cadence summary.
get_dashboard_summaryOne-call portfolio overview for the current landlord: rent-roll and delinquency totals, property counts by status, open/scheduled work orders, pending applications, unread inbox threads, and calendar events in the next 7 days.
get_listing_creation_checklistRead the step-by-step checklist for building a quality listing through chat: required fields, recommended copy, photo handling, and when to call create_listing_draft.
get_listing_media_inventoryRead room, bathroom, and shared-space ids and photo counts for a listing so you can place uploaded images in the correct slots.
get_manager_profileGet the current landlord's own account profile: name, email, subscription plan and property count vs.
get_overdue_chargesList the current landlord's overdue charges (past due and unpaid): tenants who are late on rent or other charges.
get_property_detailsGet one of the current landlord's properties in detail: title, address, zip, neighborhood, beds/baths, rent, lifecycle status, per-room name/rent/availability/move-in date, and which resident payment methods the listing accepts.
get_thread_messagesRead one of the current landlord's inbox threads in full: subject, sender, folder, date, the original message body, and any reply messages.
list_applicationsList the current landlord's rental applications with applicant name, email, property, stage, status (pending/approved/rejected), and background-screening status (pending_review/passed/flagged/not_applicable).
list_calendar_eventsList the current landlord's calendar entries: schedule records, confirmed events/tours (type planned_event), and tour requests (type tour_inquiry, with status).
list_chargesList the current landlord's household charges (rent, deposits, fees, and other charges), optionally filtered by status or resident.
list_co_managersList the co-managers linked to the current landlord's workspace — accepted account links plus legacy pro-relationship links — with name, email, link direction, and assigned property ids.
list_documentsList documents in the current landlord's Document Library (the Documents -> Library tab): display name, category (lease/insurance/tax/notice/invoice/inspection/photo/other), what the document is filed against (property, lease, resident, vendor, or work order), who it is shared with, expiry date, and signature status.
list_inbox_threadsList the current landlord's message inbox threads (subject, sender, preview, folder, unread flag), optionally filtered by folder (inbox/sent/trash), unread state, or a search string over subject/sender/preview.
list_lease_sectionsList the sections in one of the landlord's generated HTML leases, including whether each section is editable.
list_leasesList the current landlord's leases with their status (Draft, Manager Review, Resident Signature Pending, Manager Signature Pending, Fully Signed, Voided), resident, property, and lease dates.
list_promotionsList the current landlord's marketing promotions from the Promotion page (AI flyer/social campaigns) with id, title, property, status (draft/generated), flyer template, and whether each carries a generated flyer image and/or marketing text.
list_propertiesList the current landlord's own properties/listings with title, address, unit, beds/baths, rent, and lifecycle status (pending, live, review, request_change, unlisted, rejected).
list_property_lease_template_sectionsList editable sections of a property's lease template (long-term or short-term) while the manager is in the Lease modal.
list_residentsList the current landlord's active residents (approved applicants) with name, email, property, room, and monthly rent.
list_scheduled_messagesList the current landlord's scheduled outbound messages (send time, status, subject, recipient).
list_service_requestsList the current landlord's resident add-on service requests (e.g.
list_tour_inquiriesList tour requests submitted by prospective tenants for the current landlord's properties: guest name/email, requested time windows, property, and status (pending/accepted/declined).
list_vendorsList the current landlord's vendors (contractors/service providers) with name, trade, contact info, active status, and the properties they cover.
list_work_order_bidsList the vendor bids submitted on one of the landlord's work orders (from list_work_orders): vendor name, labor amount, materials, proposed time, note, and status.
list_work_ordersList the current landlord's maintenance work orders with status, priority, property/unit, resident, scheduled date, cost, assigned vendor, bidding state, and vendor-marked-done/paid automation status.
run_financial_reportRun a financial report over the current landlord's books and return its computed columns, rows, and totals.
suggest_vendors_for_work_orderSuggest a ranked shortlist of candidate vendors for one of the landlord's work orders, based on trade/category match, property coverage, and fairness (least-recently-assigned first).
Actions (68)
Available when selected. Each returns a preview and actionId; nothing changes until a signed-in manager approves it.
accept_bidAccept a vendor's submitted bid on one of the landlord's work orders: assigns that vendor at the bid's stored amount, declines every other submitted bid, withdraws outstanding offers, closes bidding, and notifies the winning and declined vendors.
accept_tour_inquiryAccept a pending tour request (id from list_tour_inquiries), putting the tour on the calendar and clearing competing requests for the same slot.
add_vendorAdd a new vendor (contractor / service provider) to the landlord's vendor directory with a name, trade, and optional contact details.
amend_leaseChange a fully signed lease's move-out (end) date — extend, renew, or shorten it.
apply_listing_photosPlace uploaded listing photos into the correct house gallery, room, bathroom, or shared-space slots on an open listing.
approve_and_pay_work_orderApprove a finished work order and pay the vendor: completes it, logs expenses, marks the vendor paid, and — for the ACH channel — transfers the labor cost to the vendor's connected Stripe bank account.
approve_manager_billApprove a pending accounts-payable bill so it can be paid.
approve_owner_distributionApprove a draft owner distribution statement.
assign_vendorAssign one of the landlord's vendors to a work order (or reassign from the current vendor).
cancel_calendar_eventCancel (delete) one of the current landlord's confirmed calendar events.
cancel_scheduled_messageCancel one of the landlord's own not-yet-sent scheduled messages so it never goes out.
cancel_scheduled_reminderCancel one upcoming automatic payment reminder for a specific charge (e.g.
complete_work_orderMark one of the landlord's work orders completed and log its labor/materials costs as expense entries for reports.
confirm_tour_inquiryConfirm a pending tour request into a booked tour at the given open slot and notify the guest.
copy_listing_photosCopy uploaded listing photos and videos from one of the landlord's properties to another (house gallery, room photos, bathroom and shared-space photos, floor plans, and house video).
create_calendar_eventCreate a calendar event (tour, inspection, meeting, …) on the current landlord's calendar with a title, start/end time, and optional property (id from list_properties), attendee, and notes.
create_chargeCreate a new pending charge (rent, deposit, fee, etc.) for one of the landlord's approved residents.
create_lease_draftStart a new lease draft for one of the landlord's own residents (also used for renewals).
create_listing_draftCreate a rich property listing DRAFT from facts gathered in chat (address, rent, beds/baths, description, amenities, and housePhotoUrls from uploaded images).
create_manager_billCreate a new accounts-payable bill (an unpaid obligation owed to a vendor).
create_manager_budgetCreate a budget for a property/fiscal-year/category (integer cents).
create_owner_distributionCreate a draft owner distribution statement for a property and period.
create_promotionCreate a marketing promotion and generate its printable flyer copy for the landlord.
create_propertyCreate a minimal property stub from basic facts only (no photos or rich marketing copy).
create_work_orderCreate a new maintenance work order in the landlord's queue (manager-initiated, starts in the open bucket, no vendor assigned).
decide_service_requestApprove or deny one of the landlord's pending add-on service requests (parking, storage, cleaning, equipment rentals — the Services -> Requests tab).
delete_chargePermanently delete one of the landlord's charges and its ledger entries.
delete_promotionPermanently delete one of the landlord's promotions, including its generated flyer and text copies.
dispose_security_depositDispose a held security deposit at move-out.
generate_promotion_flyerGenerate printable flyer copy for an existing promotion (promotionId from list_promotions or create_promotion) and mark it generated so it appears under Promotions → Image.
invite_vendorEmail a vendor from the directory an invite link to create their own Axis vendor portal account.
mark_charge_paidRecord that a resident paid one of the landlord's charges outside Axis (Zelle, Venmo, cash, or check).
offer_to_vendorsInvite one or more of the landlord's vendors to bid on a work order: creates an offer per vendor, emails each an invitation with the work order details, notifies their Axis inbox, and opens bidding.
order_background_checkOrder a paid background/screening check (Checkr or Certn) for one of the landlord's applicants.
propose_lease_section_editPropose a text-only edit to one editable section of a lease in manager review.
propose_property_lease_template_section_editPropose a text edit to one section of a property lease template (PropLane default long-term or short-term).
reconcile_bank_statement_lineReconcile a bank statement line: mark it cleared and/or match it to a ledger entry.
record_bill_paymentMark an approved accounts-payable bill as paid: creates the expense entry and posts the cash-out GL entry (DR accounts payable / CR operating cash).
record_expenseRecord a manual expense entry in the landlord's books (same bookkeeping as the Financials page).
record_incomeRecord a manual income entry in the landlord's books (rent collected outside Axis, fees, other income — same bookkeeping as the Financials page).
record_move_outRecord a resident's move-out date on their application record (bookkeeping only).
reply_to_threadReply to an existing inbox conversation: the reply is appended to the landlord's thread and delivered to the other person (resident, applicant, co-manager, or vendor) in their portal inbox and by email.
reschedule_reminderMove one upcoming automatic payment reminder for a specific charge to a new send time.
restore_scheduled_reminderTurn a cancelled automatic payment reminder back on for one charge (the inverse of cancel_scheduled_reminder).
revoke_resident_accessPermanently remove a resident's portal sign-in access.
schedule_messageSchedule a message from the landlord to one connected recipient (resident, co-manager, or vendor) to be delivered at a future date/time instead of immediately.
schedule_vendor_visitSchedule (or reschedule) the assigned vendor's service visit on one of the landlord's work orders and notify the vendor (email + Axis inbox).
send_lease_for_signatureSend a prepared lease to its resident for electronic signature: moves the lease to the resident's signing queue and notifies them in their portal inbox and by email.
send_messageSend a message from the landlord to specific recipients by email and/or to all of their current residents at once, delivered to each recipient's portal inbox and optionally by email.
send_rent_reminderSend a payment reminder (email + portal inbox record) to residents with overdue charges.
send_resident_welcomeSend the resident welcome / account-setup email (with their Axis ID and portal signup link) for an approved application.
send_work_order_reminderSend the assigned vendor a reminder about one of the landlord's work orders (email + Axis inbox), restating the work order and its visit details.
set_resident_approvalTurn a resident's portal access on or off by setting their application-approved flag.
share_property_linkEmail a prospect an apply link, tour-scheduling link, or full listing details for one of the landlord's LIVE listings.
update_application_bucketMove one of the landlord's applications between the pending, approved, and rejected buckets.
update_automation_settingsChange the landlord's default payment-reminder automation: pick a preset (basics, standard, gentle, minimal), customize pre-due days, same-day and daily overdue reminders, late-fee notice timing, and schedule visibility.
update_chargeUpdate the amount, due date, or title of one of the landlord's existing unpaid charges.
update_lease_draftUpdate the unit or notes on one of the landlord's existing lease drafts (use list_leases to find the lease id).
update_lease_packetUpdate an in-review lease packet on the Leases page: change rent, utilities, deposit, move-in fee, lease dates, term, room, stay type (standard vs short-term), unit label, or notes.
update_listing_draftUpdate an existing listing draft (status draft) with more photos, copy, or pricing from chat.
update_manager_availabilityAdd or remove the current landlord's tour-availability slots for one date and time window, either portfolio-wide or for a single property (propertyId from list_properties).
update_manager_budgetUpdate an existing budget for a property/fiscal-year/category (upsert on the same key).
update_promotionRename one of the landlord's promotions and/or change its status (draft/generated).
update_propertyUpdate one of the current landlord's properties: monthly rent, beds, baths, description, or toggle a listing between live and unlisted.
update_property_lease_configUpdate per-property lease document settings for a listing: PropLane standard lease (axis_default), custom manager terms addendum (custom_comments + customLeaseTerms), or a manager-uploaded PDF template (custom_format + leaseTemplateDocUrl).
update_threadMark one of the landlord's own inbox threads read or unread, move it to trash (archive), or restore it from trash to its previous folder.
update_vendorUpdate a vendor's trade, active status, notes, or phone in the landlord's vendor directory.
void_leasePermanently void a lease so it can no longer be signed or enforced.
Anything that changes data is a two-step. Calling an action tool does not perform it: it validates the input, builds a preview of exactly what would happen, and returns an actionId. The manager then approves it from PropLane’s AI drafts; an external credential cannot execute it.
# 1. Propose. Nothing is written.
POST /api/v1/tools/send_rent_reminder
{ "chargeIds": ["charge_id_from_get_overdue_charges"] }
202 Accepted
{
"status": "awaiting_confirmation",
"actionId": "9c1f…",
"expiresInSeconds": 900,
"preview": {
"title": "Send rent reminder",
"confirmLabel": "Send reminder",
"fields": [{ "label": "To", "value": "Sam Ortiz" }]
}
}
# 2. Nothing else can execute this with the API key.
# A signed-in manager reviews and approves the proposal in PropLane’s AI drafts.410.Approving a rental application and creating a listing are deliberately not available as tools. Both need browser-side steps that would otherwise leave a resident without their rent charges.
If you are not using MCP, create a REST API key. Its selected tools are reachable over plain HTTP; MCP OAuth tokens are deliberately refused here. Writes still stage the same manager-approved confirmation gate.
# Every tool the key can reach, with JSON Schema
GET /api/v1/tools
# Call one. The body IS the tool's input object.
POST /api/v1/tools/get_overdue_charges
{}A staged write answers 202; a completed call answers 200; a refused or invalid call answers 400 with an error string you can hand straight back to your model.
429.401 means the key is missing, unknown, revoked or expired. These are deliberately indistinguishable.403 means the key is valid but the account no longer has manager access.isError: true and a readable message, not a transport error, so your model can correct itself and retry.Found a problem? Tell us.