@openephemeris/mcp-server 4.14.3 → 4.15.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.
@@ -6746,7 +6746,7 @@ function u_(e5, t2, n2 = []) {
6746
6746
  let e6 = document.getElementById("fs-hint-banner");
6747
6747
  e6 && e6.remove();
6748
6748
  let t3 = document.createElement("div");
6749
- t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to Claude chat", document.body.appendChild(t3), requestAnimationFrame(() => {
6749
+ t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(t3), requestAnimationFrame(() => {
6750
6750
  t3.style.opacity = "1";
6751
6751
  }), setTimeout(() => {
6752
6752
  t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
@@ -6617,7 +6617,7 @@ function d_(e4, t2, n2, r2) {
6617
6617
  let o3 = ee2++;
6618
6618
  te2[o3] = e6;
6619
6619
  let s3 = ((t4 = (n3 = e6.planet) == null ? e6.planet_name : n3) == null ? "" : t4).toLowerCase(), l3 = r_(s3), u3 = i_(s3), d3 = a_((r3 = e6.planet_name) == null ? s3 : r3), f3 = e6.is_retrograde ? '<span class="tl-retro" title="Retrograde at exact crossing">\u211E</span>' : "", p3 = (i3 = e6.aspect) == null ? c2 : i3, m3 = (a3 = n_[p3]) == null ? "" : a3, h3 = e6.natal_point ? '<span class="tl-natal">' + $(m3 ? m3 + " " : "") + $(p3) + ' natal <span class="tl-natal-glyph">' + $(i_(e6.natal_point)) + "</span> " + $(a_(e6.natal_point)) + "</span>" : '<span class="tl-natal">' + $(m3 ? m3 + " " : "") + $(a_(p3)) + "</span>", ne3 = u_(e6);
6620
- return '<div class="tl-event" data-idx="' + o3 + '" tabindex="0" role="button" aria-label="' + $(d3 + " " + p3 + (e6.natal_point ? " natal " + e6.natal_point : "") + " on " + s_(e6.date)) + '"><div class="tl-event-rail" aria-hidden="true"><span class="tl-node" style="--planet-color:' + l3 + '"></span></div><div class="tl-event-glyph" style="--planet-color:' + l3 + '" aria-hidden="true">' + u3 + '</div><div class="tl-event-body"><div class="tl-event-line1"><span class="tl-planet-name">' + $(d3) + "</span>" + f3 + h3 + '</div><div class="tl-event-line2"><span class="tl-date">' + $(c_(e6.date)) + "</span>" + (ne3 ? '<span class="tl-dot">\xB7</span><span class="tl-pos">' + $(ne3) + "</span>" : "") + '</div><button class="tl-ask" type="button" data-ask="' + o3 + '">\u2728 Ask Claude about this transit</button></div></div>';
6620
+ return '<div class="tl-event" data-idx="' + o3 + '" tabindex="0" role="button" aria-label="' + $(d3 + " " + p3 + (e6.natal_point ? " natal " + e6.natal_point : "") + " on " + s_(e6.date)) + '"><div class="tl-event-rail" aria-hidden="true"><span class="tl-node" style="--planet-color:' + l3 + '"></span></div><div class="tl-event-glyph" style="--planet-color:' + l3 + '" aria-hidden="true">' + u3 + '</div><div class="tl-event-body"><div class="tl-event-line1"><span class="tl-planet-name">' + $(d3) + "</span>" + f3 + h3 + '</div><div class="tl-event-line2"><span class="tl-date">' + $(c_(e6.date)) + "</span>" + (ne3 ? '<span class="tl-dot">\xB7</span><span class="tl-pos">' + $(ne3) + "</span>" : "") + '</div><button class="tl-ask" type="button" data-ask="' + o3 + '">\u2728 Interpret this transit</button></div></div>';
6621
6621
  }).join("");
6622
6622
  return '<section class="tl-group"><h2 class="tl-group-label">' + $(e5.key) + '</h2><div class="tl-events">' + t3 + "</div></section>";
6623
6623
  }).join(""), h2 = "";
