WISHLIST_ANALYSIS.md 23 KB

Astro MCP Wishlist Analysis

Generated: 2026-06-04 Analyzed against: src/astro_mcp/astrology.py, src/astro_mcp/tools.py, tests/


1. NATAL ASTROLOGY WISHLIST

1.1 Already Implemented (confirmed in code)

Wishlist Item Status Location
Natal chart calculation (planets, houses, angles, aspects) DONE calculate_natal_chart in tools.py
Planetary positions with sign, degree, retrograde DONE get_planetary_positions, calculate_natal_chart
House systems (Placidus, Equal, Whole Sign) DONE calculate_houses in astrology.py
Aspect calculation (conj, opp, sq, tr, sx) with orbs DONE compute_aspects in astrology.py
Person database (store/retrieve birth data) DONE person_manage in tools.py
Transit chart calculation DONE calculate_transit_chart in tools.py
Transit preview (daily snapshots + significance) DONE get_transit_preview in tools.py
Lunar nodes (North/South) DONE true_node body from ephemeris
Synastry chart DONE calculate_synastry_chart in tools.py
Composite chart DONE calculate_composite_chart in tools.py
Multiple birth data formats (ISO 8601 with TZ) DONE All tools accept ISO 8601
Applying/separating flag on aspects PARTIAL Computed in transit chart; natal chart does NOT pass speed_lon to compute_aspects

1.2 Missing -- Easy Wins (post-processing of existing data)

1.2.1 Element Balance Report (High Priority)

  • What: Count planets by element (fire/earth/air/water) with percentages
  • Effort: Trivial -- bucket the 12 planets by sign element
  • Where: New function get_element_balance(planets) in astrology.py (~15 lines)
  • Integration: Add include_overview: bool param to calculate_natal_chart, or new tool get_chart_overview

1.2.2 Modality Balance Report (High Priority)

  • What: Count planets by modality (cardinal/fixed/mutable) with percentages
  • Effort: Trivial -- bucket by sign modality
  • Where: New function get_modality_balance(planets) in astrology.py (~15 lines)

1.2.3 Hemisphere Emphasis (Medium Priority)

  • What: Report which hemisphere (upper/lower/east/west) has most planets
  • Effort: Trivial -- count planets by house ranges (upper=7-12, lower=1-6, etc.)
  • Where: New function get_hemisphere_emphasis(planets) in astrology.py (~15 lines)

1.2.4 Stellium Detection (High Priority)

  • What: Flag any sign or house with 3+ planets
  • Effort: Trivial -- scan planet list for sign/house clusters
  • Where: New function detect_stelliums(planets) in astrology.py (~20 lines)

1.2.5 Empty House List (Low Priority)

  • What: Report which houses have no planets
  • Effort: Trivial -- invert house placement list
  • Where: New function get_empty_houses(planets) in astrology.py (~10 lines)

1.2.6 Chart Ruler Identification (High Priority)

  • What: Return the planet ruling the Ascendant sign, with its sign/house/aspects
  • Effort: Trivial -- sign-to-ruler lookup table (Aries->Mars, Taurus->Venus, etc.), then find that planet in the list
  • Where: New function get_chart_ruler(angles, planets) in astrology.py (~15 lines)

1.2.7 Sun-Moon Aspect (Medium Priority)

  • What: Specifically return the aspect (if any) between Sun and Moon
  • Effort: Trivial -- filter existing aspect list for Sun-Moon pair
  • Where: Filter on calculate_natal_chart output, or param include_big_three_aspects

1.2.8 Top Aspects by Orb (High Priority)

  • What: Return the N tightest aspects (smallest orbs)
  • Effort: Trivial -- aspects already sorted by orb; just add top_n parameter
  • Where: Add top_n: int | None param to calculate_natal_chart

1.2.9 Aspects to Big Three (High Priority)

  • What: Return all aspects involving Sun, Moon, or Ascendant
  • Effort: Trivial -- filter aspect list
  • Where: Add filter_to_big_three: bool param or post-processing function

