Skip to main content
Glama

AstroWay Astrology API (full catalogue)

Generate Gemstone Report (PDF or HTML)

astroway_reports_gemstone

The ratna prescription as a multi-page A4 PDF (default) or live HTML (add ?format=html). Same astrology as POST /vedic/gemstones, and pinned by a test to never disagree with it: same sidereal lagna, same two schools, same three gems. What the document adds is what a table cannot carry. Every recommended gem gets a page: what the graha it belongs to signifies classically, the basis in house ownership, mineral and substitutes, weight in ratti with gram and carat conversions, weekday, finger, metal, mantra and japa count, and the next auspicious day to first wear it, found by scanning th…

[Group: Reports] [Endpoint: POST /v1/reports/gemstone] [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_gemstone"
  }
}

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.
schoolNo
languageNo
precisionNoCompact mode: round fractional numbers to this many decimals. Longitudes carry 14 by default; 2 is finer than any chart is drawn.
whitelabelNo
wearingFromNo

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

A4.2/5.0
Behavior4/5

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

Annotations already declare non-readOnly, non-idempotent, open-world, so the bar is lower; the description still adds real substance by enumerating what the document contains per gem and disclosing that the wearing date is derived by scanning ahead. It omits the persistence side (that a PDF is stored server-side) and the premium credit cost, which matters for a mutation-style generation call.

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?

Purpose and format default are front-loaded, which is right. The middle section is long, em-dash-heavy, and spends several clauses enumerating document sections (mantra, japa count, ratti/gram/carat) that the output schema already covers, so some of it is redundant padding rather than earned detail.

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

Completeness5/5

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

For an 8-parameter report generator with full annotations and an output schema, the description supplies the things structured fields cannot: what the deliverable looks like, how it relates to the underlying gemstone endpoint, and the guarantee of non-divergence. Parameter gaps that remain are covered by 50% schema coverage and the output 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?

With only 50% schema coverage the description carries weight, and it does illuminate `format` (PDF default, HTML alternative), `school` ('same two schools, same three gems'), and `wearingFrom` indirectly via the next-auspicious-day scanning. However it never touches `language`, `whitelabel`, `fields`, or `precision`, and its '?format=html' phrasing describes a query string although `format` is a body parameter — a small mismatch with the schema.

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

Purpose5/5

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

The description names the artifact precisely ('the ratna prescription as a multi-page A4 PDF or live HTML') and anchors it to a known sibling endpoint ('Same astrology as POST /vedic/gemstones'), so an agent can tell it apart from astroway_vedic_gemstones (table data) and astroway_reports_vedic_kundli (different report).

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

Usage Guidelines4/5

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

It establishes the selection rule between this report and the raw table endpoint ('what the document adds is what a table cannot carry') and states the default format plus the HTML alternative. It stops short of explicit when-not guidance — nothing tells the agent to prefer the far cheaper astroway_vedic_gemstones when only the three gems are needed, or to confirm the 5,000-credit spend first.

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