@openephemeris/mcp-server 4.15.0 → 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.
- package/CHANGELOG.md +11 -0
- package/README.md +18 -1
- package/dist/index.js +3 -12
- package/dist/server-sse.js +3 -12
- package/dist/tools/apps/bazi-app.js +1 -1
- package/dist/tools/apps/bodygraph-app.js +2 -2
- package/dist/tools/apps/chart-wheel-app.js +1 -1
- package/dist/tools/apps/moon-phase-app.js +1 -1
- package/dist/tools/apps/transit-timeline-app.js +1 -1
- package/dist/tools/apps/vedic-chart-app.js +1 -1
- package/dist/tools/specialized/bi_wheel.js +1 -1
- package/dist/tools/specialized/chart_wheel.js +1 -1
- package/dist/tools/specialized/ephemeris_core.js +3 -0
- package/dist/tools/specialized/hd_bodygraph.js +2 -2
- package/dist/tools/ui-meta.d.ts +39 -0
- package/dist/tools/ui-meta.js +48 -0
- package/dist/ui/bazi.html +6 -1
- package/dist/ui/bi-wheel.html +201 -174
- package/dist/ui/bodygraph.html +176 -150
- package/dist/ui/chart-wheel.html +164 -135
- package/dist/ui/moon-phase.html +1 -1
- package/dist/ui/transit-timeline.html +2 -2
- package/dist/ui/vedic-chart.html +82 -56
- package/package.json +7 -3
- package/smithery.yaml +3 -1
package/dist/ui/moon-phase.html
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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);
|
package/dist/ui/vedic-chart.html
CHANGED
|
@@ -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">
|
|
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 = "
|
|
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
|
|
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_ =
|
|
6932
|
-
function
|
|
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
|
|
6936
|
-
function
|
|
6937
|
-
if (
|
|
6960
|
+
A_((e4) => void av(e4));
|
|
6961
|
+
function Y_(e4) {
|
|
6962
|
+
if (U_) {
|
|
6938
6963
|
if (!e4) {
|
|
6939
|
-
|
|
6964
|
+
U_.classList.remove("visible");
|
|
6940
6965
|
return;
|
|
6941
6966
|
}
|
|
6942
|
-
|
|
6967
|
+
U_.textContent = "\xB7 ".concat(e4), U_.classList.add("visible");
|
|
6943
6968
|
}
|
|
6944
6969
|
}
|
|
6945
|
-
n_(
|
|
6946
|
-
async function
|
|
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
|
|
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
|
|
6979
|
+
async function Z_(e4) {
|
|
6954
6980
|
var t2, n2;
|
|
6955
|
-
if (!
|
|
6956
|
-
let r2 = (t2 =
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
6977
|
-
await
|
|
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
|
|
7007
|
+
function Q_(e4, t2, n2) {
|
|
6982
7008
|
var r2;
|
|
6983
7009
|
let i2 = (r2 = p_[e4]) == null ? "" : r2;
|
|
6984
|
-
|
|
7010
|
+
Y_("".concat(e4).concat(t2 ? " \xB7 Lagna" : "").concat(i2 ? " \xB7 " + i2 : ""));
|
|
6985
7011
|
}
|
|
6986
|
-
function
|
|
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
|
|
7015
|
+
function ev(e4) {
|
|
6990
7016
|
var t2, n2, r2, i2, a2, o2;
|
|
6991
|
-
|
|
7017
|
+
G_ = e4, B_.setAttribute("hidden", ""), V_.removeAttribute("hidden");
|
|
6992
7018
|
let s2 = e4._svg;
|
|
6993
7019
|
if (!s2) {
|
|
6994
|
-
|
|
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 =
|
|
7026
|
+
c2 = document.createElement("div"), c2.id = "vedic-header-wrap", (l2 = V_.parentElement) == null || l2.insertBefore(c2, V_);
|
|
7001
7027
|
}
|
|
7002
|
-
c2.innerHTML =
|
|
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 =
|
|
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
|
|
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 & Ascendant</button>\n <button class="action-btn" id="vedic-moon-btn">Moon & 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
|
-
|
|
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
|
|
7015
|
-
function
|
|
7016
|
-
|
|
7040
|
+
var tv;
|
|
7041
|
+
function nv() {
|
|
7042
|
+
tv && (clearTimeout(tv), tv = void 0);
|
|
7017
7043
|
}
|
|
7018
|
-
function
|
|
7019
|
-
|
|
7044
|
+
function rv(e4, t2) {
|
|
7045
|
+
nv(), B_.setAttribute("hidden", ""), E_({ container: V_, message: e4, onRetry: t2 });
|
|
7020
7046
|
}
|
|
7021
|
-
function
|
|
7022
|
-
|
|
7023
|
-
|
|
7024
|
-
}, 3e4),
|
|
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
|
|
7028
|
-
if (!(e4 ===
|
|
7029
|
-
|
|
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 =
|
|
7033
|
-
o2 && ((i2 = o2.planets) != null && i2.length || o2._svg) &&
|
|
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
|
-
|
|
7063
|
+
q_ = false;
|
|
7038
7064
|
}
|
|
7039
7065
|
}
|
|
7040
7066
|
}
|
|
7041
|
-
|
|
7042
|
-
|
|
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") && (
|
|
7046
|
-
|
|
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
|
-
|
|
7075
|
+
ev(t2), av(J_());
|
|
7050
7076
|
} catch (e5) {
|
|
7051
|
-
|
|
7077
|
+
rv("An error occurred while rendering the Vedic chart.", iv), console.error("[VedicChart] Render error:", e5);
|
|
7052
7078
|
}
|
|
7053
|
-
}, N_(
|
|
7054
|
-
|
|
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
|
|
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.15.
|
|
4
|
-
"description": "
|
|
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
|
-
"
|
|
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.
|
|
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
|