@openephemeris/mcp-server 4.14.3 → 4.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/tools/specialized/electional.js +18 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ Version numbering follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [4.15.0] — 2026-09-03
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **`electional_angle_crossings` gains `natal_datetime`.** Pass a zoned natal instant and the search
|
|
14
|
+
finds when the **secondary-progressed** positions of Sun, Moon, Mercury, Venus, Mars and the lunar
|
|
15
|
+
nodes reach an angle at the place — the same body set and day-for-a-year formula the hybrid CCG
|
|
16
|
+
transit map draws with — while slower bodies stay transits. Progressed crossings carry
|
|
17
|
+
`progressed: true` and `search_summary.progression` names the mode, the natal instant and the
|
|
18
|
+
bodies progressed. Omit the parameter for the plain transit search, which is unchanged.
|
|
19
|
+
|
|
10
20
|
## [4.14.3] — 2026-09-02
|
|
11
21
|
|
|
12
22
|
### Fixed
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { registerTool, validateRequired } from "../index.js";
|
|
2
2
|
import { getActiveClient } from "../../backend/client.js";
|
|
3
3
|
import { OUTPUT_SCHEMA_JSON } from "../output-schemas.js";
|
|
4
|
-
import { WINDOW_DATE_DESC } from "../datetime.js";
|
|
4
|
+
import { DATETIME_DESC, WINDOW_DATE_DESC, localToUtcIso, timezoneProperty } from "../datetime.js";
|
|
5
5
|
// All electional endpoints are GET endpoints with query params.
|
|
6
6
|
// GET /electional/find-window — already existed, keeping it
|
|
7
7
|
registerTool({
|
|
@@ -279,6 +279,10 @@ registerTool({
|
|
|
279
279
|
"Crossing times use the same in-mundo geometry as the astrocartography line engine, so casting a " +
|
|
280
280
|
"map at a returned moment puts that line through the query point. Circumpolar cases (a body that " +
|
|
281
281
|
"never rises or never sets at that latitude) simply return no event.\n\n" +
|
|
282
|
+
"PROGRESSED (hybrid) lines: pass natal_datetime to search the SECONDARY-PROGRESSED positions of " +
|
|
283
|
+
"Sun, Moon, Mercury, Venus, Mars and the lunar nodes — the same body set and formula the CCG hybrid " +
|
|
284
|
+
"transit map (/acg/ccg mode=ccg_hybrid) draws with; every other body stays a transit. Progressed " +
|
|
285
|
+
"crossings carry progressed: true and search_summary.progression names what was progressed.\n\n" +
|
|
282
286
|
"CREDIT COST: 5 credits per call.\n\n" +
|
|
283
287
|
"EXAMPLE: When does Mercury cross the Descendant over Warsaw on 2026-07-30?\n" +
|
|
284
288
|
" latitude=52.2297, longitude=21.0122, bodies='Mercury', angles='DC',\n" +
|
|
@@ -320,6 +324,14 @@ registerTool({
|
|
|
320
324
|
type: "number",
|
|
321
325
|
description: "Maximum number of crossing events to return (default 5000).",
|
|
322
326
|
},
|
|
327
|
+
natal_datetime: {
|
|
328
|
+
type: "string",
|
|
329
|
+
description: "Optional natal (birth) instant. When given, Sun, Moon, Mercury, Venus, Mars and the lunar " +
|
|
330
|
+
"nodes are secondary-progressed from it (day-for-a-year) and the search finds when their " +
|
|
331
|
+
"PROGRESSED position reaches the angle — the line a hybrid CCG map paints. Slow bodies " +
|
|
332
|
+
"(Jupiter outward) are unaffected. Omit for the plain transit search. " + DATETIME_DESC,
|
|
333
|
+
},
|
|
334
|
+
natal_timezone: timezoneProperty("the natal birth location", "Europe/London"),
|
|
323
335
|
format: {
|
|
324
336
|
type: "string",
|
|
325
337
|
enum: ["json", "llm"],
|
|
@@ -349,6 +361,11 @@ registerTool({
|
|
|
349
361
|
query.refraction_correction = args.refraction_correction;
|
|
350
362
|
if (args.max_results !== undefined)
|
|
351
363
|
query.max_results = args.max_results;
|
|
364
|
+
// A naive birth time plus its zone is a legitimate call (the datetime
|
|
365
|
+
// contract); the API's GET takes one zoned instant, so resolve here.
|
|
366
|
+
if (args.natal_datetime) {
|
|
367
|
+
query.natal_datetime = localToUtcIso("natal_datetime", args.natal_datetime, args.natal_timezone, "natal_timezone");
|
|
368
|
+
}
|
|
352
369
|
if (args.format)
|
|
353
370
|
query.format = args.format;
|
|
354
371
|
return await getActiveClient().request("GET", "/electional/angle-crossings", {
|