Skip to content

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.

[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"
}
}
}

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"
]
}

[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
}
}
}
}
}
}
}

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"
}
}
}

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"
}
}
}

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
}
}
}

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
}
}
}
}
}

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"
}
}
}

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"
}
}
}

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"
}
}
}

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"
}
}
}

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"
]
}

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"
}
}
}

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"
}
}
}

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"
}
}
}