Suburb · Age + income — bundle
suburbs_demographics_allAge + income — bundle
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| suburb_name | Yes |
suburbs_demographics_allAge + income — bundle
| 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": [
- {
- "properties": {
- "age": {
- "anyOf": [
- {
- "items": {
- "additionalProperties": true,
- "description": "One row of demographic data — age bracket or income bracket. The\nshape varies per endpoint; common keys are always present, the rest\nare open (``extra=allow``) so a renamed sub-key doesn't break\nclients.",
- "example": {
- "age_bracket": "0-4",
- "area_level": "suburb",
- "area_name": "Belmont North",
- "gender": "females",
- "proportion": 0.0272
- },
- "properties": {
- "age_bracket": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Only on /demographics/age.",
- "title": "Age Bracket"
- },
- "area_level": {
- "description": "Always 'suburb'.",
- "title": "Area Level",
- "type": "string"
- },
- "area_name": {
- "description": "Suburb (SAL) name.",
- "title": "Area Name",
- "type": "string"
- },
- "gender": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Only on /demographics/age — 'males' / 'females' / 'persons'.",
- "title": "Gender"
- },
- "income_bracket": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Only on /demographics/income.",
- "title": "Income Bracket"
- },
- "median_income": {
- "anyOf": [
- {
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "description": "Only on /demographics/income.",
- "title": "Median Income"
- },
- "proportion": {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "null"
- }
- ],
- "description": "Share of the suburb in this bracket (0–1).",
- "title": "Proportion"
- }
- },
- "required": [
- "area_name",
- "area_level"
- ],
- "title": "DemographicRow",
- "type": "object"
- },
- "type": "array"
- },
- {
- "type": "null"
- }
- ],
- "title": "Age"
- },
- "income": {
- "anyOf": [
- {
- "items": {
- "additionalProperties": true,
- "description": "One row of demographic data — age bracket or income bracket. The\nshape varies per endpoint; common keys are always present, the rest\nare open (``extra=allow``) so a renamed sub-key doesn't break\nclients.",
- "example": {
- "age_bracket": "0-4",
- "area_level": "suburb",
- "area_name": "Belmont North",
- "gender": "females",
- "proportion": 0.0272
- },
- "properties": {
- "age_bracket": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Only on /demographics/age.",
- "title": "Age Bracket"
- },
- "area_level": {
- "description": "Always 'suburb'.",
- "title": "Area Level",
- "type": "string"
- },
- "area_name": {
- "description": "Suburb (SAL) name.",
- "title": "Area Name",
- "type": "string"
- },
- "gender": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Only on /demographics/age — 'males' / 'females' / 'persons'.",
- "title": "Gender"
- },
- "income_bracket": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Only on /demographics/income.",
- "title": "Income Bracket"
- },
- "median_income": {
- "anyOf": [
- {
- "type": "integer"
- },
- {
- "type": "null"
- }
- ],
- "description": "Only on /demographics/income.",
- "title": "Median Income"
- },
- "proportion": {
- "anyOf": [
- {
- "type": "number"
- },
- {
- "type": "null"
- }
- ],
- "description": "Share of the suburb in this bracket (0–1).",
- "title": "Proportion"
- }
- },
- "required": [
- "area_name",
- "area_level"
- ],
- "title": "DemographicRow",
- "type": "object"
- },
- "type": "array"
- },
- {
- "type": "null"
- }
- ],
- "title": "Income"
- }
- },
- "title": "DemographicsAll",
- "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[DemographicsAll]",
- "type": "object",
- "x-fastmcp-top-level-schema": "ApiResponse_DemographicsAll_"
-}New value: +nullDoes the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotations (readOnlyHint, idempotentHint, destructiveHint). It does not describe what the 'bundle' entails, such as the format of the output, whether it aggregates data, or any other operational details. It neither contradicts the annotations nor supplements them.
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 extremely short, which is technically concise, but it under-specifies the tool's functionality. It reads as a label rather than a helpful definition, offering no structured information about the tool's purpose or behavior.
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?
With no output schema and a very simple input schema, the description must explain what the tool returns and how to interpret it. It fails to do so, leaving the agent to guess what 'age + income bundle' means in terms of data structure, coverage, or units. The tool is a demographics bundle and clearly requires more explanation.
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 a single parameter, suburb_name, with 0% description coverage. The description does not mention the parameter at all, leaving the agent without any guidance on the expected format, allowed values, or how the parameter influences the result.
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 'Age + income — bundle' indicates the tool covers age and income demographics but does not state a clear action (e.g., 'retrieves', 'returns') or describe the resource precisely. It is essentially the title restated and offers minimal differentiation from sibling tools like suburbs_demographics_age or suburbs_demographics_income beyond implying a combined result.
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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of scenarios where a combined bundle is preferable to calling the individual age or income tools, nor any exclusions or prerequisites.
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.