@@ -6723,7 +6723,7 @@ function f_(e4, t2, n2 = []) {
6723
6723
  let e5 = document.getElementById("fs-hint-banner");
6724
6724
  e5 && e5.remove();
6725
6725
  let t3 = document.createElement("div");
6726
- t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to Claude chat", document.body.appendChild(t3), requestAnimationFrame(() => {
6726
+ t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(t3), requestAnimationFrame(() => {
6727
6727
  t3.style.opacity = "1";
6728
6728
  }), setTimeout(() => {
6729
6729
  t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
@@ -6594,7 +6594,7 @@ function l_() {
6594
6594
  }
6595
6595
  function u_(e4, t2, n2, r2) {
6596
6596
  var i2;
6597
- let a2 = $g ? '<button class="ask-claude-btn" id="vedic-ask-claude-btn">Ask Claude \u2014 Interpret</button>' : "", o2 = '\n <div class="vedic-popup-header">\n <div class="vedic-popup-title">\n <strong>'.concat(f_(t2), '</strong>\n <div class="vedic-popup-sub">').concat(f_(n2), '</div>\n </div>\n <button class="vedic-popup-close" id="vedic-popup-close">\u2715</button>\n </div>\n ').concat(a2, "\n "), s2 = c_();
6597
+ let a2 = $g ? '<button class="ask-claude-btn" id="vedic-ask-claude-btn">Interpret</button>' : "", o2 = '\n <div class="vedic-popup-header">\n <div class="vedic-popup-title">\n <strong>'.concat(f_(t2), '</strong>\n <div class="vedic-popup-sub">').concat(f_(n2), '</div>\n </div>\n <button class="vedic-popup-close" id="vedic-popup-close">\u2715</button>\n </div>\n ').concat(a2, "\n "), s2 = c_();
6598
6598
  s2.innerHTML = o2, s2.classList.add("visible"), requestAnimationFrame(() => {
6599
6599
  let t3 = s2.getBoundingClientRect(), n3 = s2.offsetParent, r3, i3, a3, o3;
6600
6600
  if (n3) {
@@ -6612,7 +6612,7 @@ function d_(e4, t2) {
6612
6612
  let n3 = e4.querySelector("#vedic-ask-claude-btn");
6613
6613
  !n3 || n3.disabled || (n3.disabled = true, n3.textContent = "Sending\u2026", n3.classList.add("sending"), $g(t2).then(() => {
6614
6614
  n3.textContent = "Sent", n3.classList.remove("sending"), n3.classList.add("sent"), setTimeout(() => {
6615
- n3.textContent = "Ask Claude \u2014 Interpret", n3.classList.remove("sent"), n3.disabled = false;
6615
+ n3.textContent = "Interpret", n3.classList.remove("sent"), n3.disabled = false;
6616
6616
  }, 2500);
6617
6617
  }).catch(() => {
6618
6618
  n3.textContent = "Failed \u2014 retry", n3.classList.remove("sending"), n3.classList.add("error"), n3.disabled = false;
@@ -6893,7 +6893,7 @@ function M_(e4, t2, n2 = []) {
6893
6893
  let e5 = document.getElementById("fs-hint-banner");
6894
6894
  e5 && e5.remove();
6895
6895
  let t3 = document.createElement("div");
6896
- t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to Claude chat", document.body.appendChild(t3), requestAnimationFrame(() => {
6896
+ t3.id = "fs-hint-banner", Object.assign(t3.style, { position: "fixed", top: "12px", left: "50%", transform: "translateX(-50%)", background: "oklch(14% 0.012 265 / 0.90)", backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)", border: "1px solid oklch(72% 0.12 80 / 0.3)", borderRadius: "20px", padding: "6px 16px", fontSize: "11px", fontWeight: "600", color: "oklch(80% 0.08 80)", letterSpacing: "0.04em", zIndex: "9999", pointerEvents: "none", opacity: "0", transition: "opacity 300ms ease", whiteSpace: "nowrap" }), t3.textContent = "Esc \u2014 exit fullscreen & return to chat", document.body.appendChild(t3), requestAnimationFrame(() => {
6897
6897
  t3.style.opacity = "1";
6898
6898
  }), setTimeout(() => {
6899
6899
  t3.style.opacity = "0", setTimeout(() => t3.remove(), 350);
@@ -6928,44 +6928,70 @@ function F_(e4) {
6928
6928
  n2(e5);
6929
6929
  });
6930
6930
  }
6931
- var I_ = document.getElementById("loading-state"), L_ = document.getElementById("vedic-container"), R_ = document.getElementById("info-panel"), z_ = document.getElementById("chart-status"), B_ = new Qg({ name: "Vedic Chart Explorer", version: "1.0.0" }), V_ = null, H_ = "dark", U_ = false;
6932
- function W_() {
6931
+ var I_ = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?(?:\.\d+)?$/;
6932
+ function L_(e4, t2) {
6933
+ if (!e4) return null;
6934
+ let n2 = I_.exec(e4.trim());
6935
+ if (n2) {
6936
+ let [, e5, t3, r3, i2, a2, o2] = n2, s2 = new Date(Date.UTC(+e5, t3 - 1, +r3, +i2, +a2, o2 ? +o2 : 0));
6937
+ return isNaN(s2.getTime()) ? null : { date: s2, timeZone: "UTC" };
6938
+ }
6939
+ let r2 = new Date(e4);
6940
+ return isNaN(r2.getTime()) ? null : { date: r2, timeZone: t2 || "UTC" };
6941
+ }
6942
+ function R_(e4) {
6943
+ var t2;
6944
+ if (!e4) return "";
6945
+ let n2 = [], r2 = (t2 = e4.location) == null ? void 0 : t2.trim();
6946
+ if (r2 ? n2.push(r2) : typeof e4.latitude == "number" && typeof e4.longitude == "number" && n2.push("".concat(e4.latitude.toFixed(2), ", ").concat(e4.longitude.toFixed(2))), e4.datetime) {
6947
+ let t3 = /^\d{4}-\d{2}-\d{2}/.test(e4.datetime.trim()) ? L_(e4.datetime, e4.timezone) : null;
6948
+ t3 ? n2.push(t3.date.toLocaleString("en-US", { timeZone: t3.timeZone, day: "numeric", month: "short", year: "numeric", hour: "numeric", minute: "2-digit" })) : n2.push(e4.datetime);
6949
+ }
6950
+ return n2.join(" \xB7 ");
6951
+ }
6952
+ function z_(e4, t2, n2 = "Chart") {
6953
+ let r2 = R_(t2);
6954
+ return r2 ? "".concat(n2, ": ").concat(r2, "\n\n").concat(e4) : e4;
6955
+ }
6956
+ var B_ = document.getElementById("loading-state"), V_ = document.getElementById("vedic-container"), H_ = document.getElementById("info-panel"), U_ = document.getElementById("chart-status"), W_ = new Qg({ name: "Vedic Chart Explorer", version: "1.0.0" }), G_ = null, K_ = "dark", q_ = false;
6957
+ function J_() {
6933
6958
  return k_();
6934
6959
  }
6935
- A_((e4) => void tv(e4));
6936
- function G_(e4) {
6937
- if (z_) {
6960
+ A_((e4) => void av(e4));
6961
+ function Y_(e4) {
6962
+ if (U_) {
6938
6963
  if (!e4) {
6939
- z_.classList.remove("visible");
6964
+ U_.classList.remove("visible");
6940
6965
  return;
6941
6966
  }
6942
- z_.textContent = "\xB7 ".concat(e4), z_.classList.add("visible");
6967
+ U_.textContent = "\xB7 ".concat(e4), U_.classList.add("visible");
6943
6968
  }
6944
6969
  }
6945
- n_(G_);
6946
- async function K_(e4) {
6970
+ n_(Y_);
6971
+ async function X_(e4) {
6972
+ e4 = z_(e4, G_ == null ? void 0 : G_._birth_params, "Vedic chart");
6947
6973
  try {
6948
- (await B_.sendMessage({ role: "user", content: [{ type: "text", text: e4 }] })).isError && console.error("[VedicChart] Host rejected sendMessage");
6974
+ (await W_.sendMessage({ role: "user", content: [{ type: "text", text: e4 }] })).isError && console.error("[VedicChart] Host rejected sendMessage");
6949
6975
  } catch (e5) {
6950
6976
  console.error("[VedicChart] sendMessage failed:", e5);
6951
6977
  }
6952
6978
  }
6953
- async function q_(e4) {
6979
+ async function Z_(e4) {
6954
6980
  var t2, n2;
6955
- if (!V_) return;
6956
- let r2 = (t2 = V_.lagna) == null ? "unknown" : t2, i2 = (n2 = V_.ayanamsa) == null ? "Lahiri" : n2;
6981
+ if (!G_) return;
6982
+ let r2 = (t2 = G_.lagna) == null ? "unknown" : t2, i2 = (n2 = G_.ayanamsa) == null ? "Lahiri" : n2;
6957
6983
  if (e4.type === "sign") {
6958
6984
  var a2, o2;
6959
- let t3 = String((a2 = e4.data.sign) == null ? "" : a2), n3 = !!e4.data.is_lagna, s3 = ((o2 = V_.planets) == null ? [] : o2).filter((e5) => e5.rashi_western === t3).map((e5) => {
6985
+ let t3 = String((a2 = e4.data.sign) == null ? "" : a2), n3 = !!e4.data.is_lagna, s3 = ((o2 = G_.planets) == null ? [] : o2).filter((e5) => e5.rashi_western === t3).map((e5) => {
6960
6986
  var t4, n4, r3, i3;
6961
6987
  return "".concat(e5.planet, " ").concat(e5.rashi_degree.toFixed(1), "\xB0").concat(e5.is_retrograde ? " (retrograde)" : "", " \u2014 Nakshatra ").concat((t4 = (n4 = e5.nakshatra) == null ? void 0 : n4.name) == null ? "" : t4, " pada ").concat((r3 = (i3 = e5.nakshatra) == null ? void 0 : i3.pada) == null ? "" : r3);
6962
6988
  }).join("; ");
6963
- await K_("Interpret the rashi ".concat(t3, " in this Vedic (Jyotish) chart \u2014 Ayanamsa: ").concat(i2, ", Lagna: ").concat(r2, ".\n\n") + (n3 ? "This is the Lagna (Ascendant) rashi. " : "") + (s3 ? "Planets placed here: ".concat(s3, ".\n\n") : "This rashi is unoccupied.\n\n") + "Please explain the themes of this rashi".concat(n3 ? " as the Lagna" : "", ", and interpret each placed planet's sidereal sign, nakshatra, and pada in the context of this birth chart."));
6989
+ await X_("Interpret the rashi ".concat(t3, " in this Vedic (Jyotish) chart \u2014 Ayanamsa: ").concat(i2, ", Lagna: ").concat(r2, ".\n\n") + (n3 ? "This is the Lagna (Ascendant) rashi. " : "") + (s3 ? "Planets placed here: ".concat(s3, ".\n\n") : "This rashi is unoccupied.\n\n") + "Please explain the themes of this rashi".concat(n3 ? " as the Lagna" : "", ", and interpret each placed planet's sidereal sign, nakshatra, and pada in the context of this birth chart."));
6964
6990
  return;
6965
6991
  }
6966
6992
  if (e4.type === "overview") {
6967
6993
  var s2;
6968
- await K_("Vedic chart \u2014 Ayanamsa: ".concat(i2, ". Lagna: ").concat(r2, ". Planets: ").concat(((s2 = V_.planets) == null ? [] : s2).map((e5) => {
6994
+ await X_("Vedic chart \u2014 Ayanamsa: ".concat(i2, ". Lagna: ").concat(r2, ". Planets: ").concat(((s2 = G_.planets) == null ? [] : s2).map((e5) => {
6969
6995
  var t3, n3, r3, i3;
6970
6996
  return "".concat(e5.planet, " in ").concat(e5.rashi_western, " ").concat(e5.rashi_degree.toFixed(1), "\xB0 (").concat((t3 = (n3 = e5.nakshatra) == null ? void 0 : n3.name) == null ? "" : t3, " pada ").concat((r3 = (i3 = e5.nakshatra) == null ? void 0 : i3.pada) == null ? "" : r3, ")").concat(e5.is_retrograde ? " \u211E" : "");
6971
6997
  }).join(", "), ".\n\nPlease give a comprehensive interpretation of this Jyotish birth chart, covering the Lagna, chart lord, key planetary placements, and overall life themes."));
@@ -6973,88 +6999,88 @@ async function q_(e4) {
6973
6999
  }
6974
7000
  if (e4.type === "moon") {
6975
7001
  var c2, l2, u2, d2;
6976
- let e5 = ((c2 = V_.planets) == null ? [] : c2).find((e6) => e6.planet === "Moon");
6977
- await K_(e5 ? "Focus on the Moon in ".concat(e5.rashi_western, " (").concat(e5.rashi, "), ").concat(e5.rashi_degree.toFixed(2), "\xB0, in Nakshatra ").concat((l2 = e5.nakshatra) == null ? void 0 : l2.name, " (lord: ").concat((u2 = e5.nakshatra) == null ? void 0 : u2.lord, ", pada: ").concat((d2 = e5.nakshatra) == null ? void 0 : d2.pada, "). Interpret the Moon's placement for emotional nature, mind, mother, and public life. Include the Nakshatra's influence.") : "Interpret the Moon's placement in this Vedic chart, including Nakshatra detail.");
7002
+ let e5 = ((c2 = G_.planets) == null ? [] : c2).find((e6) => e6.planet === "Moon");
7003
+ await X_(e5 ? "Focus on the Moon in ".concat(e5.rashi_western, " (").concat(e5.rashi, "), ").concat(e5.rashi_degree.toFixed(2), "\xB0, in Nakshatra ").concat((l2 = e5.nakshatra) == null ? void 0 : l2.name, " (lord: ").concat((u2 = e5.nakshatra) == null ? void 0 : u2.lord, ", pada: ").concat((d2 = e5.nakshatra) == null ? void 0 : d2.pada, "). Interpret the Moon's placement for emotional nature, mind, mother, and public life. Include the Nakshatra's influence.") : "Interpret the Moon's placement in this Vedic chart, including Nakshatra detail.");
6978
7004
  return;
6979
7005
  }
6980
7006
  }
6981
- function J_(e4, t2, n2) {
7007
+ function Q_(e4, t2, n2) {
6982
7008
  var r2;
6983
7009
  let i2 = (r2 = p_[e4]) == null ? "" : r2;
6984
- G_("".concat(e4).concat(t2 ? " \xB7 Lagna" : "").concat(i2 ? " \xB7 " + i2 : ""));
7010
+ Y_("".concat(e4).concat(t2 ? " \xB7 Lagna" : "").concat(i2 ? " \xB7 " + i2 : ""));
6985
7011
  }
6986
- function Y_(e4) {
7012
+ function $_(e4) {
6987
7013
  return '\n <div class="vedic-header">\n <span class="vedic-title">Jyotish Rashi Chart</span>\n <span class="vedic-ayanamsa-badge">'.concat(e4.ayanamsa || "Lahiri", "</span>\n </div>\n ");
6988
7014
  }
6989
- function X_(e4) {
7015
+ function ev(e4) {
6990
7016
  var t2, n2, r2, i2, a2, o2;
6991
- V_ = e4, I_.setAttribute("hidden", ""), L_.removeAttribute("hidden");
7017
+ G_ = e4, B_.setAttribute("hidden", ""), V_.removeAttribute("hidden");
6992
7018
  let s2 = e4._svg;
6993
7019
  if (!s2) {
6994
- $_("Vedic chart render unavailable \u2014 the server did not return an SVG.", ev);
7020
+ rv("Vedic chart render unavailable \u2014 the server did not return an SVG.", iv);
6995
7021
  return;
6996
7022
  }
6997
7023
  let c2 = document.getElementById("vedic-header-wrap");
6998
7024
  if (!c2) {
6999
7025
  var l2;
7000
- c2 = document.createElement("div"), c2.id = "vedic-header-wrap", (l2 = L_.parentElement) == null || l2.insertBefore(c2, L_);
7026
+ c2 = document.createElement("div"), c2.id = "vedic-header-wrap", (l2 = V_.parentElement) == null || l2.insertBefore(c2, V_);
7001
7027
  }
7002
- c2.innerHTML = Y_(e4), h_(L_, s2, e4, { onSignClick: J_, onAskClaude: q_ });
7028
+ c2.innerHTML = $_(e4), h_(V_, s2, e4, { onSignClick: Q_, onAskClaude: Z_ });
7003
7029
  let u2 = document.getElementById("vedic-action-bar");
7004
7030
  if (!u2) {
7005
7031
  var d2;
7006
7032
  u2 = document.createElement("div"), u2.id = "vedic-action-bar", u2.className = "vedic-action-bar";
7007
7033
  let e5 = document.querySelector("#fs-bottom-bar [data-column='right']");
7008
- e5 ? e5.appendChild(u2) : (d2 = L_.parentElement) == null || d2.insertBefore(u2, L_);
7034
+ e5 ? e5.appendChild(u2) : (d2 = V_.parentElement) == null || d2.insertBefore(u2, V_);
7009
7035
  }
7010
- u2.innerHTML = '\n <button class="action-btn action-btn--primary" id="vedic-interpret-btn">\u2726 Ask Claude to interpret this chart</button>\n <button class="action-btn" id="vedic-lagna-btn">Lagna &amp; Ascendant</button>\n <button class="action-btn" id="vedic-moon-btn">Moon &amp; Nakshatra</button>\n ', (t2 = u2.querySelector("#vedic-interpret-btn")) == null || t2.addEventListener("click", () => void q_({ type: "overview", data: {} })), (n2 = u2.querySelector("#vedic-lagna-btn")) == null || n2.addEventListener("click", () => void q_({ type: "sign", data: { sign: e4.lagna, is_lagna: true } })), (r2 = u2.querySelector("#vedic-moon-btn")) == null || r2.addEventListener("click", () => void q_({ type: "moon", data: {} }));
7036
+ u2.innerHTML = '\n <button class="action-btn action-btn--primary" id="vedic-interpret-btn">\u2726 Interpret this chart</button>\n <button class="action-btn" id="vedic-lagna-btn">Lagna &amp; Ascendant</button>\n <button class="action-btn" id="vedic-moon-btn">Moon &amp; Nakshatra</button>\n ', (t2 = u2.querySelector("#vedic-interpret-btn")) == null || t2.addEventListener("click", () => void Z_({ type: "overview", data: {} })), (n2 = u2.querySelector("#vedic-lagna-btn")) == null || n2.addEventListener("click", () => void Z_({ type: "sign", data: { sign: e4.lagna, is_lagna: true } })), (r2 = u2.querySelector("#vedic-moon-btn")) == null || r2.addEventListener("click", () => void Z_({ type: "moon", data: {} }));
7011
7037
  let f2 = ((i2 = e4.planets) == null ? [] : i2).map((e5) => '<div class="info-row"><span class="info-label">'.concat(e5.planet, '</span><span class="info-value">').concat(e5.rashi_western, " ").concat(e5.rashi_degree.toFixed(1), "\xB0").concat(e5.is_retrograde ? " \u211E" : "", "</span></div>")).join("");
7012
- R_.innerHTML = '\n <div class="info-row"><span class="info-label">Lagna</span><span class="info-value">'.concat((a2 = e4.lagna) == null ? "\u2014" : a2, '</span></div>\n <div class="info-row"><span class="info-label">Ayanamsa</span><span class="info-value">').concat((o2 = e4.ayanamsa) == null ? "Lahiri" : o2, "</span></div>\n ").concat(f2, "\n "), R_.removeAttribute("hidden"), C_("vedic-chart");
7038
+ H_.innerHTML = '\n <div class="info-row"><span class="info-label">Lagna</span><span class="info-value">'.concat((a2 = e4.lagna) == null ? "\u2014" : a2, '</span></div>\n <div class="info-row"><span class="info-label">Ayanamsa</span><span class="info-value">').concat((o2 = e4.ayanamsa) == null ? "Lahiri" : o2, "</span></div>\n ").concat(f2, "\n "), H_.removeAttribute("hidden"), C_("vedic-chart");
7013
7039
  }
7014
- var Z_;
7015
- function Q_() {
7016
- Z_ && (clearTimeout(Z_), Z_ = void 0);
7040
+ var tv;
7041
+ function nv() {
7042
+ tv && (clearTimeout(tv), tv = void 0);
7017
7043
  }
7018
- function $_(e4, t2) {
7019
- Q_(), I_.setAttribute("hidden", ""), E_({ container: L_, message: e4, onRetry: t2 });
7044
+ function rv(e4, t2) {
7045
+ nv(), B_.setAttribute("hidden", ""), E_({ container: V_, message: e4, onRetry: t2 });
7020
7046
  }
7021
- function ev() {
7022
- Q_(), L_.setAttribute("hidden", ""), I_.removeAttribute("hidden"), Z_ = setTimeout(() => {
7023
- $_("The Vedic chart didn't load. Tap to try again.", ev);
7024
- }, 3e4), B_.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the Vedic chart." }] }).catch(() => {
7047
+ function iv() {
7048
+ nv(), V_.setAttribute("hidden", ""), B_.removeAttribute("hidden"), tv = setTimeout(() => {
7049
+ rv("The Vedic chart didn't load. Tap to try again.", iv);
7050
+ }, 3e4), W_.sendMessage({ role: "user", content: [{ type: "text", text: "Please regenerate the Vedic chart." }] }).catch(() => {
7025
7051
  });
7026
7052
  }
7027
- async function tv(e4) {
7028
- if (!(e4 === H_ || U_ || !(V_ != null && V_._birth_params))) {
7029
- U_ = true, H_ = e4;
7053
+ async function av(e4) {
7054
+ if (!(e4 === K_ || q_ || !(G_ != null && G_._birth_params))) {
7055
+ q_ = true, K_ = e4;
7030
7056
  try {
7031
7057
  var t2, n2, r2, i2;
7032
- let a2 = V_._birth_params, o2 = w_(await B_.callServerTool({ name: "vedic_chart_recalculate", arguments: { datetime: a2.datetime, latitude: (t2 = a2.latitude) == null ? void 0 : t2, longitude: (n2 = a2.longitude) == null ? void 0 : n2, ayanamsa: (r2 = a2.ayanamsa) == null ? void 0 : r2, theme: e4 } }));
7033
- o2 && ((i2 = o2.planets) != null && i2.length || o2._svg) && X_(o2);
7058
+ let a2 = G_._birth_params, o2 = w_(await W_.callServerTool({ name: "vedic_chart_recalculate", arguments: { datetime: a2.datetime, latitude: (t2 = a2.latitude) == null ? void 0 : t2, longitude: (n2 = a2.longitude) == null ? void 0 : n2, ayanamsa: (r2 = a2.ayanamsa) == null ? void 0 : r2, theme: e4 } }));
7059
+ o2 && ((i2 = o2.planets) != null && i2.length || o2._svg) && ev(o2);
7034
7060
  } catch (e5) {
7035
7061
  console.error("[VedicChart] Theme re-fetch failed:", e5);
7036
7062
  } finally {
7037
- U_ = false;
7063
+ q_ = false;
7038
7064
  }
7039
7065
  }
7040
7066
  }
7041
- B_.ontoolresult = (e4) => {
7042
- Q_();
7067
+ W_.ontoolresult = (e4) => {
7068
+ nv();
7043
7069
  try {
7044
7070
  let t2 = w_(e4);
7045
- if (((t2 == null ? void 0 : t2._theme) === "light" || (t2 == null ? void 0 : t2._theme) === "dark") && (H_ = t2._theme), !t2 || !t2.planets) {
7046
- $_("Vedic chart data could not be parsed from the server response.", ev);
7071
+ if (((t2 == null ? void 0 : t2._theme) === "light" || (t2 == null ? void 0 : t2._theme) === "dark") && (K_ = t2._theme), !t2 || !t2.planets) {
7072
+ rv("Vedic chart data could not be parsed from the server response.", iv);
7047
7073
  return;
7048
7074
  }
7049
- X_(t2), tv(W_());
7075
+ ev(t2), av(J_());
7050
7076
  } catch (e5) {
7051
- $_("An error occurred while rendering the Vedic chart.", ev), console.error("[VedicChart] Render error:", e5);
7077
+ rv("An error occurred while rendering the Vedic chart.", iv), console.error("[VedicChart] Render error:", e5);
7052
7078
  }
7053
- }, N_(B_, { loadingEl: I_, contentEl: L_, statusFn: G_, paramControls: null }), Z_ = setTimeout(() => {
7054
- $_("Vedic chart data is taking longer than expected.", ev);
7079
+ }, N_(W_, { loadingEl: B_, contentEl: V_, statusFn: Y_, paramControls: null }), tv = setTimeout(() => {
7080
+ rv("Vedic chart data is taking longer than expected.", iv);
7055
7081
  }, 3e4), (async () => {
7056
7082
  try {
7057
- await B_.connect(), M_(B_, document.getElementById("pan-zoom-controls"), ["info-panel", "vedic-action-bar"]), F_(B_), j_(B_, (e4) => void tv(e4));
7083
+ await W_.connect(), M_(W_, document.getElementById("pan-zoom-controls"), ["info-panel", "vedic-action-bar"]), F_(W_), j_(W_, (e4) => void av(e4));
7058
7084
  } catch (e4) {
7059
7085
  console.error("[VedicChart] connect() failed:", e4);
7060
7086
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@openephemeris/mcp-server",
3
- "version": "4.14.3",
4
- "description": "Model Context Protocol server for the Open Ephemeris astronomical computation API",
3
+ "version": "4.15.1",
4
+ "description": "MCP server for Open Ephemeris — NASA JPL DE440 astrology and astronomy, with interactive charts that render inline in Claude and ChatGPT",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "files": [
@@ -67,7 +67,11 @@
67
67
  "llm",
68
68
  "claude",
69
69
  "ai",
70
- "ephemeris"
70
+ "chatgpt",
71
+ "openai",
72
+ "mcp-apps",
73
+ "natal-chart",
74
+ "human-design"
71
75
  ],
72
76
  "author": "Open Ephemeris",
73
77
  "homepage": "https://openephemeris.com",
package/smithery.yaml CHANGED
@@ -11,7 +11,9 @@ description: >
11
11
  natal charts, transit forecasting, Human Design charts, eclipses, astrocartography power
12
12
  lines, Venus Star Points, electional timing windows, synastry, composite charts, Vedic
13
13
  charts, Chinese BaZi, and more — powered by JPL DE440 ephemerides for sub-arcsecond
14
- zero-hallucination accuracy. Includes an LLM-optimized output format
14
+ zero-hallucination accuracy. Nine of the tools open interactive charts you can click
15
+ inside the conversation: one MCP Apps build renders in both Claude and ChatGPT.
16
+ Includes an LLM-optimized output format
15
17
  (format=llm) that compresses chart responses by 50–73%. Free Explorer tier available.
16
18
  iconUrl: https://mcp.openephemeris.com/icon.png
17
19
  homepage: https://openephemeris.com