@cosmosos/mcp-ephemeris 0.2.0 → 0.2.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.
Files changed (3) hide show
  1. package/README.md +105 -88
  2. package/dist/index.js +20 -20
  3. package/package.json +10 -4
package/README.md CHANGED
@@ -1,17 +1,19 @@
1
1
  # @cosmosos/mcp-ephemeris
2
2
 
3
- **Le vrai ciel, pour votre IA.** Un serveur [MCP](https://modelcontextprotocol.io)
4
- qui donne à n'importe quel assistant (Claude, Cursor, agents) des **positions
5
- planétaires calculées** — jamais devinéesgrâce au moteur d'éphémérides
6
- [Swiss Ephemeris](https://www.astro.com/swisseph/), et **validées contre
7
- JPL Horizons (NASA)** à moins d'une seconde d'arc.
3
+ **The real sky, for your AI.** An [MCP](https://modelcontextprotocol.io) server
4
+ that gives any assistant (Claude, Cursor, agents) **computed planetary
5
+ positions** — never guessedpowered by the
6
+ [Swiss Ephemeris](https://www.astro.com/swisseph/) engine, and **validated
7
+ against JPL Horizons (NASA)** to under one arcsecond.
8
8
 
9
- > **Principe cardinal : le LLM ne calcule jamais.** Ce serveur est une façade sur
10
- > un moteur d'éphémérides. Le modèle interprète ; le ciel, lui, est un fait.
9
+ > **Cardinal rule: the LLM never computes.** This server is a facade over an
10
+ > ephemeris engine. The model interprets; the sky is a fact.
11
11
 
12
- ## Démarrage rapide (Claude Desktop)
12
+ *(Version française : <https://llmastro.com/notre-moteur>)*
13
13
 
14
- Ouvrez **Réglages Développeur → Modifier la configuration**, puis ajoutez&nbsp;:
14
+ ## Quick start (Claude Desktop)
15
+
16
+ Open **Settings → Developer → Edit Config**, then add:
15
17
 
16
18
  ```json
17
19
  {
@@ -24,113 +26,128 @@ Ouvrez **Réglages → Développeur → Modifier la configuration**, puis ajoute
24
26
  }
25
27
  ```
26
28
 
27
- Quittez complètement Claude Desktop (barre des tâches) et relancez-le. Demandez
28
- ensuite&nbsp;: Quelle est la phase de la Lune aujourd'hui ? »* Claude appelle
29
- le serveur et répond à partir de positions réellement calculées.
29
+ Fully quit Claude Desktop (system tray) and relaunch it. Then ask:
30
+ *"What's the moon phase today?"* Claude calls the server and answers from
31
+ genuinely computed positions.
30
32
 
31
- **Cursor / Windsurf / autres** : ajoutez la même entrée `llmastro`
32
- (`command: npx`, `args: ["-y", "@cosmosos/mcp-ephemeris"]`) dans la configuration
33
- MCP de votre client.
33
+ **Cursor / Windsurf / others**: add the same `llmastro` entry
34
+ (`command: npx`, `args: ["-y", "@cosmosos/mcp-ephemeris"]`) to your client's MCP
35
+ configuration.
34
36
 
35
- ## Outils exposés
37
+ ## Tools exposed
36
38
 
37
- **19 outils**, tous adossés au même moteur calculé côté serveur.
39
+ **19 tools**, all backed by the same server-side computed engine.
38
40
 
39
- ### Positions & ciel
40
- | Outil | Entrée | Sortie |
41
+ ### Positions & sky
42
+ | Tool | Input | Output |
41
43
  |---|---|---|
42
- | `get_planet_positions` | `datetime` (ISO UTC) | positions écliptiques de tous les corps (signe, degré, rétro) |
43
- | `get_moon_phase` | `datetime` (ISO UTC) | phase lunaire, illumination %, description |
44
- | `get_current_sky` | `latitude`, `longitude` | le ciel maintenant (transits du moment) pour un lieu |
45
- | `get_aspects` | `datetime` (ISO UTC) | grille d'aspects majeurs+mineurs entre les corps |
44
+ | `get_planet_positions` | `datetime` (ISO UTC) | ecliptic positions of all bodies (sign, degree, retro) |
45
+ | `get_moon_phase` | `datetime` (ISO UTC) | moon phase, illumination %, description |
46
+ | `get_current_sky` | `latitude`, `longitude` | the sky right now (current transits) for a place |
47
+ | `get_aspects` | `datetime` (ISO UTC) | grid of major + minor aspects between bodies |
46
48
 
47
- ### Thème natal & relations
48
- | Outil | Entrée | Sortie |
49
+ ### Natal chart & relationships
50
+ | Tool | Input | Output |
49
51
  |---|---|---|
50
- | `get_natal_chart` | naissance + `zodiac` (tropical/sidéral), `houseSystem` (7 systèmes) | thème complet : maisons, aspects, ASC/MC, phase lunaire, Lots hermétiques |
51
- | `get_transits` | naissance + `datetime` optionnel | aspects transit→natal, triés par orbe |
52
- | `get_synastry` | deux naissances | aspects inter-thèmes + résumé harmonie/tension |
53
- | `get_composite_chart` | deux naissances | thème composite par mi-points |
54
- | `get_secondary_progressions` | naissance + `targetDate` | positions progressées (« un jour = un an ») |
55
- | `get_solar_return` | naissance + `year` (+ lieu optionnel) | instant + thème du retour solaire |
56
- | `get_lunar_return` | naissance + `after` optionnel | instant + thème du prochain retour lunaire |
57
-
58
- ### Événements célestes
59
- | Outil | Entrée | Sortie |
52
+ | `get_natal_chart` | birth + `zodiac` (tropical/sidereal), `houseSystem` (7 systems) | full chart: houses, aspects, ASC/MC, moon phase, Hermetic Lots |
53
+ | `get_transits` | birth + optional `datetime` | transit→natal aspects, sorted by orb |
54
+ | `get_synastry` | two births | inter-chart aspects + harmony/tension summary |
55
+ | `get_composite_chart` | two births | midpoint composite chart |
56
+ | `get_secondary_progressions` | birth + `targetDate` | progressed positions ("a day for a year") |
57
+ | `get_solar_return` | birth + `year` (+ optional place) | instant + chart of the solar return |
58
+ | `get_lunar_return` | birth + optional `after` | instant + chart of the next lunar return |
59
+
60
+ ### Celestial events
61
+ | Tool | Input | Output |
60
62
  |---|---|---|
61
- | `get_ingresses` | `body`, `start`, `end` | dates de changement de signe (robuste au rétrograde) |
62
- | `get_retrograde_windows` | `body`, `start`, `end` | stations rétrograde/directe sur la période |
63
- | `get_eclipse_details` | `datetime`, `kind` | magnitude, obscuration, Saros d'une éclipse connue *(swisseph)* |
64
- | `get_next_eclipse` | `from`, `kind`, `backward` optionnel | prochaine/précédente éclipse : maximum, type, contacts *(swisseph)* |
63
+ | `get_ingresses` | `body`, `start`, `end` | sign-change dates (retrograde-robust) |
64
+ | `get_retrograde_windows` | `body`, `start`, `end` | retrograde/direct stations over the range |
65
+ | `get_eclipse_details` | `datetime`, `kind` | magnitude, obscuration, Saros of a known eclipse *(swisseph)* |
66
+ | `get_next_eclipse` | `from`, `kind`, optional `backward` | next/previous eclipse: maximum, type, contacts *(swisseph)* |
65
67
 
66
- ### Astrocartographie, numérologie, autorité
67
- | Outil | Entrée | Sortie |
68
+ ### Astrocartography, numerology, authority
69
+ | Tool | Input | Output |
68
70
  |---|---|---|
69
- | `get_astrocartography` | `datetime` (ISO UTC) | lignes planétaires MC/IC + parans (croisements) |
70
- | `get_life_path` | `date` (YYYY-MM-DD) | nombre du chemin de vie (numérologie) |
71
- | `get_engine_diagnostic` | — | moteur actif, chargement de l'addon natif, précision réelle |
72
- | `validate_against_horizons` | `datetime`, `bodies` optionnel | écart de nos positions vs JPL Horizons (NASA) en secondes d'arc réseau requis |
71
+ | `get_astrocartography` | `datetime` (ISO UTC) | planetary MC/IC lines + parans (crossings) |
72
+ | `get_life_path` | `date` (YYYY-MM-DD) | life-path number (numerology) |
73
+ | `get_engine_diagnostic` | — | active engine, native addon load status, real precision |
74
+ | `validate_against_horizons` | `datetime`, optional `bodies` | delta of our positions vs JPL Horizons (NASA) in arcsecondsnetwork required |
73
75
 
74
- *(swisseph)* = nécessite l'addon natif Swiss Ephemeris ; renvoie `null` en repli AstraCore.
76
+ *(swisseph)* = requires the native Swiss Ephemeris addon; returns `null` on the AstraCore fallback.
75
77
 
76
- ## Précision
78
+ ## Precision
77
79
 
78
- Sous [Swiss Ephemeris](https://www.astro.com/swisseph/), les positions
79
- correspondent à la référence mondiale **JPL Horizons (NASA)** à moins d'une
80
- seconde d'arc (mesuré au 2026-07-19) :
80
+ Under [Swiss Ephemeris](https://www.astro.com/swisseph/), positions match the
81
+ world reference **JPL Horizons (NASA)** to under one arcsecond (measured
82
+ 2026-07-19):
81
83
 
82
- | Corps | Écart vs NASA |
84
+ | Body | Difference vs NASA |
83
85
  |---|---|
84
- | Soleil | 0,2″ |
85
- | Lune | 1,5″ |
86
- | Jupiter | 0,1″ |
87
- | Pluton | 0,4″ |
86
+ | Sun | 0.2″ |
87
+ | Moon | 1.5″ |
88
+ | Jupiter | 0.1″ |
89
+ | Pluto | 0.4″ |
88
90
 
89
- Vérifiez-le vous-même avec l'outil `validate_against_horizons`.
91
+ Check it yourself with the `validate_against_horizons` tool.
90
92
 
91
- ## Deux moteurs
93
+ ## Two engines
92
94
 
93
- Le calcul est routé selon la variable `ASTRO_ENGINE` :
95
+ Computation is routed by the `ASTRO_ENGINE` variable:
94
96
 
95
- - **`swisseph`** (par défaut) — Swiss Ephemeris, addon natif, précision
96
- sub-arcseconde. Se compile automatiquement une chaîne de build C++ est
97
- présente (Linux, macOS, la plupart des serveurs).
98
- - **`astracore`** — moteur maison pur TypeScript (VSOP/Meeus), **sans binaire
99
- natif**. Utilisé en repli automatique quand `swisseph` n'a pas pu être compilé
100
- (fréquent sous Windows). Soleil et Lune restent précis&nbsp;; les planètes
101
- externes dérivent de quelques minutes d'arc.
97
+ - **`swisseph`** (default) — Swiss Ephemeris, native addon, sub-arcsecond
98
+ precision. Compiles automatically wherever a C++ build chain is present
99
+ (Linux, macOS, most servers).
100
+ - **`astracore`** — in-house pure-TypeScript engine (VSOP/Meeus), **no native
101
+ binary**. Used as an automatic fallback when `swisseph` couldn't be compiled
102
+ (common on Windows). Sun and Moon stay accurate; outer planets drift by a few
103
+ arcminutes.
102
104
 
103
- Pour forcer un moteur : `ASTRO_ENGINE=swisseph` ou `ASTRO_ENGINE=astracore`.
105
+ To force an engine: `ASTRO_ENGINE=swisseph` or `ASTRO_ENGINE=astracore`.
104
106
 
105
- ## Confidentialité
107
+ ## Privacy
106
108
 
107
- Le serveur tourne **sur votre machine** : vos données de naissance ne sont
108
- envoyées nulle part. Seul `validate_against_horizons` effectue une requête
109
- sortante (vers l'API publique de la NASA).
109
+ The server runs **on your machine**: your birth data is sent nowhere. Only
110
+ `validate_against_horizons` makes an outbound request (to NASA's public API).
110
111
 
111
- ## Prérequis
112
+ ## Requirements
112
113
 
113
114
  - Node.js ≥ 20.
114
- - Pour la précision maximale (`swisseph`) : une chaîne de build C++
115
- (`python3`, `make`, un compilateur) sur la machine. Sinon, repli automatique
116
- sur `astracore`, sans configuration.
115
+ - For maximum precision (`swisseph`): a C++ build chain (`python3`, `make`, a
116
+ compiler) on the machine. Otherwise, automatic fallback to `astracore`, with
117
+ no configuration.
118
+
119
+ ## About
120
+
121
+ Powered by the astrology engine of [Llmastro](https://llmastro.com). Learn more
122
+ about the precision and architecture: <https://llmastro.com/notre-moteur>.
117
123
 
118
- ## À propos
124
+ ## License
119
125
 
120
- Propulsé par le moteur d'astrologie de [Llmastro](https://llmastro.com). En
121
- savoir plus sur la précision et l'architecture :
122
- <https://llmastro.com/notre-moteur>.
126
+ **Free for non-commercial use** (personal, research, education, non-profit
127
+ organizations) under the
128
+ [PolyForm Noncommercial 1.0.0](./LICENSE) license.
123
129
 
124
- ## Licence
130
+ **Commercial / professional use: a paid license is required.** To obtain one,
131
+ contact KAIROSAST LTD via <https://llmastro.com/contact>.
125
132
 
126
- **Gratuit pour un usage non commercial** (personnel, recherche, éducation,
127
- organisations à but non lucratif) sous licence
128
- [PolyForm Noncommercial 1.0.0](./LICENSE).
133
+ Note: the optional `swisseph` dependency (Swiss Ephemeris, Astrodienst) has its
134
+ own license (AGPL or a commercial Swiss Ephemeris license) and is not covered by
135
+ this one. Professional use must comply with it separately.
129
136
 
130
- **Usage commercial / professionnel : licence payante requise.** Pour l'obtenir,
131
- contactez KAIROSAST LTD via <https://llmastro.com/contact>.
137
+ ## Development
138
+
139
+ This repository is **self-contained**: the ephemeris engine is vendored in
140
+ `vendor/ephemeris/` (source), and the build inlines it into `dist/` via
141
+ [`tsup`](https://tsup.egoist.dev/).
142
+
143
+ ```bash
144
+ pnpm install # or npm install
145
+ pnpm build # bundles dist/index.js (engine inlined)
146
+ pnpm start # runs the MCP server (stdio) locally
147
+ ```
132
148
 
133
- À noter : la dépendance optionnelle `swisseph` (Swiss Ephemeris, Astrodienst) a
134
- sa propre licence (AGPL ou licence commerciale Swiss Ephemeris) et n'est pas
135
- couverte par la présente. Les usages professionnels doivent s'y conformer
136
- séparément.
149
+ - Default engine: `swisseph` (sub-arcsecond precision) if the native addon
150
+ compiles, otherwise automatic fallback to `astracore` (pure TypeScript, no
151
+ binary). Force via `ASTRO_ENGINE=swisseph|astracore`.
152
+ - The vendored engine is a snapshot of `@astro-platform/ephemeris` (Llmastro),
153
+ re-synced manually.
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
13
13
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
14
14
  import { z } from "zod";
15
15
 
16
- // ../ephemeris/src/astrocartography.ts
16
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/astrocartography.ts
17
17
  var DEG = Math.PI / 180;
18
18
  var RAD = 180 / Math.PI;
19
19
  function norm360(x) {
@@ -136,7 +136,7 @@ function findParans(lines, dedupDeg = 1.5) {
136
136
  return kept;
137
137
  }
138
138
 
139
- // ../ephemeris/src/numerology.ts
139
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/numerology.ts
140
140
  function computeLifePath(localBirthDate) {
141
141
  function reduceToDigit(n) {
142
142
  while (n > 9) {
@@ -162,7 +162,7 @@ function computeLifePath(localBirthDate) {
162
162
  }
163
163
  }
164
164
 
165
- // ../ephemeris/src/engine-core.ts
165
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/engine-core.ts
166
166
  var PI = Math.PI;
167
167
  var R = PI / 180;
168
168
  var D = 180 / PI;
@@ -189,7 +189,7 @@ function solveKepler(Mdeg, e) {
189
189
  return E;
190
190
  }
191
191
 
192
- // ../ephemeris/src/vsop.ts
192
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/vsop.ts
193
193
  var PE = {
194
194
  earth: { L0: 100.46646, L1: 36000.76983, p0: 102.937, p1: 1198, e0: 0.01671, e1: -42e-6, a: 1, i: 0, Om: 0 },
195
195
  mercury: { L0: 252.2503, L1: 149472.675, p0: 77.456, p1: 5719, e0: 0.20563, e1: 204e-7, a: 0.3871, i: 7.005, Om: 48.331 },
@@ -260,7 +260,7 @@ function isRetrograde(key, JD) {
260
260
  return v !== void 0 && v < 0;
261
261
  }
262
262
 
263
- // ../ephemeris/src/solar-lunar.ts
263
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/solar-lunar.ts
264
264
  function sunGeo(T) {
265
265
  const L0 = n360(280.46646 + 36000.76983 * T + 3032e-7 * T * T);
266
266
  const M = n360(357.52911 + 35999.05029 * T - 1537e-7 * T * T);
@@ -346,7 +346,7 @@ function moonPhase(JD) {
346
346
  };
347
347
  }
348
348
 
349
- // ../ephemeris/src/houses.ts
349
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/houses.ts
350
350
  function gmst(JD) {
351
351
  const T = (JD - 2451545) / 36525;
352
352
  return n360(280.46061837 + 360.98564736629 * (JD - 2451545) + 387933e-9 * T * T - T * T * T / 3871e4);
@@ -503,7 +503,7 @@ function houseOfLongitude(lon, cusps) {
503
503
  return 1;
504
504
  }
505
505
 
506
- // ../ephemeris/src/aspects.ts
506
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/aspects.ts
507
507
  var ASPECT_TYPES = [
508
508
  { type: "conjunction", nameFr: "Conjonction", angle: 0, orb: 8, tone: "n", symbol: "\u260C" },
509
509
  { type: "sextile", nameFr: "Sextile", angle: 60, orb: 6, tone: "h", symbol: "\u26B9" },
@@ -560,7 +560,7 @@ function calculateAspects(pos) {
560
560
  return out.sort((a, b) => a.orb - b.orb);
561
561
  }
562
562
 
563
- // ../ephemeris/src/lots.ts
563
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/lots.ts
564
564
  function partOfFortune(sunLon, moonLon, asc, isNight) {
565
565
  return isNight ? n360(asc + sunLon - moonLon) : n360(asc + moonLon - sunLon);
566
566
  }
@@ -579,7 +579,7 @@ function computeHermeticLots(asc, planets, isNight, fortune) {
579
579
  };
580
580
  }
581
581
 
582
- // ../ephemeris/src/astro-engine.ts
582
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/astro-engine.ts
583
583
  function deltaTSeconds(JD) {
584
584
  const year = 2e3 + (JD - 2451545) / 365.25;
585
585
  const longTerm = (y) => {
@@ -805,7 +805,7 @@ function computeCurrentSky(lat, lng, opts = {}) {
805
805
  return computeChartFromJD(JD, lat, lng, opts);
806
806
  }
807
807
 
808
- // ../ephemeris/src/swiss-engine.ts
808
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/swiss-engine.ts
809
809
  import { createRequire } from "module";
810
810
  import { join } from "path";
811
811
  var _swe = null;
@@ -1229,7 +1229,7 @@ function findNextLunarEclipseSwiss(jdStart, backward = false) {
1229
1229
  }
1230
1230
  }
1231
1231
 
1232
- // ../ephemeris/src/engine-router.ts
1232
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/engine-router.ts
1233
1233
  var _activeEngine = null;
1234
1234
  var _resolutionLog = null;
1235
1235
  function resolveEngine() {
@@ -1306,7 +1306,7 @@ function computeAstrocartography(JD, opts = {}) {
1306
1306
  return { jd: JD, gst, bodies, lines, parans };
1307
1307
  }
1308
1308
 
1309
- // ../ephemeris/src/types.ts
1309
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/types.ts
1310
1310
  var CityNotFoundError = class extends Error {
1311
1311
  constructor(query, suggestions = []) {
1312
1312
  super(
@@ -1320,7 +1320,7 @@ var CityNotFoundError = class extends Error {
1320
1320
  suggestions;
1321
1321
  };
1322
1322
 
1323
- // ../ephemeris/src/planting-calendar.ts
1323
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/planting-calendar.ts
1324
1324
  function R2(a, b) {
1325
1325
  const out = [];
1326
1326
  let m = a;
@@ -1417,7 +1417,7 @@ var FLOWERS = [
1417
1417
  ];
1418
1418
  var PLANTING_CALENDAR = [...VEGETABLES, ...FLOWERS];
1419
1419
 
1420
- // ../ephemeris/src/dignities.ts
1420
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/dignities.ts
1421
1421
  var TABLE = {
1422
1422
  sun: { domicile: [4], exaltation: [0], detriment: [10], fall: [6] },
1423
1423
  moon: { domicile: [3], exaltation: [1], detriment: [9], fall: [7] },
@@ -1448,7 +1448,7 @@ function essentialDignity(planetKey, signIdx) {
1448
1448
  return null;
1449
1449
  }
1450
1450
 
1451
- // ../ephemeris/src/natal-weight.ts
1451
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/natal-weight.ts
1452
1452
  var TRADITIONAL_RULER = [
1453
1453
  "mars",
1454
1454
  // 0 Bélier
@@ -1575,7 +1575,7 @@ function computeNatalWeight(chart) {
1575
1575
  return { byPlanet, top, chartRuler };
1576
1576
  }
1577
1577
 
1578
- // ../ephemeris/src/natal-patterns.ts
1578
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/natal-patterns.ts
1579
1579
  var MAJORS = ["sun", "moon", "mercury", "venus", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto"];
1580
1580
  var ORB = {
1581
1581
  grandTrine: 8,
@@ -1704,7 +1704,7 @@ function detectNatalPatterns(input) {
1704
1704
  return out;
1705
1705
  }
1706
1706
 
1707
- // ../ephemeris/src/planetary-ages.ts
1707
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/planetary-ages.ts
1708
1708
  var AGE_BANDS = [
1709
1709
  { maxAge: 7, planetKey: "moon", fr: "l'enfance, le lien affectif et le besoin de s\xE9curit\xE9", en: "childhood, emotional bonding and the need for security" },
1710
1710
  { maxAge: 14, planetKey: "mercury", fr: "l'apprentissage, la curiosit\xE9 et les premiers \xE9changes", en: "learning, curiosity and first exchanges" },
@@ -1715,7 +1715,7 @@ var AGE_BANDS = [
1715
1715
  { maxAge: Number.POSITIVE_INFINITY, planetKey: "saturn", fr: "le bilan, la sagesse et l'essentiel", en: "reckoning, wisdom and the essential" }
1716
1716
  ];
1717
1717
 
1718
- // ../ephemeris/src/birth-lunation.ts
1718
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/birth-lunation.ts
1719
1719
  var LUNATION_TYPES = [
1720
1720
  { key: "new", nameFr: "Nouvelle Lune", nameEn: "New Moon", glossFr: "instinct, \xE9lan spontan\xE9, commencement subjectif", glossEn: "instinct, spontaneous drive, subjective beginnings" },
1721
1721
  { key: "crescent", nameFr: "Croissant", nameEn: "Crescent", glossFr: "l'effort d'\xE9merger, s'arracher au pass\xE9, volont\xE9 d'avancer", glossEn: "the effort to emerge, breaking from the past, will to advance" },
@@ -1733,7 +1733,7 @@ function lunationType(sunLon, moonLon) {
1733
1733
  return LUNATION_TYPES[idx];
1734
1734
  }
1735
1735
 
1736
- // ../ephemeris/src/time-utc.service.ts
1736
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/time-utc.service.ts
1737
1737
  import { DateTime } from "luxon";
1738
1738
  var TimezoneError = class extends Error {
1739
1739
  constructor(message, code, details) {
@@ -1868,7 +1868,7 @@ function buildResult(dt, resolution) {
1868
1868
  };
1869
1869
  }
1870
1870
 
1871
- // ../ephemeris/src/service.ts
1871
+ // node_modules/.pnpm/@astro-platform+ephemeris@file+vendor+ephemeris/node_modules/@astro-platform/ephemeris/src/service.ts
1872
1872
  import { createHash } from "crypto";
1873
1873
  var _redis = null;
1874
1874
  async function getRedis() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmosos/mcp-ephemeris",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "description": "Serveur MCP exposant des positions planétaires calculées côté serveur (Swiss Ephemeris) — validées contre JPL Horizons (NASA). Branchez n'importe quel LLM/agent au vrai ciel.",
6
6
  "keywords": [
@@ -17,6 +17,13 @@
17
17
  ],
18
18
  "license": "PolyForm-Noncommercial-1.0.0",
19
19
  "homepage": "https://llmastro.com/notre-moteur",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/kairosastro-sketch/mcp-ephemeris.git"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/kairosastro-sketch/mcp-ephemeris/issues"
26
+ },
20
27
  "bin": {
21
28
  "cosmosos-mcp-ephemeris": "dist/index.js"
22
29
  },
@@ -45,12 +52,11 @@
45
52
  "swisseph": "^0.5.17"
46
53
  },
47
54
  "devDependencies": {
48
- "@modelcontextprotocol/inspector": "^0.14.0",
55
+ "@astro-platform/ephemeris": "file:vendor/ephemeris",
49
56
  "@types/node": "^25.9.3",
50
57
  "tsup": "^8.5.0",
51
58
  "tsx": "^4.19.0",
52
- "typescript": "^6.0.3",
53
- "@astro-platform/ephemeris": "0.1.0"
59
+ "typescript": "^6.0.3"
54
60
  },
55
61
  "scripts": {
56
62
  "build": "tsup",