Skip to main content
Glama

Open Ephemeris MCP Server

npm version System Status License: MIT Ephemeris: JPL DE440

Open Ephemeris in Claude — ask in plain language, get a real computed chart

Use it in Claude: add https://mcp.openephemeris.com/mcp as a custom connector (leave the OAuth Client ID and Secret blank) or install the Open Ephemeris plugin from the Claude directory. Sign-in happens in the browser and creates a free account with 150 credits.

Model Context Protocol server for Open Ephemeris — typed astrology tools powered by the NASA JPL DE440 ephemeris. Zero hallucination on planetary positions, dates, and degrees. Covers 1,100 years of astronomical data.

The catalog: 90 bodies and 124 fixed stars — asteroids, trans-Neptunians, Uranian points, computed in one engine

Hosted endpoint: https://mcp.openephemeris.com/mcp (Streamable HTTP, MCP 2025-11-25 spec)

Quick Start

Quick install

Claude Code, one command:

claude mcp add openephemeris -- npx -y @openephemeris/mcp-server

Any client that takes a hosted URL (Claude Web, ChatGPT, custom agents): use https://mcp.openephemeris.com/mcp and send your API key in the X-API-Key header. Other clients are below.


Connect from code (Streamable HTTP)

import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { Client } from "@modelcontextprotocol/sdk/client/index.js"

const transport = new StreamableHTTPClientTransport(
  new URL("https://mcp.openephemeris.com/mcp"),
  { requestInit: { headers: { "X-API-Key": "your-openephemeris-api-key" } } }
)

const client = new Client({ name: "my-app", version: "1.0.0" }, { capabilities: {} })
await client.connect(transport)

One-click install (Cursor)

Install in Cursor

Replace YOUR_API_KEY_HERE in Cursor MCP settings with your API key from https://openephemeris.com/dashboard.

Cursor deeplink payload:

{
  "command": "npx",
  "args": [
    "-y",
    "@openephemeris/mcp-server"
  ],
  "env": {
    "OPENEPHEMERIS_PROFILE": "dev",
    "OPENEPHEMERIS_BACKEND_URL": "https://api.openephemeris.com",
    "OPENEPHEMERIS_API_KEY": "YOUR_API_KEY_HERE"
  }
}

Manual install (stdio MCP clients)

