@openephemeris/mcp-server 3.3.3 → 3.4.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.
|
@@ -110,16 +110,19 @@ registerTool({
|
|
|
110
110
|
registerTool({
|
|
111
111
|
name: "ephemeris_planetary_return",
|
|
112
112
|
description: "Calculate a planetary return — when any planet returns to its natal longitude. " +
|
|
113
|
-
"Useful for Jupiter returns (~12 years), Saturn returns (~29 years),
|
|
113
|
+
"Useful for Jupiter returns (~12 years), Saturn returns (~29 years), Chiron returns (~50 years), " +
|
|
114
|
+
"Uranus returns (~84 years), etc.\n\n" +
|
|
114
115
|
"CREDIT COST: 1 credit per call.\n\n" +
|
|
115
116
|
"EXAMPLE: Saturn return for birth 1990-04-15 near year 2019:\n" +
|
|
116
|
-
" body='saturn', birth_datetime='1990-04-15T14:30:00', target_datetime='2019-01-01'"
|
|
117
|
+
" body='saturn', birth_datetime='1990-04-15T14:30:00', target_datetime='2019-01-01'\n" +
|
|
118
|
+
"EXAMPLE: Chiron return for birth 1975-03-10 near age 50:\n" +
|
|
119
|
+
" body='chiron', birth_datetime='1975-03-10T08:00:00', target_datetime='2025-01-01'",
|
|
117
120
|
inputSchema: {
|
|
118
121
|
type: "object",
|
|
119
122
|
properties: {
|
|
120
123
|
body: {
|
|
121
124
|
type: "string",
|
|
122
|
-
description: "Planet name: sun, moon, mercury, venus, mars, jupiter, saturn.",
|
|
125
|
+
description: "Planet name: sun, moon, mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto, chiron, pholus.",
|
|
123
126
|
},
|
|
124
127
|
birth_datetime: {
|
|
125
128
|
type: "string",
|
|
@@ -8,6 +8,13 @@ registerTool({
|
|
|
8
8
|
"finding optimal timing windows.\n\n" +
|
|
9
9
|
"HOW IT WORKS: This tool first calculates the natal chart to extract your actual planetary " +
|
|
10
10
|
"ecliptic longitudes, then searches for transiting planets crossing those exact degrees.\n\n" +
|
|
11
|
+
"ASPECT ANGLES: Use aspect_angle to search for specific aspects to natal positions:\n" +
|
|
12
|
+
" 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine.\n" +
|
|
13
|
+
" Example: Saturn Return → transiting_planets=['saturn'], natal_points=['saturn'], aspect_angle=0\n" +
|
|
14
|
+
" Example: Uranus Opposition → transiting_planets=['uranus'], natal_points=['uranus'], aspect_angle=180\n" +
|
|
15
|
+
" Example: Chiron Return → transiting_planets=['chiron'], natal_points=['chiron'], aspect_angle=0\n\n" +
|
|
16
|
+
"SUPPORTED BODIES: Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, " +
|
|
17
|
+
"Pluto, Chiron, Pholus, Ceres, Pallas, Juno, Vesta, MeanNode.\n\n" +
|
|
11
18
|
"CREDIT COST: 6 credits per call (1 for natal + 5 for transit search).\n\n" +
|
|
12
19
|
"EXAMPLE: Find all Saturn transits to the natal Sun/Moon for the next 6 months:\n" +
|
|
13
20
|
" natal_datetime='1990-04-15T14:30:00', natal_latitude=41.8781, natal_longitude=-87.6298,\n" +
|
|
@@ -38,13 +45,19 @@ registerTool({
|
|
|
38
45
|
transiting_planets: {
|
|
39
46
|
type: "array",
|
|
40
47
|
items: { type: "string" },
|
|
41
|
-
description: "List of transiting planet IDs to search. E.g. ['saturn', 'jupiter', 'uranus', 'pluto']. " +
|
|
48
|
+
description: "List of transiting planet IDs to search. E.g. ['saturn', 'jupiter', 'uranus', 'pluto', 'chiron']. " +
|
|
42
49
|
"Omit to search all outer planets.",
|
|
43
50
|
},
|
|
44
51
|
natal_points: {
|
|
45
52
|
type: "array",
|
|
46
53
|
items: { type: "string" },
|
|
47
|
-
description: "Natal point IDs whose exact longitudes should be targeted. E.g. ['sun', 'moon', 'asc', 'mc']. Omit for all core points.",
|
|
54
|
+
description: "Natal point IDs whose exact longitudes should be targeted. E.g. ['sun', 'moon', 'asc', 'mc', 'saturn', 'chiron']. Omit for all core points.",
|
|
55
|
+
},
|
|
56
|
+
aspect_angle: {
|
|
57
|
+
type: "number",
|
|
58
|
+
description: "Aspect angle in degrees to apply to each natal longitude. 0 = conjunction/return (default), " +
|
|
59
|
+
"180 = opposition, 90 = square, 120 = trine. The effective search target becomes " +
|
|
60
|
+
"(natal_longitude + aspect_angle) mod 360.",
|
|
48
61
|
},
|
|
49
62
|
},
|
|
50
63
|
required: ["natal_datetime", "natal_latitude", "natal_longitude", "start_date", "end_date"],
|
|
@@ -119,11 +132,21 @@ registerTool({
|
|
|
119
132
|
};
|
|
120
133
|
if (args.transiting_planets)
|
|
121
134
|
transitBody.planet_names = args.transiting_planets;
|
|
135
|
+
// When aspect_angle is provided, apply offset to compute effective target degrees
|
|
136
|
+
// (natal_lon + aspect_angle) mod 360 for each natal point
|
|
137
|
+
let effectiveTargets = targetDegrees;
|
|
138
|
+
if (typeof args.aspect_angle === "number" && args.aspect_angle !== 0) {
|
|
139
|
+
effectiveTargets = targetDegrees.map((deg) => ((deg + args.aspect_angle) % 360 + 360) % 360);
|
|
140
|
+
transitBody.target_degrees = effectiveTargets;
|
|
141
|
+
// Also include aspect metadata for labeling in results
|
|
142
|
+
transitBody.search_criteria = { aspect_angle: args.aspect_angle };
|
|
143
|
+
}
|
|
122
144
|
const transitResult = await backendClient.request("POST", "/predictive/transits/search", { data: transitBody });
|
|
123
145
|
// Return combined context so the LLM knows what natal positions were targeted
|
|
124
146
|
return {
|
|
125
147
|
natal_positions: natalPositionMap,
|
|
126
|
-
target_degrees_used:
|
|
148
|
+
target_degrees_used: effectiveTargets,
|
|
149
|
+
aspect_angle: args.aspect_angle ?? 0,
|
|
127
150
|
transit_results: transitResult,
|
|
128
151
|
};
|
|
129
152
|
},
|