Open Ephemeris
Open Ephemeris MCP server provides astrology and ephemeris calculations with interactive chart widgets and raw data tools across multiple traditions.
Compute natal charts, transits, moon phases, eclipses, ingresses, house cusps, angles, aspects, retrogrades, and planet positions.
Explore relationship and predictive charts: synastry, composites, relocation, progressions, solar/lunar/planetary returns, time lords, and transit timelines.
Generate Human Design data and interactive bodygraphs, including transits, connection/synastry, timelines, returns, opposition, and extended placements.
Generate Vedic/Jyotish charts (sidereal, nakshatra, navamsa, dashas, panchang) and BaZi/Four Pillars charts and annual pillars.
Find electional timing windows, moment-quality scores, retrograde stations, and astrocartography lines/hits.
Resolve locations and timezones with historical UTC offsets for accurate birth data.
Check account usage, authenticate/link accounts, and use allowlisted generic read/compute API tools plus a calculation finder.
Render interactive chart wheels, bi-wheels, bodygraphs, Vedic/BaZi grids, moon dials, and transit timelines in supported MCP apps; text/JSON fallback elsewhere.
Provides example curl commands for interacting with the OpenEphemeris REST API, useful for debugging and rapid prototyping.
The MCP server is published as an npm package available for integration with AI agents.
The OpenAPI 3.0 specification can be imported into Postman for API testing and exploration.
Provides Python example scripts for natal charts, transit searches, Human Design, and deep data queries via the OpenEphemeris API.
The OpenAPI 3.0 specification can be imported into Swagger UI for API documentation and testing.
Provides TypeScript example code for web rendering and GeoJSON map visualizers, prepared for React setups.
Open Ephemeris MCP Server

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.

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-serverAny 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)
Replace
YOUR_API_KEY_HEREin 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 |
|
Cursor | One-click deeplink or manual |
|
Claude Desktop (macOS) | Manual |
|
Claude Desktop (Windows) | Manual |
|
Windsurf | Manual |
|
ChatGPT | One-click | |
Claude Web / remote clients | Hosted URL |
|
Client install walkthroughs
Cursor
Click the "Install in Cursor" button above, then replace
YOUR_API_KEY_HEREin Cursor MCP settings.If you prefer manual setup, paste the
mcpServers.openephemerisblock from "Manual install" into~/.cursor/mcp.json.
Claude Desktop (macOS/Windows)
Open the platform config file from the table above.
Add the same
mcpServers.openephemerisblock from "Manual install".Restart Claude Desktop.
Windsurf
Open
~/.codeium/windsurf/mcp_config.json(or the legacy~/.codeium/mcp_config.jsonpath).Add the
mcpServers.openephemerisblock 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/mcpas 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 Ephemerisin any chat. Charts render inline, exactly as they do in Claude. Prefer to wire it yourself? Settings → Plugins → Advanced → Developer mode → + Create app acceptshttps://mcp.openephemeris.com/mcpwith 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 athttps://openephemeris.com/login?signup=true&redirect=%2Fdashboard%3Ftab%3Daccount, then create/manage keys inhttps://openephemeris.com/dashboard?tab=account.Tier-gated endpoint (
403): tool call returns an upgrade-required message withhttps://openephemeris.com/payand 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 (any4xx/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 |
| Natal wheel — planets, houses, aspects, angles | Planets, houses, aspect lines; recalculate with new settings | 1 |
| Two charts on one wheel: transits, synastry, progressions | Either wheel's planets, houses, and the aspects between them | 2 (6 for solar/lunar return) |
| Human Design bodygraph, with a mandala view toggle | Centers, gates, channels, planets, variables | 4 |
| Today's planets laid over a natal bodygraph | Transit-activated channels | 5 |
| Two bodygraphs combined, every shared channel classified | Connection channels by type | 5 |
| South Indian Rashi grid — sidereal placements and Lagna | Each rashi, for its placements and nakshatras | 3 |
| Four Pillars (四柱命盘) — Year, Month, Day, Hour | Each pillar | 3 |
| Upcoming transit hits in date order | Individual hits | 6 for up to 1 year (priced by span) |
| 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 |
| Explorer |
Transit forecast |
| Explorer |
Transit chart snapshot |
| Explorer |
Sign ingresses / planet to degree |
| Explorer |
Moon phase / VOC |
| Explorer |
Eclipse next visible |
| Explorer |
Electional window |
| Pro |
Moment analysis |
| Explorer |
Station tracker |
| Explorer |
Aspect search |
| Pro |
Human Design chart |
| Explorer |
HD composite |
| Explorer |
HD transit overlay |
| Explorer |
HD transit timeline (gates over a date range) |
| Explorer |
HD extended placements (asteroids, angles, lots, stars) |
| Explorer (deep fields Pro) |
HD connection (synastry) |
| Explorer |
HD penta |
| Explorer |
HD return / opposition |
| Explorer |
Vedic chart |
| Explorer |
BaZi (Chinese) |
| Explorer |
Synastry |
| Explorer |
Composite chart |
| Explorer |
Relocation chart |
| Explorer |
Progressed chart |
| Explorer |
Solar return |
| Explorer |
Lunar return |
| Explorer |
Planetary return |
| Explorer |
Astrocartography lines |
| Pro |
ACG hits at location |
| Pro |
Venus Star Points |
| Explorer |
Chart wheel image |
| Explorer |
Bi-wheel image |
| Explorer |
Dignities / Midpoints / 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_calculationsearches the allowlisted operations by plain words and returns the path, inputs, an example and the credit cost (dev_list_allowedlists them all, outside core);dev_read_apiinvokes allowlisted GET (read) operations anddev_write_apiinvokes allowlisted POST/PUT/PATCH/DELETE (write/compute) operations, each bymethod + 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 |
|
| No | HTTP method (defaults to the tool's natural method) |
|
| Yes | Absolute API path, e.g. |
|
| No | Query parameters |
|
| No | JSON body for non-GET requests |
|
| No | Convenience mapping to |
|
| No | Convenience mapping to |
|
| No | Legacy compatibility field |
Environment Variables
Variable | Required | Description |
| Yes (unless service key/JWT used) | API key for Open Ephemeris |
| No | Legacy alias for |
| No | Defaults to |
| No |
|
| No |
|
| No | Set to |
| No | Bearer token auth |
| No | Override allowlist file path |
| 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=1Tool 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-serverOn the remote HTTP server, append ?profile=full to the connector URL (or send X-OE-Tool-Surface: full):
https://mcp.openephemeris.com/mcp?profile=fullToolsets 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-serverhttps://mcp.openephemeris.com/mcp?profile=hd,baziToolset | What it covers | Tools | Approx. tokens |
| Natal, transits, ingresses, synastry, progressions, returns, relocation, time lords, dignities, midpoints, lots, fixed stars, composites, birth-time sensitivity | 38 | 17,700 |
| Human Design charts, transits and transit timeline, extended placements, connection charts, penta, bodygraph | 19 | 8,500 |
| Four Pillars, Ten Gods, element balance, luck pillars, compatibility, Zi Wei Dou Shu | 16 | 8,100 |
| Timing windows, angle crossings, stations, moment analysis | 12 | 4,300 |
| Astrocartography lines and hits | 9 | 3,400 |
| Jyotish Rashi chart, dashas, vargas, Ashtakoota matching | 10 | 3,400 |
| Phases, void-of-course, eclipses | 11 | 3,300 |
| Star points, phases, elongations, stations | 13 | 3,200 |
| 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.
Legal
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=0Registered tools (
OPENEPHEMERIS_PROFILE=dev): 103Typed 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_chartGeneric tools:
dev_list_allowed,dev_read_api,dev_write_api,find_calculation
Allowlist Families
Family | Operations | Example |
| 14 |
|
| 3 |
|
| 3 |
|
| 12 |
|
| 5 |
|
| 6 |
|
| 6 |
|
| 42 |
|
| 2 |
|
| 11 |
|
| 2 |
|
| 1 |
|
| 14 |
|
| 1 |
|
| 1 |
|
| 6 |
|
| 3 |
|
| 5 |
|
| 3 |
|
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 toolsaccount_usageAccount UsageARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | YYYY-MM; default current month. |
TDQS
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.
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.
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.
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.
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.
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 HitsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bodies | No | 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. | |
| timezone | No | IANA zone for a local datetime. | |
| radius_deg | No | Degrees; default 2, max 90. | |
| custom_bodies | No | Enterprise. Own fixed points (longitude or ra_deg/dec_deg), up to 32, 1 credit each. | |
| birth_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| birth_latitude | Yes | Birth latitude. | |
| query_latitude | Yes | Place latitude to check. | |
| birth_longitude | Yes | Birth longitude. | |
| include_aspects | No | Default true. | |
| query_longitude | Yes | Place longitude to check. |
TDQS
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.
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.
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.
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.
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.
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 LinesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bodies | No | 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. | |
| timezone | No | IANA zone for a local datetime. | |
| radius_deg | No | Hit radius, degrees. Default 2. | |
| custom_bodies | No | Enterprise. Own fixed points (longitude or ra_deg/dec_deg), up to 32, 1 credit each. | |
| birth_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| birth_latitude | Yes | Birth latitude. | |
| query_latitude | No | Filter lines near this latitude. | |
| birth_longitude | Yes | Birth longitude. | |
| query_longitude | No | Filter lines near this longitude. |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 AccountADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 StatusARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 PillarARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Gregorian year (1–9999). e.g. 2025. |
TDQS
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.
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.
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.
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.
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.
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 ReadARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| path | Yes | Allowlisted path from find_calculation | |
| query | No | ||
| format | No | Sets query.format | |
| method | No | ||
| preset | No | Sets query.preset | |
| output_mode | No | Legacy |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| path | Yes | Allowlisted path from find_calculation | |
| query | No | ||
| format | No | Sets query.format | |
| method | No | ||
| preset | No | Sets query.preset | |
| output_mode | No | Legacy |
TDQS
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.
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.
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.
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.
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.
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 AnalysisARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ISO 8601; must include Z/offset. Default now. | |
| format | No | Output format. | |
| latitude | No | Latitude, decimal degrees (+N). Optional; without coordinates sect defaults to diurnal. | |
| longitude | No | Longitude, decimal degrees (+E). Pair with latitude. |
TDQS
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.
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.
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.
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.
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.
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 TrackerARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format. | |
| planets | No | Comma list, mercury…pluto. Default Mercury–Saturn. | |
| end_date | No | End date (ISO 8601). Defaults to +90 days. | |
| start_date | No | Start date (ISO 8601). Defaults to today. |
TDQS
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.
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.
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.
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.
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.
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 & PointsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| latitude | Yes | Observer latitude. | |
| timezone | No | IANA zone for a local datetime. | |
| longitude | Yes | Observer longitude. |
TDQS
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.
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.
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.
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.
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.
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 CheckARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| max_orb | No | Maximum orb in degrees. Default 8°. | |
| longitude_1 | Yes | First ecliptic longitude (0-360). | |
| longitude_2 | Yes | Second ecliptic longitude (0-360). |
TDQS
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.
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.
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.
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.
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.
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 CuspsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| latitude | Yes | Observer latitude. | |
| timezone | No | IANA zone for a local datetime. | |
| longitude | Yes | Observer longitude. | |
| house_systems | No | Codes, e.g. ['P','W']. Default ['P']. |
TDQS
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.
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.
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.
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.
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.
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 IngressesARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| sign | No | Only ingresses into this sign. | |
| degree | No | Longitude 0-360 (0 Cancer = 90). One planet only. | |
| planets | No | e.g. ['saturn']. Default Sun to Pluto; the Moon only on its own. | |
| end_date | No | Default a year on (Moon: 30 days); not with `degree`. ISO 8601 date (whole UTC day) or zoned datetime. | |
| start_date | No | Default now. ISO 8601 date (whole UTC day) or zoned datetime. | |
| max_crossings | No | With `degree`, default 3. |
TDQS
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.
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.
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.
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.
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.
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 PhaseARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| datetime | No | ISO 8601 with a required zone, or local time with `timezone`. Default now. | |
| latitude | No | Optional; for local void-of-course. | |
| timezone | No | IANA zone for a local datetime. | |
| longitude | No | Optional; for local void-of-course. |
TDQS
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.
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.
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.
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.
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.
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 ChartARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 'llm' = compact; 'json' = full (default). | |
| ayanamsa | No | Default lahiri; sidereal only. | |
| datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| latitude | Yes | Birth latitude. | |
| timezone | No | IANA zone for a local datetime. | |
| analytics | No | Opt-in extras, free. | |
| longitude | Yes | Birth longitude. | |
| zodiac_type | No | Default tropical. `sidereal` subtracts the ayanamsa (~24°) from every longitude. | |
| declinations | No | Add declinations, out-of-bounds flags and parallels (1.5° orb). | |
| house_system | No | Default placidus. | |
| visual_config | No | Rendering options for include_visual. | |
| include_visual | No | Embed a chart-wheel SVG. +2 credits. | |
| asteroid_groups | No | Add a family: major (Ceres–Vesta), centaur, tno (Eris, Sedna, …) or main_belt (12 large). | |
| additional_objects | No | Extra body ids from GET /catalogs/bodies, e.g. ['eris','sedna']; free; 1600–2200 CE, else listed in omitted_bodies. | |
| include_fixed_stars | No | Add fixed-star conjunctions to bodies and angles. | |
| solar_relationships | No | Add combustion, cazimi and under-beams. | |
| include_arabic_parts | No | Add Hermetic Lots / Arabic Parts. | |
| include_minor_aspects | No | Add minor aspects. |
TDQS
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.
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.
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.
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.
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.
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 FinderARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | No | Optional observer latitude; with longitude adds local times and visibility. | |
| longitude | No | Optional; pair with latitude. | |
| after_date | No | ISO 8601 date; default today. | |
| eclipse_type | Yes | 'any' = next of either. |
TDQS
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.
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.
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.
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.
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.
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 PhaseARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 1–12, 2 credits each. Default 1. | |
| phase | Yes | Phase to find. | |
| after_date | No | ISO 8601 date; default today (UTC). |
TDQS
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.
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.
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.
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.
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.
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 PositionARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| latitude | No | Optional; topocentric if set. | |
| timezone | No | IANA zone for a local datetime. | |
| longitude | No | Optional; topocentric if set. | |
| planet_id | Yes | 0 Sun, 1 Moon, 2–9 Mercury–Pluto, 10 mean node, 11 true node, 12 Lilith, 15 Chiron, 17–20 Ceres/Pallas/Juno/Vesta. |
TDQS
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.
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.
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.
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.
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.
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 ChartARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional subject label. | |
| method | No | Default secondary (1 day = 1 year). | |
| converse | No | Count backward from birth. | |
| timezone | No | IANA zone for a local datetime. | |
| birth_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| birth_latitude | Yes | Birth latitude. | |
| include_visual | No | Also return a natal-inside, progressed-outside bi-wheel as an image (+2 credits). | |
| birth_longitude | Yes | Birth longitude. | |
| include_aspects | No | Add the aspect grid. Default false. | |
| target_datetime | Yes | Progress to. ISO 8601 date or zoned datetime. |
TDQS
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.
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.
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.
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.
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.
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 ChartARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 'llm' = compact. | |
| timezone | No | IANA zone for a local datetime. | |
| house_system | No | House system to use. Defaults to 'placidus'. | |
| include_visual | No | Also return the relocated chart wheel as an image (+2 credits). | |
| natal_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| natal_latitude | Yes | Birth latitude. | |
| natal_longitude | Yes | Birth longitude. | |
| relocation_latitude | Yes | New-place latitude (+N). | |
| relocation_longitude | Yes | New-place longitude (+E). |
TDQS
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.
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.
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.
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.
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.
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 StatusARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| timezone | No | IANA zone for a local datetime. | |
| planet_id | No | 0 Sun, 1 Moon, 2–9 Mercury–Pluto. 1 credit; omit for all ten (10 credits). |
TDQS
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.
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.
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.
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.
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.
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 ReturnARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| timezone | No | IANA zone for a local datetime. | |
| visual_config | No | Rendering options for include_visual. | |
| birth_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| birth_latitude | No | Optional birth latitude. | |
| include_visual | No | Embed a chart-wheel SVG. +2 credits. | |
| birth_longitude | No | Optional birth longitude. | |
| return_latitude | No | Optional return-location latitude. | |
| target_datetime | No | ISO 8601 near the return; zone required. Default about a year from now. | |
| return_longitude | No | Optional return-location longitude. |
TDQS
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.
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.
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.
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.
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.
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 ChartARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 'llm' = compact. | |
| house_system | No | Default placidus. | |
| visual_config | No | Rendering options for include_visual. | |
| include_visual | No | Embed a bi-wheel SVG. +2 credits. | |
| person_a_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| person_a_latitude | Yes | Person A birth latitude. | |
| person_a_timezone | No | IANA zone for Person A's birth location (local datetime). | |
| person_b_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| person_b_latitude | Yes | Person B birth latitude. | |
| person_b_timezone | No | IANA zone for Person B's birth location (local datetime). | |
| person_a_longitude | Yes | Person A birth longitude. | |
| person_b_longitude | Yes | Person B birth longitude. |
TDQS
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.
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.
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.
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.
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.
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 LordsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lot | No | Lot to release from. Default spirit. | |
| to_date | No | Window end. Default one year after from_date; at most 25 years. | |
| timezone | No | IANA zone for a local datetime. | |
| from_date | No | Window start, ISO 8601 with offset or Z. Default now. | |
| techniques | No | Default zodiacal_releasing and profections. | |
| birth_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| birth_latitude | Yes | Birth latitude. | |
| birth_longitude | Yes | Birth longitude. |
TDQS
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.
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.
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.
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.
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.
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 SearchARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | time (default) or significance. | |
| end_date | Yes | Window end. ISO 8601 date (whole UTC day) or zoned datetime. | |
| start_date | Yes | Window start. ISO 8601 date (whole UTC day) or zoned datetime. | |
| aspect_angle | No | Degrees added to each natal longitude: 0 conjunction (default), 90 square, 120 trine, 180 opposition. | |
| natal_points | No | E.g. ['sun','moon','asc','mc']. Default all core points. | |
| natal_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| natal_latitude | Yes | Birth latitude. | |
| natal_timezone | No | IANA zone for the natal birth location (local datetime). | |
| natal_longitude | Yes | Birth longitude. | |
| transiting_planets | No | E.g. ['saturn','pluto','chiron']. Default Sun through Saturn; outers and Chiron only when named. |
TDQS
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.
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.
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.
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.
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.
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 ExplorerARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| day | No | Birth day of month (1–31). | |
| hour | No | 0–23. Default 12. | |
| year | No | Gregorian birth year, e.g. 1987. | |
| month | No | Birth month (1–12). | |
| minute | No | 0–59. Default 0. | |
| datetime | No | 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. | |
| latitude | No | Birth latitude, decimal degrees (north+). | |
| timezone | No | IANA zone of the birth place; needed for a zoned datetime. | |
| longitude | No | Birth longitude. | |
| day_boundary | No | Day-pillar cutover convention. Default zi_hour. | |
| year_boundary | No | Year-pillar cutover convention. Default lichun. | |
| true_solar_time | No | Apply true solar time correction (needs latitude+longitude). |
TDQS
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.
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.
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.
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.
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.
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 ExplorerARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Default synastry. | |
| location | No | Person 1 place name, e.g. 'New York, NY'; geocoded. Coordinates win if given. | |
| house_system | No | Default placidus; both rings. | |
| person1_name | No | Person 1 display name. | |
| person2_name | No | Person 2 display name. | |
| person1_datetime | Yes | Person 1 / natal birth. ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| person1_latitude | No | Person 1 latitude (+N). Optional with `location`. | |
| person1_timezone | No | IANA zone for Person 1's birth location (local datetime). | |
| person2_datetime | Yes | 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`). | |
| person2_latitude | No | Person 2 latitude. Required in synastry unless `person2_location`; other modes default to Person 1. | |
| person2_location | No | Person 2 / outer-chart place name; coordinates win. | |
| person2_timezone | No | IANA zone for Person 2 / the outer chart (local datetime). | |
| person1_longitude | No | Person 1 longitude (+E). Optional with `location`. | |
| person2_longitude | No | Person 2 longitude; same rule as latitude. |
TDQS
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.
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.
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.
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.
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.
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 ExplorerARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| datetime | Yes | ISO 8601 with a required zone, or local time with `timezone`; minute-accurate. | |
| latitude | No | Birth latitude (optional with `location`). | |
| location | No | Birth place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon. | |
| timezone | No | IANA zone for a local birth time. | |
| longitude | No | Birth longitude (optional with `location`). |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | Set by the embedded app. Default dark. | |
| layout | No | Set by the embedded app. Default graph. | |
| person_a | Yes | First person's birth data. | |
| person_b | Yes | Second person's birth data. | |
| render_token | No | Set by the embedded app. |
TDQS
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.
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.
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.
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.
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.
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 OverlayARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | Set by the embedded app. Default dark. | |
| layout | No | Set by the embedded app. Default graph. | |
| datetime | Yes | Natal birth: ISO 8601 with a required zone, or local time with `timezone`. | |
| latitude | No | Natal latitude (optional with `location`). | |
| location | No | Natal place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon. | |
| timezone | No | IANA zone for a local birth time. | |
| longitude | No | Natal longitude (optional with `location`). | |
| render_token | No | Set by the embedded app. | |
| transit_datetime | No | ISO 8601; must include Z/offset. Default now. |
TDQS
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.
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.
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.
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.
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.
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 ExplorerARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| datetime | No | ISO 8601 with a required zone, or local time with `timezone`. Default now. | |
| latitude | No | Optional; for local void-of-course. | |
| timezone | No | IANA zone for a local datetime. | |
| longitude | No | Optional; for local void-of-course. |
TDQS
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.
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.
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.
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.
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.
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 ExplorerARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| bodies | No | Default 13 (Sun–Pluto, Chiron, Nodes); ['all'] adds Liliths, asteroids, TNOs, Uranian points. E.g. ['sun','lilith','lilith_true','sedna']. | |
| ayanamsa | No | Default lahiri; sidereal only. | |
| datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| latitude | No | Birth latitude (optional with `location`). | |
| location | No | Birth place name, e.g. 'New York, NY'; geocoded. Coordinates win if given. | |
| timezone | No | IANA zone for a local datetime. | |
| longitude | No | Birth longitude (optional with `location`). | |
| zodiac_type | No | Default tropical. | |
| house_system | No | Default placidus. |
TDQS
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.
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.
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.
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.
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.
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 TimelineARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| orb_deg | No | In-orb window around each hit, degrees. Default 1, max 15. | |
| end_date | Yes | Window end. ISO 8601 date (whole UTC day) or zoned datetime. | |
| start_date | Yes | Window start. ISO 8601 date (whole UTC day) or zoned datetime. | |
| aspect_angle | No | Degrees: 0 conjunction (default), 60, 90, 120, 180. | |
| natal_points | No | E.g. ['sun','moon','asc','mc']. Default the 7 classical bodies. | |
| natal_datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| natal_latitude | Yes | Birth latitude. | |
| natal_timezone | No | IANA zone for the natal birth location (local datetime). | |
| natal_longitude | Yes | Birth longitude. | |
| transiting_planets | No | E.g. ['saturn','pluto','chiron']. Default Sun through Saturn; outers and Chiron only when named. |
TDQS
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.
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.
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.
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.
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.
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 ExplorerARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| ayanamsa | No | Default lahiri. | |
| datetime | Yes | ISO 8601 with a required zone, or local time with `timezone`. | |
| latitude | No | Birth latitude (optional with `location`). | |
| location | No | Birth place name, e.g. 'Mumbai, India'; geocoded. Coordinates win if given. | |
| timezone | No | IANA zone for a local birth time. | |
| longitude | No | Birth longitude (optional with `location`). |
TDQS
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.
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.
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.
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.
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.
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 CalculationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Matches to return (default 3) | |
| query | Yes | What to calculate, in plain words |
TDQS
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.
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.
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.
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.
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.
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 ChartARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 'llm' = compact; 'json' = full. | |
| datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| latitude | No | Birth latitude. | |
| timezone | No | IANA zone for a local datetime. | |
| longitude | No | Birth longitude. | |
| chart_variant | No | 'dream': 15-gate chart, no type or profile. Default 'waking'; not with include_visual. | |
| visual_config | No | Rendering options for include_visual. | |
| include_visual | No | Embed a bodygraph SVG. +2 credits. |
TDQS
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.
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.
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.
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.
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.
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 TimelineARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| bodies | No | Default all but the Moon. | |
| end_date | Yes | ISO 8601 date (whole UTC day) or zoned datetime. | |
| latitude | No | Birth latitude. | |
| timezone | No | IANA zone for a local datetime. | |
| longitude | No | Birth longitude. | |
| start_date | Yes | ISO 8601 date (whole UTC day) or zoned datetime. | |
| natal_gates | No | The person's gates (1-64), instead of birth data. | |
| include_lines | No | Add line stays (about 6x the rows). | |
| birth_datetime | No | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). |
TDQS
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.
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.
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.
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.
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.
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.
location_searchLocation SearchARead-onlyIdempotentInspect
Use this when the user gives a birth city, hometown or any place name — 'born in Chicago', 'Mumbai, India', 'what timezone was Paris in 1985' — and a chart needs coordinates and a timezone. Returns display name, region (state/province), latitude, longitude and IANA timezone. With the birth date as date it also returns utcOffsetAtDate, the historically-correct UTC offset for that place on that date; post-1970 dates resolve locally at no extra cost, pre-1970 dates consult the historical overlay for the top match (+1 credit) and return its provenance. The result is flagged ambiguous when several places share the name (e.g. "portland"). A trailing "City, ST" qualifier in the query is honored. CREDIT COST: 1 credit per call.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD; adds the UTC offset in force there that day (historical DST). Pre-1970 corrects the top match (+1 credit). | |
| near | No | 'lat,lon' to boost nearby places. | |
| query | Yes | Search query for location, e.g. 'Los Angeles' or 'Wakefield, MI' | |
| admin1 | No | Alias for region (region wins if both supplied). | |
| region | No | State/province to boost, e.g. 'MI'. | |
| country | No | ISO country code to boost, e.g. 'US'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/non-destructive annotations by disclosing credit cost (1 per call, +1 for pre-1970 historical overlay), that post-1970 resolution is local and free, that provenance is returned for overlay results, and that results are flagged `ambiguous` on name collisions. These are non-obvious cost and correctness behaviors an agent must plan around.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the trigger scenario and the return shape before the cost/caveat detail, and every sentence carries information. It is dense and the mid-section on pre/post-1970 resolution is a long compound sentence that slows parsing, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 contract and does: it enumerates display name, region, lat, lon, IANA timezone, conditional `utcOffsetAtDate`, provenance, and the `ambiguous` flag. Combined with credit cost and the date caveat, an agent has everything needed to call this correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 six parameters and a baseline 3 applies. The description still adds value beyond it: the `date` parameter is reframed as producing `utcOffsetAtDate` with historical-DST correctness, and it discloses that a trailing 'City, ST' qualifier in `query` is honored — behavior not evident from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search for a place, return coordinates and IANA timezone) and anchors it to a real user scenario ('born in Chicago', 'what timezone was Paris in 1985'). An agent can tell what it does immediately, but the description never distinguishes it from the sibling `timezone_resolve`, which plausibly overlaps on the timezone half of the job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: use when the user supplies a birth city/hometown/place name and a chart needs coordinates plus timezone. It also implicitly tells the agent to pass `date` when a historical offset is needed. No when-not guidance or named alternative (e.g. timezone_resolve) is offered, 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.
timezone_resolveTimezone ResolveARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | YYYY-MM-DD; adds the UTC offset in force that day. Pre-1970 +1 credit. | |
| latitude | Yes | Decimal degrees (+N). | |
| longitude | Yes | Decimal degrees (+E). |
TDQS
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.
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.
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.
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.
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.
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 ChartARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vargas | No | Divisional chart numbers to add, e.g. [9, 10]. | |
| ayanamsa | No | Default lahiri. | |
| datetime | Yes | ISO 8601; zone required (`Z`/offset, or local time plus `timezone`). | |
| latitude | Yes | Birth latitude (+N). | |
| panchang | No | Return the day's panchang instead (tithi, yoga, nakshatra, Rahu Kaal). | |
| timezone | No | IANA zone for a local datetime. | |
| longitude | Yes | Birth longitude (+E). | |
| dasha_as_of | No | ISO 8601 instant (UTC if zone-less): add the dasha periods running then. | |
| dasha_depth | No | 1-3: add the Vimshottari dasha tree (1 maha, 2 antar, 3 pratyantar). |
TDQS
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.
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.
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.
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.
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.
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.
38 tool updates
v4.29.0- Changed
account_usage1 field changed- changed
Input schema / properties / month / descriptionPrevious 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."
- Changed
acg_hits10 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / birth_latitude / descriptionPrevious value: -"Birth latitude in decimal degrees."New value: +"Birth latitude." - changed
Input schema / properties / birth_longitude / descriptionPrevious value: -"Birth longitude in decimal degrees."New value: +"Birth longitude." - changed
Input schema / properties / bodies / descriptionPrevious 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." - changed
Input schema / properties / custom_bodies / descriptionPrevious 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." - changed
Input schema / properties / include_aspects / descriptionPrevious value: -"Include aspect lines in results (default true)."New value: +"Default true." - changed
Input schema / properties / query_latitude / descriptionPrevious value: -"Latitude of the location to check for nearby lines."New value: +"Place latitude to check." - changed
Input schema / properties / query_longitude / descriptionPrevious value: -"Longitude of the location to check for nearby lines."New value: +"Place longitude to check." - changed
Input schema / properties / radius_deg / descriptionPrevious value: -"Search radius in degrees (default 2°, max 90°)."New value: +"Degrees; default 2, max 90." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
acg_power_lines7 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / birth_latitude / descriptionPrevious value: -"Birth latitude in decimal degrees."New value: +"Birth latitude." - changed
Input schema / properties / birth_longitude / descriptionPrevious value: -"Birth longitude in decimal degrees."New value: +"Birth longitude." - changed
Input schema / properties / bodies / descriptionPrevious 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." - changed
Input schema / properties / custom_bodies / descriptionPrevious 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." - changed
Input schema / properties / radius_deg / descriptionPrevious value: -"Search radius in degrees for hits filtering. Default 2°."New value: +"Hit radius, degrees. Default 2." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Removed
dev_list_allowed - Changed
dev_read_api7 fields changed- removed
Input schema / properties / body / descriptionRemoved value: -"JSON request body (optional)" - changed
Input schema / properties / format / descriptionPrevious value: -"Convenience: if provided, set query.format (optional). 'llm' is canonical; 'llm_v2' is accepted as a legacy alias."New value: +"Sets query.format" - removed
Input schema / properties / method / descriptionRemoved value: -"HTTP method (always GET)" - changed
Input schema / properties / output_mode / descriptionPrevious value: -"Legacy convenience (deprecated): if provided, set query.output_mode and also map to query.preset/query.format when possible."New value: +"Legacy" - changed
Input schema / properties / path / descriptionPrevious value: -"Absolute API path of an allowlisted GET endpoint (e.g., /ephemeris/moon/phase)"New value: +"Allowlisted path from find_calculation" - changed
Input schema / properties / preset / descriptionPrevious value: -"Convenience: if provided, set query.preset (optional)."New value: +"Sets query.preset" - removed
Input schema / properties / query / descriptionRemoved value: -"Query params (optional)"
- Added
dev_write_api - Changed
electional_moment_analysis3 fields changed- changed
Input schema / properties / date / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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." - changed
Input schema / properties / longitude / descriptionPrevious 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."
- Changed
electional_station_tracker1 field changed- changed
Input schema / properties / planets / descriptionPrevious 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."
- Changed
ephemeris_angles_points2 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`)." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
ephemeris_house_cusps5 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`)." - changed
Input schema / properties / house_systems / descriptionPrevious value: -"List of house system codes. E.g. ['P', 'W']. Defaults to ['P'] (Placidus)."New value: +"Codes, e.g. ['P','W']. Default ['P']." - changed
Input schema / properties / latitude / descriptionPrevious value: -"Observer latitude in decimal degrees."New value: +"Observer latitude." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Observer longitude in decimal degrees."New value: +"Observer longitude." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
ephemeris_ingresses2 fields changed- changed
Input schema / properties / end_date / descriptionPrevious 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." - changed
Input schema / properties / start_date / descriptionPrevious 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."
- Changed
ephemeris_moon_phase4 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious value: -"Observer latitude (optional, used for local void-of-course calculations)."New value: +"Optional; for local void-of-course." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Observer longitude (optional, used for local void-of-course calculations)."New value: +"Optional; for local void-of-course." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
ephemeris_natal_chart20 fields changed- changed
Input schema / properties / additional_objects / descriptionPrevious 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." - changed
Input schema / properties / analytics / descriptionPrevious 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." - changed
Input schema / properties / asteroid_groups / descriptionPrevious 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)." - changed
Input schema / properties / ayanamsa / descriptionPrevious value: -"Sidereal system. Default lahiri. Only read when zodiac_type is `sidereal`."New value: +"Default lahiri; sidereal only." - changed
Input schema / properties / datetime / descriptionPrevious 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`)." - changed
Input schema / properties / declinations / descriptionPrevious 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)." - changed
Input schema / properties / format / descriptionPrevious 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)." - changed
Input schema / properties / house_system / descriptionPrevious value: -"House system to use. Defaults to 'placidus' if omitted."New value: +"Default placidus." - changed
Input schema / properties / include_arabic_parts / descriptionPrevious value: -"Include Hermetic Lots / Arabic Parts in the natal response (routed as `options.include_hermetic_lots: true`)."New value: +"Add Hermetic Lots / Arabic Parts." - changed
Input schema / properties / include_fixed_stars / descriptionPrevious 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." - changed
Input schema / properties / include_minor_aspects / descriptionPrevious 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." - changed
Input schema / properties / include_visual / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious value: -"Geographic latitude of birth location in decimal degrees (positive = North)."New value: +"Birth latitude." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Geographic longitude of birth location in decimal degrees (positive = East)."New value: +"Birth longitude." - changed
Input schema / properties / solar_relationships / descriptionPrevious value: -"Classify combustion, cazimi and under-beams for Moon–Saturn relative to the Sun."New value: +"Add combustion, cazimi and under-beams." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime." - changed
Input schema / properties / visual_config / descriptionPrevious value: -"Optional rendering preferences (only used when include_visual=true)."New value: +"Rendering options for include_visual." - changed
Input schema / properties / visual_config / properties / size / descriptionPrevious value: -"Canvas size in pixels, 200–4000. Default: 800."New value: +"Pixels, 200–4000. Default 800." - changed
Input schema / properties / visual_config / properties / theme / descriptionPrevious value: -"Color theme. Default: light."New value: +"Default light." - changed
Input schema / properties / zodiac_type / descriptionPrevious 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."
- Changed
ephemeris_next_eclipse4 fields changed- changed
Input schema / properties / after_date / descriptionPrevious value: -"ISO 8601 date to search after (e.g. '2026-01-01'). Defaults to today if omitted."New value: +"ISO 8601 date; default today." - changed
Input schema / properties / eclipse_type / descriptionPrevious value: -"Eclipse type to search for. Use 'any' for whichever comes first (solar or lunar)."New value: +"'any' = next of either." - changed
Input schema / properties / latitude / descriptionPrevious 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." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Observer longitude in decimal degrees (optional, pair with latitude)."New value: +"Optional; pair with latitude."
- Changed
ephemeris_next_lunar_phase3 fields changed- changed
Input schema / properties / after_date / descriptionPrevious 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)." - changed
Input schema / properties / count / descriptionPrevious value: -"Number of upcoming occurrences to return (1-12, 2 credits each). Default 1."New value: +"1–12, 2 credits each. Default 1." - changed
Input schema / properties / phase / descriptionPrevious 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."
- Changed
ephemeris_planet_position5 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`)." - changed
Input schema / properties / latitude / descriptionPrevious value: -"Observer latitude for topocentric position (optional). Omit for geocentric."New value: +"Optional; topocentric if set." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Observer longitude for topocentric position (optional). Omit for geocentric."New value: +"Optional; topocentric if set." - changed
Input schema / properties / planet_id / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
ephemeris_progressed_chart8 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / birth_latitude / descriptionPrevious value: -"Birth latitude in decimal degrees."New value: +"Birth latitude." - changed
Input schema / properties / birth_longitude / descriptionPrevious value: -"Birth longitude in decimal degrees."New value: +"Birth longitude." - changed
Input schema / properties / include_aspects / descriptionPrevious value: -"Whether to include aspect grid in the response. Default false."New value: +"Add the aspect grid. Default false." - changed
Input schema / properties / method / descriptionPrevious value: -"Progression method. Defaults to 'secondary' (1 day = 1 year)."New value: +"Default secondary (1 day = 1 year)." - changed
Input schema / properties / name / descriptionPrevious 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." - changed
Input schema / properties / target_datetime / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
ephemeris_relocation7 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Output format. 'llm' = compact token-efficient output (available on all tiers)."New value: +"'llm' = compact." - changed
Input schema / properties / natal_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / natal_latitude / descriptionPrevious value: -"Latitude of birth location in decimal degrees."New value: +"Birth latitude." - changed
Input schema / properties / natal_longitude / descriptionPrevious value: -"Longitude of birth location in decimal degrees."New value: +"Birth longitude." - changed
Input schema / properties / relocation_latitude / descriptionPrevious value: -"Latitude of the relocation city in decimal degrees (positive = North)."New value: +"New-place latitude (+N)." - changed
Input schema / properties / relocation_longitude / descriptionPrevious value: -"Longitude of the relocation city in decimal degrees (positive = East)."New value: +"New-place longitude (+E)." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
ephemeris_retrograde_status3 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`)." - changed
Input schema / properties / planet_id / descriptionPrevious 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)." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
ephemeris_solar_return11 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / birth_latitude / descriptionPrevious value: -"Birth latitude in decimal degrees (optional, for location context)."New value: +"Optional birth latitude." - changed
Input schema / properties / birth_longitude / descriptionPrevious value: -"Birth longitude in decimal degrees (optional, for location context)."New value: +"Optional birth longitude." - changed
Input schema / properties / include_visual / descriptionPrevious 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." - changed
Input schema / properties / return_latitude / descriptionPrevious value: -"Location latitude for the return chart (optional, if different from birth location)."New value: +"Optional return-location latitude." - changed
Input schema / properties / return_longitude / descriptionPrevious value: -"Location longitude for the return chart (optional)."New value: +"Optional return-location longitude." - changed
Input schema / properties / target_datetime / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime." - changed
Input schema / properties / visual_config / descriptionPrevious value: -"Optional rendering preferences (only used when include_visual=true)."New value: +"Rendering options for include_visual." - changed
Input schema / properties / visual_config / properties / size / descriptionPrevious value: -"Canvas size in pixels, 200–4000. Default: 800."New value: +"Pixels, 200–4000. Default 800." - changed
Input schema / properties / visual_config / properties / theme / descriptionPrevious value: -"Color theme. Default: light."New value: +"Default light."
- Changed
ephemeris_synastry10 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Output format. 'llm' is compact and token-efficient (available on all tiers)."New value: +"'llm' = compact." - changed
Input schema / properties / house_system / descriptionPrevious value: -"House system for both charts. Defaults to 'placidus'."New value: +"Default placidus." - changed
Input schema / properties / include_visual / descriptionPrevious 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." - changed
Input schema / properties / person_a_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / person_a_timezone / descriptionPrevious 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)." - changed
Input schema / properties / person_b_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / person_b_timezone / descriptionPrevious 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)." - changed
Input schema / properties / visual_config / descriptionPrevious value: -"Optional rendering preferences (only used when include_visual=true)."New value: +"Rendering options for include_visual." - changed
Input schema / properties / visual_config / properties / size / descriptionPrevious value: -"Canvas size in pixels, 200–4000. Default: 800."New value: +"Pixels, 200–4000. Default 800." - changed
Input schema / properties / visual_config / properties / theme / descriptionPrevious value: -"Color theme. Default: light."New value: +"Default light."
- Changed
ephemeris_time_lords4 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / birth_latitude / descriptionPrevious value: -"Birth latitude in decimal degrees."New value: +"Birth latitude." - changed
Input schema / properties / birth_longitude / descriptionPrevious value: -"Birth longitude in decimal degrees."New value: +"Birth longitude." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
ephemeris_transits9 fields changed- changed
Input schema / properties / aspect_angle / descriptionPrevious 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." - changed
Input schema / properties / end_date / descriptionPrevious 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." - changed
Input schema / properties / natal_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / natal_latitude / descriptionPrevious value: -"Latitude of birth location in decimal degrees."New value: +"Birth latitude." - changed
Input schema / properties / natal_longitude / descriptionPrevious value: -"Longitude of birth location in decimal degrees."New value: +"Birth longitude." - changed
Input schema / properties / natal_points / descriptionPrevious 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." - changed
Input schema / properties / natal_timezone / descriptionPrevious 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)." - changed
Input schema / properties / start_date / descriptionPrevious 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." - changed
Input schema / properties / transiting_planets / descriptionPrevious 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."
- Changed
explore_bazi_chart5 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / hour / descriptionPrevious 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." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Birth longitude, decimal degrees (east+)."New value: +"Birth longitude." - changed
Input schema / properties / minute / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious 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."
- Changed
explore_bi_wheel14 fields changed- changed
Input schema / properties / house_system / descriptionPrevious 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." - changed
Input schema / properties / location / descriptionPrevious 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." - changed
Input schema / properties / mode / descriptionPrevious value: -"Chart comparison mode. Defaults to 'synastry'."New value: +"Default synastry." - changed
Input schema / properties / person1_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / person1_latitude / descriptionPrevious 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`." - changed
Input schema / properties / person1_longitude / descriptionPrevious 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`." - changed
Input schema / properties / person1_name / descriptionPrevious value: -"Display name for Person 1 / Natal chart (e.g. 'Alice'). Used in the badge and summary."New value: +"Person 1 display name." - changed
Input schema / properties / person1_timezone / descriptionPrevious 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)." - changed
Input schema / properties / person2_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / person2_latitude / descriptionPrevious 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." - changed
Input schema / properties / person2_location / descriptionPrevious 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." - changed
Input schema / properties / person2_longitude / descriptionPrevious 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." - changed
Input schema / properties / person2_name / descriptionPrevious value: -"Display name for Person 2 (synastry mode). Used in the badge and summary."New value: +"Person 2 display name." - changed
Input schema / properties / person2_timezone / descriptionPrevious 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)."
- Changed
explore_human_design5 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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`)." - changed
Input schema / properties / location / descriptionPrevious 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." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name."New value: +"Birth longitude (optional with `location`)." - changed
Input schema / properties / timezone / descriptionPrevious 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."
- Changed
explore_human_design_connection9 fields changed- changed
Input schema / properties / layout / descriptionPrevious 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." - changed
Input schema / properties / person_a / properties / latitude / descriptionPrevious value: -"Birth latitude, decimal degrees (+N). Optional if `location` is set."New value: +"Birth latitude (+N). Optional with `location`." - changed
Input schema / properties / person_a / properties / location / descriptionPrevious 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." - changed
Input schema / properties / person_a / properties / longitude / descriptionPrevious value: -"Birth longitude, decimal degrees (+E). Optional if `location` is set."New value: +"Birth longitude (+E). Optional with `location`." - changed
Input schema / properties / person_b / properties / latitude / descriptionPrevious value: -"Birth latitude, decimal degrees (+N). Optional if `location` is set."New value: +"Birth latitude (+N). Optional with `location`." - changed
Input schema / properties / person_b / properties / location / descriptionPrevious 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." - changed
Input schema / properties / person_b / properties / longitude / descriptionPrevious value: -"Birth longitude, decimal degrees (+E). Optional if `location` is set."New value: +"Birth longitude (+E). Optional with `location`." - changed
Input schema / properties / render_token / descriptionPrevious 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." - changed
Input schema / properties / theme / descriptionPrevious 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."
- Changed
explore_human_design_transit9 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`." - changed
Input schema / properties / latitude / descriptionPrevious 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`)." - changed
Input schema / properties / layout / descriptionPrevious 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." - changed
Input schema / properties / location / descriptionPrevious 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." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Natal birth longitude in decimal degrees (positive = East). Optional if `location` is a place name."New value: +"Natal longitude (optional with `location`)." - changed
Input schema / properties / render_token / descriptionPrevious 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." - changed
Input schema / properties / theme / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone for the birth location (e.g. 'America/New_York')."New value: +"IANA zone for a local birth time." - changed
Input schema / properties / transit_datetime / descriptionPrevious 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."
- Changed
explore_moon_phase4 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious value: -"Observer latitude (optional, used for local void-of-course calculations)."New value: +"Optional; for local void-of-course." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Observer longitude (optional, used for local void-of-course calculations)."New value: +"Optional; for local void-of-course." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
explore_natal_chart7 fields changed- changed
Input schema / properties / bodies / descriptionPrevious 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']." - changed
Input schema / properties / datetime / descriptionPrevious 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`)." - changed
Input schema / properties / house_system / descriptionPrevious value: -"House system to use (default: placidus)."New value: +"Default placidus." - changed
Input schema / properties / latitude / descriptionPrevious 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`)." - changed
Input schema / properties / location / descriptionPrevious 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." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name."New value: +"Birth longitude (optional with `location`)." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
explore_transit_timeline10 fields changed- changed
Input schema / properties / aspect_angle / descriptionPrevious 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." - changed
Input schema / properties / end_date / descriptionPrevious 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." - changed
Input schema / properties / natal_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / natal_latitude / descriptionPrevious value: -"Latitude of birth location in decimal degrees."New value: +"Birth latitude." - changed
Input schema / properties / natal_longitude / descriptionPrevious value: -"Longitude of birth location in decimal degrees."New value: +"Birth longitude." - changed
Input schema / properties / natal_points / descriptionPrevious 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." - changed
Input schema / properties / natal_timezone / descriptionPrevious 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)." - changed
Input schema / properties / orb_deg / descriptionPrevious 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." - changed
Input schema / properties / start_date / descriptionPrevious 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." - changed
Input schema / properties / transiting_planets / descriptionPrevious 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."
- Changed
explore_vedic_chart6 fields changed- changed
Input schema / properties / ayanamsa / descriptionPrevious value: -"Ayanamsa system for sidereal conversion. Defaults to 'lahiri'."New value: +"Default lahiri." - changed
Input schema / properties / datetime / descriptionPrevious 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`." - changed
Input schema / properties / latitude / descriptionPrevious 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`)." - changed
Input schema / properties / location / descriptionPrevious 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." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name."New value: +"Birth longitude (optional with `location`)." - changed
Input schema / properties / timezone / descriptionPrevious 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."
- Added
find_calculation - Changed
human_design_chart9 fields changed- changed
Input schema / properties / chart_variant / descriptionPrevious 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." - changed
Input schema / properties / datetime / descriptionPrevious 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`)." - changed
Input schema / properties / format / descriptionPrevious 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." - changed
Input schema / properties / include_visual / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious value: -"Latitude of birth location in decimal degrees (positive = North)."New value: +"Birth latitude." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Longitude of birth location in decimal degrees (positive = East)."New value: +"Birth longitude." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime." - changed
Input schema / properties / visual_config / descriptionPrevious value: -"Optional rendering preferences (only used when include_visual=true)."New value: +"Rendering options for include_visual." - changed
Input schema / properties / visual_config / properties / size / descriptionPrevious value: -"Canvas size in pixels, 200–4000. Default: 800."New value: +"Pixels, 200–4000. Default 800."
- Changed
human_design_transit_timeline4 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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`)." - changed
Input schema / properties / end_date / descriptionPrevious 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." - changed
Input schema / properties / start_date / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
- Changed
location_search4 fields changed- changed
Input schema / properties / country / descriptionPrevious 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'." - changed
Input schema / properties / date / descriptionPrevious 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)." - changed
Input schema / properties / near / descriptionPrevious 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." - changed
Input schema / properties / region / descriptionPrevious 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'."
- Changed
timezone_resolve3 fields changed- changed
Input schema / properties / date / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious value: -"Latitude in decimal degrees, -90 to 90 (north positive)."New value: +"Decimal degrees (+N)." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Longitude in decimal degrees, -180 to 180 (east positive)."New value: +"Decimal degrees (+E)."
- Changed
vedic_chart6 fields changed- changed
Input schema / properties / ayanamsa / descriptionPrevious value: -"Ayanamsa system for sidereal conversion. Defaults to 'lahiri'."New value: +"Default lahiri." - changed
Input schema / properties / datetime / descriptionPrevious 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`)." - changed
Input schema / properties / latitude / descriptionPrevious value: -"Birth latitude in decimal degrees (north positive)."New value: +"Birth latitude (+N)." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Birth longitude in decimal degrees (east positive)."New value: +"Birth longitude (+E)." - changed
Input schema / properties / panchang / descriptionPrevious 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)." - changed
Input schema / properties / timezone / descriptionPrevious value: -"IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise."New value: +"IANA zone for a local datetime."
11 tool updates
v4.27.0- Changed
acg_hits8 fields changed- changed
Input schema / properties / custom_bodies / descriptionPrevious 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)." - removed
Input schema / properties / custom_bodies / items / properties / dec_deg / descriptionRemoved value: -"Declination in degrees (-90..90). Give with ra_deg." - removed
Input schema / properties / custom_bodies / items / properties / id / descriptionRemoved value: -"Your identifier (letters, digits, _ . : -; up to 64)." - removed
Input schema / properties / custom_bodies / items / properties / latitude / descriptionRemoved value: -"Ecliptic latitude in degrees (-90..90), default 0." - removed
Input schema / properties / custom_bodies / items / properties / longitude / descriptionRemoved value: -"Ecliptic longitude in degrees (any real value, wrapped)." - removed
Input schema / properties / custom_bodies / items / properties / metadata / descriptionRemoved value: -"Any JSON object, up to 2 KB; echoed back verbatim." - removed
Input schema / properties / custom_bodies / items / properties / name / descriptionRemoved value: -"Display label; defaults to id. Must not be a catalog body name." - removed
Input schema / properties / custom_bodies / items / properties / ra_deg / descriptionRemoved value: -"Right ascension in degrees (not hours). Give with dec_deg."
- Changed
acg_power_lines10 fields changed- changed
Input schema / properties / custom_bodies / descriptionPrevious 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)." - removed
Input schema / properties / custom_bodies / items / properties / dec_deg / descriptionRemoved value: -"Declination in degrees (-90..90). Give with ra_deg." - removed
Input schema / properties / custom_bodies / items / properties / id / descriptionRemoved value: -"Your identifier (letters, digits, _ . : -; up to 64)." - removed
Input schema / properties / custom_bodies / items / properties / latitude / descriptionRemoved value: -"Ecliptic latitude in degrees (-90..90), default 0." - removed
Input schema / properties / custom_bodies / items / properties / longitude / descriptionRemoved value: -"Ecliptic longitude in degrees (any real value, wrapped)." - removed
Input schema / properties / custom_bodies / items / properties / metadata / descriptionRemoved value: -"Any JSON object, up to 2 KB; echoed back verbatim." - removed
Input schema / properties / custom_bodies / items / properties / name / descriptionRemoved value: -"Display label; defaults to id. Must not be a catalog body name." - removed
Input schema / properties / custom_bodies / items / properties / ra_deg / descriptionRemoved value: -"Right ascension in degrees (not hours). Give with dec_deg." - changed
Input schema / properties / query_latitude / descriptionPrevious value: -"Filter lines near this latitude (optional, for hits mode)."New value: +"Filter lines near this latitude." - changed
Input schema / properties / query_longitude / descriptionPrevious value: -"Filter lines near this longitude (optional, for hits mode)."New value: +"Filter lines near this longitude."
- Removed
ephemeris_electional - Added
ephemeris_ingresses - Changed
ephemeris_natal_chart3 fields changed- changed
Input schema / properties / additional_objects / descriptionPrevious 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." - changed
Input schema / properties / analytics / descriptionPrevious 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." - changed
Input schema / properties / analytics / items / enumPrevious value: -[ - "element_balance", - "hemisphere_emphasis", - "aspect_patterns", - "harmonics" -]New value: +[ + "element_balance", + "hemisphere_emphasis", + "aspect_patterns", + "harmonics", + "dignities", + "sect", + "angle_aspects", + "human_design_gates" +]
- Changed
ephemeris_progressed_chart2 fields changed- added
Input schema / properties / converseAdded value: +{ + "description": "Count backward from birth.", + "type": "boolean" +} - changed
Input schema / properties / method / enumPrevious value: -[ - "secondary", - "solar_arc", - "tertiary" -]New value: +[ + "secondary", + "solar_arc", + "tertiary", + "minor" +]
- Changed
ephemeris_transits1 field changed- added
Input schema / properties / sortAdded value: +{ + "description": "time (default) or significance.", + "enum": [ + "time", + "significance" + ], + "type": "string" +}
- Changed
explore_natal_chart2 fields changed- added
Input schema / properties / ayanamsaAdded value: +{ + "description": "Default lahiri; sidereal only.", + "enum": [ + "lahiri", + "fagan_bradley", + "krishnamurti", + "raman", + "yukteshwar" + ], + "type": "string" +} - added
Input schema / properties / zodiac_typeAdded value: +{ + "description": "Default tropical.", + "enum": [ + "tropical", + "sidereal" + ], + "type": "string" +}
- Changed
human_design_chart1 field changed- added
Input schema / properties / chart_variantAdded 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" +}
- Added
human_design_transit_timeline - Changed
vedic_chart4 fields changed- added
Input schema / properties / dasha_as_ofAdded value: +{ + "description": "ISO 8601 instant (UTC if zone-less): add the dasha periods running then.", + "type": "string" +} - added
Input schema / properties / dasha_depthAdded value: +{ + "description": "1-3: add the Vimshottari dasha tree (1 maha, 2 antar, 3 pratyantar).", + "type": "integer" +} - added
Input schema / properties / panchangAdded value: +{ + "description": "Return the panchang for the local date in datetime instead: tithi, karana, yoga, nakshatra, vara, Rahu Kaal.", + "type": "boolean" +} - added
Input schema / properties / vargasAdded value: +{ + "description": "Divisional chart numbers to add, e.g. [9, 10].", + "items": { + "type": "integer" + }, + "type": "array" +}
29 tool updates
v4.24.2- Changed
acg_hits4 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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." - changed
Input schema / properties / birth_latitude / descriptionPrevious 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." - changed
Input schema / properties / bodies / descriptionPrevious 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." - added
Input schema / properties / custom_bodiesAdded 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" +}
- Changed
acg_power_lines4 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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." - changed
Input schema / properties / birth_latitude / descriptionPrevious 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." - changed
Input schema / properties / bodies / descriptionPrevious 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." - added
Input schema / properties / custom_bodiesAdded 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" +}
- Changed
dev_read_api3 fields changed- added
Input schema / properties / body / additionalPropertiesAdded value: +true - added
Input schema / properties / body / typeAdded value: +"object" - changed
Input schema / properties / path / descriptionPrevious value: -"Absolute API path (e.g., /ephemeris/natal-chart)"New value: +"Absolute API path of an allowlisted GET endpoint (e.g., /ephemeris/moon/phase)"
- Changed
electional_moment_analysis2 fields changed- added
Input schema / properties / latitudeAdded 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" +} - added
Input schema / properties / longitudeAdded 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" +}
- Changed
electional_station_tracker1 field changed- changed
Input schema / properties / planets / descriptionPrevious 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."
- Changed
ephemeris_angles_points1 field changed- changed
Input schema / properties / datetime / descriptionPrevious 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."
- Changed
ephemeris_electional1 field changed- changed
Input schema / properties / latitude / descriptionPrevious 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)."
- Changed
ephemeris_house_cusps2 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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."
- Changed
ephemeris_natal_chart14 fields changed- added
Input schema / properties / additional_objectsAdded 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" +} - added
Input schema / properties / analyticsAdded 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" +} - added
Input schema / properties / asteroid_groupsAdded 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" +} - added
Input schema / properties / ayanamsaAdded value: +{ + "description": "Sidereal system. Default lahiri. Only read when zodiac_type is `sidereal`.", + "enum": [ + "lahiri", + "fagan_bradley", + "krishnamurti", + "raman", + "yukteshwar" + ], + "type": "string" +} - changed
Input schema / properties / datetime / descriptionPrevious 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." - added
Input schema / properties / declinationsAdded value: +{ + "description": "Add each body's declination and out-of-bounds flag, plus parallel/contraparallel aspects (1.5° orb).", + "type": "boolean" +} - changed
Input schema / properties / house_system / enumPrevious value: -[ - "placidus", - "whole_sign", - "equal", - "koch", - "campanus", - "regiomontanus", - "porphyry", - "alcabitius", - "morinus" -]New value: +[ + "placidus", + "whole_sign", + "equal", + "koch", + "campanus", + "regiomontanus", + "porphyry" +] - changed
Input schema / properties / include_arabic_parts / descriptionPrevious 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`)." - changed
Input schema / properties / include_fixed_stars / descriptionPrevious 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." - added
Input schema / properties / include_minor_aspectsAdded 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" +} - changed
Input schema / properties / include_visual / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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)." - added
Input schema / properties / solar_relationshipsAdded value: +{ + "description": "Classify combustion, cazimi and under-beams for Moon–Saturn relative to the Sun.", + "type": "boolean" +} - added
Input schema / properties / zodiac_typeAdded 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" +}
- Changed
ephemeris_next_lunar_phase1 field changed- changed
Input schema / properties / count / descriptionPrevious 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."
- Changed
ephemeris_planet_position2 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / planet_id / descriptionPrevious 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)."
- Changed
ephemeris_progressed_chart5 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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." - changed
Input schema / properties / birth_latitude / descriptionPrevious 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." - changed
Input schema / properties / include_visual / descriptionPrevious 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)." - added
Input schema / properties / nameAdded 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" +} - removed
Input schema / properties / visual_configRemoved 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" -}
- Changed
ephemeris_relocation3 fields changed- added
Input schema / properties / include_visualAdded value: +{ + "description": "Also return the relocated chart wheel as an image (+2 credits).", + "type": "boolean" +} - changed
Input schema / properties / natal_datetime / descriptionPrevious 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." - changed
Input schema / properties / natal_latitude / descriptionPrevious 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."
- Changed
ephemeris_retrograde_status2 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / planet_id / descriptionPrevious 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."
- Changed
ephemeris_solar_return2 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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." - changed
Input schema / properties / include_visual / descriptionPrevious 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."
- Changed
ephemeris_synastry4 fields changed- changed
Input schema / properties / include_visual / descriptionPrevious 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." - changed
Input schema / properties / person_a_datetime / descriptionPrevious 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." - changed
Input schema / properties / person_a_latitude / descriptionPrevious value: -"Person A birth latitude. Resolve from a place name with location_search; never recall coordinates from memory."New value: +"Person A birth latitude." - changed
Input schema / properties / person_b_datetime / descriptionPrevious 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."
- Added
ephemeris_time_lords - Changed
ephemeris_transits5 fields changed- changed
Input schema / properties / end_date / descriptionPrevious 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." - changed
Input schema / properties / natal_datetime / descriptionPrevious 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." - changed
Input schema / properties / natal_latitude / descriptionPrevious 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." - changed
Input schema / properties / start_date / descriptionPrevious 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." - changed
Input schema / properties / transiting_planets / descriptionPrevious 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."
- Changed
explore_bazi_chart1 field changed- changed
Input schema / properties / datetime / descriptionPrevious 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."
- Changed
explore_bi_wheel6 fields changed- added
Input schema / properties / house_systemAdded 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" +} - changed
Input schema / properties / location / descriptionPrevious 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." - changed
Input schema / properties / mode / enumPrevious value: -[ - "synastry", - "transit", - "progressed", - "solar_return", - "lunar_return", - "solar_arc" -]New value: +[ + "synastry", + "transit", + "progressed", + "solar_return", + "lunar_return", + "solar_arc", + "composite", + "davison" +] - changed
Input schema / properties / person1_datetime / descriptionPrevious 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." - changed
Input schema / properties / person1_latitude / descriptionPrevious 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." - changed
Input schema / properties / person2_datetime / descriptionPrevious 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."
- Changed
explore_human_design4 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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." - changed
Input schema / properties / location / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious 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."
- Changed
explore_human_design_connection5 fields changed- changed
Input schema / properties / layout / descriptionPrevious 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." - changed
Input schema / properties / person_a / properties / location / descriptionPrevious 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." - changed
Input schema / properties / person_b / properties / location / descriptionPrevious 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." - added
Input schema / properties / render_tokenAdded 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" +} - changed
Input schema / properties / theme / descriptionPrevious 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."
- Changed
explore_human_design_transit5 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / layout / descriptionPrevious 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." - changed
Input schema / properties / location / descriptionPrevious 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." - added
Input schema / properties / render_tokenAdded 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" +} - changed
Input schema / properties / theme / descriptionPrevious 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."
- Changed
explore_natal_chart4 fields changed- changed
Input schema / properties / bodies / descriptionPrevious 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']." - changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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." - changed
Input schema / properties / location / descriptionPrevious 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."
- Changed
explore_transit_timeline6 fields changed- changed
Input schema / properties / end_date / descriptionPrevious 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." - changed
Input schema / properties / natal_datetime / descriptionPrevious 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." - changed
Input schema / properties / natal_latitude / descriptionPrevious 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." - added
Input schema / properties / orb_degAdded 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" +} - changed
Input schema / properties / start_date / descriptionPrevious 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." - changed
Input schema / properties / transiting_planets / descriptionPrevious 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."
- Changed
explore_vedic_chart4 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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." - changed
Input schema / properties / location / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious 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."
- Changed
human_design_chart3 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / include_visual / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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)."
- Changed
timezone_resolve2 fields changed- added
Input schema / properties / latitude / descriptionAdded value: +"Latitude in decimal degrees, -90 to 90 (north positive)." - added
Input schema / properties / longitude / descriptionAdded value: +"Longitude in decimal degrees, -180 to 180 (east positive)."
- Changed
vedic_chart2 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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)."
2 tool updates
v4.12.0- Changed
explore_bazi_chart7 fields changed- added
Input schema / properties / day_boundaryAdded value: +{ + "description": "Day-pillar cutover convention. Default zi_hour.", + "enum": [ + "zi_hour", + "midnight" + ], + "type": "string" +} - added
Input schema / properties / latitudeAdded value: +{ + "description": "Birth latitude, decimal degrees (north+).", + "type": "number" +} - added
Input schema / properties / longitudeAdded value: +{ + "description": "Birth longitude, decimal degrees (east+).", + "type": "number" +} - added
Input schema / properties / minuteAdded value: +{ + "description": "Birth minute (0–59). Optional, defaults to 0. Only matters under true_solar_time or near a boundary.", + "type": "integer" +} - changed
Input schema / properties / timezone / descriptionPrevious 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." - added
Input schema / properties / true_solar_timeAdded value: +{ + "description": "Apply true solar time correction (needs latitude+longitude).", + "type": "boolean" +} - added
Input schema / properties / year_boundaryAdded value: +{ + "description": "Year-pillar cutover convention. Default lichun.", + "enum": [ + "lichun", + "cny" + ], + "type": "string" +}
- Changed
location_search1 field changed- changed
Input schema / properties / date / descriptionPrevious 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."
62 tool updates
v4.8.0- Added
account_usage - Changed
acg_hits3 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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." - changed
Input schema / properties / birth_latitude / descriptionPrevious 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." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Changed
acg_power_lines3 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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." - changed
Input schema / properties / birth_latitude / descriptionPrevious 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." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Added
bazi_annual_pillar - Removed
chart_wheel_on_aspect_click - Removed
chart_wheel_on_house_click - Removed
chart_wheel_on_planet_click - Removed
chart_wheel_recalculate - Removed
chinese_bazi - Removed
dev_call - Added
dev_read_api - Removed
electional_aspect_search - Changed
electional_moment_analysis1 field changed- changed
Input schema / properties / date / descriptionPrevious 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."
- Changed
ephemeris_angles_points2 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Removed
ephemeris_bi_wheel - Removed
ephemeris_chart_wheel - Removed
ephemeris_composite - Removed
ephemeris_composite_midpoint - Removed
ephemeris_dignities - Changed
ephemeris_electional3 fields changed- changed
Input schema / properties / end_date / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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." - changed
Input schema / properties / start_date / descriptionPrevious 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."
- Removed
ephemeris_fixed_stars - Removed
ephemeris_hermetic_lots - Changed
ephemeris_house_cusps3 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`." - changed
Input schema / properties / latitude / descriptionPrevious 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." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Removed
ephemeris_lunar_return - Removed
ephemeris_midpoints - Changed
ephemeris_moon_phase2 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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)." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Removed
ephemeris_natal_batch - Changed
ephemeris_natal_chart5 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`." - changed
Input schema / properties / include_arabic_parts / descriptionPrevious 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." - changed
Input schema / properties / include_fixed_stars / descriptionPrevious 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." - changed
Input schema / properties / latitude / descriptionPrevious 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." - changed
Input schema / properties / timezone / descriptionPrevious 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."
- Removed
ephemeris_natal_transits - Removed
ephemeris_overlay - Changed
ephemeris_planet_position3 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`." - changed
Input schema / properties / planet_id / descriptionPrevious 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°." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Removed
ephemeris_planetary_return - Changed
ephemeris_progressed_chart4 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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`." - changed
Input schema / properties / birth_latitude / descriptionPrevious 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." - changed
Input schema / properties / target_datetime / descriptionPrevious 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." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Changed
ephemeris_relocation3 fields changed- changed
Input schema / properties / natal_datetime / descriptionPrevious 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`." - changed
Input schema / properties / natal_latitude / descriptionPrevious 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." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Changed
ephemeris_retrograde_status3 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`." - changed
Input schema / properties / planet_id / descriptionPrevious 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." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Changed
ephemeris_solar_return2 fields changed- changed
Input schema / properties / birth_datetime / descriptionPrevious 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`." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Changed
ephemeris_synastry5 fields changed- changed
Input schema / properties / person_a_datetime / descriptionPrevious 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`." - changed
Input schema / properties / person_a_latitude / descriptionPrevious value: -"Person A birth latitude."New value: +"Person A birth latitude. Resolve from a place name with location_search; never recall coordinates from memory." - added
Input schema / properties / person_a_timezoneAdded value: +{ + "description": "IANA timezone for Person A's birth location (e.g. `America/Chicago`); required when the datetime is naive.", + "type": "string" +} - changed
Input schema / properties / person_b_datetime / descriptionPrevious 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`." - added
Input schema / properties / person_b_timezoneAdded value: +{ + "description": "IANA timezone for Person B's birth location (e.g. `America/Los_Angeles`); required when the datetime is naive.", + "type": "string" +}
- Changed
ephemeris_transits5 fields changed- changed
Input schema / properties / end_date / descriptionPrevious 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." - changed
Input schema / properties / natal_datetime / descriptionPrevious 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`." - changed
Input schema / properties / natal_latitude / descriptionPrevious 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." - added
Input schema / properties / natal_timezoneAdded value: +{ + "description": "IANA timezone for the natal birth location (e.g. `America/Chicago`); required when the datetime is naive.", + "type": "string" +} - changed
Input schema / properties / start_date / descriptionPrevious 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."
- Added
explore_bazi_chart - Added
explore_bi_wheel - Added
explore_human_design - Added
explore_human_design_connection - Added
explore_human_design_transit - Added
explore_moon_phase - Changed
explore_natal_chart7 fields changed- added
Input schema / properties / bodiesAdded 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" +} - changed
Input schema / properties / datetime / descriptionPrevious 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`." - changed
Input schema / properties / latitude / descriptionPrevious 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." - changed
Input schema / properties / location / descriptionPrevious 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." - changed
Input schema / properties / longitude / descriptionPrevious value: -"Birth longitude in decimal degrees (positive = East)."New value: +"Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name." - changed
Input schema / properties / timezone / descriptionPrevious 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." - changed
Input schema / requiredPrevious value: -[ - "datetime", - "latitude", - "longitude" -]New value: +[ + "datetime" +]
- Added
explore_transit_timeline - Added
explore_vedic_chart - Removed
hd_opposition - Removed
hd_planetary_return - Removed
human_design_bodygraph - Changed
human_design_chart3 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`." - changed
Input schema / properties / latitude / descriptionPrevious 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." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Removed
human_design_composite - Removed
human_design_penta - Added
location_search - Added
timezone_resolve - Changed
vedic_chart3 fields changed- changed
Input schema / properties / datetime / descriptionPrevious 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`." - changed
Input schema / properties / latitude / descriptionPrevious 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." - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "type": "string" +}
- Removed
venus_eight_year_star - Removed
venus_elongations - Removed
venus_phase - Removed
venus_star_points - Removed
venus_star_points_conjunctions - Removed
venus_stations
57 tool updates
v0.1.0- First observed
acg_hits - First observed
acg_power_lines - First observed
auth_login - First observed
auth_logout - First observed
auth_status - First observed
chart_wheel_on_aspect_click - First observed
chart_wheel_on_house_click - First observed
chart_wheel_on_planet_click - First observed
chart_wheel_recalculate - First observed
chinese_bazi - First observed
dev_call - First observed
dev_list_allowed - First observed
electional_aspect_search - First observed
electional_moment_analysis - First observed
electional_station_tracker - First observed
ephemeris_angles_points - First observed
ephemeris_aspect_check - First observed
ephemeris_bi_wheel - First observed
ephemeris_chart_wheel - First observed
ephemeris_composite - First observed
ephemeris_composite_midpoint - First observed
ephemeris_dignities - First observed
ephemeris_electional - First observed
ephemeris_fixed_stars - First observed
ephemeris_hermetic_lots - First observed
ephemeris_house_cusps - First observed
ephemeris_lunar_return - First observed
ephemeris_midpoints - First observed
ephemeris_moon_phase - First observed
ephemeris_natal_batch - First observed
ephemeris_natal_chart - First observed
ephemeris_natal_transits - First observed
ephemeris_next_eclipse - First observed
ephemeris_next_lunar_phase - First observed
ephemeris_overlay - First observed
ephemeris_planet_position - First observed
ephemeris_planetary_return - First observed
ephemeris_progressed_chart - First observed
ephemeris_relocation - First observed
ephemeris_retrograde_status - First observed
ephemeris_solar_return - First observed
ephemeris_synastry - First observed
ephemeris_transits - First observed
explore_natal_chart - First observed
hd_opposition - First observed
hd_planetary_return - First observed
human_design_bodygraph - First observed
human_design_chart - First observed
human_design_composite - First observed
human_design_penta - First observed
vedic_chart - First observed
venus_eight_year_star - First observed
venus_elongations - First observed
venus_phase - First observed
venus_star_points - First observed
venus_star_points_conjunctions - First observed
venus_stations
TDQS
Scored across 42 tools
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.
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.
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.
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
Related MCP Connectors
Official Divine API MCP for Western Astrology: Natal, Synastry, Transit, Composite, Progressions.
Swiss Ephemeris astrology: natal charts, transits, synastry, solar returns and astrocartography.
Professional Vedic astrology tools for AI agents via MCP.
34-tool Caelus MCP for validated astrology: charts, transits, Vedic, facts, sky view, synthetic.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn 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.5174 npm436ISC
- AlicenseNot gradedqualityDmaintenanceEnables 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 npm13MIT
- AlicenseBqualityDmaintenanceBazi MCP is an AI based Bazi calculator that provides accurate Bazi chart data for personality analysis and destiny prediction.32Apache 2.0
- FlicenseNot gradedqualityDmaintenanceWorld'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-