@openephemeris/mcp-server 4.3.0 → 4.3.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 +33 -0
- package/dist/tools/specialized/account.js +12 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,39 @@ Version numbering follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [4.3.1] — 2026-07-29
|
|
11
|
+
|
|
12
|
+
Two rendering fixes surfaced by the Phase-0 v4.3 audit, plus a companion
|
|
13
|
+
server-side fix that unblocks the tool this release advertised.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **`account_usage` no longer tells unlimited-plan customers they have "0 remaining".**
|
|
18
|
+
A service-tier row reports `included_units = -1` (the sentinel for unlimited);
|
|
19
|
+
the tool rendered it literally as *"Credits: 993 used of -1 included — 0 remaining
|
|
20
|
+
(0% used)"* — three mutually contradictory statements about the same quota, and
|
|
21
|
+
the "0 remaining" reading a paid customer as cut off. Unlimited plans now render
|
|
22
|
+
as *"Credits: 993 used · unlimited plan"* with no synthesized percentage.
|
|
23
|
+
NEW-11 from the audit.
|
|
24
|
+
- **Companion:** `ephemeris_house_cusps` accepts the `timezone` companion the
|
|
25
|
+
4.3.0 schema advertised. The Go server rejected the field at the JSON decode
|
|
26
|
+
layer with *"unknown field provided in DateTimeInput"*, so an agent following
|
|
27
|
+
OE's own naive-datetime error message hit a second error. Fixed server-side
|
|
28
|
+
in [`openephemeris/openephemeris#466`](https://github.com/openephemeris/openephemeris/pull/466)
|
|
29
|
+
(no MCP change) — the schema, generated struct, and handler were all correct;
|
|
30
|
+
only the bespoke JSON decoder's allowlist was out of sync. NEW-10 from the
|
|
31
|
+
audit.
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- **`account_usage` now prints a `Server version` line.** External audits and
|
|
36
|
+
eval runs could not previously attribute a score to a specific published
|
|
37
|
+
build — the version is set in `serverInfo.version` on `initialize` but was
|
|
38
|
+
not surfaced anywhere a human-readable tool response could echo. NEW-9 from
|
|
39
|
+
the audit.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
10
43
|
## [4.3.0] — 2026-07-29
|
|
11
44
|
|
|
12
45
|
The bodygraph iframes get the same view toggle across every mode (natal, transit,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { registerTool } from "../index.js";
|
|
1
|
+
import { registerTool, SERVER_VERSION } from "../index.js";
|
|
2
2
|
import { getActiveClient, BackendError, DASHBOARD_ACCOUNT_URL, LOGIN_SIGNUP_URL, UPGRADE_URL, WALLET_TOPUP_URL, } from "../../backend/client.js";
|
|
3
3
|
import { OUTPUT_SCHEMA_JSON } from "../output-schemas.js";
|
|
4
4
|
// Tiers where the primary next step is a wallet top-up rather than a plan change.
|
|
@@ -63,6 +63,10 @@ registerTool({
|
|
|
63
63
|
const period = row.month || args?.month || new Date().toISOString().substring(0, 7);
|
|
64
64
|
const used = row.total_units ?? 0;
|
|
65
65
|
const included = row.included_units ?? 0;
|
|
66
|
+
// `included_units < 0` is a sentinel for unlimited (service/enterprise plans).
|
|
67
|
+
// Rendering it literally as "0 remaining (0% used)" tells a paid customer they
|
|
68
|
+
// are cut off — the exact opposite of the truth. NEW-11 from the audit.
|
|
69
|
+
const unlimited = included < 0;
|
|
66
70
|
const remaining = Math.max(included - used, 0);
|
|
67
71
|
const percent = row.percent_units_used ?? (included > 0 ? Math.round((used / included) * 1000) / 10 : 0);
|
|
68
72
|
const totalCalls = row.total_calls ?? 0;
|
|
@@ -71,7 +75,9 @@ registerTool({
|
|
|
71
75
|
``,
|
|
72
76
|
`- **Plan:** ${tier}`,
|
|
73
77
|
`- **Period:** ${period}`,
|
|
74
|
-
|
|
78
|
+
unlimited
|
|
79
|
+
? `- **Credits:** ${used.toLocaleString()} used · unlimited plan`
|
|
80
|
+
: `- **Credits:** ${used.toLocaleString()} used of ${included.toLocaleString()} included — **${remaining.toLocaleString()} remaining** (${percent}% used)`,
|
|
75
81
|
`- **Total API calls:** ${totalCalls.toLocaleString()}`,
|
|
76
82
|
];
|
|
77
83
|
if ((row.overage_units ?? 0) > 0) {
|
|
@@ -86,6 +92,10 @@ registerTool({
|
|
|
86
92
|
lines.push(`- **Renews:** ${renewal.toISOString().substring(0, 10)}`);
|
|
87
93
|
}
|
|
88
94
|
}
|
|
95
|
+
// Verifiable build identifier so external evals can attribute every score to
|
|
96
|
+
// a specific published version rather than trusting the tester's word.
|
|
97
|
+
// NEW-9 from the audit.
|
|
98
|
+
lines.push(`- **Server version:** ${SERVER_VERSION}`);
|
|
89
99
|
lines.push(``);
|
|
90
100
|
if (WALLET_TIERS.has(tier)) {
|
|
91
101
|
lines.push(`**Need more credits?** Top up your wallet at ${WALLET_TOPUP_URL} (from $5), ` +
|