1.2.10 Aspects to Chart Ruler (Medium Priority)

  • What: Return all aspects involving the chart ruler
  • Effort: Trivial -- filter after identifying ruler
  • Where: Same as above, chained

1.2.11 House Cusp Signs (High Priority)

  • What: Return the sign on each house cusp
  • Effort: Already returned in houses array (each house has sign, degree)
  • Status: Already done, just needs better documentation

1.2.12 House Rulers (Medium Priority)

  • What: For each house, return the ruling planet and its sign/house/condition
  • Effort: Trivial -- sign-to-ruler lookup + planet lookup
  • Where: New function get_house_rulers(houses, planets) in astrology.py (~25 lines)

1.2.13 Planets in Houses Grouping (High Priority)

  • What: Group planets by house for quick house-themed reading
  • Effort: Trivial -- each planet already has house field; just group
  • Where: New function group_planets_by_house(planets) in astrology.py (~10 lines)

1.2.14 Planets in Signs Grouping (High Priority)

  • What: Group planets by sign for quick sign-themed reading
  • Effort: Trivial -- each planet already has sign field; just group
  • Where: New function group_planets_by_sign(planets) in astrology.py (~10 lines)

1.2.15 Angular/Succedent/Cadent Count (Medium Priority)

  • What: Count planets by house type
  • Effort: Trivial -- angular={1,4,7,10}, succedent={2,5,8,11}, cadent={3,6,9,12}
  • Where: New function get_house_type_counts(planets) in astrology.py (~15 lines)

1.2.16 Retrograde Planet List (Medium Priority)

  • What: Return all retrograde planets with sign/house
  • Effort: Trivial -- filter planet list where retrograde=True
  • Where: New function get_retrograde_planets(planets) in astrology.py (~10 lines)

1.2.17 Retrograde Emphasis Flag (Low Priority)

  • What: Flag charts with 3+ retrograde planets
  • Effort: Trivial -- count from retrograde list

1.2.18 Sun/Moon Phase (Low Priority)

  • What: Return the lunar phase at birth
  • Effort: Ephemeris already returns lunar_state.phase_name; just expose it
  • Where: Add to calculate_natal_chart output

1.2.19 Applying/Separation Fix for Natal Chart (Medium Priority)

  • What: The natal chart tool does NOT pass speed_lon to compute_aspects, so applying is always None
  • Effort: Small fix -- pass speed_lon through in the aspect computation loop
  • Where: calculate_natal_chart in tools.py, ~line 170

1.3 Missing -- New Algorithms Needed

1.3.1 Chart Shape Detection (Medium Priority)

  • What: Identify bundle, bowl, bucket, splash, locomotive, seesaw, splay patterns
  • Effort: Moderate -- analyze angular distribution of planets
  • Algorithm: Compute the largest unoccupied arc; classify based on planet clustering
  • Where: New function detect_chart_shape(planets) in astrology.py (~80 lines)

1.3.2 Aspect Pattern Detection (High Priority)

  • What: T-square, Grand Trine, Grand Cross, Yod detection
  • Effort: Moderate -- graph topology analysis on aspect list
  • Algorithm:
    • T-square: find opposition pair, check if both square a common planet
    • Grand trine: find 3 planets all in trine (same element)
    • Grand cross: find 4 planets forming 2 oppositions + 4 squares
    • Yod: find 2 sextile planets both quincunx a third
  • Where: New function detect_aspect_patterns(aspects) in astrology.py (~150 lines)

1.3.3 Saturn/Jupiter Return Flags (Medium Priority)

  • What: Flag if person is currently in Saturn return (~28-30) or Jupiter return (~12 years)
  • Effort: Moderate -- compute approximate return dates from birth date + orbital period, or scan transits
  • Where: New function get_return_dates(birth_datetime, planet) in astrology.py (~40 lines)

