@openephemeris/mcp-server 4.13.0 → 4.14.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/CHANGELOG.md CHANGED
@@ -7,6 +7,61 @@ Version numbering follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## [4.14.1] — 2026-09-01
11
+
12
+ ### Fixed
13
+ - **`dev_read_api`/`dev_write_api` rejected 90 endpoints that were supposed to
14
+ be reachable.** The dev allowlist generator recognized invented tier names
15
+ (`free`/`pro`/`production`) instead of the real product tiers
16
+ (`Explorer`/`Developer`/`Startup`/`Scale`/`Enterprise`), so every
17
+ Explorer-tier operation — `location/autocomplete`, `catalogs/bodies`,
18
+ `moon/phase`, the eclipse and agro families, `tidal/forcing`,
19
+ `calendar/astrology/moon-phases`, `chinese/zodiac`, and more — silently
20
+ dropped out of the generated allowlist. The allowlist is now 120 operations
21
+ (was 30).
22
+ - **The Claude plugin's MCP server likely never registered.** `plugin.json`
23
+ declared the bundled server under `"mcp"`; the plugin manifest schema
24
+ requires `"mcpServers"` (nested by server name).
25
+ - Corrected several stale credit-cost figures in the plugin `SKILL.md` and
26
+ `README.md` against the live backend (`human_design_chart`, `chart_wheel`,
27
+ `bi_wheel`: 2 credits, not 1; `acg_power_lines`, `acg_hits`: 10 credits, not
28
+ 2), fixed dot-notation tool references in the worked examples that never
29
+ matched a real tool name (e.g. `ephemeris.natal_chart` →
30
+ `ephemeris_natal_chart`), and added the telemetry disclosure that was
31
+ missing from the plugin's privacy section.
32
+
33
+ ---
34
+
35
+ ## [4.14.0] — 2026-08-27
36
+
37
+ ### Added
38
+ - **Fixed stars on `ephemeris_natal_chart` — for real this time.** The
39
+ `include_fixed_stars` flag removed in 4.13.0 returns, honest now: the API
40
+ wires it as of the 2026-08-27 release, so asking adds a `fixed_stars` block
41
+ with star positions and conjunctions against the chart's bodies and angles,
42
+ computed in the same zodiac frame as the chart (a sidereal chart's star hits
43
+ equal the tropical chart's, by construction and by test). 4.13.0 removed the
44
+ flag because it did nothing; 4.14.0 restores it because it does something.
45
+
46
+ - **`declinations` on `ephemeris_natal_chart`.** One flag adds each body's
47
+ declination and out-of-bounds status, plus parallel and contraparallel
48
+ aspects at a 1.5° orb.
49
+
50
+ - **`solar_relationships` on `ephemeris_natal_chart`.** Combustion, cazimi
51
+ and under-beams classification for Moon through Saturn; outer bodies get
52
+ the geometry without a verdict.
53
+
54
+ ### Changed
55
+ - The REST API these tools call also gained, in the same server release:
56
+ birthplace names echoed back (`birth_location.location_name`), hermetic-lot
57
+ suite selection, and provenance metadata on every response
58
+ (`ephemeris_version`, `delta_t_source`, `delta_t_seconds`,
59
+ `coordinate_reference_frame`, `time_scale`). These need no new tool
60
+ parameters — the metadata simply appears in responses, and lot selection is
61
+ reachable through the request-body pass-through paths.
62
+
63
+ ---
64
+
10
65
  ## [4.13.0] — 2026-08-27
11
66
 
12
67
  ### Added
package/README.md CHANGED
@@ -474,8 +474,8 @@ When you update the MCP server logic (handlers, bug fixes, hardening), you shoul
474
474
 
475
475
  Generated by `npm run sync:readme` from `config/dev-allowlist.json` and the live tool registry.
476
476
 
477
- - Allowlisted operations: **31**
478
- - Methods: `GET=5`, `POST=26`, `PUT=0`, `PATCH=0`, `DELETE=0`
477
+ - Allowlisted operations: **120**
478
+ - Methods: `GET=44`, `POST=76`, `PUT=0`, `PATCH=0`, `DELETE=0`
479
479
  - Registered tools (`OPENEPHEMERIS_PROFILE=dev`): **92**
480
480
  - Typed tools: `account_usage`, `acg_hits`, `acg_power_lines`, `auth_login`, `auth_logout`, `auth_status`, `bazi_annual_pillar`, `bazi_chart`, `bazi_compatibility`, `bazi_element_balance`, `bazi_luck_pillars`, `bazi_recalculate`, `bazi_ten_gods`, `bi_wheel_on_cross_aspect_click`, `bi_wheel_on_house_click`, `bi_wheel_on_planet_click`, `bi_wheel_recalculate`, `bi_wheel_synopsis`, `bodygraph_recalculate`, `chart_wheel_on_aspect_click`, `chart_wheel_on_house_click`, `chart_wheel_on_planet_click`, `chart_wheel_recalculate`, `chinese_bazi`, `electional_angle_crossings`, `electional_aspect_search`, `electional_moment_analysis`, `electional_station_tracker`, `ephemeris_angles_points`, `ephemeris_aspect_check`, `ephemeris_bi_wheel`, `ephemeris_chart_wheel`, `ephemeris_composite`, `ephemeris_composite_midpoint`, `ephemeris_dignities`, `ephemeris_electional`, `ephemeris_fixed_stars`, `ephemeris_hermetic_lots`, `ephemeris_house_cusps`, `ephemeris_lunar_return`, `ephemeris_midpoints`, `ephemeris_moon_phase`, `ephemeris_natal_batch`, `ephemeris_natal_chart`, `ephemeris_natal_transits`, `ephemeris_next_eclipse`, `ephemeris_next_lunar_phase`, `ephemeris_overlay`, `ephemeris_planet_position`, `ephemeris_planetary_return`, `ephemeris_progressed_chart`, `ephemeris_relocation`, `ephemeris_retrograde_status`, `ephemeris_solar_return`, `ephemeris_synastry`, `ephemeris_transits`, `explore_bazi_chart`, `explore_bi_wheel`, `explore_human_design`, `explore_human_design_connection`, `explore_human_design_transit`, `explore_moon_phase`, `explore_natal_chart`, `explore_transit_timeline`, `explore_vedic_chart`, `hd_on_center_click`, `hd_on_channel_click`, `hd_on_connection_channel_click`, `hd_on_gate_click`, `hd_on_planet_click`, `hd_on_transit_channel_click`, `hd_on_variable_click`, `hd_opposition`, `hd_planetary_return`, `human_design_bodygraph`, `human_design_chart`, `human_design_composite`, `human_design_penta`, `location_search`, `moon_phase_recalculate`, `timezone_resolve`, `vedic_chart`, `vedic_chart_recalculate`, `venus_eight_year_star`, `venus_elongations`, `venus_phase`, `venus_star_points`, `venus_star_points_conjunctions`, `venus_stations`
481
481
  - Generic tools: `dev_list_allowed`, `dev_read_api`, `dev_write_api`
@@ -484,13 +484,23 @@ Generated by `npm run sync:readme` from `config/dev-allowlist.json` and the live
484
484
 
485
485
  | Family | Operations | Example |
486
486
  |---|---:|---|
487
- | `acg` | 4 | `POST /acg/ccg`, `POST /acg/hits` |
488
- | `chinese` | 5 | `POST /chinese/bazi/compatibility`, `POST /chinese/bazi/element-balance` |
487
+ | `acg` | 14 | `POST /acg/aspects`, `POST /acg/ccg` |
488
+ | `calendar` | 3 | `GET /calendar/astrology/cross-quarter`, `GET /calendar/astrology/lunar-standstill` |
489
+ | `catalogs` | 3 | `GET /catalogs/bodies`, `GET /catalogs/fixed-stars` |
490
+ | `chinese` | 9 | `POST /chinese/bazi`, `POST /chinese/bazi/annual-pillar` |
489
491
  | `comparative` | 5 | `POST /comparative/composite`, `POST /comparative/composite/midpoint` |
490
- | `electional` | 5 | `GET /electional/angle-crossings`, `GET /electional/aspect-search` |
491
- | `ephemeris` | 1 | `POST /ephemeris/relocation` |
492
- | `human-design` | 2 | `POST /human-design/composite`, `POST /human-design/transit-chart` |
493
- | `predictive` | 6 | `POST /predictive/returns`, `POST /predictive/returns/lunar` |
492
+ | `eclipse` | 6 | `GET /eclipse/besselian-elements`, `GET /eclipse/lunar/global` |
493
+ | `electional` | 6 | `GET /electional/angle-crossings`, `GET /electional/aspect-search` |
494
+ | `ephemeris` | 36 | `GET /ephemeris/agro/calendar`, `GET /ephemeris/agro/daily` |
495
+ | `health` | 2 | `GET /health`, `GET /health/detailed` |
496
+ | `human-design` | 8 | `POST /human-design/chart`, `POST /human-design/composite` |
497
+ | `location` | 2 | `GET /location/autocomplete`, `GET /location/reverse` |
498
+ | `predictive` | 10 | `POST /predictive/returns`, `POST /predictive/returns/lunar` |
499
+ | `root` | 1 | `GET /` |
500
+ | `tidal` | 2 | `GET /tidal/forcing`, `GET /tidal/forcing/deep-time` |
501
+ | `time` | 6 | `GET /time/delta-t`, `GET /time/equation-of-time` |
502
+ | `timezone` | 3 | `GET /timezone/coverage`, `POST /timezone/lookup` |
503
+ | `vedic` | 1 | `POST /vedic/chart` |
494
504
  | `visualization` | 3 | `POST /visualization/bi-wheel`, `POST /visualization/bodygraph` |
495
505
  <!-- GENERATED:RUNTIME_SNAPSHOT:END -->
496
506
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema": "astromcp-dev-allowlist-v1",
3
3
  "description": "Allowlist derived from the Go sidecar openapi.json. Every entry in allow[] corresponds to a real Go endpoint. Run 'npm run check:dev-allowlist' to validate freshness.",
4
- "generated_from": "C:\\src\\openephemeris\\apps\\api\\go-sidecar\\openapi.json",
4
+ "generated_from": "C:\\src\\openephemeris\\.claude\\worktrees\\mcp-allowlist-gaps-b8befc\\apps\\api\\go-sidecar\\openapi.json",
5
5
  "deny": {
6
6
  "path_prefixes": [
7
7
  "/auth",
@@ -15,10 +15,34 @@
15
15
  ]
16
16
  },
17
17
  "allow": [
18
+ {
19
+ "method": "POST",
20
+ "path": "/acg/aspects"
21
+ },
22
+ {
23
+ "method": "POST",
24
+ "path": "/acg/ccg/parans"
25
+ },
18
26
  {
19
27
  "method": "POST",
20
28
  "path": "/acg/ccg"
21
29
  },
30
+ {
31
+ "method": "POST",
32
+ "path": "/acg/crossings"
33
+ },
34
+ {
35
+ "method": "GET",
36
+ "path": "/acg/datasets"
37
+ },
38
+ {
39
+ "method": "POST",
40
+ "path": "/acg/declination-lines"
41
+ },
42
+ {
43
+ "method": "POST",
44
+ "path": "/acg/hermetic-lines"
45
+ },
22
46
  {
23
47
  "method": "POST",
24
48
  "path": "/acg/hits"
@@ -27,10 +51,58 @@
27
51
  "method": "POST",
28
52
  "path": "/acg/local-space"
29
53
  },
54
+ {
55
+ "method": "GET",
56
+ "path": "/acg/meta"
57
+ },
58
+ {
59
+ "method": "POST",
60
+ "path": "/acg/midpoints"
61
+ },
62
+ {
63
+ "method": "POST",
64
+ "path": "/acg/parans"
65
+ },
30
66
  {
31
67
  "method": "POST",
32
68
  "path": "/acg/power-lines"
33
69
  },
70
+ {
71
+ "method": "POST",
72
+ "path": "/acg/relational-parans"
73
+ },
74
+ {
75
+ "method": "GET",
76
+ "path": "/calendar/astrology/cross-quarter"
77
+ },
78
+ {
79
+ "method": "GET",
80
+ "path": "/calendar/astrology/lunar-standstill"
81
+ },
82
+ {
83
+ "method": "GET",
84
+ "path": "/calendar/astrology/moon-phases"
85
+ },
86
+ {
87
+ "method": "GET",
88
+ "path": "/catalogs/bodies"
89
+ },
90
+ {
91
+ "method": "GET",
92
+ "path": "/catalogs/fixed-stars/groups"
93
+ },
94
+ {
95
+ "method": "GET",
96
+ "path": "/catalogs/fixed-stars"
97
+ },
98
+ {
99
+ "method": "POST",
100
+ "path": "/chinese/bazi/annual-pillar"
101
+ },
102
+ {
103
+ "method": "POST",
104
+ "path": "/chinese/bazi/chart"
105
+ },
34
106
  {
35
107
  "method": "POST",
36
108
  "path": "/chinese/bazi/compatibility"
@@ -51,6 +123,14 @@
51
123
  "method": "POST",
52
124
  "path": "/chinese/bazi/ten-gods"
53
125
  },
126
+ {
127
+ "method": "POST",
128
+ "path": "/chinese/bazi"
129
+ },
130
+ {
131
+ "method": "GET",
132
+ "path": "/chinese/zodiac"
133
+ },
54
134
  {
55
135
  "method": "POST",
56
136
  "path": "/comparative/composite/midpoint"
@@ -71,6 +151,30 @@
71
151
  "method": "POST",
72
152
  "path": "/comparative/synastry"
73
153
  },
154
+ {
155
+ "method": "GET",
156
+ "path": "/eclipse/besselian-elements"
157
+ },
158
+ {
159
+ "method": "GET",
160
+ "path": "/eclipse/lunar/global"
161
+ },
162
+ {
163
+ "method": "GET",
164
+ "path": "/eclipse/next-visible"
165
+ },
166
+ {
167
+ "method": "GET",
168
+ "path": "/eclipse/next"
169
+ },
170
+ {
171
+ "method": "GET",
172
+ "path": "/eclipse/solar/global"
173
+ },
174
+ {
175
+ "method": "GET",
176
+ "path": "/eclipse/solar/local"
177
+ },
74
178
  {
75
179
  "method": "GET",
76
180
  "path": "/electional/angle-crossings"
@@ -87,22 +191,210 @@
87
191
  "method": "GET",
88
192
  "path": "/electional/moment-analysis"
89
193
  },
194
+ {
195
+ "method": "POST",
196
+ "path": "/electional/natal-angle-crossings"
197
+ },
90
198
  {
91
199
  "method": "GET",
92
200
  "path": "/electional/station-tracker"
93
201
  },
202
+ {
203
+ "method": "GET",
204
+ "path": "/ephemeris/agro/calendar"
205
+ },
206
+ {
207
+ "method": "GET",
208
+ "path": "/ephemeris/agro/daily"
209
+ },
210
+ {
211
+ "method": "GET",
212
+ "path": "/ephemeris/agro/void-of-course"
213
+ },
214
+ {
215
+ "method": "POST",
216
+ "path": "/ephemeris/angles-points"
217
+ },
218
+ {
219
+ "method": "POST",
220
+ "path": "/ephemeris/antiscia"
221
+ },
222
+ {
223
+ "method": "POST",
224
+ "path": "/ephemeris/aspect-check"
225
+ },
226
+ {
227
+ "method": "POST",
228
+ "path": "/ephemeris/declinations"
229
+ },
230
+ {
231
+ "method": "POST",
232
+ "path": "/ephemeris/dignities"
233
+ },
234
+ {
235
+ "method": "POST",
236
+ "path": "/ephemeris/dispositor-tree"
237
+ },
238
+ {
239
+ "method": "POST",
240
+ "path": "/ephemeris/fixed-stars"
241
+ },
242
+ {
243
+ "method": "POST",
244
+ "path": "/ephemeris/harmonics"
245
+ },
246
+ {
247
+ "method": "POST",
248
+ "path": "/ephemeris/hermetic-lots"
249
+ },
250
+ {
251
+ "method": "POST",
252
+ "path": "/ephemeris/house-cusps"
253
+ },
254
+ {
255
+ "method": "GET",
256
+ "path": "/ephemeris/house-systems"
257
+ },
258
+ {
259
+ "method": "POST",
260
+ "path": "/ephemeris/lunar-phase"
261
+ },
262
+ {
263
+ "method": "POST",
264
+ "path": "/ephemeris/midpoints"
265
+ },
266
+ {
267
+ "method": "GET",
268
+ "path": "/ephemeris/moon/aspects"
269
+ },
270
+ {
271
+ "method": "GET",
272
+ "path": "/ephemeris/moon/ingresses"
273
+ },
274
+ {
275
+ "method": "GET",
276
+ "path": "/ephemeris/moon/phase"
277
+ },
278
+ {
279
+ "method": "GET",
280
+ "path": "/ephemeris/moon/void-of-course"
281
+ },
282
+ {
283
+ "method": "POST",
284
+ "path": "/ephemeris/natal-chart"
285
+ },
286
+ {
287
+ "method": "POST",
288
+ "path": "/ephemeris/natal/batch"
289
+ },
290
+ {
291
+ "method": "POST",
292
+ "path": "/ephemeris/planet-position"
293
+ },
294
+ {
295
+ "method": "POST",
296
+ "path": "/ephemeris/progressed"
297
+ },
94
298
  {
95
299
  "method": "POST",
96
300
  "path": "/ephemeris/relocation"
97
301
  },
302
+ {
303
+ "method": "POST",
304
+ "path": "/ephemeris/retrograde-status"
305
+ },
306
+ {
307
+ "method": "GET",
308
+ "path": "/ephemeris/schemas/natal-request"
309
+ },
310
+ {
311
+ "method": "GET",
312
+ "path": "/ephemeris/schemas/natal-response"
313
+ },
314
+ {
315
+ "method": "GET",
316
+ "path": "/ephemeris/supported-metadata"
317
+ },
318
+ {
319
+ "method": "GET",
320
+ "path": "/ephemeris/supported-objects"
321
+ },
322
+ {
323
+ "method": "POST",
324
+ "path": "/ephemeris/venus-star-points/conjunctions"
325
+ },
326
+ {
327
+ "method": "POST",
328
+ "path": "/ephemeris/venus-star-points/eight-year-star"
329
+ },
330
+ {
331
+ "method": "POST",
332
+ "path": "/ephemeris/venus-star-points/elongations"
333
+ },
334
+ {
335
+ "method": "POST",
336
+ "path": "/ephemeris/venus-star-points/phase"
337
+ },
338
+ {
339
+ "method": "POST",
340
+ "path": "/ephemeris/venus-star-points/stations"
341
+ },
342
+ {
343
+ "method": "POST",
344
+ "path": "/ephemeris/venus-star-points"
345
+ },
346
+ {
347
+ "method": "GET",
348
+ "path": "/"
349
+ },
350
+ {
351
+ "method": "GET",
352
+ "path": "/health/detailed"
353
+ },
354
+ {
355
+ "method": "GET",
356
+ "path": "/health"
357
+ },
358
+ {
359
+ "method": "POST",
360
+ "path": "/human-design/chart"
361
+ },
98
362
  {
99
363
  "method": "POST",
100
364
  "path": "/human-design/composite"
101
365
  },
366
+ {
367
+ "method": "POST",
368
+ "path": "/human-design/cycles/opposition"
369
+ },
370
+ {
371
+ "method": "POST",
372
+ "path": "/human-design/cycles/return"
373
+ },
374
+ {
375
+ "method": "POST",
376
+ "path": "/human-design/cycles/solar-return"
377
+ },
378
+ {
379
+ "method": "POST",
380
+ "path": "/human-design/penta"
381
+ },
102
382
  {
103
383
  "method": "POST",
104
384
  "path": "/human-design/transit-chart"
105
385
  },
386
+ {
387
+ "method": "POST",
388
+ "path": "/human-design/transit"
389
+ },
390
+ {
391
+ "method": "GET",
392
+ "path": "/location/autocomplete"
393
+ },
394
+ {
395
+ "method": "GET",
396
+ "path": "/location/reverse"
397
+ },
106
398
  {
107
399
  "method": "POST",
108
400
  "path": "/predictive/returns/lunar"
@@ -127,6 +419,70 @@
127
419
  "method": "POST",
128
420
  "path": "/predictive/time-lords/zodiacal-releasing"
129
421
  },
422
+ {
423
+ "method": "POST",
424
+ "path": "/predictive/transit-chart"
425
+ },
426
+ {
427
+ "method": "POST",
428
+ "path": "/predictive/transits/planet-to-degree"
429
+ },
430
+ {
431
+ "method": "POST",
432
+ "path": "/predictive/transits/search"
433
+ },
434
+ {
435
+ "method": "POST",
436
+ "path": "/predictive/transits/sign-ingresses"
437
+ },
438
+ {
439
+ "method": "GET",
440
+ "path": "/tidal/forcing/deep-time"
441
+ },
442
+ {
443
+ "method": "GET",
444
+ "path": "/tidal/forcing"
445
+ },
446
+ {
447
+ "method": "GET",
448
+ "path": "/time/delta-t"
449
+ },
450
+ {
451
+ "method": "GET",
452
+ "path": "/time/equation-of-time"
453
+ },
454
+ {
455
+ "method": "POST",
456
+ "path": "/time/julian-day"
457
+ },
458
+ {
459
+ "method": "POST",
460
+ "path": "/time/scales"
461
+ },
462
+ {
463
+ "method": "GET",
464
+ "path": "/time/sidereal"
465
+ },
466
+ {
467
+ "method": "GET",
468
+ "path": "/time/solar-event"
469
+ },
470
+ {
471
+ "method": "GET",
472
+ "path": "/timezone/coverage"
473
+ },
474
+ {
475
+ "method": "POST",
476
+ "path": "/timezone/lookup"
477
+ },
478
+ {
479
+ "method": "POST",
480
+ "path": "/timezone/offset"
481
+ },
482
+ {
483
+ "method": "POST",
484
+ "path": "/vedic/chart"
485
+ },
130
486
  {
131
487
  "method": "POST",
132
488
  "path": "/visualization/bi-wheel"
@@ -140,8 +496,8 @@
140
496
  "path": "/visualization/chart-wheel"
141
497
  }
142
498
  ],
143
- "last_generated_at": "2026-07-30T20:30:07.623Z",
144
- "openapi_sha256": "c8d62588232551c514979433b2829ceb951ddce99334e65a3deed112a28bb11a",
499
+ "last_generated_at": "2026-08-31T23:51:24.873Z",
500
+ "openapi_sha256": "4347724c414ef94075a3db63016a4935ca7b533ecf18f37fac1ca16c22ca0195",
145
501
  "candidates_get": [
146
502
  {
147
503
  "method": "GET",
@@ -239,6 +595,14 @@
239
595
  ],
240
596
  "operationId": "get_next_visible_eclipse_eclipse_next_visible_get"
241
597
  },
598
+ {
599
+ "method": "GET",
600
+ "path": "/eclipse/next",
601
+ "tags": [
602
+ "eclipse"
603
+ ],
604
+ "operationId": "get_next_eclipse_eclipse_next_get"
605
+ },
242
606
  {
243
607
  "method": "GET",
244
608
  "path": "/eclipse/solar/global",
@@ -478,6 +842,14 @@
478
842
  "Time Conversion"
479
843
  ],
480
844
  "operationId": "get_solar_events_time_solar_event_get"
845
+ },
846
+ {
847
+ "method": "GET",
848
+ "path": "/timezone/coverage",
849
+ "tags": [
850
+ "location-timezone"
851
+ ],
852
+ "operationId": "timezone_coverage_timezone_coverage_get"
481
853
  }
