Event timing
Event Timing (v2)
find_event_timing_v2
Enhanced KP event timing: checks all 3 dasha levels (MD+AD+PD must jointly signify required houses), filters against the Ruling Planets of the moment of judgement (fruitful significators only; 'judgement_datetime', default now, KP Reader 4; the birth-moment set rides beside it as 'atBirth'), integrates transit hierarchy for year/month/day narrowing. Use this instead of find_event_timing for precise, methodologically correct KP timing. Returns '{ event, isPromised, promise, fruitful[], candidatePeriods: [{ md, ad, pd, start, end, coverage, fruitful, confidence, subLordJudgement, strictSelection }], confidenceProvenance, subLordRule, kskSubCleared, candidateOrderings, strictSelectionRule, transitTiming, transitTimingFor, summary, pagination, pageNote }'. 'transitTimingFor' names the candidate 'transitTiming' narrows: the first in list order still running at the moment of judgement, scanned from no earlier than that moment (F260). 'candidateOrderings' states two orders of the same candidates as variants, each a list of 'candidateIndexes' with a methodology note (what it does, its source class and locus, how it differs): 'lumin-confidence', the default and the list's own order, labelled through 'scoreProvenance'; and 'ksk-sub-lord-first', the candidates whose three sub lords all give ahead of the rest, each tier earliest first (Reader 3 canon p.151, Reader 6 canon p.294). Name the order you quote; never blend them. 'promise.coverageGrade' (full/strong/thin/none) is a GRADE: only 'none', the cuspal sub lord reaching no required house, denies (F057; this tool kept a 50% denial until 2026-09-11). 'promise.cslMotion' reports whether the cuspal sub lord is retrograde and, if so, the dates it turns direct and re-crosses its turning degree (F063); reported, gating nothing. **'candidatePeriods' is paged and ordered by 'confidence'**, a Lumin ordering convention and not a KP quantity ('confidenceProvenance' names its weights as unsourced); page on when the user's real-world constraint rules the first windows out. **Read the sub lord before the order.** KSK judges every period lord by its sub lord (Reader 3 canon p.151, Reader 6 canon p.294): each candidate's 'subLordJudgement' gives, for the MD, AD and PD lords, the sub lord, the houses it signifies and 'gives | negates | silent', and 'kskSubCleared' lists the candidates whose three sub lords all give, earliest first, beside the ordered list and never instead of it. On the 48-chart spread 23.6% of candidate periods carry a lord whose sub lord reaches no required house (every candidate, measured 2026-10-08; it read 31.9% over the first ten before that list was uncapped), 24.4% of top-ranked candidates ('scripts/bp019-dasha-sublord.ts'). 'strictSelection' per candidate tests each lord on the two clauses Astrology for Beginners canon p.318 states (posited 6/8/12 to the matter; in the sub of a planet in a detrimental house), reported, removing nothing. Dates are ISO instants. 'judgement.holdsUntil' is the next instant those Ruling Planets change, solved and never a score: 'instant' in UTC, 'local' with the offset in force then only when 'judgement_time_zone' is sent, otherwise with the judgement's own offset (read 'utcOffsetSource'), and 'changes' naming the member (the Ascendant's or the Moon's sign or star lord, or the day lord at sunrise at the place) with its old and new lord. The 'fruitful' flags hold until that instant; say so when you quote them.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| birth_datetime | string | Yes | Birth date and time in ISO 8601 format (e.g., "1990-05-15T14:30:00"). |
| latitude | number | Yes | Birth location latitude. Range: -90 to 90. |
| longitude | number | Yes | Birth location longitude. Range: -180 to 180. |
| utc_offset_minutes | number | Yes | UTC offset in minutes (e.g., 330 for IST, -300 for EST). |
| ayanamsa | enum: kp | kp_new | lahiri | raman | true_chitra | khullar | No | Ayanamsa system. Defaults to kp. |
| event | event name | No | Life event to find timing for. If omitted, the engine derives the most active event from the running MD+AD lord's signification with Ruling Planets tie-break, and returns it in the eventResolution field. Ignored if house_group is provided. |
| house_group | array<house number (1-12)> | No | Override event lookup with explicit house numbers (1-12). When provided, event is ignored. |
| denial_group | array<house number (1-12)> | No | Houses that DENY the event (e.g., [1,5,9] deny marriage). Only used with house_group. If unsure, omit. The engine derives denial houses automatically from the event name. |
| judgement_datetime | string | No | The moment the matter is judged, local wall clock at the birth place unless judgement_latitude/longitude are given (e.g. 2026-09-27T12:00:00). Defaults to now. KP selects fruitful significators with the Ruling Planets of THIS moment (KP Reader 4), not the birth moment. |
| judgement_latitude | number | No | Latitude of the place of judgement. Defaults to the birth latitude. |
| judgement_longitude | number | No | Longitude of the place of judgement. Defaults to the birth longitude. |
| judgement_utc_offset_minutes | number | No | UTC offset of the place of judgement in minutes. Defaults to the birth offset when the place defaults to the birth place. |
| judgement_time_zone | string | No | IANA time zone of the place of judgement (e.g. "Asia/Colombo"), instead of judgement_utc_offset_minutes: the offset in force there at judgement_datetime is read from the tz database. If both are given they must agree. |
Example call
Send the request as a standard MCP tools/call:
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_event_timing_v2",
"arguments": {
"birth_datetime": "1992-08-14T04:32:00",
"latitude": 6.927,
"longitude": 79.861,
"utc_offset_minutes": 330,
"ayanamsa": "kp"
}
}
}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.