Skip to main content
Glama

compute_natal_chart

Read-only

Compute a natal astrological chart from a Julian Day, latitude, and longitude. Returns JSON for planetary positions, houses, aspects, and ayanamsha; pass a sidereal ayanamsha for a Vedic kundali.

Instructions

Compute a natal astrological chart for a given time and location. Returns JSON with each body's longitude, latitude, speed, sign, house, dignity and retrograde flag, the house cusps with ascendant and MC, the aspects, and the ayanamsha applied. Pass a sidereal ayanamsha for a Vedic chart (kundali); the default is tropical. To get a property graph, pass this output to emit_graph.

Input Schema

NameRequiredDescriptionDefault
latitudeYesGeographic latitude in degrees [-90, +90]
ayanamshaNoSidereal zodiac system. Eleven systems, each derived forward from a primary source and none tuned to match another implementation. The chart's true_ayanamsha_value output field reports the TRUE ayanamsha (mean plus nutation in longitude) already applied — nutation is included, do not add it yourself. Pass Tropical for no rotation. Systems: IndianOfficial = Indian Astronomical Ephemeris 2022, AYANAMSA section: 23 deg 51 min 25.53 sec at J2000.0, propagated by P03 general precession | FaganBradley = Fagan & Firebrace, Primer of Sidereal Astrology: synetic vernal point 335 deg 57 min 28.64 sec at B1950.0, ayanamsha = 360 deg minus SVP | Krishnamurti = Krishnamurti Padhdhati Vol-I: 22 deg 22 min 00 sec on the 1st of Chitra 1900, propagated at KSK's stated 50.2388475 arcsec/yr | Raman = Raman, A Manual of Hindu Astrology (1935), Ch. III Art. 49 | SuryaSiddhanta = Surya Siddhanta Ch. 3 vv. 9-12 | Yukteshwar = Yukteswar, The Holy Science (1894) | RevatiPaksha [star] = Revati at the sidereal initial point, the majority reading against Surya Siddhanta Ch. 8's own 359 deg 50 min, zeta Piscium per Hipparcos | PushyaPaksha [star] = Narasimha Rao, Introducing Pushya-paksha Ayanamsa | TrueChitra [star] = Self-describing condition; Spica per Hipparcos | ChandraHari [star] = Chandra Hari, Indian J. History of Science 33(4), 1998 | GalacticCenter0Sag [star] = Self-describing condition; Sgr A* per Gordon, de Witt & Jacobs (2023), AJ 165, 49.Tropical
longitudeYesGeographic longitude in degrees [-180, +180], east positive
julian_dayYesJulian Day number in UT1 (Universal Time) — not TT, not TDB. The engine converts to TT internally for the dynamical terms (planetary positions, nutation, obliquity) and evaluates the Earth-rotation term — sidereal time, and hence the ascendant, the MC and all twelve house cusps — at this UT1 value directly. Supplying a TDB Julian Day rotates every cusp by 0.289° (17.3') at today's ΔT ≈ 69 s.
house_systemNoHouse system: Placidus, Koch, Equal, WholeSign, etc.Placidus

Output Schema

NameRequiredDescriptionDefault
housesYes
aspectsYes
planetsYesOne entry per computed body.
julian_dayYesThe Julian Day the chart was cast for, echoed back.
config_summaryNoOne-line record of the ephemeris, house system and ayanamsha used.
true_ayanamsha_valueNoTrue ayanamsha (mean plus nutation in longitude) applied, in degrees. Zero for a tropical chart.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv8.0.1
    • changedInput schema / properties / ayanamsha / description
      Previous value: -"Sidereal zodiac system. Eleven systems, each derived forward from a primary source and none tuned to match another implementation. The chart's ayanamsha_value output field reports the TRUE ayanamsha (mean plus nutation in longitude) already applied — nutation is included, do not add it yourself. Pass Tropical for no rotation. Systems: IndianOfficial = Indian Astronomical Ephemeris 2022, AYANAMSA section: 23 deg 51 min 25.53 sec at J2000.0, propagated by P03 general precession | FaganBradley = Fagan & Firebrace, Primer of Sidereal Astrology: synetic vernal point 335 deg 57 min 28.64 sec at B1950.0, ayanamsha = 360 deg minus SVP | Krishnamurti = Krishnamurti Padhdhati Vol-I: 22 deg 22 min 00 sec on the 1st of Chitra 1900, propagated at KSK's stated 50.2388475 arcsec/yr | Raman = Raman, A Manual of Hindu Astrology (1935), Ch. III Art. 49 | SuryaSiddhanta = Surya Siddhanta Ch. 3 vv. 9-12 | Yukteshwar = Yukteswar, The Holy Science (1894) | RevatiPaksha [star] = Revati at the sidereal initial point, the majority reading against Surya Siddhanta Ch. 8's own 359 deg 50 min, zeta Piscium per Hipparcos | PushyaPaksha [star] = Narasimha Rao, Introducing Pushya-paksha Ayanamsa | TrueChitra [star] = Self-describing condition; Spica per Hipparcos | ChandraHari [star] = Chandra Hari, Indian J. History of Science 33(4), 1998 | GalacticCenter0Sag [star] = Self-describing condition; Sgr A* per Gordon, de Witt & Jacobs (2023), AJ 165, 49."New value: +"Sidereal zodiac system. Eleven systems, each derived forward from a primary source and none tuned to match another implementation. The chart's true_ayanamsha_value output field reports the TRUE ayanamsha (mean plus nutation in longitude) already applied — nutation is included, do not add it yourself. Pass Tropical for no rotation. Systems: IndianOfficial = Indian Astronomical Ephemeris 2022, AYANAMSA section: 23 deg 51 min 25.53 sec at J2000.0, propagated by P03 general precession | FaganBradley = Fagan & Firebrace, Primer of Sidereal Astrology: synetic vernal point 335 deg 57 min 28.64 sec at B1950.0, ayanamsha = 360 deg minus SVP | Krishnamurti = Krishnamurti Padhdhati Vol-I: 22 deg 22 min 00 sec on the 1st of Chitra 1900, propagated at KSK's stated 50.2388475 arcsec/yr | Raman = Raman, A Manual of Hindu Astrology (1935), Ch. III Art. 49 | SuryaSiddhanta = Surya Siddhanta Ch. 3 vv. 9-12 | Yukteshwar = Yukteswar, The Holy Science (1894) | RevatiPaksha [star] = Revati at the sidereal initial point, the majority reading against Surya Siddhanta Ch. 8's own 359 deg 50 min, zeta Piscium per Hipparcos | PushyaPaksha [star] = Narasimha Rao, Introducing Pushya-paksha Ayanamsa | TrueChitra [star] = Self-describing condition; Spica per Hipparcos | ChandraHari [star] = Chandra Hari, Indian J. History of Science 33(4), 1998 | GalacticCenter0Sag [star] = Self-describing condition; Sgr A* per Gordon, de Witt & Jacobs (2023), AJ 165, 49."
    • removedOutput schema / properties / ayanamsha_value
      Removed value: -{
      -  "description": "True ayanamsha (mean plus nutation in longitude) applied, in degrees. Zero for a tropical chart.",
      -  "type": "number"
      -}
    • addedOutput schema / properties / true_ayanamsha_value
      Added value: +{
      +  "description": "True ayanamsha (mean plus nutation in longitude) applied, in degrees. Zero for a tropical chart.",
      +  "type": "number"
      +}
  2. Changed2 schema fields changedv8.0.0
    • changedInput schema / properties / ayanamsha / description
      Previous value: -"Sidereal zodiac system. Eleven systems, each derived forward from a primary source and none tuned to match another implementation. Returns the MEAN ayanamsha - add nutation in longitude yourself for the true ayanamsha. Pass Tropical for no rotation. Systems: IndianOfficial = Indian Astronomical Ephemeris 2022, AYANAMSA section: 23 deg 51 min 25.53 sec at J2000.0, propagated by P03 general precession | FaganBradley = Fagan & Firebrace, Primer of Sidereal Astrology: synetic vernal point 335 deg 57 min 28.64 sec at B1950.0, ayanamsha = 360 deg minus SVP | Krishnamurti = Krishnamurti Padhdhati Vol-I: 22 deg 22 min 00 sec on the 1st of Chitra 1900, propagated at KSK's stated 50.2388475 arcsec/yr | Raman = Raman, A Manual of Hindu Astrology (1935), Ch. III Art. 49 | SuryaSiddhanta = Surya Siddhanta Ch. 3 vv. 9-12 | Yukteshwar = Yukteswar, The Holy Science (1894) | RevatiPaksha [star] = Revati at the sidereal initial point, the majority reading against Surya Siddhanta Ch. 8's own 359 deg 50 min, zeta Piscium per Hipparcos | PushyaPaksha [star] = Narasimha Rao, Introducing Pushya-paksha Ayanamsa | TrueChitra [star] = Self-describing condition; Spica per Hipparcos | ChandraHari [star] = Chandra Hari, Indian J. History of Science 33(4), 1998 | GalacticCenter0Sag [star] = Self-describing condition; Sgr A* per Gordon, de Witt & Jacobs (2023), AJ 165, 49."New value: +"Sidereal zodiac system. Eleven systems, each derived forward from a primary source and none tuned to match another implementation. The chart's ayanamsha_value output field reports the TRUE ayanamsha (mean plus nutation in longitude) already applied — nutation is included, do not add it yourself. Pass Tropical for no rotation. Systems: IndianOfficial = Indian Astronomical Ephemeris 2022, AYANAMSA section: 23 deg 51 min 25.53 sec at J2000.0, propagated by P03 general precession | FaganBradley = Fagan & Firebrace, Primer of Sidereal Astrology: synetic vernal point 335 deg 57 min 28.64 sec at B1950.0, ayanamsha = 360 deg minus SVP | Krishnamurti = Krishnamurti Padhdhati Vol-I: 22 deg 22 min 00 sec on the 1st of Chitra 1900, propagated at KSK's stated 50.2388475 arcsec/yr | Raman = Raman, A Manual of Hindu Astrology (1935), Ch. III Art. 49 | SuryaSiddhanta = Surya Siddhanta Ch. 3 vv. 9-12 | Yukteshwar = Yukteswar, The Holy Science (1894) | RevatiPaksha [star] = Revati at the sidereal initial point, the majority reading against Surya Siddhanta Ch. 8's own 359 deg 50 min, zeta Piscium per Hipparcos | PushyaPaksha [star] = Narasimha Rao, Introducing Pushya-paksha Ayanamsa | TrueChitra [star] = Self-describing condition; Spica per Hipparcos | ChandraHari [star] = Chandra Hari, Indian J. History of Science 33(4), 1998 | GalacticCenter0Sag [star] = Self-describing condition; Sgr A* per Gordon, de Witt & Jacobs (2023), AJ 165, 49."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "aspects": {
      +      "items": {
      +        "properties": {
      +          "applying": {
      +            "description": "True when the aspect is closing rather than separating.",
      +            "type": "boolean"
      +          },
      +          "body1": {
      +            "description": "Index of the first body in the planets array.",
      +            "type": "integer"
      +          },
      +          "body2": {
      +            "description": "Index of the second body.",
      +            "type": "integer"
      +          },
      +          "orb": {
      +            "description": "Orb in degrees.",
      +            "type": "number"
      +          },
      +          "strength": {
      +            "description": "Normalised strength in [0, 1], 1 at exact.",
      +            "type": "number"
      +          },
      +          "type": {
      +            "description": "Aspect name.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "body1",
      +          "body2",
      +          "type",
      +          "orb"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "ayanamsha_value": {
      +      "description": "True ayanamsha (mean plus nutation in longitude) applied, in degrees. Zero for a tropical chart.",
      +      "type": "number"
      +    },
      +    "config_summary": {
      +      "description": "One-line record of the ephemeris, house system and ayanamsha used.",
      +      "type": "string"
      +    },
      +    "houses": {
      +      "properties": {
      +        "asc": {
      +          "description": "Ascendant longitude in degrees.",
      +          "type": "number"
      +        },
      +        "cusps": {
      +          "description": "Twelve cusp longitudes.",
      +          "items": {
      +            "description": "Cusp longitude in degrees.",
      +            "type": "number"
      +          },
      +          "type": "array"
      +        },
      +        "mc": {
      +          "description": "Midheaven longitude in degrees.",
      +          "type": "number"
      +        },
      +        "polar_fallback": {
      +          "description": "True when the requested system was undefined at this latitude and a fallback was used.",
      +          "type": "boolean"
      +        },
      +        "system": {
      +          "description": "House system used.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "system",
      +        "asc",
      +        "mc",
      +        "cusps"
      +      ],
      +      "type": "object"
      +    },
      +    "julian_day": {
      +      "description": "The Julian Day the chart was cast for, echoed back.",
      +      "type": "number"
      +    },
      +    "planets": {
      +      "description": "One entry per computed body.",
      +      "items": {
      +        "properties": {
      +          "dignity": {
      +            "description": "Dignity in the occupied sign, e.g. Exalted, Own, Debilitated, Neutral.",
      +            "type": "string"
      +          },
      +          "distance": {
      +            "description": "Distance from the observer in AU.",
      +            "type": "number"
      +          },
      +          "house": {
      +            "description": "Bhava occupied, 1-12.",
      +            "type": "integer"
      +          },
      +          "latitude": {
      +            "description": "Ecliptic latitude in degrees.",
      +            "type": "number"
      +          },
      +          "longitude": {
      +            "description": "Sidereal longitude in degrees [0, 360).",
      +            "type": "number"
      +          },
      +          "name": {
      +            "description": "Graha name.",
      +            "type": "string"
      +          },
      +          "retrograde": {
      +            "description": "True when speed is negative.",
      +            "type": "boolean"
      +          },
      +          "sign": {
      +            "description": "Rashi name.",
      +            "type": "string"
      +          },
      +          "sign_index": {
      +            "description": "Rashi index, 0=Aries … 11=Pisces.",
      +            "type": "integer"
      +          },
      +          "speed": {
      +            "description": "Daily motion in degrees per day, negative when retrograde.",
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "longitude",
      +          "sign_index",
      +          "house"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "julian_day",
      +    "planets",
      +    "houses",
      +    "aspects"
      +  ],
      +  "type": "object"
      +}
  3. First observedv7.0.0

TDQS

A3.6/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 safety is covered; the description adds the composition pathway into emit_graph and clarifies the tropical/sidereal branch, both useful behavior not present in structured fields. The critical precision caveat (UT1 vs TT) lives in the schema rather than the description, so this is not a 5.

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 sentences, front-loaded with purpose, then outputs, then selection guidance. The output-enumeration sentence duplicates the output schema somewhat but reads as a useful summary rather than padding.

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?

With an output schema present, the description need not enumerate return fields, and it covers the core call correctly. For a tool sitting among sixteen chart-related siblings, though, it omits any statement about what it does NOT cover (divisional charts, bhava analysis, aspects) that would help an agent choose correctly.

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?

Schema description coverage is 100% and the ayanamsha enum is documented exhaustively, so the schema carries the burden. The description's ayanamsha note ('sidereal for a Vedic chart, default tropical') adds a small amount of interpretive framing but is largely restated in the enum's own 'Pass Tropical for no rotation' text; julian_day, latitude, longitude and house_system get nothing beyond the schema.

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 verb and resource (compute a natal chart) plus the required inputs (time and location), and frames the two output modes — tropical default vs sidereal for a Vedic kundali. It does not, however, distinguish itself from the many adjacent chart tools (compute_bhavas, compute_vargas, compute_drishti) that also operate on a natal chart.

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?

Offers one clear routing rule — 'pass this output to emit_graph' for a property graph — and explains when to choose a sidereal ayanamsha versus the tropical default. There is no guidance on when to use this versus sibling computation tools, which is a real gap given sixteen siblings.

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