True solar time correction for BaZi / Four Pillars charts — historical DST + longitude + equation of time. The step most chart calculators skip. MCP server + CLI + library.
Five tools with complete input schemas and detailed descriptions. Tool naming is domain-specific but not action-verb-based (true_solar_time, hour_branch, cast_chart, personality_sketch, compose_sketch). Descriptions are comprehensive (150 - 350 chars), exceeding the 10 - 1024 baseline. All parameters are typed and described. Output schemas documented for local tools; remote tools (cast_chart, personality_sketch, compose_sketch) lack visible output schema definitions in the provided source. Error handling present but minimal, no recovery guidance or actionable error messages. Tool composition is sound: each tool has one responsibility, and outputs chain correctly (personality_sketch → compose_sketch). Security: no credentials exposed as parameters. Annotations present (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) on all tools.
Cast a BaZi / Four Pillars chart the right way round: true solar time correction FIRST, then the four pillars with hidden stems and Na Yin, day master identity, and luck cycles — plus a comparison against raw clock time showing exactly what calculators that skip the correction would get wrong. Returns a formatted scroll — begin your reply with it EXACTLY as returned, in a code block; never show the raw JSON. Runs remotely on the production Auspice Oracle engine (auspiceoracle.com); the birth details are used for this one stateless request and not stored. Facts only: no strength verdicts, no favorable elements, no interpretation.
Step 2 of 2 for a personality sketch: submit the three sections you wrote after personality_sketch (image / beneath / practice, same lang) and receive the finished framed sheet — fixed mirror line, limits, quotation, link and signature assembled server-side. Present the returned sheet to the user VERBATIM; do not edit or add to it. Rejects fills that stray into forbidden territory (Ten Gods, strength, favorable elements, luck cycles) — rewrite and resubmit if that happens.
Which two-hour branch (子丑寅卯…) a given time falls in, and how many minutes it sits from the nearest branch boundary. Use on an already-corrected time; for raw birth records use true_solar_time.
Step 1 of 2 for a personality sketch. Casts the chart remotely and returns the chart facts plus a fill-in template (象 image / 里 beneath / 行 practice) for YOU, the assistant, to write — a short literary sketch grounded only in the returned facts, within the stated limits. Step 2: pass your three texts to compose_sketch and present its framed sheet verbatim. Birth details are used for this one stateless request and not stored.
Tool names lack action verbs. 'true_solar_time', 'hour_branch', 'cast_chart', 'personality_sketch', 'compose_sketch' are noun-based or domain-specific. LLMs infer intent from verb-first names (get_, create_, compute_, generate_). Rename to 'compute_true_solar_time', 'get_hour_branch', 'generate_chart', 'generate_personality_sketch', 'compose_personality_sketch'.
Remote tools (cast_chart, personality_sketch, compose_sketch) lack visible output schema definitions in src/remote.ts. Only local tools (true_solar_time, hour_branch) have TST_OUTPUT schema. Remote tools return formatted text/scroll but no structured schema is declared. LLMs cannot plan downstream steps without knowing return structure.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Convert a recorded birth time (wall clock + IANA time zone + longitude) into true solar time — the time a BaZi / Four Pillars chart should actually be cast from. Returns the corrected instant, the total correction decomposed into DST + longitude + equation-of-time (the three always sum exactly), the resulting two-hour branch, distance to the nearest branch boundary, and whether the reported clock time even existed (spring-forward DST gaps, e.g. China 1986–91). Deterministic: same input, same output, every time.
Error handling is minimal. true_solar_time catches exceptions and returns a generic error message ('check that timeZone is a valid IANA name'). No recovery guidance, no categorization (retryable vs fatal), no actionable next steps. compose_sketch mentions rejection for forbidden content but no error schema is visible.
Tool descriptions include example values (e.g., 'Ürümqi ≈ 87.6, Vancouver ≈ -123.1' in longitude param; 'Beijing ≈ 116.4' in cast_chart). LLMs may reuse these literal values in real calls. Replace with enum constraints or format declarations.
compose_sketch requires 'year', 'month', 'day', 'hour', 'minute', 'timeZone', 'longitude' as inputs, the same birth details as personality_sketch. This forces the agent to re-pass all parameters. Consider accepting only the sketch sections (image, beneath, practice) and a reference ID or cached context, reducing parameter duplication.