AskRentAI
AskRentAI is a hosted MCP server for Rent Manager.
Что умеет
- List Reports: List all available Rent Manager reports with their IDs and names. Reads from the per-tenant catalog snapshot when present (instant). Pass ``live=True`` to bypass the catalog and hit the
- Refresh Reports Catalog: Snapshot live /Reports + /ReportWriterReports into the per-tenant catalog file. Returns a diff (added / removed / renamed) vs the prior snapshot. Run after RM admins add or re
- List Properties: List all properties with IDs, short names, and full names.
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
AskRentAI is a hosted MCP server for Rent Manager. It gives any MCP client read-only access to live portfolio data — NOI, rent roll, delinquency, vacancy, lease expirations, work orders, vendor spend, financial reports, and stored documents — across apartments, single-family, commercial, self-storage, and mobile home / RV communities. Read-only by design: it cannot write, edit, or delete anything in Rent Manager. $10/user/month, seven-day free trial, no credit card.
Как подключить
Как подключить AskRentAI к Claude
Адрес сервера, который нужно вставить в настройках Claude:
https://askrentai--brian-99fm.run.tools
- Откройте Claude (сайт claude.ai или приложение для компьютера).
- Перейдите в Настройки → Коннекторы (в английском интерфейсе: Settings → Connectors).
- Нажмите Добавить пользовательский коннектор (Add custom connector).
- Вставьте адрес сервера, скопированный ниже, в поле URL удалённого MCP-сервера и нажмите Добавить.
- В чате нажмите + → Коннекторы и включите новый коннектор.
Пользовательские коннекторы доступны на тарифах Free, Pro, Max, Team и Enterprise. На Free можно добавить только один. В Team и Enterprise коннектор сначала добавляет владелец организации в Настройки организации → Коннекторы.
Авторизация
После нажатия Добавить откроется окно входа в сервис. Войдите под своим аккаунтом и подтвердите доступ. Пароль Claude не видит.
Как подключить AskRentAI к ChatGPT
Адрес сервера, который нужно вставить в настройках ChatGPT:
https://askrentai--brian-99fm.run.tools
- Откройте ChatGPT в браузере (chatgpt.com). Нужен тариф Plus, Pro, Business, Enterprise или Edu.
- Один раз включите режим разработчика: Настройки → Приложения → Дополнительные настройки → Режим разработчика (Settings → Apps → Advanced settings → Developer mode).
- Откройте Настройки → Коннекторы и нажмите Создать (Create).
- Заполните форму: Название (любое), Описание (одна фраза, что делает сервис), URL MCP-сервера (скопируйте ниже).
- В поле Аутентификация выберите OAuth, если сервис требует вход, иначе Нет. Нажмите Создать.
- В новом чате откройте + → Приложения/Коннекторы и включите коннектор.
Название раздела у OpenAI менялось (Connectors → Apps/Plugins). Если пункт называется иначе, ищите «режим разработчика» в настройках. В рабочих пространствах Business/Enterprise администратор должен разрешить пользовательские коннекторы.
Авторизация
При первом использовании ChatGPT откроет окно входа в сервис. Войдите и подтвердите доступ.
Как подключить AskRentAI к Cursor
Адрес сервера, который нужно вставить в настройках Cursor:
https://askrentai--brian-99fm.run.tools
Быстрый способ: нажмите кнопку Открыть в Cursor ниже, Cursor сам предложит добавить сервер.
Вручную:
- В Cursor откройте Settings → Cursor Settings → MCP и нажмите Add new global MCP server.
- Вставьте JSON, скопированный ниже, в открывшийся файл
~/.cursor/mcp.json(для одного проекта:.cursor/mcp.jsonв корне проекта). - Сохраните файл. Сервер появится в списке MCP; при необходимости пройдите авторизацию по кнопке рядом с ним.
Авторизация
Если сервис требует вход, рядом с сервером в списке MCP появится кнопка авторизации.
Список инструментов сервера (60)
Технические названия из tools/list. Нужны только разработчикам.
| list_reports | List all available Rent Manager reports with their IDs and names. Reads from the per-tenant catalog snapshot when present (instant). Pass ``live=True`` to bypass the catalog and hit the live RM API — use that after RM admins add new ReportWriter reports. |
| refresh_reports_catalog | Snapshot live /Reports + /ReportWriterReports into the per-tenant catalog file. Returns a diff (added / removed / renamed) vs the prior snapshot. Run after RM admins add or rename reports. |
| list_properties | List all properties with IDs, short names, and full names. |
| list_portfolios | Show named portfolios + auto-detected dash-prefix portfolios. |
| list_rm_connections | List the Rent Manager databases YOU can connect to, and show which one is currently active. Use this when the user has more than one Rent Manager database (e.g. a consultant or owner managing several companies) and asks "which databases can I see?" or before switching. Returns each connection's label, base URL, and RM username, plus the organization default. Manage the list at /auth/account/connection. |
| switch_rm_connection | Switch which Rent Manager database your questions run against. Pass the connection's label (e.g. "Texas") as shown by ``list_rm_connections``, or "org default" to go back to the organization connection. The change persists for your account and takes effect on your next question. Note: it affects every AI client you've connected, not just this chat. |
| list_property_groups | List the Property Groups saved inside Rent Manager (Properties → Property Groups), with each group's member properties. These are RM-native, user-created groups — distinct from the dash-prefix portfolios returned by ``list_portfolios``. Pass ``embeds=""`` to skip resolving member properties for a faster, names-only listing. |
| list_gl_accounts | List the Rent Manager chart of accounts (GL accounts), grouped by type. Use this to answer "what GL accounts / chart of accounts do we have", to find an account's number/ID, or before drilling into financials. Filter by ``account_type`` (e.g. "income", "expense") or ``name_filter`` (matches name or account number); ``active_only`` hides inactive accounts. |
| list_owners | List property owners and the ownership map — who owns what, and what %. Use for "who are the owners / investors", "who owns <park> and what percentage", "which parks does <owner> have a stake in", or any ownership-breakdown question — essential for third-party / fee-managed portfolios where each property is held by multiple investor trusts/IRAs. Built on RM's OwnerList report (113) + the /Owners roster. Filter by ``owner_filter`` / ``property_filter`` (case-insensitive substrings); ``group_by`` is "owner" (default) or "property". Note: owner DISTRIBUTION/payment and owner-STATEMENT reports require an RM user privilege the API account may not hold (owner-banking) — those are not exposed here. This tool covers the ownership roster and percentages. |
| list_meter_types | List meter types defined in Rent Manager. |
| analyze_noi | Compute Net Operating Income (NOI) for a single period — Operating Income minus Operating Expenses, non-operating items excluded. Use this ONLY when the user specifically asks about NOI as a single aggregate number for a period. For any general "P&L", "Profit and Loss", or "T12" request, prefer ``analyze_pl_trend`` — that wrapper runs the 12-month recap report (ProfitLossRecapMonth) which is the default P&L view for this product. Args: portfolio: Named portfolio or 3-letter prefix. property_ids: Comma-separated IDs. Use this OR portfolio. start_date: MM/DD/YYYY. Defaults to Jan 1 of current year. end_date: MM/DD/YYYY. Defaults to Dec 31 of current year. |
| analyze_rent_roll | Occupancy + scheduled rent summary for a portfolio. Uses SummaryRentRoll (report 69) which includes all units, occupied and vacant, so space counts and occupancy rates are accurate. |
| analyze_rent_composition | Scheduled-rent composition by unit type — lot rent vs park-owned-home rent. Breaks the rent roll (report 69) down by unit type so you can see how much scheduled income is lot/space rent on tenant-owned homes (e.g. "MH") vs park/dealer-owned-home rent ("DOH") vs RV vs apartments, and splits base rent from misc/utility/fee charges, each as a share of total. Use for "how much of our rent is lot rent vs home rent", "revenue mix by unit type", "base rent vs misc charges". The defining mobile-home-park revenue question. |
| analyze_loss_to_lease | Loss to lease — gap between market rent and in-place rent on occupied units. Runs SummaryRentRoll (report 69) over a full month and sums RM's Loss to Lease for occupied units by unit type, with market rent, in-place rent, the loss, and loss-as-%-of-market. The #1 multifamily revenue-capture metric: how far below market in-place rents sit and the renewal upside. Use for "what's our loss to lease", "how far below market are we", "which unit types have the biggest market gap". Requires market rent set on units. Always uses the full calendar month of ``as_of_date`` (defaults to the current month). |
| analyze_home_sales | Park-owned-home (POH/DOH) sales pipeline — for sale, priced, aging. Runs RM's Available Inventory Report (ReportWriter 106), the park/dealer- owned-home inventory, and summarizes the sales pipeline: count by status (For Sale / Coming Soon / Order Pending / Rented / not listed), total and average list price of for-sale homes, days on market, and a per-park breakdown. Use for "how many park-owned homes are for sale", "total list value of our for-sale homes", "which homes are aging on the market". The MHP home-sale revenue view the rent-roll tools miss. Scope to a portfolio/ park for speed (unscoped is fanned out in batches). |
| analyze_financials | Detailed single-period financial breakdown with per-account line items (when ``show_detail=True``). Pulls the standard ProfitLoss report (report 43). Use this ONLY when the user explicitly wants line-item detail for a single period, an audit-style breakdown, or specifically references "the standard P&L statement" / "the regular P&L". For any general "P&L", "Profit and Loss", or "T12" request, prefer ``analyze_pl_trend`` — that wrapper runs the 12-month recap report (ProfitLossRecapMonth) which is the default P&L view for this product. |
| analyze_aged_receivables | Aged receivables (30 / 31-60 / 61-90 / 91+) for a portfolio. Pulls AgedReceivables (78), aggregates per property, ranks delinquent tenants. Answers: 'who's most past-due', 'how much is 90+ days old', 'what's our total AR for the GSP portfolio'. |
| analyze_delinquency | Delinquency by tenant + charge type (rent / utilities / late / other). Pulls Delinquency (85). Complement to analyze_aged_receivables — same data sliced by *charge category* instead of aging bucket. Answers: 'who's behind on rent vs utilities', 'how much in late fees', 'top 10 delinquent tenants broken down by charge type'. Output includes a footer note: Rent Manager's API for this report excludes tenants who have a balance but no current unit (orphaned late fees from former tenants, etc.). The RM UI version includes those. Customers cross-checking the two may see a small delta — typically 1-2 tenants / $50-200. Pass this along when relevant. |
| make_ready_summary | Units currently in turnover (Make Ready Summary, report 719). Per-property count + average/oldest age, stage breakdown, top-N oldest stuck units. Answers: 'how many turnovers in flight', 'what's the oldest stuck unit', 'which turnovers already have a next move-in'. |
| analyze_evictions | Open evictions for a portfolio (OpenEvictions, report 971). Per-property count, total balance at risk, average/oldest days in stage, reason histogram, and top-N oldest open cases. Answers: 'how many open evictions', 'total balance at risk', 'which evictions have been stuck the longest', 'breakdown of eviction reasons'. |
| analyze_vacancy | Vacancy snapshot per property (Vacancy, report 74). Per-property vacant count, average and oldest days-vacant, total foregone monthly rent. Plus a 0-30/31-60/61-90/91+ aging histogram, unit-type breakdown, and top-N longest-vacant units. Point-in-time snapshot, not a time-series. |
| analyze_availability | Available (vacant) inventory + exposure by property and unit type. Runs RM's ReportWriter 'Available Inventory Summary' (RW 107): per-property vacancy rate, count of available units by unit type (MH Lot, RV, Apt, DOH, ...), and average days vacant per type. Use for "what's our available inventory / exposure", "vacancy rate by property", "which parks have the most vacant lots". Scope to a portfolio/property set for a fast answer (unscoped is ~2 min). For a unit-level vacant list use analyze_vacancy. |
| analyze_occupancy_trend | 12-month physical occupancy trend — monthly occupied % across the year. Runs RM's ReportWriter '12-Month Vacancy/Occupancy Report' (RW 111), a per-unit Occupied/Vacant matrix, rolled up to a monthly occupancy rate for the portfolio and per property. Use for "occupancy trend this year", "is occupancy improving month over month", "which parks drag occupancy down". Scope to a portfolio/property set — this report times out across every property at once (unscoped is fanned out in batches, slower). Months after the current one are forward-looking (scheduled move-ins/outs). |
| trial_balance | Trial balance — every GL account's debit/credit activity and ending balance. Runs RM's TrialBalanceActivity (report 617) with a built-in balance check (total debits = total credits; ending balances sum to ~0 for a full scope). Use for "show the trial balance", "ending balance per GL account", "are the books in balance / do debits equal credits". Scopes via PropOwnerIDs (portfolio or property_ids). Defaults to YTD; override with start_date/ end_date (MM/DD/YYYY). Filter with account_filter; nonzero_only hides no-activity zero-balance accounts. Pairs with list_gl_accounts. For transaction-level GL detail, download report 51 (GeneralLedger) via run_report. |
| analyze_cash_flow | Indirect-method cash flow per property (CashFlow, report 54). Net Income, total adjustments, net change in cash. Adjustments bucketed by Account Type (Other Current Asset/Liability, Fixed Asset, Long Term Liability, Equity). show_detail=True breaks out per-property adjustment lines. |
| analyze_pl_trend | DEFAULT P&L / Profit and Loss / T12 tool — runs the 12-month recap report (ProfitLossRecapMonth, report 45) and returns COMPUTED TEXT, not a file. Use this for ANY general "show me / give me" P&L request: "show me a P&L", "give me the profit and loss", "T12 for SCE", "trailing 12-month financials", "how has NOI moved", "which month did expenses spike". This is the correct default — NOT ``analyze_financials`` (single-period line-item detail) and NOT ``analyze_noi`` (single aggregate NOI number). DOWNLOAD REQUESTS — do NOT use this wrapper. When the user asks for "the P&L in PDF / Excel / XLSX" or says "download the P&L", call ``run_report(report_id=45, format='pdf'|'xlsx', ...)`` instead. Rent Manager produces the formatted file natively; we return a signed URL. Never call this wrapper and then synthesize a PDF from the numbers — that produces an unauthorized, differently-formatted document. Output: a single COMBINED Income / Expenses / NOI series with one column per month over the requested range (all requested parks rolled into one statement, the way Rent Manager shows it natively), plus the list of parks included. Issues one RM call regardless of park count. To see a single park, scope with ``portfolio`` or ``property_ids``. Args: portfolio: Portfolio name or 3-letter prefix. property_ids: Comma-separated property IDs. start_date: MM/DD/YYYY. Defaults to Jan 1 of current year. end_date: MM/DD/YYYY. Defaults to today. |
| analyze_pl_yoy | Year-over-year P&L comparison (ProfitLossComparePreviousYear, 144). Period 1 = requested range; Period 2 = same range prior year. Shows income / expense / NOI / net-income deltas + percentages per property, with combined totals and top-mover lists for income gains, income losses, and expense increases. Answers: 'how's NOI tracking vs last year', 'what's driving income growth', 'which expenses are up the most YoY'. |
| analyze_pl_multi_year | Multi-year P&L by account (ProfitLossRecapYear, report 201). Year-matrix per account across the requested date range, ranked by absolute total. Defaults to a 3-year window if no dates given. Answers: 'how has revenue moved across 3 years', 'which accounts have grown the most', 'multi-year trajectory'. For year-over-year deltas use analyze_pl_yoy; for monthly trajectory use analyze_pl_trend. |
| analyze_prospect_pipeline | Leasing activity by agent + inquiry source (ProspectBoxScore, 21). Portfolio-wide (this report doesn't filter by property). Surfaces top agents by total prospects, source-mix percentages (Web vs Call vs Walk-In vs ...), and an application-rate proxy. Answers: 'which agents handled the most leads', 'what sources are driving pipeline', 'what's our application rate'. |
| analyze_renewals | Lease renewal + below-market rent gap analysis (LeaseExpiration, 76). Per-property active/m2m/renewed/on-notice counts, expirations in next 30/60/90 days, and the total market-rent-vs-current-rent gap. Plus top-N below-market rents (renewal pricing opportunities) and top-N upcoming expirations. Distinct from lease_expirations (which is API-based and lighter) — this one adds the market-rent column, which is the actual signal needed for pricing decisions. |
| analyze_service_issues | Work-order / service-issue backlog summary (FilteredIssueList, 112). Portfolio-wide (this report has no Property column on RM's side). Summarizes total / open / closed counts, age distribution of open issues, breakdown by status / category / priority, and lists the oldest open issues. Supports category / priority / status filters. Answers: 'how many open work orders', 'how stale is the backlog', 'what's open by category', 'oldest unresolved issues'. |
| get_resident_concerns | Open resident complaints WITH the resident's name, email, and phone. Unlike analyze_service_issues (a portfolio summary from report 112, which carries no resident or contact data), this pulls the "Resident Concern" issues straight from the /ServiceManagerIssues endpoint with the linked tenant, unit, property, and the full complaint text — everything needed to draft a reply to each resident. Newest first. Optional filters: property (name or short code), status, priority, and an opened-date window (start_date / end_date, M/D/YYYY or ISO). Answers: 'show me open resident complaints', 'who complained at <park> and how do I reach them', 'pull the latest resident concerns to respond to'. |
| get_work_orders | Service Manager work orders / maintenance issues across EVERY category. The general maintenance board (not just resident complaints — use get_resident_concerns for those). Pulls /ServiceManagerIssues directly with category, status, priority, open/close dates, property/unit, and detail. Set open_only=False to include closed orders and an average open→close turnaround stat. Filter by property, category, status, priority, or an opened-date window. Answers: 'what work orders are open', 'maintenance turnaround at <property>', 'show closed work orders this month'. |
| analyze_inspections | Inspection compliance + action items (InspectionActivity, 273). Per-property inspection counts, open vs closed, action / severe / review-needed item totals, ranked by severity. Surfaces the worst inspections by severe-item count and an inspector leaderboard. Answers: 'which properties have open inspections', 'which inspections flagged the most severe items', 'how many inspections happened this quarter'. |
| analyze_aged_payables | Accounts-payable aging snapshot (AgedPayables, 79). AP by aging bucket (Current / 1-30 / 31-60 / 61+), top GL accounts owed, and a focused list of GL accounts with 61+ day balances. Mirror image of analyze_aged_receivables. Scope to a single park or portfolio with ``portfolio`` / ``property_ids`` — the report honors PropertyIDs even though its CSV has no Property column for client-side filtering. SLOW when UNSCOPED — a portfolio-wide first call takes 1-3 minutes, so BEFORE calling without a scope send the user a one-liner: 'This report takes 1-3 minutes to generate, I'll have results shortly.' Scoping to a park or portfolio returns in seconds. Follow-up queries within 5 minutes are cached and return instantly. Args: portfolio: Portfolio name or 3-letter prefix. property_ids: Comma-separated property IDs. Use this OR portfolio. as_of_date: MM/DD/YYYY for the as-of snapshot. Defaults to today. top_n: Number of top GL accounts to list (default 10, max 50). |
| analyze_vendor_spend | Vendor spend / AP outflows (PayablesByAccount, 183). Per-property and per-vendor spend over a window. Defaults to the trailing 30 days. Surfaces top vendors by gross spend, per-property totals, and largest individual bills. VOIDs are excluded by default (set include_voids=True to net them in). SLOW for long date ranges (90+ days returns ~5800 rows / 30 days and can take 1-3 minutes). BEFORE calling with a window longer than the default 30 days, or against a large portfolio, send the user a one-liner: 'This report can take 1-3 minutes for long windows, I'll have results shortly.' Follow-up queries within 5 minutes are cached. |
| list_vendors | List the AP vendor master — who our vendors are, category, 1099 status. Sourced from /Vendors. Complements analyze_vendor_spend (payment totals) and vendor_compliance (insurance/COI expiry) with the roster: vendor names, categories, whether each has a Tax ID on file (1099-ready), active status. Use for "list our vendors", "which vendors do we have", "vendors in the plumbing category", "which vendors are missing a W-9/Tax ID". Filter by name_filter / category_filter; active_only hides inactive vendors. |
| vendor_compliance | Vendors with expired or soon-to-expire insurance / workers-comp coverage. Runs VendorExpirationListing (report 194) and flags every vendor whose general-liability insurance or workers-comp policy is already expired or expires within ``days_ahead`` days (default 60). Use for "which vendors have expired insurance", "vendor COI compliance", "whose workers comp is lapsing", before clearing a vendor to work on site. ``include_missing`` also lists vendors with no policy date on file. |
| get_lease_violations | Lease / community-rule violations — open compliance items by property. Runs TenantViolationsListing (report 637): each violation's tenant, unit, date, code (Yard Appearance, Vehicle Violation, ...), status (Open/Closed), stage (Warning / Fine / Stage N), and description. Use for "what violations are open at <park>", "compliance issues", "who has an open violation". ``open_only`` (default True) hides closed items; scope via portfolio/ property_ids. |
| analyze_autopay_adoption | Autopay / ePay enrollment — how many residents are on automatic payments. Runs TenantAutoPayConfiguration (report 553): count enrolled, active this month, and breakdowns by payment type (Total vs Current Balance Due vs fixed amount), frequency, and payment-day spread. A collections-efficiency lever. Use for "how many residents are on autopay", "autopay adoption", "ePay enrollment breakdown". Portfolio-wide only (RM doesn't expose a property column on this report). |
| analyze_move_ins_outs | Move-in / move-out turnover summary (MoveInMoveOut, 77). Per-property move-in / move-out / net counts over a window (default trailing 30 days). Surfaces top movers and the most- recent move-outs list. Analytics complement to the existing move_ins_outs listing tool — adds aggregates and rankings. |
| analyze_security_deposits | Security deposit liability snapshot (SecurityDeposit, 83). Total deposits currently held (active liability), lifecycle totals (charged / received / refunded), per-property breakdown ranked by held balance, and top largest individual deposits. Useful for 'how much in deposits are we sitting on' and per-property liability questions. |
| analyze_payment_trends | Month-over-month payment trends (PaymentComparison, 32). Surfaces total collections per month (with % change), per-property rollup of last vs prior month, and a tenant-level list of payment drops bigger than drop_threshold_pct (default 50%). Defaults to a trailing ~90 day window so 3 month columns surface. Answers: 'which tenants stopped paying', 'how did collections trend last quarter', 'which properties are losing collections'. |
| analyze_lost_prospects | Lost-lead funnel analysis (LostProspectBreakdown, 687). Breakdown of where in the funnel prospects are getting lost (Inquired / Application / Denied / etc.), agents with the most lost leads, properties with the worst conversion, and a recent lost-prospect timeline. Defaults to the trailing ~90 days. Complements analyze_prospect_pipeline (which counts everything coming in); this counts everything that drops out. |
| analyze_user_activity | Rent Manager user login activity and concurrent-user counts (UserLog, 3). Use for questions like: - "How many users were logged in at one time yesterday?" - "What's our peak concurrent user count this week / last week?" - "How many people logged into Rent Manager on Monday?" - "Show me failed login attempts" Returns total sessions, distinct users, failed login attempts, the PEAK number of users logged in simultaneously (with timestamp), and either a per-day peak table (multi-day range) or an hourly concurrency profile (single-day range). Org-wide by nature — there is no property scope. Caveat (include when relaying results for a range that includes today): RM records a session only at LOGOUT, so users currently logged in are not in the log yet — today's recent hours UNDERSTATE true concurrency. Completed (past) days are accurate. Args: start_date: MM/DD/YYYY. Defaults to 6 days ago (a 7-day window). end_date: MM/DD/YYYY. Defaults to today. |
| analyze_balance_sheet | Balance sheet (Assets / Liabilities / Equity) as of a date. Downloads BalanceSheet (report 38) CSVs in parallel per property. With no portfolio/property_ids, pulls the company-wide balance sheet. |
| inspect_property_api | Dump raw API fields for a property — debugging aid. |
| get_property_locations | Table of park addresses with state/city filters and a state summary. |
| get_property_udfs | List all UDF values for a property, including file attachments. |
| list_property_units | List all units (lots/spaces) in a property with UnitID and Name. |
| get_unit_udfs | Home-info UDFs for one unit (Year, Manufacturer, Serial/VIN, Payoff, ...). |
| get_property_home_inventory | Build a one-row-per-unit home-inventory table across all home UDFs. |
| run_report | Download any Rent Manager report. Format selection rules — IMPORTANT: • **PDF is the default for downloads.** If the user says "download the report", "send me the report", "give me a copy of X", "I want X for my records", or any similar phrasing without naming a format → leave ``format`` unset (defaults to pdf). • **For ANY Excel-related request, use ``xls`` (NOT xlsx).** This includes: "Excel file", "spreadsheet", "in Excel", ".xls", "Microsoft Excel", "give me an XLS", "Excel version", and any similar phrasing. Rent Manager renders xls with much nicer formatting (column widths, headers, group totals) than xlsx, so xls is the preferred Excel format for this product. • **Only use ``xlsx`` when the user explicitly types "xlsx"** — e.g. "download the P&L as xlsx" or "give me the .xlsx file". Any other Excel phrasing → xls. • ``csv`` (or json / txt / html / xml) only when the user wants to *see* the data in chat — those small text formats are inlined into the response so the model can read them directly. Phrasings like "show me", "display", "what's in X", "summarize X" → csv. Available formats: ``pdf`` (default), ``xls``, ``xlsx``, ``excel`` (alias → xls), ``spreadsheet`` (alias → xls), ``csv``, ``json``, ``txt``, ``html``, ``xml``. Output behavior by format: • **csv / json / txt / html / xml** — small files (≤1 MiB) are ALSO inlined in the response so the model can read the contents directly. • **pdf / xlsx / xls** — saved to the per-tenant file store and returned as a signed ``/files/<id>?sig=...`` URL the user can click directly in chat. For analytical questions prefer the ``analyze_*`` wrappers — they're faster and return computed answers directly. For any P&L / Profit and Loss / T12 request use ``analyze_pl_trend`` (12-month recap report, the default P&L view). Custom ReportWriter reports: set ``report_writer=True`` to download a custom report from RM's ReportWriter (the IDs s |
| get_bills | List vendor bills (AP invoices) for one or more properties. |
| get_meter_reads | Individual sub-meter readings per billing cycle from Report 104. |
| get_meter_rate_card | Pull and pretty-print one meter type's rate card from Report 514. |
| dump_all_rate_cards | Build a multi-sheet XLSX of every meter type's rate card → FileStore. |
| download_property_attachment | Pull a file attached to a property UDF (W9, COI, license, etc.) into FileStore. |
| download_attachment | Download and READ a Rent Manager attachment by FileID. Use this for lease documents and other files attached to a record. PDFs are rendered page-by-page so their contents can actually be read, not just saved — which is the only way to read a scanned signed lease. Get the FileID from get_tenant_notes (leases are usually filed on tenant History/Notes), get_check_attachments / get_credit_card_attachments / get_journal_attachments (invoice scans filed on a payment or GL entry), get_tenant_udfs, or get_property_udfs. When the FileID did not come from a listing earlier in this conversation, also name its parent record with tenant_id, check_id, bill_id, credit_card_transaction_id, or journal_id. For a long document, read it in chunks with pages="1-40", then pages="41-80", and so on — the result says which pages came back and what to request next. |
| get_unit_images | Photos filed on one unit in Rent Manager. Covers the Home > Property > Unit > IMAGES path from the RM desktop client — the unit photos site managers upload from the RM mobile app — and also photos filed on the unit's UDFs, which is where some operators keep them. Name the property by shortname (or property_id) and the unit by its label (or unit_id): get_unit_images(shortname="CAPEFEAR", unit_name="Lot 24"). Photos come back for the assistant to look at AND are saved to the file store, so they can be assembled into a PDF or attached to an email. For a non-photo file on a unit UDF (a title, an inspection), use download_unit_attachment. |