{
  "mcpServers": {
    "openephemeris": {
      "command": "npx",
      "args": ["-y", "@openephemeris/mcp-server"],
      "env": {
        "OPENEPHEMERIS_PROFILE": "dev",
        "OPENEPHEMERIS_BACKEND_URL": "https://api.openephemeris.com",
        "OPENEPHEMERIS_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Platform guide

Detailed setup walkthroughs for each platform are in SETUP.md.

Client

Install mode

Config location

Claude Code

CLI

claude mcp add openephemeris -- npx -y @openephemeris/mcp-server

Cursor

One-click deeplink or manual

~/.cursor/mcp.json

Claude Desktop (macOS)

Manual

~/Library/Application Support/Claude/claude_desktop_config.json

Claude Desktop (Windows)

Manual

%APPDATA%\Claude\claude_desktop_config.json

Windsurf

Manual

~/.codeium/windsurf/mcp_config.json (or legacy ~/.codeium/mcp_config.json)

ChatGPT

One-click

Open Ephemeris in the ChatGPT app directory

Claude Web / remote clients

Hosted URL

https://mcp.openephemeris.com/mcp

Client install walkthroughs

  1. Cursor

    • Click the "Install in Cursor" button above, then replace YOUR_API_KEY_HERE in Cursor MCP settings.

    • If you prefer manual setup, paste the mcpServers.openephemeris block from "Manual install" into ~/.cursor/mcp.json.

  2. Claude Desktop (macOS/Windows)

    • Open the platform config file from the table above.

    • Add the same mcpServers.openephemeris block from "Manual install".

    • Restart Claude Desktop.

  3. Windsurf

    • Open ~/.codeium/windsurf/mcp_config.json (or the legacy ~/.codeium/mcp_config.json path).

    • Add the mcpServers.openephemeris block from "Manual install".

    • Restart Windsurf.

Remote-only clients (Claude Web, ChatGPT, etc.)

The server is hosted at https://mcp.openephemeris.com/mcp with full Streamable HTTP support (MCP 2025-11-25 spec). Remote-only clients can connect directly — no bridge/proxy required:

  • Claude Web: Add https://mcp.openephemeris.com/mcp as a custom connector URL — leave OAuth Client ID and Secret blank. The server uses OAuth 2.1 + PKCE (Dynamic Client Registration), so Claude handles authentication via a browser popup automatically.

  • ChatGPT: Open Ephemeris is an approved app in the ChatGPT app directory. Open the listing, click Install plugin, approve the sign-in (that also creates your free Open Ephemeris account), then type @Open Ephemeris in any chat. Charts render inline, exactly as they do in Claude. Prefer to wire it yourself? Settings → Plugins → Advanced → Developer mode → + Create app accepts https://mcp.openephemeris.com/mcp with Authentication on OAuth — no client ID or secret to enter.

  • Legacy SSE: retired in 3.20.0 — use Streamable HTTP at /mcp

Auth and upgrade behavior in MCP clients

  • Missing/invalid credentials (401): tool call fails with a message that points users to sign up/sign in at https://openephemeris.com/login?signup=true&redirect=%2Fdashboard%3Ftab%3Daccount, then create/manage keys in https://openephemeris.com/dashboard?tab=account.

  • Tier-gated endpoint (403): tool call returns an upgrade-required message with https://openephemeris.com/pay and dashboard billing/key management link.

  • Out of credits (402): tool call returns a one-tap top-up link (Explorer's 150 free credits are one-time and do not reset; plan allowances renew each billing period) plus the dashboard usage link. Failed calls (any 4xx/5xx) are refunded.

  • Burst/rate limit (429): tool call returns retry guidance and links to dashboard usage monitoring.

Related MCP server: Ziwei Astrology MCP Server

What You Can Ask

"Calculate a natal chart for 1990-04-15 at 2:30 PM in Chicago."
"Find all Saturn transits to my natal Sun in the next 6 months."
"Get the current moon phase and void-of-course status."
"Find the next solar eclipse visible from Tokyo."
"Find the best time to sign a contract in March — electional window."
"Generate a Human Design chart for my birth data."
"What is my Vedic (sidereal) chart?"
"Calculate my Chinese BaZi (Four Pillars) chart."
"Show me my Astrocartography power lines — where is my Venus line on the map?"
"Find all ACG lines within 3° of Paris for my chart."
"Calculate a synastry chart between two people."
"Find the next Venus Star Point and my relationship to it."
"What are the active planetary stations in the next 3 months?"
"Calculate primary directions for the next 5 years."
"Find my Firdaria time lord period."
"What is the sidereal time and delta-T right now?"

Interactive Charts

Nine of the tools don't answer with JSON. They open a chart in the conversation — a real one, drawn from the same calculation, that you can click around in.

This matters more than it sounds. A natal chart returned as JSON is a list of numbers you have to already understand to read. The same chart rendered as a wheel is something you can point at. Click a planet and you get that placement explained; click a house and you get what's in it. The chart stays on screen while you keep talking, and it doesn't cost another credit to keep looking at it.

These need a host that supports MCP Apps. Claude and ChatGPT both do, and they render the same widget — there is no separate ChatGPT build. MCP Apps (SEP-1865) was co-authored by Anthropic and OpenAI and became the first official MCP extension in January 2026, so one ui:// resource serves both. In ChatGPT, install it from the app directory; in Claude, add the connector (see SETUP.md).

In a client without app support the same tools still work; you get the underlying data instead of the picture, so nothing breaks, you just don't get the wheel.

Tool

What opens

What you can click

Credits

explore_natal_chart

Natal wheel — planets, houses, aspects, angles

Planets, houses, aspect lines; recalculate with new settings

1

explore_bi_wheel

Two charts on one wheel: transits, synastry, progressions

Either wheel's planets, houses, and the aspects between them

2 (6 for solar/lunar return)

explore_human_design

Human Design bodygraph, with a mandala view toggle

Centers, gates, channels, planets, variables

4

explore_human_design_transit

Today's planets laid over a natal bodygraph

Transit-activated channels

5

explore_human_design_connection

Two bodygraphs combined, every shared channel classified

Connection channels by type

5

explore_vedic_chart

South Indian Rashi grid — sidereal placements and Lagna

Each rashi, for its placements and nakshatras

3

explore_bazi_chart

Four Pillars (四柱命盘) — Year, Month, Day, Hour

Each pillar

3

explore_transit_timeline

Upcoming transit hits in date order

Individual hits

6 for up to 1 year (priced by span)

explore_moon_phase

Moon dial — illumination, phase, sign, void-of-course

Recalculate for another moment

3

Ask for these the way you'd ask a person: "show me my chart", "put today's transits over my Human Design", "what's the moon doing right now". The model picks the app.

Two things worth knowing. The chart wheel and bi-wheel accept a click on an aspect line, not just on the two planets it joins — so "why does this line matter" is one click rather than a paragraph of setup. And the bodygraph's mandala toggle rearranges the whole chart into concentric rings without another API call, so switching views is free.

Tools at a Glance

Category

Tool

Tier

Natal chart

ephemeris_natal_chart

Explorer

Transit forecast

ephemeris_transits

Explorer

Transit chart snapshot

ephemeris_natal_transits

Explorer

Sign ingresses / planet to degree

ephemeris_ingresses

Explorer

Moon phase / VOC

ephemeris_moon_phase

Explorer

Eclipse next visible

ephemeris_next_eclipse

Explorer

Electional window

ephemeris_electional

Pro

Moment analysis

electional_moment_analysis

Explorer

Station tracker

electional_station_tracker

Explorer

Aspect search

electional_aspect_search

Pro

Human Design chart

human_design_chart

Explorer

HD composite

human_design_composite

Explorer

HD transit overlay

explore_human_design_transit

Explorer

HD transit timeline (gates over a date range)

human_design_transit_timeline

Explorer

HD extended placements (asteroids, angles, lots, stars)

human_design_extended

Explorer (deep fields Pro)

HD connection (synastry)

explore_human_design_connection

Explorer

HD penta

human_design_penta

Explorer

HD return / opposition

hd_planetary_return, hd_opposition

Explorer

Vedic chart

vedic_chart

Explorer

BaZi (Chinese)

chinese_bazi

Explorer

Synastry

ephemeris_synastry

Explorer

Composite chart

ephemeris_composite

Explorer

Relocation chart

ephemeris_relocation

Explorer

Progressed chart

ephemeris_progressed_chart

Explorer

Solar return

ephemeris_solar_return

Explorer

Lunar return

ephemeris_lunar_return

Explorer

Planetary return

ephemeris_planetary_return

Explorer

Astrocartography lines

acg_power_lines

Pro

ACG hits at location

acg_hits

Pro

Venus Star Points

venus_star_points + 4 more

Explorer

Chart wheel image

ephemeris_chart_wheel

Explorer

Bi-wheel image

ephemeris_bi_wheel

Explorer

Dignities / Midpoints / Fixed stars

ephemeris_dignities, ephemeris_midpoints, ephemeris_fixed_stars

Explorer

Tooling Model

  • Typed tools are preferred for common workflows (natal, transits, moon phase, eclipse, synastry, relocation, electional, Human Design).

  • Generic tools: find_calculation searches the allowlisted operations by plain words and returns the path, inputs, an example and the credit cost (dev_list_allowed lists them all, outside core); dev_read_api invokes allowlisted GET (read) operations and dev_write_api invokes allowlisted POST/PUT/PATCH/DELETE (write/compute) operations, each by method + path. Read and write are kept as separate tools so a safe read surface never shares a tool with state-changing writes.

  • Security model: default-deny with explicit allowlist in config/dev-allowlist.json.

  • Deny prefixes block sensitive route families (/auth, /billing, /admin, etc.).

dev_read_api / dev_write_api input

Parameter

Type

Required

Description

method

dev_read_api: GET · dev_write_api: POST|PUT|PATCH|DELETE

No

HTTP method (defaults to the tool's natural method)

path

string

Yes

Absolute API path, e.g. /ephemeris/natal-chart

query

object

No

Query parameters

body

object

No

JSON body for non-GET requests

preset

full|simple

No

Convenience mapping to query.preset

format

json|llm|llm_v2

No

Convenience mapping to query.format (llm_v2 normalizes to llm)

output_mode

full|simple|llm|llm_v2

No

Legacy compatibility field

Environment Variables

Variable

Required

Description

OPENEPHEMERIS_API_KEY

Yes (unless service key/JWT used)

API key for Open Ephemeris

ASTROMCP_API_KEY

No

Legacy alias for OPENEPHEMERIS_API_KEY (checked as fallback)

OPENEPHEMERIS_BACKEND_URL

No

Defaults to https://api.openephemeris.com

OPENEPHEMERIS_PROFILE

No

dev by default

OPENEPHEMERIS_TOOLS

No

core (default) advertises a focused everyday tool set; full advertises every tool. See Tool surface

OPENEPHEMERIS_TELEMETRY

No

Set to 0/false/off to disable anonymous usage reporting. DO_NOT_TRACK=1 also works. See Telemetry

OPENEPHEMERIS_JWT

No

Bearer token auth

OPENEPHEMERIS_DEV_ALLOWLIST_PATH

No

Override allowlist file path

MCP_USER_ID

No

Per-instance user identifier

Legacy aliases (ASTROMCP_*, MERIDIAN_*) remain supported.

Telemetry

This server reports anonymous usage so we know which tools are worth maintaining and which are broken. Three events: session start, tool call, tool error.

What is sent: the tool name, how long it took, error status, which MCP client connected (e.g. Claude Desktop, Cursor) and its version, the server version, and a stable id for the session: a one-way SHA-256 prefix of your API key, or your account ID when you sign in with OAuth.

What is never sent: your API key or token, birth data, dates, names, coordinates, tool arguments, or tool results. No request or response bodies, ever.

To turn it off — either works, checked before anything is sent:

OPENEPHEMERIS_TELEMETRY=0
# or the cross-tool standard
DO_NOT_TRACK=1

Tool surface

By default the server advertises a focused core set of everyday tools rather than the entire catalog. Large tool lists cost context and make model tool-selection worse, so the default is tuned for real conversations: one interactive app per tradition, the primary data tool per domain, geocoding, and the allowlist-gated generic proxy.

Nothing is removed. The surface is a filter on tools/list only — every tool stays registered and stays callable by name. If you know the tool you want, call it and it works, listed or not.

To advertise the full catalog:

OPENEPHEMERIS_TOOLS=full npx -y @openephemeris/mcp-server

On the remote HTTP server, append ?profile=full to the connector URL (or send X-OE-Tool-Surface: full):

https://mcp.openephemeris.com/mcp?profile=full

Toolsets by tradition

If you work in one tradition, ask for it by name instead of taking the general-purpose default. You get that tradition in full — including the long-tail tools the core set leaves out — for a fraction of the context.

OPENEPHEMERIS_TOOLS=hd npx -y @openephemeris/mcp-server        # Human Design
OPENEPHEMERIS_TOOLS=astrology,moon npx -y @openephemeris/mcp-server
https://mcp.openephemeris.com/mcp?profile=hd,bazi

Toolset

What it covers

Tools

Approx. tokens

astrology

Natal, transits, ingresses, synastry, progressions, returns, relocation, time lords, dignities, midpoints, lots, fixed stars, composites, birth-time sensitivity

38

17,700

hd

Human Design charts, transits and transit timeline, extended placements, connection charts, penta, bodygraph

19

8,500

bazi

Four Pillars, Ten Gods, element balance, luck pillars, compatibility, Zi Wei Dou Shu

16

8,100

electional

Timing windows, angle crossings, stations, moment analysis

12

4,300

acg

Astrocartography lines and hits

9

3,400

vedic

Jyotish Rashi chart, dashas, vargas, Ashtakoota matching

10

3,400

moon

Phases, void-of-course, eclipses

11

3,300

venus

Star points, phases, elongations, stations

13

3,200

mundane

Ingress and lunation charts, geodetic chart

9

2,600

—

core (default)

39

19,800

—

full

81

39,100

Every selection also includes geocoding (location_search, timezone_resolve), account_usage, and the allowlist-gated proxy — so a birthplace is always resolvable and nothing is stranded.

Combine with commas; unknown names are ignored rather than rejected, so a typo degrades to a smaller surface instead of a dead connector. As with core/full, this only filters tools/list — every tool remains callable by name.

Why it matters: tool definitions are re-sent to the model on every pass. astrology,moon advertises a few more tools than the default but costs ~700 fewer tokens per message and covers more of the tradition.

The surface is fixed when the session initializes — this server does not advertise tools.listChanged, so switching requires reconnecting. On every surface, find_calculation searches every operation reachable through the generic proxy.

Contributing & Support

  • Something wrong with a result? Open an issue — include the tool, your inputs, and what you expected.

  • Want to contribute? See CONTRIBUTING.md. Integration examples and new skills are the most useful things you can add.

  • Found a security problem? Please report it privately — see SECURITY.md.

  • Tools timing out? Check status.openephemeris.com first.

If this saved you from an LLM confidently inventing a Saturn position, a ⭐ helps other people find it.

This package is licensed under the MIT License. However, use of this package to access the Open Ephemeris API constitutes use of the Service and is governed by the Open Ephemeris Terms of Service. By using this package, you agree to those terms. See also the Privacy Policy and Acceptable Use Policy.

Development

The server source is maintained in a private monorepo; this repository holds the public docs, plugin, skills and examples. Bug reports and contributions are welcome — see CONTRIBUTING.md.

Architecture

┌─────────────────────────────────────────────────────────┐
│                    MCP Clients                          │
│  Codex · Gemini   · Claude Web · ChatGPT · Remote apps  │
└──────────────────┬──────────────────────────────────────┘
                   │ Streamable HTTP (MCP 2025-11-25)
                   │ https://mcp.openephemeris.com/mcp
                   │
┌─────────────────────────────────────────────────────────┐
│          Cursor · Claude Desktop · Windsurf             │
└──────────────────┬──────────────────────────────────────┘
                   │ stdio JSON-RPC
                   │ npx @openephemeris/mcp-server
                   │
              ┌────▼────────────────────┐
              │  openephemeris-mcp      │
              │  Node.js MCP Server     │
              │  typed tools            │
              │  auth: Key > JWT        │
              └────────────┬────────────┘
                           │ HTTPS
                           ▼
              ┌────────────────────────┐
              │  Open Ephemeris API    │
              │  api.openephemeris.com │
              │  NASA JPL DE440        │
              │  1,100 years of data   │
              └────────────────────────┘

Runtime Snapshot (Generated)

Generated by npm run sync:readme from config/dev-allowlist.json and the live tool registry.

  • Allowlisted operations: 140

  • Methods: GET=45, POST=95, PUT=0, PATCH=0, DELETE=0

  • Registered tools (OPENEPHEMERIS_PROFILE=dev): 103

  • Typed tools: account_usage, acg_hits, acg_power_lines, auth_login, auth_logout, auth_status, bazi_annual_pillar, bazi_chart, bazi_compatibility, bazi_element_balance, bazi_luck_pillars, bazi_recalculate, bazi_ten_gods, bi_wheel_on_cross_aspect_click, bi_wheel_on_house_click, bi_wheel_on_planet_click, bi_wheel_recalculate, bi_wheel_synopsis, bodygraph_recalculate, chart_wheel_on_aspect_click, chart_wheel_on_house_click, chart_wheel_on_planet_click, chart_wheel_recalculate, chinese_bazi, electional_angle_crossings, electional_aspect_search, electional_moment_analysis, electional_station_tracker, ephemeris_angles_points, ephemeris_aspect_check, ephemeris_bi_wheel, ephemeris_chart_wheel, ephemeris_composite, ephemeris_composite_midpoint, ephemeris_dignities, ephemeris_electional, ephemeris_fixed_stars, ephemeris_hermetic_lots, ephemeris_house_cusps, ephemeris_ingresses, ephemeris_lunar_return, ephemeris_midpoints, ephemeris_moon_phase, ephemeris_natal_batch, ephemeris_natal_chart, ephemeris_natal_transits, ephemeris_next_eclipse, ephemeris_next_lunar_phase, ephemeris_overlay, ephemeris_planet_position, ephemeris_planetary_return, ephemeris_progressed_chart, ephemeris_relocation, ephemeris_retrograde_status, ephemeris_solar_return, ephemeris_synastry, ephemeris_time_lords, ephemeris_time_sensitivity, ephemeris_transits, explore_bazi_chart, explore_bi_wheel, explore_human_design, explore_human_design_connection, explore_human_design_transit, explore_moon_phase, explore_natal_chart, explore_transit_timeline, explore_vedic_chart, geodetic_chart, hd_connection_matrix, hd_on_center_click, hd_on_channel_click, hd_on_connection_channel_click, hd_on_gate_click, hd_on_planet_click, hd_on_transit_channel_click, hd_on_variable_click, hd_opposition, hd_planetary_return, human_design_bodygraph, human_design_chart, human_design_composite, human_design_extended, human_design_penta, human_design_transit_timeline, location_search, moon_phase_recalculate, mundane_chart, timezone_resolve, vedic_chart, vedic_chart_recalculate, vedic_matching, venus_eight_year_star, venus_elongations, venus_phase, venus_star_points, venus_star_points_conjunctions, venus_stations, ziwei_chart

  • Generic tools: dev_list_allowed, dev_read_api, dev_write_api, find_calculation

Allowlist Families

Family

Operations

Example

acg

14

POST /acg/aspects, POST /acg/ccg

calendar

3

GET /calendar/astrology/cross-quarter, GET /calendar/astrology/lunar-standstill

catalogs

3

GET /catalogs/bodies, GET /catalogs/fixed-stars

chinese

12

POST /chinese/bazi, POST /chinese/bazi/annual-pillar

comparative

5

POST /comparative/composite, POST /comparative/composite/midpoint

eclipse

6

GET /eclipse/besselian-elements, GET /eclipse/lunar/global

electional

6

GET /electional/angle-crossings, GET /electional/aspect-search

ephemeris

42

GET /ephemeris/agro/calendar, GET /ephemeris/agro/daily

health

2

GET /health, GET /health/detailed

human-design

11

POST /human-design/chart, POST /human-design/composite

location

2

GET /location/autocomplete, GET /location/reverse

mundane

1

POST /mundane/chart

predictive

14

POST /predictive/eclipses/natal-hits, POST /predictive/primary-directions

root

1

GET /

tidal

1

GET /tidal/forcing

time

6

GET /time/delta-t, GET /time/equation-of-time

timezone

3

GET /timezone/coverage, POST /timezone/lookup

vedic

5

POST /vedic/chart, POST /vedic/kp

visualization

3

POST /visualization/bi-wheel, POST /visualization/bodygraph

Why Open Ephemeris for AI Agents?

Most LLMs (like Claude and ChatGPT) struggle heavily with astronomical calculations (trigonometry, Julian date conversions, and planetary lookups). Open Ephemeris serves as a secure, remote math engine.

By pairing LLMs with the Open Ephemeris MCP server, your agents can instantly access:

  • Zero-hallucination coordinates: Direct, sub-arcsecond NASA JPL DE440 calculations spanning 1,100 years of astronomical data.

  • LLM-optimized tokens (format=llm): We compress standard 25,000 token JSON chart responses into minimal text blocks, cutting your inference costs by 50–73% depending on endpoint.

  • Ready-to-use astrology layers: Built-in support for Astrocartography geoJSON lines, Hermetic Lots, Fixed Stars, and complex Human Design matrix generation.

Available Tools

42 tools
account_usageAccount UsageA
Read-onlyIdempotent
Inspect

Use this when the user asks 'how many credits do I have left', 'what's my usage this month', 'what plan am I on' or 'how do I upgrade or top up'. Returns plan tier, billing period, credits used / included / remaining, API calls and subscription status with renewal date.

CREDIT COST: 0.

NameRequiredDescriptionDefault
monthNoYYYY-MM; default current month.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: the exact return payload (including renewal date) and the 'CREDIT COST: 0' note, which tells the agent the call is free and safe to make speculatively. It omits any note on staleness/caching of usage figures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences plus a cost line; the trigger phrases are front-loaded and the return enumeration is dense but readable. Slightly lead with routing rather than the core purpose, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description's field enumeration is necessary and present, and annotations cover safety. Minor gap: it advertises 'how do I upgrade or top up' as a trigger, yet the tool only reports subscription status, which could set a slightly wrong expectation about whether an upgrade action occurs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single optional parameter with 100% schema description coverage ('YYYY-MM; default current month'), so the schema carries the semantics. The description only implies a current-month default and adds no format or range guidance beyond the schema, making 3 the correct baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: it enumerates exactly what is returned (plan tier, billing period, credits used/included/remaining, API calls, subscription status, renewal date). That enumeration clearly separates it from auth_status and the dev_* tools without needing to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger utterances ('how many credits do I have left', 'what's my usage this month', 'what plan am I on'), which is strong when-to-use guidance. It does not name an alternative or state a when-not-to-use case, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

acg_hitsAstrocartography Location HitsA
Read-onlyIdempotent
Inspect

Use this when the user asks 'is Tokyo good for me', 'where should I live according to my chart' or 'should I move to Austin'. Returns every astrocartography line (power and aspect lines) within radius_deg of a place, nearest first.

CREDIT COST: 10 credits per call. Pro tier.

NameRequiredDescriptionDefault
bodiesNoDefault the classical planets; 'Rahu'/'Ketu' = nodes. Extended ids from GET /catalogs/bodies (Eris, Sedna, …) cost 1 credit each (max +20), 1600–2200 CE; 'Eros' is the lot, 'Eros (asteroid)' the asteroid.
timezoneNoIANA zone for a local datetime.
radius_degNoDegrees; default 2, max 90.
custom_bodiesNoEnterprise. Own fixed points (longitude or ra_deg/dec_deg), up to 32, 1 credit each.
birth_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
birth_latitudeYesBirth latitude.
query_latitudeYesPlace latitude to check.
birth_longitudeYesBirth longitude.
include_aspectsNoDefault true.
query_longitudeYesPlace longitude to check.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: credit cost (10 per call, Pro tier) and result ordering (nearest first). It doesn't explain auth requirements or data freshness, but the additions are meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with use cases, then states the return behavior and cost. Every sentence earns its place with zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters (5 required) and no output schema, the description covers usage context, return format (lines, nearest first), and cost. It could say more about the shape of returned line data, but annotations and complete schema descriptions fill most gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented in the schema. The description only mentions radius_deg in passing ('within radius_deg of a place'), which is redundant with the schema's own description. Baseline 3 is appropriate when the schema carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (astrocartography lines) and scope (every power and aspect line within radius_deg of a place, nearest first), which clearly distinguishes it from siblings like acg_power_lines that likely return only power lines. It also anchors purpose with concrete user questions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit example user questions that trigger the tool, giving clear usage context. However, it does not state when to prefer alternatives like acg_power_lines or location_search, nor does it mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

acg_power_linesAstrocartography LinesA
Read-onlyIdempotent
Inspect

Use this when the user asks 'show my astrocartography map', 'where are my Jupiter lines' or wants the whole-world list of their lines. Returns each planet's MC, IC, AC and DC lines with sign and equator-crossing longitude (no map geometry).

CREDIT COST: 10 credits per call. Pro tier.

NameRequiredDescriptionDefault
bodiesNoDefault the classical planets; 'Rahu'/'Ketu' = nodes. Extended ids from GET /catalogs/bodies (Eris, Sedna, …) cost 1 credit each (max +20), 1600–2200 CE; 'Eros' is the lot, 'Eros (asteroid)' the asteroid.
timezoneNoIANA zone for a local datetime.
radius_degNoHit radius, degrees. Default 2.
custom_bodiesNoEnterprise. Own fixed points (longitude or ra_deg/dec_deg), up to 32, 1 credit each.
birth_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
birth_latitudeYesBirth latitude.
query_latitudeNoFilter lines near this latitude.
birth_longitudeYesBirth longitude.
query_longitudeNoFilter lines near this longitude.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only, idempotent, non-destructive profile, and the description adds real value beyond them: a flat 10-credit cost, a Pro-tier gate, and an explicit statement that no map geometry is returned. It doesn't mention auth requirements or whether extended bodies change the price at this tool level, but the cost disclosure is the key operational fact and it's present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Usage trigger comes first, return shape second, cost as a separate terse line. Zero filler and the no-map-geometry caveat is packed into the same sentence as the return description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With nine parameters, three required, and no output schema, the description does the important work of characterizing the return value (line longitudes, no geometry) and the cost model. What's missing is minor: whether filters like query_latitude interact with radius_deg, and how the whole-world result is sized/paginated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the property descriptions are unusually rich (Rahu/Ketu mapping, per-body credit pricing, radius default of 2, timezone handling), so the schema carries the burden. The description adds nothing about `bodies`, `radius_deg`, or the `query_latitude`/`query_longitude` filters, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb + resource is given: returns each planet's MC/IC/AC/DC lines with sign and equator-crossing longitude, and explicitly notes it excludes map geometry. That scoping makes the output shape unambiguous. It doesn't contrast itself with the sibling `acg_hits`, so an agent must still infer which of the two astrocartography tools to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with concrete user phrasings ('show my astrocartography map', 'where are my Jupiter lines') and the condition 'wants the whole-world list of their lines', which is a usable selection signal. It stops short of naming `acg_hits` as the narrower alternative, so the exclusion is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auth_loginConnect AccountAInspect

Use this when the user asks to 'connect', 'sign in', 'log in' or 'link my Open Ephemeris account'. Returns a verification URL and code for the user to enter in their browser; the server then receives credentials automatically and every call is billed to that account (tier, credits, rate limits).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations by disclosing the actual mechanism: a verification URL and code are returned for the user to enter in a browser, credentials arrive server-side afterward, and all subsequent calls are billed to that account with tier/credit/rate-limit consequences. This is real behavioral context the readOnlyHint=false / idempotentHint=false flags cannot convey. It stops short of saying what happens if invoked again while already logged in or whether a previously issued code is invalidated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the trigger condition followed by the mechanism and the billing side effect. No filler, and the most decision-relevant information (when to call) comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description supplies the trigger, the return shape (URL + code), and the downstream consequence of authenticating. The only missing piece an agent might need is the already-authenticated case and how it should be handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. Nothing in the description contradicts or misdescribes the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and outcome — authenticating the user's Open Ephemeris account — and gives the exact user phrasings ('connect', 'sign in', 'log in', 'link my account') that map to it. This clearly separates it from auth_status and auth_logout siblings without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly anchors invocation to user intent phrases, which is the right trigger signal for an auth tool. It does not state the inverse case (e.g. 'do not call if already authenticated — use auth_status instead'), so the exclusion guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auth_logoutDisconnect AccountA
DestructiveIdempotent
Inspect

Use this when the user asks to 'log out', 'sign out', 'disconnect' or 'switch accounts' on this MCP server. Returns confirmation that cached device-auth credentials were cleared; an API key set in the environment is not revoked.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, and the description adds exactly the value annotations cannot: what specifically is destroyed (cached device-auth credentials) and what survives (environment API key). It also discloses that a confirmation is returned, so the agent knows the effect is verifiable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first front-loads the invocation condition, the second discloses the effect and its boundary. Every clause carries information and nothing is repeated from the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema tool with rich annotations, this covers trigger, effect and side-effect boundary. The only small gap is that it does not say whether the caller must re-run auth_login afterwards or whether other tools will start failing after logout.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. It correctly avoids inventing parameter detail for a no-arg call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (clearing cached device-auth credentials) tied to concrete user phrasings ('log out', 'sign out', 'disconnect', 'switch accounts'), which clearly separates it from the sibling auth_login and auth_status tools. It does not explicitly name those siblings, but the intent is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger conditions via quoted user utterances, and it also states a when-not nuance: an API key set in the environment is not revoked, so the agent knows this tool does not fully de-authenticate env-key users. No inference is required to decide when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auth_statusAuth StatusA
Read-onlyIdempotent
Inspect

Use this when the user asks 'am I logged in', 'which account is this connected to', 'how am I authenticated' or 'when does my token expire'. Returns whether the server is authenticated, the linked account, the method (API key, JWT, device auth) and token expiry.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds real value beyond that by disclosing the return payload shape, including auth method enumeration and token expiry, which tells the agent this is a safe informational probe rather than a check that refreshes credentials.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both earning their place: the first front-loads trigger phrases, the second enumerates return values. No repetition of the title or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description carries the burden of describing the response, and it does so completely by naming all four returned facts. An agent has everything needed to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. The description correctly implies no inputs are needed by framing it purely around user questions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (server auth state) and enumerates exactly what is returned: authenticated flag, linked account, method (API key/JWT/device auth), and token expiry. This clearly distinguishes it from auth_login and auth_logout in the sibling list, which mutate auth state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides four concrete user phrasings that should trigger this tool ('am I logged in', 'which account', 'how am I authenticated', 'when does my token expire'), giving strong positive routing. It does not explicitly name auth_login/auth_logout as the alternatives to avoid, but the read-only framing makes the boundary reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bazi_annual_pillarBaZi Annual PillarA
Read-onlyIdempotent
Inspect

Use this when the user asks 'what element is the year of the Snake', 'what's the pillar, stem and branch or NaYin for my birth year' or 'what's the energy of this year' — a single-year lookup beyond the animal. Returns the year's Heavenly Stem, Earthly Branch, animal, element, polarity and NaYin for any year 1-9999.

CREDIT COST: 3 credits per call.

NameRequiredDescriptionDefault
yearYesGregorian year (1–9999). e.g. 2025.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds two things annotations cannot: the exact output fields and the cost of 3 credits per call, which materially affects agent budgeting. No pagination or error behavior is mentioned, but for a pure single-value computation that is a minor omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first front-loads the use case and the return payload, the second carries an actionable cost note. Every clause earns its place; nothing is repeated from the schema beyond a single confirmation of the year range.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by listing every returned field. Combined with the trigger examples, year range, and credit cost, an agent has everything needed to decide and invoke correctly for a one-parameter read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the single `year` parameter is already fully documented as 'Gregorian year (1–9999)'. The description restates the 1-9999 range without adding format, calendrical-edge-case, or timezone guidance, so it sits at the baseline for schema-saturated cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (a single year's BaZi pillar) and enumerates exactly what is returned — Heavenly Stem, Earthly Branch, animal, element, polarity, NaYin — over year 1-9999. The phrase 'a single-year lookup beyond the animal' clearly separates it from a full chart tool like explore_bazi_chart, even without naming that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger utterances ('what element is the year of the Snake', 'what's the pillar for my birth year') that map cleanly to when to call it, which is stronger than generic guidance. It stops short of explicit exclusions or naming explore_bazi_chart as the alternative for multi-pillar charts, so it is clear context without the when-not-to-call half.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dev_read_apiAPI ReadA
Read-onlyIdempotent
Inspect

Use this when find_calculation returns a GET path (biodynamic days, tidal forcing, crescent visibility, catalogs). Returns the endpoint's JSON. Read-only; POST paths go to dev_write_api.

Target API: Open Ephemeris REST API (https://api.openephemeris.com), allowlisted paths only. format 'llm' = compact output. 4xx/5xx are refunded.

NameRequiredDescriptionDefault
bodyNo
pathYesAllowlisted path from find_calculation
queryNo
formatNoSets query.format
methodNo
presetNoSets query.preset
output_modeNoLegacy

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, and the description adds context they don't carry: allowlisted-paths-only constraint, the 'llm' compact-output mode, and that 4xx/5xx are refunded. It doesn't mention auth requirements (an auth_status/auth_login sibling set exists) or rate limits, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the selection trigger, then operational constraints, then the target API context. Compact overall, though the standalone 'Target API: ... allowlisted paths only' line partly restates the path parameter's schema description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-param passthrough tool with nested objects and no output schema, the description supplies the workflow (find_calculation -> read/write), the output shape ('endpoint's JSON'), and the error/refund policy. Remaining gaps are the undocumented preset/output_mode/body semantics and no auth note.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 57%, and the description only enriches two things: path comes from find_calculation and format='llm' means compact output. Preset, output_mode ('Legacy' per schema only), and the body/query objects receive no explanation, and body on a GET-only tool is unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (API endpoint), and pins the entry condition to a sibling's output: 'Use this when find_calculation returns a GET path.' Explicitly contrasts with dev_write_api for POST paths, so the agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use trigger (find_calculation returned a GET path) and a when-to-use-something-else rule (POST paths go to dev_write_api). The workflow ordering is unambiguous, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dev_write_apiAPI Compute (POST)A
Read-onlyIdempotent
Inspect

Use this when find_calculation returns a POST path (KP, Varshaphal, the Chinese calendar, bounds, eclipses on a chart). Returns the endpoint's JSON. Stateless compute; GET paths go to dev_read_api.

Target API: Open Ephemeris REST API (https://api.openephemeris.com), allowlisted paths only. format 'llm' = compact output. 4xx/5xx are refunded.

NameRequiredDescriptionDefault
bodyNo
pathYesAllowlisted path from find_calculation
queryNo
formatNoSets query.format
methodNo
presetNoSets query.preset
output_modeNoLegacy

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/non-open-world, and the description reinforces them ('stateless compute', 'allowlisted paths only') without contradicting. It adds non-schema behavior an agent would otherwise miss: billing semantics ('4xx/5xx are refunded') and the compact-output meaning of format 'llm'. Lacks detail on auth and rate limits, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The triggering condition is front-loaded in the first clause, and the sentences are dense with actionable facts (return shape, statelessness, API target, allowlist, refund rule). Slightly compressed/telegraphic phrasing ('4xx/5xx are refunded') costs a little readability but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter pass-through with nested free-form body/query objects and no output schema, the description covers routing, return type, and error billing but says nothing about what the body should contain or how to construct valid payloads. Adequate to select and fire the tool, thin on how to succeed with it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 57%, so the schema does most of the work. The description adds real value for one parameter by explaining that format 'llm' means compact output, and ties 'path' to find_calculation, but leaves body, query, preset, and legacy output_mode unexplained despite arbitrary nested objects being the hardest part of the call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the verb (POST compute) and resource (allowlisted endpoints on the Open Ephemeris REST API) and names the triggering tool (find_calculation returning a POST path). It clearly separates itself from dev_read_api for GET paths. It stops short of 5 because the actual operation is a generic pass-through, so the value is mostly in the routing rule rather than a domain-specific action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when find_calculation returns a POST path'), example cases (KP, Varshaphal, Chinese calendar, bounds, eclipses), and the routing exclusion ('GET paths go to dev_read_api'). An agent knows exactly when to pick this tool over its closest sibling without opening any schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

electional_moment_analysisMoment Quality AnalysisA
Read-onlyIdempotent
Inspect

Use this when the user asks 'is today a good day to …', 'what's the sky like today', 'what's the astrological weather', 'how is this date astrologically' — or has no birth data (it works with no arguments). Returns planet positions, aspects, void-of-course status, lunar phase, day ruler, sect and an overall electional score (0-100) for one moment.

CREDIT COST: 5 credits per call.

NameRequiredDescriptionDefault
dateNoISO 8601; must include Z/offset. Default now.
formatNoOutput format.
latitudeNoLatitude, decimal degrees (+N). Optional; without coordinates sect defaults to diurnal.
longitudeNoLongitude, decimal degrees (+E). Pair with latitude.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds useful behavioral context by listing the returned data bundle and explicitly noting the 5-credit cost per call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the user intents that should trigger it, followed by the return contents and cost. Every sentence carries useful selection or invocation information, with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-required-parameter analysis tool without an output schema, the description does enough by naming the returned fields and calling out the credit cost. It could be stronger if it briefly clarified how broadly the electional score should be interpreted or when a more targeted ephemeris tool is preferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so date, format, latitude, and longitude are already well documented in the schema. The description adds only that the tool works with no arguments; it does not add further parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this tool analyzes the astrological quality of a single moment and returns an electional score plus supporting sky data. It distinguishes itself from natal-chart tools by emphasizing that no birth data is needed, but it does not explicitly differentiate itself from nearby ephemeris or moon-phase siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear example query patterns such as 'is today a good day to …' and 'what's the astrological weather', and notes that it works with no arguments. It does not say when to prefer a narrower sibling like moon-phase or aspect-check tools instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

electional_station_trackerRetrograde Station TrackerA
Read-onlyIdempotent
Inspect

Use this when the user asks 'when does Mercury go retrograde', 'when does Mercury retrograde end', 'when does Pluto go direct' or 'Mercury retrograde dates for 2026'. Returns every retrograde and direct station, Mercury through Pluto, with time, longitude and sign; default the next 90 days, max one year.

CREDIT COST: 5 credits per call.

NameRequiredDescriptionDefault
formatNoOutput format.
planetsNoComma list, mercury…pluto. Default Mercury–Saturn.
end_dateNoEnd date (ISO 8601). Defaults to +90 days.
start_dateNoStart date (ISO 8601). Defaults to today.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds genuinely useful behavior the annotations don't carry: the default window (next 90 days), the hard cap of one year, and a per-call credit cost of 5 — cost disclosure is rare and valuable for agent planning.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight blocks: trigger examples plus payload/scoping in the first, cost in the second. Every sentence earns its place and the highest-value routing information (the user phrasings) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, no-output-schema tool with four optional params, the description covers the return fields, defaults, range cap and cost — enough to call it correctly. The remaining gap is the unexplained 'format' enum and no statement of what timezone the returned times use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates the date-range default in prose and clarifies the planet span (Mercury through Pluto) versus the schema's default of Mercury–Saturn, but it does not explain the 'format' enum (json vs llm) or confirm the timezone basis for returned times.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it returns every retrograde and direct station from Mercury through Pluto, with time, longitude and sign. The verbatim user-question examples ('when does Mercury go retrograde', 'Mercury retrograde dates for 2026') make the scope (station dates in a range) clear against a sibling like ephemeris_retrograde_status, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger conditions through quoted user phrasings, which is stronger than generic 'use for retrograde questions'. It does not say when NOT to use it or name an alternative tool (e.g. current-status vs historical stations), which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_angles_pointsAngles & PointsA
Read-onlyIdempotent
Inspect

Use this when the user asks 'where is my Vertex', 'what's my East Point / equatorial ascendant' or 'what are my chart angles' for a date, time and place. Returns ASC, MC, DSC, IC, Vertex and the Equatorial Ascendant/Descendant (also as east_point).

CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
latitudeYesObserver latitude.
timezoneNoIANA zone for a local datetime.
longitudeYesObserver longitude.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this as a safe, read-only, idempotent, non-destructive calculation. The description adds useful context beyond annotations by listing exactly which points are returned and disclosing a per-call credit cost, though it doesn't mention output format or edge cases around timezone handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the use case, followed by the returned fields and credit cost. Every sentence adds actionable information with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description lists the key returned angles, which compensates well. Inputs are fully documented in the schema, and credit cost is disclosed; only minor details such as output structure or timezone failure behavior are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents datetime ISO format, latitude, longitude, and timezone. The description does not add any further parameter semantics, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb/resource: computing chart angles (ASC, MC, DSC, IC, Vertex, East Point/Equatorial Ascendant) for a date/time/place. It is concrete and distinct from generic natal-chart siblings, though it does not explicitly name which sibling to use for alternative angle-related needs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear trigger examples such as 'where is my Vertex', 'what's my East Point', and 'what are my chart angles', which helps an agent recognize when to call it. It does not state exclusions or explicitly route competing requests to siblings like ephemeris_natal_chart or ephemeris_house_cusps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_aspect_checkAspect CheckA
Read-onlyIdempotent
Inspect

Use this when the user asks 'is 15° Aries square 18° Cancer', 'how many degrees apart are my Sun and Moon' or 'is this within orb'. Returns the separation between two ecliptic longitudes and any aspect within orb.

CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
max_orbNoMaximum orb in degrees. Default 8°.
longitude_1YesFirst ecliptic longitude (0-360).
longitude_2YesSecond ecliptic longitude (0-360).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds useful context by stating the return content and a concrete credit cost of 1 per call, though it does not describe output shape or precision.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with usage triggers, followed by a clear return statement and a separate credit-cost line. Every sentence adds actionable information without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-longitude calculation tool with complete parameter documentation and strong annotations, the description covers usage, return content, and cost. It is nearly complete, though the absence of an output schema means the exact returned aspect/separation structure is not fully specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters including max_orb default are already documented in the schema. The description only implies the two longitude inputs and orb concept, without adding syntax or interpretation beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation: returning the separation between two ecliptic longitudes and any aspect within orb, with concrete user-question examples. It is clear what the tool does, though it does not explicitly distinguish itself from broader sibling tools such as synastry or chart exploration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger examples like 'is 15° Aries square 18° Cancer' and 'is this within orb', which clearly indicate when to use the tool. It does not provide when-not guidance or name alternative sibling tools for broader chart comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_house_cuspsHouse CuspsA
Read-onlyIdempotent
Inspect

Use this when the user asks 'what are my house cusps', 'which sign is my 7th house', 'what's my Midheaven', 'show my houses in Whole Sign' or 'compare Placidus and Koch' — houses and angles only, for a date, time and place. Returns the twelve cusps and ASC/MC/DSC/IC for each requested system.

HOUSE SYSTEM CODES: P=Placidus, K=Koch, O=Porphyry, R=Regiomontanus, C=Campanus, E=Equal, W=Whole Sign.

CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
latitudeYesObserver latitude.
timezoneNoIANA zone for a local datetime.
longitudeYesObserver longitude.
house_systemsNoCodes, e.g. ['P','W']. Default ['P'].

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld=false, so the safety profile is covered; the description adds genuinely new behavioral facts — the exact output set per system and the 1-credit cost per call. It does not describe error behavior for invalid or missing timezone data, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with when-to-use and example queries, then the code table, then cost — a sensible ordering where every block earns its place. The example-query list is slightly longer than strictly necessary, but it is the highest-value content for tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, stateless calculation with no output schema, the description supplies everything needed: trigger cases, scope boundary, output shape, the enum values for the one non-obvious parameter, and the credit cost. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real value the schema lacks: the full enumeration P/K/O/R/C/E/W with meanings, whereas the schema only says 'Codes, e.g. ["P","W"].' That mapping is what makes the house_systems parameter usable without guessing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource — compute house cusps and angles for a datetime/place — and explicitly bounds scope to 'houses and angles only, for a date, time and place.' It also states the return contents (twelve cusps plus ASC/MC/DSC/IC), which separates it from angle-only siblings like ephemeris_angles_points and full-chart tools like ephemeris_natal_chart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Four concrete user phrasings ('what are my house cusps', 'which sign is my 7th house', 'show my houses in Whole Sign', 'compare Placidus and Koch') give an agent a clear trigger signal, and 'houses and angles only' scopes out non-house requests. It stops short of naming the sibling to use instead when the user wants a full chart, so the exclusion is implicit rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_ingressesSign IngressesA
Read-onlyIdempotent
Inspect

Use this when the user asks 'when does Saturn enter Aries', 'when does Mercury change signs', 'when is the Moon in Scorpio next', or when a planet reaches an exact degree. Returns each sign ingress (exact UTC time, signs left and entered, retrograde flag) or, with degree, each crossing of that longitude.

CREDIT COST: 5 credits; 1 when the only planet is the Moon (90 days at most).

NameRequiredDescriptionDefault
signNoOnly ingresses into this sign.
degreeNoLongitude 0-360 (0 Cancer = 90). One planet only.
planetsNoe.g. ['saturn']. Default Sun to Pluto; the Moon only on its own.
end_dateNoDefault a year on (Moon: 30 days); not with `degree`. ISO 8601 date (whole UTC day) or zoned datetime.
start_dateNoDefault now. ISO 8601 date (whole UTC day) or zoned datetime.
max_crossingsNoWith `degree`, default 3.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description's job is cost and behavior — and it delivers: 5 credits, 1 credit for Moon-only, 90-day cap for Moon, and the shape of returned entries. It stops short of 5 because it doesn't state result caps or pagination limits for non-degree mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The trigger examples and return shape are front-loaded, with cost placed last where it belongs. The four quoted example questions are slightly padded but each maps to a distinct input path, so little is truly wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six optional parameters and no output schema, the description does the heavy lifting by describing the returned fields and the two operating modes. It leaves minor gaps, e.g. result caps and how `max_crossings` interacts with output size, but an agent can call it correctly from what is given.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all six parameters are already documented, including `degree` as 'one planet only' and the retrograde/default behaviors. The description's 'with `degree`, each crossing of that longitude' largely restates the schema, so it sits at the high-coverage baseline rather than adding materially new semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (compute sign ingresses) and enumerates the return payload (exact UTC time, signs left and entered, retrograde flag), plus a distinct mode via `degree`. This clearly separates it from siblings like ephemeris_transits or ephemeris_planet_position, which do not answer 'when does X enter Y'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with concrete user-question triggers ('when does Saturn enter Aries', 'when is the Moon in Scorpio next') and implicitly covers the degree-crossing case. It lacks an explicit 'use X instead when…' exclusion against siblings such as ephemeris_transits or explore_transit_timeline, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_moon_phaseMoon PhaseA
Read-onlyIdempotent
Inspect

Use this when the Moon's state is wanted as data for a specific moment — 'what phase was the Moon on my birthday', 'what sign was the Moon in on 12 May 1990', 'moon phase and illumination as numbers'. Returns phase name, illumination %, the Moon's sign and degree, and the next void-of-course window; omit datetime for right now.

CREDIT COST: 2 credits.

NameRequiredDescriptionDefault
datetimeNoISO 8601 with a required zone, or local time with `timezone`. Default now.
latitudeNoOptional; for local void-of-course.
timezoneNoIANA zone for a local datetime.
longitudeNoOptional; for local void-of-course.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description goes beyond them by declaring the return payload (phase name, illumination %, sign and degree, next void-of-course window) and the 2-credit cost. It stops short of 5 by saying nothing about precision, errors, or how the void-of-course window is bounded when latitude/longitude are absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The trigger condition and example phrasings are front-loaded in the first sentence, and the credit-cost line is cleanly separated. The three quoted examples are somewhat redundant with one another, costing a little density but aiding recognition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly enumerates the returned fields, so an agent knows what it gets; the 100%-covered input schema carries parameter detail. The remaining gap is tool selection against overlapping lunar-phase siblings, which the description leaves entirely unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so datetime, timezone, latitude and longitude are already documented in structured form; the description only restates "omit datetime for right now." Baseline 3 is appropriate — it adds no syntax, format, or interaction detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: returning the Moon's phase/illumination/sign for a given moment, with concrete example queries. It falls short of 5 because it never distinguishes its scope from the near-duplicate siblings `explore_moon_phase` and `ephemeris_next_lunar_phase`, leaving the agent to guess which one to open.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives usable context ("when the Moon's state is wanted as data for a specific moment") and a default ("omit datetime for right now"), which is more than nothing. But there is no when-not guidance and no routing to the obvious alternatives (`explore_moon_phase`, `ephemeris_next_lunar_phase`), which is the exact decision an agent faces here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_natal_chartNatal ChartA
Read-onlyIdempotent
Inspect

Use this when the user wants their natal / birth chart as data rather than a picture — 'give me my chart as JSON', 'list my natal aspects with orbs', 'what exact degree is my Ascendant', 'my placements as a table' — or as the input to a further calculation. Returns raw JSON: all major planets plus Chiron and the major asteroids (Ceres, Pallas, Juno, Vesta) — and, on request, any of ~90 more bodies via additional_objects (Eris, Sedna, Psyche, Fortuna and so on) — angles (ASC/MC/DSC/IC), house cusps, retrograde flags and the major aspect grid; format='llm' gives compact output. Takes coordinates, not a place name.

CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
formatNo'llm' = compact; 'json' = full (default).
ayanamsaNoDefault lahiri; sidereal only.
datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
latitudeYesBirth latitude.
timezoneNoIANA zone for a local datetime.
analyticsNoOpt-in extras, free.
longitudeYesBirth longitude.
zodiac_typeNoDefault tropical. `sidereal` subtracts the ayanamsa (~24°) from every longitude.
declinationsNoAdd declinations, out-of-bounds flags and parallels (1.5° orb).
house_systemNoDefault placidus.
visual_configNoRendering options for include_visual.
include_visualNoEmbed a chart-wheel SVG. +2 credits.
asteroid_groupsNoAdd a family: major (Ceres–Vesta), centaur, tno (Eris, Sedna, …) or main_belt (12 large).
additional_objectsNoExtra body ids from GET /catalogs/bodies, e.g. ['eris','sedna']; free; 1600–2200 CE, else listed in omitted_bodies.
include_fixed_starsNoAdd fixed-star conjunctions to bodies and angles.
solar_relationshipsNoAdd combustion, cazimi and under-beams.
include_arabic_partsNoAdd Hermetic Lots / Arabic Parts.
include_minor_aspectsNoAdd minor aspects.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive semantics, and the description adds material context beyond them: explicit credit cost (1 per call, +2 with visual), the critical constraint that it 'takes coordinates, not a place name', the range limits on additional_objects (1600–2200 CE), and what omitted_bodies means. It also discloses the default output payload contents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence is front-loaded with the selection condition and examples, and every clause carries information (output contents, coordinate requirement, credit cost). It is a single dense run-on block rather than structured bullets, which slightly reduces scanability for an 18-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 18-parameter tool with no output schema, the description adequately inventories the default return shape (planets, Chiron, asteroids, angles, cusps, retrograde flags, aspect grid) and flags the format toggle. Combined with the 100%-covered schema, an agent has enough context to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so a baseline of 3 applies; the description adds genuine meaning by explaining format='llm' as compact output, framing additional_objects as ~90 optional bodies beyond the default, and clarifying that asteroid_groups selects whole families. It doesn't reinterpret every parameter (e.g., house_system, zodiac_type), but the key decision points are covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete selection rule and verb ('Use this when the user wants their natal / birth chart as data'), then sharply distinguishes the tool from visual/interpretive siblings by contrasting 'data rather than a picture'. Example utterances ('give me my chart as JSON', 'list my natal aspects with orbs') make the resource and output shape unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear positive usage conditions with several user phrasings and the 'as the input to a further calculation' case, which is strong routing guidance. It does not explicitly name the alternative sibling (e.g., explore_natal_chart) for the interpretative/picture case, so the alternate branch is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_next_eclipseEclipse FinderA
Read-onlyIdempotent
Inspect

Use this when the user asks 'when is the next eclipse', 'when is the next solar / lunar eclipse' or 'is there an eclipse visible from Tokyo'. Returns the eclipse type, time of maximum, magnitude and totality duration; with latitude+longitude, local contact times and visibility.

CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
latitudeNoOptional observer latitude; with longitude adds local times and visibility.
longitudeNoOptional; pair with latitude.
after_dateNoISO 8601 date; default today.
eclipse_typeYes'any' = next of either.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds useful behavioral context by listing returned fields, explaining that latitude/longitude add local contact times and visibility, and disclosing the 1-credit cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is front-loaded with usage guidance and keeps the return and cost details brief. Every sentence contributes useful selection or invocation information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description appropriately mentions the key returned values, and the annotations cover safety semantics. It is nearly complete, though it could explicitly mention sibling alternatives or prerequisites for location-based visibility queries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema. The description reinforces the latitude/longitude effect but adds little beyond the schema for eclipse_type or after_date.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly conveys that this tool answers next-eclipse questions and returns eclipse details such as type, maximum time, magnitude, and totality duration. It is distinguishable in practice from sibling ephemeris tools by focusing specifically on eclipses, though it does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete user-question examples for when to use the tool, including solar, lunar, and location-specific visibility queries. It does not explicitly state when not to use it or which sibling tool to choose instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_next_lunar_phaseNext Lunar PhaseA
Read-onlyIdempotent
Inspect

Use this when the user asks 'when is the next full moon', 'when is the next new moon', 'what date is the next quarter moon' or 'list the next 3 full moons'. Returns the exact UTC time of each upcoming occurrence of the phase.

CREDIT COST: 2 credits per occurrence; count max 12.

NameRequiredDescriptionDefault
countNo1–12, 2 credits each. Default 1.
phaseYesPhase to find.
after_dateNoISO 8601 date; default today (UTC).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the description only needs to add cost and output shape — and it does: 2 credits per occurrence, max 12, returning exact UTC timestamps. It does not mention whether the search window is unbounded or how the results are ordered beyond chronological implication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short blocks with zero filler: the invocability guidance and example queries come first, followed by a one-line cost constraint. Nothing is repeated needlessly across sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter, non-destructive read with no output schema, the description covers purpose, triggers, cost ceiling, and the returned value (UTC times). Minor gaps — result ordering and whether after_date is inclusive — are low-risk but present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already documents the count range, per-occurrence cost, phase enum, and after_date default. The description's credit-cost sentence restates what the schema already says rather than adding new semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and operation — returning the exact UTC time of each upcoming occurrence of a named lunar phase — and anchors it with four concrete user phrasings. It implicitly separates itself from snapshot-style siblings like ephemeris_moon_phase (upcoming occurrences vs. current/any-moment state) but never names an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The quoted example queries give clear positive guidance on when to invoke it, including the multi-occurrence case ('list the next 3 full moons'). There is no explicit when-not guidance or named alternative for single-moment phase lookups, which are covered by siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_planet_positionPlanet PositionA
Read-onlyIdempotent
Inspect

Use this when the user asks 'where is Mars right now', 'what sign is the Moon in today', 'what's my sun sign / star sign' (planet_id=0; a bare birth date resolves to noon UTC, no location needed), 'where was Jupiter on my birthday', 'where is the North Node' — one body at one moment. Returns ecliptic longitude, latitude, distance, speed and retrograde flag.

PLANET IDS: 0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto, 10=North Node (Mean), 11=North Node (True), 12=Lilith (Mean), 15=Chiron, 17=Ceres, 18=Pallas, 19=Juno, 20=Vesta. NODES: id 10 is the mean North Node (mean-node polynomial); id 11 is the true North Node (osculating, referenced to the true ecliptic of date). There is no South Node id; the South Node longitude is a North Node longitude plus 180° (mod 360).

CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
latitudeNoOptional; topocentric if set.
timezoneNoIANA zone for a local datetime.
longitudeNoOptional; topocentric if set.
planet_idYes0 Sun, 1 Moon, 2–9 Mercury–Pluto, 10 mean node, 11 true node, 12 Lilith, 15 Chiron, 17–20 Ceres/Pallas/Juno/Vesta.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety traits (read-only, idempotent, non-destructive), and the description adds useful context such as returned fields and credit cost. It does not contradict annotations, though it could say more about auth/permissions or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with usage examples and then organized into ID, node, and cost sections. It is appropriately sized for the domain, but the PLANET IDS list partially duplicates the schema's planet_id description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema tool it explains the return fields, ID mapping, datetime nuance, node behavior, and cost. It still leaves some domain details unstated, such as zodiac/coordinate frame assumptions and error cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: the full planet ID list, node semantics, South Node derivation, and the bare-birth-date-to-noon-UTC rule. Latitude/longitude/timezone behavior is mostly left to the schema, so it is not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: one celestial body at one moment, returning ecliptic position data. The examples ('where is Mars right now', 'what sign is the Moon in today') make it distinguishable from sibling chart, transit, and phase tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context through several concrete example queries and the 'one body at one moment' scope. It does not explicitly name when-not-to-use cases or direct the agent to a specific sibling alternative, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_progressed_chartProgressed ChartA
Read-onlyIdempotent
Inspect

Use this when the user asks 'what's my progressed chart', 'my secondary progressions', 'where is my progressed Moon right now' or 'my solar arc directions'. Returns progressed planet positions, house cusps, aspects and retrograde status for a target date — method = secondary (1 day = 1 year, default), solar_arc, tertiary or minor; converse counts backward.

CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
nameNoOptional subject label.
methodNoDefault secondary (1 day = 1 year).
converseNoCount backward from birth.
timezoneNoIANA zone for a local datetime.
birth_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
birth_latitudeYesBirth latitude.
include_visualNoAlso return a natal-inside, progressed-outside bi-wheel as an image (+2 credits).
birth_longitudeYesBirth longitude.
include_aspectsNoAdd the aspect grid. Default false.
target_datetimeYesProgress to. ISO 8601 date or zoned datetime.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real value beyond them: method semantics (1 day = 1 year), converse direction, and a credit cost including the +2 surcharge for include_visual. It doesn't mention pagination or performance, but for a read-only calculation tool that is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Trigger phrasing is front-loaded, the return contents follow, and the credit line is a single trailing sentence. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returned artifacts (positions, cusps, aspects, retrograde status). Complete enough to call correctly, though it doesn't clarify defaults for house system or aspect output beyond include_aspects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented. The description's method/converse notes largely restate the schema text; only the credit surcharge for include_visual adds genuinely new semantic information. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('returns progressed planet positions, house cusps, aspects and retrograde status') and grounds it in concrete user phrasings. It is clearly distinguishable from natal, transit and solar-return siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit trigger utterances ('my secondary progressions', 'solar arc directions') and explains the method choice, which gives clear context for when to use it. It stops short of naming which sibling to use instead (e.g., ephemeris_transits or ephemeris_solar_return), so no explicit exclusion rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_relocationRelocation ChartA
Read-onlyIdempotent
Inspect

Use this when the user asks 'how does my chart change if I move to London', 'what's my chart in Paris', 'my relocated Ascendant in Tokyo' or 'recast my chart for where I live now'. Returns the natal chart re-cast for a new location — the same planetary longitudes with the houses and angles that place gives them.

CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
formatNo'llm' = compact.
timezoneNoIANA zone for a local datetime.
house_systemNoHouse system to use. Defaults to 'placidus'.
include_visualNoAlso return the relocated chart wheel as an image (+2 credits).
natal_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
natal_latitudeYesBirth latitude.
natal_longitudeYesBirth longitude.
relocation_latitudeYesNew-place latitude (+N).
relocation_longitudeYesNew-place longitude (+E).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description adds real value beyond them with the credit cost (1 credit per call) and the conceptual guarantee that longitudes are unchanged. It doesn't mention the +2 credit visual surcharge or any failure modes, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight paragraphs: usage triggers first, then the return semantics, then cost. Every sentence carries information the agent needs and nothing is repeated from structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the necessary work of explaining what comes back (relocated houses and angles over the same longitudes). It leaves the concrete response shape and the visual-image option entirely to the schema, which is acceptable but leaves a small gap for a tool that can return an image.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all nine parameters including enums and coordinate signs. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: re-casts the natal chart for a new location, and clarifies the invariant (same planetary longitudes, new houses/angles). This clearly separates it from ephemeris_natal_chart and ephemeris_house_cusps, which an agent might otherwise confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trigger phrases ('how does my chart change if I move', 'relocated Ascendant in Tokyo') give concrete when-to-use conditions that map cleanly to user intent. It stops short of an explicit exclusion or naming an alternative for the plain natal case, so routing for edge cases is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_retrograde_statusRetrograde StatusA
Read-onlyIdempotent
Inspect

Use this when the user asks 'is Mercury retrograde right now', 'was Mars retrograde when I was born' or 'which planets are retrograde at the moment'. Returns is_retrograde, speed and station proximity for one planet (Mercury is planet_id=2) or all ten.

CREDIT COST: 1 credit per planet (10 for all).

NameRequiredDescriptionDefault
datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
timezoneNoIANA zone for a local datetime.
planet_idNo0 Sun, 1 Moon, 2–9 Mercury–Pluto. 1 credit; omit for all ten (10 credits).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds useful behavioral context by stating the returned fields and the credit cost per planet, though it does not discuss rate limits or auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the user intents, then the return values, then credit cost. Every sentence contributes useful selection or invocation context without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with full parameter documentation and rich annotations, the description provides enough context to call it correctly. It also compensates for the lack of an output schema by naming the key return fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents datetime, timezone, and planet_id thoroughly. The description reinforces Mercury as planet_id=2 and notes all-ten behavior, but adds only marginal meaning beyond the structured schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and action through concrete user-question examples and names the returned fields. It clearly identifies retrograde status, but it does not explicitly differentiate itself from nearby siblings like electional_station_tracker or ephemeris_planet_position.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use examples such as 'is Mercury retrograde right now' and 'was Mars retrograde when I was born'. It also explains the one-planet versus all-ten usage pattern, though it does not name alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_solar_returnSolar ReturnA
Read-onlyIdempotent
Inspect

Use this when the user asks 'when exactly is my solar return', 'my birthday chart for this year' or 'my solar return for 2027 as JSON'. Returns the exact moment the Sun returns to its natal longitude near the birthday and the Solar Return chart for that year; target_datetime picks the year (defaults to the current one).

CREDIT COST: 5 credits per call.

NameRequiredDescriptionDefault
timezoneNoIANA zone for a local datetime.
visual_configNoRendering options for include_visual.
birth_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
birth_latitudeNoOptional birth latitude.
include_visualNoEmbed a chart-wheel SVG. +2 credits.
birth_longitudeNoOptional birth longitude.
return_latitudeNoOptional return-location latitude.
target_datetimeNoISO 8601 near the return; zone required. Default about a year from now.
return_longitudeNoOptional return-location longitude.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds useful behavior beyond annotations by disclosing the 5-credit cost and the default year behavior for target_datetime.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with user triggers, then states the return value and year-selection behavior, and ends with credit cost. It is appropriately sized and every sentence adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters, a nested visual_config object, no output schema, and complete schema descriptions, the description is largely complete for selecting and invoking the tool. It could say a bit more about output shape or visual options, but the schema carries those details well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter baseline is 3 even without extra description detail. The description adds meaning by explaining that target_datetime picks the solar-return year and defaults to the current one, which is slightly more actionable than the schema text alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it returns the exact moment the Sun returns to its natal longitude and the resulting Solar Return chart. The user-question examples and the year-selection behavior distinguish it clearly from natal-chart or transit tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear trigger phrases such as 'when exactly is my solar return' and 'my birthday chart for this year', plus notes that target_datetime selects the year. It does not name when to use a sibling instead, but the usage context is explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_synastrySynastry ChartA
Read-onlyIdempotent
Inspect

Use this when the relationship comparison is wanted as data — 'list our inter-aspects with orbs', 'what aspects does their Mars make to my Venus', 'our synastry as JSON'. Returns the cross-aspects between the two charts plus both natal charts; needs each person's birth datetime, zone and coordinates.

CREDIT COST: 3 credits per call.

NameRequiredDescriptionDefault
formatNo'llm' = compact.
house_systemNoDefault placidus.
visual_configNoRendering options for include_visual.
include_visualNoEmbed a bi-wheel SVG. +2 credits.
person_a_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
person_a_latitudeYesPerson A birth latitude.
person_a_timezoneNoIANA zone for Person A's birth location (local datetime).
person_b_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
person_b_latitudeYesPerson B birth latitude.
person_b_timezoneNoIANA zone for Person B's birth location (local datetime).
person_a_longitudeYesPerson A birth longitude.
person_b_longitudeYesPerson B birth longitude.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description adds value by disclosing the credit cost (3 per call, with +2 noted in the schema for visuals) and what the response contains (cross-aspects + both natal charts). It doesn't mention latency, caching, or failure modes, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded trigger condition, then what is returned, then required inputs, then cost — each sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so ('cross-aspects... plus both natal charts'), and it discloses cost for a 12-parameter tool. Minor gap: the json vs llm format option and visual embedding are never mentioned in prose, so an agent must read the schema to know they exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 12 parameters, including timezone, house_system and the format enum. The description only restates the required birth datetime/zone/coordinates and adds no guidance on format choice, house system, or when to spend the extra credits on include_visual — so baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific operation and output: returns cross-aspects between two charts plus both natal charts. The 'wanted as data' framing implicitly separates it from the visual/LLM-oriented siblings (e.g. explore_bi_wheel), though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this when the relationship comparison is wanted as data' gives a clear selection condition, reinforced by concrete example utterances ('list our inter-aspects with orbs', 'our synastry as JSON'). It lacks an explicit when-not clause or a named alternative tool for the non-data case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_time_lordsTime LordsA
Read-onlyIdempotent
Inspect

Use this when the user asks for 'zodiacal releasing', 'loosing of the bond', 'my annual profections', 'who is my time lord this year' or 'my firdaria'. Returns Hellenistic time-lord periods over a date window: zodiacal releasing levels 1–2 with peak and loosing-of-the-bond flags, the profection year with house and lord, optional firdaria, and each change date.

CREDIT COST: 5 credits for releasing from one Lot plus profections (1 natal + 2 + 2); 2 more per extra Lot or firdaria.

NameRequiredDescriptionDefault
lotNoLot to release from. Default spirit.
to_dateNoWindow end. Default one year after from_date; at most 25 years.
timezoneNoIANA zone for a local datetime.
from_dateNoWindow start, ISO 8601 with offset or Z. Default now.
techniquesNoDefault zodiacal_releasing and profections.
birth_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
birth_latitudeYesBirth latitude.
birth_longitudeYesBirth longitude.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely non-obvious context: an explicit credit cost breakdown per Lot and per firdaria, plus the default window length and 25-year cap. It stops short of noting pagination/response shape or auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition, then the return contents, then cost in a separate labeled line. Every sentence carries information an agent needs; nothing is redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by enumerating the returned fields (peak and loosing-of-the-bond flags, profection year/house/lord, change dates). Combined with 100% schema coverage on all 8 parameters, an agent has enough to invoke and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds value by tying cost to the `lot` parameter ('2 more per extra Lot') and clarifying that firdaria is optional output rather than always computed. It does not explain the 'both' enum value or the timezone/from_date interaction beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific domain object (Hellenistic time-lord periods) with named techniques (zodiacal releasing levels 1–2, profections, firdaria) and enumerates exactly what is returned. The quoted user phrasings make it unmistakable against siblings like ephemeris_natal_chart or ephemeris_solar_return, which produce different artifacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with 'Use this when the user asks for...' plus five concrete trigger phrases, which is unusually actionable routing. It does not state when NOT to use it or name the sibling to prefer for overlapping asks (e.g. solar return vs profections), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ephemeris_transitsTransit SearchA
Read-onlyIdempotent
Inspect

Use this when the user asks 'when is my Saturn return', 'when does Pluto square my Sun', 'what transits do I have this month or next year', 'my biggest transits this year' — any WHEN-does-a-transit-hit question, as data. Returns the exact moments transiting planets form the requested aspect to natal points over a date range; sort=significance adds ranked, the hits scored biggest first.

ASPECT ANGLES (aspect_angle): 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. Saturn return → transiting_planets=['saturn'], natal_points=['saturn']. Default transiting_planets and natal_points: sun through saturn; naming fewer is faster. MAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400). CREDIT COST: 1 + span price: ≤1y 5, ≤3y 10, ≤5y 15, ≤10y 25, ≤20y 40, ≤40y 70. truncated:true = partial, with the resume point in truncation.resume_from.

NameRequiredDescriptionDefault
sortNotime (default) or significance.
end_dateYesWindow end. ISO 8601 date (whole UTC day) or zoned datetime.
start_dateYesWindow start. ISO 8601 date (whole UTC day) or zoned datetime.
aspect_angleNoDegrees added to each natal longitude: 0 conjunction (default), 90 square, 120 trine, 180 opposition.
natal_pointsNoE.g. ['sun','moon','asc','mc']. Default all core points.
natal_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
natal_latitudeYesBirth latitude.
natal_timezoneNoIANA zone for the natal birth location (local datetime).
natal_longitudeYesBirth longitude.
transiting_planetsNoE.g. ['saturn','pluto','chiron']. Default Sun through Saturn; outers and Chiron only when named.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely non-inferable behavior: per-plan maximum spans, credit cost tiers by span, and truncation with a resume point (truncation.resume_from). Those are operational constraints an agent cannot get from the schema and would otherwise trip over.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case before the constraint details, and most sentences earn their place (costs, spans, truncation). A few compressed fragments — '(longer = 400)' and the duplicate statement of defaults in prose versus schema — cost some clarity for space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema, the description still conveys the return shape (exact hit moments, `ranked` when sort=significance, truncated/partial results with resume point) and the quota limits that gate success. Nothing critical for a correct first call appears missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameter documentation is already handled; the description still adds cross-parameter meaning — the aspect_angle degree convention, the Saturn-return combination of transiting_planets/natal_points, and the performance note that naming fewer planets is faster. The '(longer = 400)' fragment is opaque and doesn't cleanly explain the over-span failure mode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (returns exact moments transiting planets form an aspect to natal points over a date range) and frames it as the tool for any 'when does a transit hit' question. The example phrasings ('when is my Saturn return', 'when does Pluto square my Sun') make it trivially distinguishable from ephemeris_aspect_check or explore_transit_timeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Strong positive routing: 'Use this when the user asks ... any WHEN-does-a-transit-hit question' plus a concrete recipe for the Saturn return case. It does not explicitly state when NOT to use it or name an alternative sibling (e.g. explore_transit_timeline or human_design_transit_timeline), so it falls short of the 5 bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_bazi_chartInteractive BaZi Four Pillars ExplorerA
Read-onlyIdempotent
Inspect

Use this when the user asks 'what's my BaZi', 'my Four Pillars', 'what's my Day Master', 'what's my Chinese zodiac animal and element' or 'my Chinese astrology chart'. Returns an interactive Four Pillars (四柱命盘) explorer (inline in Claude and ChatGPT; text summary elsewhere): the Year, Month, Day and Hour pillars — each with Heavenly Stem (天干), Earthly Branch (地支), Ten God label and element color — plus the Day Master identity and a Wu Xing (五行) element balance bar; click any pillar for what it reveals about that life domain.

CREDIT COST: 3 credits per call (1 base + 2 visual render).

NameRequiredDescriptionDefault
dayNoBirth day of month (1–31).
hourNo0–23. Default 12.
yearNoGregorian birth year, e.g. 1987.
monthNoBirth month (1–12).
minuteNo0–59. Default 0.
datetimeNoInstead of year/month/day: ISO 8601 read as LOCAL birth-place time, so zone-less is correct here; a Z/offset value is used together with timezone.
latitudeNoBirth latitude, decimal degrees (north+).
timezoneNoIANA zone of the birth place; needed for a zoned datetime.
longitudeNoBirth longitude.
day_boundaryNoDay-pillar cutover convention. Default zi_hour.
year_boundaryNoYear-pillar cutover convention. Default lichun.
true_solar_timeNoApply true solar time correction (needs latitude+longitude).

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds meaningful behavior beyond them: rendering differs by client (inline interactive in Claude/ChatGPT, text summary elsewhere), the result is clickable per pillar, and there is a stated cost of 3 credits per call (1 base + 2 visual render). Those are non-obvious facts an agent cannot infer from schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Trigger phrases are front-loaded, followed by output content and then cost, so the most decision-relevant information comes first. The quoted example utterances are slightly verbose but they serve routing, so waste is minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates well by describing both the returned pillars and the client-dependent rendering format. The only gap is practical input guidance (when to use datetime+timezone vs. year/month/day, and that true_solar_time needs lat/long), which the schema covers but the description does not tie together.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 12 parameters (including the day_boundary, year_boundary, and true_solar_time conventions), so the schema already carries parameter meaning. The description adds no parameter-level guidance of its own, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('explore') with a specific resource ('Four Pillars / 四柱命盘') and enumerates the exact artifacts returned: Year/Month/Day/Hour pillars, Heavenly Stem, Earthly Branch, Ten God, Day Master, and Wu Xing balance. It also lists the user phrasings that map to it, making it easy to distinguish from siblings like bazi_annual_pillar or explore_vedic_chart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'Use this when the user asks…' clause gives concrete trigger utterances, which is exactly the kind of routing guidance an agent needs. It stops short of naming alternatives or exclusions (e.g. when to prefer bazi_annual_pillar or a Vedic/Human Design chart), so it is clear context but not explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_bi_wheelInteractive Bi-Wheel ExplorerA
Read-onlyIdempotent
Inspect

Use this when the user asks 'are we compatible', 'synastry with my partner', 'what's my horoscope for today', 'what's hitting my chart right now' or 'what's my solar return chart this year' — any two-ring comparison they should SEE — or 'our composite chart' / 'our Davison chart' for a couple's single relationship wheel. Returns an interactive bi-wheel (inline in Claude and ChatGPT; text summary elsewhere): inner wheel Person 1's natal chart, outer ring by mode — synastry (Person 2's natal; needs their birthplace), transit (a date; today for a daily horoscope), progressed, solar_arc (target date), solar_return (target year), lunar_return (target month) — with cross-aspects drawn and every planet, aspect line and cusp clickable. composite and davison instead return ONE wheel derived from both births (Person 2's birth datetime and birthplace required; composite is the midpoint method with no angles or houses, davison has real ones). Birthplaces may be place names (location, person2_location).

CREDIT COST: 2 credits per call for most modes (1 per wheel; +1 to resolve a place name); solar_return/lunar_return modes cost 6; composite/davison cost 3. house_system (placidus default; whole_sign) sets both rings' houses.

NameRequiredDescriptionDefault
modeNoDefault synastry.
locationNoPerson 1 place name, e.g. 'New York, NY'; geocoded. Coordinates win if given.
house_systemNoDefault placidus; both rings.
person1_nameNoPerson 1 display name.
person2_nameNoPerson 2 display name.
person1_datetimeYesPerson 1 / natal birth. ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
person1_latitudeNoPerson 1 latitude (+N). Optional with `location`.
person1_timezoneNoIANA zone for Person 1's birth location (local datetime).
person2_datetimeYesOuter wheel: Person 2 birth (synastry/composite/davison), target date (transit/progressed/solar_arc), or a date in the target year/month (returns). ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
person2_latitudeNoPerson 2 latitude. Required in synastry unless `person2_location`; other modes default to Person 1.
person2_locationNoPerson 2 / outer-chart place name; coordinates win.
person2_timezoneNoIANA zone for Person 2 / the outer chart (local datetime).
person1_longitudeNoPerson 1 longitude (+E). Optional with `location`.
person2_longitudeNoPerson 2 longitude; same rule as latitude.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint/idempotentHint already declared, the description still adds substantial non-obvious behavior: credit cost per mode (2, 6, and 3 credits respectively), the +1 charge for geocoding a place name, that the result renders inline in Claude/ChatGPT but as a text summary elsewhere, and that every planet/aspect line/cusp is clickable. It also discloses that composite carries no angles or houses while davison has real ones — a genuine semantic difference rather than a restatement of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the recognition phrases an agent needs before anything else, and the mode-by-mode payload sentence carries high information density. It is nonetheless a long em-dash-chained paragraph, and the credit-cost sentence sits inside the same block rather than being separately skimmable, costing some structural clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, eight-mode tool with no output schema, the description covers the missing pieces: what the returned visual contains, what varies per mode, which inputs each mode requires, the house-system default, and the billing implication of calling it. An agent has enough to choose a mode, populate required fields, and predict the result without further probing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema only states piecewise: person2_datetime is repurposed per mode (birth, target date, or a date inside the target year/month), synastry specifically needs Person 2's birthplace, and house_system governs both rings' houses. Those are real clarifications of how parameters interact, though a few points (location/person2_location as place names) merely echo the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb+resource ('Returns an interactive bi-wheel') and immediately enumerates the exact artifact produced for each mode (inner natal wheel, outer ring varying by synastry/transit/progressed/solar_arc/returns). It explicitly separates the two-ring modes from composite/davison, which return 'ONE wheel derived from both births', so an agent can distinguish behavior inside this single tool without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides unusually explicit trigger phrasing ('are we compatible', 'synastry with my partner', 'what's hitting my chart right now', 'our composite chart') and maps each to a mode, which is strong when-to-use guidance. It does not, however, route against sibling tools that overlap heavily (ephemeris_synastry, ephemeris_solar_return, ephemeris_progressed_chart, explore_natal_chart), so mode selection within this tool is covered but tool selection across the catalog is not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_human_designInteractive Human Design Bodygraph ExplorerA
Read-onlyIdempotent
Inspect

Use this when the user asks 'what's my Human Design', 'am I a Generator / Projector / Manifestor / Reflector', 'show my bodygraph' or 'what's my strategy and authority'. Returns an interactive bodygraph (inline in Claude and ChatGPT; text summary elsewhere): centers, gates, channels, Type, Profile, Authority and Incarnation Cross, each clickable. Birthplace may be a place name (location).

CREDIT COST: 4 credits per call (2 chart + 2 render; +1 to resolve a place name). Human Design was originated by Ra Uru Hu; Open Ephemeris is an independent calculation service, not affiliated with Jovian Archive.

NameRequiredDescriptionDefault
datetimeYesISO 8601 with a required zone, or local time with `timezone`; minute-accurate.
latitudeNoBirth latitude (optional with `location`).
locationNoBirth place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon.
timezoneNoIANA zone for a local birth time.
longitudeNoBirth longitude (optional with `location`).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive, so the description adds genuinely new behavior: rendering varies by host (inline in Claude and ChatGPT, text summary elsewhere), cost is 4 credits with +1 for geocoding, and provenance/affiliation is disclosed. It does not cover failure modes or accuracy caveats beyond the attribution line.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the use-when triggers, then the return value, then cost and attribution. All sentences are informative, though the credit/attribution block is dense and slightly front-loaded less prominently than the trigger phrases.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the necessary work of enumerating the returned fields and their interactive nature, and it discloses the location-vs-coordinates input path plus cost. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents datetime, latitude, longitude, location and timezone, including the 'give this or lat/lon' relationship. The description only restates the location convenience and adds the +1 credit note, which is marginal beyond structured data — baseline 3 is right.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Returns an interactive bodygraph') and enumerates the computed outputs: centers, gates, channels, Type, Profile, Authority, Incarnation Cross. It does not explicitly distinguish itself from the sibling human_design_chart or explore_human_design_transit/connection, though 'interactive' implies the differentiator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger utterances ('what's my Human Design', 'am I a Generator / Projector / Manifestor / Reflector', 'show my bodygraph') and a clear context (user asking about strategy and authority). No when-not or explicit routing to the non-interactive human_design_chart sibling, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_human_design_connectionHuman Design Connection (Synastry)A
Read-onlyIdempotent
Inspect

Use this when the user asks 'are we compatible in Human Design', 'what's our connection chart', 'what channels do we make together' or 'show our composite bodygraph' — two people's HD charts overlaid. Returns an interactive two-person overlay bodygraph (inline in Claude and ChatGPT; text summary elsewhere) with every connected channel classified by HD connection theory: electromagnetic (attraction), companionship (sameness), dominance (one defines), compromise (friction).

CREDIT COST: 5 credits per call (composite 3 + render 2). Human Design was originated by Ra Uru Hu; Open Ephemeris is an independent calculation service, not affiliated with Jovian Archive.

NameRequiredDescriptionDefault
themeNoSet by the embedded app. Default dark.
layoutNoSet by the embedded app. Default graph.
person_aYesFirst person's birth data.
person_bYesSecond person's birth data.
render_tokenNoSet by the embedded app.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, and the description goes well beyond them: it discloses the exact cost (5 credits = composite 3 + render 2) and that output modality varies by client (inline interactive bodygraph in Claude/ChatGPT, text summary elsewhere). That credit and rendering-fallback detail is information an agent cannot obtain from any structured field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger phrasings, then the return shape, then cost — a sensible ordering with little wasted wording. The closing attribution sentence (Ra Uru Hu / Jovian Archive disclaimer) is legally useful but does not help an agent select or invoke the tool, so it slightly dilutes an otherwise tight definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the return-value burden and does so: it names the artifact (overlay bodygraph) and enumerates the four channel classifications (electromagnetic, companionship, dominance, compromise) with their meanings. For a nested two-person input tool, nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each nested birth field is already documented in the schema, so the description needs to add little. It only clarifies that person_a and person_b are two distinct people; theme, layout, and render_token are marked 'set by the embedded app' in the schema and receive no further explanation here. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (two people's HD charts overlaid into an interactive composite bodygraph) and distinguishes it from the single-person HD siblings by naming the output as a 'two-person overlay bodygraph'. An agent can tell this apart from explore_human_design or human_design_chart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with concrete user phrasings ('are we compatible in Human Design', 'what's our connection chart', 'what channels do we make together', 'show our composite bodygraph') that make the selection condition explicit. However, it never names the adjacent alternatives an agent might wrongly pick — ephemeris_synastry, explore_bi_wheel, or explore_human_design — so there are no stated exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_human_design_transitHuman Design Transit OverlayA
Read-only
Inspect

Use this when the user asks 'what are today's Human Design transits for me', 'what gates are being activated for me right now' or 'how is the current sky affecting my bodygraph'. Returns an interactive overlay bodygraph (inline in Claude and ChatGPT; text summary elsewhere) with the channels the transit completes and centers it defines, now or at a chosen datetime. Birthplace may be a place name (location).

CREDIT COST: 5 credits per call (chart 3 + render 2; +1 per place name). Human Design was originated by Ra Uru Hu; Open Ephemeris is an independent calculation service, not affiliated with Jovian Archive.

NameRequiredDescriptionDefault
themeNoSet by the embedded app. Default dark.
layoutNoSet by the embedded app. Default graph.
datetimeYesNatal birth: ISO 8601 with a required zone, or local time with `timezone`.
latitudeNoNatal latitude (optional with `location`).
locationNoNatal place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon.
timezoneNoIANA zone for a local birth time.
longitudeNoNatal longitude (optional with `location`).
render_tokenNoSet by the embedded app.
transit_datetimeNoISO 8601; must include Z/offset. Default now.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: exact credit cost per call with a breakdown and a per-place-name surcharge, the render form differing by host (inline in Claude/ChatGPT vs text summary), and a provenance/affiliation disclaimer. Annotations already cover safety (readOnly, non-destructive), so pricing and output-modality disclosure are the right additional layer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the trigger conditions and the return value in the first two sentences, then isolates cost and attribution in a separate block. Slightly dense but no sentence is wasted; the credit breakdown is arguably more detail than an agent needs at selection time.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters but only 1 required, and several set by the embedded app, the description correctly tells the agent what it gets back and what it costs, which is what's non-obvious. No output schema exists, so explaining the output modality (interactive overlay vs text summary) is necessary and is done.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already documented, and the description only restates that birthplace may be given as a place name via `location`. It adds no guidance on the required `datetime` vs optional `transit_datetime` interaction or on the app-set params (render_token, theme, layout). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names an explicit resource (transit overlay bodygraph) and describes the output precisely: channels the transit completes and centers it defines, at now or a chosen datetime. The example user questions make the intent unmistakable. It does not name the sibling it differs from (human_design_transit_timeline / explore_human_design), which keeps it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this when the user asks..." gives three concrete trigger phrasings, which is strong positive guidance. However, there are no exclusions or explicit alternatives (e.g., use human_design_transit_timeline for a multi-day range, explore_human_design for the natal chart), so an agent still has to infer boundaries from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_moon_phaseInteractive Moon Phase ExplorerA
Read-onlyIdempotent
Inspect

Use this when the user asks 'what's the moon phase tonight', 'is tonight a full moon', 'show me the moon right now', 'what sign is the Moon in', 'is the Moon void of course' — or has no birth data and wants somewhere to start; it needs no arguments. Returns an interactive Moon dial (inline in Claude and ChatGPT; text summary elsewhere): illumination, phase, Moon sign and degree, void-of-course timing, lunar age, days to the next New and Full Moon, and the tightest applying aspects.

CREDIT COST: 3 credits per call (phase + void-of-course + aspects, 1 each).

NameRequiredDescriptionDefault
datetimeNoISO 8601 with a required zone, or local time with `timezone`. Default now.
latitudeNoOptional; for local void-of-course.
timezoneNoIANA zone for a local datetime.
longitudeNoOptional; for local void-of-course.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the credit cost, the return contents, and that it renders an interactive dial inline in Claude and ChatGPT but a text summary elsewhere. These are substantive behavioral details that annotations alone would not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with exact user phrasings, then states the return format and cost. Despite listing many trigger examples, each part serves a clear routing or behavioral purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter, read-only Moon-phase tool with no output schema, the description explains when to call it, what it returns, and its credit cost. An agent has enough information to invoke it correctly without needing more structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the four optional parameters are already documented by the schema. The description adds only that no arguments are needed and that it defaults to now, which is useful but does not add much beyond schema semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and purpose: current Moon phase, illumination, sign, void-of-course timing, and related lunar data. It distinguishes itself somewhat from birth-data tools by saying it is for users with no birth data, but it does not explicitly differentiate itself from sibling lunar tools such as ephemeris_moon_phase or ephemeris_next_lunar_phase.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear trigger phrases such as 'what's the moon phase tonight' and 'is the Moon void of course,' and notes that it needs no arguments. However, it does not say when to choose it over sibling Moon tools, so the agent must infer alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_natal_chartInteractive Chart Wheel ExplorerA
Read-onlyIdempotent
Inspect

Use this when the user asks 'make my natal chart', 'show me my birth chart', 'what's my rising sign', 'my big 3', 'what's my sun, moon and rising', 'what sign is my Moon / Venus / Mars in', 'what does my chart say about my career / love', 'read my chart', or shares birth details and wants to explore them — any natal / birth-chart / astrology-chart request. Returns an interactive chart wheel rendered inline (Claude and ChatGPT; text summary elsewhere) where any planet, house or aspect line can be clicked for interpretation, with switchable house systems. The birthplace can be given as location (a place name — resolved server-side) or as coordinates, with the birth date, local time and zone.

CREDIT COST: 1 credit per call (+1 to resolve a place name).

NameRequiredDescriptionDefault
bodiesNoDefault 13 (Sun–Pluto, Chiron, Nodes); ['all'] adds Liliths, asteroids, TNOs, Uranian points. E.g. ['sun','lilith','lilith_true','sedna'].
ayanamsaNoDefault lahiri; sidereal only.
datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
latitudeNoBirth latitude (optional with `location`).
locationNoBirth place name, e.g. 'New York, NY'; geocoded. Coordinates win if given.
timezoneNoIANA zone for a local datetime.
longitudeNoBirth longitude (optional with `location`).
zodiac_typeNoDefault tropical.
house_systemNoDefault placidus.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the read-only/idempotent annotations: discloses the interactive chart wheel rendered inline, that it degrades to a text summary outside Claude/ChatGPT, that planets/houses/aspect lines are clickable, that house systems are switchable, and the credit cost including the extra charge for place-name resolution. The 100%-coverage annotations mean this description only needed to add value, and it does substantially.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the trigger phrases, then return behavior, then input modes, then cost — a sensible order. The long quoted-utterance list is slightly redundant once 'any natal / birth-chart request' is stated, but it is high-signal for routing and nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, no output schema and no annotations covering output, the description carries the return-value burden and does so: interactive wheel with clickable elements and switchable house systems, with an explicit text fallback per client. Input modes (place name vs coordinates vs timezone) and cost are all addressed, leaving nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, yet the description still adds decision-relevant meaning: `location` is geocoded server-side, coordinates win when both are supplied, and only a place name incurs the extra credit. It does not explain the `bodies`/`ayanamsa` interplay (e.g. sidereal-only ayanamsa) beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource (explore natal chart) and enumerates realistic user phrasings ('my big 3', 'what's my rising sign'). It does not distinguish itself from siblings such as ephemeris_natal_chart, explore_vedic_chart or human_design_chart, and in fact claims 'any natal / birth-chart / astrology-chart request', which blurs the boundary rather than sharpening it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong positive routing cues — quoted user utterances plus 'any natal / birth-chart / astrology-chart request' — so an agent knows when to pick it. It stops short of exclusions: it never says to use explore_vedic_chart for a sidereal/Vedic reading or ephemeris_natal_chart when raw data (not an interactive wheel) is wanted, despite overlap in the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_transit_timelineInteractive Transit TimelineA
Read-onlyIdempotent
Inspect

Use this when the user asks 'what's happening in my chart this month', 'what transits are coming up for me', 'what does my year ahead look like', 'when will Saturn hit my chart' or 'what's happening astrologically for me in 2027' — a forecast they should SEE. Returns an interactive, date-ordered timeline (inline in Claude and ChatGPT; text summary elsewhere) of exact transit hits grouped by month — transiting planet, natal point, aspect and retrograde markers — each clickable for a focused interpretation. Every hit carries its in-orb window (when the transit starts and ends, and which pass it is when a retrograde repeats it), and transits already in orb at the start are listed with applying/separating.

ASPECT ANGLES: 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine, 60 = sextile. EFFICIENCY: searches run faster when transiting_planets and natal_points are given. MAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400). CREDIT COST: 1 + span price: ≤1y 5 (6 total), ≤3y 10, ≤5y 15, ≤10y 25, ≤20y 40, ≤40y 70.

NameRequiredDescriptionDefault
orb_degNoIn-orb window around each hit, degrees. Default 1, max 15.
end_dateYesWindow end. ISO 8601 date (whole UTC day) or zoned datetime.
start_dateYesWindow start. ISO 8601 date (whole UTC day) or zoned datetime.
aspect_angleNoDegrees: 0 conjunction (default), 60, 90, 120, 180.
natal_pointsNoE.g. ['sun','moon','asc','mc']. Default the 7 classical bodies.
natal_datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
natal_latitudeYesBirth latitude.
natal_timezoneNoIANA zone for the natal birth location (local datetime).
natal_longitudeYesBirth longitude.
transiting_planetsNoE.g. ['saturn','pluto','chiron']. Default Sun through Saturn; outers and Chiron only when named.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish read-only, idempotent, closed-world behavior, but the description adds substantial behavior: it returns inline visualization in Claude and ChatGPT versus a text summary elsewhere, every hit is clickable for an interpretation, hits carry in-orb start/end windows and pass numbers under retrograde, and transits already in orb include an applying/separating flag. It also discloses operational constraints the annotations cannot: the MAX SPAN per plan tier and the credit cost ladder. These are exactly the details an agent needs before committing a paid call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The body is front-loaded with the use-case triggers and return-value description, then shifts into labeled reference blocks (ASPECT ANGLES, EFFICIENCY, MAX SPAN, CREDIT COST) that are easy to scan. It is dense and the caps-heavy block formatting reads slightly like a pricing note, but nearly every sentence carries information the agent would otherwise have to guess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema, the description does the work the schema cannot: it describes the shape of the returned timeline, what each hit contains, the fallback rendering when inline UI is unavailable, and the hard limits of the date window. An agent has enough to decide whether to call it and how to size the request without further inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds to it: it restates the aspect-angle code table (0/60/90/120/180) in a compact lookup, discloses the efficiency hint that supplying transiting_planets and natal_points speeds up searches, and ties start_date/end_date to the plan-tier MAX SPAN. Only the birth-coordinate parameters are left entirely to the schema, which is reasonable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete verb and resource: an interactive, date-ordered transit timeline of exact hits with planet, natal point, aspect, and retrograde markers grouped by month. The emphasis on 'a forecast they should SEE' signals that this is visual/UI-oriented, which implicitly distinguishes it from the raw-data sibling queries. It never names a sibling outright (e.g., ephemeris_transits or human_design_transit_timeline), so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool's purpose is grounded in five natural-language trigger phrases ('what's happening in my chart this month', 'when will Saturn hit my chart', etc.), which give the agent a clear routing signal. What's missing is the other half of the routing decision: there is no statement of when other tools are the better choice, even though ephemeris_transits and human_design_transit_timeline are obvious candidates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explore_vedic_chartInteractive Vedic Chart ExplorerA
Read-onlyIdempotent
Inspect

Use this when the user asks 'show my Vedic chart', 'my kundli', 'my Indian astrology chart', 'what's my nakshatra', 'my sidereal birth chart' or 'what's my lagna'. Returns an interactive South Indian fixed-sign Rashi grid (inline in Claude and ChatGPT; text summary elsewhere) with sidereal (Lahiri by default) placements, nakshatra with pada, navamsa and the Lagna (Ascendant) rashi; click any rashi cell for its themes and the planets placed there. Birthplace may be a place name (location).

CREDIT COST: 3 credits per call (chart + render; +1 to resolve a place name).

NameRequiredDescriptionDefault
ayanamsaNoDefault lahiri.
datetimeYesISO 8601 with a required zone, or local time with `timezone`.
latitudeNoBirth latitude (optional with `location`).
locationNoBirth place name, e.g. 'Mumbai, India'; geocoded. Coordinates win if given.
timezoneNoIANA zone for a local birth time.
longitudeNoBirth longitude (optional with `location`).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe read-only, idempotent, non-destructive operation. The description adds useful behavior beyond annotations: inline rendering in Claude/ChatGPT, text summary elsewhere, default Lahiri ayanamsa, geocoding via `location`, and credit cost with a possible extra credit for place-name resolution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with usage triggers, then immediately states what is returned and notes the credit cost. It is dense but appropriately sized, with no unnecessary explanation or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining the return value and does so well by naming the interactive Rashi grid, sidereal placements, nakshatra/pada, navamsa, and Lagna. It is nearly complete for invocation, though it could clarify how this differs from the sibling `vedic_chart`.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters, including datetime format, timezone, coordinates, and location. The description adds only a small amount of meaning, notably that birthplace may be supplied as a place name and that Lahiri is the default ayanamsa.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and output: an interactive South Indian fixed-sign Rashi grid with sidereal placements, nakshatra/pada, navamsa, and Lagna. It does not explicitly distinguish this interactive explorer from the sibling `vedic_chart`, so it misses full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear trigger phrases such as 'show my Vedic chart', 'my kundli', 'what's my nakshatra', and 'what's my lagna', which directly tell the agent when to use this tool. It does not name when to prefer `vedic_chart` or other chart tools instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_calculationFind a CalculationA
Read-onlyIdempotent
Inspect

Use this when no typed tool fits, before dev_read_api or dev_write_api: KP or Varshaphal, the Chinese lunar calendar, bounds distributions, eclipses on a natal chart, Almuten or lunar mansions, Venus star points, batch charts. Searches the Open Ephemeris API catalog (https://api.openephemeris.com) by plain words and returns the best matches: path, which tool runs it, required inputs, an example request and the credit cost. Local, free, no API call.

NameRequiredDescriptionDefault
limitNoMatches to return (default 3)
queryYesWhat to calculate, in plain words

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond the annotations: it is local and free with no API call, so no credit is spent, which explains the openWorldHint=false rather than restating it. It also discloses the exact shape of the response (path, executing tool, inputs, example, credit cost). It stops short of saying what to do with the matches, e.g. that the returned tool name should then be invoked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the usage trigger before the mechanics. The long enumeration of astrology domains is dense but each item is a genuine disambiguation cue; minor compression is possible but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, and the description fully compensates by enumerating the returned fields, plus cost and locality. With only two parameters, one required, and annotations covering the safety profile, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns a point by clarifying that query is natural language ("plain words") rather than an ID or path, which shapes how the agent phrases input. The limit parameter is left entirely to the schema, so it is not a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — searches the Open Ephemeris API catalog by plain words — and enumerates the exact return payload (path, running tool, required inputs, example request, credit cost). The opening sentence distinguishes it from siblings by positioning it as the fallback when no typed tool fits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ("when no typed tool fits, before dev_read_api or dev_write_api") and names the alternatives it precedes, establishing an ordering the agent can act on. The domain list (KP, Varshaphal, Chinese lunar calendar, bounds, eclipses, Almuten, mansions, Venus star points, batch charts) gives concrete triggering cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

human_design_chartHuman Design ChartA
Read-onlyIdempotent
Inspect

Use this when the Human Design chart is wanted as data — 'give me my HD activations', 'what are my variables', 'my Human Design chart as JSON'. Returns Type, Strategy, Authority, Profile, Centers, Gates, Channels, Incarnation Cross, and Personality and Design planetary positions.

CREDIT COST: 2 credits per call.

Takes coordinates, not a place name.

NameRequiredDescriptionDefault
formatNo'llm' = compact; 'json' = full.
datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
latitudeNoBirth latitude.
timezoneNoIANA zone for a local datetime.
longitudeNoBirth longitude.
chart_variantNo'dream': 15-gate chart, no type or profile. Default 'waking'; not with include_visual.
visual_configNoRendering options for include_visual.
include_visualNoEmbed a bodygraph SVG. +2 credits.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds behavior the annotations cannot: an explicit cost model (2 credits per call, +2 for include_visual) and the coordinate-versus-place-name input constraint. It does not mention that the call is deterministic across repeated identical inputs or how the visual embed affects payload size, but the cost disclosure is the meaningful addition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the decision trigger, then the return payload, then the cost and input constraint. Every line carries information; the credit-cost line is on its own for scannability rather than being padding. Slightly fragmentary ('Takes coordinates, not a place name.' as a dangling sentence), which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, nested-object tool with no output schema, the description supplies what's genuinely missing: the shape of the response, the cost of the call including the surcharge, and the coordinate requirement. Remaining details (enum meanings, chart_variant's incompatibility with include_visual) are fully documented in the schema, so nothing an agent needs to invoke correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 and the schema already carries the per-parameter detail. The description still adds value by clarifying the input contract ('takes coordinates, not a place name') and by enumerating the returned fields, which is the only return-value documentation since no output schema exists. Marginally above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Human Design chart ... as data') and enumerates what the response contains (Type, Strategy, Authority, Profile, Centers, Gates, Channels, Cross, planetary positions). The 'as data / as JSON' framing implicitly separates it from the interpretive sibling explore_human_design, but that sibling is never named, so the differentiation is inferred rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives literal user phrasings that should route here ('give me my HD activations', 'what are my variables', 'my chart as JSON'), which is stronger than a generic 'use when needed'. It also adds the precondition 'Takes coordinates, not a place name', steering callers to a geocoding step first. It stops short of naming alternatives or exclusion cases (e.g. when to prefer explore_human_design instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

human_design_transit_timelineHuman Design Transit TimelineA
Read-onlyIdempotent
Inspect

Use this when the user asks 'when does transiting Saturn enter my gate 34' or 'when do I get channel 20-34 from transits'. Returns each gate entry and exit over a range; with birth data or natal_gates, when a transit completes one of the person's channels.

CREDIT COST: up to 1 year 5, 3 years 10, 5 years 15. Explorer plans: 1 year at most.

NameRequiredDescriptionDefault
bodiesNoDefault all but the Moon.
end_dateYesISO 8601 date (whole UTC day) or zoned datetime.
latitudeNoBirth latitude.
timezoneNoIANA zone for a local datetime.
longitudeNoBirth longitude.
start_dateYesISO 8601 date (whole UTC day) or zoned datetime.
natal_gatesNoThe person's gates (1-64), instead of birth data.
include_linesNoAdd line stays (about 6x the rows).
birth_datetimeNoISO 8601; zone required (`Z`/offset, or local time plus `timezone`).

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive, so the description's added value is the credit-cost schedule tied to range length and the fact that output is per gate entry and exit (row volume grows with include_lines). That pricing/consumption disclosure is real context beyond the structured fields, but return payload shape is only loosely sketched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences plus a separate credit-cost line, front-loaded with the when-to-use trigger. No filler, though the credit line could be formatted more consistently with the rest.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With nine parameters fully documented in schema and no output schema, the description supplies the missing pieces an agent needs: usage trigger, the two data-source modes, and cost scaling. The return value (per-gate entry/exit rows, optional line stays) is described enough to set expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already self-documenting, and the description largely restates the birth-data vs natal_gates alternative that the schema already states. It adds only the indirect signal that longer start_date/end_date ranges cost more credits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete resource (transit gate entry/exit timeline) and grounds it with two illustrative user questions, so an agent can tell this produces a time-ordered gate transit table rather than a single-moment chart. It does not explicitly name the nearest siblings (explore_human_design_transit, explore_transit_timeline) to draw the boundary, which keeps it at 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this when the user asks 'when does transiting Saturn enter my gate 34'..." gives a clear triggering condition, and the birth-data/natal_gates clause explains the second mode of use. There is no statement about when NOT to use it or which sibling to pick instead, so 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timezone_resolveTimezone ResolveA
Read-onlyIdempotent
Inspect

Use this when the user asks 'what timezone is this location in' or 'what was the UTC offset there on that date', or coordinates are known and the IANA zone is needed for a local birth time. Returns the IANA zone and, with date, the historical UTC offset. CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
dateNoYYYY-MM-DD; adds the UTC offset in force that day. Pre-1970 +1 credit.
latitudeYesDecimal degrees (+N).
longitudeYesDecimal degrees (+E).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful context beyond annotations: credit cost, return content (IANA zone plus historical offset when date is supplied), and the birth-time scenario. It does not discuss rate limits or failure behavior, but it is transparent for a simple lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences are front-loaded with the trigger condition, then the return behavior and credit cost. There is no redundant or filler language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple coordinate-to-timezone lookup with complete schema descriptions and rich annotations, the description covers purpose, return values, cost, and date behavior. No output schema exists, but the description states what is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented. The description reinforces that `date` yields historical UTC offset and that coordinates must be known, but it does not add syntax or edge-case details beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: resolving coordinates to an IANA timezone and optionally a historical UTC offset. It gives concrete trigger phrases and clarifies the birth-time use case, making the tool distinguishable from general location_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use the tool: user asks about timezone/UTC offset for a location, or coordinates are known and an IANA zone is needed for a local birth time. It does not name an alternative tool or an exclusion case, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vedic_chartVedic Natal ChartA
Read-onlyIdempotent
Inspect

Use this when the Vedic / Jyotish chart is wanted as data — 'my sidereal placements as JSON', 'nakshatra and pada for every planet', 'my navamsa positions', 'what's my current dasha', 'today's panchang'. Takes coordinates, not a place name. Returns sidereal planet placements in rashis, nakshatras with pada, navamsa placements and bhavas (Whole Sign houses), with Ketu; optional Vimshottari dasha and divisional charts (vargas), or the day's panchang.

CREDIT COST: 1 credit per call.

NameRequiredDescriptionDefault
vargasNoDivisional chart numbers to add, e.g. [9, 10].
ayanamsaNoDefault lahiri.
datetimeYesISO 8601; zone required (`Z`/offset, or local time plus `timezone`).
latitudeYesBirth latitude (+N).
panchangNoReturn the day's panchang instead (tithi, yoga, nakshatra, Rahu Kaal).
timezoneNoIANA zone for a local datetime.
longitudeYesBirth longitude (+E).
dasha_as_ofNoISO 8601 instant (UTC if zone-less): add the dasha periods running then.
dasha_depthNo1-3: add the Vimshottari dasha tree (1 maha, 2 antar, 3 pratyantar).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive status, so the bar is lower, yet the description still adds the 1-credit-per-call cost and the coordinate-not-place-name input requirement. With no output schema, it also carries return-value disclosure and does so by naming the fields produced plus the optional dasha/varga/panchang additions. It does not mention error behavior or ayanamsa defaults, keeping it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the selection condition, then stacked with output facts, then a one-line cost note that is easy to scan. Each example phrase maps to a distinct capability, so nothing is filler. It is dense but slightly long for the information it carries.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter computation tool with no output schema, the description covers what is returned, what is optional, and what input form is required. The remaining gaps (dasha_depth/dasha_as_of interaction, ayanamsa default, panchang mode returning a different shape) are mostly covered by the 100%-covered schema. Panchang being a mode switch rather than an additive option is the one thing worth stating more plainly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description adds semantics the schema does not: coordinates must be passed rather than resolved from a name, and the optional dasha and varga outputs are conditioned on requesting them. This interprets how the optional parameters change the result rather than restating field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific system (Vedic/Jyotish) and frames it as the 'as data' variant, which implicitly separates it from the sibling explore_vedic_chart. It enumerates concrete outputs (sidereal placements, nakshatra/pada, navamsa, bhavas, Ketu), so the resource is unambiguous. It stops short of naming the contrasting sibling outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Quoted trigger phrases ('my sidereal placements as JSON', 'what's my current dasha') give the agent concrete selection cues, and 'Takes coordinates, not a place name' is an actionable precondition that points toward location_search/timezone_resolve. It never explicitly says when NOT to use it (e.g. for the interpretive/exploratory chart), so the sibling routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 38 tool updatesv4.29.0
    • Changedaccount_usage1 field changed
      • changedInput schema / properties / month / description
        Previous value: -"Billing month to query in YYYY-MM format (e.g. '2026-06'). Defaults to the current month."New value: +"YYYY-MM; default current month."
    • Changedacg_hits10 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC. An unstated zone moves every ACG line by ~15° of longitude per hour."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees."New value: +"Birth latitude."
      • changedInput schema / properties / birth_longitude / description
        Previous value: -"Birth longitude in decimal degrees."New value: +"Birth longitude."
      • changedInput schema / properties / bodies / description
        Previous value: -"List of celestial bodies for line calculation. E.g. ['Sun', 'Moon', 'Venus', 'Mars', 'Jupiter', 'Saturn']. Aliases: 'NorthNode'/'Node'/'Rahu' → MeanNode, 'SouthNode'/'Ketu' → SouthNode. Omit to use all classical planets. The extended catalog can be named too — Eris, Sedna, Makemake, Haumea, Quaoar, Orcus, Chaos, Gonggong, Salacia, Hygiea, Psyche, Fortuna, Pandora, Diana, Hekate, Asbolus, Hylonome, Nessus, Chariklo, Sappho, 'Eros (asteroid)' and about sixty more (GET /catalogs/bodies lists them). Each extended body named adds 1 credit (max +20); plain 'Eros' is the Hermetic lot, not the asteroid. Extended bodies are computed for 1600–2200 CE only."New value: +"Default the classical planets; 'Rahu'/'Ketu' = nodes. Extended ids from GET /catalogs/bodies (Eris, Sedna, …) cost 1 credit each (max +20), 1600–2200 CE; 'Eros' is the lot, 'Eros (asteroid)' the asteroid."
      • changedInput schema / properties / custom_bodies / description
        Previous value: -"Enterprise tier. Your own fixed points drawn like bodies: longitude (+latitude) on the tropical ecliptic, or ra_deg + dec_deg, all in degrees. id and metadata come back on each line. Up to 32, 1 credit each (shared +20 cap with extended bodies)."New value: +"Enterprise. Own fixed points (longitude or ra_deg/dec_deg), up to 32, 1 credit each."
      • changedInput schema / properties / include_aspects / description
        Previous value: -"Include aspect lines in results (default true)."New value: +"Default true."
      • changedInput schema / properties / query_latitude / description
        Previous value: -"Latitude of the location to check for nearby lines."New value: +"Place latitude to check."
      • changedInput schema / properties / query_longitude / description
        Previous value: -"Longitude of the location to check for nearby lines."New value: +"Place longitude to check."
      • changedInput schema / properties / radius_deg / description
        Previous value: -"Search radius in degrees (default 2°, max 90°)."New value: +"Degrees; default 2, max 90."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedacg_power_lines7 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC. An unstated zone moves every ACG line by ~15° of longitude per hour."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees."New value: +"Birth latitude."
      • changedInput schema / properties / birth_longitude / description
        Previous value: -"Birth longitude in decimal degrees."New value: +"Birth longitude."
      • changedInput schema / properties / bodies / description
        Previous value: -"List of celestial bodies for line calculation. E.g. ['Sun', 'Moon', 'Venus', 'Mars', 'Jupiter', 'Saturn']. Aliases: 'NorthNode'/'Node'/'Rahu' → MeanNode, 'SouthNode'/'Ketu' → SouthNode. Omit to use all classical planets. The extended catalog can be named too — Eris, Sedna, Makemake, Haumea, Quaoar, Orcus, Chaos, Gonggong, Salacia, Hygiea, Psyche, Fortuna, Pandora, Diana, Hekate, Asbolus, Hylonome, Nessus, Chariklo, Sappho, 'Eros (asteroid)' and about sixty more (GET /catalogs/bodies lists them). Each extended body named adds 1 credit (max +20); plain 'Eros' is the Hermetic lot, not the asteroid. Extended bodies are computed for 1600–2200 CE only."New value: +"Default the classical planets; 'Rahu'/'Ketu' = nodes. Extended ids from GET /catalogs/bodies (Eris, Sedna, …) cost 1 credit each (max +20), 1600–2200 CE; 'Eros' is the lot, 'Eros (asteroid)' the asteroid."
      • changedInput schema / properties / custom_bodies / description
        Previous value: -"Enterprise tier. Your own fixed points drawn like bodies: longitude (+latitude) on the tropical ecliptic, or ra_deg + dec_deg, all in degrees. id and metadata come back on each line. Up to 32, 1 credit each (shared +20 cap with extended bodies)."New value: +"Enterprise. Own fixed points (longitude or ra_deg/dec_deg), up to 32, 1 credit each."
      • changedInput schema / properties / radius_deg / description
        Previous value: -"Search radius in degrees for hits filtering. Default 2°."New value: +"Hit radius, degrees. Default 2."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Removeddev_list_allowed
    • Changeddev_read_api7 fields changed
      • removedInput schema / properties / body / description
        Removed value: -"JSON request body (optional)"
      • changedInput schema / properties / format / description
        Previous value: -"Convenience: if provided, set query.format (optional). 'llm' is canonical; 'llm_v2' is accepted as a legacy alias."New value: +"Sets query.format"
      • removedInput schema / properties / method / description
        Removed value: -"HTTP method (always GET)"
      • changedInput schema / properties / output_mode / description
        Previous value: -"Legacy convenience (deprecated): if provided, set query.output_mode and also map to query.preset/query.format when possible."New value: +"Legacy"
      • changedInput schema / properties / path / description
        Previous value: -"Absolute API path of an allowlisted GET endpoint (e.g., /ephemeris/moon/phase)"New value: +"Allowlisted path from find_calculation"
      • changedInput schema / properties / preset / description
        Previous value: -"Convenience: if provided, set query.preset (optional)."New value: +"Sets query.preset"
      • removedInput schema / properties / query / description
        Removed value: -"Query params (optional)"
    • Addeddev_write_api
    • Changedelectional_moment_analysis3 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"ISO 8601 datetime to analyze, with a zone (e.g., '2026-03-21T12:00:00Z' or '2026-03-21T08:00:00-04:00'). Defaults to now."New value: +"ISO 8601; must include Z/offset. Default now."
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude of location in decimal degrees (positive = North). Optional; without latitude and longitude, sect falls back to diurnal and a night moment is scored with the DAY triplicity rulers."New value: +"Latitude, decimal degrees (+N). Optional; without coordinates sect defaults to diurnal."
      • changedInput schema / properties / longitude / description
        Previous value: -"Longitude of location in decimal degrees (positive = East). Needed alongside latitude — day/night is a local fact that neither coordinate settles alone."New value: +"Longitude, decimal degrees (+E). Pair with latitude."
    • Changedelectional_station_tracker1 field changed
      • changedInput schema / properties / planets / description
        Previous value: -"Comma-separated planet names from: mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto. Defaults to Mercury through Saturn; name outer planets explicitly."New value: +"Comma list, mercury…pluto. Default Mercury–Saturn."
    • Changedephemeris_angles_points2 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedephemeris_house_cusps5 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / house_systems / description
        Previous value: -"List of house system codes. E.g. ['P', 'W']. Defaults to ['P'] (Placidus)."New value: +"Codes, e.g. ['P','W']. Default ['P']."
      • changedInput schema / properties / latitude / description
        Previous value: -"Observer latitude in decimal degrees."New value: +"Observer latitude."
      • changedInput schema / properties / longitude / description
        Previous value: -"Observer longitude in decimal degrees."New value: +"Observer longitude."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedephemeris_ingresses2 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"Default a year on (Moon: 30 days); not with `degree`. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."New value: +"Default a year on (Moon: 30 days); not with `degree`. ISO 8601 date (whole UTC day) or zoned datetime."
      • changedInput schema / properties / start_date / description
        Previous value: -"Default now. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."New value: +"Default now. ISO 8601 date (whole UTC day) or zoned datetime."
    • Changedephemeris_moon_phase4 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime to query, stating its zone ('2026-03-20T12:00:00Z' or '2026-03-20T08:00:00-04:00'), or a local time together with `timezone`. If omitted, returns the current live moon phase (UTC now)."New value: +"ISO 8601 with a required zone, or local time with `timezone`. Default now."
      • changedInput schema / properties / latitude / description
        Previous value: -"Observer latitude (optional, used for local void-of-course calculations)."New value: +"Optional; for local void-of-course."
      • changedInput schema / properties / longitude / description
        Previous value: -"Observer longitude (optional, used for local void-of-course calculations)."New value: +"Optional; for local void-of-course."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedephemeris_natal_chart20 fields changed
      • changedInput schema / properties / additional_objects / description
        Previous value: -"Extra bodies by name, e.g. ['eris','sedna','psyche','hekate','fortuna','chariklo']; any id in GET /catalogs/bodies. No extra credits. Bodies with their own JPL kernel (centaurs, TNOs, extended asteroids) cover 1600–2200 CE only; outside that they are listed in omitted_bodies with valid_from/valid_to, never approximated."New value: +"Extra body ids from GET /catalogs/bodies, e.g. ['eris','sedna']; free; 1600–2200 CE, else listed in omitted_bodies."
      • changedInput schema / properties / analytics / description
        Previous value: -"Opt-in extras, no extra credits: element_balance (element and modality counts over the classical ten), hemisphere_emphasis, aspect_patterns, harmonics, dignities (essential dignity and score per planet), sect, angle_aspects (aspects to ASC/MC), human_design_gates."New value: +"Opt-in extras, free."
      • changedInput schema / properties / asteroid_groups / description
        Previous value: -"Add a whole family: major (Ceres, Pallas, Juno, Vesta), centaur (Chiron, Pholus), tno (Eris, Sedna, Makemake, Haumea, Quaoar, Orcus, Ixion, Varuna) or main_belt (12 large asteroids)."New value: +"Add a family: major (Ceres–Vesta), centaur, tno (Eris, Sedna, …) or main_belt (12 large)."
      • changedInput schema / properties / ayanamsa / description
        Previous value: -"Sidereal system. Default lahiri. Only read when zodiac_type is `sidereal`."New value: +"Default lahiri; sidereal only."
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / declinations / description
        Previous value: -"Add each body's declination and out-of-bounds flag, plus parallel/contraparallel aspects (1.5° orb)."New value: +"Add declinations, out-of-bounds flags and parallels (1.5° orb)."
      • changedInput schema / properties / format / description
        Previous value: -"Output format. 'llm' returns a compact array-based projection optimized for LLM token efficiency (available on all tiers). 'json' returns full verbose JSON."New value: +"'llm' = compact; 'json' = full (default)."
      • changedInput schema / properties / house_system / description
        Previous value: -"House system to use. Defaults to 'placidus' if omitted."New value: +"Default placidus."
      • changedInput schema / properties / include_arabic_parts / description
        Previous value: -"Include Hermetic Lots / Arabic Parts in the natal response (routed as `options.include_hermetic_lots: true`)."New value: +"Add Hermetic Lots / Arabic Parts."
      • changedInput schema / properties / include_fixed_stars / description
        Previous value: -"Add fixed-star conjunctions (Regulus, Algol, Spica and the catalog) against the chart's bodies and angles. Honoured by the endpoint since 4.14.0; same zodiac frame as the chart."New value: +"Add fixed-star conjunctions to bodies and angles."
      • changedInput schema / properties / include_minor_aspects / description
        Previous value: -"Add quincunx, semisextile, semisquare, sesquiquadrate, quintile and biquintile to the aspect grid. Off by default; minors use their own orbs, so this widens the grid without changing any major aspect."New value: +"Add minor aspects."
      • changedInput schema / properties / include_visual / description
        Previous value: -"When true, renders the natal chart wheel as an SVG and embeds it directly in the response. Costs 2 additional credits on top of the base call cost."New value: +"Embed a chart-wheel SVG. +2 credits."
      • changedInput schema / properties / latitude / description
        Previous value: -"Geographic latitude of birth location in decimal degrees (positive = North)."New value: +"Birth latitude."
      • changedInput schema / properties / longitude / description
        Previous value: -"Geographic longitude of birth location in decimal degrees (positive = East)."New value: +"Birth longitude."
      • changedInput schema / properties / solar_relationships / description
        Previous value: -"Classify combustion, cazimi and under-beams for Moon–Saturn relative to the Sun."New value: +"Add combustion, cazimi and under-beams."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
      • changedInput schema / properties / visual_config / description
        Previous value: -"Optional rendering preferences (only used when include_visual=true)."New value: +"Rendering options for include_visual."
      • changedInput schema / properties / visual_config / properties / size / description
        Previous value: -"Canvas size in pixels, 200–4000. Default: 800."New value: +"Pixels, 200–4000. Default 800."
      • changedInput schema / properties / visual_config / properties / theme / description
        Previous value: -"Color theme. Default: light."New value: +"Default light."
      • changedInput schema / properties / zodiac_type / description
        Previous value: -"Zodiac frame. Default tropical. `sidereal` subtracts the ayanamsa (~24°) from every longitude, so signs, dignities and element balance all move; aspects and house numbers do not. The response names the frame it used."New value: +"Default tropical. `sidereal` subtracts the ayanamsa (~24°) from every longitude."
    • Changedephemeris_next_eclipse4 fields changed
      • changedInput schema / properties / after_date / description
        Previous value: -"ISO 8601 date to search after (e.g. '2026-01-01'). Defaults to today if omitted."New value: +"ISO 8601 date; default today."
      • changedInput schema / properties / eclipse_type / description
        Previous value: -"Eclipse type to search for. Use 'any' for whichever comes first (solar or lunar)."New value: +"'any' = next of either."
      • changedInput schema / properties / latitude / description
        Previous value: -"Observer latitude in decimal degrees (optional). When provided with longitude, returns local contact times and visibility."New value: +"Optional observer latitude; with longitude adds local times and visibility."
      • changedInput schema / properties / longitude / description
        Previous value: -"Observer longitude in decimal degrees (optional, pair with latitude)."New value: +"Optional; pair with latitude."
    • Changedephemeris_next_lunar_phase3 fields changed
      • changedInput schema / properties / after_date / description
        Previous value: -"ISO 8601 date to search from (e.g. '2026-06-01'). Defaults to today (UTC) if omitted."New value: +"ISO 8601 date; default today (UTC)."
      • changedInput schema / properties / count / description
        Previous value: -"Number of upcoming occurrences to return (1-12, 2 credits each). Default 1."New value: +"1–12, 2 credits each. Default 1."
      • changedInput schema / properties / phase / description
        Previous value: -"The lunar phase to find. 'new_moon' = conjunction (0° Sun-Moon, start of cycle). 'full_moon' = opposition (180°). 'first_quarter' = 90° waxing. 'last_quarter' = 270° waning."New value: +"Phase to find."
    • Changedephemeris_planet_position5 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / latitude / description
        Previous value: -"Observer latitude for topocentric position (optional). Omit for geocentric."New value: +"Optional; topocentric if set."
      • changedInput schema / properties / longitude / description
        Previous value: -"Observer longitude for topocentric position (optional). Omit for geocentric."New value: +"Optional; topocentric if set."
      • changedInput schema / properties / planet_id / description
        Previous value: -"Planet/body ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto, 10=North Node (Mean), 11=North Node (True), 12=Lilith (Mean), 15=Chiron, 17=Ceres, 18=Pallas, 19=Juno, 20=Vesta)."New value: +"0 Sun, 1 Moon, 2–9 Mercury–Pluto, 10 mean node, 11 true node, 12 Lilith, 15 Chiron, 17–20 Ceres/Pallas/Juno/Vesta."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedephemeris_progressed_chart8 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees."New value: +"Birth latitude."
      • changedInput schema / properties / birth_longitude / description
        Previous value: -"Birth longitude in decimal degrees."New value: +"Birth longitude."
      • changedInput schema / properties / include_aspects / description
        Previous value: -"Whether to include aspect grid in the response. Default false."New value: +"Add the aspect grid. Default false."
      • changedInput schema / properties / method / description
        Previous value: -"Progression method. Defaults to 'secondary' (1 day = 1 year)."New value: +"Default secondary (1 day = 1 year)."
      • changedInput schema / properties / name / description
        Previous value: -"Optional label for the subject, echoed back in both natal_subject and progressed_subject. Defaults to a generic label if omitted."New value: +"Optional subject label."
      • changedInput schema / properties / target_datetime / description
        Previous value: -"Date to progress the chart to. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."New value: +"Progress to. ISO 8601 date or zoned datetime."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedephemeris_relocation7 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Output format. 'llm' = compact token-efficient output (available on all tiers)."New value: +"'llm' = compact."
      • changedInput schema / properties / natal_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / natal_latitude / description
        Previous value: -"Latitude of birth location in decimal degrees."New value: +"Birth latitude."
      • changedInput schema / properties / natal_longitude / description
        Previous value: -"Longitude of birth location in decimal degrees."New value: +"Birth longitude."
      • changedInput schema / properties / relocation_latitude / description
        Previous value: -"Latitude of the relocation city in decimal degrees (positive = North)."New value: +"New-place latitude (+N)."
      • changedInput schema / properties / relocation_longitude / description
        Previous value: -"Longitude of the relocation city in decimal degrees (positive = East)."New value: +"New-place longitude (+E)."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedephemeris_retrograde_status3 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / planet_id / description
        Previous value: -"Single planet ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto). One planet costs 1 credit; omitted, all ten planets are checked for 10 credits."New value: +"0 Sun, 1 Moon, 2–9 Mercury–Pluto. 1 credit; omit for all ten (10 credits)."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedephemeris_solar_return11 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees (optional, for location context)."New value: +"Optional birth latitude."
      • changedInput schema / properties / birth_longitude / description
        Previous value: -"Birth longitude in decimal degrees (optional, for location context)."New value: +"Optional birth longitude."
      • changedInput schema / properties / include_visual / description
        Previous value: -"When true, renders the solar return chart wheel as an SVG and embeds it in the response. Costs 2 additional credits on top of the base call cost."New value: +"Embed a chart-wheel SVG. +2 credits."
      • changedInput schema / properties / return_latitude / description
        Previous value: -"Location latitude for the return chart (optional, if different from birth location)."New value: +"Optional return-location latitude."
      • changedInput schema / properties / return_longitude / description
        Previous value: -"Location longitude for the return chart (optional)."New value: +"Optional return-location longitude."
      • changedInput schema / properties / target_datetime / description
        Previous value: -"Date/time near which to find the Solar Return (ISO 8601 with offset or Z). Defaults to approximately 1 year from now if omitted."New value: +"ISO 8601 near the return; zone required. Default about a year from now."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
      • changedInput schema / properties / visual_config / description
        Previous value: -"Optional rendering preferences (only used when include_visual=true)."New value: +"Rendering options for include_visual."
      • changedInput schema / properties / visual_config / properties / size / description
        Previous value: -"Canvas size in pixels, 200–4000. Default: 800."New value: +"Pixels, 200–4000. Default 800."
      • changedInput schema / properties / visual_config / properties / theme / description
        Previous value: -"Color theme. Default: light."New value: +"Default light."
    • Changedephemeris_synastry10 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Output format. 'llm' is compact and token-efficient (available on all tiers)."New value: +"'llm' = compact."
      • changedInput schema / properties / house_system / description
        Previous value: -"House system for both charts. Defaults to 'placidus'."New value: +"Default placidus."
      • changedInput schema / properties / include_visual / description
        Previous value: -"When true, renders a bi-wheel SVG comparing both charts and embeds it in the response. Costs 2 additional credits on top of the base call cost."New value: +"Embed a bi-wheel SVG. +2 credits."
      • changedInput schema / properties / person_a_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / person_a_timezone / description
        Previous value: -"IANA timezone for Person A's birth location (e.g. `America/Chicago`); required when the datetime is naive."New value: +"IANA zone for Person A's birth location (local datetime)."
      • changedInput schema / properties / person_b_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / person_b_timezone / description
        Previous value: -"IANA timezone for Person B's birth location (e.g. `America/Los_Angeles`); required when the datetime is naive."New value: +"IANA zone for Person B's birth location (local datetime)."
      • changedInput schema / properties / visual_config / description
        Previous value: -"Optional rendering preferences (only used when include_visual=true)."New value: +"Rendering options for include_visual."
      • changedInput schema / properties / visual_config / properties / size / description
        Previous value: -"Canvas size in pixels, 200–4000. Default: 800."New value: +"Pixels, 200–4000. Default 800."
      • changedInput schema / properties / visual_config / properties / theme / description
        Previous value: -"Color theme. Default: light."New value: +"Default light."
    • Changedephemeris_time_lords4 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees."New value: +"Birth latitude."
      • changedInput schema / properties / birth_longitude / description
        Previous value: -"Birth longitude in decimal degrees."New value: +"Birth longitude."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedephemeris_transits9 fields changed
      • changedInput schema / properties / aspect_angle / description
        Previous value: -"Aspect angle in degrees to apply to each natal longitude. 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. The effective search target becomes (natal_longitude + aspect_angle) mod 360."New value: +"Degrees added to each natal longitude: 0 conjunction (default), 90 square, 120 trine, 180 opposition."
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the transit search window. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."New value: +"Window end. ISO 8601 date (whole UTC day) or zoned datetime."
      • changedInput schema / properties / natal_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / natal_latitude / description
        Previous value: -"Latitude of birth location in decimal degrees."New value: +"Birth latitude."
      • changedInput schema / properties / natal_longitude / description
        Previous value: -"Longitude of birth location in decimal degrees."New value: +"Birth longitude."
      • changedInput schema / properties / natal_points / description
        Previous value: -"Natal point IDs whose exact longitudes should be targeted. E.g. ['sun', 'moon', 'asc', 'mc', 'saturn', 'chiron']. Omit for all core points."New value: +"E.g. ['sun','moon','asc','mc']. Default all core points."
      • changedInput schema / properties / natal_timezone / description
        Previous value: -"IANA timezone for the natal birth location (e.g. `America/Chicago`); required when the datetime is naive."New value: +"IANA zone for the natal birth location (local datetime)."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the transit search window. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."New value: +"Window start. ISO 8601 date (whole UTC day) or zoned datetime."
      • changedInput schema / properties / transiting_planets / description
        Previous value: -"List of transiting planet IDs to search. E.g. ['saturn', 'jupiter', 'uranus', 'pluto', 'chiron']. Omit to search Sun through Saturn; Uranus, Neptune, Pluto and Chiron are searched only when named."New value: +"E.g. ['saturn','pluto','chiron']. Default Sun through Saturn; outers and Chiron only when named."
    • Changedexplore_bazi_chart5 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"Alternative to year/month/day: ISO 8601 datetime read as LOCAL wall-clock time at the birth place — BaZi pillars are local by definition, so a zone-less value is correct here and is NOT converted to UTC. A value carrying a 'Z' or offset is used together with timezone."New value: +"Instead of year/month/day: ISO 8601 read as LOCAL birth-place time, so zone-less is correct here; a Z/offset value is used together with timezone."
      • changedInput schema / properties / hour / description
        Previous value: -"Birth hour (0–23). Optional, defaults to 12 (noon). Chinese shí hours are 2-hour blocks — precision within a 2-hour window is sufficient."New value: +"0–23. Default 12."
      • changedInput schema / properties / longitude / description
        Previous value: -"Birth longitude, decimal degrees (east+)."New value: +"Birth longitude."
      • changedInput schema / properties / minute / description
        Previous value: -"Birth minute (0–59). Optional, defaults to 0. Only matters under true_solar_time or near a boundary."New value: +"0–59. Default 0."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone name for the birth place, e.g. 'Asia/Shanghai'. Required to convert a zoned datetime back to local clock; also frames the year/month solar-term boundary."New value: +"IANA zone of the birth place; needed for a zoned datetime."
    • Changedexplore_bi_wheel14 fields changed
      • changedInput schema / properties / house_system / description
        Previous value: -"House system the wheel draws and labels. Use whole_sign for Hellenistic / traditional readings. Defaults to placidus. Applies to every mode, both rings."New value: +"Default placidus; both rings."
      • changedInput schema / properties / location / description
        Previous value: -"Person 1 / Natal location as a plain place name like 'New York, NY'; resolved to coordinates and timezone, and ambiguous names are rejected with a disambiguation hint. Supplied person1_latitude/person1_longitude take precedence."New value: +"Person 1 place name, e.g. 'New York, NY'; geocoded. Coordinates win if given."
      • changedInput schema / properties / mode / description
        Previous value: -"Chart comparison mode. Defaults to 'synastry'."New value: +"Default synastry."
      • changedInput schema / properties / person1_datetime / description
        Previous value: -"Birth datetime for Person 1 / Natal chart. ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"Person 1 / natal birth. ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / person1_latitude / description
        Previous value: -"Birth latitude for Person 1 (decimal degrees, positive = North). Optional if `location` is a place name — the resolver fills it in."New value: +"Person 1 latitude (+N). Optional with `location`."
      • changedInput schema / properties / person1_longitude / description
        Previous value: -"Birth longitude for Person 1 (decimal degrees, positive = East). Optional if `location` is a place name."New value: +"Person 1 longitude (+E). Optional with `location`."
      • changedInput schema / properties / person1_name / description
        Previous value: -"Display name for Person 1 / Natal chart (e.g. 'Alice'). Used in the badge and summary."New value: +"Person 1 display name."
      • changedInput schema / properties / person1_timezone / description
        Previous value: -"IANA timezone for Person 1's birth location (e.g. `America/New_York`); required when the datetime is naive."New value: +"IANA zone for Person 1's birth location (local datetime)."
      • changedInput schema / properties / person2_datetime / description
        Previous value: -"Datetime for the outer wheel. Meaning depends on mode: synastry/composite/davison = Person 2 birth datetime; transit/progressed/solar_arc = target date; solar_return/lunar_return = any date within the target year/month. ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"Outer wheel: Person 2 birth (synastry/composite/davison), target date (transit/progressed/solar_arc), or a date in the target year/month (returns). ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / person2_latitude / description
        Previous value: -"Birth latitude for Person 2. REQUIRED in synastry unless `person2_location` is given — never inferred from Person 1. Other modes default to Person 1's coords."New value: +"Person 2 latitude. Required in synastry unless `person2_location`; other modes default to Person 1."
      • changedInput schema / properties / person2_location / description
        Previous value: -"Person 2 / outer-chart place name, resolved like `location`. person2_latitude/person2_longitude win."New value: +"Person 2 / outer-chart place name; coordinates win."
      • changedInput schema / properties / person2_longitude / description
        Previous value: -"Birth longitude for Person 2. REQUIRED in synastry unless `person2_location` is given. Other modes default to Person 1's coords."New value: +"Person 2 longitude; same rule as latitude."
      • changedInput schema / properties / person2_name / description
        Previous value: -"Display name for Person 2 (synastry mode). Used in the badge and summary."New value: +"Person 2 display name."
      • changedInput schema / properties / person2_timezone / description
        Previous value: -"IANA timezone for Person 2 / the outer chart (e.g. `America/Chicago`); required when the datetime is naive."New value: +"IANA zone for Person 2 / the outer chart (local datetime)."
    • Changedexplore_human_design5 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 birth datetime in UTC, e.g. '1990-04-15T19:30:00Z'. Human Design is time-sensitive — accuracy to the minute matters. Must include 'Z' or a timezone offset."New value: +"ISO 8601 with a required zone, or local time with `timezone`; minute-accurate."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Takes decimal degrees, not a place name."New value: +"Birth latitude (optional with `location`)."
      • changedInput schema / properties / location / description
        Previous value: -"Birth location as a plain place name like 'New York, NY'; the server resolves it to coordinates and timezone (ambiguous names are rejected with a disambiguation hint). If neither location nor lat/lon is supplied the call is rejected."New value: +"Birth place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon."
      • changedInput schema / properties / longitude / description
        Previous value: -"Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name."New value: +"Birth longitude (optional with `location`)."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone name for the birth location (e.g. 'America/New_York'). Used to convert a local birth time without a UTC offset to UTC for Personality and Design positions."New value: +"IANA zone for a local birth time."
    • Changedexplore_human_design_connection9 fields changed
      • changedInput schema / properties / layout / description
        Previous value: -"Overlay composition. 'graph' (default) is the classic bodygraph rectangle with connected channels classified by connection type; 'mandala' nests the same overlay inside the concentric ring set the natal chart uses. Supplied by the in-iframe layout toggle."New value: +"Set by the embedded app. Default graph."
      • changedInput schema / properties / person_a / properties / latitude / description
        Previous value: -"Birth latitude, decimal degrees (+N). Optional if `location` is set."New value: +"Birth latitude (+N). Optional with `location`."
      • changedInput schema / properties / person_a / properties / location / description
        Previous value: -"Birth location, e.g. 'New York, NY' — resolved to coordinates and timezone (ambiguous names are rejected). Omitting both this and lat/lon rejects the call."New value: +"Birth place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon."
      • changedInput schema / properties / person_a / properties / longitude / description
        Previous value: -"Birth longitude, decimal degrees (+E). Optional if `location` is set."New value: +"Birth longitude (+E). Optional with `location`."
      • changedInput schema / properties / person_b / properties / latitude / description
        Previous value: -"Birth latitude, decimal degrees (+N). Optional if `location` is set."New value: +"Birth latitude (+N). Optional with `location`."
      • changedInput schema / properties / person_b / properties / location / description
        Previous value: -"Birth location, e.g. 'New York, NY' — resolved to coordinates and timezone (ambiguous names are rejected). Omitting both this and lat/lon rejects the call."New value: +"Birth place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon."
      • changedInput schema / properties / person_b / properties / longitude / description
        Previous value: -"Birth longitude, decimal degrees (+E). Optional if `location` is set."New value: +"Birth longitude (+E). Optional with `location`."
      • changedInput schema / properties / render_token / description
        Previous value: -"Supplied by the embedded app when it re-renders a chart it already paid for (e.g. to match the host's light/dark theme)."New value: +"Set by the embedded app."
      • changedInput schema / properties / theme / description
        Previous value: -"Visual theme for the overlay bodygraph. Supplied by the embedded app to match the host; defaults to dark."New value: +"Set by the embedded app. Default dark."
    • Changedexplore_human_design_transit9 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"Natal birth datetime, ISO 8601 (e.g. '1990-04-15T19:30:00Z'). Must include 'Z' or an offset, or be a local time given with timezone. HD is time-sensitive to the minute."New value: +"Natal birth: ISO 8601 with a required zone, or local time with `timezone`."
      • changedInput schema / properties / latitude / description
        Previous value: -"Natal birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in."New value: +"Natal latitude (optional with `location`)."
      • changedInput schema / properties / layout / description
        Previous value: -"Overlay composition. 'graph' (default) is the classic bodygraph rectangle with the transit's activated channels highlighted; 'mandala' nests the same overlay inside the concentric ring set the natal chart uses. Supplied by the in-iframe layout toggle."New value: +"Set by the embedded app. Default graph."
      • changedInput schema / properties / location / description
        Previous value: -"Natal birth location as a plain place name like 'New York, NY'; the server resolves it to coordinates and timezone (ambiguous names are rejected with a disambiguation hint). If neither location nor lat/lon is supplied the call is rejected."New value: +"Natal place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon."
      • changedInput schema / properties / longitude / description
        Previous value: -"Natal birth longitude in decimal degrees (positive = East). Optional if `location` is a place name."New value: +"Natal longitude (optional with `location`)."
      • changedInput schema / properties / render_token / description
        Previous value: -"Supplied by the embedded app when it re-renders a chart it already paid for (e.g. to match the host's light/dark theme)."New value: +"Set by the embedded app."
      • changedInput schema / properties / theme / description
        Previous value: -"Visual theme for the overlay bodygraph. Supplied by the embedded app to match the host; defaults to dark."New value: +"Set by the embedded app. Default dark."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone for the birth location (e.g. 'America/New_York')."New value: +"IANA zone for a local birth time."
      • changedInput schema / properties / transit_datetime / description
        Previous value: -"Transit moment, ISO 8601; must include 'Z' or an offset. Defaults to now (UTC) when omitted."New value: +"ISO 8601; must include Z/offset. Default now."
    • Changedexplore_moon_phase4 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime to query, stating its zone ('2026-03-20T12:00:00Z'), or a local time together with timezone. If omitted, returns the current live moon phase (UTC now)."New value: +"ISO 8601 with a required zone, or local time with `timezone`. Default now."
      • changedInput schema / properties / latitude / description
        Previous value: -"Observer latitude (optional, used for local void-of-course calculations)."New value: +"Optional; for local void-of-course."
      • changedInput schema / properties / longitude / description
        Previous value: -"Observer longitude (optional, used for local void-of-course calculations)."New value: +"Optional; for local void-of-course."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedexplore_natal_chart7 fields changed
      • changedInput schema / properties / bodies / description
        Previous value: -"Optional list of body names to include. Defaults to 13 classical bodies (Sun through Pluto + Chiron + Nodes). Use 'all' as a single item to include every available body (the three Liliths — mean, true and interpolated — Ceres, Juno, Vesta, Pallas, Pholus, the 8 trans-Neptunian objects — eris, sedna, makemake, haumea, quaoar, orcus, ixion, varuna — and the 8 Uranian/Hamburg-School points — cupido, hades, zeus, kronos, apollon, admetos, vulkanus, poseidon). Lilith slugs: 'lilith' (mean), 'lilith_true', 'lilith_interpolated'. Example: ['sun','moon','lilith','sedna']."New value: +"Default 13 (Sun–Pluto, Chiron, Nodes); ['all'] adds Liliths, asteroids, TNOs, Uranian points. E.g. ['sun','lilith','lilith_true','sedna']."
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / house_system / description
        Previous value: -"House system to use (default: placidus)."New value: +"Default placidus."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Takes decimal degrees, not a place name."New value: +"Birth latitude (optional with `location`)."
      • changedInput schema / properties / location / description
        Previous value: -"Birth location as a plain place name like 'New York, NY'; the server resolves it to coordinates and timezone (ambiguous names are rejected with a disambiguation hint). Supplied coordinates take precedence over it."New value: +"Birth place name, e.g. 'New York, NY'; geocoded. Coordinates win if given."
      • changedInput schema / properties / longitude / description
        Previous value: -"Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name."New value: +"Birth longitude (optional with `location`)."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedexplore_transit_timeline10 fields changed
      • changedInput schema / properties / aspect_angle / description
        Previous value: -"Aspect angle in degrees. 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine, 60 = sextile."New value: +"Degrees: 0 conjunction (default), 60, 90, 120, 180."
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the transit search window. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."New value: +"Window end. ISO 8601 date (whole UTC day) or zoned datetime."
      • changedInput schema / properties / natal_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / natal_latitude / description
        Previous value: -"Latitude of birth location in decimal degrees."New value: +"Birth latitude."
      • changedInput schema / properties / natal_longitude / description
        Previous value: -"Longitude of birth location in decimal degrees."New value: +"Birth longitude."
      • changedInput schema / properties / natal_points / description
        Previous value: -"Natal point IDs to target, e.g. ['sun','moon','asc','mc','saturn']. Omit for the 7 classical bodies."New value: +"E.g. ['sun','moon','asc','mc']. Default the 7 classical bodies."
      • changedInput schema / properties / natal_timezone / description
        Previous value: -"IANA timezone for the natal birth location (e.g. `America/Chicago`); required when the datetime is naive."New value: +"IANA zone for the natal birth location (local datetime)."
      • changedInput schema / properties / orb_deg / description
        Previous value: -"Orb in degrees that defines when a transit starts and ends (the in-orb window around each exact hit). Default 1. Greater than 0, at most 15."New value: +"In-orb window around each hit, degrees. Default 1, max 15."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the transit search window. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."New value: +"Window start. ISO 8601 date (whole UTC day) or zoned datetime."
      • changedInput schema / properties / transiting_planets / description
        Previous value: -"Transiting planet IDs to search, e.g. ['saturn','jupiter','uranus','pluto','chiron']. Omit to search Sun through Saturn; Uranus, Neptune, Pluto and Chiron are searched only when named."New value: +"E.g. ['saturn','pluto','chiron']. Default Sun through Saturn; outers and Chiron only when named."
    • Changedexplore_vedic_chart6 fields changed
      • changedInput schema / properties / ayanamsa / description
        Previous value: -"Ayanamsa system for sidereal conversion. Defaults to 'lahiri'."New value: +"Default lahiri."
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 birth datetime in UTC, e.g. '1990-06-15T14:30:00Z'. Must include 'Z' or a timezone offset."New value: +"ISO 8601 with a required zone, or local time with `timezone`."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Takes decimal degrees, not a place name."New value: +"Birth latitude (optional with `location`)."
      • changedInput schema / properties / location / description
        Previous value: -"Birth location as a plain place name like 'Mumbai, India'; the server resolves it to coordinates and timezone (ambiguous names are rejected with a disambiguation hint). Supplied coordinates take precedence over it."New value: +"Birth place name, e.g. 'Mumbai, India'; geocoded. Coordinates win if given."
      • changedInput schema / properties / longitude / description
        Previous value: -"Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name."New value: +"Birth longitude (optional with `location`)."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone name for the birth location (e.g. 'Asia/Kolkata'). Used to convert a local birth time without a UTC offset."New value: +"IANA zone for a local birth time."
    • Addedfind_calculation
    • Changedhuman_design_chart9 fields changed
      • changedInput schema / properties / chart_variant / description
        Previous value: -"'dream': 15-gate subset chart, Design when the Moon was 88° behind its birth longitude; no type or profile. Default 'waking'; not with include_visual."New value: +"'dream': 15-gate chart, no type or profile. Default 'waking'; not with include_visual."
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / format / description
        Previous value: -"Output format. 'llm' returns compact array projection for token efficiency (available on all tiers). 'json' returns verbose full output."New value: +"'llm' = compact; 'json' = full."
      • changedInput schema / properties / include_visual / description
        Previous value: -"When true, renders the Human Design bodygraph as an SVG and embeds it in the response. Costs 2 additional credits on top of the base call cost."New value: +"Embed a bodygraph SVG. +2 credits."
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude of birth location in decimal degrees (positive = North)."New value: +"Birth latitude."
      • changedInput schema / properties / longitude / description
        Previous value: -"Longitude of birth location in decimal degrees (positive = East)."New value: +"Birth longitude."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
      • changedInput schema / properties / visual_config / description
        Previous value: -"Optional rendering preferences (only used when include_visual=true)."New value: +"Rendering options for include_visual."
      • changedInput schema / properties / visual_config / properties / size / description
        Previous value: -"Canvas size in pixels, 200–4000. Default: 800."New value: +"Pixels, 200–4000. Default 800."
    • Changedhuman_design_transit_timeline4 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / end_date / description
        Previous value: -"ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."New value: +"ISO 8601 date (whole UTC day) or zoned datetime."
      • changedInput schema / properties / start_date / description
        Previous value: -"ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."New value: +"ISO 8601 date (whole UTC day) or zoned datetime."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
    • Changedlocation_search4 fields changed
      • changedInput schema / properties / country / description
        Previous value: -"Optional ISO 3166-1 alpha-2 country code (e.g. 'US') to bias ranking. Boost, not filter."New value: +"ISO country code to boost, e.g. 'US'."
      • changedInput schema / properties / date / description
        Previous value: -"Optional birth/event date as 'YYYY-MM-DD'. When given, each suggestion also carries utcOffsetAtDate / utcOffsetMinutes / isDst — the UTC offset that actually applied at that place on that date, using historical DST rules. Post-1970 is free (local resolution, no API call). Pre-1970, the top match is additionally corrected through the API's historical overlay (1 extra credit) because tzdata models only the zone's reference city before 1970; the remaining suggestions keep their tzdata estimate and are labelled historical_estimate."New value: +"YYYY-MM-DD; adds the UTC offset in force there that day (historical DST). Pre-1970 corrects the top match (+1 credit)."
      • changedInput schema / properties / near / description
        Previous value: -"Optional 'lat,lon' proximity hint (e.g. '37.77,-122.42') to bias ranking toward nearby places."New value: +"'lat,lon' to boost nearby places."
      • changedInput schema / properties / region / description
        Previous value: -"Optional admin1 (state/province) qualifier to bias ranking — full name ('Michigan'), ASCII name, or code ('MI'). Boost, not filter."New value: +"State/province to boost, e.g. 'MI'."
    • Changedtimezone_resolve3 fields changed
      • changedInput schema / properties / date / description
        Previous value: -"Optional birth/event date 'YYYY-MM-DD'. Adds utcOffsetAtDate / utcOffsetMinutes / isDst / tzConfidence. Post-1970 resolves locally (free); pre-1970 consults the API's historical correction overlay (1 extra credit)."New value: +"YYYY-MM-DD; adds the UTC offset in force that day. Pre-1970 +1 credit."
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude in decimal degrees, -90 to 90 (north positive)."New value: +"Decimal degrees (+N)."
      • changedInput schema / properties / longitude / description
        Previous value: -"Longitude in decimal degrees, -180 to 180 (east positive)."New value: +"Decimal degrees (+E)."
    • Changedvedic_chart6 fields changed
      • changedInput schema / properties / ayanamsa / description
        Previous value: -"Ayanamsa system for sidereal conversion. Defaults to 'lahiri'."New value: +"Default lahiri."
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."New value: +"ISO 8601; zone required (`Z`/offset, or local time plus `timezone`)."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (north positive)."New value: +"Birth latitude (+N)."
      • changedInput schema / properties / longitude / description
        Previous value: -"Birth longitude in decimal degrees (east positive)."New value: +"Birth longitude (+E)."
      • changedInput schema / properties / panchang / description
        Previous value: -"Return the panchang for the local date in datetime instead: tithi, karana, yoga, nakshatra, vara, Rahu Kaal."New value: +"Return the day's panchang instead (tithi, yoga, nakshatra, Rahu Kaal)."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
  2. 11 tool updatesv4.27.0
    • Changedacg_hits8 fields changed
      • changedInput schema / properties / custom_bodies / description
        Previous value: -"Enterprise tier only. Your own fixed points drawn like bodies — a star, a research point, a position from another chart. Each is {id, name?, longitude (+ optional latitude) OR ra_deg + dec_deg, metadata?}; ecliptic coordinates are degrees on the tropical ecliptic, ra_deg is DEGREES not hours. `id` and `metadata` come back on every line as custom_id / metadata. Up to 32 points, 1 credit each (shared +20 cap with extended bodies)."New value: +"Enterprise tier. Your own fixed points drawn like bodies: longitude (+latitude) on the tropical ecliptic, or ra_deg + dec_deg, all in degrees. id and metadata come back on each line. Up to 32, 1 credit each (shared +20 cap with extended bodies)."
      • removedInput schema / properties / custom_bodies / items / properties / dec_deg / description
        Removed value: -"Declination in degrees (-90..90). Give with ra_deg."
      • removedInput schema / properties / custom_bodies / items / properties / id / description
        Removed value: -"Your identifier (letters, digits, _ . : -; up to 64)."
      • removedInput schema / properties / custom_bodies / items / properties / latitude / description
        Removed value: -"Ecliptic latitude in degrees (-90..90), default 0."
      • removedInput schema / properties / custom_bodies / items / properties / longitude / description
        Removed value: -"Ecliptic longitude in degrees (any real value, wrapped)."
      • removedInput schema / properties / custom_bodies / items / properties / metadata / description
        Removed value: -"Any JSON object, up to 2 KB; echoed back verbatim."
      • removedInput schema / properties / custom_bodies / items / properties / name / description
        Removed value: -"Display label; defaults to id. Must not be a catalog body name."
      • removedInput schema / properties / custom_bodies / items / properties / ra_deg / description
        Removed value: -"Right ascension in degrees (not hours). Give with dec_deg."
    • Changedacg_power_lines10 fields changed
      • changedInput schema / properties / custom_bodies / description
        Previous value: -"Enterprise tier only. Your own fixed points drawn like bodies — a star, a research point, a position from another chart. Each is {id, name?, longitude (+ optional latitude) OR ra_deg + dec_deg, metadata?}; ecliptic coordinates are degrees on the tropical ecliptic, ra_deg is DEGREES not hours. `id` and `metadata` come back on every line as custom_id / metadata. Up to 32 points, 1 credit each (shared +20 cap with extended bodies)."New value: +"Enterprise tier. Your own fixed points drawn like bodies: longitude (+latitude) on the tropical ecliptic, or ra_deg + dec_deg, all in degrees. id and metadata come back on each line. Up to 32, 1 credit each (shared +20 cap with extended bodies)."
      • removedInput schema / properties / custom_bodies / items / properties / dec_deg / description
        Removed value: -"Declination in degrees (-90..90). Give with ra_deg."
      • removedInput schema / properties / custom_bodies / items / properties / id / description
        Removed value: -"Your identifier (letters, digits, _ . : -; up to 64)."
      • removedInput schema / properties / custom_bodies / items / properties / latitude / description
        Removed value: -"Ecliptic latitude in degrees (-90..90), default 0."
      • removedInput schema / properties / custom_bodies / items / properties / longitude / description
        Removed value: -"Ecliptic longitude in degrees (any real value, wrapped)."
      • removedInput schema / properties / custom_bodies / items / properties / metadata / description
        Removed value: -"Any JSON object, up to 2 KB; echoed back verbatim."
      • removedInput schema / properties / custom_bodies / items / properties / name / description
        Removed value: -"Display label; defaults to id. Must not be a catalog body name."
      • removedInput schema / properties / custom_bodies / items / properties / ra_deg / description
        Removed value: -"Right ascension in degrees (not hours). Give with dec_deg."
      • changedInput schema / properties / query_latitude / description
        Previous value: -"Filter lines near this latitude (optional, for hits mode)."New value: +"Filter lines near this latitude."
      • changedInput schema / properties / query_longitude / description
        Previous value: -"Filter lines near this longitude (optional, for hits mode)."New value: +"Filter lines near this longitude."
    • Removedephemeris_electional
    • Addedephemeris_ingresses
    • Changedephemeris_natal_chart3 fields changed
      • changedInput schema / properties / additional_objects / description
        Previous value: -"Extra bodies to add to the chart, by name: e.g. ['eris','sedna','psyche','hekate','fortuna','pandora','asbolus','hylonome','chaos','gonggong','salacia','sappho','eros','nessus','chariklo']. Any body in GET /catalogs/bodies works (use its id/name, lowercase). No extra credits. Bodies with their own JPL kernel (centaurs, trans-Neptunian objects, the extended asteroids) are computed for 1600–2200 CE only; for a chart outside that they are left out and listed in omitted_bodies with their valid_from/valid_to — never approximated."New value: +"Extra bodies by name, e.g. ['eris','sedna','psyche','hekate','fortuna','chariklo']; any id in GET /catalogs/bodies. No extra credits. Bodies with their own JPL kernel (centaurs, TNOs, extended asteroids) cover 1600–2200 CE only; outside that they are listed in omitted_bodies with valid_from/valid_to, never approximated."
      • changedInput schema / properties / analytics / description
        Previous value: -"Optional whole-chart analytics, off by default: element_balance (fire/earth/air/water plus modality counts over the classical ten, unweighted), hemisphere_emphasis (above/below and east/west from the angles), aspect_patterns (aspect matrix + detected patterns), harmonics. No extra credits. Absent from format='llm'."New value: +"Opt-in extras, no extra credits: element_balance (element and modality counts over the classical ten), hemisphere_emphasis, aspect_patterns, harmonics, dignities (essential dignity and score per planet), sect, angle_aspects (aspects to ASC/MC), human_design_gates."
      • changedInput schema / properties / analytics / items / enum
        Previous value: -[
        -  "element_balance",
        -  "hemisphere_emphasis",
        -  "aspect_patterns",
        -  "harmonics"
        -]New value: +[
        +  "element_balance",
        +  "hemisphere_emphasis",
        +  "aspect_patterns",
        +  "harmonics",
        +  "dignities",
        +  "sect",
        +  "angle_aspects",
        +  "human_design_gates"
        +]
    • Changedephemeris_progressed_chart2 fields changed
      • addedInput schema / properties / converse
        Added value: +{
        +  "description": "Count backward from birth.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / method / enum
        Previous value: -[
        -  "secondary",
        -  "solar_arc",
        -  "tertiary"
        -]New value: +[
        +  "secondary",
        +  "solar_arc",
        +  "tertiary",
        +  "minor"
        +]
    • Changedephemeris_transits1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "time (default) or significance.",
        +  "enum": [
        +    "time",
        +    "significance"
        +  ],
        +  "type": "string"
        +}
    • Changedexplore_natal_chart2 fields changed
      • addedInput schema / properties / ayanamsa
        Added value: +{
        +  "description": "Default lahiri; sidereal only.",
        +  "enum": [
        +    "lahiri",
        +    "fagan_bradley",
        +    "krishnamurti",
        +    "raman",
        +    "yukteshwar"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / zodiac_type
        Added value: +{
        +  "description": "Default tropical.",
        +  "enum": [
        +    "tropical",
        +    "sidereal"
        +  ],
        +  "type": "string"
        +}
    • Changedhuman_design_chart1 field changed
      • addedInput schema / properties / chart_variant
        Added value: +{
        +  "description": "'dream': 15-gate subset chart, Design when the Moon was 88° behind its birth longitude; no type or profile. Default 'waking'; not with include_visual.",
        +  "enum": [
        +    "waking",
        +    "dream"
        +  ],
        +  "type": "string"
        +}
    • Addedhuman_design_transit_timeline
    • Changedvedic_chart4 fields changed
      • addedInput schema / properties / dasha_as_of
        Added value: +{
        +  "description": "ISO 8601 instant (UTC if zone-less): add the dasha periods running then.",
        +  "type": "string"
        +}
      • addedInput schema / properties / dasha_depth
        Added value: +{
        +  "description": "1-3: add the Vimshottari dasha tree (1 maha, 2 antar, 3 pratyantar).",
        +  "type": "integer"
        +}
      • addedInput schema / properties / panchang
        Added value: +{
        +  "description": "Return the panchang for the local date in datetime instead: tithi, karana, yoga, nakshatra, vara, Rahu Kaal.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / vargas
        Added value: +{
        +  "description": "Divisional chart numbers to add, e.g. [9, 10].",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
  3. 29 tool updatesv4.24.2
    • Changedacg_hits4 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`. An unstated zone moves every ACG line by ~15° of longitude per hour."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC. An unstated zone moves every ACG line by ~15° of longitude per hour."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Birth latitude in decimal degrees."
      • changedInput schema / properties / bodies / description
        Previous value: -"List of celestial bodies for line calculation. E.g. ['Sun', 'Moon', 'Venus', 'Mars', 'Jupiter', 'Saturn']. Aliases: 'NorthNode'/'Node'/'Rahu' → MeanNode, 'SouthNode'/'Ketu' → SouthNode. Omit to use all classical planets."New value: +"List of celestial bodies for line calculation. E.g. ['Sun', 'Moon', 'Venus', 'Mars', 'Jupiter', 'Saturn']. Aliases: 'NorthNode'/'Node'/'Rahu' → MeanNode, 'SouthNode'/'Ketu' → SouthNode. Omit to use all classical planets. The extended catalog can be named too — Eris, Sedna, Makemake, Haumea, Quaoar, Orcus, Chaos, Gonggong, Salacia, Hygiea, Psyche, Fortuna, Pandora, Diana, Hekate, Asbolus, Hylonome, Nessus, Chariklo, Sappho, 'Eros (asteroid)' and about sixty more (GET /catalogs/bodies lists them). Each extended body named adds 1 credit (max +20); plain 'Eros' is the Hermetic lot, not the asteroid. Extended bodies are computed for 1600–2200 CE only."
      • addedInput schema / properties / custom_bodies
        Added value: +{
        +  "description": "Enterprise tier only. Your own fixed points drawn like bodies — a star, a research point, a position from another chart. Each is {id, name?, longitude (+ optional latitude) OR ra_deg + dec_deg, metadata?}; ecliptic coordinates are degrees on the tropical ecliptic, ra_deg is DEGREES not hours. `id` and `metadata` come back on every line as custom_id / metadata. Up to 32 points, 1 credit each (shared +20 cap with extended bodies).",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "dec_deg": {
        +        "description": "Declination in degrees (-90..90). Give with ra_deg.",
        +        "type": "number"
        +      },
        +      "id": {
        +        "description": "Your identifier (letters, digits, _ . : -; up to 64).",
        +        "type": "string"
        +      },
        +      "latitude": {
        +        "description": "Ecliptic latitude in degrees (-90..90), default 0.",
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "description": "Ecliptic longitude in degrees (any real value, wrapped).",
        +        "type": "number"
        +      },
        +      "metadata": {
        +        "description": "Any JSON object, up to 2 KB; echoed back verbatim.",
        +        "type": "object"
        +      },
        +      "name": {
        +        "description": "Display label; defaults to id. Must not be a catalog body name.",
        +        "type": "string"
        +      },
        +      "ra_deg": {
        +        "description": "Right ascension in degrees (not hours). Give with dec_deg.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 32,
        +  "type": "array"
        +}
    • Changedacg_power_lines4 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`. An unstated zone moves every ACG line by ~15° of longitude per hour."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC. An unstated zone moves every ACG line by ~15° of longitude per hour."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Birth latitude in decimal degrees."
      • changedInput schema / properties / bodies / description
        Previous value: -"List of celestial bodies for line calculation. E.g. ['Sun', 'Moon', 'Venus', 'Mars', 'Jupiter', 'Saturn']. Aliases: 'NorthNode'/'Node'/'Rahu' → MeanNode, 'SouthNode'/'Ketu' → SouthNode. Omit to use all classical planets."New value: +"List of celestial bodies for line calculation. E.g. ['Sun', 'Moon', 'Venus', 'Mars', 'Jupiter', 'Saturn']. Aliases: 'NorthNode'/'Node'/'Rahu' → MeanNode, 'SouthNode'/'Ketu' → SouthNode. Omit to use all classical planets. The extended catalog can be named too — Eris, Sedna, Makemake, Haumea, Quaoar, Orcus, Chaos, Gonggong, Salacia, Hygiea, Psyche, Fortuna, Pandora, Diana, Hekate, Asbolus, Hylonome, Nessus, Chariklo, Sappho, 'Eros (asteroid)' and about sixty more (GET /catalogs/bodies lists them). Each extended body named adds 1 credit (max +20); plain 'Eros' is the Hermetic lot, not the asteroid. Extended bodies are computed for 1600–2200 CE only."
      • addedInput schema / properties / custom_bodies
        Added value: +{
        +  "description": "Enterprise tier only. Your own fixed points drawn like bodies — a star, a research point, a position from another chart. Each is {id, name?, longitude (+ optional latitude) OR ra_deg + dec_deg, metadata?}; ecliptic coordinates are degrees on the tropical ecliptic, ra_deg is DEGREES not hours. `id` and `metadata` come back on every line as custom_id / metadata. Up to 32 points, 1 credit each (shared +20 cap with extended bodies).",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "dec_deg": {
        +        "description": "Declination in degrees (-90..90). Give with ra_deg.",
        +        "type": "number"
        +      },
        +      "id": {
        +        "description": "Your identifier (letters, digits, _ . : -; up to 64).",
        +        "type": "string"
        +      },
        +      "latitude": {
        +        "description": "Ecliptic latitude in degrees (-90..90), default 0.",
        +        "type": "number"
        +      },
        +      "longitude": {
        +        "description": "Ecliptic longitude in degrees (any real value, wrapped).",
        +        "type": "number"
        +      },
        +      "metadata": {
        +        "description": "Any JSON object, up to 2 KB; echoed back verbatim.",
        +        "type": "object"
        +      },
        +      "name": {
        +        "description": "Display label; defaults to id. Must not be a catalog body name.",
        +        "type": "string"
        +      },
        +      "ra_deg": {
        +        "description": "Right ascension in degrees (not hours). Give with dec_deg.",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 32,
        +  "type": "array"
        +}
    • Changeddev_read_api3 fields changed
      • addedInput schema / properties / body / additionalProperties
        Added value: +true
      • addedInput schema / properties / body / type
        Added value: +"object"
      • changedInput schema / properties / path / description
        Previous value: -"Absolute API path (e.g., /ephemeris/natal-chart)"New value: +"Absolute API path of an allowlisted GET endpoint (e.g., /ephemeris/moon/phase)"
    • Changedelectional_moment_analysis2 fields changed
      • addedInput schema / properties / latitude
        Added value: +{
        +  "description": "Latitude of location in decimal degrees (positive = North). Optional; without latitude and longitude, sect falls back to diurnal and a night moment is scored with the DAY triplicity rulers.",
        +  "type": "number"
        +}
      • addedInput schema / properties / longitude
        Added value: +{
        +  "description": "Longitude of location in decimal degrees (positive = East). Needed alongside latitude — day/night is a local fact that neither coordinate settles alone.",
        +  "type": "number"
        +}
    • Changedelectional_station_tracker1 field changed
      • changedInput schema / properties / planets / description
        Previous value: -"Comma-separated planet names to track. E.g. 'mercury,venus,mars' or 'jupiter,saturn,uranus,neptune,pluto'. Defaults to Mercury through Saturn (inner + classical planets)."New value: +"Comma-separated planet names from: mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto. Defaults to Mercury through Saturn; name outer planets explicitly."
    • Changedephemeris_angles_points1 field changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
    • Changedephemeris_electional1 field changed
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude of location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Latitude of location in decimal degrees (positive = North)."
    • Changedephemeris_house_cusps2 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / latitude / description
        Previous value: -"Observer latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Observer latitude in decimal degrees."
    • Changedephemeris_natal_chart14 fields changed
      • addedInput schema / properties / additional_objects
        Added value: +{
        +  "description": "Extra bodies to add to the chart, by name: e.g. ['eris','sedna','psyche','hekate','fortuna','pandora','asbolus','hylonome','chaos','gonggong','salacia','sappho','eros','nessus','chariklo']. Any body in GET /catalogs/bodies works (use its id/name, lowercase). No extra credits. Bodies with their own JPL kernel (centaurs, trans-Neptunian objects, the extended asteroids) are computed for 1600–2200 CE only; for a chart outside that they are left out and listed in omitted_bodies with their valid_from/valid_to — never approximated.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 40,
        +  "type": "array"
        +}
      • addedInput schema / properties / analytics
        Added value: +{
        +  "description": "Optional whole-chart analytics, off by default: element_balance (fire/earth/air/water plus modality counts over the classical ten, unweighted), hemisphere_emphasis (above/below and east/west from the angles), aspect_patterns (aspect matrix + detected patterns), harmonics. No extra credits. Absent from format='llm'.",
        +  "items": {
        +    "enum": [
        +      "element_balance",
        +      "hemisphere_emphasis",
        +      "aspect_patterns",
        +      "harmonics"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / asteroid_groups
        Added value: +{
        +  "description": "Add a whole family: major (Ceres, Pallas, Juno, Vesta), centaur (Chiron, Pholus), tno (Eris, Sedna, Makemake, Haumea, Quaoar, Orcus, Ixion, Varuna) or main_belt (12 large asteroids).",
        +  "items": {
        +    "enum": [
        +      "major",
        +      "centaur",
        +      "tno",
        +      "main_belt"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / ayanamsa
        Added value: +{
        +  "description": "Sidereal system. Default lahiri. Only read when zodiac_type is `sidereal`.",
        +  "enum": [
        +    "lahiri",
        +    "fagan_bradley",
        +    "krishnamurti",
        +    "raman",
        +    "yukteshwar"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • addedInput schema / properties / declinations
        Added value: +{
        +  "description": "Add each body's declination and out-of-bounds flag, plus parallel/contraparallel aspects (1.5° orb).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / house_system / enum
        Previous value: -[
        -  "placidus",
        -  "whole_sign",
        -  "equal",
        -  "koch",
        -  "campanus",
        -  "regiomontanus",
        -  "porphyry",
        -  "alcabitius",
        -  "morinus"
        -]New value: +[
        +  "placidus",
        +  "whole_sign",
        +  "equal",
        +  "koch",
        +  "campanus",
        +  "regiomontanus",
        +  "porphyry"
        +]
      • changedInput schema / properties / include_arabic_parts / description
        Previous value: -"Include Hermetic Lots / Arabic Parts in the natal response (routed as `options.include_hermetic_lots: true`). For a standalone lots-only payload without a full natal chart, use `/ephemeris/hermetic-lots` instead."New value: +"Include Hermetic Lots / Arabic Parts in the natal response (routed as `options.include_hermetic_lots: true`)."
      • changedInput schema / properties / include_fixed_stars / description
        Previous value: -"Include fixed-star positions in the natal response (routed as `configuration.fixed_star_options.include: true`). For a standalone fixed-stars payload without a full natal chart, use `/ephemeris/fixed-stars` instead."New value: +"Add fixed-star conjunctions (Regulus, Algol, Spica and the catalog) against the chart's bodies and angles. Honoured by the endpoint since 4.14.0; same zodiac frame as the chart."
      • addedInput schema / properties / include_minor_aspects
        Added value: +{
        +  "description": "Add quincunx, semisextile, semisquare, sesquiquadrate, quintile and biquintile to the aspect grid. Off by default; minors use their own orbs, so this widens the grid without changing any major aspect.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / include_visual / description
        Previous value: -"When true, renders the natal chart wheel as an SVG and embeds it directly in the response. The chart image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost."New value: +"When true, renders the natal chart wheel as an SVG and embeds it directly in the response. Costs 2 additional credits on top of the base call cost."
      • changedInput schema / properties / latitude / description
        Previous value: -"Geographic latitude of birth location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Geographic latitude of birth location in decimal degrees (positive = North)."
      • addedInput schema / properties / solar_relationships
        Added value: +{
        +  "description": "Classify combustion, cazimi and under-beams for Moon–Saturn relative to the Sun.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / zodiac_type
        Added value: +{
        +  "description": "Zodiac frame. Default tropical. `sidereal` subtracts the ayanamsa (~24°) from every longitude, so signs, dignities and element balance all move; aspects and house numbers do not. The response names the frame it used.",
        +  "enum": [
        +    "tropical",
        +    "sidereal"
        +  ],
        +  "type": "string"
        +}
    • Changedephemeris_next_lunar_phase1 field changed
      • changedInput schema / properties / count / description
        Previous value: -"Number of upcoming occurrences to return (1-12). Default 1."New value: +"Number of upcoming occurrences to return (1-12, 2 credits each). Default 1."
    • Changedephemeris_planet_position2 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / planet_id / description
        Previous value: -"Planet/body ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto, 10=North Node (Mean), 11=North Node (True), 12=Lilith (Mean), 15=Chiron, 17=Ceres, 18=Pallas, 19=Juno, 20=Vesta). There is no South Node id — take the North Node and add 180°."New value: +"Planet/body ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto, 10=North Node (Mean), 11=North Node (True), 12=Lilith (Mean), 15=Chiron, 17=Ceres, 18=Pallas, 19=Juno, 20=Vesta)."
    • Changedephemeris_progressed_chart5 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Birth latitude in decimal degrees."
      • changedInput schema / properties / include_visual / description
        Previous value: -"When true, renders the progressed chart wheel as an SVG and embeds it in the response. The chart image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost."New value: +"Also return a natal-inside, progressed-outside bi-wheel as an image (+2 credits)."
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Optional label for the subject, echoed back in both natal_subject and progressed_subject. Defaults to a generic label if omitted.",
        +  "type": "string"
        +}
      • removedInput schema / properties / visual_config
        Removed value: -{
        -  "additionalProperties": false,
        -  "description": "Optional rendering preferences (only used when include_visual=true).",
        -  "properties": {
        -    "size": {
        -      "description": "Canvas size in pixels, 200–4000. Default: 800.",
        -      "type": "number"
        -    },
        -    "theme": {
        -      "description": "Color theme. Default: light.",
        -      "enum": [
        -        "light",
        -        "dark"
        -      ],
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
    • Changedephemeris_relocation3 fields changed
      • addedInput schema / properties / include_visual
        Added value: +{
        +  "description": "Also return the relocated chart wheel as an image (+2 credits).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / natal_datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / natal_latitude / description
        Previous value: -"Latitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Latitude of birth location in decimal degrees."
    • Changedephemeris_retrograde_status2 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / planet_id / description
        Previous value: -"Single planet ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto). Pass this whenever the question names a planet — 1 credit. Omit only to sweep all ten — 10 credits."New value: +"Single planet ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto). One planet costs 1 credit; omitted, all ten planets are checked for 10 credits."
    • Changedephemeris_solar_return2 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / include_visual / description
        Previous value: -"When true, renders the solar return chart wheel as an SVG and embeds it in the response. The chart image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost."New value: +"When true, renders the solar return chart wheel as an SVG and embeds it in the response. Costs 2 additional credits on top of the base call cost."
    • Changedephemeris_synastry4 fields changed
      • changedInput schema / properties / include_visual / description
        Previous value: -"When true, renders a bi-wheel SVG comparing both charts and embeds it in the response. The chart image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost."New value: +"When true, renders a bi-wheel SVG comparing both charts and embeds it in the response. Costs 2 additional credits on top of the base call cost."
      • changedInput schema / properties / person_a_datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / person_a_latitude / description
        Previous value: -"Person A birth latitude. Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Person A birth latitude."
      • changedInput schema / properties / person_b_datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
    • Addedephemeris_time_lords
    • Changedephemeris_transits5 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."New value: +"End of the transit search window. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."
      • changedInput schema / properties / natal_datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / natal_latitude / description
        Previous value: -"Latitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Latitude of birth location in decimal degrees."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."New value: +"Start of the transit search window. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."
      • changedInput schema / properties / transiting_planets / description
        Previous value: -"List of transiting planet IDs to search. E.g. ['saturn', 'jupiter', 'uranus', 'pluto', 'chiron']. Omit to search all outer planets."New value: +"List of transiting planet IDs to search. E.g. ['saturn', 'jupiter', 'uranus', 'pluto', 'chiron']. Omit to search Sun through Saturn; Uranus, Neptune, Pluto and Chiron are searched only when named."
    • Changedexplore_bazi_chart1 field changed
      • changedInput schema / properties / datetime / description
        Previous value: -"Alternative to year/month/day: ISO 8601 datetime read as LOCAL wall-clock time at the birth place — BaZi pillars are local by definition, so a zone-less value is correct here and is NOT converted to UTC. If it carries a 'Z' or offset, also pass timezone."New value: +"Alternative to year/month/day: ISO 8601 datetime read as LOCAL wall-clock time at the birth place — BaZi pillars are local by definition, so a zone-less value is correct here and is NOT converted to UTC. A value carrying a 'Z' or offset is used together with timezone."
    • Changedexplore_bi_wheel6 fields changed
      • addedInput schema / properties / house_system
        Added value: +{
        +  "description": "House system the wheel draws and labels. Use whole_sign for Hellenistic / traditional readings. Defaults to placidus. Applies to every mode, both rings.",
        +  "enum": [
        +    "placidus",
        +    "whole_sign",
        +    "equal",
        +    "koch",
        +    "campanus",
        +    "regiomontanus"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / location / description
        Previous value: -"Person 1 / Natal location. Prefer a plain place name like 'New York, NY' — resolved via the same lookup `location_search` uses; ambiguous names throw with a disambiguation hint. Supplied person1_latitude/person1_longitude win."New value: +"Person 1 / Natal location as a plain place name like 'New York, NY'; resolved to coordinates and timezone, and ambiguous names are rejected with a disambiguation hint. Supplied person1_latitude/person1_longitude take precedence."
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "synastry",
        -  "transit",
        -  "progressed",
        -  "solar_return",
        -  "lunar_return",
        -  "solar_arc"
        -]New value: +[
        +  "synastry",
        +  "transit",
        +  "progressed",
        +  "solar_return",
        +  "lunar_return",
        +  "solar_arc",
        +  "composite",
        +  "davison"
        +]
      • changedInput schema / properties / person1_datetime / description
        Previous value: -"Birth datetime for Person 1 / Natal chart. ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"Birth datetime for Person 1 / Natal chart. ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / person1_latitude / description
        Previous value: -"Birth latitude for Person 1 (decimal degrees, positive = North). Optional if `location` is a place name — the resolver fills it in. Never recall coordinates from memory."New value: +"Birth latitude for Person 1 (decimal degrees, positive = North). Optional if `location` is a place name — the resolver fills it in."
      • changedInput schema / properties / person2_datetime / description
        Previous value: -"Datetime for the outer wheel. Meaning depends on mode: synastry = Person 2 birth datetime; transit/progressed/solar_arc = target date; solar_return/lunar_return = any date within the target year/month. ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"Datetime for the outer wheel. Meaning depends on mode: synastry/composite/davison = Person 2 birth datetime; transit/progressed/solar_arc = target date; solar_return/lunar_return = any date within the target year/month. ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
    • Changedexplore_human_design4 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 birth datetime in UTC, e.g. '1990-04-15T19:30:00Z'. Human Design is time-sensitive — accuracy to the minute matters. Include 'Z' or a timezone offset."New value: +"ISO 8601 birth datetime in UTC, e.g. '1990-04-15T19:30:00Z'. Human Design is time-sensitive — accuracy to the minute matters. Must include 'Z' or a timezone offset."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Never recall coordinates from memory; either supply a place name or resolve with location_search first."New value: +"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Takes decimal degrees, not a place name."
      • changedInput schema / properties / location / description
        Previous value: -"Birth location. Prefer a plain place name like 'New York, NY' — the server resolves it via the same lookup `location_search` uses (unambiguous names → coords + timezone; ambiguous names throw with a disambiguation hint). If neither location nor lat/lon is supplied the call is rejected — no more silent 0°N 0°E charts."New value: +"Birth location as a plain place name like 'New York, NY'; the server resolves it to coordinates and timezone (ambiguous names are rejected with a disambiguation hint). If neither location nor lat/lon is supplied the call is rejected."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone name for the birth location (e.g. 'America/New_York'). Highly recommended for accuracy if providing local birth time without a UTC offset. Enables correct UTC conversion for precise Personality and Design positions."New value: +"IANA timezone name for the birth location (e.g. 'America/New_York'). Used to convert a local birth time without a UTC offset to UTC for Personality and Design positions."
    • Changedexplore_human_design_connection5 fields changed
      • changedInput schema / properties / layout / description
        Previous value: -"Overlay composition. 'graph' (default) is the classic bodygraph rectangle with connected channels classified by connection type; 'mandala' nests the same overlay inside the concentric ring set the natal chart uses. Set by the in-iframe layout toggle, never by the model."New value: +"Overlay composition. 'graph' (default) is the classic bodygraph rectangle with connected channels classified by connection type; 'mandala' nests the same overlay inside the concentric ring set the natal chart uses. Supplied by the in-iframe layout toggle."
      • changedInput schema / properties / person_a / properties / location / description
        Previous value: -"Birth location, e.g. 'New York, NY' — resolved like location_search (ambiguous names throw). Omitting both this and lat/lon rejects the call rather than defaulting to 0°N 0°E."New value: +"Birth location, e.g. 'New York, NY' — resolved to coordinates and timezone (ambiguous names are rejected). Omitting both this and lat/lon rejects the call."
      • changedInput schema / properties / person_b / properties / location / description
        Previous value: -"Birth location, e.g. 'New York, NY' — resolved like location_search (ambiguous names throw). Omitting both this and lat/lon rejects the call rather than defaulting to 0°N 0°E."New value: +"Birth location, e.g. 'New York, NY' — resolved to coordinates and timezone (ambiguous names are rejected). Omitting both this and lat/lon rejects the call."
      • addedInput schema / properties / render_token
        Added value: +{
        +  "description": "Supplied by the embedded app when it re-renders a chart it already paid for (e.g. to match the host's light/dark theme).",
        +  "type": "string"
        +}
      • changedInput schema / properties / theme / description
        Previous value: -"Visual theme for the overlay bodygraph. Set automatically by the embedded app to match the host; defaults to dark. You normally never need to pass this."New value: +"Visual theme for the overlay bodygraph. Supplied by the embedded app to match the host; defaults to dark."
    • Changedexplore_human_design_transit5 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"Natal birth datetime, ISO 8601 (e.g. '1990-04-15T19:30:00Z'). Include 'Z' or an offset, or supply timezone for local time. HD is time-sensitive to the minute."New value: +"Natal birth datetime, ISO 8601 (e.g. '1990-04-15T19:30:00Z'). Must include 'Z' or an offset, or be a local time given with timezone. HD is time-sensitive to the minute."
      • changedInput schema / properties / layout / description
        Previous value: -"Overlay composition. 'graph' (default) is the classic bodygraph rectangle with the transit's activated channels highlighted; 'mandala' nests the same overlay inside the concentric ring set the natal chart uses. Set by the in-iframe layout toggle, never by the model."New value: +"Overlay composition. 'graph' (default) is the classic bodygraph rectangle with the transit's activated channels highlighted; 'mandala' nests the same overlay inside the concentric ring set the natal chart uses. Supplied by the in-iframe layout toggle."
      • changedInput schema / properties / location / description
        Previous value: -"Natal birth location. Prefer a plain place name like 'New York, NY' — the server resolves it via the same lookup `location_search` uses (unambiguous names → coords + timezone; ambiguous names throw with a disambiguation hint). If neither location nor lat/lon is supplied the call is rejected — no silent 0°N 0°E charts."New value: +"Natal birth location as a plain place name like 'New York, NY'; the server resolves it to coordinates and timezone (ambiguous names are rejected with a disambiguation hint). If neither location nor lat/lon is supplied the call is rejected."
      • addedInput schema / properties / render_token
        Added value: +{
        +  "description": "Supplied by the embedded app when it re-renders a chart it already paid for (e.g. to match the host's light/dark theme).",
        +  "type": "string"
        +}
      • changedInput schema / properties / theme / description
        Previous value: -"Visual theme for the overlay bodygraph. Set automatically by the embedded app to match the host; defaults to dark. You normally never need to pass this."New value: +"Visual theme for the overlay bodygraph. Supplied by the embedded app to match the host; defaults to dark."
    • Changedexplore_natal_chart4 fields changed
      • changedInput schema / properties / bodies / description
        Previous value: -"Optional list of body names to include. Defaults to 13 classical bodies (Sun through Pluto + Chiron + Nodes). Use 'all' as a single item to include every available body (Lilith, Ceres, Juno, Vesta, Pallas, Vertex, etc.). Example: ['sun','moon','lilith','vertex']."New value: +"Optional list of body names to include. Defaults to 13 classical bodies (Sun through Pluto + Chiron + Nodes). Use 'all' as a single item to include every available body (the three Liliths — mean, true and interpolated — Ceres, Juno, Vesta, Pallas, Pholus, the 8 trans-Neptunian objects — eris, sedna, makemake, haumea, quaoar, orcus, ixion, varuna — and the 8 Uranian/Hamburg-School points — cupido, hades, zeus, kronos, apollon, admetos, vulkanus, poseidon). Lilith slugs: 'lilith' (mean), 'lilith_true', 'lilith_interpolated'. Example: ['sun','moon','lilith','sedna']."
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. If you supply lat/lon directly, resolve them with location_search first; never recall coordinates from memory."New value: +"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Takes decimal degrees, not a place name."
      • changedInput schema / properties / location / description
        Previous value: -"Birth location. Prefer a plain place name like 'New York, NY' — the server resolves it via the same lookup `location_search` uses (unambiguous names → coords + timezone; ambiguous names throw with a disambiguation hint). If you already have coords, either omit this or use it as a display caption; supplied coords always win."New value: +"Birth location as a plain place name like 'New York, NY'; the server resolves it to coordinates and timezone (ambiguous names are rejected with a disambiguation hint). Supplied coordinates take precedence over it."
    • Changedexplore_transit_timeline6 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."New value: +"End of the transit search window. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."
      • changedInput schema / properties / natal_datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / natal_latitude / description
        Previous value: -"Latitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Latitude of birth location in decimal degrees."
      • addedInput schema / properties / orb_deg
        Added value: +{
        +  "description": "Orb in degrees that defines when a transit starts and ends (the in-orb window around each exact hit). Default 1. Greater than 0, at most 15.",
        +  "type": "number"
        +}
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."New value: +"Start of the transit search window. ISO 8601 date (YYYY-MM-DD) or zoned datetime; a naive clock time is rejected. A bare date covers the whole UTC day: start at 00:00, end at 23:59:59."
      • changedInput schema / properties / transiting_planets / description
        Previous value: -"Transiting planet IDs to search, e.g. ['saturn','jupiter','uranus','pluto','chiron']. Omit to search all outer planets."New value: +"Transiting planet IDs to search, e.g. ['saturn','jupiter','uranus','pluto','chiron']. Omit to search Sun through Saturn; Uranus, Neptune, Pluto and Chiron are searched only when named."
    • Changedexplore_vedic_chart4 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 birth datetime in UTC, e.g. '1990-06-15T14:30:00Z'. Include 'Z' or a timezone offset."New value: +"ISO 8601 birth datetime in UTC, e.g. '1990-06-15T14:30:00Z'. Must include 'Z' or a timezone offset."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Never recall coordinates from memory; either supply a place name or resolve with location_search first."New value: +"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. Takes decimal degrees, not a place name."
      • changedInput schema / properties / location / description
        Previous value: -"Birth location. Prefer a plain place name like 'Mumbai, India' — the server resolves it via the same lookup `location_search` uses (unambiguous names → coords + timezone; ambiguous names throw with a disambiguation hint). Supplied coords always win."New value: +"Birth location as a plain place name like 'Mumbai, India'; the server resolves it to coordinates and timezone (ambiguous names are rejected with a disambiguation hint). Supplied coordinates take precedence over it."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone name for the birth location (e.g. 'Asia/Kolkata'). Recommended for accuracy if providing local birth time without a UTC offset."New value: +"IANA timezone name for the birth location (e.g. 'Asia/Kolkata'). Used to convert a local birth time without a UTC offset."
    • Changedhuman_design_chart3 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / include_visual / description
        Previous value: -"When true, renders the Human Design bodygraph as an SVG and embeds it in the response. The bodygraph image will display in the conversation alongside the data. Costs 2 additional credits on top of the base call cost."New value: +"When true, renders the Human Design bodygraph as an SVG and embeds it in the response. Costs 2 additional credits on top of the base call cost."
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude of birth location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Latitude of birth location in decimal degrees (positive = North)."
    • Changedtimezone_resolve2 fields changed
      • addedInput schema / properties / latitude / description
        Added value: +"Latitude in decimal degrees, -90 to 90 (north positive)."
      • addedInput schema / properties / longitude / description
        Added value: +"Longitude in decimal degrees, -180 to 180 (east positive)."
    • Changedvedic_chart2 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."New value: +"ISO 8601 datetime. A datetime with no zone is rejected; give a `Z` or ±HH:MM suffix, or a local time with the `timezone` argument. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (north positive). Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Birth latitude in decimal degrees (north positive)."
  4. 2 tool updatesv4.12.0
    • Changedexplore_bazi_chart7 fields changed
      • addedInput schema / properties / day_boundary
        Added value: +{
        +  "description": "Day-pillar cutover convention. Default zi_hour.",
        +  "enum": [
        +    "zi_hour",
        +    "midnight"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / latitude
        Added value: +{
        +  "description": "Birth latitude, decimal degrees (north+).",
        +  "type": "number"
        +}
      • addedInput schema / properties / longitude
        Added value: +{
        +  "description": "Birth longitude, decimal degrees (east+).",
        +  "type": "number"
        +}
      • addedInput schema / properties / minute
        Added value: +{
        +  "description": "Birth minute (0–59). Optional, defaults to 0. Only matters under true_solar_time or near a boundary.",
        +  "type": "integer"
        +}
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone name for the birth place, e.g. 'Asia/Shanghai'. Only needed when datetime carries a 'Z' or ±HH:MM offset."New value: +"IANA timezone name for the birth place, e.g. 'Asia/Shanghai'. Required to convert a zoned datetime back to local clock; also frames the year/month solar-term boundary."
      • addedInput schema / properties / true_solar_time
        Added value: +{
        +  "description": "Apply true solar time correction (needs latitude+longitude).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / year_boundary
        Added value: +{
        +  "description": "Year-pillar cutover convention. Default lichun.",
        +  "enum": [
        +    "lichun",
        +    "cny"
        +  ],
        +  "type": "string"
        +}
    • Changedlocation_search1 field changed
      • changedInput schema / properties / date / description
        Previous value: -"Optional birth/event date as 'YYYY-MM-DD'. When given, each suggestion also carries utcOffsetAtDate / utcOffsetMinutes / isDst — the UTC offset that actually applied at that place on that date, using historical DST rules. Free: adds no API call and no credits."New value: +"Optional birth/event date as 'YYYY-MM-DD'. When given, each suggestion also carries utcOffsetAtDate / utcOffsetMinutes / isDst — the UTC offset that actually applied at that place on that date, using historical DST rules. Post-1970 is free (local resolution, no API call). Pre-1970, the top match is additionally corrected through the API's historical overlay (1 extra credit) because tzdata models only the zone's reference city before 1970; the remaining suggestions keep their tzdata estimate and are labelled historical_estimate."
  5. 62 tool updatesv4.8.0
    • Addedaccount_usage
    • Changedacg_hits3 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 natal birth date/time."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`. An unstated zone moves every ACG line by ~15° of longitude per hour."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees."New value: +"Birth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Changedacg_power_lines3 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 natal birth date/time."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`. An unstated zone moves every ACG line by ~15° of longitude per hour."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees."New value: +"Birth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Addedbazi_annual_pillar
    • Removedchart_wheel_on_aspect_click
    • Removedchart_wheel_on_house_click
    • Removedchart_wheel_on_planet_click
    • Removedchart_wheel_recalculate
    • Removedchinese_bazi
    • Removeddev_call
    • Addeddev_read_api
    • Removedelectional_aspect_search
    • Changedelectional_moment_analysis1 field changed
      • changedInput schema / properties / date / description
        Previous value: -"ISO 8601 datetime to analyze (e.g., '2026-03-21T12:00:00'). Defaults to now."New value: +"ISO 8601 datetime to analyze, with a zone (e.g., '2026-03-21T12:00:00Z' or '2026-03-21T08:00:00-04:00'). Defaults to now."
    • Changedephemeris_angles_points2 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 date/time."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Removedephemeris_bi_wheel
    • Removedephemeris_chart_wheel
    • Removedephemeris_composite
    • Removedephemeris_composite_midpoint
    • Removedephemeris_dignities
    • Changedephemeris_electional3 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"ISO 8601 end date or datetime for the search window."New value: +"End of the search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude of location in decimal degrees (positive = North)."New value: +"Latitude of location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory."
      • changedInput schema / properties / start_date / description
        Previous value: -"ISO 8601 start date or datetime for the search window (e.g., 2026-03-01)."New value: +"Start of the search window, e.g. '2026-03-01'. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."
    • Removedephemeris_fixed_stars
    • Removedephemeris_hermetic_lots
    • Changedephemeris_house_cusps3 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 date/time in UTC or with offset (e.g. '2026-03-20T12:00:00Z')."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / latitude / description
        Previous value: -"Observer latitude in decimal degrees."New value: +"Observer latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Removedephemeris_lunar_return
    • Removedephemeris_midpoints
    • Changedephemeris_moon_phase2 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime to query. If omitted, returns the current live moon phase (UTC now)."New value: +"ISO 8601 datetime to query, stating its zone ('2026-03-20T12:00:00Z' or '2026-03-20T08:00:00-04:00'), or a local time together with `timezone`. If omitted, returns the current live moon phase (UTC now)."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Removedephemeris_natal_batch
    • Changedephemeris_natal_chart5 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime string, e.g. '1990-04-15T14:30:00' (local time at birth location). Include timezone offset if known, e.g. '1990-04-15T14:30:00-05:00'."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / include_arabic_parts / description
        Previous value: -"Reserved for future use. Hermetic Lots / Arabic Parts are currently available via the dedicated /ephemeris/hermetic-lots endpoint."New value: +"Include Hermetic Lots / Arabic Parts in the natal response (routed as `options.include_hermetic_lots: true`). For a standalone lots-only payload without a full natal chart, use `/ephemeris/hermetic-lots` instead."
      • changedInput schema / properties / include_fixed_stars / description
        Previous value: -"Reserved for future use. Fixed star positions are currently available via the dedicated /ephemeris/fixed-stars endpoint."New value: +"Include fixed-star positions in the natal response (routed as `configuration.fixed_star_options.include: true`). For a standalone fixed-stars payload without a full natal chart, use `/ephemeris/fixed-stars` instead."
      • changedInput schema / properties / latitude / description
        Previous value: -"Geographic latitude of birth location in decimal degrees (positive = North)."New value: +"Geographic latitude of birth location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone name, e.g. 'America/Denver'. Use this if passing local time without a UTC offset in the datetime string."New value: +"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."
    • Removedephemeris_natal_transits
    • Removedephemeris_overlay
    • Changedephemeris_planet_position3 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 date/time in UTC or with offset (e.g. '2026-03-20T12:00:00Z' or '2026-03-20T12:00:00-05:00')."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / planet_id / description
        Previous value: -"Planet/body ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto, 10=MeanNode, 11=TrueNode, 12=Lilith, 15=Chiron, 17=Ceres, 18=Pallas, 19=Juno, 20=Vesta)."New value: +"Planet/body ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto, 10=North Node (Mean), 11=North Node (True), 12=Lilith (Mean), 15=Chiron, 17=Ceres, 18=Pallas, 19=Juno, 20=Vesta). There is no South Node id — take the North Node and add 180°."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Removedephemeris_planetary_return
    • Changedephemeris_progressed_chart4 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 natal birth date/time."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / birth_latitude / description
        Previous value: -"Birth latitude in decimal degrees."New value: +"Birth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."
      • changedInput schema / properties / target_datetime / description
        Previous value: -"Target date to progress the chart to (ISO 8601)."New value: +"Date to progress the chart to. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Changedephemeris_relocation3 fields changed
      • changedInput schema / properties / natal_datetime / description
        Previous value: -"ISO 8601 birth datetime (local time at birth location)."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / natal_latitude / description
        Previous value: -"Latitude of birth location in decimal degrees."New value: +"Latitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Changedephemeris_retrograde_status3 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 date/time."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / planet_id / description
        Previous value: -"Optional single planet ID (0-9). Omit for all planets."New value: +"Single planet ID (0=Sun, 1=Moon, 2=Mercury, 3=Venus, 4=Mars, 5=Jupiter, 6=Saturn, 7=Uranus, 8=Neptune, 9=Pluto). Pass this whenever the question names a planet — 1 credit. Omit only to sweep all ten — 10 credits."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Changedephemeris_solar_return2 fields changed
      • changedInput schema / properties / birth_datetime / description
        Previous value: -"ISO 8601 birth date/time. Include offset or Z (e.g. '1985-06-21T14:00:00-05:00')."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Changedephemeris_synastry5 fields changed
      • changedInput schema / properties / person_a_datetime / description
        Previous value: -"Person A birth datetime (ISO 8601)."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / person_a_latitude / description
        Previous value: -"Person A birth latitude."New value: +"Person A birth latitude. Resolve from a place name with location_search; never recall coordinates from memory."
      • addedInput schema / properties / person_a_timezone
        Added value: +{
        +  "description": "IANA timezone for Person A's birth location (e.g. `America/Chicago`); required when the datetime is naive.",
        +  "type": "string"
        +}
      • changedInput schema / properties / person_b_datetime / description
        Previous value: -"Person B birth datetime (ISO 8601)."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • addedInput schema / properties / person_b_timezone
        Added value: +{
        +  "description": "IANA timezone for Person B's birth location (e.g. `America/Los_Angeles`); required when the datetime is naive.",
        +  "type": "string"
        +}
    • Changedephemeris_transits5 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"End of the transit search window, ISO 8601 date or datetime (e.g. '2026-06-30')."New value: +"End of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."
      • changedInput schema / properties / natal_datetime / description
        Previous value: -"ISO 8601 birth datetime for the natal chart."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / natal_latitude / description
        Previous value: -"Latitude of birth location in decimal degrees."New value: +"Latitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory."
      • addedInput schema / properties / natal_timezone
        Added value: +{
        +  "description": "IANA timezone for the natal birth location (e.g. `America/Chicago`); required when the datetime is naive.",
        +  "type": "string"
        +}
      • changedInput schema / properties / start_date / description
        Previous value: -"Start of the transit search window, ISO 8601 date or datetime (e.g. '2026-01-01')."New value: +"Start of the transit search window. ISO 8601 date or zoned datetime; a naive clock time is rejected. Date-only resolves to 12:00 UTC."
    • Addedexplore_bazi_chart
    • Addedexplore_bi_wheel
    • Addedexplore_human_design
    • Addedexplore_human_design_connection
    • Addedexplore_human_design_transit
    • Addedexplore_moon_phase
    • Changedexplore_natal_chart7 fields changed
      • addedInput schema / properties / bodies
        Added value: +{
        +  "description": "Optional list of body names to include. Defaults to 13 classical bodies (Sun through Pluto + Chiron + Nodes). Use 'all' as a single item to include every available body (Lilith, Ceres, Juno, Vesta, Pallas, Vertex, etc.). Example: ['sun','moon','lilith','vertex'].",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 datetime string, e.g. '1990-04-15T14:30:00'. Include timezone offset if known, e.g. '1990-04-15T14:30:00-05:00'."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (positive = North)."New value: +"Birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in. If you supply lat/lon directly, resolve them with location_search first; never recall coordinates from memory."
      • changedInput schema / properties / location / description
        Previous value: -"Location name for display only (e.g. 'New York, NY')."New value: +"Birth location. Prefer a plain place name like 'New York, NY' — the server resolves it via the same lookup `location_search` uses (unambiguous names → coords + timezone; ambiguous names throw with a disambiguation hint). If you already have coords, either omit this or use it as a display caption; supplied coords always win."
      • changedInput schema / properties / longitude / description
        Previous value: -"Birth longitude in decimal degrees (positive = East)."New value: +"Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name."
      • changedInput schema / properties / timezone / description
        Previous value: -"IANA timezone name (e.g. 'America/New_York'). Used if datetime has no UTC offset."New value: +"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."
      • changedInput schema / required
        Previous value: -[
        -  "datetime",
        -  "latitude",
        -  "longitude"
        -]New value: +[
        +  "datetime"
        +]
    • Addedexplore_transit_timeline
    • Addedexplore_vedic_chart
    • Removedhd_opposition
    • Removedhd_planetary_return
    • Removedhuman_design_bodygraph
    • Changedhuman_design_chart3 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 birth datetime in UTC, e.g. '1990-04-15T19:30:00Z'. Must include 'Z' or timezone offset."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude of birth location in decimal degrees (positive = North)."New value: +"Latitude of birth location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Removedhuman_design_composite
    • Removedhuman_design_penta
    • Addedlocation_search
    • Addedtimezone_resolve
    • Changedvedic_chart3 fields changed
      • changedInput schema / properties / datetime / description
        Previous value: -"ISO 8601 birth datetime in UTC, e.g. '1990-01-15T08:30:00Z'. Include 'Z' or timezone offset."New value: +"ISO 8601 datetime; zone required — a `Z`/±HH:MM suffix or the `timezone` argument. Date-only resolves to 12:00 UTC. Full rule: server `instructions`."
      • changedInput schema / properties / latitude / description
        Previous value: -"Birth latitude in decimal degrees (north positive)."New value: +"Birth latitude in decimal degrees (north positive). Resolve from a place name with location_search; never recall coordinates from memory."
      • addedInput schema / properties / timezone
        Added value: +{
        +  "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.",
        +  "type": "string"
        +}
    • Removedvenus_eight_year_star
    • Removedvenus_elongations
    • Removedvenus_phase
    • Removedvenus_star_points
    • Removedvenus_star_points_conjunctions
    • Removedvenus_stations
  6. 57 tool updatesv0.1.0
    • First observedacg_hits
    • First observedacg_power_lines
    • First observedauth_login
    • First observedauth_logout
    • First observedauth_status
    • First observedchart_wheel_on_aspect_click
    • First observedchart_wheel_on_house_click
    • First observedchart_wheel_on_planet_click
    • First observedchart_wheel_recalculate
    • First observedchinese_bazi
    • First observeddev_call
    • First observeddev_list_allowed
    • First observedelectional_aspect_search
    • First observedelectional_moment_analysis
    • First observedelectional_station_tracker
    • First observedephemeris_angles_points
    • First observedephemeris_aspect_check
    • First observedephemeris_bi_wheel
    • First observedephemeris_chart_wheel
    • First observedephemeris_composite
    • First observedephemeris_composite_midpoint
    • First observedephemeris_dignities
    • First observedephemeris_electional
    • First observedephemeris_fixed_stars
    • First observedephemeris_hermetic_lots
    • First observedephemeris_house_cusps
    • First observedephemeris_lunar_return
    • First observedephemeris_midpoints
    • First observedephemeris_moon_phase
    • First observedephemeris_natal_batch
    • First observedephemeris_natal_chart
    • First observedephemeris_natal_transits
    • First observedephemeris_next_eclipse
    • First observedephemeris_next_lunar_phase
    • First observedephemeris_overlay
    • First observedephemeris_planet_position
    • First observedephemeris_planetary_return
    • First observedephemeris_progressed_chart
    • First observedephemeris_relocation
    • First observedephemeris_retrograde_status
    • First observedephemeris_solar_return
    • First observedephemeris_synastry
    • First observedephemeris_transits
    • First observedexplore_natal_chart
    • First observedhd_opposition
    • First observedhd_planetary_return
    • First observedhuman_design_bodygraph
    • First observedhuman_design_chart
    • First observedhuman_design_composite
    • First observedhuman_design_penta
    • First observedvedic_chart
    • First observedvenus_eight_year_star
    • First observedvenus_elongations
    • First observedvenus_phase
    • First observedvenus_star_points
    • First observedvenus_star_points_conjunctions
    • First observedvenus_stations

TDQS

A3.8/5.0

Scored across 42 tools

Disambiguation4/5

The set deliberately pairs a visual 'explore_*' tool with a data 'ephemeris_*/vedic_chart/human_design_chart' counterpart, and the descriptions spell out when to use each (picture vs JSON), which keeps most pairs separable. Still, several neighbours are close enough to misselect — explore_moon_phase vs ephemeris_moon_phase vs ephemeris_next_lunar_phase, acg_power_lines vs acg_hits, and location_search vs timezone_resolve — and the routing tool find_calculation vs dev_read_api/dev_write_api adds a layer of choice.

Naming Consistency3/5

Most names are snake_case with a domain prefix, which is readable, but the prefix scheme is applied unevenly: ephemeris_ marks data tools in Western astrology while equally data-oriented tools are named human_design_chart, vedic_chart, bazi_annual_pillar and electional_moment_analysis without it. Mixing modality prefixes (explore_, ephemeris_, dev_, acg_) with bare noun_action names gives no single predictable pattern.

Tool Count2/5

42 tools is heavy even accounting for the unusually wide domain (Western, Vedic, BaZi, Human Design, astrocartography, electional, auth/billing, raw API passthrough). The breadth explains it, but the surface has clearly outgrown what an agent can hold in view, and several tools are thin variants of siblings.

Completeness4/5

Coverage is genuinely deep: natal/transit/progression/return/relocation/synastry data and visuals, houses, angles, ingresses, stations, eclipses, time lords, plus auth and billing lifecycle. Gaps are asymmetric pairs — there is no JSON/data counterpart for Human Design connection or transit composites, and BaZi has only an annual-pillar lookup plus a visual chart with no data endpoint.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An AI-powered metaphysical Bazi calculator that provides accurate Chinese astrological chart calculations for personality analysis and destiny forecasting, addressing inaccuracies in existing AI fortune-telling tools.
    5
    174 npm
    436
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables generation of detailed Chinese Ziwei Doushu (Purple Star) astrological charts with geographic location support and true solar time conversion. Provides tools for geocoding locations, converting Beijing time to apparent solar time, and creating comprehensive astrology readings based on birth information.
    13 npm
    13
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Bazi MCP is an AI based Bazi calculator that provides accurate Bazi chart data for personality analysis and destiny prediction.
    3
    2
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    World's first Vedic Astrology MCP Server — connect Claude, ChatGPT, Cursor, or any AI to real Vedic astrology. Provides horoscope predictions, compatibility matching, numerology, planetary positions, yogas and house analysis via MCP.
    11
    -