Suburb · Investor concentration
suburbs_market_investor_concentrationRental (investor) share per mesh block, with a suburb-wide rollup.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| suburb_name | Yes |
suburbs_market_investor_concentrationRental (investor) share per mesh block, with a suburb-wide rollup.
| Name | Required | Description | Default |
|---|---|---|---|
| suburb_name | Yes |
Changes observed during successful MCP inspections.
Output schema / (root)Previous value: -{
- "properties": {
- "available": {
- "anyOf": [
- {
- "type": "boolean"
- },
- {
- "type": "null"
- }
- ],
- "description": "`false` on no-data responses. Omitted on success — branch on `data !== null` if you want a single discriminator.",
- "title": "Available"
- },
- "data": {
- "anyOf": [
- {
- "additionalProperties": true,
- "description": "Per-mesh-block investor share + suburb-wide rollup.",
- "example": {
- "area_level": "suburb",
- "area_name": "Belmont North",
- "mbs": [
- {
- "avg_annual_growth": 0.0705,
- "mb": "11205845900",
- "pct_investment": 28.95,
- "rental_properties": 11,
- "total_properties": 38
- }
- ],
- "rental_properties": 966,
- "rental_share_pct": 27.4,
- "total_properties": 3521
- },
- "properties": {
- "area_level": {
- "description": "Always 'suburb' for these endpoints.",
- "title": "Area Level",
- "type": "string"
- },
- "area_name": {
- "description": "Suburb (SAL) name.",
- "title": "Area Name",
- "type": "string"
- },
- "mbs": {
- "description": "Per-mesh-block breakdown.",
- "items": {
- "description": "Investor (rental) concentration for one mesh block.",
- "properties": {
- "avg_annual_growth": {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "null"
- }
- ],
- "description": "Average annual price growth for the MB (decimal, 0.07 = 7%/yr).",
- "title": "Avg Annual Growth"
- },
- "mb": {
- "description": "ABS mesh-block code (MB_CODE21).",
- "title": "Mb",
- "type": "string"
- },
- "pct_investment": {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "null"
- }
- ],
- "description": "Share of dwellings that are rentals (%).",
- "title": "Pct Investment"
- },
- "rental_properties": {
- "anyOf": [
- {
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "description": "Rental dwellings in the MB (numerator).",
- "title": "Rental Properties"
- },
- "total_properties": {
- "anyOf": [
- {
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "description": "Occupied dwellings in the MB (denominator).",
- "title": "Total Properties"
- }
- },
- "required": [
- "mb"
- ],
- "title": "InvestorConcentrationMb",
- "type": "object"
- },
- "title": "Mbs",
- "type": "array"
- },
- "rental_properties": {
- "anyOf": [
- {
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "description": "Total rental dwellings across the suburb's MBs.",
- "title": "Rental Properties"
- },
- "rental_share_pct": {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "null"
- }
- ],
- "description": "Suburb rollup: rentals / total dwellings across all MBs (%).",
- "title": "Rental Share Pct"
- },
- "total_properties": {
- "anyOf": [
- {
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "description": "Total occupied dwellings across the suburb's MBs.",
- "title": "Total Properties"
- }
- },
- "required": [
- "area_name",
- "area_level",
- "mbs"
- ],
- "title": "InvestorConcentration",
- "type": "object"
- },
- {
- "type": "null"
- }
- ],
- "description": "The endpoint's payload, or `null` when Microburbs has no value."
- },
- "message": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Human-readable explanation. Omitted on success.",
- "title": "Message"
- },
- "reason": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Machine-readable slug naming the no-data condition (e.g. `no_avm_for_GANSW704074813`). Stable per endpoint. Omitted on success.",
- "title": "Reason"
- }
- },
- "title": "ApiResponse[InvestorConcentration]",
- "type": "object",
- "x-fastmcp-top-level-schema": "ApiResponse_InvestorConcentration_"
-}New value: +nullDoes the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the tool is clearly a safe read-only operation. The description adds that the output is aggregated at mesh block level with a suburb rollup, which is useful context. However, it does not disclose the specific return structure (e.g., a list of mesh blocks, a summary object) or whether the data is derived from census or rental listings, which could affect interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loads the key metric ('Rental (investor) share') and the aggregation level. There is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set (only suburb_name) and the presence of annotations indicating safety, the description is adequate for a low-complexity tool. However, it does not clarify whether the output includes a breakdown of mesh blocks (e.g., list of mesh blocks with values) or a single rollup number, which could affect how the agent presents the data. It also does not mention any potential limitations like missing data for some suburbs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 1 parameter (suburb_name) with 0% schema description coverage. The description does not explain the format or expected value of suburb_name (e.g., exact name vs. partial match, case sensitivity). Since there is only one parameter, the description should at least indicate that it identifies the suburb, but it doesn't go beyond the schema. With minimal parameters, a baseline of 3 applies, but the description does not add semantics beyond what the schema already indicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states that the tool provides the rental (investor) share per mesh block with a suburb-wide rollup. This is specific about the metric type (investor concentration) and the geographic scope (mesh block plus suburb rollup). While it doesn't name a direct sibling, the description is clear enough to distinguish it from other suburb_market_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus other similar market tools like suburbs_market_yield_pct or suburbs_market_mortgage_stress. It also does not mention any prerequisites such as the suburb_name format or whether the data is only available for certain regions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Add one secure layer between your agents and this server.