@openephemeris/mcp-server 4.14.0 → 4.14.2

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,51 @@ Version numbering follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## [4.14.2] — 2026-09-01
11
+
12
+ ### Fixed
13
+ - **Two `CREDIT COST` figures baked into live tool descriptions were wrong** —
14
+ not just stale plugin docs, the actual strings Claude reads before deciding
15
+ to call a tool. `ephemeris_transits` claimed 6 credits (the real cost, per
16
+ the `/predictive/` billing tier, is 5); `acg_hits` claimed 15 (it falls to
17
+ the generic `/acg/` tier, which is 10 — the 15/20 figures belong to the
18
+ heatmap and relational-parans routes only). Verified directly against
19
+ `usage_meter.go` rather than the description strings themselves, since
20
+ those turned out to be the thing that was wrong.
21
+
22
+ ### Changed
23
+ - Plugin marketing copy no longer leads with "sub-arcsecond" or "JPL DE440"
24
+ — reframed around the more concrete fact that this runs on NASA
25
+ mission-grade planetary data. The technical terms stay as backup detail
26
+ for readers who want them, not the opening line.
27
+
28
+ ---
29
+
30
+ ## [4.14.1] — 2026-09-01
31
+
32
+ ### Fixed
33
+ - **`dev_read_api`/`dev_write_api` rejected 90 endpoints that were supposed to
34
+ be reachable.** The dev allowlist generator recognized invented tier names
35
+ (`free`/`pro`/`production`) instead of the real product tiers
36
+ (`Explorer`/`Developer`/`Startup`/`Scale`/`Enterprise`), so every
37
+ Explorer-tier operation — `location/autocomplete`, `catalogs/bodies`,
38
+ `moon/phase`, the eclipse and agro families, `tidal/forcing`,
39
+ `calendar/astrology/moon-phases`, `chinese/zodiac`, and more — silently
40
+ dropped out of the generated allowlist. The allowlist is now 120 operations
41
+ (was 30).
42
+ - **The Claude plugin's MCP server likely never registered.** `plugin.json`
43
+ declared the bundled server under `"mcp"`; the plugin manifest schema
44
+ requires `"mcpServers"` (nested by server name).
45
+ - Corrected several stale credit-cost figures in the plugin `SKILL.md` and
46
+ `README.md` against the live backend (`human_design_chart`, `chart_wheel`,
47
+ `bi_wheel`: 2 credits, not 1; `acg_power_lines`, `acg_hits`: 10 credits, not
48
+ 2), fixed dot-notation tool references in the worked examples that never
49
+ matched a real tool name (e.g. `ephemeris.natal_chart` →
50
+ `ephemeris_natal_chart`), and added the telemetry disclosure that was
51
+ missing from the plugin's privacy section.
52
+
53
+ ---
54
+
10
55
  ## [4.14.0] — 2026-08-27
11
56
 
12
57
  ### 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",
@@ -109,7 +109,7 @@ registerTool({
109
109
  "✅ USE THIS TOOL FOR: 'Is [city] good for me?', 'What planets affect me in Tokyo?', " +
110
110
  "'What ACG lines run through Paris for my chart?', 'Which cities are under my Jupiter line?'\n" +
111
111
  "❌ NOT FOR: Full global map geometry → use acg_power_lines for that instead.\n\n" +
112
- "CREDIT COST: 15 credits per call.\n\n" +
112
+ "CREDIT COST: 10 credits per call.\n\n" +
113
113
  "EXAMPLE: All ACG lines within 3° of Paris for a chart born 1990-04-15 in Chicago:\n" +
114
114
  " birth_datetime='1990-04-15T14:30:00', timezone='America/Chicago',\n" +
115
115
  " birth_latitude=41.8781, birth_longitude=-87.6298,\n" +
@@ -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
  });
@@ -17,7 +17,7 @@ registerTool({
17
17
  " Example: Outer planets to natal Sun/Moon → transiting_planets=['saturn','uranus','neptune','pluto'], natal_points=['sun','moon']\n\n" +
18
18
  "DEFAULT natal_points (when omitted): sun, moon, mercury, venus, mars, jupiter, saturn.\n" +
19
19
  "SEARCH RANGE LIMITS: Explorer/PayG tier → 1 year max; Pro → 5 years; Startup → 10 years.\n" +
20
- "CREDIT COST: 6 credits per call.",
20
+ "CREDIT COST: 5 credits per call.",
21
21
  inputSchema: {
22
22
  type: "object",
23
23
  properties: {
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.2",
4
4
  "description": "Model Context Protocol server for the Open Ephemeris astronomical computation API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",