1.3.4 Eclipse Proximity (Low Priority)

  • What: Flag if any natal planet is within 5° of current eclipse axis
  • Effort: Needs eclipse data source not currently in ephemeris
  • Status: Deferred -- requires external data

2. KARMIC ASTROLOGY WISHLIST

2.1 Already Implemented (confirmed)

Wishlist Item Status Location
Natal chart calculation DONE calculate_natal_chart
Lunar nodes (North/South) DONE true_node in ephemeris
Planetary positions with retrograde DONE calculate_natal_chart
Aspects between planets DONE compute_aspects
House systems DONE calculate_houses
Transit chart DONE calculate_transit_chart
Synastry chart DONE calculate_synastry_chart
Composite chart DONE calculate_composite_chart
Person database DONE person_manage

2.2 Missing -- Easy Wins (post-processing / filtering)

2.2.1 Node Sign/House Lookup (High Priority)

  • What: Return North & South Node sign, house, degree
  • Effort: Trivial -- true_node is already in planet list; South Node = opposite point
  • Where: New function get_nodal_axis(planets, houses) in astrology.py (~10 lines)

2.2.2 Node Axis Aspects (High Priority)

  • What: Identify all aspects from natal planets to the nodal axis
  • Effort: Trivial -- filter existing aspects for true_node involvement
  • Where: Filter on calculate_natal_chart output, or include_nodal_aspects param

2.2.3 Node Conjunct Planets (High Priority)

  • What: Flag planets conjunct South Node (past-life gifts) and North Node (growth)
  • Effort: Trivial -- filter node axis aspects for conjunction
  • Where: Post-processing of nodal aspects

2.2.4 Node Square Planets (Medium Priority)

  • What: Flag planets square the nodal axis ("skipped steps")
  • Effort: Trivial -- filter node axis aspects for square

2.2.5 Nodal Axis by House (High Priority)

  • What: Return which house the nodal axis falls in
  • Effort: Trivial -- true_node already has house field

2.2.6 Saturn Sign/House (High Priority)

  • What: Return Saturn's sign, house, degree, retrograde status
  • Effort: Trivial -- Saturn is already in planet list
  • Where: New function get_saturn_info(planets) in astrology.py (~10 lines)

2.2.7 Saturn Aspects to Personal Planets (High Priority)

  • What: Identify Saturn hard aspects to Sun, Moon, Venus, Mars
  • Effort: Trivial -- filter aspect list for Saturn + personal planet pairs with hard aspects
  • Where: Filter on calculate_natal_chart output

2.2.8 Saturn Retrograde Flag (Medium Priority)

  • What: Flag Saturn retrograde
  • Effort: Trivial -- check Saturn's retrograde flag

2.2.9 Saturn-Node Aspects (High Priority)

  • What: Identify aspects between Saturn and the nodal axis
  • Effort: Trivial -- filter aspect list for Saturn-true_node pairs

2.2.10 Retrograde Planet List (High Priority)

  • What: Return all retrograde planets with signs/houses
  • Effort: Same as natal wishlist item 1.2.16

2.2.11 12th House Cusp Sign (Medium Priority)

  • What: Return the sign on the 12th house cusp
  • Effort: Trivial -- houses[11] already has this

2.2.12 12th House Planets (Medium Priority)

  • What: List any planets in the 12th house
  • Effort: Trivial -- filter planets where house == 12

2.2.13 12th House Ruler (Low Priority)

  • What: Identify the ruler of the 12th house and its sign/house/aspects
  • Effort: Trivial -- sign ruler lookup + planet lookup

2.2.14 Karmic Synastry Filters (High Priority)

  • What: Saturn-Node, Pluto-Node, Node conjunctions in synastry
  • Effort: Trivial -- filter existing interaspects for these pairs
  • Where: Add karmic_filter: bool param to calculate_synastry_chart

