{"openapi":"3.1.0","info":{"title":"Stash MCP","version":"0.1.0"},"servers":[{"url":"https://mcp-api.stashproperty.net"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/mcp/tools/suggest_entity":{"post":{"summary":"Resolve free text to a property, suburb, or region ID","description":"Primary entry point for discovery. Returns candidate IDs for downstream tools. Use type=\"auto\" to fan out.","security":[{"bearerAuth":["mcp:data:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":2,"maxLength":200},"type":{"type":"string","enum":["property","suburb","region","auto"],"default":"auto"},"limit":{"type":"integer","minimum":1,"maximum":15,"default":10},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["query"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{}}},"402":{"description":"Subscription required or quota exceeded"},"429":{"description":"Rate limited"}}}},"/mcp/tools/get_property_profile":{"post":{"summary":"Property record at Basic / Extended / Detailed tier","description":"Returns a single property. One call = one property (no bulk). Use suggest_entity first to get the propertyId. The response includes a top-level `sources` array and per-node `stashUrl` fields — treat those as the authoritative source links to cite.","security":[{"bearerAuth":["mcp:data:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"propertyId":{"type":"string","format":"uuid"},"tier":{"type":"string","enum":["Basic","Extended","Detailed"],"default":"Basic"},"include":{"type":"object","properties":{"marketStatus":{"type":"boolean"},"salesHistory":{"type":"boolean"},"listingHistory":{"type":"boolean"},"propertyBoundary":{"type":"boolean"},"zones":{"type":"boolean"},"valuations":{"type":"boolean"},"nearby":{"type":"boolean"},"planningInfo":{"type":"boolean"},"hazards":{"type":"boolean"}},"additionalProperties":false,"default":{}}},"required":["propertyId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{}}},"402":{"description":"Subscription required or quota exceeded"},"429":{"description":"Rate limited"}}}},"/mcp/tools/get_property_avm":{"post":{"summary":"Automated valuation estimate","description":"Returns an estimated value with confidence (VeryLow → VeryHigh) and a value range. Stash AVM (beta). Response includes a top-level `sources` array and `stashUrl` for the property page — cite those when asked for the source.","security":[{"bearerAuth":["mcp:data:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"propertyId":{"type":"string","format":"uuid"}},"required":["propertyId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{}}},"402":{"description":"Subscription required or quota exceeded"},"429":{"description":"Rate limited"}}}},"/mcp/tools/get_market_activity":{"post":{"summary":"Sold / for-sale / for-rent listings","description":"Returns recent market events for a suburb slug, region id, or lat/lon+radius. Max 50 rows per call. Slugs are lowercase, eg \"lindfield-nsw-2070\". Optional filters: propertyType, price (minPrice/maxPrice), bedrooms (minBed for \"3+\", maxBed for \"up to 3\", exactBed for \"exactly 3\"), bathrooms (minBath/maxBath/exactBath). Prefer exactBed/exactBath when the user names a specific count rather than a range. Response includes a top-level `sources` array and per-row `stashUrl` — cite those when a user asks for the source of a row.","security":[{"bearerAuth":["mcp:data:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"where":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Suburb slug, eg \"lindfield-nsw-2070\""}},"required":["slug"],"additionalProperties":false},{"type":"object","properties":{"regionType":{"type":"string","enum":["State","Postcode","LocalityPid","LgaPid"]},"id":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["regionType","id"],"additionalProperties":false},{"type":"object","properties":{"regionType":{"type":"string","enum":["State","Postcode","LocalityPid","LgaPid"]},"id":{"type":"string"}},"required":["regionType","id"],"additionalProperties":false},{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"radius":{"type":"number","maximum":5000,"default":1000}},"required":["lat","lon"],"additionalProperties":false}]},"category":{"type":"string","enum":["sold","for_sale","for_rent"],"default":"sold"},"propertyType":{"type":"array","items":{"type":"string","enum":["House","Unit","Townhouse","BlockOfUnits","Land"]}},"limit":{"type":"integer","minimum":1,"maximum":50,"default":25},"days":{"type":"integer","minimum":1,"maximum":3650,"description":"Filter to last N days (sales only)."},"minBed":{"type":"integer","minimum":0,"maximum":20,"description":"Minimum bedrooms (matches this many OR MORE). Use for \"3+ beds\". For an EXACT count (\"exactly 3 beds\", \"3 bedroom\") use exactBed instead."},"maxBed":{"type":"integer","minimum":0,"maximum":20,"description":"Maximum bedrooms (matches this many OR FEWER). Use for \"up to 3 beds\"."},"exactBed":{"type":"integer","minimum":0,"maximum":20,"description":"Exact bedroom count — returns ONLY properties with this many beds. Use when the user wants exactly N bedrooms. Overrides minBed/maxBed if also set."},"minBath":{"type":"integer","minimum":0,"maximum":20,"description":"Minimum bathrooms (this many OR MORE). For an exact count use exactBath."},"maxBath":{"type":"integer","minimum":0,"maximum":20,"description":"Maximum bathrooms (this many OR FEWER)."},"exactBath":{"type":"integer","minimum":0,"maximum":20,"description":"Exact bathroom count — returns ONLY properties with this many baths. Overrides minBath/maxBath if also set."},"minPrice":{"type":"integer","minimum":0},"maxPrice":{"type":"integer","minimum":0},"dataTier":{"type":"string","enum":["Basic","Extended","Detailed"],"default":"Basic"}},"required":["where"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{}}},"402":{"description":"Subscription required or quota exceeded"},"429":{"description":"Rate limited"}}}},"/mcp/tools/get_suburb_context":{"post":{"summary":"Suburb profile, statistics, demographics, timeseries","description":"Full suburb context in one call. Set aspects to reduce payload size. Set includeHotspots to compare against peers. Response includes a top-level `sources` array and `stashUrl` for the suburb page — cite those when users ask for the source.","security":[{"bearerAuth":["mcp:data:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","description":"Suburb slug, eg \"coorparoo-qld-4151\""},"aspects":{"type":"object","properties":{"statistics":{"type":"boolean","default":true},"demographics":{"type":"boolean","default":true},"neighbourhoodProfile":{"type":"boolean","default":true},"textSummary":{"type":"boolean","default":true},"boundary":{"type":"boolean","default":false},"timeseries":{"type":"boolean","default":false}},"additionalProperties":false,"default":{}},"includeHotspots":{"type":"boolean","default":false}},"required":["slug"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{}}},"402":{"description":"Subscription required or quota exceeded"},"429":{"description":"Rate limited"}}}},"/mcp/tools/get_planning_and_risks":{"post":{"summary":"Planning info, risk overlays, hazards for a property","description":"Returns planning zone, risk overlays, hazards. Set include_nearby_das to surface nearby development applications. Response includes a top-level `sources` array and `stashUrl` for the property page — cite those when asked for the source.","security":[{"bearerAuth":["mcp:data:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"propertyId":{"type":"string","format":"uuid"},"include_nearby_das":{"type":"boolean","default":false},"nearby_radius_m":{"type":"integer","maximum":5000,"default":2000},"nearby_days":{"type":"integer","maximum":1825,"default":730}},"required":["propertyId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{}}},"402":{"description":"Subscription required or quota exceeded"},"429":{"description":"Rate limited"}}}},"/mcp/tools/get_hotspots":{"post":{"summary":"Search and compare suburb hotspots","description":"Returns suburb hotspot metrics matching criteria. Filters and sorts the suburbs. Good for finding high-performing suburbs, comparing growth rates, yield, clearance rates, etc.","security":[{"bearerAuth":["mcp:data:read"]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"propertyType":{"type":"string","enum":["House","Unit","Townhouse","BlockOfUnits","Land"],"default":"House"},"where":{"anyOf":[{"type":"object","properties":{"slug":{"type":"string","description":"Suburb slug, eg \"lindfield-nsw-2070\""}},"required":["slug"],"additionalProperties":false},{"type":"object","properties":{"regionType":{"type":"string","enum":["State","Postcode","LocalityPid","LgaPid"]},"id":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["regionType","id"],"additionalProperties":false},{"type":"object","properties":{"regionType":{"type":"string","enum":["State","Postcode","LocalityPid","LgaPid"]},"id":{"type":"string"}},"required":["regionType","id"],"additionalProperties":false},{"type":"object","properties":{"lat":{"type":"number"},"lon":{"type":"number"},"radius":{"type":"number","maximum":5000,"default":1000}},"required":["lat","lon"],"additionalProperties":false}]},"filters":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string","enum":["AggregateMetric","Attribute","DateMetric","PropertyMetric"],"description":"Type of filter. For suburb-level statistics/metrics (price, growth, yield, vacancy, etc.), use \"AggregateMetric\"."},"field":{"type":"string","enum":["SalePrice","Price","MedianGrowth","Yield","VacancyRate","RentalPrice","Boomscore","SaleCount","DaysOnMarket","SocialHousingRatio","RenterRatio","OwnershipRatio","MarketAbsorptionRate","SchoolScore","AffordabilityIndex","SuburbPopulation","BuildingApprovalsRatio"],"description":"Metric/attribute field to filter by."},"comparisonType":{"type":"string","enum":["Equals","NotEquals","GreaterThan","GreaterThanOrEqualTo","LessThan","LessThanOrEqualTo","In","NotIn","Like"],"description":"Comparison operator."},"value":{"description":"The filter value."}},"required":["@type","field","comparisonType"],"additionalProperties":false},"description":"Optional criteria filters (e.g. SalePrice <= 700000)."},"sortBy":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string","enum":["AggregateMetric","Attribute","DateMetric","PropertyMetric"],"description":"Type of sort. For suburb-level metrics, use \"AggregateMetric\"."},"field":{"type":"string","enum":["SalePrice","Price","MedianGrowth","Yield","VacancyRate","RentalPrice","Boomscore","SaleCount","DaysOnMarket","SocialHousingRatio","RenterRatio","OwnershipRatio","MarketAbsorptionRate","SchoolScore","AffordabilityIndex","SuburbPopulation","BuildingApprovalsRatio"],"description":"Metric/attribute field to sort by."},"direction":{"type":"string","enum":["Ascending","Descending"],"default":"Descending"}},"required":["@type","field"],"additionalProperties":false},"description":"Optional sort criteria (e.g. sort by MedianGrowth Descending)."},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{}}},"402":{"description":"Subscription required or quota exceeded"},"429":{"description":"Rate limited"}}}}}}