482
854
  ],
483
855
  "candidates_non_get": [
@@ -601,6 +973,14 @@
601
973
  ],
602
974
  "operationId": "bazi_annual_pillar_chinese_bazi_annual_pillar_post"
603
975
  },
976
+ {
977
+ "method": "POST",
978
+ "path": "/chinese/bazi/chart",
979
+ "tags": [
980
+ "chinese"
981
+ ],
982
+ "operationId": "bazi_chart_render_chinese_bazi_chart_post"
983
+ },
604
984
  {
605
985
  "method": "POST",
606
986
  "path": "/chinese/bazi/compatibility",
@@ -689,6 +1069,14 @@
689
1069
  ],
690
1070
  "operationId": "calculate_synastry_comparative_synastry_post"
691
1071
  },
1072
+ {
1073
+ "method": "POST",
1074
+ "path": "/electional/natal-angle-crossings",
1075
+ "tags": [
1076
+ "electional"
1077
+ ],
1078
+ "operationId": "ElectionalNatalAngleCrossingsElectionalNatalAngleCrossingsPost"
1079
+ },
692
1080
  {
693
1081
  "method": "POST",
694
1082
  "path": "/ephemeris/angles-points",
@@ -1118,29 +1506,79 @@
1118
1506
  "ok": true,
1119
1507
  "errors": [],
1120
1508
  "warnings": [
1509
+ "Non-GET allowlisted: POST /acg/aspects",
1510
+ "Non-GET allowlisted: POST /acg/ccg/parans",
1121
1511
  "Non-GET allowlisted: POST /acg/ccg",
1512
+ "Non-GET allowlisted: POST /acg/crossings",
1513
+ "Non-GET allowlisted: POST /acg/declination-lines",
1514
+ "Non-GET allowlisted: POST /acg/hermetic-lines",
1122
1515
  "Non-GET allowlisted: POST /acg/hits",
1123
1516
  "Non-GET allowlisted: POST /acg/local-space",
1517
+ "Non-GET allowlisted: POST /acg/midpoints",
1518
+ "Non-GET allowlisted: POST /acg/parans",
1124
1519
  "Non-GET allowlisted: POST /acg/power-lines",
1520
+ "Non-GET allowlisted: POST /acg/relational-parans",
1521
+ "Non-GET allowlisted: POST /chinese/bazi/annual-pillar",
1522
+ "Non-GET allowlisted: POST /chinese/bazi/chart",
1125
1523
  "Non-GET allowlisted: POST /chinese/bazi/compatibility",
1126
1524
  "Non-GET allowlisted: POST /chinese/bazi/element-balance",
1127
1525
  "Non-GET allowlisted: POST /chinese/bazi/luck-pillars",
1128
1526
  "Non-GET allowlisted: POST /chinese/bazi/solar-terms",
1129
1527
  "Non-GET allowlisted: POST /chinese/bazi/ten-gods",
1528
+ "Non-GET allowlisted: POST /chinese/bazi",
1130
1529
  "Non-GET allowlisted: POST /comparative/composite/midpoint",
1131
1530
  "Non-GET allowlisted: POST /comparative/composite",
1132
1531
  "Non-GET allowlisted: POST /comparative/natal-transits",
1133
1532
  "Non-GET allowlisted: POST /comparative/overlay",
1134
1533
  "Non-GET allowlisted: POST /comparative/synastry",
1534
+ "Non-GET allowlisted: POST /electional/natal-angle-crossings",
1535
+ "Non-GET allowlisted: POST /ephemeris/angles-points",
1536
+ "Non-GET allowlisted: POST /ephemeris/antiscia",
1537
+ "Non-GET allowlisted: POST /ephemeris/aspect-check",
1538
+ "Non-GET allowlisted: POST /ephemeris/declinations",
1539
+ "Non-GET allowlisted: POST /ephemeris/dignities",
1540
+ "Non-GET allowlisted: POST /ephemeris/dispositor-tree",
1541
+ "Non-GET allowlisted: POST /ephemeris/fixed-stars",
1542
+ "Non-GET allowlisted: POST /ephemeris/harmonics",
1543
+ "Non-GET allowlisted: POST /ephemeris/hermetic-lots",
1544
+ "Non-GET allowlisted: POST /ephemeris/house-cusps",
1545
+ "Non-GET allowlisted: POST /ephemeris/lunar-phase",
1546
+ "Non-GET allowlisted: POST /ephemeris/midpoints",
1547
+ "Non-GET allowlisted: POST /ephemeris/natal-chart",
1548
+ "Non-GET allowlisted: POST /ephemeris/natal/batch",
1549
+ "Non-GET allowlisted: POST /ephemeris/planet-position",
1550
+ "Non-GET allowlisted: POST /ephemeris/progressed",
1135
1551
  "Non-GET allowlisted: POST /ephemeris/relocation",
1552
+ "Non-GET allowlisted: POST /ephemeris/retrograde-status",
1553
+ "Non-GET allowlisted: POST /ephemeris/venus-star-points/conjunctions",
1554
+ "Non-GET allowlisted: POST /ephemeris/venus-star-points/eight-year-star",
1555
+ "Non-GET allowlisted: POST /ephemeris/venus-star-points/elongations",
1556
+ "Non-GET allowlisted: POST /ephemeris/venus-star-points/phase",
1557
+ "Non-GET allowlisted: POST /ephemeris/venus-star-points/stations",
1558
+ "Non-GET allowlisted: POST /ephemeris/venus-star-points",
1559
+ "Non-GET allowlisted: POST /human-design/chart",
1136
1560
  "Non-GET allowlisted: POST /human-design/composite",
1561
+ "Non-GET allowlisted: POST /human-design/cycles/opposition",
1562
+ "Non-GET allowlisted: POST /human-design/cycles/return",
1563
+ "Non-GET allowlisted: POST /human-design/cycles/solar-return",
1564
+ "Non-GET allowlisted: POST /human-design/penta",
1137
1565
  "Non-GET allowlisted: POST /human-design/transit-chart",
1566
+ "Non-GET allowlisted: POST /human-design/transit",
1138
1567
  "Non-GET allowlisted: POST /predictive/returns/lunar",
1139
1568
  "Non-GET allowlisted: POST /predictive/returns/solar",
1140
1569
  "Non-GET allowlisted: POST /predictive/returns",
1141
1570
  "Non-GET allowlisted: POST /predictive/time-lords/firdaria",
1142
1571
  "Non-GET allowlisted: POST /predictive/time-lords/profections",
1143
1572
  "Non-GET allowlisted: POST /predictive/time-lords/zodiacal-releasing",
1573
+ "Non-GET allowlisted: POST /predictive/transit-chart",
1574
+ "Non-GET allowlisted: POST /predictive/transits/planet-to-degree",
1575
+ "Non-GET allowlisted: POST /predictive/transits/search",
1576
+ "Non-GET allowlisted: POST /predictive/transits/sign-ingresses",
1577
+ "Non-GET allowlisted: POST /time/julian-day",
1578
+ "Non-GET allowlisted: POST /time/scales",
1579
+ "Non-GET allowlisted: POST /timezone/lookup",
1580
+ "Non-GET allowlisted: POST /timezone/offset",
1581
+ "Non-GET allowlisted: POST /vedic/chart",
1144
1582
  "Non-GET allowlisted: POST /visualization/bi-wheel",
1145
1583
  "Non-GET allowlisted: POST /visualization/bodygraph",
1146
1584
  "Non-GET allowlisted: POST /visualization/chart-wheel"
@@ -123,9 +123,9 @@ const BASE_TOOLSET = [
123
123
  "timezone_resolve",
124
124
  "account_usage",
125
125
  "dev_read_api",
126
- // The write half of the escape hatch. 26 of the 31 allowlisted operations
126
+ // The write half of the escape hatch. 76 of the 120 allowlisted operations
127
127
  // are POST — BASE without dev_write_api would strand a toolset caller with
128
- // only the 5 GET proxies. (Deliberately NOT advertised in `core`, where the
128
+ // only the 44 GET proxies. (Deliberately NOT advertised in `core`, where the
129
129
  // curated typed tools cover the write surface; a toolset selection has no
130
130
  // such coverage, so it needs the proxy whole.)
131
131
  "dev_write_api",
@@ -35,6 +35,10 @@ registerTool({
35
35
  type: "string",
36
36
  enum: ["light", "dark", "mono"],
37
37
  description: "Aesthetic style of the chart: 'light' (default, warm cream background), 'dark' (deep navy), or 'mono' (black-and-white print-ready).",
38
+ },
39
+ include_angle_aspects: {
40
+ type: "boolean",
41
+ description: "Also draw aspects between planets and the four chart angles (Ascendant, Descendant, Midheaven, Imum Coeli) as lines on the wheel. Angle aspects use tighter orbs than planet-planet aspects, and angle-to-angle pairs are never drawn. Off by default: these hits are location-dependent, so a relocated chart keeps every planet-planet aspect and changes every angle aspect.",
38
42
  }
39
43
  },
40
44
  required: ["datetime_a", "latitude_a", "longitude_a", "datetime_b", "latitude_b", "longitude_b"],
@@ -76,6 +80,9 @@ registerTool({
76
80
  }
77
81
  const style = pickEnum(args.style, ["light", "dark", "mono"]);
78
82
  const styleParam = style ? `&style=${style}` : "";
79
- return await getActiveClient().post(`/visualization/bi-wheel?format=svg&size=800${styleParam}`, body);
83
+ // Only sent when asked for. The endpoint defaults it to false and the
84
+ // wheel's existing output must not change for callers who omit it.
85
+ const angleAspectsParam = args.include_angle_aspects === true ? "&include_angle_aspects=true" : "";
86
+ return await getActiveClient().post(`/visualization/bi-wheel?format=svg&size=800${styleParam}${angleAspectsParam}`, body);
80
87
  },
81
88
  });
@@ -40,6 +40,10 @@ registerTool({
40
40
  type: "string",
41
41
  enum: ["light", "dark", "mono"],
42
42
  description: "Aesthetic style of the chart: 'light' (default, warm cream background), 'dark' (deep navy), or 'mono' (black-and-white print-ready).",
43
+ },
44
+ include_angle_aspects: {
45
+ type: "boolean",
46
+ description: "Also draw aspects between planets and the four chart angles (Ascendant, Descendant, Midheaven, Imum Coeli) as lines on the wheel. Angle aspects use tighter orbs than planet-planet aspects, and angle-to-angle pairs are never drawn. Off by default: these hits are location-dependent, so a relocated chart keeps every planet-planet aspect and changes every angle aspect.",
43
47
  }
44
48
  },
45
49
  required: ["datetime", "latitude", "longitude"],
@@ -69,6 +73,9 @@ registerTool({
69
73
  }
70
74
  const style = pickEnum(args.style, ["light", "dark", "mono"]);
71
75
  const styleParam = style ? `&style=${style}` : "";
72
- return await getActiveClient().post(`/visualization/chart-wheel?format=svg&size=800${styleParam}`, body);
76
+ // Only sent when asked for. The endpoint defaults it to false and the
77
+ // wheel's existing output must not change for callers who omit it.
78
+ const angleAspectsParam = args.include_angle_aspects === true ? "&include_angle_aspects=true" : "";
79
+ return await getActiveClient().post(`/visualization/chart-wheel?format=svg&size=800${styleParam}${angleAspectsParam}`, body);
73
80
  },
74
81
  });