2.2.15 Composite Node/Saturn/Pluto (Medium Priority)

  • What: Return composite chart nodal axis, Saturn, Pluto
  • Effort: Trivial -- already in composite planet list; just surface prominently

2.2.16 Transit Triggers for Karmic Periods (High Priority)

  • What: Saturn/Pluto transits to natal nodes
  • Effort: Extend get_transit_preview with karmic_only: bool filter

2.3 Missing -- New Algorithms Needed

2.3.1 Pluto Polarity Point (PPP) (High Priority)

  • What: Calculate the point opposite Pluto (sign, house, degree)
  • Effort: Trivial -- normalize_degrees(pluto_lon + 180)
  • Where: New function get_pluto_polarity_point(planets, houses) in astrology.py (~10 lines)

2.3.2 Saturn Return Timing (Medium Priority)

  • What: Calculate current/past/future Saturn return dates
  • Effort: Moderate -- Saturn orbital period ~29.5 years; compute from birth date
  • Where: New function get_saturn_return_dates(birth_datetime) in astrology.py (~30 lines)

2.3.3 Node Return Timing (Medium Priority)

  • What: Calculate when transiting nodal axis returns to natal position (~18.6 year cycle)
  • Effort: Moderate -- nodal period ~18.6 years
  • Where: New function get_node_return_dates(birth_datetime) in astrology.py (~20 lines)

2.4 Nice-to-Have (New Tools)

2.4.1 Part of Fortune (Low Priority)

  • What: Arabic Part of Fortune -- sign, house, aspects
  • Effort: Trivial -- formula: ASC + Moon - Sun (in degrees)
  • Where: New function get_part_of_fortune(angles, planets) in astrology.py (~10 lines)

2.4.2 Chiron Position (Low Priority)

  • What: Chiron sign, house, aspects
  • Effort: Trivial -- chiron is already in the ephemeris mock data; confirm real ephemeris returns it
  • Status: Likely already available, needs verification

2.4.3 Vertex Axis (Low Priority)

  • What: Vertex sign/house (fated encounters)
  • Effort: Moderate -- Vertex = intersection of ecliptic with prime vertical, requires astronomical calculation
  • Where: New function calculate_vertex(lst, latitude) in astrology.py (~25 lines)

2.4.4 Fixed Star Conjunctions (Low Priority)

  • What: Major fixed stars conjunct natal planets
  • Effort: Moderate -- need fixed star catalog (Aldebaran, Regulus, Spica, Antares, etc.) + conjunction check
  • Where: New data file + new function in astrology.py (~100 lines)

