Calculate a complete Western natal chart using the tropical zodiac and Swiss Ephemeris. Returns 10 planet positions with Placidus (or chosen) house placements, essential dignities per Ptolemy/Lilly/Hand, all active aspects using Robert Hand Table 2 orbs, and element/modality/hemisphere balance statistics.
SECTION: WHAT THIS TOOL COVERS
Tropical natal chart: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto. Each planet returns tropical longitude, sign, house (1–12), retrograde flag, dignity label (domicile/exaltation/detriment/fall/peregrine), dignity score (Lilly weights: domicile +5, exaltation +4, triplicity +3, term +2, face +1, detriment -5, fall -4), is_exaltation_degree (within 1° of exact exaltation), dignity_disputed (true for outer planets where exaltation/fall is disputed among modern astrologers). Aspects use Hand Table 2 orbs: conjunction/opposition 5°, square/trine 5°, sextile 3°, minor aspects 1.5°. Accuracy verified against astro-seek.com to within 0.01° for all 10 planets. Not Vedic sidereal (asterwise_get_natal_chart).
SECTION: WORKFLOW
BEFORE: None — this tool is standalone.
AFTER: asterwise_get_western_transits_daily — layer current transits over this natal chart.
AFTER: asterwise_get_western_synastry — compare this chart against a partner's chart.
AFTER: asterwise_get_western_solar_return — annual return chart for the current year.
SECTION: INPUT CONTRACT
birth.date — YYYY-MM-DD. Example: '1985-11-12'
birth.time — HH:MM (24-hour local time). Example: '06:45'
birth.lat — Decimal degrees, north positive. Example: 19.076 (Mumbai)
birth.lon — Decimal degrees, east positive. Example: 72.8777 (Mumbai)
birth.timezone — IANA timezone string. Example: 'Asia/Kolkata', 'America/New_York', 'Europe/Rome', 'UTC'. Default: UTC.
IMPORTANT: Timezone defaults to UTC — always supply the correct local timezone for accurate house cusps. An incorrect timezone shifts the Ascendant.
birth.house_system — 'placidus' (default, most common), 'koch', 'equal', 'whole_sign'. Placidus is standard for most Western traditions. Whole sign is traditional/Hellenistic.
NOTE: house_system is accepted here but silently ignored by transit, return, synastry, composite, and progression endpoints — those always use the birth location coordinates without house-system selection.
ayanamsa — always tropical regardless of any value supplied; field is not present.
SECTION: OUTPUT CONTRACT
data.zodiac (string — 'tropical')
data.house_system (string — the system used)
data.ascendant — { longitude (float), sign (string), sign_index (int 0–11), degree_in_sign (float) }
data.mc — same shape as ascendant
data.planets[] — 10 objects (Sun through Pluto):
name (string), longitude (float), sign (string), sign_index (int 0–11)
degree_in_sign (float), house (int 1–12)
is_retrograde (bool), dignity (string), dignity_score (int)
is_exaltation_degree (bool), dignity_disputed (bool)
data.houses[] — 12 objects:
house (int 1–12), cusp_longitude (float), sign (string)
sign_index (int 0–11), degree_in_sign (float)
data.aspects[] — each:
planet_a (string), planet_b (string), type (string)
exact_angle (float), orb (float), is_applying (bool)
data.elements — { fire (int), earth (int), air (int), water (int), dominant (string) }
data.modalities — { cardinal (int), fixed (int), mutable (int), dominant (string) }
data.hemisphere — { eastern (int), western (int), northern (int), southern (int) }
data.ayanamsa_value (float — 0.0 for tropical)
data.ayanamsa_used (string — 'tropical')
data.birth_time_unknown (bool — always false)
SECTION: RESPONSE FORMAT
response_format=json serialises the complete response as indented JSON — use this for programmatic parsing, typed clients, and downstream tool chaining.
response_format=markdown renders the same data as a human-readable natal report.
Both modes return identical underlying data.
SECTION: COMPUTE CLASS
MEDIUM_COMPUTE (~300ms)
SECTION: ERROR CONTRACT
INVALID_PARAMS (local — caught before upstream call):
— WesternBirthData Pydantic violations (date pattern, time pattern, lat/lon bounds) → MCP INVALID_PARAMS
INVALID_PARAMS (upstream):
— None expected for valid coordinates and dates post-1800.
INTERNAL_ERROR:
— Any upstream API failure or timeout → MCP INTERNAL_ERROR
Edge cases:
— Polar latitudes (above ~65°N or below ~65°S) may cause Placidus house calculation failure; use whole_sign or equal house system for polar births.
— time='00:00' accepted; lagna-sensitive results are unreliable for unknown birth times.
SECTION: DO NOT CONFUSE WITH
asterwise_get_natal_chart — Vedic sidereal chart using Lahiri ayanamsa; different zodiac, different house system, different planet set (9 grahas vs 10 tropical planets).
asterwise_get_western_aspects — takes raw longitudes as input; use when you already have positions and don't need full chart computation.