caelus-mcp 0.1.1 → 0.2.1
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/README.md +80 -0
- package/dist/src/server.d.ts +366 -41
- package/dist/src/server.js +23 -10
- package/package.json +3 -3
package/README.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# caelus-mcp
|
|
2
|
+
|
|
3
|
+
MCP server for the [caelus](https://github.com/heavyblotto/caelus) ephemeris
|
|
4
|
+
engine: six chart tools over stdio. Computation only — positions, houses,
|
|
5
|
+
aspects with orbs — the model does the interpreting. No API keys, no
|
|
6
|
+
ephemeris files, no network calls; the engine data ships inside the package.
|
|
7
|
+
|
|
8
|
+
## Setup
|
|
9
|
+
|
|
10
|
+
Any MCP client that speaks stdio:
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"mcpServers": {
|
|
15
|
+
"caelus": { "command": "npx", "args": ["caelus-mcp"] }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- **Claude Desktop** — `claude_desktop_config.json`
|
|
21
|
+
- **Cursor** — `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global)
|
|
22
|
+
- **Anything else** — spawn `npx caelus-mcp` and speak JSON-RPC over stdio
|
|
23
|
+
|
|
24
|
+
## Tools
|
|
25
|
+
|
|
26
|
+
| tool | what it answers |
|
|
27
|
+
|------|-----------------|
|
|
28
|
+
| `natal_chart` | A person's birth chart: 13 bodies with sign, house, retrograde, speed; ASC/MC; cusps; aspects |
|
|
29
|
+
| `current_sky` | The sky at a moment and place (defaults to now), not tied to a person |
|
|
30
|
+
| `transits` | Transiting planets vs a natal chart: aspects within orb, applying/separating, natal house per body |
|
|
31
|
+
| `synastry` | Two charts compared: inter-chart aspects, house overlays both ways |
|
|
32
|
+
| `find_aspect_dates` | Exact dates a transiting body aspects a longitude or another body, retrograde re-hits included |
|
|
33
|
+
| `rectification_grid` | ASC/MC sweep across a window of hours for birth-time rectification |
|
|
34
|
+
|
|
35
|
+
Bodies: sun through pluto, chiron, mean and true node. House systems:
|
|
36
|
+
placidus (default), whole_sign, equal, porphyry. Placidus falls back to
|
|
37
|
+
whole_sign above the polar circles and says so in the payload.
|
|
38
|
+
|
|
39
|
+
## Output
|
|
40
|
+
|
|
41
|
+
Token-frugal JSON: terse keys, positions to 0.01°, a full natal chart is
|
|
42
|
+
~2.5 KB. Each aspect is a structured object the client can use directly:
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{ "a": "moon", "b": "venus", "aspect": "trine", "orb": 2.09 }
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
A `natal_chart` or `current_sky` response feeds
|
|
49
|
+
[caelus-wheel](https://www.npmjs.com/package/caelus-wheel)'s `<ChartWheel>`
|
|
50
|
+
directly — no adapter:
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
const payload = JSON.parse(result.content[0].text);
|
|
54
|
+
<ChartWheel chart={payload} size={520} />
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Dates are UT
|
|
58
|
+
|
|
59
|
+
Tools take ISO 8601 UTC date-times. Convert local birth times first — the
|
|
60
|
+
tool descriptions instruct the model to do this, and
|
|
61
|
+
[caelus-birth](https://www.npmjs.com/package/caelus-birth) does it correctly
|
|
62
|
+
in code (historical tzdb rules, DST edge cases flagged). Longitude is
|
|
63
|
+
east-positive everywhere; the Americas are negative.
|
|
64
|
+
|
|
65
|
+
## Accuracy
|
|
66
|
+
|
|
67
|
+
Checked against Swiss Ephemeris across 1900–2099: Sun–Saturn ≤1″,
|
|
68
|
+
Uranus ≤1.9″, Neptune ≤4.6″, Moon ≤2.5″, Pluto ≤2.5″ (series valid
|
|
69
|
+
1885–2099), Chiron ≤1″, nodes ≤1″. Tables:
|
|
70
|
+
[ephemengine.com/validation](https://ephemengine.com/validation).
|
|
71
|
+
|
|
72
|
+
## The caelus packages
|
|
73
|
+
|
|
74
|
+
- [caelus](https://www.npmjs.com/package/caelus) — the engine
|
|
75
|
+
- [caelus-birth](https://www.npmjs.com/package/caelus-birth) — local birth time + place → UT
|
|
76
|
+
- [caelus-wheel](https://www.npmjs.com/package/caelus-wheel) — React SVG chart wheel
|
|
77
|
+
- caelus-mcp — this package
|
|
78
|
+
|
|
79
|
+
Spec and design notes:
|
|
80
|
+
[MCP_SPEC.md](https://github.com/heavyblotto/caelus/blob/main/MCP_SPEC.md).
|
package/dist/src/server.d.ts
CHANGED
|
@@ -53,7 +53,22 @@ export declare const chartOut: z.ZodObject<{
|
|
|
53
53
|
mcPos: string;
|
|
54
54
|
}>;
|
|
55
55
|
cusps: z.ZodArray<z.ZodNumber, "many">;
|
|
56
|
-
aspects: z.ZodArray<z.
|
|
56
|
+
aspects: z.ZodArray<z.ZodObject<{
|
|
57
|
+
a: z.ZodString;
|
|
58
|
+
b: z.ZodString;
|
|
59
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
60
|
+
orb: z.ZodNumber;
|
|
61
|
+
}, "strip", z.ZodTypeAny, {
|
|
62
|
+
a: string;
|
|
63
|
+
b: string;
|
|
64
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
65
|
+
orb: number;
|
|
66
|
+
}, {
|
|
67
|
+
a: string;
|
|
68
|
+
b: string;
|
|
69
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
70
|
+
orb: number;
|
|
71
|
+
}>, "many">;
|
|
57
72
|
}, "strip", z.ZodTypeAny, {
|
|
58
73
|
utc: string;
|
|
59
74
|
houses: "placidus" | "whole_sign" | "equal" | "porphyry";
|
|
@@ -71,7 +86,12 @@ export declare const chartOut: z.ZodObject<{
|
|
|
71
86
|
mcPos: string;
|
|
72
87
|
};
|
|
73
88
|
cusps: number[];
|
|
74
|
-
aspects:
|
|
89
|
+
aspects: {
|
|
90
|
+
a: string;
|
|
91
|
+
b: string;
|
|
92
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
93
|
+
orb: number;
|
|
94
|
+
}[];
|
|
75
95
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
76
96
|
houses_fallback_reason?: string | undefined;
|
|
77
97
|
}, {
|
|
@@ -91,7 +111,12 @@ export declare const chartOut: z.ZodObject<{
|
|
|
91
111
|
mcPos: string;
|
|
92
112
|
};
|
|
93
113
|
cusps: number[];
|
|
94
|
-
aspects:
|
|
114
|
+
aspects: {
|
|
115
|
+
a: string;
|
|
116
|
+
b: string;
|
|
117
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
118
|
+
orb: number;
|
|
119
|
+
}[];
|
|
95
120
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
96
121
|
houses_fallback_reason?: string | undefined;
|
|
97
122
|
}>;
|
|
@@ -110,7 +135,25 @@ export declare const transitsOut: z.ZodObject<{
|
|
|
110
135
|
natal_house: number;
|
|
111
136
|
rx?: boolean | undefined;
|
|
112
137
|
}>>;
|
|
113
|
-
aspects_to_natal: z.ZodArray<z.
|
|
138
|
+
aspects_to_natal: z.ZodArray<z.ZodObject<{
|
|
139
|
+
t: z.ZodString;
|
|
140
|
+
n: z.ZodString;
|
|
141
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
142
|
+
orb: z.ZodNumber;
|
|
143
|
+
applying: z.ZodBoolean;
|
|
144
|
+
}, "strip", z.ZodTypeAny, {
|
|
145
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
146
|
+
orb: number;
|
|
147
|
+
t: string;
|
|
148
|
+
n: string;
|
|
149
|
+
applying: boolean;
|
|
150
|
+
}, {
|
|
151
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
152
|
+
orb: number;
|
|
153
|
+
t: string;
|
|
154
|
+
n: string;
|
|
155
|
+
applying: boolean;
|
|
156
|
+
}>, "many">;
|
|
114
157
|
}, "strip", z.ZodTypeAny, {
|
|
115
158
|
transit_utc: string;
|
|
116
159
|
transiting: Record<string, {
|
|
@@ -118,7 +161,13 @@ export declare const transitsOut: z.ZodObject<{
|
|
|
118
161
|
natal_house: number;
|
|
119
162
|
rx?: boolean | undefined;
|
|
120
163
|
}>;
|
|
121
|
-
aspects_to_natal:
|
|
164
|
+
aspects_to_natal: {
|
|
165
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
166
|
+
orb: number;
|
|
167
|
+
t: string;
|
|
168
|
+
n: string;
|
|
169
|
+
applying: boolean;
|
|
170
|
+
}[];
|
|
122
171
|
}, {
|
|
123
172
|
transit_utc: string;
|
|
124
173
|
transiting: Record<string, {
|
|
@@ -126,7 +175,13 @@ export declare const transitsOut: z.ZodObject<{
|
|
|
126
175
|
natal_house: number;
|
|
127
176
|
rx?: boolean | undefined;
|
|
128
177
|
}>;
|
|
129
|
-
aspects_to_natal:
|
|
178
|
+
aspects_to_natal: {
|
|
179
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
180
|
+
orb: number;
|
|
181
|
+
t: string;
|
|
182
|
+
n: string;
|
|
183
|
+
applying: boolean;
|
|
184
|
+
}[];
|
|
130
185
|
}>;
|
|
131
186
|
export declare const synastryOut: z.ZodObject<{
|
|
132
187
|
a: z.ZodObject<{
|
|
@@ -170,7 +225,22 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
170
225
|
mcPos: string;
|
|
171
226
|
}>;
|
|
172
227
|
cusps: z.ZodArray<z.ZodNumber, "many">;
|
|
173
|
-
aspects: z.ZodArray<z.
|
|
228
|
+
aspects: z.ZodArray<z.ZodObject<{
|
|
229
|
+
a: z.ZodString;
|
|
230
|
+
b: z.ZodString;
|
|
231
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
232
|
+
orb: z.ZodNumber;
|
|
233
|
+
}, "strip", z.ZodTypeAny, {
|
|
234
|
+
a: string;
|
|
235
|
+
b: string;
|
|
236
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
237
|
+
orb: number;
|
|
238
|
+
}, {
|
|
239
|
+
a: string;
|
|
240
|
+
b: string;
|
|
241
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
242
|
+
orb: number;
|
|
243
|
+
}>, "many">;
|
|
174
244
|
}, "strip", z.ZodTypeAny, {
|
|
175
245
|
utc: string;
|
|
176
246
|
houses: "placidus" | "whole_sign" | "equal" | "porphyry";
|
|
@@ -188,7 +258,12 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
188
258
|
mcPos: string;
|
|
189
259
|
};
|
|
190
260
|
cusps: number[];
|
|
191
|
-
aspects:
|
|
261
|
+
aspects: {
|
|
262
|
+
a: string;
|
|
263
|
+
b: string;
|
|
264
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
265
|
+
orb: number;
|
|
266
|
+
}[];
|
|
192
267
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
193
268
|
houses_fallback_reason?: string | undefined;
|
|
194
269
|
}, {
|
|
@@ -208,7 +283,12 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
208
283
|
mcPos: string;
|
|
209
284
|
};
|
|
210
285
|
cusps: number[];
|
|
211
|
-
aspects:
|
|
286
|
+
aspects: {
|
|
287
|
+
a: string;
|
|
288
|
+
b: string;
|
|
289
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
290
|
+
orb: number;
|
|
291
|
+
}[];
|
|
212
292
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
213
293
|
houses_fallback_reason?: string | undefined;
|
|
214
294
|
}>;
|
|
@@ -253,7 +333,22 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
253
333
|
mcPos: string;
|
|
254
334
|
}>;
|
|
255
335
|
cusps: z.ZodArray<z.ZodNumber, "many">;
|
|
256
|
-
aspects: z.ZodArray<z.
|
|
336
|
+
aspects: z.ZodArray<z.ZodObject<{
|
|
337
|
+
a: z.ZodString;
|
|
338
|
+
b: z.ZodString;
|
|
339
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
340
|
+
orb: z.ZodNumber;
|
|
341
|
+
}, "strip", z.ZodTypeAny, {
|
|
342
|
+
a: string;
|
|
343
|
+
b: string;
|
|
344
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
345
|
+
orb: number;
|
|
346
|
+
}, {
|
|
347
|
+
a: string;
|
|
348
|
+
b: string;
|
|
349
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
350
|
+
orb: number;
|
|
351
|
+
}>, "many">;
|
|
257
352
|
}, "strip", z.ZodTypeAny, {
|
|
258
353
|
utc: string;
|
|
259
354
|
houses: "placidus" | "whole_sign" | "equal" | "porphyry";
|
|
@@ -271,7 +366,12 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
271
366
|
mcPos: string;
|
|
272
367
|
};
|
|
273
368
|
cusps: number[];
|
|
274
|
-
aspects:
|
|
369
|
+
aspects: {
|
|
370
|
+
a: string;
|
|
371
|
+
b: string;
|
|
372
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
373
|
+
orb: number;
|
|
374
|
+
}[];
|
|
275
375
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
276
376
|
houses_fallback_reason?: string | undefined;
|
|
277
377
|
}, {
|
|
@@ -291,11 +391,31 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
291
391
|
mcPos: string;
|
|
292
392
|
};
|
|
293
393
|
cusps: number[];
|
|
294
|
-
aspects:
|
|
394
|
+
aspects: {
|
|
395
|
+
a: string;
|
|
396
|
+
b: string;
|
|
397
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
398
|
+
orb: number;
|
|
399
|
+
}[];
|
|
295
400
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
296
401
|
houses_fallback_reason?: string | undefined;
|
|
297
402
|
}>;
|
|
298
|
-
inter_aspects: z.ZodArray<z.
|
|
403
|
+
inter_aspects: z.ZodArray<z.ZodObject<{
|
|
404
|
+
a: z.ZodString;
|
|
405
|
+
b: z.ZodString;
|
|
406
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
407
|
+
orb: z.ZodNumber;
|
|
408
|
+
}, "strip", z.ZodTypeAny, {
|
|
409
|
+
a: string;
|
|
410
|
+
b: string;
|
|
411
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
412
|
+
orb: number;
|
|
413
|
+
}, {
|
|
414
|
+
a: string;
|
|
415
|
+
b: string;
|
|
416
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
417
|
+
orb: number;
|
|
418
|
+
}>, "many">;
|
|
299
419
|
a_planets_in_b_houses: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
300
420
|
b_planets_in_a_houses: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
301
421
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -316,7 +436,12 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
316
436
|
mcPos: string;
|
|
317
437
|
};
|
|
318
438
|
cusps: number[];
|
|
319
|
-
aspects:
|
|
439
|
+
aspects: {
|
|
440
|
+
a: string;
|
|
441
|
+
b: string;
|
|
442
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
443
|
+
orb: number;
|
|
444
|
+
}[];
|
|
320
445
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
321
446
|
houses_fallback_reason?: string | undefined;
|
|
322
447
|
};
|
|
@@ -337,11 +462,21 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
337
462
|
mcPos: string;
|
|
338
463
|
};
|
|
339
464
|
cusps: number[];
|
|
340
|
-
aspects:
|
|
465
|
+
aspects: {
|
|
466
|
+
a: string;
|
|
467
|
+
b: string;
|
|
468
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
469
|
+
orb: number;
|
|
470
|
+
}[];
|
|
341
471
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
342
472
|
houses_fallback_reason?: string | undefined;
|
|
343
473
|
};
|
|
344
|
-
inter_aspects:
|
|
474
|
+
inter_aspects: {
|
|
475
|
+
a: string;
|
|
476
|
+
b: string;
|
|
477
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
478
|
+
orb: number;
|
|
479
|
+
}[];
|
|
345
480
|
a_planets_in_b_houses: Record<string, number>;
|
|
346
481
|
b_planets_in_a_houses: Record<string, number>;
|
|
347
482
|
}, {
|
|
@@ -362,7 +497,12 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
362
497
|
mcPos: string;
|
|
363
498
|
};
|
|
364
499
|
cusps: number[];
|
|
365
|
-
aspects:
|
|
500
|
+
aspects: {
|
|
501
|
+
a: string;
|
|
502
|
+
b: string;
|
|
503
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
504
|
+
orb: number;
|
|
505
|
+
}[];
|
|
366
506
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
367
507
|
houses_fallback_reason?: string | undefined;
|
|
368
508
|
};
|
|
@@ -383,11 +523,21 @@ export declare const synastryOut: z.ZodObject<{
|
|
|
383
523
|
mcPos: string;
|
|
384
524
|
};
|
|
385
525
|
cusps: number[];
|
|
386
|
-
aspects:
|
|
526
|
+
aspects: {
|
|
527
|
+
a: string;
|
|
528
|
+
b: string;
|
|
529
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
530
|
+
orb: number;
|
|
531
|
+
}[];
|
|
387
532
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
388
533
|
houses_fallback_reason?: string | undefined;
|
|
389
534
|
};
|
|
390
|
-
inter_aspects:
|
|
535
|
+
inter_aspects: {
|
|
536
|
+
a: string;
|
|
537
|
+
b: string;
|
|
538
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
539
|
+
orb: number;
|
|
540
|
+
}[];
|
|
391
541
|
a_planets_in_b_houses: Record<string, number>;
|
|
392
542
|
b_planets_in_a_houses: Record<string, number>;
|
|
393
543
|
}>;
|
|
@@ -482,7 +632,22 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
482
632
|
mcPos: string;
|
|
483
633
|
}>;
|
|
484
634
|
cusps: z.ZodArray<z.ZodNumber, "many">;
|
|
485
|
-
aspects: z.ZodArray<z.
|
|
635
|
+
aspects: z.ZodArray<z.ZodObject<{
|
|
636
|
+
a: z.ZodString;
|
|
637
|
+
b: z.ZodString;
|
|
638
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
639
|
+
orb: z.ZodNumber;
|
|
640
|
+
}, "strip", z.ZodTypeAny, {
|
|
641
|
+
a: string;
|
|
642
|
+
b: string;
|
|
643
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
644
|
+
orb: number;
|
|
645
|
+
}, {
|
|
646
|
+
a: string;
|
|
647
|
+
b: string;
|
|
648
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
649
|
+
orb: number;
|
|
650
|
+
}>, "many">;
|
|
486
651
|
}, "strip", z.ZodTypeAny, {
|
|
487
652
|
utc: string;
|
|
488
653
|
houses: "placidus" | "whole_sign" | "equal" | "porphyry";
|
|
@@ -500,7 +665,12 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
500
665
|
mcPos: string;
|
|
501
666
|
};
|
|
502
667
|
cusps: number[];
|
|
503
|
-
aspects:
|
|
668
|
+
aspects: {
|
|
669
|
+
a: string;
|
|
670
|
+
b: string;
|
|
671
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
672
|
+
orb: number;
|
|
673
|
+
}[];
|
|
504
674
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
505
675
|
houses_fallback_reason?: string | undefined;
|
|
506
676
|
}, {
|
|
@@ -520,7 +690,12 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
520
690
|
mcPos: string;
|
|
521
691
|
};
|
|
522
692
|
cusps: number[];
|
|
523
|
-
aspects:
|
|
693
|
+
aspects: {
|
|
694
|
+
a: string;
|
|
695
|
+
b: string;
|
|
696
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
697
|
+
orb: number;
|
|
698
|
+
}[];
|
|
524
699
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
525
700
|
houses_fallback_reason?: string | undefined;
|
|
526
701
|
}>;
|
|
@@ -565,7 +740,22 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
565
740
|
mcPos: string;
|
|
566
741
|
}>;
|
|
567
742
|
cusps: z.ZodArray<z.ZodNumber, "many">;
|
|
568
|
-
aspects: z.ZodArray<z.
|
|
743
|
+
aspects: z.ZodArray<z.ZodObject<{
|
|
744
|
+
a: z.ZodString;
|
|
745
|
+
b: z.ZodString;
|
|
746
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
747
|
+
orb: z.ZodNumber;
|
|
748
|
+
}, "strip", z.ZodTypeAny, {
|
|
749
|
+
a: string;
|
|
750
|
+
b: string;
|
|
751
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
752
|
+
orb: number;
|
|
753
|
+
}, {
|
|
754
|
+
a: string;
|
|
755
|
+
b: string;
|
|
756
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
757
|
+
orb: number;
|
|
758
|
+
}>, "many">;
|
|
569
759
|
}, "strip", z.ZodTypeAny, {
|
|
570
760
|
utc: string;
|
|
571
761
|
houses: "placidus" | "whole_sign" | "equal" | "porphyry";
|
|
@@ -583,7 +773,12 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
583
773
|
mcPos: string;
|
|
584
774
|
};
|
|
585
775
|
cusps: number[];
|
|
586
|
-
aspects:
|
|
776
|
+
aspects: {
|
|
777
|
+
a: string;
|
|
778
|
+
b: string;
|
|
779
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
780
|
+
orb: number;
|
|
781
|
+
}[];
|
|
587
782
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
588
783
|
houses_fallback_reason?: string | undefined;
|
|
589
784
|
}, {
|
|
@@ -603,7 +798,12 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
603
798
|
mcPos: string;
|
|
604
799
|
};
|
|
605
800
|
cusps: number[];
|
|
606
|
-
aspects:
|
|
801
|
+
aspects: {
|
|
802
|
+
a: string;
|
|
803
|
+
b: string;
|
|
804
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
805
|
+
orb: number;
|
|
806
|
+
}[];
|
|
607
807
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
608
808
|
houses_fallback_reason?: string | undefined;
|
|
609
809
|
}>;
|
|
@@ -622,7 +822,25 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
622
822
|
natal_house: number;
|
|
623
823
|
rx?: boolean | undefined;
|
|
624
824
|
}>>;
|
|
625
|
-
aspects_to_natal: z.ZodArray<z.
|
|
825
|
+
aspects_to_natal: z.ZodArray<z.ZodObject<{
|
|
826
|
+
t: z.ZodString;
|
|
827
|
+
n: z.ZodString;
|
|
828
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
829
|
+
orb: z.ZodNumber;
|
|
830
|
+
applying: z.ZodBoolean;
|
|
831
|
+
}, "strip", z.ZodTypeAny, {
|
|
832
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
833
|
+
orb: number;
|
|
834
|
+
t: string;
|
|
835
|
+
n: string;
|
|
836
|
+
applying: boolean;
|
|
837
|
+
}, {
|
|
838
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
839
|
+
orb: number;
|
|
840
|
+
t: string;
|
|
841
|
+
n: string;
|
|
842
|
+
applying: boolean;
|
|
843
|
+
}>, "many">;
|
|
626
844
|
}, "strip", z.ZodTypeAny, {
|
|
627
845
|
transit_utc: string;
|
|
628
846
|
transiting: Record<string, {
|
|
@@ -630,7 +848,13 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
630
848
|
natal_house: number;
|
|
631
849
|
rx?: boolean | undefined;
|
|
632
850
|
}>;
|
|
633
|
-
aspects_to_natal:
|
|
851
|
+
aspects_to_natal: {
|
|
852
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
853
|
+
orb: number;
|
|
854
|
+
t: string;
|
|
855
|
+
n: string;
|
|
856
|
+
applying: boolean;
|
|
857
|
+
}[];
|
|
634
858
|
}, {
|
|
635
859
|
transit_utc: string;
|
|
636
860
|
transiting: Record<string, {
|
|
@@ -638,7 +862,13 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
638
862
|
natal_house: number;
|
|
639
863
|
rx?: boolean | undefined;
|
|
640
864
|
}>;
|
|
641
|
-
aspects_to_natal:
|
|
865
|
+
aspects_to_natal: {
|
|
866
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
867
|
+
orb: number;
|
|
868
|
+
t: string;
|
|
869
|
+
n: string;
|
|
870
|
+
applying: boolean;
|
|
871
|
+
}[];
|
|
642
872
|
}>;
|
|
643
873
|
readonly synastry: z.ZodObject<{
|
|
644
874
|
a: z.ZodObject<{
|
|
@@ -682,7 +912,22 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
682
912
|
mcPos: string;
|
|
683
913
|
}>;
|
|
684
914
|
cusps: z.ZodArray<z.ZodNumber, "many">;
|
|
685
|
-
aspects: z.ZodArray<z.
|
|
915
|
+
aspects: z.ZodArray<z.ZodObject<{
|
|
916
|
+
a: z.ZodString;
|
|
917
|
+
b: z.ZodString;
|
|
918
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
919
|
+
orb: z.ZodNumber;
|
|
920
|
+
}, "strip", z.ZodTypeAny, {
|
|
921
|
+
a: string;
|
|
922
|
+
b: string;
|
|
923
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
924
|
+
orb: number;
|
|
925
|
+
}, {
|
|
926
|
+
a: string;
|
|
927
|
+
b: string;
|
|
928
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
929
|
+
orb: number;
|
|
930
|
+
}>, "many">;
|
|
686
931
|
}, "strip", z.ZodTypeAny, {
|
|
687
932
|
utc: string;
|
|
688
933
|
houses: "placidus" | "whole_sign" | "equal" | "porphyry";
|
|
@@ -700,7 +945,12 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
700
945
|
mcPos: string;
|
|
701
946
|
};
|
|
702
947
|
cusps: number[];
|
|
703
|
-
aspects:
|
|
948
|
+
aspects: {
|
|
949
|
+
a: string;
|
|
950
|
+
b: string;
|
|
951
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
952
|
+
orb: number;
|
|
953
|
+
}[];
|
|
704
954
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
705
955
|
houses_fallback_reason?: string | undefined;
|
|
706
956
|
}, {
|
|
@@ -720,7 +970,12 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
720
970
|
mcPos: string;
|
|
721
971
|
};
|
|
722
972
|
cusps: number[];
|
|
723
|
-
aspects:
|
|
973
|
+
aspects: {
|
|
974
|
+
a: string;
|
|
975
|
+
b: string;
|
|
976
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
977
|
+
orb: number;
|
|
978
|
+
}[];
|
|
724
979
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
725
980
|
houses_fallback_reason?: string | undefined;
|
|
726
981
|
}>;
|
|
@@ -765,7 +1020,22 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
765
1020
|
mcPos: string;
|
|
766
1021
|
}>;
|
|
767
1022
|
cusps: z.ZodArray<z.ZodNumber, "many">;
|
|
768
|
-
aspects: z.ZodArray<z.
|
|
1023
|
+
aspects: z.ZodArray<z.ZodObject<{
|
|
1024
|
+
a: z.ZodString;
|
|
1025
|
+
b: z.ZodString;
|
|
1026
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
1027
|
+
orb: z.ZodNumber;
|
|
1028
|
+
}, "strip", z.ZodTypeAny, {
|
|
1029
|
+
a: string;
|
|
1030
|
+
b: string;
|
|
1031
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1032
|
+
orb: number;
|
|
1033
|
+
}, {
|
|
1034
|
+
a: string;
|
|
1035
|
+
b: string;
|
|
1036
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1037
|
+
orb: number;
|
|
1038
|
+
}>, "many">;
|
|
769
1039
|
}, "strip", z.ZodTypeAny, {
|
|
770
1040
|
utc: string;
|
|
771
1041
|
houses: "placidus" | "whole_sign" | "equal" | "porphyry";
|
|
@@ -783,7 +1053,12 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
783
1053
|
mcPos: string;
|
|
784
1054
|
};
|
|
785
1055
|
cusps: number[];
|
|
786
|
-
aspects:
|
|
1056
|
+
aspects: {
|
|
1057
|
+
a: string;
|
|
1058
|
+
b: string;
|
|
1059
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1060
|
+
orb: number;
|
|
1061
|
+
}[];
|
|
787
1062
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
788
1063
|
houses_fallback_reason?: string | undefined;
|
|
789
1064
|
}, {
|
|
@@ -803,11 +1078,31 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
803
1078
|
mcPos: string;
|
|
804
1079
|
};
|
|
805
1080
|
cusps: number[];
|
|
806
|
-
aspects:
|
|
1081
|
+
aspects: {
|
|
1082
|
+
a: string;
|
|
1083
|
+
b: string;
|
|
1084
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1085
|
+
orb: number;
|
|
1086
|
+
}[];
|
|
807
1087
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
808
1088
|
houses_fallback_reason?: string | undefined;
|
|
809
1089
|
}>;
|
|
810
|
-
inter_aspects: z.ZodArray<z.
|
|
1090
|
+
inter_aspects: z.ZodArray<z.ZodObject<{
|
|
1091
|
+
a: z.ZodString;
|
|
1092
|
+
b: z.ZodString;
|
|
1093
|
+
aspect: z.ZodEnum<["conjunction", "sextile", "square", "trine", "opposition"]>;
|
|
1094
|
+
orb: z.ZodNumber;
|
|
1095
|
+
}, "strip", z.ZodTypeAny, {
|
|
1096
|
+
a: string;
|
|
1097
|
+
b: string;
|
|
1098
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1099
|
+
orb: number;
|
|
1100
|
+
}, {
|
|
1101
|
+
a: string;
|
|
1102
|
+
b: string;
|
|
1103
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1104
|
+
orb: number;
|
|
1105
|
+
}>, "many">;
|
|
811
1106
|
a_planets_in_b_houses: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
812
1107
|
b_planets_in_a_houses: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
813
1108
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -828,7 +1123,12 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
828
1123
|
mcPos: string;
|
|
829
1124
|
};
|
|
830
1125
|
cusps: number[];
|
|
831
|
-
aspects:
|
|
1126
|
+
aspects: {
|
|
1127
|
+
a: string;
|
|
1128
|
+
b: string;
|
|
1129
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1130
|
+
orb: number;
|
|
1131
|
+
}[];
|
|
832
1132
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
833
1133
|
houses_fallback_reason?: string | undefined;
|
|
834
1134
|
};
|
|
@@ -849,11 +1149,21 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
849
1149
|
mcPos: string;
|
|
850
1150
|
};
|
|
851
1151
|
cusps: number[];
|
|
852
|
-
aspects:
|
|
1152
|
+
aspects: {
|
|
1153
|
+
a: string;
|
|
1154
|
+
b: string;
|
|
1155
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1156
|
+
orb: number;
|
|
1157
|
+
}[];
|
|
853
1158
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
854
1159
|
houses_fallback_reason?: string | undefined;
|
|
855
1160
|
};
|
|
856
|
-
inter_aspects:
|
|
1161
|
+
inter_aspects: {
|
|
1162
|
+
a: string;
|
|
1163
|
+
b: string;
|
|
1164
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1165
|
+
orb: number;
|
|
1166
|
+
}[];
|
|
857
1167
|
a_planets_in_b_houses: Record<string, number>;
|
|
858
1168
|
b_planets_in_a_houses: Record<string, number>;
|
|
859
1169
|
}, {
|
|
@@ -874,7 +1184,12 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
874
1184
|
mcPos: string;
|
|
875
1185
|
};
|
|
876
1186
|
cusps: number[];
|
|
877
|
-
aspects:
|
|
1187
|
+
aspects: {
|
|
1188
|
+
a: string;
|
|
1189
|
+
b: string;
|
|
1190
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1191
|
+
orb: number;
|
|
1192
|
+
}[];
|
|
878
1193
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
879
1194
|
houses_fallback_reason?: string | undefined;
|
|
880
1195
|
};
|
|
@@ -895,11 +1210,21 @@ export declare const OUTPUT_SCHEMAS: {
|
|
|
895
1210
|
mcPos: string;
|
|
896
1211
|
};
|
|
897
1212
|
cusps: number[];
|
|
898
|
-
aspects:
|
|
1213
|
+
aspects: {
|
|
1214
|
+
a: string;
|
|
1215
|
+
b: string;
|
|
1216
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1217
|
+
orb: number;
|
|
1218
|
+
}[];
|
|
899
1219
|
houses_requested?: "placidus" | "whole_sign" | "equal" | "porphyry" | undefined;
|
|
900
1220
|
houses_fallback_reason?: string | undefined;
|
|
901
1221
|
};
|
|
902
|
-
inter_aspects:
|
|
1222
|
+
inter_aspects: {
|
|
1223
|
+
a: string;
|
|
1224
|
+
b: string;
|
|
1225
|
+
aspect: "conjunction" | "sextile" | "square" | "trine" | "opposition";
|
|
1226
|
+
orb: number;
|
|
1227
|
+
}[];
|
|
903
1228
|
a_planets_in_b_houses: Record<string, number>;
|
|
904
1229
|
b_planets_in_a_houses: Record<string, number>;
|
|
905
1230
|
}>;
|
package/dist/src/server.js
CHANGED
|
@@ -20,6 +20,7 @@ import { realpathSync } from "node:fs";
|
|
|
20
20
|
import { Engine, BODIES, julianDay, mod } from "caelus";
|
|
21
21
|
import { loadNodeData } from "caelus/node";
|
|
22
22
|
const require = createRequire(import.meta.url);
|
|
23
|
+
const VERSION = require("caelus-mcp/package.json").version;
|
|
23
24
|
const DATA_DIR = process.env.CAELUS_DATA
|
|
24
25
|
?? join(dirname(require.resolve("caelus/package.json")), "data");
|
|
25
26
|
const engine = new Engine(loadNodeData(DATA_DIR, "embedded", "full"));
|
|
@@ -71,7 +72,9 @@ function chartPayload(iso, lat, lon, hs) {
|
|
|
71
72
|
bodies,
|
|
72
73
|
angles: { asc: r2(c.angles.asc), ascPos: fmt(c.angles.asc), mc: r2(c.angles.mc), mcPos: fmt(c.angles.mc) },
|
|
73
74
|
cusps: cusps.map(r2),
|
|
74
|
-
|
|
75
|
+
// Engine Aspect objects pass through unchanged ({a, b, aspect, orb}) so
|
|
76
|
+
// the whole payload feeds caelus-wheel's <ChartWheel> without adaptation.
|
|
77
|
+
aspects: c.aspects,
|
|
75
78
|
};
|
|
76
79
|
}
|
|
77
80
|
const text = (obj) => ({ content: [{ type: "text", text: JSON.stringify(obj) }] });
|
|
@@ -82,6 +85,10 @@ const bodyOut = z.object({
|
|
|
82
85
|
lon: z.number(), pos: z.string(), house: z.number().int().min(1).max(12),
|
|
83
86
|
speed: z.number(), rx: z.boolean().optional(),
|
|
84
87
|
});
|
|
88
|
+
const aspectName = z.enum(["conjunction", "sextile", "square", "trine", "opposition"]);
|
|
89
|
+
const aspectOut = z.object({
|
|
90
|
+
a: z.string(), b: z.string(), aspect: aspectName, orb: z.number(),
|
|
91
|
+
});
|
|
85
92
|
export const chartOut = z.object({
|
|
86
93
|
utc: z.string(),
|
|
87
94
|
houses: z.enum(["placidus", "whole_sign", "equal", "porphyry"]),
|
|
@@ -90,18 +97,20 @@ export const chartOut = z.object({
|
|
|
90
97
|
bodies: z.record(z.string(), bodyOut),
|
|
91
98
|
angles: z.object({ asc: z.number(), ascPos: z.string(), mc: z.number(), mcPos: z.string() }),
|
|
92
99
|
cusps: z.array(z.number()).length(12),
|
|
93
|
-
aspects: z.array(
|
|
100
|
+
aspects: z.array(aspectOut),
|
|
94
101
|
});
|
|
95
102
|
export const transitsOut = z.object({
|
|
96
103
|
transit_utc: z.string(),
|
|
97
104
|
transiting: z.record(z.string(), z.object({
|
|
98
105
|
pos: z.string(), natal_house: z.number().int().min(1).max(12), rx: z.boolean().optional(),
|
|
99
106
|
})),
|
|
100
|
-
aspects_to_natal: z.array(z.
|
|
107
|
+
aspects_to_natal: z.array(z.object({
|
|
108
|
+
t: z.string(), n: z.string(), aspect: aspectName, orb: z.number(), applying: z.boolean(),
|
|
109
|
+
})),
|
|
101
110
|
});
|
|
102
111
|
export const synastryOut = z.object({
|
|
103
112
|
a: chartOut, b: chartOut,
|
|
104
|
-
inter_aspects: z.array(
|
|
113
|
+
inter_aspects: z.array(aspectOut),
|
|
105
114
|
a_planets_in_b_houses: z.record(z.string(), z.number().int().min(1).max(12)),
|
|
106
115
|
b_planets_in_a_houses: z.record(z.string(), z.number().int().min(1).max(12)),
|
|
107
116
|
});
|
|
@@ -125,7 +134,7 @@ export const OUTPUT_SCHEMAS = {
|
|
|
125
134
|
};
|
|
126
135
|
// ---------------------------------------------------------------- server
|
|
127
136
|
export function buildServer() {
|
|
128
|
-
const server = new McpServer({ name: "caelus", version:
|
|
137
|
+
const server = new McpServer({ name: "caelus", version: VERSION });
|
|
129
138
|
server.registerTool("natal_chart", {
|
|
130
139
|
description: "A person's birth chart. Requires their exact birth date+time and birthplace (all three: date, lat, lon). Use this — not current_sky — whenever the question is about someone's natal/birth chart. Returns 13 bodies (sun–pluto, chiron, nodes) with sign, house, retrograde, speed; ASC/MC; cusps; major aspects with orbs. Vs Swiss Ephemeris (1900–2099): Sun–Saturn ≤1″, Uranus ≤1.9″, Neptune ≤4.6″, Moon ≤2.5″, Pluto ≤2.5″ (series valid 1885–2099), Chiron ≤1″, nodes ≤1″.",
|
|
131
140
|
inputSchema: { ...birth, house_system: houseSys },
|
|
@@ -151,7 +160,9 @@ export function buildServer() {
|
|
|
151
160
|
const natal = chartPayload(date, lat, lon, house_system);
|
|
152
161
|
const tIso = transit_date ?? new Date().toISOString();
|
|
153
162
|
const jdT = jdFromIso(tIso);
|
|
154
|
-
const ASP = [
|
|
163
|
+
const ASP = [
|
|
164
|
+
["conjunction", 0], ["sextile", 60], ["square", 90], ["trine", 120], ["opposition", 180],
|
|
165
|
+
];
|
|
155
166
|
const hits = [];
|
|
156
167
|
const cusps = natal.cusps;
|
|
157
168
|
const houseOf = (bl) => {
|
|
@@ -173,7 +184,7 @@ export function buildServer() {
|
|
|
173
184
|
if (o <= orb) {
|
|
174
185
|
const future = Math.abs(mod(tp.lon + tp.speed * 0.5 - nLon + 180, 360) - 180);
|
|
175
186
|
const applying = Math.abs(future - angle) < o;
|
|
176
|
-
hits.push(
|
|
187
|
+
hits.push({ t: tb, n: nb, aspect: name, orb: r2(o), applying });
|
|
177
188
|
}
|
|
178
189
|
}
|
|
179
190
|
}
|
|
@@ -190,7 +201,9 @@ export function buildServer() {
|
|
|
190
201
|
}, async ({ a, b, orb }) => {
|
|
191
202
|
const ca = chartPayload(a.date, a.lat, a.lon, "placidus");
|
|
192
203
|
const cb = chartPayload(b.date, b.lat, b.lon, "placidus");
|
|
193
|
-
const ASP = [
|
|
204
|
+
const ASP = [
|
|
205
|
+
["conjunction", 0], ["sextile", 60], ["square", 90], ["trine", 120], ["opposition", 180],
|
|
206
|
+
];
|
|
194
207
|
const inter = [];
|
|
195
208
|
const houseIn = (cusps, bl) => {
|
|
196
209
|
for (let i = 0; i < 12; i++) {
|
|
@@ -215,7 +228,7 @@ export function buildServer() {
|
|
|
215
228
|
for (const [name, angle] of ASP) {
|
|
216
229
|
const o = Math.abs(sep - angle);
|
|
217
230
|
if (o <= orb)
|
|
218
|
-
inter.push(
|
|
231
|
+
inter.push({ a: ba, b: bb, aspect: name, orb: r2(o) });
|
|
219
232
|
}
|
|
220
233
|
}
|
|
221
234
|
}
|
|
@@ -225,7 +238,7 @@ export function buildServer() {
|
|
|
225
238
|
});
|
|
226
239
|
});
|
|
227
240
|
server.registerTool("find_aspect_dates", {
|
|
228
|
-
description: "Exact dates a transiting body makes an aspect, within a range: to a fixed longitude OR to another transiting body. Provide exactly one of target_lon / target_body. Includes retrograde re-hits. Body names are snake_case (mean_node, true_node)
|
|
241
|
+
description: "Exact dates a transiting body makes an aspect, within a range: to a fixed longitude OR to another transiting body. Provide exactly one of target_lon / target_body. Includes retrograde re-hits. Body names are snake_case (mean_node, true_node).",
|
|
229
242
|
inputSchema: {
|
|
230
243
|
body: z.enum(BODIES).describe("Transiting body (snake_case, e.g. saturn, true_node)"),
|
|
231
244
|
aspect: z.enum(["conjunction", "sextile", "square", "trine", "opposition"]),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "caelus-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "MCP server for caelus chart computation.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
16
16
|
"zod": "^3.24.0",
|
|
17
|
-
"caelus": "^0.
|
|
17
|
+
"caelus": "^0.2.1"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"ajv": "^8.17.1"
|
|
@@ -36,4 +36,4 @@
|
|
|
36
36
|
"model-context-protocol",
|
|
37
37
|
"natal-chart"
|
|
38
38
|
]
|
|
39
|
-
}
|
|
39
|
+
}
|