2.4.5 Planetary Nodes (Low Priority)

  • What: Nodes of Pluto, Saturn, etc. (Jeffrey Wolf Green's evolutionary astrology)
  • Effort: Complex -- requires specialized astronomical data not in standard ephemeris
  • Status: Deferred

3. RELATIONSHIP ASTROLOGY WISHLIST

3.1 Already Implemented (confirmed)

Wishlist Item Status Location
Natal chart calculation DONE calculate_natal_chart
Synastry chart (interchart aspects, house overlays) DONE calculate_synastry_chart
Composite chart calculation DONE calculate_composite_chart
Person database DONE person_manage
Aspect calculation with configurable orbs DONE compute_aspects
House systems DONE calculate_houses
Transit chart calculation DONE calculate_transit_chart

3.2 Missing -- Easy Wins (post-processing / filtering)

3.2.1 Interchart Aspects Matrix (High Priority)

  • What: Full matrix of aspects between all planets of Person A and Person B
  • Effort: Already computed as interaspects in calculate_synastry_chart
  • Status: Done, just needs better surfacing

3.2.2 House Overlay Report (High Priority)

  • What: For each planet in Chart A, report which house it falls in Chart B (and vice versa)
  • Effort: Already computed as house_overlays in calculate_synastry_chart
  • Status: Done

3.2.3 Top Synastry Aspects (High Priority)

  • What: Return the 10-15 tightest/most significant interchart aspects
  • Effort: Trivial -- interaspects already sorted by orb; add top_n param

3.2.4 Relationship Significator Aspects (High Priority)

  • What: Venus-Mars, Moon-Venus, Sun-Moon, Sun-Saturn interchart aspects
  • Effort: Trivial -- filter interaspects for these planet pairs
  • Where: Add significator_filter: bool param to calculate_synastry_chart

3.2.5 Saturn Synastry Aspects (High Priority)

  • What: Flag all Saturn interchart aspects to personal planets and nodes
  • Effort: Trivial -- filter for Saturn as person1_planet or person2_planet

3.2.6 Node Synastry Aspects (High Priority)

  • What: Flag all interchart aspects to the nodal axes
  • Effort: Trivial -- filter for true_node involvement

3.3 Missing -- New Tools Needed

3.3.1 Full Davison Chart Calculation (High Priority)

  • What: Calculate the midpoint-in-time-and-space chart with full planetary positions, houses, angles, aspects
  • Current state: calculate_synastry_chart returns Davison midpoint coordinates (date_jd, lat, lon) but does NOT compute planets, houses, or aspects for the Davison chart
  • Effort: Moderate -- compute sky state at Davison midpoint datetime + location, then calculate full chart
  • Where: New tool calculate_davison_chart in tools.py, reusing calculate_natal_chart logic (~150 lines)

3.3.2 Davison Transit Preview (Medium Priority)

  • What: Transit-to-Davison chart aspect snapshots over a date range
  • Effort: Moderate -- reuse get_transit_preview with Davison chart positions
  • Where: New tool get_davison_transit_preview in tools.py (~80 lines)

3.3.3 Composite Transit Report (Medium Priority)

  • What: Transits to composite chart planets/angles for timing
  • Effort: Moderate -- reuse get_transit_preview with composite planet positions
  • Where: New tool get_composite_transit_preview in tools.py (~80 lines)

3.3.4 Composite Enhanced Interpretation (Medium Priority)

  • What: Composite planet meanings, angular planets, unaspected planets, house emphasis, chart ruler
  • Effort: Moderate -- post-processing of existing composite chart data
  • Where: New function analyze_composite_chart(composite_data) in astrology.py (~100 lines)

3.3.5 Karmic Relationship Synthesis (Medium Priority)

  • What: Combine synastry + composite + Davison karmic indicators into structured report
  • Effort: Moderate -- aggregate filtering across all three chart types
  • Where: New tool get_karmic_relationship_summary in tools.py (~100 lines)

3.4 Nice-to-Have (Complex / Low Priority)

3.4.1 Coalescent Chart (Low Priority)

  • What: Lawrence Grinnell's harmonic coalescent method
  • Effort: Complex -- compute harmonic numbers from planet pair arcs
  • Where: New algorithm in astrology.py (~150 lines)

3.4.2 Relationship Type Classifier (Low Priority)

  • What: Classify relationship type (romantic, business, family, friendship, karmic)
  • Effort: Heuristic scoring based on aspect patterns
  • Where: New function in astrology.py (~80 lines)

3.4.3 Compatibility Score (Low Priority)

  • What: Category scores (emotional, sexual, intellectual, commitment, spiritual)
  • Effort: Heuristic weighting of aspect types
  • Where: New function in astrology.py (~100 lines)

3.4.4 Synthesis Transit Preview (Low Priority)

  • What: Combine transit-to-natal (both people) + transit-to-composite/Davison
  • Effort: Aggregation of existing transit data
  • Where: New tool combining existing transit previews (~60 lines)

3.4.5 Eclipse Activation of Relationship Charts (Low Priority)

  • What: Flag eclipses hitting composite/Davison angles or personal planets
  • Effort: Needs eclipse data source
  • Status: Deferred

4. CONSOLIDATED PRIORITY MATRIX

Tier 1: Post-Processing Only (Easiest -- add params to existing tools)

Pure filtering/bucketing of data already returned by existing tools.

# Feature Wishlist(s) Effort
1 Element/Modality/Hemisphere balance Natal ~45 lines
2 Stellium detection Natal ~20 lines
3 Chart ruler identification Natal ~15 lines
4 Top aspects by orb Natal param only
5 Aspects to Big Three / chart ruler Natal param only
6 House rulers Natal ~25 lines
7 Planets in houses/signs grouping Natal ~20 lines
8 Angular/succedent/cadent count Natal ~15 lines
9 Retrograde planet list Natal, Karmic ~10 lines
10 Node axis aspects Karmic param only
11 Saturn aspects to personal planets Karmic param only
12 Saturn-Node aspects Karmic param only
13 12th house analysis Karmic ~15 lines
14 Top synastry aspects Relationship param only
15 Relationship significator aspects Relationship param only
16 Saturn/Node synastry filtering Relationship param only
17 Lunar phase at birth Natal expose existing
18 Applying/separating fix for natal Natal bug fix

Tier 2: New Functions in astrology.py (Moderate -- pure math)

New algorithms that operate on existing data structures.

# Feature Wishlist(s) Effort
19 Chart shape detection Natal ~80 lines
20 Aspect pattern detection Natal ~150 lines
21 Pluto Polarity Point Karmic ~10 lines
22 Part of Fortune Karmic ~10 lines
23 Vertex axis Karmic ~25 lines
24 Saturn return dates Natal, Karmic ~30 lines
25 Node return dates Karmic ~20 lines
26 Composite enhanced analysis Relationship ~100 lines

Tier 3: New MCP Tools (More involved -- require ephemeris calls)

New tools that make additional ephemeris calls.

# Feature Wishlist(s) Effort
27 Full Davison chart Relationship ~150 lines
28 Composite transit preview Relationship ~80 lines
29 Davison transit preview Relationship ~80 lines
30 Karmic relationship synthesis Relationship, Karmic ~100 lines

Tier 4: Nice-to-Have (Complex or needs external data)

# Feature Wishlist(s) Effort
31 Coalescent chart Relationship ~150 lines
32 Fixed star conjunctions Karmic ~100 lines + data
33 Relationship type classifier Relationship ~80 lines
34 Compatibility scoring Relationship ~100 lines
35 Eclipse proximity/activation Natal, Relationship needs data source
36 Planetary nodes Karmic needs special data

5. KEY ARCHITECTURAL RECOMMENDATIONS

5.1 Consolidate Post-Processing into a Chart Overview Tool

Rather than adding 15 boolean params to calculate_natal_chart, create a single new tool:

get_chart_overview(person_id_or_birth_data, include_karmic=false, include_patterns=false)

This tool would call calculate_natal_chart internally, then run all post-processing functions on the result. Keeps the base tool clean and provides a rich analysis layer on top.

5.2 Add Analysis Params to Synastry

Add optional params to calculate_synastry_chart:

  • top_n_aspects: int | None -- limit interaspects to top N by orb
  • karmic_filter: bool -- only return Saturn/Pluto/Node interaspects
  • significator_filter: bool -- only return Venus-Mars, Moon-Venus, Sun-Moon, Sun-Saturn

5.3 Fix Natal Chart Applying/Separating

The natal chart tool should pass speed_lon to compute_aspects so the applying field is populated. This is a bug/omission, not a new feature.

5.4 Davison Chart is the Biggest Gap

The synastry tool returns Davison midpoint coordinates but not a full chart. A calculate_davison_chart tool is the highest-priority new tool -- it reuses existing ephemeris + astrology logic with the midpoint datetime/location.

5.5 Agent Guides Already Exist

The agent-guides/ directory already contains detailed interpretation guides for natal, karmic, and relationship astrology. These guides are consumed by agents, not by the MCP server. The MCP server's job is to provide the raw computational data; the guides tell agents how to interpret it. This analysis focuses on the computational layer only.