Skip to main content
Glama

compute_dasha

Read-only

Computes Vedic dasha planetary period sequences across eight classical systems from natal chart inputs, returning nested start/end Julian Day trees for timing analysis.

Instructions

Compute Vedic dasha (planetary period) sequences. Supports eight classical systems: Vimshottari, Ashtottari, Yogini (Moon-longitude based, require moon_longitude); Chara, Narayana (sign based, require BOTH lagna_sign AND graha_signs, since each sign's period length is counted to the sign its lord occupies in this chart); Sthira, NiryanaShoola (niryana_shoola is accepted too) and Maheshwara (Jaimini rashi dashas, require lagna_sign AND graha_longitudes, since the atmakaraka and the tie-breaks of the strength tests read degrees). graha_signs takes the eight sign_index values compute_natal_chart already returns, graha_longitudes the eight sidereal longitudes; Ketu is derived from Rahu and must not be supplied. Yogini takes rounds (1 to 10 whole 36-year rounds) or until (a horizon Julian Day); Chara takes antardashas (twelve per period, BPHS 51.5-51.9). Sthira, NiryanaShoola and Maheshwara use the defaults of the vedic crate's dasha functions (see their module docs) and always carry their antardashas. Sthira and Maheshwara start from the Brahma graha; a chart whose marks leave none returns no_brahma: true with a message, not an error. Returns a JSON dasha tree with start/end Julian Days.

Input Schema

NameRequiredDescriptionDefault
untilNoYogini only: a horizon as a Julian Day (UT1). Whole rounds are produced until the tree reaches it, at least one and at most the maximum of `rounds`; compare the last maha's end_jd with it to see whether it was cut. Exclusive with `rounds`.
levelsNoNumber of nested dasha levels (1–5). Ignored by the sign-based systems (Chara, Narayana, Sthira, NiryanaShoola, Maheshwara).
roundsNoYogini only: how many whole 36-year rounds of the cycle to produce. Round 1 is the round from birth, whose first maha is the birth yogini's unelapsed share; each later round runs all eight yoginis whole. Every maha and sub-period carries its `round`. Defaults to 1. Exclusive with `until`. One response carries at most 50,000 periods: ten rounds at four levels, one at five.
systemNoDasha system selectorVimshottari
birth_jdYesBirth Julian Day used as the dasha epoch, in UT1 (Universal Time) — not TT, not TDB, i.e. the same scale as compute_natal_chart's julian_day. This epoch is only added to, never converted: every returned start_jd/end_jd is on the same UT1 scale as the input.
lagna_signNoLagna (ascendant) sign 0–11 (0 = Aries). Required for Chara, Narayana, Sthira, NiryanaShoola, Maheshwara. This is the same 0-indexed convention compute_natal_chart, compute_bhavas and compute_vargas all serve as `sign_index`, so an ascendant read from any of them passes straight through. Through v8.1.0 this one parameter was 1-indexed while every other tool was 0-indexed; that mismatch is resolved here.
antardashasNoChara only: when true each of the twelve periods carries its twelve antardashas in `antar` (BPHS 51.5-51.9: the stronger of the dasha rashi and its seventh starts, by modality, a twelfth of the period each). Defaults to false. Sthira, NiryanaShoola and Maheshwara always carry theirs.
graha_signsNoNatal sign positions of the seven classical grahas plus Rahu, 0-11 each (0 = Aries), as served by compute_natal_chart's sign_index. Required for Chara, Narayana, whose period lengths are chart-dependent — each sign's duration is the count from that sign to the sign its lord actually occupies. Sign indices are used rather than longitudes: they chain directly from compute_natal_chart's sign_index with no conversion, carry no tropical-vs-sidereal ambiguity, and avoid the boundary question of a planet at exactly 30.0 degrees. Ketu is not a field: it is derived as (rahu + 6) mod 12, since the two lunar nodes are always exactly opposite.
karaka_schemeNoWhich chara karakas name the atmakaraka for Sthira and Maheshwara: "7" (Sun to Saturn) or "8" (adds Rahu), as compute_karakas takes it. Applies to those two systems only.7
moon_longitudeNoNatal Moon sidereal longitude in degrees [0, 360). Required for Vimshottari, Ashtottari, Yogini.
graha_longitudesNoSidereal longitudes in degrees [0, 360) of the seven classical grahas plus Rahu, as compute_natal_chart serves them (Rahu from its MeanNode). Required, with lagna_sign, for Sthira, NiryanaShoola and Maheshwara, whose Brahma graha, atmakaraka and strength tie-breaks read degrees within the sign. Ketu is not a field: it is derived 180 degrees from Rahu. Do not also pass graha_signs for these systems.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changed
    • addedInput schema / properties / antardashas
      Added value: +{
      +  "default": false,
      +  "description": "Chara only: when true each of the twelve periods carries its twelve antardashas in `antar` (BPHS 51.5-51.9: the stronger of the dasha rashi and its seventh starts, by modality, a twelfth of the period each). Defaults to false. Sthira, NiryanaShoola and Maheshwara always carry theirs.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / graha_longitudes
      Added value: +{
      +  "description": "Sidereal longitudes in degrees [0, 360) of the seven classical grahas plus Rahu, as compute_natal_chart serves them (Rahu from its MeanNode). Required, with lagna_sign, for Sthira, NiryanaShoola and Maheshwara, whose Brahma graha, atmakaraka and strength tie-breaks read degrees within the sign. Ketu is not a field: it is derived 180 degrees from Rahu. Do not also pass graha_signs for these systems.",
      +  "properties": {
      +    "jupiter": {
      +      "description": "Jupiter's sidereal longitude.",
      +      "exclusiveMaximum": 360,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "mars": {
      +      "description": "Mars's sidereal longitude.",
      +      "exclusiveMaximum": 360,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "mercury": {
      +      "description": "Mercury's sidereal longitude.",
      +      "exclusiveMaximum": 360,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "moon": {
      +      "description": "Moon's sidereal longitude.",
      +      "exclusiveMaximum": 360,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "rahu": {
      +      "description": "Rahu's (north lunar node's) sidereal longitude.",
      +      "exclusiveMaximum": 360,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "saturn": {
      +      "description": "Saturn's sidereal longitude.",
      +      "exclusiveMaximum": 360,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "sun": {
      +      "description": "Sun's sidereal longitude.",
      +      "exclusiveMaximum": 360,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "venus": {
      +      "description": "Venus's sidereal longitude.",
      +      "exclusiveMaximum": 360,
      +      "minimum": 0,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "sun",
      +    "moon",
      +    "mars",
      +    "mercury",
      +    "jupiter",
      +    "venus",
      +    "saturn",
      +    "rahu"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / karaka_scheme
      Added value: +{
      +  "default": "7",
      +  "description": "Which chara karakas name the atmakaraka for Sthira and Maheshwara: \"7\" (Sun to Saturn) or \"8\" (adds Rahu), as compute_karakas takes it. Applies to those two systems only.",
      +  "enum": [
      +    "7",
      +    "8"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / lagna_sign / description
      Previous value: -"Lagna (ascendant) sign 0–11 (0 = Aries). Required for Chara, Narayana. This is the same 0-indexed convention compute_natal_chart, compute_bhavas and compute_vargas all serve as `sign_index`, so an ascendant read from any of them passes straight through. Through v8.1.0 this one parameter was 1-indexed while every other tool was 0-indexed; that mismatch is resolved here."New value: +"Lagna (ascendant) sign 0–11 (0 = Aries). Required for Chara, Narayana, Sthira, NiryanaShoola, Maheshwara. This is the same 0-indexed convention compute_natal_chart, compute_bhavas and compute_vargas all serve as `sign_index`, so an ascendant read from any of them passes straight through. Through v8.1.0 this one parameter was 1-indexed while every other tool was 0-indexed; that mismatch is resolved here."
    • changedInput schema / properties / levels / description
      Previous value: -"Number of nested dasha levels (1–5). Ignored by Chara and Narayana."New value: +"Number of nested dasha levels (1–5). Ignored by the sign-based systems (Chara, Narayana, Sthira, NiryanaShoola, Maheshwara)."
    • addedInput schema / properties / moon_longitude / exclusiveMaximum
      Added value: +360
    • removedInput schema / properties / moon_longitude / maximum
      Removed value: -360
    • addedInput schema / properties / rounds
      Added value: +{
      +  "default": 1,
      +  "description": "Yogini only: how many whole 36-year rounds of the cycle to produce. Round 1 is the round from birth, whose first maha is the birth yogini's unelapsed share; each later round runs all eight yoginis whole. Every maha and sub-period carries its `round`. Defaults to 1. Exclusive with `until`. One response carries at most 50,000 periods: ten rounds at four levels, one at five.",
      +  "maximum": 10,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / properties / system / enum
      Previous value: -[
      -  "Vimshottari",
      -  "Ashtottari",
      -  "Yogini",
      -  "Chara",
      -  "Narayana"
      -]New value: +[
      +  "Vimshottari",
      +  "Ashtottari",
      +  "Yogini",
      +  "Chara",
      +  "Narayana",
      +  "Sthira",
      +  "NiryanaShoola",
      +  "Maheshwara"
      +]
    • addedInput schema / properties / until
      Added value: +{
      +  "description": "Yogini only: a horizon as a Julian Day (UT1). Whole rounds are produced until the tree reaches it, at least one and at most the maximum of `rounds`; compare the last maha's end_jd with it to see whether it was cut. Exclusive with `rounds`.",
      +  "type": "number"
      +}
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "initial_balance": {
      -        "type": "number"
      -      },
      -      "maha_dashas": {
      -        "items": {
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "moon_nakshatra": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "moon_nakshatra",
      -      "initial_balance",
      -      "maha_dashas"
      -    ],
      -    "title": "Vimshottari",
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "initial_balance": {
      -        "type": "number"
      -      },
      -      "moon_nakshatra": {
      -        "type": "string"
      -      },
      -      "periods": {
      -        "items": {
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "starting_lord": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "moon_nakshatra",
      -      "starting_lord",
      -      "initial_balance",
      -      "periods"
      -    ],
      -    "title": "Ashtottari",
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "initial_balance": {
      -        "type": "number"
      -      },
      -      "maha_periods": {
      -        "items": {
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "moon_nakshatra": {
      -        "type": "string"
      -      },
      -      "starting_yogini_index": {
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "moon_nakshatra",
      -      "starting_yogini_index",
      -      "initial_balance",
      -      "maha_periods"
      -    ],
      -    "title": "Yogini",
      -    "type": "object"
      -  },
      -  {
      -    "description": "Sign-based systems. Twelve single-level periods, one per rashi, in dasha order. No nakshatra or balance: these systems are anchored on the lagna and the grahas' natal signs, not the Moon.",
      -    "properties": {
      -      "lagna_sign": {
      -        "description": "Lagna the sequence starts from, 0-11 (0 = Aries).",
      -        "type": "integer"
      -      },
      -      "periods": {
      -        "items": {
      -          "properties": {
      -            "duration_years": {
      -              "description": "Counted from this sign to the sign its lord occupies in THIS chart, so it varies between charts.",
      -              "type": "number"
      -            },
      -            "end_jd": {
      -              "type": "number"
      -            },
      -            "sign_index": {
      -              "type": "integer"
      -            },
      -            "sign_name": {
      -              "type": "string"
      -            },
      -            "start_jd": {
      -              "type": "number"
      -            }
      -          },
      -          "required": [
      -            "sign_index",
      -            "sign_name",
      -            "start_jd",
      -            "end_jd",
      -            "duration_years"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "lagna_sign",
      -      "periods"
      -    ],
      -    "title": "Chara / Narayana",
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "initial_balance": {
      +        "type": "number"
      +      },
      +      "maha_dashas": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "moon_nakshatra": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "moon_nakshatra",
      +      "initial_balance",
      +      "maha_dashas"
      +    ],
      +    "title": "Vimshottari",
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "initial_balance": {
      +        "type": "number"
      +      },
      +      "moon_nakshatra": {
      +        "type": "string"
      +      },
      +      "periods": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "starting_lord": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "moon_nakshatra",
      +      "starting_lord",
      +      "initial_balance",
      +      "periods"
      +    ],
      +    "title": "Ashtottari",
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "initial_balance": {
      +        "type": "number"
      +      },
      +      "maha_periods": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "moon_nakshatra": {
      +        "type": "string"
      +      },
      +      "starting_yogini_index": {
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "moon_nakshatra",
      +      "starting_yogini_index",
      +      "initial_balance",
      +      "maha_periods"
      +    ],
      +    "title": "Yogini",
      +    "type": "object"
      +  },
      +  {
      +    "description": "Sign-based systems. Twelve single-level periods, one per rashi, in dasha order. No nakshatra or balance: these systems are anchored on the lagna and the grahas' natal signs, not the Moon. With `antardashas` true, Chara's periods also carry `antar`.",
      +    "properties": {
      +      "lagna_sign": {
      +        "description": "Lagna the sequence starts from, 0-11 (0 = Aries).",
      +        "type": "integer"
      +      },
      +      "periods": {
      +        "items": {
      +          "properties": {
      +            "antar": {
      +              "description": "Chara with `antardashas` true only: the twelve antardashas, tiling the period.",
      +              "items": {
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "duration_years": {
      +              "description": "Counted from this sign to the sign its lord occupies in THIS chart, so it varies between charts.",
      +              "type": "number"
      +            },
      +            "end_jd": {
      +              "type": "number"
      +            },
      +            "sign_index": {
      +              "type": "integer"
      +            },
      +            "sign_name": {
      +              "type": "string"
      +            },
      +            "start_jd": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "sign_index",
      +            "sign_name",
      +            "start_jd",
      +            "end_jd",
      +            "duration_years"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "lagna_sign",
      +      "periods"
      +    ],
      +    "title": "Chara / Narayana",
      +    "type": "object"
      +  },
      +  {
      +    "description": "Twelve periods of 7, 8 or 9 years by modality from the Brahma graha's rashi, each with twelve antardashas. When the chart has no Brahma graha, `no_brahma` is true, `message` says so, and `anchor_sign`, `brahma` and `direction` are null and `periods` is empty: the text names no other start.",
      +    "properties": {
      +      "anchor_sign": {
      +        "type": [
      +          "integer",
      +          "null"
      +        ]
      +      },
      +      "brahma": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "direction": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "no_brahma": {
      +        "type": "boolean"
      +      },
      +      "periods": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "no_brahma",
      +      "anchor_sign",
      +      "brahma",
      +      "direction",
      +      "periods"
      +    ],
      +    "title": "Sthira",
      +    "type": "object"
      +  },
      +  {
      +    "description": "Twelve periods of 7, 8 or 9 years in trikona groups from the stronger of the lagna and the seventh, each with twelve antardashas.",
      +    "not": {
      +      "required": [
      +        "no_brahma"
      +      ]
      +    },
      +    "properties": {
      +      "anchor_sign": {
      +        "type": "integer"
      +      },
      +      "direction": {
      +        "type": "string"
      +      },
      +      "periods": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "anchor_sign",
      +      "direction",
      +      "periods"
      +    ],
      +    "title": "Niryana Shoola",
      +    "type": "object"
      +  },
      +  {
      +    "description": "The Maheshwara graha, the span of life to the end of its rashi's sthira period, and the antardashas of that period that can carry death. When the sthira dasha has no Brahma anchor, `no_brahma` is true with a `message`, `maheshwara` and `rashi` are still given, and the rest is absent.",
      +    "properties": {
      +      "death_antars": {
      +        "items": {
      +          "type": "integer"
      +        },
      +        "type": "array"
      +      },
      +      "death_trikona": {
      +        "items": {
      +          "type": "integer"
      +        },
      +        "type": "array"
      +      },
      +      "eighth_lord": {
      +        "type": "string"
      +      },
      +      "eighth_lord_rashi": {
      +        "type": "integer"
      +      },
      +      "life_span_years": {
      +        "type": "number"
      +      },
      +      "maheshwara": {
      +        "type": "string"
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "no_brahma": {
      +        "type": "boolean"
      +      },
      +      "period": {
      +        "type": "object"
      +      },
      +      "rashi": {
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "no_brahma",
      +      "maheshwara",
      +      "rashi"
      +    ],
      +    "title": "Maheshwara",
      +    "type": "object"
      +  }
      +]
  2. Changed9 schema fields changedv8.0.1
    • changedInput schema / properties / birth_jd / description
      Previous value: -"Birth Julian Day used as the dasha epoch, in UT1 (Universal Time) — not TT, not TDB, i.e. the same scale as compute_natal_chart's julian_day. Dasha computation is ephemeris-free, so this epoch is carried through rather than converted: every returned start_jd/end_jd is on the same UT1 scale as the input."New value: +"Birth Julian Day used as the dasha epoch, in UT1 (Universal Time) — not TT, not TDB, i.e. the same scale as compute_natal_chart's julian_day. This epoch is only added to, never converted: every returned start_jd/end_jd is on the same UT1 scale as the input."
    • addedInput schema / properties / graha_signs
      Added value: +{
      +  "description": "Natal sign positions of the seven classical grahas plus Rahu, 0-11 each (0 = Aries), as served by compute_natal_chart's sign_index. Required for Chara, Narayana, whose period lengths are chart-dependent — each sign's duration is the count from that sign to the sign its lord actually occupies. Sign indices are used rather than longitudes: they chain directly from compute_natal_chart's sign_index with no conversion, carry no tropical-vs-sidereal ambiguity, and avoid the boundary question of a planet at exactly 30.0 degrees. Ketu is not a field: it is derived as (rahu + 6) mod 12, since the two lunar nodes are always exactly opposite.",
      +  "properties": {
      +    "jupiter": {
      +      "description": "Jupiter's natal sign, 0-11 (0 = Aries).",
      +      "maximum": 11,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "mars": {
      +      "description": "Mars's natal sign, 0-11 (0 = Aries).",
      +      "maximum": 11,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "mercury": {
      +      "description": "Mercury's natal sign, 0-11 (0 = Aries).",
      +      "maximum": 11,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "moon": {
      +      "description": "Moon's natal sign, 0-11 (0 = Aries).",
      +      "maximum": 11,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "rahu": {
      +      "description": "Rahu's (north lunar node's) natal sign, 0-11 (0 = Aries).",
      +      "maximum": 11,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "saturn": {
      +      "description": "Saturn's natal sign, 0-11 (0 = Aries).",
      +      "maximum": 11,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "sun": {
      +      "description": "Sun's natal sign, 0-11 (0 = Aries).",
      +      "maximum": 11,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "venus": {
      +      "description": "Venus's natal sign, 0-11 (0 = Aries).",
      +      "maximum": 11,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "sun",
      +    "moon",
      +    "mars",
      +    "mercury",
      +    "jupiter",
      +    "venus",
      +    "saturn",
      +    "rahu"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / lagna_sign / description
      Previous value: -"Lagna (ascendant) sign 1–12 (1 = Aries). Required for Chara, Narayana."New value: +"Lagna (ascendant) sign 0–11 (0 = Aries). Required for Chara, Narayana. This is the same 0-indexed convention compute_natal_chart, compute_bhavas and compute_vargas all serve as `sign_index`, so an ascendant read from any of them passes straight through. Through v8.1.0 this one parameter was 1-indexed while every other tool was 0-indexed; that mismatch is resolved here."
    • changedInput schema / properties / lagna_sign / maximum
      Previous value: -12New value: +11
    • changedInput schema / properties / lagna_sign / minimum
      Previous value: -1New value: +0
    • addedOutput schema / description
      Added value: +"Envelope depends on `system`; see the four variants below. Every period carries start_jd/end_jd on the same UT1 scale as birth_jd."
    • addedOutput schema / oneOf
      Added value: +[
      +  {
      +    "properties": {
      +      "initial_balance": {
      +        "type": "number"
      +      },
      +      "maha_dashas": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "moon_nakshatra": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "moon_nakshatra",
      +      "initial_balance",
      +      "maha_dashas"
      +    ],
      +    "title": "Vimshottari",
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "initial_balance": {
      +        "type": "number"
      +      },
      +      "moon_nakshatra": {
      +        "type": "string"
      +      },
      +      "periods": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "starting_lord": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "moon_nakshatra",
      +      "starting_lord",
      +      "initial_balance",
      +      "periods"
      +    ],
      +    "title": "Ashtottari",
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "initial_balance": {
      +        "type": "number"
      +      },
      +      "maha_periods": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "moon_nakshatra": {
      +        "type": "string"
      +      },
      +      "starting_yogini_index": {
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "moon_nakshatra",
      +      "starting_yogini_index",
      +      "initial_balance",
      +      "maha_periods"
      +    ],
      +    "title": "Yogini",
      +    "type": "object"
      +  },
      +  {
      +    "description": "Sign-based systems. Twelve single-level periods, one per rashi, in dasha order. No nakshatra or balance: these systems are anchored on the lagna and the grahas' natal signs, not the Moon.",
      +    "properties": {
      +      "lagna_sign": {
      +        "description": "Lagna the sequence starts from, 0-11 (0 = Aries).",
      +        "type": "integer"
      +      },
      +      "periods": {
      +        "items": {
      +          "properties": {
      +            "duration_years": {
      +              "description": "Counted from this sign to the sign its lord occupies in THIS chart, so it varies between charts.",
      +              "type": "number"
      +            },
      +            "end_jd": {
      +              "type": "number"
      +            },
      +            "sign_index": {
      +              "type": "integer"
      +            },
      +            "sign_name": {
      +              "type": "string"
      +            },
      +            "start_jd": {
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "sign_index",
      +            "sign_name",
      +            "start_jd",
      +            "end_jd",
      +            "duration_years"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "lagna_sign",
      +      "periods"
      +    ],
      +    "title": "Chara / Narayana",
      +    "type": "object"
      +  }
      +]
    • removedOutput schema / properties
      Removed value: -{
      -  "initial_balance": {
      -    "description": "Fraction of the first mahadasha already elapsed at birth, in [0, 1).",
      -    "type": "number"
      -  },
      -  "maha_dashas": {
      -    "items": {
      -      "properties": {
      -        "duration_days": {
      -          "description": "Length of the period in days.",
      -          "type": "number"
      -        },
      -        "end_jd": {
      -          "description": "End of the period as a Julian Day.",
      -          "type": "number"
      -        },
      -        "level": {
      -          "description": "Nesting depth: 1 = mahadasha, 2 = antardasha, 3 = pratyantardasha.",
      -          "type": "integer"
      -        },
      -        "lord": {
      -          "description": "Ruling graha of the period.",
      -          "type": "string"
      -        },
      -        "start_jd": {
      -          "description": "Start of the period as a Julian Day.",
      -          "type": "number"
      -        },
      -        "sub_periods": {
      -          "description": "Nested periods one level down; empty at the deepest level requested.",
      -          "items": {
      -            "type": "object"
      -          },
      -          "type": "array"
      -        }
      -      },
      -      "required": [
      -        "lord",
      -        "level",
      -        "start_jd",
      -        "end_jd",
      -        "duration_days"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "moon_nakshatra": {
      -    "description": "Birth nakshatra of the Moon, which sets the starting mahadasha.",
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / required
      Removed value: -[
      -  "moon_nakshatra",
      -  "initial_balance",
      -  "maha_dashas"
      -]
  3. Changed1 schema field changedv8.0.0
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "initial_balance": {
      +      "description": "Fraction of the first mahadasha already elapsed at birth, in [0, 1).",
      +      "type": "number"
      +    },
      +    "maha_dashas": {
      +      "items": {
      +        "properties": {
      +          "duration_days": {
      +            "description": "Length of the period in days.",
      +            "type": "number"
      +          },
      +          "end_jd": {
      +            "description": "End of the period as a Julian Day.",
      +            "type": "number"
      +          },
      +          "level": {
      +            "description": "Nesting depth: 1 = mahadasha, 2 = antardasha, 3 = pratyantardasha.",
      +            "type": "integer"
      +          },
      +          "lord": {
      +            "description": "Ruling graha of the period.",
      +            "type": "string"
      +          },
      +          "start_jd": {
      +            "description": "Start of the period as a Julian Day.",
      +            "type": "number"
      +          },
      +          "sub_periods": {
      +            "description": "Nested periods one level down; empty at the deepest level requested.",
      +            "items": {
      +              "type": "object"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "lord",
      +          "level",
      +          "start_jd",
      +          "end_jd",
      +          "duration_days"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "moon_nakshatra": {
      +      "description": "Birth nakshatra of the Moon, which sets the starting mahadasha.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "moon_nakshatra",
      +    "initial_balance",
      +    "maha_dashas"
      +  ],
      +  "type": "object"
      +}
  4. First observedv7.0.0

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the description does not need to argue safety, and instead it adds genuinely new behavioral facts: the return is a JSON dasha tree keyed by start/end Julian Days, a chart with no Brahma graha returns `no_brahma: true` with a message rather than raising an error, and Yogini results may be truncated by the `until` horizon (verify by comparing the last maha's end_jd). The 50,000-period response cap is also surfaced, though that lives 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.

Conciseness3/5

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

The purpose is front-loaded in the first clause, but the body is a single dense paragraph that packs parameter routing, crate-default caveats, and return-format notes into one unbroken block, making it harder to scan than a short bulleted mode table would be. Every sentence carries information, but several clauses duplicate the schema and could be dropped without loss.

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

Completeness4/5

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

For a tool with eleven parameters, eight mutually exclusive modes, nested objects, and an output schema, the description covers the mode selection matrix, the epoch time-scale caveat (UT1, never converted), the Ketu derivation rule, the no-brahma edge case, and points to the crate's module docs for the systems it does not detail. The only gap is that it defers Sthira/NiryanaShoola/Maheshwara semantics to external documentation an agent cannot read at call time.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns a step above by consolidating the mode-to-parameter matrix that would otherwise require synthesizing eleven separate schema entries: Moon-longitude systems vs. sign-based systems vs. Jaimini systems, plus the Ketu-is-derived rule and the explicit warning not to pass graha_signs alongside graha_longitudes. It still restates a fair amount of what the schema already says verbatim (index conventions, rounds/until exclusivity), so it is not a full step above.

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?

The opening sentence names a specific verb and resource ('Compute Vedic dasha (planetary period) sequences') and immediately enumerates the eight supported systems, so the scope is unambiguous. There is no sibling tool that also computes dashas, so no differentiation is required, but the description also never explicitly positions itself against compute_natal_chart or other chart-producing siblings beyond naming them as data sources.

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?

The description states which input data each system consumes, which implicitly tells the agent when a call is valid, and it repeatedly points at compute_natal_chart as the source of graha_signs/graha_longitudes. However, it never states when an agent should choose this tool versus, say, compute_karakas or compute_vargas, nor does it give any 'use this when the user asks for a timeline/period sequence' guidance; usage is inferable rather than stated.

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