@openephemeris/mcp-server 3.21.0 → 3.22.0
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 +24 -0
- package/dist/tools/apps/bodygraph-app.js +43 -8
- package/dist/tools/specialized/transits.js +1 -1
- package/dist/ui/bi-wheel.html +2080 -2026
- package/dist/ui/bodygraph.html +265 -217
- package/dist/ui/chart-wheel.html +516 -446
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,30 @@ Version numbering follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [3.22.0] — 2026-07-19
|
|
11
|
+
|
|
12
|
+
Mobile/dark QA sweep across the four live iframe apps (chart-wheel, bi-wheel, bodygraph, moon-phase), plus a design-parity pass bringing the wheels' colors in line with the web app's #239 engine redesign.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- **Pinch-to-zoom + reliable touch pan** on chart-wheel, bi-wheel, and bodygraph — `touch-action: none` on the chart SVG stops mobile browsers from claiming drags for page scroll and pinches for page zoom; two-finger pinch zooms anchored at the gesture midpoint with simultaneous pan.
|
|
16
|
+
- **Midpoint aspect-type glyphs** on the natal chart wheel — every aspect line now shows its symbol (☌ ☍ △ □ ⚹) on a backing disc, matching the bi-wheel app and the Go engine's design.
|
|
17
|
+
- **Theme-aware HD transit/connection overlays** — `explore_human_design_transit` and `explore_human_design_connection` now pass `visual_config.theme` (previously always defaulted to light server-side) and re-fetch in the host's detected theme via the embedded app.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
- **HD transit/connection overlays no longer error-card** in MCP Apps hosts — both tools' payloads nest the chart under `natal` / `composite_chart` (with a `centers` map shape the app didn't handle), which the bodygraph app's validity gate rejected outright.
|
|
21
|
+
- **Chart-wheel and bi-wheel color palette** now matches the web app's #239 wheel redesign (element remap, vibrant dark-mode zodiac tints, warm/cool aspect semantics) — the iframe wheels had never received that pass and read muddy by comparison.
|
|
22
|
+
- Zodiac sign glyphs no longer occasionally render as the wrong emoji-presentation glyph (missing `U+FE0E` variation selector).
|
|
23
|
+
- Light-host theme detection no longer misreads as dark in some hosts (background-luminance probe used the wrong color space).
|
|
24
|
+
- **ASC/DSC angle labels** no longer clip at the edge of the wheel on full-bleed mobile hosts (a `viewBox` overflow needing container padding that phones don't provide) — coordinates are now clamped inside the frame.
|
|
25
|
+
- Mobile pan/zoom controls shrink to 32px with a translucent, blurred background and an icon-only Reset button, so the control stack stops covering the chart at phone widths.
|
|
26
|
+
|
|
27
|
+
## [3.21.1] — 2026-07-12
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- **"Developer tier" renamed to "Pro tier"** in all user-facing copy, matching the site-wide rename (the internal plan id `developer` and `/pricing?plan=developer` URLs are unchanged). Updated the `explore_human_design_transit` / `explore_human_design_connection` tool descriptions, the `transit_search` range-limit note, and the astrocartography / API-reference / setup skill docs. Historical changelog entries below retain the old name as a record of what shipped.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
10
34
|
## [3.21.0] — 2026-07-09
|
|
11
35
|
|
|
12
36
|
Launch-readiness wave from the three-perspective master review (directory vetting, first-run UX, revenue red-team).
|
|
@@ -1323,7 +1323,7 @@ registerTool({
|
|
|
1323
1323
|
});
|
|
1324
1324
|
// ── Tool: explore_human_design_transit ───────────────────────────────────────
|
|
1325
1325
|
// Personalized Human Design transit overlay (natal chart + a transiting moment).
|
|
1326
|
-
// Premium (
|
|
1326
|
+
// Premium (Pro tier). Calls POST /human-design/transit-chart.
|
|
1327
1327
|
registerTool({
|
|
1328
1328
|
name: "explore_human_design_transit",
|
|
1329
1329
|
description: "Overlay the current (or a chosen) planetary transit on a person's natal Human Design bodygraph.\n\n" +
|
|
@@ -1331,7 +1331,7 @@ registerTool({
|
|
|
1331
1331
|
"Highlights the channels a transit temporarily COMPLETES with the natal chart and any centers it " +
|
|
1332
1332
|
"newly defines — the core of a Human Design transit reading. " +
|
|
1333
1333
|
"Returns an interactive overlay bodygraph in MCP Apps-capable hosts (Claude Desktop), with a text " +
|
|
1334
|
-
"summary fallback elsewhere. Premium (
|
|
1334
|
+
"summary fallback elsewhere. Premium (Pro tier). Calculated with NASA JPL DE440 ephemerides.",
|
|
1335
1335
|
inputSchema: {
|
|
1336
1336
|
type: "object",
|
|
1337
1337
|
properties: {
|
|
@@ -1348,6 +1348,12 @@ registerTool({
|
|
|
1348
1348
|
type: "string",
|
|
1349
1349
|
description: "Transit moment, ISO 8601. Defaults to now (UTC) when omitted.",
|
|
1350
1350
|
},
|
|
1351
|
+
theme: {
|
|
1352
|
+
type: "string",
|
|
1353
|
+
enum: ["light", "dark"],
|
|
1354
|
+
description: "Visual theme for the overlay bodygraph. Set automatically by the embedded app to match " +
|
|
1355
|
+
"the host; defaults to dark. You normally never need to pass this.",
|
|
1356
|
+
},
|
|
1351
1357
|
},
|
|
1352
1358
|
required: ["datetime"],
|
|
1353
1359
|
},
|
|
@@ -1384,8 +1390,14 @@ registerTool({
|
|
|
1384
1390
|
body.transit_datetime = { iso: ensureTimezone(String(args.transit_datetime)) };
|
|
1385
1391
|
}
|
|
1386
1392
|
const bundleAvailable = Boolean(getBodygraphBundle());
|
|
1387
|
-
|
|
1393
|
+
// The Go endpoint defaults visual_config.theme to "light", which mismatches
|
|
1394
|
+
// dark MCP hosts — mirror the natal path's explicit dark default. The
|
|
1395
|
+
// iframe re-calls this tool with theme once it detects the host theme.
|
|
1396
|
+
const theme = args.theme === "light" ? "light" : "dark";
|
|
1397
|
+
if (bundleAvailable) {
|
|
1388
1398
|
body.include_visual = true;
|
|
1399
|
+
body.visual_config = { theme };
|
|
1400
|
+
}
|
|
1389
1401
|
const resp = await client.request("POST", "/human-design/transit-chart", { data: body });
|
|
1390
1402
|
const transit = (resp?.transit ?? {});
|
|
1391
1403
|
const completed = Array.isArray(transit.completed_channels) ? transit.completed_channels : [];
|
|
@@ -1400,7 +1412,14 @@ registerTool({
|
|
|
1400
1412
|
(newCenters.length
|
|
1401
1413
|
? `\n\nNewly-defined center${newCenters.length === 1 ? "" : "s"}: **${newCenters.join(", ")}** — a temporary shift while the transit holds.`
|
|
1402
1414
|
: "");
|
|
1403
|
-
const payload = {
|
|
1415
|
+
const payload = {
|
|
1416
|
+
...resp,
|
|
1417
|
+
_svg: svg,
|
|
1418
|
+
_theme: theme,
|
|
1419
|
+
// Lets the iframe re-request this overlay in the host's theme.
|
|
1420
|
+
_refetch: { tool: "explore_human_design_transit", args: { ...args } },
|
|
1421
|
+
server_version: SERVER_VERSION,
|
|
1422
|
+
};
|
|
1404
1423
|
if (bundleAvailable && svg) {
|
|
1405
1424
|
return {
|
|
1406
1425
|
content: [{ type: "text", text: summary }],
|
|
@@ -1412,7 +1431,7 @@ registerTool({
|
|
|
1412
1431
|
},
|
|
1413
1432
|
});
|
|
1414
1433
|
// ── Tool: explore_human_design_connection ────────────────────────────────────
|
|
1415
|
-
// Two-person Human Design connection (synastry) overlay. Premium (
|
|
1434
|
+
// Two-person Human Design connection (synastry) overlay. Premium (Pro tier).
|
|
1416
1435
|
// Calls POST /human-design/composite.
|
|
1417
1436
|
registerTool({
|
|
1418
1437
|
name: "explore_human_design_connection",
|
|
@@ -1420,7 +1439,7 @@ registerTool({
|
|
|
1420
1439
|
"theory. CREDIT COST: 3 credits per call. Classifications: " +
|
|
1421
1440
|
"electromagnetic (attraction), companionship (sameness), dominance (one defines), and " +
|
|
1422
1441
|
"compromise (friction). Returns an interactive two-person overlay bodygraph in MCP Apps-capable " +
|
|
1423
|
-
"hosts, with a text summary fallback elsewhere. Premium (
|
|
1442
|
+
"hosts, with a text summary fallback elsewhere. Premium (Pro tier). NASA JPL DE440 ephemerides.",
|
|
1424
1443
|
inputSchema: {
|
|
1425
1444
|
type: "object",
|
|
1426
1445
|
properties: {
|
|
@@ -1446,6 +1465,12 @@ registerTool({
|
|
|
1446
1465
|
},
|
|
1447
1466
|
required: ["datetime"],
|
|
1448
1467
|
},
|
|
1468
|
+
theme: {
|
|
1469
|
+
type: "string",
|
|
1470
|
+
enum: ["light", "dark"],
|
|
1471
|
+
description: "Visual theme for the overlay bodygraph. Set automatically by the embedded app to match " +
|
|
1472
|
+
"the host; defaults to dark. You normally never need to pass this.",
|
|
1473
|
+
},
|
|
1449
1474
|
},
|
|
1450
1475
|
required: ["person_a", "person_b"],
|
|
1451
1476
|
},
|
|
@@ -1473,8 +1498,12 @@ registerTool({
|
|
|
1473
1498
|
subject_2: toSubject(args.person_b),
|
|
1474
1499
|
};
|
|
1475
1500
|
const bundleAvailable = Boolean(getBodygraphBundle());
|
|
1476
|
-
|
|
1501
|
+
// Mirror the transit tool: explicit dark default, host-theme refetch.
|
|
1502
|
+
const theme = args.theme === "light" ? "light" : "dark";
|
|
1503
|
+
if (bundleAvailable) {
|
|
1477
1504
|
body.include_visual = true;
|
|
1505
|
+
body.visual_config = { theme };
|
|
1506
|
+
}
|
|
1478
1507
|
const resp = await client.request("POST", "/human-design/composite", { data: body });
|
|
1479
1508
|
const connections = Array.isArray(resp?.connections) ? resp.connections : [];
|
|
1480
1509
|
const svg = resp?.visual?.data;
|
|
@@ -1490,7 +1519,13 @@ registerTool({
|
|
|
1490
1519
|
line("Dominance — one defines", "dominance") +
|
|
1491
1520
|
line("Compromise — friction", "compromise") +
|
|
1492
1521
|
(connections.length ? "" : " none.");
|
|
1493
|
-
const payload = {
|
|
1522
|
+
const payload = {
|
|
1523
|
+
...resp,
|
|
1524
|
+
_svg: svg,
|
|
1525
|
+
_theme: theme,
|
|
1526
|
+
_refetch: { tool: "explore_human_design_connection", args: { ...args } },
|
|
1527
|
+
server_version: SERVER_VERSION,
|
|
1528
|
+
};
|
|
1494
1529
|
if (bundleAvailable && svg) {
|
|
1495
1530
|
return {
|
|
1496
1531
|
content: [{ type: "text", text: summary }],
|
|
@@ -15,7 +15,7 @@ registerTool({
|
|
|
15
15
|
" Example: Uranus Opposition → transiting_planets=['uranus'], natal_points=['uranus'], aspect_angle=180\n" +
|
|
16
16
|
" Example: Outer planets to natal Sun/Moon → transiting_planets=['saturn','uranus','neptune','pluto'], natal_points=['sun','moon']\n\n" +
|
|
17
17
|
"DEFAULT natal_points (when omitted): sun, moon, mercury, venus, mars, jupiter, saturn.\n" +
|
|
18
|
-
"SEARCH RANGE LIMITS: Explorer/PayG tier → 1 year max;
|
|
18
|
+
"SEARCH RANGE LIMITS: Explorer/PayG tier → 1 year max; Pro → 5 years; Startup → 10 years.\n" +
|
|
19
19
|
"CREDIT COST: 6 credits per call.",
|
|
20
20
|
inputSchema: {
|
|
21
21
|
type: "object",
|