RealtyPad MCP — agent manual¶
Operating index for RealtyPad MCP agents. Load one playbook at a time, follow its checklist, then return here when the next step needs a different workflow.
How to search and load docs¶
- Discover —
search_docs(search_type=keyword) orlist_docs(section="agents"). Optional:get_doc_outline,get_docs_info. - Load —
get_agent_manual(workflow=…)orread_doc("agents/…").
Omit workflow / pass overview / manual / all for this index only (agents/manual.md) — not every procedure inlined. Pass a workflow key for that single playbook (aliases: investors → buyers; repairs / repair-estimate → cost-estimate; monthly-costs / operating-expenses → opex).
Terms: status, scores, CapEx/OpEx, scenarios, buyer-fit — glossary (read_doc("agents/glossary.md")).
Rule of thumb: search → open the matching workflow → follow that checklist. Do not improvise past the playbook.
Resources — how to find them¶
- Your MCP session already exposes tools with descriptions — use those for which function to call.
- For when / why / gotchas, search docs first:
search_docs→get_agent_manual(workflow=…)orread_doc("agents/…"). - Doc map (kinds only):
- Workflow playbooks → Workflow index below
- Portal connector recipes →
data-sources, thenagents/data-sources/<portal>.md - Terms → glossary
- Quick Analyze planner →
agents/automation-planner.md(personas / target loop) - If a needed connector or tool is missing from the session, stop and tell the user — do not use unrestricted Actors.
How to work¶
Narrate before you act. In plain language, say what you are about to do and why (≈1–3 sentences), then call tools. After results, briefly say what changed and what is next. Not silent tool spam; not essays.
Trust but verify. Stored deal fields and prior automation output are starting points, not ground truth. On refresh or revisit, re-check live listing facts — especially ask/list price, listing status, and other money fields. Failure to avoid: the portal shows a price reduction / “price cut” and you leave the old ask_price in place. On detail re-pull or re-ingest: compare portal price → stored ask_price → patch when different and note the change.
Never invent numbers. Prefer null, skip, or a documented estimate over fiction. Do not pull from ToS-hostile sites without explicit user approval.
Mission¶
Find and underwrite listings that fit this workspace’s buyer book, then persist the evidence so research compounds.
You are working for the humans who run RealtyPad — typically matching inventory to named buyers, not hunting a single personal portfolio. A deal is only “pursue” (ranked) when economics clear and at least one buyer fits. Empty book → watch (research done; waiting on buyers). Clear economics but no fit → passed. Prefer evidence over vibes. Document assumptions. Never invent numbers.
Aggressiveness (defaults by income_strategy; chat override aggressiveness: aggressive|moderate|strict):
| Strategy | Mode | Clears economic bar when |
|---|---|---|
ltr / str |
moderate | Prefer hold projections over month-0 CF bar when available; fallback CF ≳ ~$100/mo ≈ Economics ~55–60 |
fix_flip / wholesale |
aggressive | Clear asymmetric profit/spread only (flip ≳ ~$40–50k / Economics ~80; wholesale ≳ ~$25–40k / Economics ~70) |
Session override strict (“be conservative”): LTR/STR fallback CF ≳ ~$200/mo (≈ Economics ~70) or a clearly stronger hold; flip ≳ $50k; wholesale ≳ $40k.
Buyer-fit (goal): economics alone is not enough. After the economic bar → select pursue theses → match_deal_buyers → match ranked / none fit passed / empty book watch. Prefer advance_deal(dry_run=true). Full tree and distress override: get_agent_manual(workflow=underwrite) + glossary.
Status tree: hard gap → blocked; WIP/gaps → researching; below bar → passed; economics clear → match buyers → empty book watch | fits ranked | no fit passed.
Expenses: Fix-up costs (Acquisition CapEx) → cash_in via get_agent_manual(workflow=cost-estimate); Monthly costs (Recurring OpEx) → monthly_opex_total via get_agent_manual(workflow=opex). Never bump maintenance_pct as a CapEx/OpEx proxy.
UI copy: When editing the web app, write for realtors — plain words, no schema field names in labels/helpers/tips.
Pipeline: ingest (detail page, not search card) → research (+ trends if stale) → triage → scenarios → underwrite.
Deal load: get_deal defaults to view=core. Use list_* or view=overview / view=full for nests.
Quick Analyze / Auto import: enqueue via web UI or MCP create_automation_run → poll get_automation_run (do not block one call). Goal=import — research only (no status/advance_deal). Existing deal: the same tool with deal_id + goal=research|underwrite (or kind for a single tab refresh). Planner + persona map (Critic/Brief target): read_doc("agents/automation-planner.md").
Workflow index¶
| When | get_agent_manual(workflow=…) |
read_doc path |
|---|---|---|
| Allowlisted listing connectors (catalog + portal gotchas) | data-sources |
agents/workflows/data-sources.md → agents/data-sources/<portal>.md |
Sweeps, add_manual_lead, detail page (write-up, full gallery, lat/lng, facts) |
ingest |
agents/workflows/ingest.md |
| Tax/HOA/rent/ADR/ARV, photos gap-fill, handoffs, comps | research |
agents/workflows/research.md |
| Qualitative demand signals (mall, employer, infra) → Drivers | growth-drivers |
agents/workflows/growth-drivers.md |
| Queue batch, Blocking/Soft gaps, shortlist, cluster pass | triage |
agents/workflows/triage.md |
Scenario runs (select/apply decisions); dry-run Preview only via cashflow_scenarios |
scenarios |
agents/workflows/scenarios.md |
Verdict, status, UW comment (+ hold projections); prefer advance_deal(dry_run=true) |
underwrite |
agents/workflows/underwrite.md |
| Market snapshots / catalog refresh / projections | trends |
agents/workflows/trends.md — ensure_geo_markets then refresh_deal_trends (scan / gap_fill) |
Buyer book, share links, buyer chat (say “investor” only when buyer_type=investor) |
buyers (investors alias) |
agents/workflows/buyers.md |
| Auction / REO distress, assign-to-flipper offer stack | distress |
agents/workflows/distress.md |
| Land / tear-down / densification residual | redevelopment (redevelop / land aliases) |
agents/workflows/redevelopment.md |
| CapEx / Fix-up costs | cost-estimate (repairs alias) |
agents/workflows/cost-estimate.md |
| OpEx / Monthly costs | opex (monthly-costs / operating-expenses aliases) |
agents/workflows/opex.md |
| Manual index (session start) | omit / overview |
agents/manual.md |
Quick reference¶
| Need | Fact |
|---|---|
| Enums / narrative layers / score names | glossary |
| Dedupe | Street + unit + ZIP5 (properties.address_key); listing URL is fallback when ZIP missing. Matches return deduped: true |
| Photos | Full gallery from the detail page on ingest; gap-fill via the ingest / research playbooks |
| Financing default (null profile, at score time) | LTR/STR → traditional_good; flip/wholesale/redevelop → cash_offer |
Auth / tenancy¶
- Production MCP:
https://app.realtypad.ai/mcp - Stage MCP:
https://stage.realtypad.ai/mcp - Reconnect OAuth if you see workspace /
tenant_id_fkeyerrors. - All tools are tenant-scoped after Bearer OAuth.
- Never invent ADR/ARV/rent — skip with
missing_adr/missing_arv/ etc.
Common tool errors¶
| Error | Fix |
|---|---|
Invalid build_type |
resale, new_build, or omit |
Workspace / tenant_id_fkey |
Reconnect MCP at the correct host above |
Financing profile not found |
Wrong uuid or another tenant’s profile |
Default financing profile missing |
Workspace seed; API may auto-clone defaults on retry |
On failure many tools return {"error": "..."} — read the message before retrying.