@openephemeris/mcp-server 3.5.0 → 3.5.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,15 @@ Version numbering follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## [3.5.1] — 2026-03-31
11
+
12
+ ### Changed
13
+ - Added `mcp-server`, `modelcontextprotocol`, `model-context-protocol` to package.json keywords for registry discovery
14
+ - Fixed `OE_API_KEY` → `OPENEPHEMERIS_API_KEY` in registry submission guide
15
+ - Corrected GitHub links from `MeridianMap` to `Spirit-River` org
16
+
17
+ ---
18
+
10
19
  ## [3.5.0] — 2026-03-28
11
20
 
12
21
  ### Added
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # OpenEphemeris MCP Server
2
2
 
3
- [![System Status](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fblacksmithops%2Fbetter-stack-shields%2Fmain%2Fbetterstack.json&label=Status&color=success)](https://status.openephemeris.com/)
3
+ [![System Status](https://img.shields.io/badge/Status-Operational-brightgreen)](https://status.openephemeris.com/)
4
4
 
5
5
  Model Context Protocol server for OpenEphemeris. This package exposes typed astrology tools and an allowlist-gated generic proxy (`dev.call`) for MCP-compatible clients.
6
6
 
@@ -86,12 +86,57 @@ This package runs as a local stdio MCP server. Remote-only clients require a hos
86
86
 
87
87
  ## What You Can Ask
88
88
 
89
- - "Calculate a natal chart for 1990-04-15 14:30 in Chicago."
90
- - "Find transit events for the next 6 months."
91
- - "Get moon phase and void-of-course status right now."
92
- - "Find an electional window for signing a contract next month."
93
- - "Generate Human Design chart data from birth details."
94
- - "Call `/predictive/transits/search` with `format=llm`."
89
+ ```
90
+ "Calculate a natal chart for 1990-04-15 at 2:30 PM in Chicago."
91
+ "Find all Saturn transits to my natal Sun in the next 6 months."
92
+ "Get the current moon phase and void-of-course status."
93
+ "Find the next solar eclipse visible from Tokyo."
94
+ "Find the best time to sign a contract in March — electional window."
95
+ "Generate a Human Design chart for my birth data."
96
+ "What is my Vedic (sidereal) chart?"
97
+ "Calculate my Chinese BaZi (Four Pillars) chart."
98
+ "Show me my Astrocartography power lines — where is my Venus line on the map?"
99
+ "Find all ACG lines within 3° of Paris for my chart."
100
+ "Calculate a synastry chart between two people."
101
+ "Find the next Venus Star Point and my relationship to it."
102
+ "What are the active planetary stations in the next 3 months?"
103
+ "Calculate primary directions for the next 5 years."
104
+ "Find my Firdaria time lord period."
105
+ "What is the sidereal time and delta-T right now?"
106
+ ```
107
+
108
+ ## Tools at a Glance
109
+
110
+ | Category | Tool | Tier |
111
+ |---|---|---|
112
+ | Natal chart | `ephemeris_natal_chart` | Explorer |
113
+ | Transit forecast | `ephemeris_transits` | Personal |
114
+ | Transit chart snapshot | `ephemeris_natal_transits` | Personal |
115
+ | Moon phase / VOC | `ephemeris_moon_phase` | Explorer |
116
+ | Eclipse next visible | `ephemeris_next_eclipse` | Explorer |
117
+ | Electional window | `ephemeris_electional` | Developer |
118
+ | Moment analysis | `electional_moment_analysis` | Developer |
119
+ | Station tracker | `electional_station_tracker` | Developer |
120
+ | Aspect search | `electional_aspect_search` | Developer |
121
+ | Human Design chart | `human_design_chart` | Explorer |
122
+ | HD composite | `human_design_composite` | Explorer |
123
+ | HD penta | `human_design_penta` | Explorer |
124
+ | HD return / opposition | `hd_planetary_return`, `hd_opposition` | Explorer |
125
+ | Vedic chart | `vedic_chart` | Explorer |
126
+ | BaZi (Chinese) | `chinese_bazi` | Explorer |
127
+ | Synastry | `ephemeris_synastry` | Developer |
128
+ | Composite chart | `ephemeris_composite` | Developer |
129
+ | Relocation chart | `ephemeris_relocation` | Developer |
130
+ | Progressed chart | `ephemeris_progressed_chart` | Explorer |
131
+ | Solar return | `ephemeris_solar_return` | Developer |
132
+ | Lunar return | `ephemeris_lunar_return` | Developer |
133
+ | Planetary return | `ephemeris_planetary_return` | Developer |
134
+ | Astrocartography lines | `acg_power_lines` | Developer |
135
+ | ACG hits at location | `acg_hits` | Scale |
136
+ | Venus Star Points | `venus_star_points` + 4 more | Explorer |
137
+ | Chart wheel image | `ephemeris_chart_wheel` | Developer |
138
+ | Bi-wheel image | `ephemeris_bi_wheel` | Developer |
139
+ | Dignities / Midpoints / Fixed stars | `ephemeris_dignities`, `ephemeris_midpoints`, `ephemeris_fixed_stars` | Explorer |
95
140
 
96
141
  ## Tooling Model
97
142
 
@@ -179,17 +224,17 @@ OpenEphemeris API
179
224
 
180
225
  Generated by `npm run sync:readme` from `config/dev-allowlist.json` and the live tool registry.
181
226
 
182
- - Allowlisted operations: **20**
183
- - Methods: `GET=4`, `POST=16`, `PUT=0`, `PATCH=0`, `DELETE=0`
184
- - Registered tools (`OPENEPHEMERIS_PROFILE=dev`): **50**
185
- - Typed tools: `acg_hits`, `acg_power_lines`, `auth_login`, `auth_logout`, `auth_status`, `chinese_bazi`, `dev_call`, `dev_list_allowed`, `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_overlay`, `ephemeris_planet_position`, `ephemeris_planetary_return`, `ephemeris_progressed_chart`, `ephemeris_relocation`, `ephemeris_retrograde_status`, `ephemeris_solar_return`, `ephemeris_synastry`, `ephemeris_transits`, `hd_opposition`, `hd_planetary_return`, `human_design_chart`, `human_design_composite`, `human_design_penta`, `vedic_chart`, `venus_eight_year_star`, `venus_elongations`, `venus_phase`, `venus_star_points`, `venus_star_points_conjunctions`, `venus_stations`
227
+ - Allowlisted operations: **22**
228
+ - Methods: `GET=4`, `POST=18`, `PUT=0`, `PATCH=0`, `DELETE=0`
229
+ - Registered tools (`OPENEPHEMERIS_PROFILE=dev`): **48**
230
+ - Typed tools: `auth_login`, `auth_logout`, `auth_status`, `chinese_bazi`, `dev_call`, `dev_list_allowed`, `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_overlay`, `ephemeris_planet_position`, `ephemeris_planetary_return`, `ephemeris_progressed_chart`, `ephemeris_relocation`, `ephemeris_retrograde_status`, `ephemeris_solar_return`, `ephemeris_synastry`, `ephemeris_transits`, `hd_opposition`, `hd_planetary_return`, `human_design_chart`, `human_design_composite`, `human_design_penta`, `vedic_chart`, `venus_eight_year_star`, `venus_elongations`, `venus_phase`, `venus_star_points`, `venus_star_points_conjunctions`, `venus_stations`
186
231
  - Generic tools:
187
232
 
188
233
  ### Allowlist Families
189
234
 
190
235
  | Family | Operations | Example |
191
236
  |---|---:|---|
192
- | `acg` | 2 | `POST /acg/ccg`, `POST /acg/power-lines` |
237
+ | `acg` | 4 | `POST /acg/ccg`, `POST /acg/hits` |
193
238
  | `comparative` | 5 | `POST /comparative/composite`, `POST /comparative/composite/midpoint` |
194
239
  | `electional` | 4 | `GET /electional/aspect-search`, `GET /electional/find-window` |
195
240
  | `ephemeris` | 1 | `POST /ephemeris/relocation` |
@@ -19,6 +19,14 @@
19
19
  "method": "POST",
20
20
  "path": "/acg/ccg"
21
21
  },
22
+ {
23
+ "method": "POST",
24
+ "path": "/acg/hits"
25
+ },
26
+ {
27
+ "method": "POST",
28
+ "path": "/acg/local-space"
29
+ },
22
30
  {
23
31
  "method": "POST",
24
32
  "path": "/acg/power-lines"
@@ -96,8 +104,8 @@
96
104
  "path": "/visualization/chart-wheel"
97
105
  }
98
106
  ],
99
- "last_generated_at": "2026-03-28T17:28:53.352Z",
100
- "openapi_sha256": "cb3161103c61dfa063dcfed946f96ecf6c1df3c9f6c5d20378b54583d70d2f75",
107
+ "last_generated_at": "2026-04-02T14:37:22.841Z",
108
+ "openapi_sha256": "fd75c2b6eae40884622067c1489e61a2d35b9cce9cd57943e989210a6728a197",
101
109
  "candidates_get": [
102
110
  {
103
111
  "method": "GET",
@@ -469,6 +477,14 @@
469
477
  ],
470
478
  "operationId": "features_acg_features_post"
471
479
  },
480
+ {
481
+ "method": "POST",
482
+ "path": "/acg/heatmap/composite",
483
+ "tags": [
484
+ "Astrocartography"
485
+ ],
486
+ "operationId": "AcgHeatmapCompositeAcgHeatmapCompositePost"
487
+ },
472
488
  {
473
489
  "method": "POST",
474
490
  "path": "/acg/hermetic-lines",
@@ -971,6 +987,8 @@
971
987
  "errors": [],
972
988
  "warnings": [
973
989
  "Non-GET allowlisted: POST /acg/ccg",
990
+ "Non-GET allowlisted: POST /acg/hits",
991
+ "Non-GET allowlisted: POST /acg/local-space",
974
992
  "Non-GET allowlisted: POST /acg/power-lines",
975
993
  "Non-GET allowlisted: POST /comparative/composite/midpoint",
976
994
  "Non-GET allowlisted: POST /comparative/composite",
@@ -144,7 +144,7 @@ async function main() {
144
144
  app.use((_req, res, next) => {
145
145
  res.setHeader("Access-Control-Allow-Origin", "*");
146
146
  res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
147
- res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-API-Key, X-Meridian-API-Key");
147
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-API-Key, X-OpenEphemeris-API-Key");
148
148
  if (_req.method === "OPTIONS") {
149
149
  res.status(204).end();
150
150
  return;
@@ -190,7 +190,7 @@ async function main() {
190
190
  // Extract API key from query param or header
191
191
  const apiKey = req.query.apiKey ||
192
192
  req.headers["x-api-key"] ||
193
- req.headers["x-meridian-api-key"] ||
193
+ req.headers["x-openephemeris-api-key"] ||
194
194
  req.headers["authorization"]?.replace(/^Bearer\s+/i, "");
195
195
  if (!apiKey) {
196
196
  res.status(401).json({
package/dist/tools/dev.js CHANGED
@@ -165,6 +165,12 @@ registerTool({
165
165
  query.format = "llm";
166
166
  }
167
167
  }
168
+ // Auto-inject format=png for visualization endpoints when no format specified.
169
+ // MCP image handlers only accept PNG/JPG/GIF/WEBP — SVG won't render inline.
170
+ const isVisualizationPath = pathname.startsWith("/visualization/") || pathname.startsWith("/comparative/visualization/");
171
+ if (isVisualizationPath && !query.format) {
172
+ query.format = "png";
173
+ }
168
174
  return await backendClient.request(method, pathname, {
169
175
  params: query,
170
176
  data: body,
@@ -36,7 +36,6 @@ export async function initTools(profile) {
36
36
  await import("./specialized/returns.js");
37
37
  await import("./specialized/progressed.js");
38
38
  await import("./specialized/ephemeris_core.js");
39
- await import("./specialized/acg.js");
40
39
  await import("./specialized/comparative.js");
41
40
  await import("./specialized/hd_group.js");
42
41
  await import("./specialized/hd_cycles.js");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openephemeris/mcp-server",
3
- "version": "3.5.0",
3
+ "version": "3.5.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",
@@ -42,6 +42,9 @@
42
42
  },
43
43
  "keywords": [
44
44
  "mcp",
45
+ "mcp-server",
46
+ "modelcontextprotocol",
47
+ "model-context-protocol",
45
48
  "astrology",
46
49
  "astronomy",
47
50
  "ephemeris",
@@ -52,22 +55,27 @@
52
55
  "swiss ephemeris"
53
56
  ],
54
57
  "author": "Open Ephemeris",
58
+ "homepage": "https://openephemeris.com",
59
+ "repository": {
60
+ "type": "git",
61
+ "url": "https://github.com/Spirit-River/openephemeris-MCP.git"
62
+ },
55
63
  "license": "MIT",
56
64
  "engines": {
57
65
  "node": ">=18.0.0"
58
66
  },
59
67
  "dependencies": {
60
- "@modelcontextprotocol/sdk": "^1.24.3",
61
- "axios": "^1.13.2",
62
- "express": "^5.1.0",
63
- "zod": "^4.1.13"
68
+ "@modelcontextprotocol/sdk": "1.24.3",
69
+ "axios": "1.13.2",
70
+ "express": "5.1.0",
71
+ "zod": "4.1.13"
64
72
  },
65
73
  "devDependencies": {
66
- "@types/express": "^5.0.3",
67
- "@types/node": "^25.0.1",
68
- "tsx": "^4.21.0",
69
- "typescript": "^5.9.3",
70
- "vitest": "^4.0.15"
74
+ "@types/express": "5.0.3",
75
+ "@types/node": "25.0.1",
76
+ "tsx": "4.21.0",
77
+ "typescript": "5.9.3",
78
+ "vitest": "4.0.15"
71
79
  },
72
80
  "packageManager": "pnpm@10.27.0+sha512.72d699da16b1179c14ba9e64dc71c9a40988cbdc65c264cb0e489db7de917f20dcf4d64d8723625f2969ba52d4b7e2a1170682d9ac2a5dcaeaab732b7e16f04a"
73
81
  }