@@ -92,6 +92,20 @@ registerTool({
92
92
  "grid. Off by default; minors use their own orbs, so this widens the grid without changing " +
93
93
  "any major aspect.",
94
94
  },
95
+ include_fixed_stars: {
96
+ type: "boolean",
97
+ description: "Add fixed-star conjunctions (Regulus, Algol, Spica and the catalog) against the chart's " +
98
+ "bodies and angles. Honoured by the endpoint since 4.14.0; same zodiac frame as the chart.",
99
+ },
100
+ declinations: {
101
+ type: "boolean",
102
+ description: "Add each body's declination and out-of-bounds flag, plus parallel/contraparallel aspects " +
103
+ "(1.5° orb).",
104
+ },
105
+ solar_relationships: {
106
+ type: "boolean",
107
+ description: "Classify combustion, cazimi and under-beams for Moon–Saturn relative to the Sun.",
108
+ },
95
109
  include_visual: {
96
110
  type: "boolean",
97
111
  description: "When true, renders the natal chart wheel as an SVG and embeds it directly in the response. " +
@@ -182,6 +196,29 @@ registerTool({
182
196
  include_hermetic_lots: true,
183
197
  };
184
198
  }
199
+ // All three below were ghost parameters until the 2026-08-27 fan-out
200
+ // (#719) wired them server-side; they are exposed here only because the
201
+ // endpoint now actually reads them.
202
+ if (args.include_fixed_stars) {
203
+ body.configuration = {
204
+ ...(body.configuration || {}),
205
+ fixed_star_options: { include: true },
206
+ };
207
+ }
208
+ if (args.declinations) {
209
+ body.options = {
210
+ ...body.options,
211
+ include_declination_values: true,
212
+ include_declination_aspects: true,
213
+ include_out_of_bounds: true,
214
+ };
215
+ }
216
+ if (args.solar_relationships) {
217
+ body.enhanced_options = {
218
+ ...(body.enhanced_options || {}),
219
+ solar_relationships: true,
220
+ };
221
+ }
185
222
  const query = {};
186
223
  if (args.format)
187
224
  query.format = args.format;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openephemeris/mcp-server",
3
- "version": "4.13.0",
3
+ "version": "4.14.1",
4
4
  "description": "Model Context Protocol server for the Open Ephemeris astronomical computation API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",