Skip to main content
Glama

compute_natal_chart

Read-only

Calculate a natal astrological chart from a Julian Day and geographic coordinates. Returns a JSON graph with planetary positions, house cusps, aspects, nakshatras, and dignities.

Instructions

Compute a natal astrological chart for a given time and location. Returns a ChartGraph in JSON format containing planetary positions, house cusps, aspects, nakshatras, and dignities.

Input Schema

TableJSON 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

TableJSON 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.8/5.0
Behavior3/5

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

The description confirms this is a read-only computation that returns a JSON ChartGraph, which complements the readOnlyHint annotation. It does not discuss edge cases, precision limits, or failure modes, but with annotations already covering side effects, the added return-type context is adequate but not exceptional.

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

Conciseness5/5

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

The description is two short, front-loaded sentences with no filler. The action is stated first, and the return-value summary earns its place without duplicating the schema.

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?

The combination of a rich input schema, an available output schema, and the readOnlyHint means the agent has enough structure to select and invoke the tool correctly. The description states purpose and output, while the schema handles detailed inputs and return shape. A brief routing note against sibling compute_* tools would improve completeness but is not essential.

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?

All five parameters are thoroughly described in the input schema, including the important UT1-vs-TT warning for julian_day and detailed ayanamsha system definitions. At 100% schema description coverage, the baseline of 3 is appropriate, and the prose description's 'time and location' phrasing adds no new parameter-level meaning.

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 description opens with a specific verb, 'Compute', and names the exact resource, 'natal astrological chart', along with the required time and location context. It also summarizes the returned ChartGraph contents, which clarifies the tool's scope. It does not explicitly contrast the tool with siblings like compute_transit or compute_bhavas, so it stops short of a top score.

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?

The phrase 'for a given time and location' states a clear usage context: use this tool when a natal chart is needed for specific inputs. It does not list exclusions or direct the agent to alternatives such as compute_transit or compute_bhavas, but the context is explicit enough to guide basic selection.

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