Skip to main content
Glama

AstroWay Astrology API (full catalogue)

Generate Child Astrology Report (PDF or HTML)

astroway_reports_child

Parenting-oriented natal report. Highlights Moon (emotional core), Mercury (learning style), Venus (connection style), Mars (energy/temperament). Includes full natal data and a disclaimer noting interpretive nature.

[Group: Reports] [Endpoint: POST /v1/reports/child] [Required: chart] [Cost: 5,000 credits (Tier 7)] ⚠️ Premium — ~50% of free monthly budget. Confirm with user before invoking.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "chart": "<chart>"
    },
    "name": "astroway_reports_child"
  }
}

Input Schema

NameRequiredDescriptionDefault
chartYesBirth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single house-system letter, P by default; a name such as "Placidus" is refused, and the case matters because I and i are two different Sunshine systems.
fieldsNoCompact mode: comma-separated dotted paths to keep, relative to `data`, e.g. "planets.name,planets.longitude,houses.cusp". Omit for the whole response.
formatNo`pdf` (default) stores a PDF and answers with its `url`. `html` returns one self-contained `text/html` document, `markdown` returns `text/markdown` with the same sections and tables; neither is stored. Same price in every format.
languageNo
precisionNoCompact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabelNo

Output Schema

NameRequiredDescriptionDefault
urlNo
expires_atNo
page_countNo
byte_lengthNo
duration_msNo
storage_keyNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / format
      Added value: +{
      +  "description": "`pdf` (default) stores a PDF and answers with its `url`. `html` returns one self-contained `text/html` document, `markdown` returns `text/markdown` with the same sections and tables; neither is stored. Same price in every format.",
      +  "enum": [
      +    "pdf",
      +    "html",
      +    "markdown"
      +  ],
      +  "type": "string"
      +}
  2. Changed14 schema fields changed
    • changedInput schema / properties / chart / allOf
      Previous value: -[
      -  {
      -    "additionalProperties": {
      -      "anyOf": [
      -        {},
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "description": "Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single house-system letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
      -    "properties": {
      -      "ayanamsa": {
      -        "description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.",
      -        "enum": [
      -          "fagan-bradley",
      -          "lahiri",
      -          "de-luce",
      -          "raman",
      -          "krishnamurti",
      -          "kp",
      -          "yukteshwar",
      -          "jn-bhasin",
      -          "true-citra",
      -          "djwhal-khul"
      -        ],
      -        "type": "string"
      -      },
      -      "ayanamsaId": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "city": {
      -        "default": "",
      -        "type": "string"
      -      },
      -      "cosmogram": {
      -        "type": "boolean"
      -      },
      -      "date": {
      -        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -        "type": "string"
      -      },
      -      "houseSystem": {
      -        "default": "P",
      -        "enum": [
      -          "P",
      -          "K",
      -          "R",
      -          "C",
      -          "E",
      -          "W",
      -          "B",
      -          "M",
      -          "O",
      -          "A",
      -          "T",
      -          "V",
      -          "D",
      -          "F",
      -          "G",
      -          "H",
      -          "I",
      -          "i",
      -          "L",
      -          "N",
      -          "Q",
      -          "S",
      -          "U",
      -          "X",
      -          "Y"
      -        ],
      -        "type": "string"
      -      },
      -      "latitude": {
      -        "maximum": 90,
      -        "minimum": -90,
      -        "type": "number"
      -      },
      -      "longitude": {
      -        "maximum": 180,
      -        "minimum": -180,
      -        "type": "number"
      -      },
      -      "name": {
      -        "default": "",
      -        "type": "string"
      -      },
      -      "time": {
      -        "pattern": "^\\d{2}:\\d{2}(:\\d{2})?$",
      -        "type": "string"
      -      },
      -      "timezone": {
      -        "description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known.",
      -        "type": "string"
      -      },
      -      "timezoneOffset": {
      -        "anyOf": [
      -          {
      -            "maximum": 14,
      -            "minimum": -14,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": 0,
      -        "description": "Hours from UTC at the given moment, not minutes. Fractional zones are hours too: 5.5 for India, 5.75 for Nepal, -3.5 for Newfoundland. Defaults to 0, meaning UTC. Ignored when timezone is sent."
      -      },
      -      "zodiacType": {
      -        "enum": [
      -          "tropical",
      -          "sidereal"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "date",
      -      "time",
      -      "latitude",
      -      "longitude"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {
      -      "anyOf": [
      -        {},
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "properties": {
      -      "latitude": {
      -        "description": "Birth latitude. Required here: the whole document is computed from it.",
      -        "maximum": 90,
      -        "minimum": -90,
      -        "type": "number"
      -      },
      -      "longitude": {
      -        "description": "Birth longitude. Required here: the whole document is computed from it.",
      -        "maximum": 180,
      -        "minimum": -180,
      -        "type": "number"
      -      }
      -    },
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {
      +      "anyOf": [
      +        {},
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "description": "Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single house-system letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
      +    "properties": {
      +      "ayanamsa": {
      +        "description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.",
      +        "enum": [
      +          "fagan-bradley",
      +          "lahiri",
      +          "de-luce",
      +          "raman",
      +          "krishnamurti",
      +          "kp",
      +          "yukteshwar",
      +          "jn-bhasin",
      +          "true-citra",
      +          "djwhal-khul"
      +        ],
      +        "type": "string"
      +      },
      +      "ayanamsaId": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "city": {
      +        "default": "",
      +        "type": "string"
      +      },
      +      "cosmogram": {
      +        "type": "boolean"
      +      },
      +      "date": {
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +        "type": "string"
      +      },
      +      "houseSystem": {
      +        "default": "P",
      +        "enum": [
      +          "P",
      +          "K",
      +          "R",
      +          "C",
      +          "E",
      +          "W",
      +          "B",
      +          "M",
      +          "O",
      +          "A",
      +          "T",
      +          "V",
      +          "D",
      +          "F",
      +          "G",
      +          "H",
      +          "I",
      +          "i",
      +          "L",
      +          "N",
      +          "Q",
      +          "S",
      +          "U",
      +          "X",
      +          "Y"
      +        ],
      +        "type": "string"
      +      },
      +      "latitude": {
      +        "maximum": 90,
      +        "minimum": -90,
      +        "type": "number"
      +      },
      +      "longitude": {
      +        "maximum": 180,
      +        "minimum": -180,
      +        "type": "number"
      +      },
      +      "name": {
      +        "default": "",
      +        "type": "string"
      +      },
      +      "time": {
      +        "pattern": "^\\d{2}:\\d{2}(:\\d{2})?$",
      +        "type": "string"
      +      },
      +      "timezone": {
      +        "description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known.",
      +        "type": "string"
      +      },
      +      "timezoneOffset": {
      +        "anyOf": [
      +          {
      +            "maximum": 14,
      +            "minimum": -14,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": 0,
      +        "description": "Hours from UTC at the given moment, not minutes. Fractional zones are hours too: 5.5 for India, 5.75 for Nepal, -3.5 for Newfoundland. Defaults to 0, meaning UTC. Ignored when timezone is sent."
      +      },
      +      "zodiacType": {
      +        "enum": [
      +          "tropical",
      +          "sidereal"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "date",
      +      "time",
      +      "latitude",
      +      "longitude"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {
      +      "anyOf": [
      +        {},
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "properties": {
      +      "latitude": {
      +        "description": "Birth latitude. Required here: the whole document is computed from it.",
      +        "maximum": 90,
      +        "minimum": -90,
      +        "type": "number"
      +      },
      +      "longitude": {
      +        "description": "Birth longitude. Required here: the whole document is computed from it.",
      +        "maximum": 180,
      +        "minimum": -180,
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / whitelabel / anyOf
      Previous value: -[
      -  {
      -    "type": "boolean"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "backgroundColor": {
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      },
      -      "companyBio": {
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "companyEmail": {
      -        "format": "email",
      -        "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      -        "type": "string"
      -      },
      -      "companyMobile": {
      -        "maxLength": 40,
      -        "type": "string"
      -      },
      -      "companyName": {
      -        "maxLength": 80,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "companyUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "fontPairing": {
      -        "enum": [
      -          "serif-sans",
      -          "sans-serif",
      -          "serif-only",
      -          "sans-only",
      -          "system"
      -        ],
      -        "type": "string"
      -      },
      -      "footerText": {
      -        "maxLength": 200,
      -        "type": "string"
      -      },
      -      "frontImage": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "headingColor": {
      -        "description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor).",
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      },
      -      "logoUrl": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "reportName": {
      -        "maxLength": 80,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "textPrimaryColor": {
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      },
      -      "textSecondaryColor": {
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      },
      -      "themeColor": {
      -        "description": "Accent colour, used for section heading text and inline emphasis.",
      -        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "backgroundColor": {
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      },
      +      "companyBio": {
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "companyEmail": {
      +        "format": "email",
      +        "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      +        "type": "string"
      +      },
      +      "companyMobile": {
      +        "maxLength": 40,
      +        "type": "string"
      +      },
      +      "companyName": {
      +        "maxLength": 80,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "companyUrl": {
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "fontPairing": {
      +        "enum": [
      +          "serif-sans",
      +          "sans-serif",
      +          "serif-only",
      +          "sans-only",
      +          "system"
      +        ],
      +        "type": "string"
      +      },
      +      "footerText": {
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "frontImage": {
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "headingColor": {
      +        "description": "Colour of the divider rule under each section heading (not the heading text, which is themeColor).",
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      },
      +      "logoUrl": {
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "reportName": {
      +        "maxLength": 80,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "textPrimaryColor": {
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      },
      +      "textSecondaryColor": {
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      },
      +      "themeColor": {
      +        "description": "Accent colour, used for section heading text and inline emphasis.",
      +        "pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
    • removedOutput schema / properties / byte_length / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / byte_length / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / duration_ms / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / duration_ms / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / expires_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / expires_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / page_count / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / page_count / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / storage_key / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / storage_key / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / url / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed2 schema fields changed
    • changedInput schema / properties / chart / allOf
      Previous value: -[
      -  {
      -    "additionalProperties": {
      -      "anyOf": [
      -        {},
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "description": "Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
      -    "properties": {
      -      "ayanamsa": {
      -        "description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.",
      -        "enum": [
      -          "fagan-bradley",
      -          "lahiri",
      -          "de-luce",
      -          "raman",
      -          "krishnamurti",
      -          "kp",
      -          "yukteshwar",
      -          "jn-bhasin",
      -          "true-citra",
      -          "djwhal-khul"
      -        ],
      -        "type": "string"
      -      },
      -      "ayanamsaId": {
      -        "anyOf": [
      -          {
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "city": {
      -        "default": "",
      -        "type": "string"
      -      },
      -      "cosmogram": {
      -        "type": "boolean"
      -      },
      -      "date": {
      -        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -        "type": "string"
      -      },
      -      "houseSystem": {
      -        "default": "P",
      -        "enum": [
      -          "P",
      -          "K",
      -          "R",
      -          "C",
      -          "E",
      -          "W",
      -          "B",
      -          "M",
      -          "O",
      -          "A",
      -          "T",
      -          "V",
      -          "D",
      -          "F",
      -          "G",
      -          "H",
      -          "I",
      -          "i",
      -          "L",
      -          "N",
      -          "Q",
      -          "S",
      -          "U",
      -          "X",
      -          "Y"
      -        ],
      -        "type": "string"
      -      },
      -      "latitude": {
      -        "maximum": 90,
      -        "minimum": -90,
      -        "type": "number"
      -      },
      -      "longitude": {
      -        "maximum": 180,
      -        "minimum": -180,
      -        "type": "number"
      -      },
      -      "name": {
      -        "default": "",
      -        "type": "string"
      -      },
      -      "time": {
      -        "pattern": "^\\d{2}:\\d{2}(:\\d{2})?$",
      -        "type": "string"
      -      },
      -      "timezone": {
      -        "description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known.",
      -        "type": "string"
      -      },
      -      "timezoneOffset": {
      -        "anyOf": [
      -          {
      -            "maximum": 14,
      -            "minimum": -14,
      -            "type": "number"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": 0,
      -        "description": "Hours from UTC at the given moment, not minutes. Fractional zones are hours too: 5.5 for India, 5.75 for Nepal, -3.5 for Newfoundland. Defaults to 0, meaning UTC. Ignored when timezone is sent."
      -      },
      -      "zodiacType": {
      -        "enum": [
      -          "tropical",
      -          "sidereal"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "date",
      -      "time",
      -      "latitude",
      -      "longitude"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": {
      -      "anyOf": [
      -        {},
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "properties": {
      -      "latitude": {
      -        "description": "Birth latitude. Required here: the whole document is computed from it.",
      -        "maximum": 90,
      -        "minimum": -90,
      -        "type": "number"
      -      },
      -      "longitude": {
      -        "description": "Birth longitude. Required here: the whole document is computed from it.",
      -        "maximum": 180,
      -        "minimum": -180,
      -        "type": "number"
      -      }
      -    },
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {
      +      "anyOf": [
      +        {},
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "description": "Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single house-system letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems.",
      +    "properties": {
      +      "ayanamsa": {
      +        "description": "Sidereal school by name. Lahiri when omitted. Equivalent to ayanamsaId; send either.",
      +        "enum": [
      +          "fagan-bradley",
      +          "lahiri",
      +          "de-luce",
      +          "raman",
      +          "krishnamurti",
      +          "kp",
      +          "yukteshwar",
      +          "jn-bhasin",
      +          "true-citra",
      +          "djwhal-khul"
      +        ],
      +        "type": "string"
      +      },
      +      "ayanamsaId": {
      +        "anyOf": [
      +          {
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "city": {
      +        "default": "",
      +        "type": "string"
      +      },
      +      "cosmogram": {
      +        "type": "boolean"
      +      },
      +      "date": {
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +        "type": "string"
      +      },
      +      "houseSystem": {
      +        "default": "P",
      +        "enum": [
      +          "P",
      +          "K",
      +          "R",
      +          "C",
      +          "E",
      +          "W",
      +          "B",
      +          "M",
      +          "O",
      +          "A",
      +          "T",
      +          "V",
      +          "D",
      +          "F",
      +          "G",
      +          "H",
      +          "I",
      +          "i",
      +          "L",
      +          "N",
      +          "Q",
      +          "S",
      +          "U",
      +          "X",
      +          "Y"
      +        ],
      +        "type": "string"
      +      },
      +      "latitude": {
      +        "maximum": 90,
      +        "minimum": -90,
      +        "type": "number"
      +      },
      +      "longitude": {
      +        "maximum": 180,
      +        "minimum": -180,
      +        "type": "number"
      +      },
      +      "name": {
      +        "default": "",
      +        "type": "string"
      +      },
      +      "time": {
      +        "pattern": "^\\d{2}:\\d{2}(:\\d{2})?$",
      +        "type": "string"
      +      },
      +      "timezone": {
      +        "description": "IANA zone name such as Europe/Kyiv, or auto to look the zone up from latitude and longitude. The server takes the offset that zone kept at this local date and time, summer time included, and uses it in place of timezoneOffset. A clock time that happened twice takes the first occurrence; one skipped when clocks went forward takes the offset from before the change. Abbreviations such as EST are refused. Before 1970 the tz database is not reliable for every place, so send timezoneOffset when the local clock is known.",
      +        "type": "string"
      +      },
      +      "timezoneOffset": {
      +        "anyOf": [
      +          {
      +            "maximum": 14,
      +            "minimum": -14,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": 0,
      +        "description": "Hours from UTC at the given moment, not minutes. Fractional zones are hours too: 5.5 for India, 5.75 for Nepal, -3.5 for Newfoundland. Defaults to 0, meaning UTC. Ignored when timezone is sent."
      +      },
      +      "zodiacType": {
      +        "enum": [
      +          "tropical",
      +          "sidereal"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "date",
      +      "time",
      +      "latitude",
      +      "longitude"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": {
      +      "anyOf": [
      +        {},
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "properties": {
      +      "latitude": {
      +        "description": "Birth latitude. Required here: the whole document is computed from it.",
      +        "maximum": 90,
      +        "minimum": -90,
      +        "type": "number"
      +      },
      +      "longitude": {
      +        "description": "Birth longitude. Required here: the whole document is computed from it.",
      +        "maximum": 180,
      +        "minimum": -180,
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / chart / description
      Previous value: -"Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single Swiss Ephemeris letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."New value: +"Birth data for a single natal chart. Required: date (YYYY-MM-DD), time (HH:mm:ss), latitude and longitude in decimal degrees. The short forms lat, lon, lng and tz are rejected with 400 INVALID_FIELD; pass the full names. timezoneOffset is hours from UTC and defaults to 0, meaning UTC; send timezone instead (an IANA name such as Europe/Kyiv, or auto) and the offset for that date is worked out, summer time included. city is a display label only: nothing here geocodes it, so it never stands in for coordinates. houseSystem is a single house-system letter, P by default; a name such as \"Placidus\" is refused, and the case matters because I and i are two different Sunshine systems."
  4. First observed

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds context annotations cannot express: the price (5,000 credits, roughly half a free monthly budget), the premium-confirmation requirement, and that the output carries a disclaimer about its interpretive nature. Since annotations already flag non-read-only and non-idempotent, the remaining gap is minor — delivery mechanics per format live only in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the interpretive content front-loaded, followed by structured metadata for group, endpoint, required parameter and cost. No filler, though the bracketed metadata block carries some items already visible in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return shape, and cost plus confirmation are disclosed, which is the key risk for a premium credit spend. However, for a tool with five optional parameters controlling format, language and branding, the description omits those capabilities entirely, leaving the agent to discover them in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 67% schema coverage the schema already documents chart, fields, format, precision and whitelabel thoroughly. The description adds nothing about format (and its title says PDF or HTML while the enum includes markdown), language, or whitelabel, so it neither compensates for gaps nor enriches understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (parenting-oriented natal report) and enumerates the interpretive sections it covers (Moon, Mercury, Venus, Mars) plus full natal data and a disclaimer. It is distinguishable from generic narrative tools, but it never names or contrasts with the closest siblings such as astroway_reports_natal or the AI narrative reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one real routing rule: confirm with the user before invoking because of the 5,000-credit cost. It does not say when to pick this over astroway_family_parent_child_deep, astroway_reports_natal, or the AI narrative tools, so alternative selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources