@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 +9 -0
- package/README.md +57 -12
- package/config/dev-allowlist.json +20 -2
- package/dist/server-sse.js +2 -2
- package/dist/tools/dev.js +6 -0
- package/dist/tools/index.js +0 -1
- package/package.json +18 -10
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
|
-
[](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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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: **
|
|
183
|
-
- Methods: `GET=4`, `POST=
|
|
184
|
-
- Registered tools (`OPENEPHEMERIS_PROFILE=dev`): **
|
|
185
|
-
- Typed tools: `
|
|
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` |
|
|
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-
|
|
100
|
-
"openapi_sha256": "
|
|
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",
|
package/dist/server-sse.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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/dist/tools/index.js
CHANGED
|
@@ -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.
|
|
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": "
|
|
61
|
-
"axios": "
|
|
62
|
-
"express": "
|
|
63
|
-
"zod": "
|
|
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": "
|
|
67
|
-
"@types/node": "
|
|
68
|
-
"tsx": "
|
|
69
|
-
"typescript": "
|
|
70
|
-
"vitest": "
|
|
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
|
}
|