@openephemeris/mcp-server 3.5.1 → 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
 
@@ -224,8 +224,8 @@ OpenEphemeris API
224
224
 
225
225
  Generated by `npm run sync:readme` from `config/dev-allowlist.json` and the live tool registry.
226
226
 
227
- - Allowlisted operations: **20**
228
- - Methods: `GET=4`, `POST=16`, `PUT=0`, `PATCH=0`, `DELETE=0`
227
+ - Allowlisted operations: **22**
228
+ - Methods: `GET=4`, `POST=18`, `PUT=0`, `PATCH=0`, `DELETE=0`
229
229
  - Registered tools (`OPENEPHEMERIS_PROFILE=dev`): **48**
230
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`
231
231
  - Generic tools:
@@ -234,7 +234,7 @@ Generated by `npm run sync:readme` from `config/dev-allowlist.json` and the live
234
234
 
235
235
  | Family | Operations | Example |
236
236
  |---|---:|---|
237
- | `acg` | 2 | `POST /acg/ccg`, `POST /acg/power-lines` |
237
+ | `acg` | 4 | `POST /acg/ccg`, `POST /acg/hits` |
238
238
  | `comparative` | 5 | `POST /comparative/composite`, `POST /comparative/composite/midpoint` |
239
239
  | `electional` | 4 | `GET /electional/aspect-search`, `GET /electional/find-window` |
240
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-29T02:31:11.230Z",
100
- "openapi_sha256": "c92376455af5f33481fd676a126d9b9436b30d5dd0c681d33258cf74a19ba18b",
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",
@@ -629,14 +645,6 @@
629
645
  ],
630
646
  "operationId": "calculate_harmonics_ephemeris_harmonics_post"
631
647
  },
632
- {
633
- "method": "POST",
634
- "path": "/ephemeris/heatmap/score",
635
- "tags": [
636
- "Ephemeris"
637
- ],
638
- "operationId": "HeatmapScoreEphemerisHeatmapScorePost"
639
- },
640
648
  {
641
649
  "method": "POST",
642
650
  "path": "/ephemeris/hermetic-lots",
@@ -979,6 +987,8 @@
979
987
  "errors": [],
980
988
  "warnings": [
981
989
  "Non-GET allowlisted: POST /acg/ccg",
990
+ "Non-GET allowlisted: POST /acg/hits",
991
+ "Non-GET allowlisted: POST /acg/local-space",
982
992
  "Non-GET allowlisted: POST /acg/power-lines",
983
993
  "Non-GET allowlisted: POST /comparative/composite/midpoint",
984
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openephemeris/mcp-server",
3
- "version": "3.5.1",
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
  }