MCP catalog
Generated from the same worker.js tool manifest being built for this release (2026-07-16); the checked-in snapshot was refreshed in the same step.
Server endpoint: https://mcp.plantedmoney.ai/mcp (streamable HTTP JSON-RPC, public beta, 30 calls/min/IP). Connection guide: Connect via MCP.
search_deals
Section titled “search_deals”[DEPRECATED — use search_investment_inventory] Search point-supported live listings and top-scoring census tracts by strategy (‘flip’|‘brrrr’|‘hold’|‘house_hack’). Range-only, area-context, stale, and suppressed listings are excluded from property rankings. Remaining listings are ranked by that strategy’s inventory-percentile score (0-100) after hard economic gates. Tract opportunity is location context only, never the property score. Omit min_score to use the live top-quartile cutoff; pass a number to override.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
metro |
string | no | "chicago" |
|
strategy |
flip | brrrr | hold | house_hack |
no | "brrrr" |
|
min_score |
number | no | min per-strategy percentile score; omit for the live top-quartile cutoff | |
max_price |
number | no | ||
limit |
number | no | 10 |
|
since_hours |
number | no | only listings first seen in the last N hours |
Raw inputSchema
{ "type": "object", "properties": { "metro": { "type": "string", "default": "chicago" }, "strategy": { "type": "string", "enum": [ "flip", "brrrr", "hold", "house_hack" ], "default": "brrrr" }, "min_score": { "type": "number", "description": "min per-strategy percentile score; omit for the live top-quartile cutoff" }, "max_price": { "type": "number" }, "limit": { "type": "number", "default": 10 }, "since_hours": { "type": "number", "description": "only listings first seen in the last N hours" } }}get_tract_report
Section titled “get_tract_report”Full signal report for one census tract (11-digit GEOID): scores, all factor percentiles, tax/reassessment, S8 arbitrage, commute, risks.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
geoid |
string | yes |
Raw inputSchema
{ "type": "object", "properties": { "geoid": { "type": "string" } }, "required": [ "geoid" ]}underwrite
Section titled “underwrite”[DEPRECATED — use deep_underwrite_asset] Underwrite an address or lat/lon using an explicit positive price and whole-number unit count (1-4), unless a matching listing supplies them. The valuation artifact always returns its evidence, range, method, and provenance. Exact suggested offer, profit, NOI, DSCR, cash-on-cash, loan limit, and four strategy scores return only when calibrated evidence supports a point. When valuation is range-only, area context, stale, or suppressed, all point economics and strategy_scores are null with unscored_reason. Income is a cross-check only and never sets value. All accepted pro-forma parameters are echoed.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
address |
string | no | ||
lat |
number | no | ||
lon |
number | no | ||
price |
number | no | ||
rehab |
number | no | ||
rent |
number | no | ||
units |
integer | no | REQUIRED unless a matching listing supplies it; whole number 1-4; unknown -> units_required | |
prop_type |
sfh | mf2_4 | condo |
no | Optional explicit residential property type; condo is accepted but valuation-suppressed until calibrated. | |
beds |
integer | no | ||
sqft |
integer | no | ||
year_built |
integer | no | ||
rate |
number | no | override the conventional rate (%) | |
down_pct |
number | no | down-payment fraction (e.g. 0.05) | |
hold_months |
integer | no | ||
rent_override |
number | no | ||
financing_type |
conventional_investor | dscr_loan | hard_money | fha_oo | conventional_oo |
no | ||
mgmt_self |
boolean | no | ||
hoa |
number | no | ||
owner_occupied |
boolean | no | ||
scope |
cosmetic | moderate | gut | structural |
no | ||
strategy |
flip | brrrr | hold | house_hack |
no | "brrrr" |
|
metro |
chicago |
no | ||
weights |
object | no |
Raw inputSchema
{ "type": "object", "additionalProperties": false, "properties": { "address": { "type": "string", "minLength": 1 }, "lat": { "type": "number", "minimum": -90, "maximum": 90 }, "lon": { "type": "number", "minimum": -180, "maximum": 180 }, "price": { "type": "number", "exclusiveMinimum": 0 }, "rehab": { "type": "number", "minimum": 0 }, "rent": { "type": "number", "minimum": 0 }, "units": { "type": "integer", "minimum": 1, "maximum": 4, "description": "REQUIRED unless a matching listing supplies it; whole number 1-4; unknown -> units_required" }, "prop_type": { "type": "string", "enum": [ "sfh", "mf2_4", "condo" ], "description": "Optional explicit residential property type; condo is accepted but valuation-suppressed until calibrated." }, "beds": { "type": "integer", "minimum": 0 }, "sqft": { "type": "integer", "minimum": 1 }, "year_built": { "type": "integer", "minimum": 1800, "maximum": 2027 }, "rate": { "type": "number", "exclusiveMinimum": 0, "maximum": 100, "description": "override the conventional rate (%)" }, "down_pct": { "type": "number", "minimum": 0, "maximum": 1, "description": "down-payment fraction (e.g. 0.05)" }, "hold_months": { "type": "integer", "minimum": 0 }, "rent_override": { "type": "number", "minimum": 0 }, "financing_type": { "type": "string", "enum": [ "conventional_investor", "dscr_loan", "hard_money", "fha_oo", "conventional_oo" ] }, "mgmt_self": { "type": "boolean" }, "hoa": { "type": "number", "minimum": 0 }, "owner_occupied": { "type": "boolean" }, "scope": { "type": "string", "enum": [ "cosmetic", "moderate", "gut", "structural" ] }, "strategy": { "type": "string", "enum": [ "flip", "brrrr", "hold", "house_hack" ], "default": "brrrr" }, "metro": { "type": "string", "enum": [ "chicago" ] }, "weights": { "type": "object", "additionalProperties": false, "properties": { "flip": { "type": "object", "additionalProperties": false, "properties": { "margin": { "type": "number", "minimum": 0, "maximum": 1 }, "velocity": { "type": "number", "minimum": 0, "maximum": 1 }, "trend": { "type": "number", "minimum": 0, "maximum": 1 } } }, "brrrr": { "type": "object", "additionalProperties": false, "properties": { "ratio": { "type": "number", "minimum": 0, "maximum": 1 }, "dscr": { "type": "number", "minimum": 0, "maximum": 1 } } }, "hold": { "type": "object", "additionalProperties": false, "properties": { "coc": { "type": "number", "minimum": 0, "maximum": 1 }, "risk": { "type": "number", "minimum": 0, "maximum": 1 } } } } } }}market_pulse
Section titled “market_pulse”County-wide pulse: top tracts per strategy (tract opportunity scores, rank-transformed to county percentiles), best Section 8 (SAFMR) arbitrage ZIPs, reassessment-shock leaders, data vintages. Tract opportunity is a location screen — property-level economics are applied per-listing in search_deals, not here.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
metro |
string | no | "chicago" |
Raw inputSchema
{ "type": "object", "properties": { "metro": { "type": "string", "default": "chicago" } }}[DEPRECATED — use get_comps] Automated comp evidence for an address or lat/lon. Returns the calibrated interval, method, confidence, accepted comps, and rejected comps with reasons. Range-only output is not an appraisal or an actionable point estimate. prop_type: ‘mf2_4’ (2-4 flat) | ‘sfh’.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
address |
string | no | ||
lat |
number | no | ||
lon |
number | no | ||
prop_type |
mf2_4 | sfh |
no | "mf2_4" |
Raw inputSchema
{ "type": "object", "properties": { "address": { "type": "string" }, "lat": { "type": "number" }, "lon": { "type": "number" }, "prop_type": { "type": "string", "enum": [ "mf2_4", "sfh" ], "default": "mf2_4" } }}risk_report
Section titled “risk_report”Separate Risk Score (0-100) for an address or lat/lon, with each risk flag’s stated reason. Covers tax shock after purchase, tax trap, basement/FEMA flood evidence, distress proximity, closing friction, legal-unit mismatch, appraisal ceiling, vintage stock, and rent-model uncertainty. Crime and protected/proxy demographic fields are excluded from public property risk and recommendation outputs. Risk is shown separately from opportunity — high-opportunity/high-risk is a valid state.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
address |
string | no | ||
lat |
number | no | ||
lon |
number | no | ||
listing_units |
number | no | ||
year_built |
number | no |
Raw inputSchema
{ "type": "object", "properties": { "address": { "type": "string" }, "lat": { "type": "number" }, "lon": { "type": "number" }, "listing_units": { "type": "number" }, "year_built": { "type": "number" } }}search_investment_inventory
Section titled “search_investment_inventory”v2 inventory search (replaces search_deals): point-supported, current-model listings by per-strategy inventory percentile. Range-only, area-context, stale, and suppressed rows are excluded. Supports bbox/geography filters, cursor pagination, and a fields selector.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
metro |
string | no | "chicago" |
|
strategy |
flip | brrrr | hold | house_hack |
no | "brrrr" |
|
bbox |
string | no | west,south,east,north | |
geography |
string | no | zip code or neighborhood name | |
min_percentile |
number | no | ||
max_price |
number | no | ||
min_confidence |
number | no | ||
fields |
string | no | comma-separated field allowlist | |
cursor |
string | no | ||
limit |
number | no | 25 |
Raw inputSchema
{ "type": "object", "properties": { "metro": { "type": "string", "default": "chicago" }, "strategy": { "type": "string", "enum": [ "flip", "brrrr", "hold", "house_hack" ], "default": "brrrr" }, "bbox": { "type": "string", "description": "west,south,east,north" }, "geography": { "type": "string", "description": "zip code or neighborhood name" }, "min_percentile": { "type": "number", "minimum": 0, "maximum": 100 }, "max_price": { "type": "number", "minimum": 0 }, "min_confidence": { "type": "number", "minimum": 0, "maximum": 100 }, "fields": { "type": "string", "description": "comma-separated field allowlist" }, "cursor": { "type": "string" }, "limit": { "type": "number", "default": 25, "maximum": 100 } }}deep_underwrite_asset
Section titled “deep_underwrite_asset”v2 underwrite (replaces underwrite): returns the valuation evidence plus a pro-forma only when calibrated evidence supports a point. For range-only, area-context, stale, or suppressed valuations, cashflow_projection, DSCR, offers, returns, and strategy_scores are null. Accepted custom assumptions are echoed.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
property_id |
string | no | ||
address |
string | no | ||
lat |
number | no | ||
lon |
number | no | ||
units |
integer | no | ||
strategy |
flip | brrrr | hold | house_hack |
no | "brrrr" |
|
metro |
chicago |
no | ||
horizon_years |
integer | no | 5 |
|
custom_assumptions |
object | no |
Raw inputSchema
{ "type": "object", "additionalProperties": false, "properties": { "property_id": { "type": "string", "minLength": 1 }, "address": { "type": "string", "minLength": 1 }, "lat": { "type": "number", "minimum": -90, "maximum": 90 }, "lon": { "type": "number", "minimum": -180, "maximum": 180 }, "units": { "type": "integer", "minimum": 1, "maximum": 4 }, "strategy": { "type": "string", "enum": [ "flip", "brrrr", "hold", "house_hack" ], "default": "brrrr" }, "metro": { "type": "string", "enum": [ "chicago" ] }, "horizon_years": { "type": "integer", "default": 5, "minimum": 1, "maximum": 30 }, "custom_assumptions": { "type": "object", "additionalProperties": false, "properties": { "purchase_price": { "type": "number", "exclusiveMinimum": 0 }, "rehab_budget": { "type": "number", "minimum": 0 }, "rate": { "type": "number", "exclusiveMinimum": 0, "maximum": 100 }, "down_pct": { "type": "number", "minimum": 0, "maximum": 1 }, "rent_override": { "type": "number", "minimum": 0 }, "financing_type": { "type": "string", "enum": [ "conventional_investor", "dscr_loan", "hard_money", "fha_oo", "conventional_oo" ] }, "hold_months": { "type": "integer", "minimum": 0 } } } }}get_comps
Section titled “get_comps”v2 comps (replaces comps): automated valuation evidence with accepted/rejected comps, adjustments, interval, method, and confidence. It is not an appraisal; range-only evidence cannot drive point economics.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
address |
string | no | ||
lat |
number | no | ||
lon |
number | no | ||
prop_type |
mf2_4 | sfh |
no | "mf2_4" |
Raw inputSchema
{ "type": "object", "properties": { "address": { "type": "string" }, "lat": { "type": "number" }, "lon": { "type": "number" }, "prop_type": { "type": "string", "enum": [ "mf2_4", "sfh" ], "default": "mf2_4" } }}save_favorite_property
Section titled “save_favorite_property”WRITE (scope: write-state). Save a property to the caller’s favorites; syncs to the open web map via the /api/events stream.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
property_id |
string | no | ||
address |
string | no | ||
payload |
object | no |
Raw inputSchema
{ "type": "object", "properties": { "property_id": { "type": "string" }, "address": { "type": "string" }, "payload": { "type": "object" } }}update_underwriting_preset
Section titled “update_underwriting_preset”WRITE (scope: write-state). Create or update a named underwriting-assumptions preset.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
id |
string | no | ||
name |
string | no | ||
assumptions |
object | no |
Raw inputSchema
{ "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "assumptions": { "type": "object" } }}create_strategy_profile
Section titled “create_strategy_profile”WRITE (scope: write-state). Create an alert subscription: criteria (strategy, min_percentile, max_price, bbox, min_confidence) + channels (telegram|webhook{url,secret}). The daily matcher pushes deduped, signed alerts with score + model-version provenance.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
id |
string | no | ||
name |
string | no | ||
strategy |
flip | brrrr | hold | house_hack |
no | ||
min_percentile |
number | no | ||
max_price |
number | no | ||
bbox |
array | no | ||
min_confidence |
number | no | ||
criteria |
object | no | ||
channels |
object | no |
Raw inputSchema
{ "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "strategy": { "type": "string", "enum": [ "flip", "brrrr", "hold", "house_hack" ] }, "min_percentile": { "type": "number" }, "max_price": { "type": "number" }, "bbox": { "type": "array" }, "min_confidence": { "type": "number" }, "criteria": { "type": "object" }, "channels": { "type": "object" } }}add_note
Section titled “add_note”WRITE (scope: write-state). Attach a freeform note to a property.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
property_id |
string | no | ||
entity_id |
string | no | ||
body |
string | yes |
Raw inputSchema
{ "type": "object", "properties": { "property_id": { "type": "string" }, "entity_id": { "type": "string" }, "body": { "type": "string", "maxLength": 4000 } }, "required": [ "body" ]}update_map_filters
Section titled “update_map_filters”UI-CONTROLLER. Push a filter update to the caller’s open map (appended to the /api/events sync stream; the app applies it).
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
strategy |
string | no | ||
min_percentile |
number | no | ||
max_price |
number | no | ||
min_confidence |
number | no | ||
statuses |
array | no |
Raw inputSchema
{ "type": "object", "properties": { "strategy": { "type": "string" }, "min_percentile": { "type": "number" }, "max_price": { "type": "number" }, "min_confidence": { "type": "number" }, "statuses": { "type": "array" } }}fly_to_location
Section titled “fly_to_location”UI-CONTROLLER. Fly the caller’s open map to a location.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
lat |
number | no | ||
lon |
number | no | ||
zoom |
number | no | ||
address |
string | no |
Raw inputSchema
{ "type": "object", "properties": { "lat": { "type": "number" }, "lon": { "type": "number" }, "zoom": { "type": "number" }, "address": { "type": "string" } }}highlight_properties
Section titled “highlight_properties”UI-CONTROLLER. Highlight a set of property ids on the caller’s open map.
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
ids |
array | no |
Raw inputSchema
{ "type": "object", "properties": { "ids": { "type": "array" } }}