Skip to content
docs
UseBuildChangelog
Open Lumin
All tools

Event timing

Two Chart Election (Lumin extension)

find_joint_election_window

Elect a moment against two charts, for a wedding, a jointly signed contract, a co-purchase, or an IVF transfer. IMPORTANT, SAY THIS WHEN YOU USE IT: two chart election is a LUMIN EXTENSION, not KP canon. The KP corpus contains exactly one worked two chart election in 6,465 pages and it is a single chart election with a post hoc check of the second chart, with no rule at all for what to do when the two disagree. The default mode 'single-chart-with-check' reproduces that pattern: the moment is elected from the primary chart, then the secondary chart is evaluated at the same instant and reported as CONFIRMS, PARTIAL or CONTRADICTS. The 'both-charts-must-agree' mode returns only mutually confirmed windows and is our invention. Returns '{ mode, primary, secondary, windows: [{ ...window, secondaryCheck: { layersSatisfied, agreement, note } }], extensionNote, disclaimer, summary }'.

Parameters

NameTypeRequiredDescription
birth_datetimestringYesBirth date and time in ISO 8601 format (e.g., "1990-05-15T14:30:00").
latitudenumberYesBirth location latitude. Range: -90 to 90.
longitudenumberYesBirth location longitude. Range: -180 to 180.
utc_offset_minutesnumberYesUTC offset in minutes (e.g., 330 for IST, -300 for EST).
ayanamsaenum: kp | kp_new | lahiri | raman | true_chitra | khullarNoAyanamsa system. Defaults to kp.
eventstringYesWhat is being elected, for example 'marriage' or 'sign an agreement'.
person2objectNoThe second chart. The election is derived from the FIRST chart and checked against this one.
modeenum: single-chart-with-check | both-charts-must-agreeNoDefault single-chart-with-check, which is the only pattern the corpus actually works.
primary_rolestringNoLabel for the first person, for example 'bride'.
secondary_rolestringNoLabel for the second person, for example 'groom'.
scan_startstringNoFirst moment to consider, ISO 8601. Defaults to now.
scan_daysnumberNoDays to scan. Clamped by granularity: 365 day, 90 hour, 30 minute. Default 7.
granularityenum: day | hour | minuteNono description
preferred_time_of_dayobjectNoWhat this window is, for example "office hours" or "before the registrar closes". Echoed back in the response.
event_latitudenumberNoLatitude of where the event happens. Defaults to the first person's birth latitude.
event_longitudenumberNoLongitude of where the event happens.
event_utc_offset_minutesnumberNoUTC offset at the event location, in minutes.
max_windowsnumberNono description

Example call

Send the request as a standard MCP tools/call:

http
POST https://mcp.lumin.guru/mcp
Authorization: Bearer mcp_yourkey...
Accept: application/json, text/event-stream
Content-Type: application/json

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "find_joint_election_window",
    "arguments": {
      "birth_datetime": "1992-08-14T04:32:00",
      "latitude": 6.927,
      "longitude": 79.861,
      "utc_offset_minutes": 330,
      "ayanamsa": "kp",
      "event": "Marriage"
    }
  }
}

Birth data

This tool requires birth data on every call. The MCP server is stateless, so calling set_birth_profile first validates the data and returns the reading plan, but it does not store anything. Repeat the same five fields here.