@openephemeris/mcp-server 4.14.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,31 @@ 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
+
10
35
  ## [4.14.0] — 2026-08-27
11
36
 
12
37
  ### 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
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openephemeris/mcp-server",
3
- "version": "4.14.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",