@openephemeris/mcp-server
MCP server for Open Ephemeris — NASA JPL DE440 astrology and astronomy, with interactive charts that render inline in Claude and ChatGPT
npm · fingerprint c751659ce32cc959c44059e9 · repository · RSS
What changed
Changed 2026-10-26 13:05 UTC
34 descriptions rewritten, 3 schema or annotation changes with the description left byte-identical, 2 tools added, 1 tool removed.
--- pinned/account_usage +++ observed/account_usage { "_meta": { "openai/toolInvocation/invoked": "Usage retrieved", - "description": "Use this when the user asks 'how many credits do I have left', 'what's my usage this month', 'am I close to my limit', 'what plan am I on' or 'how do I upgrade or top up'. Returns plan tier, billing period, credits used / included / remaining, percent of quota used, total API calls, and subscription status with renewal date; pass month='YYYY-MM' for a past period.\n\nCREDIT COST: 0.", + "description": "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.\n\nCREDIT COST: 0.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Billing month to query in YYYY-MM format (e.g. '2026-06'). Defaults to the current month.", + "description": "YYYY-MM; default current month.", "type": "string" } },
--- pinned/acg_hits +++ observed/acg_hits { "_meta": { "openai/toolInvocation/invoked": "Location lines found", - "description": "Use this when the user asks 'is Tokyo good for me', 'where should I live according to my chart', 'what planets affect me in Paris', 'which of my lines run through Lisbon' or 'should I move to Austin'. Returns every astrocartography line (power lines and aspect lines) within radius_deg of a query location, sorted by distance, for a given birth chart.\n\nCREDIT COST: 10 credits per call. Pro tier.", + "description": "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.\n\nCREDIT COST: 10 credits per call. Pro tier.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "birth_latitude": { - "description": "Birth latitude in decimal degrees.", + "description": "Birth latitude.", "type": "number" }, "birth_longitude": { - "description": "Birth longitude in decimal degrees.", + "description": "Birth longitude.", "type": "number" }, "bodies": { - "description": "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.", + "description": "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.", "items": { "type": "string" }, - "description": "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).", + "description": "Enterprise. Own fixed points (longitude or ra_deg/dec_deg), up to 32, 1 credit each.", "items": { "additionalProperties": false, "properties": { - "description": "Include aspect lines in results (default true).", + "description": "Default true.", "type": "boolean" }, "query_latitude": { - "description": "Latitude of the location to check for nearby lines.", + "description": "Place latitude to check.", "type": "number" }, "query_longitude": { - "description": "Longitude of the location to check for nearby lines.", + "description": "Place longitude to check.", "type": "number" }, "radius_deg": { - "description": "Search radius in degrees (default 2°, max 90°).", + "description": "Degrees; default 2, max 90.", "type": "number" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/acg_power_lines +++ observed/acg_power_lines { "_meta": { "openai/toolInvocation/invoked": "Planetary lines traced", - "description": "Use this when the user asks 'show my astrocartography map', 'where are my Jupiter lines', 'where in the world is my Sun on the MC', or wants the whole-world list of their lines. Returns, per planet, its MC, IC, AC and DC lines (where it was culminating, anti-culminating, rising or setting at birth) with sign and equator-crossing longitude — geometry stripped, not for map rendering.\n\nCREDIT COST: 10 credits per call. Pro tier.", + "description": "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).\n\nCREDIT COST: 10 credits per call. Pro tier.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "birth_latitude": { - "description": "Birth latitude in decimal degrees.", + "description": "Birth latitude.", "type": "number" }, "birth_longitude": { - "description": "Birth longitude in decimal degrees.", + "description": "Birth longitude.", "type": "number" }, "bodies": { - "description": "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.", + "description": "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.", "items": { "type": "string" }, - "description": "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).", + "description": "Enterprise. Own fixed points (longitude or ra_deg/dec_deg), up to 32, 1 credit each.", "items": { "additionalProperties": false, "properties": { - "description": "Search radius in degrees for hits filtering. Default 2°.", + "description": "Hit radius, degrees. Default 2.", "type": "number" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/bazi_annual_pillar +++ observed/bazi_annual_pillar { "_meta": { "openai/toolInvocation/invoked": "Year pillar found", - "description": "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, Chinese characters, zodiac animal, element, polarity and NaYin (纳音) resonance image for any Gregorian year 1-9999.\n\nCREDIT COST: 3 credits per call.", + "description": "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.\n\nCREDIT COST: 3 credits per call.", "inputSchema": { "additionalProperties": false, "properties": {
--- pinned/dev_read_api +++ observed/dev_read_api { "_meta": { "openai/toolInvocation/invoked": "API response ready", - "description": "Use this when the user asks for something no typed tool covers — 'is today a good biodynamic planting day', 'what's the tidal forcing', 'what Chinese zodiac animal is 2026', 'which bodies do you support' — or any other allowlisted GET endpoint. Returns the endpoint's JSON. Read-only HTTP GET; POST endpoints are not accepted by this tool.\n\nTarget API: Open Ephemeris REST API (https://api.openephemeris.com). Only allowlisted endpoint paths are accepted.\n\nCREDIT COST: 1 for most; /predictive/* 5 (transits/search 5-70 by span); /comparative/* 3; /calendar/* 10 (moon-phases, lunar-standstill 2; cross-quarter 5); /acg/* 10 (Pro); /electional/* 5 (span-priced searches are Pro tier; moment-analysis and station-tracker are not tier-gated); /human-design/*, /iching/* 2 (composite, transit-chart 3; penta 2/member); catalogs 0; 4xx/5xx refunded. Query {format: 'llm'} = compact output.\n\n\n\nCOMMON CALLS:\n GET /ephemeris/moon/phase — Current/queried moon phase\n GET /ephemeris/moon/void-of-course — Next void-of-course period\n GET /ephemeris/agro/daily — Biodynamic farming day quality\n GET /ephemeris/agro/calendar — Multi-day biodynamic calendar\n GET /ephemeris/agro/void-of-course — Biodynamic VoC periods\n GET /eclipse/next-visible — Next eclipse visible from a location (query: lat, lon, type=solar|lunar)\n GET /eclipse/solar/global — Next global solar eclipse (query: date=YYYY-MM-DD)\n GET /eclipse/solar/local — Local solar eclipse (query: lat, lon)\n GET /time/solar-event — Sunrise/sunset/noon (query: date, latitude, longitude)\n GET /tidal/forcing — Gravitational tidal forcing index\n GET /calendar/astrology/moon-phases — next New/Quarter/Full Moon after a date or jd\n GET /location/autocomplete — Geocode a place name (query: query=City Name)\n GET /chinese/zodiac — Chinese zodiac year element/animal\n GET /catalogs/bodies — List all supported celestial bodies\n", + "description": "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.\n\nTarget API: Open Ephemeris REST API (https://api.openephemeris.com), allowlisted paths only. format 'llm' = compact output. 4xx/5xx are refunded.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "JSON request body (optional)", "type": "object" }, "format": { - "description": "Convenience: if provided, set query.format (optional). 'llm' is canonical; 'llm_v2' is accepted as a legacy alias.", + "description": "Sets query.format", "enum": [ "json", "llm", - "description": "HTTP method (always GET)", "enum": [ "GET" ], - "description": "Legacy convenience (deprecated): if provided, set query.output_mode and also map to query.preset/query.format when possible.", + "description": "Legacy", "enum": [ "full", "simple", - "description": "Absolute API path of an allowlisted GET endpoint (e.g., /ephemeris/moon/phase)", + "description": "Allowlisted path from find_calculation", "type": "string" }, "preset": { - "description": "Convenience: if provided, set query.preset (optional).", + "description": "Sets query.preset", "enum": [ "full", "simple" - "description": "Query params (optional)", "type": "object" } },
+ tool added: dev_write_api
--- pinned/electional_moment_analysis +++ observed/electional_moment_analysis { "_meta": { "openai/toolInvocation/invoked": "Moment scored", - "description": "Use this when the user asks 'is now a good time to …', 'what's the sky doing 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.\n\nCREDIT COST: 5 credits per call.", + "description": "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.\n\nCREDIT COST: 5 credits per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; must include Z/offset. Default now.", "type": "string" }, "format": { - "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.", + "description": "Latitude, decimal degrees (+N). Optional; without coordinates sect defaults to diurnal.", "type": "number" }, "longitude": { - "description": "Longitude of location in decimal degrees (positive = East). Needed alongside latitude — day/night is a local fact that neither coordinate settles alone.", + "description": "Longitude, decimal degrees (+E). Pair with latitude.", "type": "number" } },
--- pinned/electional_station_tracker +++ observed/electional_station_tracker { "_meta": { "openai/toolInvocation/invoked": "Station dates found", - "description": "Use this when the user asks 'when does Mercury go retrograde', 'when does Mercury retrograde end', 'when does Mars go direct', 'when does Pluto go direct', 'is Venus retrograde this year', 'Mercury retrograde dates for 2026' or 'what planets station this month'. Returns every retrograde and direct station in the range with exact time, longitude and sign — Mercury through Pluto; default range the next 90 days, maximum one year.\n\nCREDIT COST: 5 credits per call.", + "description": "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.\n\nCREDIT COST: 5 credits per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Comma-separated planet names from: mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto. Defaults to Mercury through Saturn; name outer planets explicitly.", + "description": "Comma list, mercury…pluto. Default Mercury–Saturn.", "type": "string" }, "start_date": {
--- pinned/ephemeris_angles_points +++ observed/ephemeris_angles_points { "_meta": { "openai/toolInvocation/invoked": "Chart angles computed", - "description": "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; the equatorial ascendant is also returned under `east_point` — a synonym for the same point, not a separate one.\n\nCREDIT COST: 1 credit per call.", + "description": "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`).\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "latitude": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/ephemeris_aspect_check +++ observed/ephemeris_aspect_check { "_meta": { "openai/toolInvocation/invoked": "Aspect measured", - "description": "Use this when the user asks 'is 15° Aries square 18° Cancer', 'what aspect is between these two positions', 'how many degrees apart are my Sun and Moon' or 'is this within orb'. Returns the angular separation between two ecliptic longitudes (longitude_1, longitude_2) and any aspect within orb (conjunction, sextile, square, trine, opposition, etc.).\n\nCREDIT COST: 1 credit per call.", + "description": "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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": {
--- pinned/ephemeris_house_cusps +++ observed/ephemeris_house_cusps { "_meta": { "openai/toolInvocation/invoked": "House cusps computed", - "description": "Use this when the user asks 'what are my house cusps', 'where does my 7th house start', 'show my houses in Whole Sign' or 'compare Placidus and Koch for my chart' — houses and angles only, for a date, time and place. Returns the twelve cusps and ASC/MC/DSC/IC for each requested system.\n\nHOUSE SYSTEM CODES: P=Placidus, K=Koch, O=Porphyry, R=Regiomontanus, C=Campanus, E=Equal, W=Whole Sign.\n\nCREDIT COST: 1 credit per call.", + "description": "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.\n\nHOUSE SYSTEM CODES: P=Placidus, K=Koch, O=Porphyry, R=Regiomontanus, C=Campanus, E=Equal, W=Whole Sign.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "house_systems": { - "description": "List of house system codes. E.g. ['P', 'W']. Defaults to ['P'] (Placidus).", + "description": "Codes, e.g. ['P','W']. Default ['P'].", "items": { "type": "string" }, - "description": "Observer latitude in decimal degrees.", + "description": "Observer latitude.", "type": "number" }, "longitude": { - "description": "Observer longitude in decimal degrees.", + "description": "Observer longitude.", "type": "number" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/ephemeris_ingresses +++ observed/ephemeris_ingresses { "_meta": { "openai/toolInvocation/invoked": "Ingresses found", - "description": "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.", + "description": "Default a year on (Moon: 30 days); not with `degree`. ISO 8601 date (whole UTC day) or zoned datetime.", "type": "string" }, "max_crossings": { - "description": "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.", + "description": "Default now. ISO 8601 date (whole UTC day) or zoned datetime.", "type": "string" } },
--- pinned/ephemeris_moon_phase +++ observed/ephemeris_moon_phase { "_meta": { "openai/toolInvocation/invoked": "Moon phase found", - "description": "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.\n\nCREDIT COST: 2 credits — phase and void-of-course are metered separately (the phase-only endpoint /ephemeris/moon/phase costs 1).", + "description": "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.\n\nCREDIT COST: 2 credits.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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).", + "description": "ISO 8601 with a required zone, or local time with `timezone`. Default now.", "type": "string" }, "latitude": { - "description": "Observer latitude (optional, used for local void-of-course calculations).", + "description": "Optional; for local void-of-course.", "type": "number" }, "longitude": { - "description": "Observer longitude (optional, used for local void-of-course calculations).", + "description": "Optional; for local void-of-course.", "type": "number" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/ephemeris_natal_chart +++ observed/ephemeris_natal_chart { "_meta": { "openai/toolInvocation/invoked": "Natal positions computed", - "description": "Use this when the birth chart is wanted 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, Hekate, Fortuna, Pandora, Asbolus 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.\n\nCREDIT COST: 1 credit per call.", + "description": "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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "Extra body ids from GET /catalogs/bodies, e.g. ['eris','sedna']; free; 1600–2200 CE, else listed in omitted_bodies.", "items": { "type": "string" }, - "description": "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.", + "description": "Opt-in extras, free.", "items": { "enum": [ "element_balance", - "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).", + "description": "Add a family: major (Ceres–Vesta), centaur, tno (Eris, Sedna, …) or main_belt (12 large).", "items": { "enum": [ "major", - "description": "Sidereal system. Default lahiri. Only read when zodiac_type is `sidereal`.", + "description": "Default lahiri; sidereal only.", "enum": [ "lahiri", "fagan_bradley", - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "declinations": { - "description": "Add each body's declination and out-of-bounds flag, plus parallel/contraparallel aspects (1.5° orb).", + "description": "Add declinations, out-of-bounds flags and parallels (1.5° orb).", "type": "boolean" }, "format": { - "description": "Output format. 'llm' returns a compact array-based projection optimized for LLM token efficiency (available on all tiers). 'json' returns full verbose JSON.", + "description": "'llm' = compact; 'json' = full (default).", "enum": [ "json", "llm" - "description": "House system to use. Defaults to 'placidus' if omitted.", + "description": "Default placidus.", "enum": [ "placidus", "whole_sign", - "description": "Include Hermetic Lots / Arabic Parts in the natal response (routed as `options.include_hermetic_lots: true`).", + "description": "Add Hermetic Lots / Arabic Parts.", "type": "boolean" }, "include_fixed_stars": { - "description": "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.", + "description": "Add fixed-star conjunctions to bodies and angles.", "type": "boolean" }, "include_minor_aspects": { - "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.", + "description": "Add minor aspects.", "type": "boolean" }, "include_visual": { - "description": "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.", + "description": "Embed a chart-wheel SVG. +2 credits.", "type": "boolean" }, "latitude": { - "description": "Geographic latitude of birth location in decimal degrees (positive = North).", + "description": "Birth latitude.", "type": "number" }, "longitude": { - "description": "Geographic longitude of birth location in decimal degrees (positive = East).", + "description": "Birth longitude.", "type": "number" }, "solar_relationships": { - "description": "Classify combustion, cazimi and under-beams for Moon–Saturn relative to the Sun.", + "description": "Add combustion, cazimi and under-beams.", "type": "boolean" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" }, "visual_config": { - "description": "Optional rendering preferences (only used when include_visual=true).", + "description": "Rendering options for include_visual.", "properties": { "size": { - "description": "Canvas size in pixels, 200–4000. Default: 800.", + "description": "Pixels, 200–4000. Default 800.", "type": "number" }, "theme": { - "description": "Color theme. Default: light.", + "description": "Default light.", "enum": [ "light", "dark" - "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.", + "description": "Default tropical. `sidereal` subtracts the ayanamsa (~24°) from every longitude.", "enum": [ "tropical", "sidereal"
--- pinned/ephemeris_next_eclipse +++ observed/ephemeris_next_eclipse { "_meta": { "openai/toolInvocation/invoked": "Eclipse found", - "description": "Use this when the user asks 'when is the next eclipse', 'when is the next solar / lunar eclipse', 'is there an eclipse visible from Tokyo' or 'when is the next total lunar eclipse'. Returns the eclipse type, date/time of maximum, magnitude and duration of totality; with latitude+longitude it adds local contact times and visibility for that place, without them it returns the next global eclipse of that type.\n\nCREDIT COST: 1 credit per call.", + "description": "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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "ISO 8601 date to search after (e.g. '2026-01-01'). Defaults to today if omitted.", + "description": "ISO 8601 date; default today.", "type": "string" }, "eclipse_type": { - "description": "Eclipse type to search for. Use 'any' for whichever comes first (solar or lunar).", + "description": "'any' = next of either.", "enum": [ "solar", "lunar", - "description": "Observer latitude in decimal degrees (optional). When provided with longitude, returns local contact times and visibility.", + "description": "Optional observer latitude; with longitude adds local times and visibility.", "type": "number" }, "longitude": { - "description": "Observer longitude in decimal degrees (optional, pair with latitude).", + "description": "Optional; pair with latitude.", "type": "number" } },
--- pinned/ephemeris_next_lunar_phase +++ observed/ephemeris_next_lunar_phase { "_meta": { "openai/toolInvocation/invoked": "Lunar phase dates found", - "description": "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 datetime of each upcoming occurrence of the requested phase (phase = new_moon | full_moon | first_quarter | last_quarter), optionally after a given date and for count occurrences.\n\nCREDIT COST: 2 credits per occurrence; count max 12.", + "description": "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.\n\nCREDIT COST: 2 credits per occurrence; count max 12.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "ISO 8601 date to search from (e.g. '2026-06-01'). Defaults to today (UTC) if omitted.", + "description": "ISO 8601 date; default today (UTC).", "type": "string" }, "count": { - "description": "Number of upcoming occurrences to return (1-12, 2 credits each). Default 1.", + "description": "1–12, 2 credits each. Default 1.", "type": "integer" }, "phase": { - "description": "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.", + "description": "Phase to find.", "enum": [ "new_moon", "full_moon",
--- pinned/ephemeris_planet_position +++ observed/ephemeris_planet_position { "_meta": { "openai/toolInvocation/invoked": "Planet position computed", - "description": "Use this when the user asks 'where is Mars right now', 'what sign is Venus in today', 'what degree is the Sun at', 'where was Jupiter on my birthday', 'where is the North Node' — one body at one moment — or 'what's my star sign / zodiac sign' from a birth date alone (planet_id=0; a bare date resolves to noon UTC, no location needed). Returns ecliptic longitude, latitude, distance, speed and retrograde flag.\n\nPLANET 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.\nNODES: 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).\n\nCREDIT COST: 1 credit per call.", + "description": "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.\n\nPLANET 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.\nNODES: 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).\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "latitude": { - "description": "Observer latitude for topocentric position (optional). Omit for geocentric.", + "description": "Optional; topocentric if set.", "type": "number" }, "longitude": { - "description": "Observer longitude for topocentric position (optional). Omit for geocentric.", + "description": "Optional; topocentric if set.", "type": "number" }, "planet_id": { - "description": "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).", + "description": "0 Sun, 1 Moon, 2–9 Mercury–Pluto, 10 mean node, 11 true node, 12 Lilith, 15 Chiron, 17–20 Ceres/Pallas/Juno/Vesta.", "type": "integer" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/ephemeris_progressed_chart +++ observed/ephemeris_progressed_chart { "_meta": { "openai/toolInvocation/invoked": "Progressed chart computed", - "description": "Use this when the user asks 'what's my progressed chart', 'where is my progressed Moon / Sun', 'what sign has my progressed Moon moved into' 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.\n\nCREDIT COST: 1 credit per call.", + "description": "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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "birth_latitude": { - "description": "Birth latitude in decimal degrees.", + "description": "Birth latitude.", "type": "number" }, "birth_longitude": { - "description": "Birth longitude in decimal degrees.", + "description": "Birth longitude.", "type": "number" }, "converse": { - "description": "Whether to include aspect grid in the response. Default false.", + "description": "Add the aspect grid. Default false.", "type": "boolean" }, "include_visual": { - "description": "Progression method. Defaults to 'secondary' (1 day = 1 year).", + "description": "Default secondary (1 day = 1 year).", "enum": [ "secondary", "solar_arc", - "description": "Optional label for the subject, echoed back in both natal_subject and progressed_subject. Defaults to a generic label if omitted.", + "description": "Optional subject label.", "type": "string" }, "target_datetime": { - "description": "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.", + "description": "Progress to. ISO 8601 date or zoned datetime.", "type": "string" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/ephemeris_relocation +++ observed/ephemeris_relocation { "_meta": { "openai/toolInvocation/invoked": "Relocated chart computed", - "description": "Use this when the user asks 'how does my chart change if I move to London', 'what's 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.\n\nCREDIT COST: 1 credit per call.", + "description": "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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Output format. 'llm' = compact token-efficient output (available on all tiers).", + "description": "'llm' = compact.", "enum": [ "json", "llm" - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "natal_latitude": { - "description": "Latitude of birth location in decimal degrees.", + "description": "Birth latitude.", "type": "number" }, "natal_longitude": { - "description": "Longitude of birth location in decimal degrees.", + "description": "Birth longitude.", "type": "number" }, "relocation_latitude": { - "description": "Latitude of the relocation city in decimal degrees (positive = North).", + "description": "New-place latitude (+N).", "type": "number" }, "relocation_longitude": { - "description": "Longitude of the relocation city in decimal degrees (positive = East).", + "description": "New-place longitude (+E).", "type": "number" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/ephemeris_retrograde_status +++ observed/ephemeris_retrograde_status { "_meta": { "openai/toolInvocation/invoked": "Retrograde status checked", - "description": "Use this when the user asks 'is Mercury retrograde right now', 'is Venus retrograde today', 'was Mars retrograde when I was born' or 'which planets are retrograde at the moment'. Returns is_retrograde, longitude speed and station proximity for one planet at one instant (planet_id; Mercury is planet_id=2), or for all ten planets when planet_id is omitted.\n\nCREDIT COST: 1 credit for a single planet; omitting planet_id runs all ten planets (10 credits, one per body).", + "description": "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.\n\nCREDIT COST: 1 credit per planet (10 for all).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "planet_id": { - "description": "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.", + "description": "0 Sun, 1 Moon, 2–9 Mercury–Pluto. 1 credit; omit for all ten (10 credits).", "type": "integer" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/ephemeris_solar_return +++ observed/ephemeris_solar_return { "_meta": { "openai/toolInvocation/invoked": "Solar return computed", - "description": "Use this when the user asks 'when exactly is my solar return', 'my solar return positions as data' 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).\n\nCREDIT COST: 5 credits per call.", + "description": "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).\n\nCREDIT COST: 5 credits per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "birth_latitude": { - "description": "Birth latitude in decimal degrees (optional, for location context).", + "description": "Optional birth latitude.", "type": "number" }, "birth_longitude": { - "description": "Birth longitude in decimal degrees (optional, for location context).", + "description": "Optional birth longitude.", "type": "number" }, "include_visual": { - "description": "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.", + "description": "Embed a chart-wheel SVG. +2 credits.", "type": "boolean" }, "return_latitude": { - "description": "Location latitude for the return chart (optional, if different from birth location).", + "description": "Optional return-location latitude.", "type": "number" }, "return_longitude": { - "description": "Location longitude for the return chart (optional).", + "description": "Optional return-location longitude.", "type": "number" }, "target_datetime": { - "description": "Date/time near which to find the Solar Return (ISO 8601 with offset or Z). Defaults to approximately 1 year from now if omitted.", + "description": "ISO 8601 near the return; zone required. Default about a year from now.", "type": "string" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" }, "visual_config": { - "description": "Optional rendering preferences (only used when include_visual=true).", + "description": "Rendering options for include_visual.", "properties": { "size": { - "description": "Canvas size in pixels, 200–4000. Default: 800.", + "description": "Pixels, 200–4000. Default 800.", "type": "number" }, "theme": { - "description": "Color theme. Default: light.", + "description": "Default light.", "enum": [ "light", "dark"
--- pinned/ephemeris_synastry +++ observed/ephemeris_synastry { "_meta": { "openai/toolInvocation/invoked": "Synastry computed", - "description": "Output format. 'llm' is compact and token-efficient (available on all tiers).", + "description": "'llm' = compact.", "enum": [ "json", "llm" - "description": "House system for both charts. Defaults to 'placidus'.", + "description": "Default placidus.", "enum": [ "placidus", "whole_sign", - "description": "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.", + "description": "Embed a bi-wheel SVG. +2 credits.", "type": "boolean" }, "person_a_datetime": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "person_a_latitude": { - "description": "IANA timezone for Person A's birth location (e.g. `America/Chicago`); required when the datetime is naive.", + "description": "IANA zone for Person A's birth location (local datetime).", "type": "string" }, "person_b_datetime": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "person_b_latitude": { - "description": "IANA timezone for Person B's birth location (e.g. `America/Los_Angeles`); required when the datetime is naive.", + "description": "IANA zone for Person B's birth location (local datetime).", "type": "string" }, "visual_config": { - "description": "Optional rendering preferences (only used when include_visual=true).", + "description": "Rendering options for include_visual.", "properties": { "size": { - "description": "Canvas size in pixels, 200–4000. Default: 800.", + "description": "Pixels, 200–4000. Default 800.", "type": "number" }, "theme": { - "description": "Color theme. Default: light.", + "description": "Default light.", "enum": [ "light", "dark"
--- pinned/ephemeris_time_lords +++ observed/ephemeris_time_lords { "_meta": { "openai/toolInvocation/invoked": "Time lords computed", - "description": "Use this when the user asks for 'zodiacal releasing', 'releasing from the Lot of Spirit', 'releasing from the Lot of Fortune', 'loosing of the bond', 'my annual profections', 'who is my time lord this year' or 'my firdaria'. Returns Hellenistic time-lord periods for a birth and a date window on one timeline: zodiacal releasing levels 1 and 2 with angular (peak) and loosing-of-the-bond flags, the profection year with its house and lord, optionally firdaria major and sub-periods, and the dates each one changes. The Lots, rising sign and day or night sect are worked out from the birth place.\n\nCREDIT COST: 5 credits for releasing from one Lot plus profections (1 natal + 2 + 2); 2 more per extra Lot or firdaria.", + "description": "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.\n\nCREDIT COST: 5 credits for releasing from one Lot plus profections (1 natal + 2 + 2); 2 more per extra Lot or firdaria.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "birth_latitude": { - "description": "Birth latitude in decimal degrees.", + "description": "Birth latitude.", "type": "number" }, "birth_longitude": { - "description": "Birth longitude in decimal degrees.", + "description": "Birth longitude.", "type": "number" }, "from_date": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" }, "to_date": {
--- pinned/ephemeris_transits +++ observed/ephemeris_transits { "_meta": { "openai/toolInvocation/invoked": "Transit dates found", - "description": "Use this when the user asks 'when is my Saturn return', 'when does Pluto square my Sun', 'when will Jupiter conjunct my Moon', 'what transits do I have 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.\n\nASPECT ANGLES (aspect_angle): 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. Saturn return → transiting_planets=['saturn'], natal_points=['saturn'].\nDefault transiting_planets and natal_points: sun through saturn; naming fewer is faster.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT 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.", + "description": "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.\n\nASPECT ANGLES (aspect_angle): 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. Saturn return → transiting_planets=['saturn'], natal_points=['saturn'].\nDefault transiting_planets and natal_points: sun through saturn; naming fewer is faster.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT 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.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "Degrees added to each natal longitude: 0 conjunction (default), 90 square, 120 trine, 180 opposition.", "type": "number" }, "end_date": { - "description": "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.", + "description": "Window end. ISO 8601 date (whole UTC day) or zoned datetime.", "type": "string" }, "natal_datetime": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "natal_latitude": { - "description": "Latitude of birth location in decimal degrees.", + "description": "Birth latitude.", "type": "number" }, "natal_longitude": { - "description": "Longitude of birth location in decimal degrees.", + "description": "Birth longitude.", "type": "number" }, "natal_points": { - "description": "Natal point IDs whose exact longitudes should be targeted. E.g. ['sun', 'moon', 'asc', 'mc', 'saturn', 'chiron']. Omit for all core points.", + "description": "E.g. ['sun','moon','asc','mc']. Default all core points.", "items": { "type": "string" }, - "description": "IANA timezone for the natal birth location (e.g. `America/Chicago`); required when the datetime is naive.", + "description": "IANA zone for the natal birth location (local datetime).", "type": "string" }, "sort": { - "description": "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.", + "description": "Window start. ISO 8601 date (whole UTC day) or zoned datetime.", "type": "string" }, "transiting_planets": { - "description": "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.", + "description": "E.g. ['saturn','pluto','chiron']. Default Sun through Saturn; outers and Chiron only when named.", "items": { "type": "string" },
--- pinned/explore_bazi_chart +++ observed/explore_bazi_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bazi?v=4.27.0", + "openai/outputTemplate": "ui://openephemeris/bazi?v=4.29.0", "openai/toolInvocation/invoked": "Four Pillars ready", "openai/toolInvocation/invoking": "Building your Four Pillars…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bazi?v=4.27.0", + "resourceUri": "ui://openephemeris/bazi?v=4.29.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bazi?v=4.27.0" + "ui/resourceUri": "ui://openephemeris/bazi?v=4.29.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'what's my BaZi', 'my Four Pillars', 'what's my Day Master', 'my Chinese astrology chart', 'what's my Chinese element' or 'my Chinese birth 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.\n\nCREDIT COST: 3 credits per call (1 base + 2 visual render).", + "description": "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.\n\nCREDIT COST: 3 credits per call (1 base + 2 visual render).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "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.", "type": "string" }, "day": { - "description": "Birth hour (0–23). Optional, defaults to 12 (noon). Chinese shí hours are 2-hour blocks — precision within a 2-hour window is sufficient.", + "description": "0–23. Default 12.", "type": "integer" }, "latitude": { - "description": "Birth longitude, decimal degrees (east+).", + "description": "Birth longitude.", "type": "number" }, "minute": { - "description": "Birth minute (0–59). Optional, defaults to 0. Only matters under true_solar_time or near a boundary.", + "description": "0–59. Default 0.", "type": "integer" }, "month": { - "description": "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.", + "description": "IANA zone of the birth place; needed for a zoned datetime.", "type": "string" }, "true_solar_time": {
--- pinned/explore_bi_wheel +++ observed/explore_bi_wheel { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bi-wheel?v=4.27.0", + "openai/outputTemplate": "ui://openephemeris/bi-wheel?v=4.29.0", "openai/toolInvocation/invoked": "Bi-wheel ready", "openai/toolInvocation/invoking": "Comparing the two charts…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bi-wheel?v=4.27.0", + "resourceUri": "ui://openephemeris/bi-wheel?v=4.29.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bi-wheel?v=4.27.0" + "ui/resourceUri": "ui://openephemeris/bi-wheel?v=4.29.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'are we compatible', 'compare my chart with my partner's', 'what's my horoscope for today', 'what's hitting my chart right now', 'what's my solar return chart this year' or 'my progressed chart on my birth chart' — 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`).\n\nCREDIT 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.", + "description": "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`).\n\nCREDIT 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.", "inputSchema": { "properties": { "house_system": { - "description": "House system the wheel draws and labels. Use whole_sign for Hellenistic / traditional readings. Defaults to placidus. Applies to every mode, both rings.", + "description": "Default placidus; both rings.", "enum": [ "placidus", "whole_sign", - "description": "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.", + "description": "Person 1 place name, e.g. 'New York, NY'; geocoded. Coordinates win if given.", "type": "string" }, "mode": { - "description": "Chart comparison mode. Defaults to 'synastry'.", + "description": "Default synastry.", "enum": [ "synastry", "transit", - "description": "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.", + "description": "Person 1 / natal birth. ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "person1_latitude": { - "description": "Birth latitude for Person 1 (decimal degrees, positive = North). Optional if `location` is a place name — the resolver fills it in.", + "description": "Person 1 latitude (+N). Optional with `location`.", "type": "number" }, "person1_longitude": { - "description": "Birth longitude for Person 1 (decimal degrees, positive = East). Optional if `location` is a place name.", + "description": "Person 1 longitude (+E). Optional with `location`.", "type": "number" }, "person1_name": { - "description": "Display name for Person 1 / Natal chart (e.g. 'Alice'). Used in the badge and summary.", + "description": "Person 1 display name.", "type": "string" }, "person1_timezone": { - "description": "IANA timezone for Person 1's birth location (e.g. `America/New_York`); required when the datetime is naive.", + "description": "IANA zone for Person 1's birth location (local datetime).", "type": "string" }, "person2_datetime": { - "description": "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.", + "description": "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`).", "type": "string" }, "person2_latitude": { - "description": "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.", + "description": "Person 2 latitude. Required in synastry unless `person2_location`; other modes default to Person 1.", "type": "number" }, "person2_location": { - "description": "Person 2 / outer-chart place name, resolved like `location`. person2_latitude/person2_longitude win.", + "description": "Person 2 / outer-chart place name; coordinates win.", "type": "string" }, "person2_longitude": { - "description": "Birth longitude for Person 2. REQUIRED in synastry unless `person2_location` is given. Other modes default to Person 1's coords.", + "description": "Person 2 longitude; same rule as latitude.", "type": "number" }, "person2_name": { - "description": "Display name for Person 2 (synastry mode). Used in the badge and summary.", + "description": "Person 2 display name.", "type": "string" }, "person2_timezone": { - "description": "IANA timezone for Person 2 / the outer chart (e.g. `America/Chicago`); required when the datetime is naive.", + "description": "IANA zone for Person 2 / the outer chart (local datetime).", "type": "string" } },
--- pinned/explore_human_design +++ observed/explore_human_design { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.27.0", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.29.0", "openai/toolInvocation/invoked": "Bodygraph ready", "openai/toolInvocation/invoking": "Drawing your bodygraph…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.27.0", + "resourceUri": "ui://openephemeris/bodygraph?v=4.29.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.27.0" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.29.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'what's my Human Design', 'am I a Generator / Projector / Manifestor / Reflector', 'show my bodygraph', 'what's my HD type and profile', 'what's my strategy and authority' or 'what's my incarnation cross'. Returns an interactive bodygraph (inline in Claude and ChatGPT; text summary elsewhere) showing defined/undefined centers, active gates, channels, Type, Profile, Authority and Incarnation Cross, with any center or gate clickable for interpretation. Birthplace may be a place name (`location`).\n\nCREDIT 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.", + "description": "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`).\n\nCREDIT 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.", "inputSchema": { "properties": { "datetime": { - "description": "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.", + "description": "ISO 8601 with a required zone, or local time with `timezone`; minute-accurate.", "type": "string" }, "latitude": { - "description": "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.", + "description": "Birth latitude (optional with `location`).", "type": "number" }, "location": { - "description": "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.", + "description": "Birth place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon.", "type": "string" }, "longitude": { - "description": "Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name.", + "description": "Birth longitude (optional with `location`).", "type": "number" }, "timezone": { - "description": "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.", + "description": "IANA zone for a local birth time.", "type": "string" } },
--- pinned/explore_human_design_connection +++ observed/explore_human_design_connection { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.27.0", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.29.0", "openai/toolInvocation/invoked": "Connection chart ready", "openai/toolInvocation/invoking": "Overlaying both bodygraphs…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.27.0", + "resourceUri": "ui://openephemeris/bodygraph?v=4.29.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.27.0" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.29.0" }, "annotations": { "destructiveHint": false, - "description": "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.", + "description": "Set by the embedded app. Default graph.", "enum": [ "graph", "mandala" - "description": "Birth latitude, decimal degrees (+N). Optional if `location` is set.", + "description": "Birth latitude (+N). Optional with `location`.", "type": "number" }, "location": { - "description": "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.", + "description": "Birth place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon.", "type": "string" }, "longitude": { - "description": "Birth longitude, decimal degrees (+E). Optional if `location` is set.", + "description": "Birth longitude (+E). Optional with `location`.", "type": "number" }, "timezone": { - "description": "Birth latitude, decimal degrees (+N). Optional if `location` is set.", + "description": "Birth latitude (+N). Optional with `location`.", "type": "number" }, "location": { - "description": "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.", + "description": "Birth place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon.", "type": "string" }, "longitude": { - "description": "Birth longitude, decimal degrees (+E). Optional if `location` is set.", + "description": "Birth longitude (+E). Optional with `location`.", "type": "number" }, "timezone": { - "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).", + "description": "Set by the embedded app.", "type": "string" }, "theme": { - "description": "Visual theme for the overlay bodygraph. Supplied by the embedded app to match the host; defaults to dark.", + "description": "Set by the embedded app. Default dark.", "enum": [ "light", "dark"
--- pinned/explore_human_design_transit +++ observed/explore_human_design_transit { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.27.0", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.29.0", "openai/toolInvocation/invoked": "Transit overlay ready", "openai/toolInvocation/invoking": "Overlaying the transits on your bodygraph…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.27.0", + "resourceUri": "ui://openephemeris/bodygraph?v=4.29.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.27.0" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.29.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'what are today's Human Design transits for me', 'what gates are being activated for me right now', 'which channels does this transit complete in my chart' or 'how is the current sky affecting my bodygraph'. Returns an interactive overlay bodygraph (inline in Claude and ChatGPT; text summary elsewhere) highlighting the channels the transit temporarily COMPLETES with the natal chart and any centers it newly defines, for now or a chosen datetime. Birthplace may be a place name (`location`).\n\nCREDIT 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.", + "description": "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`).\n\nCREDIT 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.", "inputSchema": { "properties": { "datetime": { - "description": "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.", + "description": "Natal birth: ISO 8601 with a required zone, or local time with `timezone`.", "type": "string" }, "latitude": { - "description": "Natal birth latitude in decimal degrees (positive = North). Optional if `location` is a place name — the resolver fills it in.", + "description": "Natal latitude (optional with `location`).", "type": "number" }, "layout": { - "description": "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.", + "description": "Set by the embedded app. Default graph.", "enum": [ "graph", "mandala" - "description": "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.", + "description": "Natal place name, e.g. 'New York, NY'; geocoded. Give this or lat/lon.", "type": "string" }, "longitude": { - "description": "Natal birth longitude in decimal degrees (positive = East). Optional if `location` is a place name.", + "description": "Natal longitude (optional with `location`).", "type": "number" }, "render_token": { - "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).", + "description": "Set by the embedded app.", "type": "string" }, "theme": { - "description": "Visual theme for the overlay bodygraph. Supplied by the embedded app to match the host; defaults to dark.", + "description": "Set by the embedded app. Default dark.", "enum": [ "light", "dark" - "description": "IANA timezone for the birth location (e.g. 'America/New_York').", + "description": "IANA zone for a local birth time.", "type": "string" }, "transit_datetime": { - "description": "Transit moment, ISO 8601; must include 'Z' or an offset. Defaults to now (UTC) when omitted.", + "description": "ISO 8601; must include Z/offset. Default now.", "type": "string" } },
--- pinned/explore_moon_phase +++ observed/explore_moon_phase { "_meta": { - "openai/outputTemplate": "ui://openephemeris/moon-phase?v=4.27.0", + "openai/outputTemplate": "ui://openephemeris/moon-phase?v=4.29.0", "openai/toolInvocation/invoked": "Moon phase ready", "openai/toolInvocation/invoking": "Reading the Moon…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/moon-phase?v=4.27.0", + "resourceUri": "ui://openephemeris/moon-phase?v=4.29.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/moon-phase?v=4.27.0" + "ui/resourceUri": "ui://openephemeris/moon-phase?v=4.29.0" }, "annotations": { "destructiveHint": false, - "description": "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) with:\n• SVG crescent Moon showing real-time illumination percentage\n• Phase name and waxing/waning indicator\n• Current Moon sign with degree\n• Void-of-Course status with timing details\n• Lunar age (days in the synodic cycle) and days to the next New and Full Moon\n• The tightest applying lunar aspects\n\nCREDIT COST: 3 credits per call (phase + void-of-course + aspects, 1 each).", + "description": "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.\n\nCREDIT COST: 3 credits per call (phase + void-of-course + aspects, 1 each).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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).", + "description": "ISO 8601 with a required zone, or local time with `timezone`. Default now.", "type": "string" }, "latitude": { - "description": "Observer latitude (optional, used for local void-of-course calculations).", + "description": "Optional; for local void-of-course.", "type": "number" }, "longitude": { - "description": "Observer longitude (optional, used for local void-of-course calculations).", + "description": "Optional; for local void-of-course.", "type": "number" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/explore_natal_chart +++ observed/explore_natal_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/chart-wheel?v=4.27.0", + "openai/outputTemplate": "ui://openephemeris/chart-wheel?v=4.29.0", "openai/toolInvocation/invoked": "Birth chart ready", "openai/toolInvocation/invoking": "Casting your birth chart…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/chart-wheel?v=4.27.0", + "resourceUri": "ui://openephemeris/chart-wheel?v=4.29.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/chart-wheel?v=4.27.0" + "ui/resourceUri": "ui://openephemeris/chart-wheel?v=4.29.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks '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, together with the birth date and local time and its zone.\n\nCREDIT COST: 1 credit per call (+1 to resolve a place name).", + "description": "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.\n\nCREDIT COST: 1 credit per call (+1 to resolve a place name).", "inputSchema": { "properties": { "ayanamsa": { - "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 (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'].", + "description": "Default 13 (Sun–Pluto, Chiron, Nodes); ['all'] adds Liliths, asteroids, TNOs, Uranian points. E.g. ['sun','lilith','lilith_true','sedna'].", "items": { "type": "string" }, - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "house_system": { - "description": "House system to use (default: placidus).", + "description": "Default placidus.", "enum": [ "placidus", "whole_sign", - "description": "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.", + "description": "Birth latitude (optional with `location`).", "type": "number" }, "location": { - "description": "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.", + "description": "Birth place name, e.g. 'New York, NY'; geocoded. Coordinates win if given.", "type": "string" }, "longitude": { - "description": "Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name.", + "description": "Birth longitude (optional with `location`).", "type": "number" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" }, "zodiac_type": {
--- pinned/explore_transit_timeline +++ observed/explore_transit_timeline { "_meta": { - "openai/outputTemplate": "ui://openephemeris/transit-timeline?v=4.27.0", + "openai/outputTemplate": "ui://openephemeris/transit-timeline?v=4.29.0", "openai/toolInvocation/invoked": "Transit timeline ready", "openai/toolInvocation/invoking": "Searching your upcoming transits…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/transit-timeline?v=4.27.0", + "resourceUri": "ui://openephemeris/transit-timeline?v=4.29.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/transit-timeline?v=4.27.0" + "ui/resourceUri": "ui://openephemeris/transit-timeline?v=4.29.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'what transits are coming up for me', 'what's my forecast for the next year', 'when will Saturn hit my chart', 'show my upcoming transits' 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 glyph, the natal point it contacts, the aspect, zodiac position 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.\n\nASPECT 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.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT COST: 1 + span price: ≤1y 5 (6 total), ≤3y 10, ≤5y 15, ≤10y 25, ≤20y 40, ≤40y 70.", + "description": "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.\n\nASPECT 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.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT COST: 1 + span price: ≤1y 5 (6 total), ≤3y 10, ≤5y 15, ≤10y 25, ≤20y 40, ≤40y 70.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Aspect angle in degrees. 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine, 60 = sextile.", + "description": "Degrees: 0 conjunction (default), 60, 90, 120, 180.", "type": "number" }, "end_date": { - "description": "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.", + "description": "Window end. ISO 8601 date (whole UTC day) or zoned datetime.", "type": "string" }, "natal_datetime": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "natal_latitude": { - "description": "Latitude of birth location in decimal degrees.", + "description": "Birth latitude.", "type": "number" }, "natal_longitude": { - "description": "Longitude of birth location in decimal degrees.", + "description": "Birth longitude.", "type": "number" }, "natal_points": { - "description": "Natal point IDs to target, e.g. ['sun','moon','asc','mc','saturn']. Omit for the 7 classical bodies.", + "description": "E.g. ['sun','moon','asc','mc']. Default the 7 classical bodies.", "items": { "type": "string" }, - "description": "IANA timezone for the natal birth location (e.g. `America/Chicago`); required when the datetime is naive.", + "description": "IANA zone for the natal birth location (local datetime).", "type": "string" }, "orb_deg": { - "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.", + "description": "In-orb window around each hit, degrees. Default 1, max 15.", "type": "number" }, "start_date": { - "description": "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.", + "description": "Window start. ISO 8601 date (whole UTC day) or zoned datetime.", "type": "string" }, "transiting_planets": { - "description": "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.", + "description": "E.g. ['saturn','pluto','chiron']. Default Sun through Saturn; outers and Chiron only when named.", "items": { "type": "string" },
--- pinned/explore_vedic_chart +++ observed/explore_vedic_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/vedic-chart?v=4.27.0", + "openai/outputTemplate": "ui://openephemeris/vedic-chart?v=4.29.0", "openai/toolInvocation/invoked": "Vedic chart ready", "openai/toolInvocation/invoking": "Casting your Vedic chart…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/vedic-chart?v=4.27.0", + "resourceUri": "ui://openephemeris/vedic-chart?v=4.29.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/vedic-chart?v=4.27.0" + "ui/resourceUri": "ui://openephemeris/vedic-chart?v=4.29.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'show my Vedic chart', 'my Jyotish chart', 'what's my nakshatra', 'my sidereal birth chart', 'my rashi 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`).\n\nCREDIT COST: 3 credits per call (chart + render; +1 to resolve a place name).", + "description": "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`).\n\nCREDIT COST: 3 credits per call (chart + render; +1 to resolve a place name).", "inputSchema": { "properties": { "ayanamsa": { - "description": "Ayanamsa system for sidereal conversion. Defaults to 'lahiri'.", + "description": "Default lahiri.", "enum": [ "lahiri", "fagan_bradley", - "description": "ISO 8601 birth datetime in UTC, e.g. '1990-06-15T14:30:00Z'. Must include 'Z' or a timezone offset.", + "description": "ISO 8601 with a required zone, or local time with `timezone`.", "type": "string" }, "latitude": { - "description": "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.", + "description": "Birth latitude (optional with `location`).", "type": "number" }, "location": { - "description": "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.", + "description": "Birth place name, e.g. 'Mumbai, India'; geocoded. Coordinates win if given.", "type": "string" }, "longitude": { - "description": "Birth longitude in decimal degrees (positive = East). Optional if `location` is a place name.", + "description": "Birth longitude (optional with `location`).", "type": "number" }, "timezone": { - "description": "IANA timezone name for the birth location (e.g. 'Asia/Kolkata'). Used to convert a local birth time without a UTC offset.", + "description": "IANA zone for a local birth time.", "type": "string" } },
+ tool added: find_calculation
--- pinned/human_design_chart +++ observed/human_design_chart { "_meta": { "openai/toolInvocation/invoked": "Human Design data computed", - "description": "Use this when the Human Design chart is wanted as data — 'give me my HD activations', 'which planets sit in which gates, design and personality', 'what are my variables', 'my Human Design chart as JSON'. Returns Type, Strategy, Authority, Profile, defined and undefined Centers, activated Gates and Channels, Incarnation Cross, and both Personality (birth) and Design (~88° of Sun before birth) planetary positions.\n\nCREDIT COST: 2 credits per call.\n\nHD is minute-sensitive: a zone-less datetime is rejected, because an hour of error changes the Profile and the Design Sun line. Takes coordinates, not a place name.", + "description": "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.\n\nCREDIT COST: 2 credits per call.\n\nTakes coordinates, not a place name.", "inputSchema": { "additionalProperties": false, "properties": { - "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.", + "description": "'dream': 15-gate chart, no type or profile. Default 'waking'; not with include_visual.", "enum": [ "waking", "dream" - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "format": { - "description": "Output format. 'llm' returns compact array projection for token efficiency (available on all tiers). 'json' returns verbose full output.", + "description": "'llm' = compact; 'json' = full.", "enum": [ "json", "llm" - "description": "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.", + "description": "Embed a bodygraph SVG. +2 credits.", "type": "boolean" }, "latitude": { - "description": "Latitude of birth location in decimal degrees (positive = North).", + "description": "Birth latitude.", "type": "number" }, "longitude": { - "description": "Longitude of birth location in decimal degrees (positive = East).", + "description": "Birth longitude.", "type": "number" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" }, "visual_config": { - "description": "Optional rendering preferences (only used when include_visual=true).", + "description": "Rendering options for include_visual.", "properties": { "size": { - "description": "Canvas size in pixels, 200–4000. Default: 800.", + "description": "Pixels, 200–4000. Default 800.", "type": "number" }, "theme": {
--- pinned/human_design_transit_timeline +++ observed/human_design_transit_timeline { "_meta": { "openai/toolInvocation/invoked": "Gate transits found", - "description": "Use this when the user asks 'when does transiting Saturn enter my gate 34', 'when do I get channel 20-34 from transits' — Human Design transits over a date range. Returns each gate every body enters and leaves, at exact times; with birth data or natal_gates, the windows in which a transit completes one of the person's channels.\n\nCREDIT COST: up to 1 year 5, 3 years 10, 5 years 15. Explorer plans: 1 year at most.", + "description": "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.\n\nCREDIT COST: up to 1 year 5, 3 years 10, 5 years 15. Explorer plans: 1 year at most.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "bodies": { - "description": "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.", + "description": "ISO 8601 date (whole UTC day) or zoned datetime.", "type": "string" }, "include_lines": { - "description": "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.", + "description": "ISO 8601 date (whole UTC day) or zoned datetime.", "type": "string" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" } },
--- pinned/location_search +++ observed/location_search { "_meta": { "openai/toolInvocation/invoked": "Place found", - "description": "Use this when the user gives a birth city or any place name — 'born in Chicago', 'Portland', 'Mumbai, India' — 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.", + "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Optional ISO 3166-1 alpha-2 country code (e.g. 'US') to bias ranking. Boost, not filter.", + "description": "ISO country code to boost, e.g. 'US'.", "type": "string" }, "date": { - "description": "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.", + "description": "YYYY-MM-DD; adds the UTC offset in force there that day (historical DST). Pre-1970 corrects the top match (+1 credit).", "type": "string" }, "near": { - "description": "Optional 'lat,lon' proximity hint (e.g. '37.77,-122.42') to bias ranking toward nearby places.", + "description": "'lat,lon' to boost nearby places.", "type": "string" }, "query": { - "description": "Optional admin1 (state/province) qualifier to bias ranking — full name ('Michigan'), ASCII name, or code ('MI'). Boost, not filter.", + "description": "State/province to boost, e.g. 'MI'.", "type": "string" } },
--- pinned/timezone_resolve +++ observed/timezone_resolve { "_meta": { "openai/toolInvocation/invoked": "Timezone resolved", - "description": "Use this when the user asks 'what timezone is this location in' or 'what was the UTC offset there on that date', or when latitude/longitude are known and the IANA timezone is needed to interpret a local birth time. Takes coordinates, not a place name. Returns the IANA zone and, with `date`, the historically-correct UTC offset that applied on that date. CREDIT COST: 1 credit per call.", + "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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).", + "description": "YYYY-MM-DD; adds the UTC offset in force that day. Pre-1970 +1 credit.", "type": "string" }, "latitude": { - "description": "Latitude in decimal degrees, -90 to 90 (north positive).", + "description": "Decimal degrees (+N).", "type": "number" }, "longitude": { - "description": "Longitude in decimal degrees, -180 to 180 (east positive).", + "description": "Decimal degrees (+E).", "type": "number" } },
--- pinned/vedic_chart +++ observed/vedic_chart { "_meta": { "openai/toolInvocation/invoked": "Vedic positions computed", - "description": "Use this when the Vedic / Jyotish chart is wanted as data — 'my sidereal placements as JSON', 'nakshatra and pada for every planet as a table', 'my navamsa positions', '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.\n\nCREDIT COST: 1 credit per call.", + "description": "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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Ayanamsa system for sidereal conversion. Defaults to 'lahiri'.", + "description": "Default lahiri.", "enum": [ "lahiri", "fagan_bradley", - "description": "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.", + "description": "ISO 8601; zone required (`Z`/offset, or local time plus `timezone`).", "type": "string" }, "latitude": { - "description": "Birth latitude in decimal degrees (north positive).", + "description": "Birth latitude (+N).", "type": "number" }, "longitude": { - "description": "Birth longitude in decimal degrees (east positive).", + "description": "Birth longitude (+E).", "type": "number" }, "panchang": { - "description": "Return the panchang for the local date in datetime instead: tithi, karana, yoga, nakshatra, vara, Rahu Kaal.", + "description": "Return the day's panchang instead (tithi, yoga, nakshatra, Rahu Kaal).", "type": "boolean" }, "timezone": { - "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", + "description": "IANA zone for a local datetime.", "type": "string" }, "vargas": {
tool removed: dev_list_allowed
Changed 2026-10-25 11:31 UTC
6 descriptions rewritten, 11 schema or annotation changes with the description left byte-identical, 2 tools added, 1 tool removed.
--- pinned/acg_hits +++ observed/acg_hits { "_meta": { "openai/toolInvocation/invoked": "Location lines found", - "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).", + "description": "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).", "items": { "additionalProperties": false, "properties": { - "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" } },
--- pinned/acg_power_lines +++ observed/acg_power_lines { "_meta": { "openai/toolInvocation/invoked": "Planetary lines traced", - "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).", + "description": "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).", "items": { "additionalProperties": false, "properties": { - "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" } }, - "description": "Filter lines near this latitude (optional, for hits mode).", + "description": "Filter lines near this latitude.", "type": "number" }, "query_longitude": { - "description": "Filter lines near this longitude (optional, for hits mode).", + "description": "Filter lines near this longitude.", "type": "number" }, "radius_deg": {
--- pinned/dev_read_api +++ observed/dev_read_api { "_meta": { "openai/toolInvocation/invoked": "API response ready", - "description": "Use this when the user asks for something no typed tool covers — 'is today a good biodynamic planting day', 'what's the tidal forcing', 'what Chinese zodiac animal is 2026', 'which bodies do you support' — or any other allowlisted GET endpoint. Returns the endpoint's JSON. Read-only HTTP GET; POST endpoints are not accepted by this tool.\n\nTarget API: Open Ephemeris REST API (https://api.openephemeris.com). Only allowlisted endpoint paths are accepted.\n\nCREDIT COST: 1 for most; /predictive/* 5 (transits/search 5-70 by span); /comparative/* 3; /calendar/* 10 (moon-phases, lunar-standstill 2; cross-quarter 5); /acg/* 10 (Pro); /electional/* 5 (span-priced searches are Pro tier; moment-analysis and station-tracker are not tier-gated); /human-design/*, /iching/* 2 (composite, transit-chart 3; penta 2/member); catalogs 0; 4xx/5xx refunded. Query {format: 'llm'} = compact output.\n\n\n\nCOMMON CALLS:\n GET /ephemeris/moon/phase — Current/queried moon phase\n GET /ephemeris/moon/void-of-course — Next void-of-course period\n GET /ephemeris/agro/daily — Biodynamic farming day quality\n GET /ephemeris/agro/calendar — Multi-day biodynamic calendar\n GET /ephemeris/agro/void-of-course — Biodynamic VoC periods\n GET /eclipse/next-visible — Next eclipse visible from a location (query: lat, lon, type=solar|lunar)\n GET /eclipse/solar/global — Next global solar eclipse (query: date=YYYY-MM-DD)\n GET /eclipse/solar/local — Local solar eclipse (query: lat, lon)\n GET /tidal/forcing — Gravitational tidal forcing index\n GET /calendar/astrology/moon-phases — next New/Quarter/Full Moon after a date or jd\n GET /location/autocomplete — Geocode a place name (query: query=City Name)\n GET /chinese/zodiac — Chinese zodiac year element/animal\n GET /catalogs/bodies — List all supported celestial bodies\n", + "description": "Use this when the user asks for something no typed tool covers — 'is today a good biodynamic planting day', 'what's the tidal forcing', 'what Chinese zodiac animal is 2026', 'which bodies do you support' — or any other allowlisted GET endpoint. Returns the endpoint's JSON. Read-only HTTP GET; POST endpoints are not accepted by this tool.\n\nTarget API: Open Ephemeris REST API (https://api.openephemeris.com). Only allowlisted endpoint paths are accepted.\n\nCREDIT COST: 1 for most; /predictive/* 5 (transits/search 5-70 by span); /comparative/* 3; /calendar/* 10 (moon-phases, lunar-standstill 2; cross-quarter 5); /acg/* 10 (Pro); /electional/* 5 (span-priced searches are Pro tier; moment-analysis and station-tracker are not tier-gated); /human-design/*, /iching/* 2 (composite, transit-chart 3; penta 2/member); catalogs 0; 4xx/5xx refunded. Query {format: 'llm'} = compact output.\n\n\n\nCOMMON CALLS:\n GET /ephemeris/moon/phase — Current/queried moon phase\n GET /ephemeris/moon/void-of-course — Next void-of-course period\n GET /ephemeris/agro/daily — Biodynamic farming day quality\n GET /ephemeris/agro/calendar — Multi-day biodynamic calendar\n GET /ephemeris/agro/void-of-course — Biodynamic VoC periods\n GET /eclipse/next-visible — Next eclipse visible from a location (query: lat, lon, type=solar|lunar)\n GET /eclipse/solar/global — Next global solar eclipse (query: date=YYYY-MM-DD)\n GET /eclipse/solar/local — Local solar eclipse (query: lat, lon)\n GET /time/solar-event — Sunrise/sunset/noon (query: date, latitude, longitude)\n GET /tidal/forcing — Gravitational tidal forcing index\n GET /calendar/astrology/moon-phases — next New/Quarter/Full Moon after a date or jd\n GET /location/autocomplete — Geocode a place name (query: query=City Name)\n GET /chinese/zodiac — Chinese zodiac year element/animal\n GET /catalogs/bodies — List all supported celestial bodies\n", "inputSchema": { "additionalProperties": false, "properties": {
+ tool added: ephemeris_ingresses
--- pinned/ephemeris_natal_chart +++ observed/ephemeris_natal_chart { "_meta": { "openai/toolInvocation/invoked": "Natal positions computed", - "description": "Use this when the birth chart is wanted 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, Hekate, Fortuna, Pandora, Asbolus and so on) — angles (ASC/MC/DSC/IC), house cusps, dignity condition, retrograde flags and the major aspect grid; format='llm' gives compact output. Takes coordinates, not a place name.\n\nCREDIT COST: 1 credit per call.", + "description": "Use this when the birth chart is wanted 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, Hekate, Fortuna, Pandora, Asbolus 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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "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.", + "description": "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.", "items": { "type": "string" }, - "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'.", + "description": "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.", "items": { "enum": [ "element_balance", - "harmonics" + "harmonics", + "dignities", + "sect", + "angle_aspects", + "human_design_gates" ], "type": "string" },
--- pinned/ephemeris_progressed_chart +++ observed/ephemeris_progressed_chart { "_meta": { "openai/toolInvocation/invoked": "Progressed chart computed", - "description": "Use this when the user asks 'what's my progressed chart', 'where is my progressed Moon / Sun', 'what sign has my progressed Moon moved into' 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 or tertiary.\n\nCREDIT COST: 1 credit per call.", + "description": "Use this when the user asks 'what's my progressed chart', 'where is my progressed Moon / Sun', 'what sign has my progressed Moon moved into' 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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { + "converse": { + "description": "Count backward from birth.", + "type": "boolean" + }, "include_aspects": { "description": "Whether to include aspect grid in the response. Default false.", "type": "boolean" - "tertiary" + "tertiary", + "minor" ], "type": "string" },
--- pinned/ephemeris_transits +++ observed/ephemeris_transits { "_meta": { "openai/toolInvocation/invoked": "Transit dates found", - "description": "Use this when the user asks 'when is my Saturn return', 'when does Pluto square my Sun', 'when will Jupiter conjunct my Moon', 'what transits do I have next 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.\n\nASPECT ANGLES (aspect_angle): 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. Saturn return → transiting_planets=['saturn'], natal_points=['saturn'], aspect_angle=0.\nEFFICIENCY: searches run faster when transiting_planets and natal_points are given; omitting both is slow. Default transiting_planets and natal_points: sun, moon, mercury, venus, mars, jupiter, saturn.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT 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.", + "description": "Use this when the user asks 'when is my Saturn return', 'when does Pluto square my Sun', 'when will Jupiter conjunct my Moon', 'what transits do I have 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.\n\nASPECT ANGLES (aspect_angle): 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. Saturn return → transiting_planets=['saturn'], natal_points=['saturn'].\nDefault transiting_planets and natal_points: sun through saturn; naming fewer is faster.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT 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.", "inputSchema": { "additionalProperties": false, "properties": { + "sort": { + "description": "time (default) or significance.", + "enum": [ + "time", + "significance" + ], + "type": "string" + }, "start_date": { "description": "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.", "type": "string"
--- pinned/explore_bazi_chart +++ observed/explore_bazi_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bazi?v=4.24.2", + "openai/outputTemplate": "ui://openephemeris/bazi?v=4.27.0", "openai/toolInvocation/invoked": "Four Pillars ready", "openai/toolInvocation/invoking": "Building your Four Pillars…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bazi?v=4.24.2", + "resourceUri": "ui://openephemeris/bazi?v=4.27.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bazi?v=4.24.2" + "ui/resourceUri": "ui://openephemeris/bazi?v=4.27.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_bi_wheel +++ observed/explore_bi_wheel { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bi-wheel?v=4.24.2", + "openai/outputTemplate": "ui://openephemeris/bi-wheel?v=4.27.0", "openai/toolInvocation/invoked": "Bi-wheel ready", "openai/toolInvocation/invoking": "Comparing the two charts…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bi-wheel?v=4.24.2", + "resourceUri": "ui://openephemeris/bi-wheel?v=4.27.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bi-wheel?v=4.24.2" + "ui/resourceUri": "ui://openephemeris/bi-wheel?v=4.27.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'are we compatible', 'compare my chart with my partner's', 'what's my horoscope for today', 'what's hitting my chart right now', 'what's my solar return chart this year' or 'my progressed chart on my birth chart' — 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`).\n\nCREDIT 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.\n\nHOUSE SYSTEM: set `house_system` to match the system you are interpreting in — whole_sign (Hellenistic / traditional), placidus (default), equal, koch, campanus or regiomontanus. The wheel draws and labels houses in that system, for the inner chart and the outer ring alike.", + "description": "Use this when the user asks 'are we compatible', 'compare my chart with my partner's', 'what's my horoscope for today', 'what's hitting my chart right now', 'what's my solar return chart this year' or 'my progressed chart on my birth chart' — 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`).\n\nCREDIT 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.", "inputSchema": { "properties": { "house_system": {
--- pinned/explore_human_design +++ observed/explore_human_design { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.24.2", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.27.0", "openai/toolInvocation/invoked": "Bodygraph ready", "openai/toolInvocation/invoking": "Drawing your bodygraph…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.24.2", + "resourceUri": "ui://openephemeris/bodygraph?v=4.27.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.24.2" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.27.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_human_design_connection +++ observed/explore_human_design_connection { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.24.2", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.27.0", "openai/toolInvocation/invoked": "Connection chart ready", "openai/toolInvocation/invoking": "Overlaying both bodygraphs…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.24.2", + "resourceUri": "ui://openephemeris/bodygraph?v=4.27.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.24.2" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.27.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_human_design_transit +++ observed/explore_human_design_transit { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.24.2", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.27.0", "openai/toolInvocation/invoked": "Transit overlay ready", "openai/toolInvocation/invoking": "Overlaying the transits on your bodygraph…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.24.2", + "resourceUri": "ui://openephemeris/bodygraph?v=4.27.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.24.2" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.27.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_moon_phase +++ observed/explore_moon_phase { "_meta": { - "openai/outputTemplate": "ui://openephemeris/moon-phase?v=4.24.2", + "openai/outputTemplate": "ui://openephemeris/moon-phase?v=4.27.0", "openai/toolInvocation/invoked": "Moon phase ready", "openai/toolInvocation/invoking": "Reading the Moon…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/moon-phase?v=4.24.2", + "resourceUri": "ui://openephemeris/moon-phase?v=4.27.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/moon-phase?v=4.24.2" + "ui/resourceUri": "ui://openephemeris/moon-phase?v=4.27.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_natal_chart +++ observed/explore_natal_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/chart-wheel?v=4.24.2", + "openai/outputTemplate": "ui://openephemeris/chart-wheel?v=4.27.0", "openai/toolInvocation/invoked": "Birth chart ready", "openai/toolInvocation/invoking": "Casting your birth chart…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/chart-wheel?v=4.24.2", + "resourceUri": "ui://openephemeris/chart-wheel?v=4.27.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/chart-wheel?v=4.24.2" + "ui/resourceUri": "ui://openephemeris/chart-wheel?v=4.27.0" }, "annotations": { "destructiveHint": false, + "ayanamsa": { + "description": "Default lahiri; sidereal only.", + "enum": [ + "lahiri", + "fagan_bradley", + "krishnamurti", + "raman", + "yukteshwar" + ], + "type": "string" + }, "bodies": { "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 (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'].", "items": { + }, + "zodiac_type": { + "description": "Default tropical.", + "enum": [ + "tropical", + "sidereal" + ], + "type": "string" } }, "required": [
--- pinned/explore_transit_timeline +++ observed/explore_transit_timeline { "_meta": { - "openai/outputTemplate": "ui://openephemeris/transit-timeline?v=4.24.2", + "openai/outputTemplate": "ui://openephemeris/transit-timeline?v=4.27.0", "openai/toolInvocation/invoked": "Transit timeline ready", "openai/toolInvocation/invoking": "Searching your upcoming transits…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/transit-timeline?v=4.24.2", + "resourceUri": "ui://openephemeris/transit-timeline?v=4.27.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/transit-timeline?v=4.24.2" + "ui/resourceUri": "ui://openephemeris/transit-timeline?v=4.27.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_vedic_chart +++ observed/explore_vedic_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/vedic-chart?v=4.24.2", + "openai/outputTemplate": "ui://openephemeris/vedic-chart?v=4.27.0", "openai/toolInvocation/invoked": "Vedic chart ready", "openai/toolInvocation/invoking": "Casting your Vedic chart…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/vedic-chart?v=4.24.2", + "resourceUri": "ui://openephemeris/vedic-chart?v=4.27.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/vedic-chart?v=4.24.2" + "ui/resourceUri": "ui://openephemeris/vedic-chart?v=4.27.0" }, "annotations": { "destructiveHint": false,
--- pinned/human_design_chart +++ observed/human_design_chart { "_meta": { "openai/toolInvocation/invoked": "Human Design data computed", + "chart_variant": { + "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" + }, "datetime": { "description": "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.", "type": "string"
+ tool added: human_design_transit_timeline
--- pinned/vedic_chart +++ observed/vedic_chart { "_meta": { "openai/toolInvocation/invoked": "Vedic positions computed", - "description": "Use this when the Vedic / Jyotish chart is wanted as data — 'my sidereal placements as JSON', 'nakshatra and pada for every planet as a table', 'my navamsa positions'. Takes coordinates, not a place name. Returns sidereal planet placements in rashis, nakshatras with pada, navamsa placements and bhavas (Whole Sign houses).\n\nSUPPORTED AYANAMSA: lahiri (default), fagan_bradley, krishnamurti, raman, yukteshwar\n\nCREDIT COST: 1 credit per call.", + "description": "Use this when the Vedic / Jyotish chart is wanted as data — 'my sidereal placements as JSON', 'nakshatra and pada for every planet as a table', 'my navamsa positions', '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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { + "dasha_as_of": { + "description": "ISO 8601 instant (UTC if zone-less): add the dasha periods running then.", + "type": "string" + }, + "dasha_depth": { + "description": "1-3: add the Vimshottari dasha tree (1 maha, 2 antar, 3 pratyantar).", + "type": "integer" + }, "datetime": { "description": "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.", "type": "string" + "panchang": { + "description": "Return the panchang for the local date in datetime instead: tithi, karana, yoga, nakshatra, vara, Rahu Kaal.", + "type": "boolean" + }, "timezone": { "description": "IANA timezone (e.g. `America/Chicago`); required when the datetime is naive, ignored otherwise.", "type": "string" + }, + "vargas": { + "description": "Divisional chart numbers to add, e.g. [9, 10].", + "items": { + "type": "integer" + }, + "type": "array" } }, "required": [
tool removed: ephemeris_electional
Changed 2026-10-24 11:05 UTC
2 descriptions rewritten, 8 schema or annotation changes with the description left byte-identical, 1 tool added.
+ tool added: ephemeris_time_lords
--- pinned/ephemeris_transits +++ observed/ephemeris_transits { "_meta": { "openai/toolInvocation/invoked": "Transit dates found", - "description": "Use this when the user asks 'when is my Saturn return', 'when does Pluto square my Sun', 'when will Jupiter conjunct my Moon', 'what transits do I have next 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.\n\nASPECT ANGLES (aspect_angle): 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. Saturn return → transiting_planets=['saturn'], natal_points=['saturn'], aspect_angle=0.\nEFFICIENCY: searches run faster when transiting_planets and natal_points are given; omitting both is slow. Default natal_points: sun, moon, mercury, venus, mars, jupiter, saturn.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT 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.", + "description": "Use this when the user asks 'when is my Saturn return', 'when does Pluto square my Sun', 'when will Jupiter conjunct my Moon', 'what transits do I have next 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.\n\nASPECT ANGLES (aspect_angle): 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. Saturn return → transiting_planets=['saturn'], natal_points=['saturn'], aspect_angle=0.\nEFFICIENCY: searches run faster when transiting_planets and natal_points are given; omitting both is slow. Default transiting_planets and natal_points: sun, moon, mercury, venus, mars, jupiter, saturn.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT 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.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "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.", "type": "string" }, "natal_datetime": { - "description": "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.", + "description": "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.", "type": "string" }, "transiting_planets": { - "description": "List of transiting planet IDs to search. E.g. ['saturn', 'jupiter', 'uranus', 'pluto', 'chiron']. Omit to search all outer planets.", + "description": "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.", "items": { "type": "string" },
--- pinned/explore_bazi_chart +++ observed/explore_bazi_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bazi?v=4.22.0", + "openai/outputTemplate": "ui://openephemeris/bazi?v=4.24.2", "openai/toolInvocation/invoked": "Four Pillars ready", "openai/toolInvocation/invoking": "Building your Four Pillars…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bazi?v=4.22.0", + "resourceUri": "ui://openephemeris/bazi?v=4.24.2", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bazi?v=4.22.0" + "ui/resourceUri": "ui://openephemeris/bazi?v=4.24.2" }, "annotations": { "destructiveHint": false,
--- pinned/explore_bi_wheel +++ observed/explore_bi_wheel { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bi-wheel?v=4.22.0", + "openai/outputTemplate": "ui://openephemeris/bi-wheel?v=4.24.2", "openai/toolInvocation/invoked": "Bi-wheel ready", "openai/toolInvocation/invoking": "Comparing the two charts…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bi-wheel?v=4.22.0", + "resourceUri": "ui://openephemeris/bi-wheel?v=4.24.2", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bi-wheel?v=4.22.0" + "ui/resourceUri": "ui://openephemeris/bi-wheel?v=4.24.2" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'are we compatible', 'compare my chart with my partner's', 'what's my horoscope for today', 'what's hitting my chart right now', 'what's my solar return chart this year' or 'my progressed chart on my birth chart' — 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`).\n\nCREDIT 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.", + "description": "Use this when the user asks 'are we compatible', 'compare my chart with my partner's', 'what's my horoscope for today', 'what's hitting my chart right now', 'what's my solar return chart this year' or 'my progressed chart on my birth chart' — 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`).\n\nCREDIT 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.\n\nHOUSE SYSTEM: set `house_system` to match the system you are interpreting in — whole_sign (Hellenistic / traditional), placidus (default), equal, koch, campanus or regiomontanus. The wheel draws and labels houses in that system, for the inner chart and the outer ring alike.", "inputSchema": { "properties": { + "house_system": { + "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" + }, "location": { "description": "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.", "type": "string"
--- pinned/explore_human_design +++ observed/explore_human_design { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.22.0", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.24.2", "openai/toolInvocation/invoked": "Bodygraph ready", "openai/toolInvocation/invoking": "Drawing your bodygraph…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.22.0", + "resourceUri": "ui://openephemeris/bodygraph?v=4.24.2", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.22.0" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.24.2" }, "annotations": { "destructiveHint": false,
--- pinned/explore_human_design_connection +++ observed/explore_human_design_connection { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.22.0", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.24.2", "openai/toolInvocation/invoked": "Connection chart ready", "openai/toolInvocation/invoking": "Overlaying both bodygraphs…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.22.0", + "resourceUri": "ui://openephemeris/bodygraph?v=4.24.2", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.22.0" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.24.2" }, "annotations": { "destructiveHint": false,
--- pinned/explore_human_design_transit +++ observed/explore_human_design_transit { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.22.0", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.24.2", "openai/toolInvocation/invoked": "Transit overlay ready", "openai/toolInvocation/invoking": "Overlaying the transits on your bodygraph…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.22.0", + "resourceUri": "ui://openephemeris/bodygraph?v=4.24.2", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.22.0" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.24.2" }, "annotations": { "destructiveHint": false,
--- pinned/explore_moon_phase +++ observed/explore_moon_phase { "_meta": { - "openai/outputTemplate": "ui://openephemeris/moon-phase?v=4.22.0", + "openai/outputTemplate": "ui://openephemeris/moon-phase?v=4.24.2", "openai/toolInvocation/invoked": "Moon phase ready", "openai/toolInvocation/invoking": "Reading the Moon…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/moon-phase?v=4.22.0", + "resourceUri": "ui://openephemeris/moon-phase?v=4.24.2", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/moon-phase?v=4.22.0" + "ui/resourceUri": "ui://openephemeris/moon-phase?v=4.24.2" }, "annotations": { "destructiveHint": false,
--- pinned/explore_natal_chart +++ observed/explore_natal_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/chart-wheel?v=4.22.0", + "openai/outputTemplate": "ui://openephemeris/chart-wheel?v=4.24.2", "openai/toolInvocation/invoked": "Birth chart ready", "openai/toolInvocation/invoking": "Casting your birth chart…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/chart-wheel?v=4.22.0", + "resourceUri": "ui://openephemeris/chart-wheel?v=4.24.2", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/chart-wheel?v=4.22.0" + "ui/resourceUri": "ui://openephemeris/chart-wheel?v=4.24.2" }, "annotations": { "destructiveHint": false,
--- pinned/explore_transit_timeline +++ observed/explore_transit_timeline { "_meta": { - "openai/outputTemplate": "ui://openephemeris/transit-timeline?v=4.22.0", + "openai/outputTemplate": "ui://openephemeris/transit-timeline?v=4.24.2", "openai/toolInvocation/invoked": "Transit timeline ready", "openai/toolInvocation/invoking": "Searching your upcoming transits…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/transit-timeline?v=4.22.0", + "resourceUri": "ui://openephemeris/transit-timeline?v=4.24.2", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/transit-timeline?v=4.22.0" + "ui/resourceUri": "ui://openephemeris/transit-timeline?v=4.24.2" }, "annotations": { "destructiveHint": false, - "description": "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.", + "description": "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.", "type": "string" }, "natal_datetime": { - "description": "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.", + "description": "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.", "type": "string" }, "transiting_planets": { - "description": "Transiting planet IDs to search, e.g. ['saturn','jupiter','uranus','pluto','chiron']. Omit to search all outer planets.", + "description": "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.", "items": { "type": "string" },
--- pinned/explore_vedic_chart +++ observed/explore_vedic_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/vedic-chart?v=4.22.0", + "openai/outputTemplate": "ui://openephemeris/vedic-chart?v=4.24.2", "openai/toolInvocation/invoked": "Vedic chart ready", "openai/toolInvocation/invoking": "Casting your Vedic chart…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/vedic-chart?v=4.22.0", + "resourceUri": "ui://openephemeris/vedic-chart?v=4.24.2", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/vedic-chart?v=4.22.0" + "ui/resourceUri": "ui://openephemeris/vedic-chart?v=4.24.2" }, "annotations": { "destructiveHint": false,
Changed 2026-10-19 13:06 UTC
5 descriptions rewritten, 5 schema or annotation changes with the description left byte-identical.
--- pinned/auth_login +++ observed/auth_login { "_meta": { "openai/toolInvocation/invoked": "Account connected", - "description": "Use this when the user asks to 'connect', 'sign in', 'log in' or 'link my OpenEphemeris 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).", + "description": "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).", "inputSchema": { "additionalProperties": false, "properties": {},
--- pinned/explore_bazi_chart +++ observed/explore_bazi_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bazi?v=4.21.0", + "openai/outputTemplate": "ui://openephemeris/bazi?v=4.22.0", "openai/toolInvocation/invoked": "Four Pillars ready", "openai/toolInvocation/invoking": "Building your Four Pillars…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bazi?v=4.21.0", + "resourceUri": "ui://openephemeris/bazi?v=4.22.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bazi?v=4.21.0" + "ui/resourceUri": "ui://openephemeris/bazi?v=4.22.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_bi_wheel +++ observed/explore_bi_wheel { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bi-wheel?v=4.21.0", + "openai/outputTemplate": "ui://openephemeris/bi-wheel?v=4.22.0", "openai/toolInvocation/invoked": "Bi-wheel ready", "openai/toolInvocation/invoking": "Comparing the two charts…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bi-wheel?v=4.21.0", + "resourceUri": "ui://openephemeris/bi-wheel?v=4.22.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bi-wheel?v=4.21.0" + "ui/resourceUri": "ui://openephemeris/bi-wheel?v=4.22.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'are we compatible', 'compare my chart with my partner's', 'what's my horoscope for today', 'what's hitting my chart right now', 'what's my solar return chart this year' or 'my progressed chart on my birth chart' — any two-ring comparison they should SEE. 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. Birthplaces may be place names (`location`, `person2_location`).\n\nCREDIT COST: 2 credits per call for most modes (1 per wheel; +1 to resolve a place name); solar_return/lunar_return modes cost 6.", + "description": "Use this when the user asks 'are we compatible', 'compare my chart with my partner's', 'what's my horoscope for today', 'what's hitting my chart right now', 'what's my solar return chart this year' or 'my progressed chart on my birth chart' — 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`).\n\nCREDIT 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.", "inputSchema": { "properties": { "location": { - "solar_arc" + "solar_arc", + "composite", + "davison" ], "type": "string" }, - "description": "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. 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.", + "description": "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.", "type": "string" }, "person2_latitude": {
--- pinned/explore_human_design +++ observed/explore_human_design { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.21.0", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.22.0", "openai/toolInvocation/invoked": "Bodygraph ready", "openai/toolInvocation/invoking": "Drawing your bodygraph…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.21.0", + "resourceUri": "ui://openephemeris/bodygraph?v=4.22.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.21.0" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.22.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'what's my Human Design', 'am I a Generator / Projector / Manifestor / Reflector', 'show my bodygraph', 'what's my HD type and profile', 'what's my strategy and authority' or 'what's my incarnation cross'. Returns an interactive bodygraph (inline in Claude and ChatGPT; text summary elsewhere) showing defined/undefined centers, active gates, channels, Type, Profile, Authority and Incarnation Cross, with any center or gate clickable for interpretation. Birthplace may be a place name (`location`).\n\nCREDIT COST: 4 credits per call (2 chart + 2 render; +1 to resolve a place name). Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.", + "description": "Use this when the user asks 'what's my Human Design', 'am I a Generator / Projector / Manifestor / Reflector', 'show my bodygraph', 'what's my HD type and profile', 'what's my strategy and authority' or 'what's my incarnation cross'. Returns an interactive bodygraph (inline in Claude and ChatGPT; text summary elsewhere) showing defined/undefined centers, active gates, channels, Type, Profile, Authority and Incarnation Cross, with any center or gate clickable for interpretation. Birthplace may be a place name (`location`).\n\nCREDIT 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.", "inputSchema": { "properties": { "datetime": {
--- pinned/explore_human_design_connection +++ observed/explore_human_design_connection { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.21.0", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.22.0", "openai/toolInvocation/invoked": "Connection chart ready", "openai/toolInvocation/invoking": "Overlaying both bodygraphs…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.21.0", + "resourceUri": "ui://openephemeris/bodygraph?v=4.22.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.21.0" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.22.0" }, "annotations": { "destructiveHint": false, - "description": "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).\n\nCREDIT COST: 5 credits per call (composite 3 + render 2). Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.", + "description": "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).\n\nCREDIT 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.", "inputSchema": { "properties": { "layout": {
--- pinned/explore_human_design_transit +++ observed/explore_human_design_transit { "_meta": { - "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.21.0", + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.22.0", "openai/toolInvocation/invoked": "Transit overlay ready", "openai/toolInvocation/invoking": "Overlaying the transits on your bodygraph…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/bodygraph?v=4.21.0", + "resourceUri": "ui://openephemeris/bodygraph?v=4.22.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.21.0" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.22.0" }, "annotations": { "destructiveHint": false, - "description": "Use this when the user asks 'what are today's Human Design transits for me', 'what gates are being activated for me right now', 'which channels does this transit complete in my chart' or 'how is the current sky affecting my bodygraph'. Returns an interactive overlay bodygraph (inline in Claude and ChatGPT; text summary elsewhere) highlighting the channels the transit temporarily COMPLETES with the natal chart and any centers it newly defines, for now or a chosen datetime. Birthplace may be a place name (`location`).\n\nCREDIT COST: 5 credits per call (chart 3 + render 2; +1 per place name). Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.", + "description": "Use this when the user asks 'what are today's Human Design transits for me', 'what gates are being activated for me right now', 'which channels does this transit complete in my chart' or 'how is the current sky affecting my bodygraph'. Returns an interactive overlay bodygraph (inline in Claude and ChatGPT; text summary elsewhere) highlighting the channels the transit temporarily COMPLETES with the natal chart and any centers it newly defines, for now or a chosen datetime. Birthplace may be a place name (`location`).\n\nCREDIT 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.", "inputSchema": { "properties": { "datetime": {
--- pinned/explore_moon_phase +++ observed/explore_moon_phase { "_meta": { - "openai/outputTemplate": "ui://openephemeris/moon-phase?v=4.21.0", + "openai/outputTemplate": "ui://openephemeris/moon-phase?v=4.22.0", "openai/toolInvocation/invoked": "Moon phase ready", "openai/toolInvocation/invoking": "Reading the Moon…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/moon-phase?v=4.21.0", + "resourceUri": "ui://openephemeris/moon-phase?v=4.22.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/moon-phase?v=4.21.0" + "ui/resourceUri": "ui://openephemeris/moon-phase?v=4.22.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_natal_chart +++ observed/explore_natal_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/chart-wheel?v=4.21.0", + "openai/outputTemplate": "ui://openephemeris/chart-wheel?v=4.22.0", "openai/toolInvocation/invoked": "Birth chart ready", "openai/toolInvocation/invoking": "Casting your birth chart…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/chart-wheel?v=4.21.0", + "resourceUri": "ui://openephemeris/chart-wheel?v=4.22.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/chart-wheel?v=4.21.0" + "ui/resourceUri": "ui://openephemeris/chart-wheel?v=4.22.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_transit_timeline +++ observed/explore_transit_timeline { "_meta": { - "openai/outputTemplate": "ui://openephemeris/transit-timeline?v=4.21.0", + "openai/outputTemplate": "ui://openephemeris/transit-timeline?v=4.22.0", "openai/toolInvocation/invoked": "Transit timeline ready", "openai/toolInvocation/invoking": "Searching your upcoming transits…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/transit-timeline?v=4.21.0", + "resourceUri": "ui://openephemeris/transit-timeline?v=4.22.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/transit-timeline?v=4.21.0" + "ui/resourceUri": "ui://openephemeris/transit-timeline?v=4.22.0" }, "annotations": { "destructiveHint": false,
--- pinned/explore_vedic_chart +++ observed/explore_vedic_chart { "_meta": { - "openai/outputTemplate": "ui://openephemeris/vedic-chart?v=4.21.0", + "openai/outputTemplate": "ui://openephemeris/vedic-chart?v=4.22.0", "openai/toolInvocation/invoked": "Vedic chart ready", "openai/toolInvocation/invoking": "Casting your Vedic chart…", "openai/widgetAccessible": true, - "resourceUri": "ui://openephemeris/vedic-chart?v=4.21.0", + "resourceUri": "ui://openephemeris/vedic-chart?v=4.22.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/vedic-chart?v=4.21.0" + "ui/resourceUri": "ui://openephemeris/vedic-chart?v=4.22.0" }, "annotations": { "destructiveHint": false,
Changed 2026-10-05 14:35 UTC
39 descriptions rewritten.
--- pinned/account_usage +++ observed/account_usage { + "_meta": { + "openai/toolInvocation/invoked": "Usage retrieved", + "openai/toolInvocation/invoking": "Checking your account…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Check the user's OpenEphemeris account usage and remaining credits. Returns their plan tier, billing period, credits used / included / remaining, percent of quota used, total API calls, and subscription status with renewal date.\n\n✅ USE THIS TOOL FOR: 'How many credits do I have left?', 'What's my usage this month?', 'Am I close to my limit?', 'What plan am I on?', 'How do I upgrade or top up?'\n\nCREDIT COST: Free (0 credits).\n\nEXAMPLE: Check current usage:\n (call with no arguments)\n\nEXAMPLE: Check a past month:\n month='2026-06'", + "description": "Use this when the user asks 'how many credits do I have left', 'what's my usage this month', 'am I close to my limit', 'what plan am I on' or 'how do I upgrade or top up'. Returns plan tier, billing period, credits used / included / remaining, percent of quota used, total API calls, and subscription status with renewal date; pass month='YYYY-MM' for a past period.\n\nCREDIT COST: 0.", "inputSchema": { "additionalProperties": false, "properties": { - "name": "account_usage" + "name": "account_usage", + "title": "Account Usage" }
--- pinned/acg_hits +++ observed/acg_hits { + "_meta": { + "openai/toolInvocation/invoked": "Location lines found", + "openai/toolInvocation/invoking": "Checking your lines at this location…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Find all Astrocartography lines (power lines + aspect lines) passing near a specific location. Returns features sorted by distance, making it easy to interpret planetary influences at a place.\n\n✅ USE THIS TOOL FOR: 'Is [city] good for me?', 'What planets affect me in Tokyo?', 'What ACG lines run through Paris for my chart?', 'Which cities are under my Jupiter line?'\n❌ NOT FOR: Full global map geometry → use acg_power_lines for that instead.\n\nCREDIT COST: 10 credits per call.\n\nEXAMPLE: All ACG lines within 3° of Paris for a chart born 1990-04-15 in Chicago:\n birth_datetime='1990-04-15T14:30:00', timezone='America/Chicago',\n birth_latitude=41.8781, birth_longitude=-87.6298,\n query_latitude=48.8566, query_longitude=2.3522, radius_deg=3", + "description": "Use this when the user asks 'is Tokyo good for me', 'where should I live according to my chart', 'what planets affect me in Paris', 'which of my lines run through Lisbon' or 'should I move to Austin'. Returns every astrocartography line (power lines and aspect lines) within radius_deg of a query location, sorted by distance, for a given birth chart.\n\nCREDIT COST: 10 credits per call. Pro tier.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "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.", "type": "string" }, "birth_latitude": { - "description": "Birth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Birth latitude in decimal degrees.", "type": "number" }, "birth_longitude": { - "description": "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.", + "description": "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.", "items": { "type": "string" }, + "custom_bodies": { + "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" + }, "include_aspects": { "description": "Include aspect lines in results (default true).", "type": "boolean" - "name": "acg_hits" + "name": "acg_hits", + "title": "Astrocartography Location Hits" }
--- pinned/acg_power_lines +++ observed/acg_power_lines { + "_meta": { + "openai/toolInvocation/invoked": "Planetary lines traced", + "openai/toolInvocation/invoking": "Tracing your planetary lines…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate Astrocartography power lines (MC, IC, AC/ASC, DC/DSC) for a natal chart. Returns GeoJSON LineStrings tracing each planetary angle line around the globe. These are the latitudinal lines where a planet was rising (AC), setting (DC), culminating (MC), or anti-culminating (IC) at birth.\n\n❌ NOT FOR: 'Is [city] good for me?' or 'What planets affect me in Tokyo?' → For a specific city/location analysis, use acg_hits instead (faster and more relevant).\n✅ USE FOR: Getting the full global GeoJSON line geometry for map rendering or bulk geographic analysis.\n\nCREDIT COST: 10 credits per call.\n\nEXAMPLE: Saturn and Jupiter power lines for a chart born 1990-04-15 at 2:30 PM in Chicago:\n birth_datetime='1990-04-15T14:30:00', timezone='America/Chicago',\n birth_latitude=41.8781, birth_longitude=-87.6298, bodies=['Saturn', 'Jupiter']", + "description": "Use this when the user asks 'show my astrocartography map', 'where are my Jupiter lines', 'where in the world is my Sun on the MC', or wants the whole-world list of their lines. Returns, per planet, its MC, IC, AC and DC lines (where it was culminating, anti-culminating, rising or setting at birth) with sign and equator-crossing longitude — geometry stripped, not for map rendering.\n\nCREDIT COST: 10 credits per call. Pro tier.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "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.", "type": "string" }, "birth_latitude": { - "description": "Birth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Birth latitude in decimal degrees.", "type": "number" }, "birth_longitude": { - "description": "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.", + "description": "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.", "items": { "type": "string" }, + "custom_bodies": { + "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" + }, "query_latitude": { "description": "Filter lines near this latitude (optional, for hits mode).", "type": "number" - "name": "acg_power_lines" + "name": "acg_power_lines", + "title": "Astrocartography Lines" }
--- pinned/auth_login +++ observed/auth_login { + "_meta": { + "openai/toolInvocation/invoked": "Account connected", + "openai/toolInvocation/invoking": "Connecting your account…" + }, "annotations": { "destructiveHint": false, "idempotentHint": false, - "description": "Start the device authorization flow to connect this MCP server to your OpenEphemeris account (free tier, no credit card needed). Returns a verification URL and code for the user to enter in their browser. The MCP server will then automatically receive credentials and all API calls will be linked to the user's account (tier, credits, rate limits). Only needed if no OPENEPHEMERIS_API_KEY env var is set and no cached credentials exist.", + "description": "Use this when the user asks to 'connect', 'sign in', 'log in' or 'link my OpenEphemeris 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).", "inputSchema": { "additionalProperties": false, "properties": {}, - "name": "auth_login" + "name": "auth_login", + "title": "Connect Account" }
--- pinned/auth_logout +++ observed/auth_logout { + "_meta": { + "openai/toolInvocation/invoked": "Account disconnected", + "openai/toolInvocation/invoking": "Disconnecting your account…" + }, "annotations": { "destructiveHint": true, "idempotentHint": true, - "description": "Disconnect this MCP server from your OpenEphemeris account by clearing cached credentials. Does NOT revoke the API key if one is set via environment variable — only clears device-auth cached credentials.", + "description": "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.", "inputSchema": { "additionalProperties": false, "properties": {}, - "name": "auth_logout" + "name": "auth_logout", + "title": "Disconnect Account" }
--- pinned/auth_status +++ observed/auth_status { + "_meta": { + "openai/toolInvocation/invoked": "Connection status ready", + "openai/toolInvocation/invoking": "Checking the connection…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Check the current authentication status of this MCP server. Shows whether the server is authenticated, which account it's linked to, the authentication method (API key, JWT, device auth), and token expiry.", + "description": "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.", "inputSchema": { "additionalProperties": false, "properties": {}, - "name": "auth_status" + "name": "auth_status", + "title": "Auth Status" }
--- pinned/bazi_annual_pillar +++ observed/bazi_annual_pillar { + "_meta": { + "openai/toolInvocation/invoked": "Year pillar found", + "openai/toolInvocation/invoking": "Looking up the year pillar…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Look up the sexagenary pillar for any Gregorian year (1–9999). Returns the Heavenly Stem, Earthly Branch, Chinese characters, zodiac animal, element, polarity, and NaYin (纳音) poetic resonance image.\n\nNaYin maps each pair in the 60-cycle sexagenary sequence to one of 30 elemental images (e.g. '海中金 Metal in the Sea', '炉中火 Fire in the Furnace'). It is traditionally applied to the Year and Day pillars to reveal deeper elemental character.\n\nUse this to:\n • Identify the energetic quality of any given year\n • Determine a person's birth year pillar for compatibility context\n • Find the NaYin element for year or day interpretations\n\nCREDIT COST: 3 credits per call.\n\nEXAMPLE: Year pillar for 2025:\n year=2025", + "description": "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, Chinese characters, zodiac animal, element, polarity and NaYin (纳音) resonance image for any Gregorian year 1-9999.\n\nCREDIT COST: 3 credits per call.", "inputSchema": { "additionalProperties": false, "properties": { - "name": "bazi_annual_pillar" + "name": "bazi_annual_pillar", + "title": "BaZi Annual Pillar" }
--- pinned/dev_list_allowed +++ observed/dev_list_allowed { + "_meta": { + "openai/toolInvocation/invoked": "Endpoints listed", + "openai/toolInvocation/invoking": "Listing available endpoints…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "List all API operations (method + path) that this MCP instance is authorized to call. Returns endpoint entries grouped by method, plus the active deny rules. Use this to discover what's available before calling dev_read_api, or to verify an endpoint path. Typed shortcut tools (ephemeris_natal_chart, ephemeris_transits, etc.) cover the most common operations — check those first before reaching for the generic proxies.", + "description": "Use this when the user asks 'what endpoints can you call', 'what else can this server do' or 'is /some/path available'. Returns every allowlisted API operation (method + path) grouped by method, plus the active deny rules; read locally, no API call.", "inputSchema": { "additionalProperties": false, "properties": {}, - "name": "dev_list_allowed" + "name": "dev_list_allowed", + "title": "List Allowed API Operations" }
--- pinned/dev_read_api +++ observed/dev_read_api { + "_meta": { + "openai/toolInvocation/invoked": "API response ready", + "openai/toolInvocation/invoking": "Calling the Open Ephemeris API…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Read from any allowlisted Open Ephemeris API endpoint via HTTP GET. This is the read-only power-user escape hatch — use the typed tools (ephemeris_natal_chart, ephemeris_transits, etc.) first for common operations. Endpoints that compute via POST (natal-chart, synastry, etc.) are covered by the typed tools; the generic POST proxy is only exposed on the full tool surface (`?profile=full`).\n\nTarget API: Open Ephemeris REST API (https://api.openephemeris.com). Call dev_list_allowed to see all currently available endpoint paths.\n\nAUTH: Set OPENEPHEMERIS_API_KEY in your environment. See openephemeris.com/dashboard for active plan limits.\n\nCREDIT COSTS:\n • Standard chart math (natal, progressed, bazi, vedic, iching): 1 credit\n • Human Design: 2 credits\n • Visualization rendering (chart-wheel, bi-wheel, charts/*): 2 credits\n • Comparative math (synastry, composite, overlay): 3 credits\n • Predictive ops (transits/search, returns): 5 credits\n • Predictive transit-chart: 1 credit\n • ACG / astrocartography: 10 credits (acg/hits: 15 credits)\n • Calendar endpoints: 10 credits\n • Catalog / metadata / health endpoints: 0 credits\n • Compute surcharge: requests > 30s add 1 credit per 30s (predictive, acg, calendar, electional)\n • format=llm (token-optimized output): available on all tiers\n\nBINARY RESPONSES:\n • Binary/image endpoints return {content_type, content_length, encoding, data_base64}\n so callers can decode bytes deterministically.\n\nECLIPSE NOTE: Eclipse endpoints accept format=llm via the query param like other endpoints.\n\nformat=llm NOTE: Add query: {format: 'llm'} to natal/synastry/composite/HD endpoints for compact columnar output optimized for LLM token budgets (availability depends on your current plan).\n\nCOMMON CALLS:\n GET /ephemeris/moon/phase — Current/queried moon phase\n GET /ephemeris/moon/void-of-course — Next void-of-course period\n GET /ephemeris/agro/daily — Biodynamic farming day quality\n GET /ephemeris/agro/calendar — Multi-day biodynamic calendar\n GET /ephemeris/agro/void-of-course — Biodynamic VoC periods\n GET /eclipse/next-visible — Next eclipse visible from a location (query: lat, lon, type=solar|lunar)\n GET /eclipse/solar/global — Next global solar eclipse (query: date=YYYY-MM-DD)\n GET /eclipse/solar/local — Local solar eclipse (query: lat, lon)\n GET /tidal/forcing — Gravitational tidal forcing index\n GET /calendar/astrology/moon-phases — Moon phase calendar for a date range\n GET /location/autocomplete — Geocode a place name (query: query=City Name)\n GET /chinese/zodiac — Chinese zodiac year element/animal\n GET /catalogs/bodies — List all supported celestial bodies\n", + "description": "Use this when the user asks for something no typed tool covers — 'is today a good biodynamic planting day', 'what's the tidal forcing', 'what Chinese zodiac animal is 2026', 'which bodies do you support' — or any other allowlisted GET endpoint. Returns the endpoint's JSON. Read-only HTTP GET; POST endpoints are not accepted by this tool.\n\nTarget API: Open Ephemeris REST API (https://api.openephemeris.com). Only allowlisted endpoint paths are accepted.\n\nCREDIT COST: 1 for most; /predictive/* 5 (transits/search 5-70 by span); /comparative/* 3; /calendar/* 10 (moon-phases, lunar-standstill 2; cross-quarter 5); /acg/* 10 (Pro); /electional/* 5 (span-priced searches are Pro tier; moment-analysis and station-tracker are not tier-gated); /human-design/*, /iching/* 2 (composite, transit-chart 3; penta 2/member); catalogs 0; 4xx/5xx refunded. Query {format: 'llm'} = compact output.\n\n\n\nCOMMON CALLS:\n GET /ephemeris/moon/phase — Current/queried moon phase\n GET /ephemeris/moon/void-of-course — Next void-of-course period\n GET /ephemeris/agro/daily — Biodynamic farming day quality\n GET /ephemeris/agro/calendar — Multi-day biodynamic calendar\n GET /ephemeris/agro/void-of-course — Biodynamic VoC periods\n GET /eclipse/next-visible — Next eclipse visible from a location (query: lat, lon, type=solar|lunar)\n GET /eclipse/solar/global — Next global solar eclipse (query: date=YYYY-MM-DD)\n GET /eclipse/solar/local — Local solar eclipse (query: lat, lon)\n GET /tidal/forcing — Gravitational tidal forcing index\n GET /calendar/astrology/moon-phases — next New/Quarter/Full Moon after a date or jd\n GET /location/autocomplete — Geocode a place name (query: query=City Name)\n GET /chinese/zodiac — Chinese zodiac year element/animal\n GET /catalogs/bodies — List all supported celestial bodies\n", "inputSchema": { "additionalProperties": false, "properties": { - "description": "JSON request body (optional)" + "additionalProperties": true, + "description": "JSON request body (optional)", + "type": "object" }, "format": { "description": "Convenience: if provided, set query.format (optional). 'llm' is canonical; 'llm_v2' is accepted as a legacy alias.", - "description": "Absolute API path (e.g., /ephemeris/natal-chart)", + "description": "Absolute API path of an allowlisted GET endpoint (e.g., /ephemeris/moon/phase)", "type": "string" }, "preset": { - "name": "dev_read_api" + "name": "dev_read_api", + "title": "API Read" }
--- pinned/electional_moment_analysis +++ observed/electional_moment_analysis { + "_meta": { + "openai/toolInvocation/invoked": "Moment scored", + "openai/toolInvocation/invoking": "Scoring this moment…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Analyze the astrological quality of a specific moment: planet positions, aspects, void of course status, lunar phase, day ruler, sect, and an overall electional score (0-100). Perfect for evaluating whether 'right now' or a specific date/time is good for action.\n\nCREDIT COST: 5 credits per call.\n\nEXAMPLE: Analyze March 21, 2026 at noon in New York:\n date='2026-03-21T12:00:00Z', latitude=40.7128, longitude=-74.0060", + "description": "Use this when the user asks 'is now a good time to …', 'what's the sky doing 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.\n\nCREDIT COST: 5 credits per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Latitude of location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory. Optional, but pass both whenever the place is known — without them sect falls back to diurnal and a night moment is scored with the DAY triplicity rulers.", + "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" }, "longitude": { - "name": "electional_moment_analysis" + "name": "electional_moment_analysis", + "title": "Moment Quality Analysis" }
--- pinned/electional_station_tracker +++ observed/electional_station_tracker { + "_meta": { + "openai/toolInvocation/invoked": "Station dates found", + "openai/toolInvocation/invoking": "Finding retrograde and direct stations…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Find all upcoming retrograde and direct stations for planets in a date range. Returns exact station times, longitudes, and signs.\n\nUSE THIS TOOL FOR: 'When does Mercury go retrograde?', 'Is Venus retrograde this year?', 'What planets station this month?', 'When does Mars go direct?'\n\n❌ NOT FOR: 'Is Mercury retrograde right now?' — that is the state at a single instant, so use ephemeris_retrograde_status (1 credit for one planet, vs 5 here).\n\nAll required fields have smart defaults (searches the next 90 days from today).\n\nCREDIT COST: 5 credits per call.\n\nEXAMPLE: Mercury and Venus stations in the next 3 months (all defaults):\n (no args required, will auto-scan next 90 days for all inner planets)\n\nEXAMPLE: Outer planet stations in 2026:\n start_date='2026-01-01', end_date='2026-12-31', planets='jupiter,saturn,uranus,neptune,pluto'", + "description": "Use this when the user asks 'when does Mercury go retrograde', 'when does Mercury retrograde end', 'when does Mars go direct', 'when does Pluto go direct', 'is Venus retrograde this year', 'Mercury retrograde dates for 2026' or 'what planets station this month'. Returns every retrograde and direct station in the range with exact time, longitude and sign — Mercury through Pluto; default range the next 90 days, maximum one year.\n\nCREDIT COST: 5 credits per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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).", + "description": "Comma-separated planet names from: mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto. Defaults to Mercury through Saturn; name outer planets explicitly.", "type": "string" }, "start_date": { - "name": "electional_station_tracker" + "name": "electional_station_tracker", + "title": "Retrograde Station Tracker" }
--- pinned/ephemeris_angles_points +++ observed/ephemeris_angles_points { + "_meta": { + "openai/toolInvocation/invoked": "Chart angles computed", + "openai/toolInvocation/invoking": "Computing chart angles…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate chart angles and sensitive points (ASC, MC, DSC, IC, Vertex, Equatorial Ascendant/Descendant) for a given date/time and location. The equatorial ascendant is also returned under the key `east_point` — a synonym for the same point, not a separate one.\n\nCREDIT COST: 1 credit per call.", + "description": "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; the equatorial ascendant is also returned under `east_point` — a synonym for the same point, not a separate one.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "latitude": { - "name": "ephemeris_angles_points" + "name": "ephemeris_angles_points", + "title": "Angles & Points" }
--- pinned/ephemeris_aspect_check +++ observed/ephemeris_aspect_check { + "_meta": { + "openai/toolInvocation/invoked": "Aspect measured", + "openai/toolInvocation/invoking": "Measuring the aspect…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Check the aspect between two ecliptic longitudes. Returns the angular separation and any aspects within orb (conjunction, sextile, square, trine, opposition, etc.).\n\nCREDIT COST: 1 credit per call.\n\nEXAMPLE: Check aspect between 15° Aries and 75° Gemini:\n longitude_1=15, longitude_2=75", + "description": "Use this when the user asks 'is 15° Aries square 18° Cancer', 'what aspect is between these two positions', 'how many degrees apart are my Sun and Moon' or 'is this within orb'. Returns the angular separation between two ecliptic longitudes (longitude_1, longitude_2) and any aspect within orb (conjunction, sextile, square, trine, opposition, etc.).\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "name": "ephemeris_aspect_check" + "name": "ephemeris_aspect_check", + "title": "Aspect Check" }
--- pinned/ephemeris_electional +++ observed/ephemeris_electional { + "_meta": { + "openai/toolInvocation/invoked": "Timing windows found", + "openai/toolInvocation/invoking": "Scanning for the best timing windows…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Find optimal planetary timing windows (electional astrology). Scans a date range to find the best times for an event based on essential dignity, aspect quality, sect, and void-of-course moon penalties. Evaluates every hour and clusters the best continuous windows.\n\nCREDIT COST: 5 credits per call (heavy calculation).\n\nEXAMPLE: Find the best time to launch a business in early March 2026.\n start_date='2026-03-01', end_date='2026-03-10', latitude=40.7128, longitude=-74.0060,\n avoid_voc=true, lunar_phase='waxing'", + "description": "Use this when the user asks 'when is the best time to launch / sign / marry / start X' within a date range, 'find me a good day next month' or 'pick an auspicious window'. Returns the best continuous timing windows in the range, scored hourly on essential dignity, aspect quality, sect and void-of-course Moon penalties, with optional filters (avoid_voc, lunar_phase).\n\nCREDIT COST: ≤30 days 5, ≤60 days 8, ≤120 days 12. Pro tier; max window Pro 30 days, Startup 60, Scale 120.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Latitude of location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Latitude of location in decimal degrees (positive = North).", "type": "number" }, "longitude": { - "name": "ephemeris_electional" + "name": "ephemeris_electional", + "title": "Electional Timing Window" }
--- pinned/ephemeris_house_cusps +++ observed/ephemeris_house_cusps { + "_meta": { + "openai/toolInvocation/invoked": "House cusps computed", + "openai/toolInvocation/invoking": "Computing house cusps…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate house cusps and angles (ASC, MC, DSC, IC) for a given date, time, and location using one or more house systems.\n\nHouse system codes: P=Placidus, K=Koch, O=Porphyry, R=Regiomontanus, C=Campanus, E=Equal, W=Whole Sign.\n\nCREDIT COST: 1 credit per call.\n\nEXAMPLE: Placidus houses for London at 2026-03-20 noon UTC:\n datetime='2026-03-20T12:00:00Z', latitude=51.5074, longitude=-0.1278, house_systems=['P']", + "description": "Use this when the user asks 'what are my house cusps', 'where does my 7th house start', 'show my houses in Whole Sign' or 'compare Placidus and Koch for my chart' — houses and angles only, for a date, time and place. Returns the twelve cusps and ASC/MC/DSC/IC for each requested system.\n\nHOUSE SYSTEM CODES: P=Placidus, K=Koch, O=Porphyry, R=Regiomontanus, C=Campanus, E=Equal, W=Whole Sign.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "house_systems": { - "description": "Observer latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Observer latitude in decimal degrees.", "type": "number" }, "longitude": { - "name": "ephemeris_house_cusps" + "name": "ephemeris_house_cusps", + "title": "House Cusps" }
--- pinned/ephemeris_moon_phase +++ observed/ephemeris_moon_phase { + "_meta": { + "openai/toolInvocation/invoked": "Moon phase found", + "openai/toolInvocation/invoking": "Checking the Moon…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Get the Moon's current phase angle, illumination, sign and void-of-course status AT a specific point in time. Returns phase name (New, Waxing Crescent, etc.), illumination %, the zodiac sign and degree the Moon occupies, and next void-of-course period.\n\n⚠️ THIS TOOL ANSWERS: 'What phase is the moon in right now (or at a given datetime)?' and 'What sign is the moon in?'\n❌ THIS TOOL DOES NOT ANSWER: 'When is the next new moon / full moon?'\n→ For upcoming phase DATES use ephemeris_next_lunar_phase instead.\n\nFor a user-facing interactive moon-phase dial, use explore_moon_phase instead.\n\nCREDIT COST: 2 credits — phase and void-of-course are metered separately. For phase alone at 1 credit, use dev_read_api path='/ephemeris/moon/phase'.\n\nIf no datetime is provided, returns the current (live) moon phase.", + "description": "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.\n\nCREDIT COST: 2 credits — phase and void-of-course are metered separately (the phase-only endpoint /ephemeris/moon/phase costs 1).", "inputSchema": { "additionalProperties": false, "properties": { - "name": "ephemeris_moon_phase" + "name": "ephemeris_moon_phase", + "title": "Moon Phase" }
--- pinned/ephemeris_natal_chart +++ observed/ephemeris_natal_chart { + "_meta": { + "openai/toolInvocation/invoked": "Natal positions computed", + "openai/toolInvocation/invoking": "Computing natal positions…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate a full natal (birth) chart for a person. Returns planetary positions, house cusps, aspects, and chart patterns. Use format='llm' for a compact, token-efficient output ideal for interpretation (available on all tiers). The result includes all major planets, Chiron and major asteroids like Ceres, angles (ASC/MC/DSC/IC), essential dignities, retrograde status, house system data, and major aspect grid. Asteroids are automatically included. Returns raw JSON. For a user-facing visual chart, use explore_natal_chart instead.\n\nCREDIT COST: 1 credit per call.\n\nEXAMPLE: born 15 April 1990 at 2:30 PM local time in Chicago — pass the local time and name the zone:\n datetime='1990-04-15T14:30:00', timezone='America/Chicago', latitude=41.8781, longitude=-87.6298\nEquivalently, put the zone on the datetime: datetime='1990-04-15T14:30:00-05:00' (or the UTC instant '1990-04-15T19:30:00Z').", + "description": "Use this when the birth chart is wanted 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, Hekate, Fortuna, Pandora, Asbolus and so on) — angles (ASC/MC/DSC/IC), house cusps, dignity condition, retrograde flags and the major aspect grid; format='llm' gives compact output. Takes coordinates, not a place name.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { + "additional_objects": { + "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" + }, "analytics": { "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": { + "asteroid_groups": { + "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" + }, "ayanamsa": { "description": "Sidereal system. Default lahiri. Only read when zodiac_type is `sidereal`.", "enum": [ - "description": "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`.", + "description": "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.", "type": "string" }, "declinations": { - "description": "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.", + "description": "Include Hermetic Lots / Arabic Parts in the natal response (routed as `options.include_hermetic_lots: true`).", "type": "boolean" }, "include_fixed_stars": { - "description": "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.", + "description": "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.", "type": "boolean" }, "latitude": { - "description": "Geographic latitude of birth location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Geographic latitude of birth location in decimal degrees (positive = North).", "type": "number" }, "longitude": { - "name": "ephemeris_natal_chart" + "name": "ephemeris_natal_chart", + "title": "Natal Chart" }
--- pinned/ephemeris_next_eclipse +++ observed/ephemeris_next_eclipse { + "_meta": { + "openai/toolInvocation/invoked": "Eclipse found", + "openai/toolInvocation/invoking": "Finding the next eclipse…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Find the next solar or lunar eclipse. Returns the eclipse type, date/time of maximum, magnitude, and duration of totality (if any).\n\n📍 LOCATION OPTIONAL:\n • WITH latitude+longitude → returns local contact times and visibility for that specific location.\n • WITHOUT latitude+longitude → returns the next global eclipse of that type (no location needed).\n\nUSE THIS TOOL FOR: 'When is the next solar eclipse?', 'When is the next total lunar eclipse?', 'Will there be an eclipse visible from Tokyo?'\n\nCREDIT COST: 1 credit per call.\n\nEXAMPLE: Next solar eclipse globally (no location needed):\n eclipse_type='solar'\n\nEXAMPLE: Next solar eclipse visible from New York:\n eclipse_type='solar', latitude=40.7128, longitude=-74.006\n\nEXAMPLE: Next lunar eclipse from London:\n eclipse_type='lunar', latitude=51.5074, longitude=-0.1278", + "description": "Use this when the user asks 'when is the next eclipse', 'when is the next solar / lunar eclipse', 'is there an eclipse visible from Tokyo' or 'when is the next total lunar eclipse'. Returns the eclipse type, date/time of maximum, magnitude and duration of totality; with latitude+longitude it adds local contact times and visibility for that place, without them it returns the next global eclipse of that type.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "name": "ephemeris_next_eclipse" + "name": "ephemeris_next_eclipse", + "title": "Eclipse Finder" }
--- pinned/ephemeris_next_lunar_phase +++ observed/ephemeris_next_lunar_phase { + "_meta": { + "openai/toolInvocation/invoked": "Lunar phase dates found", + "openai/toolInvocation/invoking": "Finding the next lunar phase…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Find the next occurrence of a specific Moon phase after a given date. Returns the exact UTC datetime of each occurrence.\n\n✅ USE THIS TOOL FOR: 'When is the next new moon?', 'When is the next full moon?', 'What date is the next quarter moon?', or any question about UPCOMING phase dates.\n❌ NOT FOR: 'What phase is the moon in right now?' or 'What sign is the moon in?'\n→ For the phase, sign and degree AT a moment, use ephemeris_moon_phase.\n\nCREDIT COST: 1-2 credits per occurrence returned — each occurrence takes one calendar search, plus a second search when the first window misses. So count=3 costs 3-6 credits.\n\nEXAMPLE: Find the next new moon:\n phase='new_moon'\n\nEXAMPLE: Find the next full moon after a specific date:\n phase='full_moon', after_date='2026-06-01'\n\nEXAMPLE: Find the next 3 full moons:\n phase='full_moon', count=3", + "description": "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 datetime of each upcoming occurrence of the requested phase (phase = new_moon | full_moon | first_quarter | last_quarter), optionally after a given date and for count occurrences.\n\nCREDIT COST: 2 credits per occurrence; count max 12.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "Number of upcoming occurrences to return (1-12). Default 1.", + "description": "Number of upcoming occurrences to return (1-12, 2 credits each). Default 1.", "type": "integer" }, "phase": { - "name": "ephemeris_next_lunar_phase" + "name": "ephemeris_next_lunar_phase", + "title": "Next Lunar Phase" }
--- pinned/ephemeris_planet_position +++ observed/ephemeris_planet_position { + "_meta": { + "openai/toolInvocation/invoked": "Planet position computed", + "openai/toolInvocation/invoking": "Locating the planet…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Get the precise ecliptic longitude, latitude, distance, speed, and retrograde status for a single planet/body at a given date and time. 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.\n\nSOUTH NODE: there is no South Node id. The South Node is always exactly opposite the North Node — request id 10 or 11 and add 180° (mod 360).\n\nCREDIT COST: 1 credit per call.\n\nEXAMPLE: Where is Mars on 2026-03-20 at noon UTC?\n planet_id=4, datetime='2026-03-20T12:00:00Z'", + "description": "Use this when the user asks 'where is Mars right now', 'what sign is Venus in today', 'what degree is the Sun at', 'where was Jupiter on my birthday', 'where is the North Node' — one body at one moment — or 'what's my star sign / zodiac sign' from a birth date alone (planet_id=0; a bare date resolves to noon UTC, no location needed). Returns ecliptic longitude, latitude, distance, speed and retrograde flag.\n\nPLANET 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.\nNODES: 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).\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "latitude": { - "description": "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°.", + "description": "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).", "type": "integer" }, "timezone": { - "name": "ephemeris_planet_position" + "name": "ephemeris_planet_position", + "title": "Planet Position" }
--- pinned/ephemeris_progressed_chart +++ observed/ephemeris_progressed_chart { + "_meta": { + "openai/toolInvocation/invoked": "Progressed chart computed", + "openai/toolInvocation/invoking": "Progressing your chart…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate a Secondary Progressed (or Solar Arc / Tertiary) chart. Advances the natal chart symbolically — 1 day = 1 year (secondary), or using solar arc motion. Returns progressed planet positions, house cusps, aspects, and retrograde status.\n\nCREDIT COST: 1 credit per call.\n\nEXAMPLE: Secondary progressions for someone born 1985-06-21 at 2:00 PM in London, progressed to 2026-01-01:\n birth_datetime='1985-06-21T14:00:00', timezone='Europe/London',\n birth_latitude=51.5, birth_longitude=-0.12, target_datetime='2026-01-01', method='secondary'", + "description": "Use this when the user asks 'what's my progressed chart', 'where is my progressed Moon / Sun', 'what sign has my progressed Moon moved into' 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 or tertiary.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "birth_latitude": { - "description": "Birth latitude in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Birth latitude in decimal degrees.", "type": "number" }, "birth_longitude": { - "description": "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.", + "description": "Also return a natal-inside, progressed-outside bi-wheel as an image (+2 credits).", "type": "boolean" }, "method": { - }, - "visual_config": { - "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" } }, "required": [ - "name": "ephemeris_progressed_chart" + "name": "ephemeris_progressed_chart", + "title": "Progressed Chart" }
--- pinned/ephemeris_relocation +++ observed/ephemeris_relocation { + "_meta": { + "openai/toolInvocation/invoked": "Relocated chart computed", + "openai/toolInvocation/invoking": "Relocating your chart…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate a relocation chart — the same natal planetary positions re-cast for a different geographic location. Used to understand how living in a different city shifts house placements and angles, without changing the planetary longitudes in the chart.\n\nCREDIT COST: 1 credit per call.\n\nEXAMPLE: How does moving from Chicago to London change someone's chart?\n natal_datetime='1990-04-15T14:30:00', timezone='America/Chicago',\n natal_latitude=41.8781, natal_longitude=-87.6298,\n relocation_latitude=51.5074, relocation_longitude=-0.1278", + "description": "Use this when the user asks 'how does my chart change if I move to London', 'what's 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.\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { + "include_visual": { + "description": "Also return the relocated chart wheel as an image (+2 credits).", + "type": "boolean" + }, "natal_datetime": { - "description": "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`.", + "description": "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.", "type": "string" }, "natal_latitude": { - "description": "Latitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Latitude of birth location in decimal degrees.", "type": "number" }, "natal_longitude": { - "name": "ephemeris_relocation" + "name": "ephemeris_relocation", + "title": "Relocation Chart" }
--- pinned/ephemeris_retrograde_status +++ observed/ephemeris_retrograde_status { + "_meta": { + "openai/toolInvocation/invoked": "Retrograde status checked", + "openai/toolInvocation/invoking": "Checking retrograde motion…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Get retrograde/direct status and speed for ONE planet — or, if you ask for it, all ten — at a given date/time. Returns is_retrograde flag, longitude speed, and station proximity.\n\n✅ Answers 'is X retrograde?' at ONE instant. Pass planet_id for the named planet; 'is Mercury retrograde?' is planet_id=2, not a whole-sky sweep. For WHEN a planet turns retrograde or direct, or whether it stations anywhere in a date range, use electional_station_tracker.\n\nCREDIT COST: 1 credit for a single planet (pass planet_id). Omitting planet_id runs the all-planets sweep and costs 10 credits — the backend bills one credit per body and this fans out to 10. Only omit it when the question really is about every planet.", + "description": "Use this when the user asks 'is Mercury retrograde right now', 'is Venus retrograde today', 'was Mars retrograde when I was born' or 'which planets are retrograde at the moment'. Returns is_retrograde, longitude speed and station proximity for one planet at one instant (planet_id; Mercury is planet_id=2), or for all ten planets when planet_id is omitted.\n\nCREDIT COST: 1 credit for a single planet; omitting planet_id runs all ten planets (10 credits, one per body).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "planet_id": { - "description": "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.", + "description": "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.", "type": "integer" }, "timezone": { - "name": "ephemeris_retrograde_status" + "name": "ephemeris_retrograde_status", + "title": "Retrograde Status" }
--- pinned/ephemeris_solar_return +++ observed/ephemeris_solar_return { + "_meta": { + "openai/toolInvocation/invoked": "Solar return computed", + "openai/toolInvocation/invoking": "Finding your solar return…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate the exact Solar Return date/time — when the Sun returns to its natal ecliptic longitude (happens once per year near the birthday). Returns the Solar Return chart for the year ahead.\n\nCREDIT COST: 5 credits per call.\n\nTARGET DATE: Provide target_datetime near the desired birthday year. If omitted, defaults to the current year's solar return.\n\nEXAMPLE: Solar return for someone born 1985-06-21 (current year):\n birth_datetime='1985-06-21T14:00:00Z'\n\nEXAMPLE: Solar return for 2027 specifically:\n birth_datetime='1985-06-21T14:00:00Z', target_datetime='2027-01-01T00:00:00Z'", + "description": "Use this when the user asks 'when exactly is my solar return', 'my solar return positions as data' 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).\n\nCREDIT COST: 5 credits per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "birth_latitude": { - "description": "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.", + "description": "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.", "type": "boolean" }, "return_latitude": { - "name": "ephemeris_solar_return" + "name": "ephemeris_solar_return", + "title": "Solar Return" }
--- pinned/ephemeris_synastry +++ observed/ephemeris_synastry { + "_meta": { + "openai/toolInvocation/invoked": "Synastry computed", + "openai/toolInvocation/invoking": "Computing synastry aspects…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate a synastry chart comparing two people's natal charts. Returns inter-aspects (planetary connections between the two charts), composite points, and relationship indicators. Use this for compatibility analysis, relationship timing, or partnership insights.\n\nCREDIT COST: 3 credits per call.\n\nEXAMPLE: Compare two people's charts (local birth times, each with its zone):\n person_a_datetime='1990-04-15T14:30:00', person_a_timezone='America/Chicago',\n person_a_latitude=41.8781, person_a_longitude=-87.6298,\n person_b_datetime='1988-09-22T08:15:00', person_b_timezone='America/Los_Angeles',\n person_b_latitude=34.0522, person_b_longitude=-118.2437", + "description": "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.\n\nCREDIT COST: 3 credits per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "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.", "type": "boolean" }, "person_a_datetime": { - "description": "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`.", + "description": "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.", "type": "string" }, "person_a_latitude": { - "description": "Person A birth latitude. Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Person A birth latitude.", "type": "number" }, "person_a_longitude": { - "description": "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`.", + "description": "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.", "type": "string" }, "person_b_latitude": { - "name": "ephemeris_synastry" + "name": "ephemeris_synastry", + "title": "Synastry Chart" }
--- pinned/ephemeris_transits +++ observed/ephemeris_transits { + "_meta": { + "openai/toolInvocation/invoked": "Transit dates found", + "openai/toolInvocation/invoking": "Searching for exact transit dates…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Search for astrological transit events affecting a natal chart over a date range. Returns exact transit moments — when transiting planets form specified aspects to natal planet positions.\n\nEFFICIENCY TIP: Always specify both transiting_planets and natal_points to keep compute fast. Omitting both sends all outer planets against all core natal positions — a much heavier computation.\n\nASPECT ANGLES: Use aspect_angle to search for specific aspects:\n 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine.\n Example: Saturn Return → transiting_planets=['saturn'], natal_points=['saturn'], aspect_angle=0\n Example: Uranus Opposition → transiting_planets=['uranus'], natal_points=['uranus'], aspect_angle=180\n Example: Outer planets to natal Sun/Moon → transiting_planets=['saturn','uranus','neptune','pluto'], natal_points=['sun','moon']\n\nDEFAULT natal_points (when omitted): sun, moon, mercury, venus, mars, jupiter, saturn.\nSEARCH RANGE LIMITS: Explorer/PayG tier → 1 year max; Pro → 5 years; Startup → 10 years.\nCREDIT COST: 5 credits per call.", + "description": "Use this when the user asks 'when is my Saturn return', 'when does Pluto square my Sun', 'when will Jupiter conjunct my Moon', 'what transits do I have next 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.\n\nASPECT ANGLES (aspect_angle): 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine. Saturn return → transiting_planets=['saturn'], natal_points=['saturn'], aspect_angle=0.\nEFFICIENCY: searches run faster when transiting_planets and natal_points are given; omitting both is slow. Default natal_points: sun, moon, mercury, venus, mars, jupiter, saturn.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT 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.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "natal_latitude": { - "description": "Latitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Latitude of birth location in decimal degrees.", "type": "number" }, "natal_longitude": { - "name": "ephemeris_transits" + "name": "ephemeris_transits", + "title": "Transit Search" }
--- pinned/explore_bazi_chart +++ observed/explore_bazi_chart { "_meta": { + "openai/outputTemplate": "ui://openephemeris/bazi?v=4.21.0", + "openai/toolInvocation/invoked": "Four Pillars ready", + "openai/toolInvocation/invoking": "Building your Four Pillars…", + "openai/widgetAccessible": true, "ui": { - "resourceUri": "ui://openephemeris/bazi", + "resourceUri": "ui://openephemeris/bazi?v=4.21.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bazi" + "ui/resourceUri": "ui://openephemeris/bazi?v=4.21.0" }, "annotations": { "destructiveHint": false, - "description": "Generate an interactive BaZi (四柱命盘 Four Pillars of Destiny) chart with clickable pillars.\n\nReturns an embedded visual Four Pillars explorer showing the Year, Month, Day, and Hour pillars — each with its Heavenly Stem (天干) and Earthly Branch (地支), Ten God label, and element color — plus the Day Master identity and a Wu Xing (五行) element balance bar. Click any pillar for an instant interpretation of what it reveals about that life domain (Year = ancestry/early life, Month = parents/career, Day = self/spouse, Hour = children/later life).\n\nCREDIT COST: 3 credits per call (1 base + 2 visual render).\n\nUse this for a rich, interactive BaZi experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts, so it is also the right call without a renderer. Deeper derivations (Ten Gods, element balance, luck pillars) and a plain non-visual pillars lookup have dedicated tools on the full surface (`?profile=full`).", + "description": "Use this when the user asks 'what's my BaZi', 'my Four Pillars', 'what's my Day Master', 'my Chinese astrology chart', 'what's my Chinese element' or 'my Chinese birth 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.\n\nCREDIT COST: 3 credits per call (1 base + 2 visual render).", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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.", + "description": "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.", "type": "string" }, "day": { - "name": "explore_bazi_chart" + "name": "explore_bazi_chart", + "title": "Interactive BaZi Four Pillars Explorer" }
--- pinned/explore_bi_wheel +++ observed/explore_bi_wheel { "_meta": { + "openai/outputTemplate": "ui://openephemeris/bi-wheel?v=4.21.0", + "openai/toolInvocation/invoked": "Bi-wheel ready", + "openai/toolInvocation/invoking": "Comparing the two charts…", + "openai/widgetAccessible": true, "ui": { - "resourceUri": "ui://openephemeris/bi-wheel", + "resourceUri": "ui://openephemeris/bi-wheel?v=4.21.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bi-wheel" + "ui/resourceUri": "ui://openephemeris/bi-wheel?v=4.21.0" }, "annotations": { "destructiveHint": false, - "description": "Generate an interactive bi-wheel chart comparing two astrological chart positions.\n\nCREDIT COST: 2 credits per call for most modes (1 per wheel computed); solar_return/lunar_return modes cost 6 (5 for the return + 1 for the natal wheel).\n\nThe inner wheel is always Person 1's natal chart. The outer ring depends on mode:\n• synastry — Person 2's natal chart (needs Person 2's own birthplace).\n• transit — Transiting planets for a given date.\n• progressed — Secondary progressed positions (person2_datetime = target date).\n• solar_return — Nearest solar return chart (person2_datetime = year to return for).\n• lunar_return — Nearest lunar return chart (person2_datetime = target month).\n• solar_arc — Solar arc directed positions (person2_datetime = target date).\nCross-aspects are drawn as coloured dashed lines; click any planet, aspect line, or house cusp for interpretation. Prefer this whenever the user should SEE the comparison — it renders interactively in MCP Apps hosts and falls back to static SVG elsewhere. For raw synastry data without a visual, use ephemeris_synastry.", + "description": "Use this when the user asks 'are we compatible', 'compare my chart with my partner's', 'what's my horoscope for today', 'what's hitting my chart right now', 'what's my solar return chart this year' or 'my progressed chart on my birth chart' — any two-ring comparison they should SEE. 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. Birthplaces may be place names (`location`, `person2_location`).\n\nCREDIT COST: 2 credits per call for most modes (1 per wheel; +1 to resolve a place name); solar_return/lunar_return modes cost 6.", "inputSchema": { "properties": { "location": { - "description": "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.", + "description": "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.", "type": "string" }, "mode": { - "description": "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`.", + "description": "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.", "type": "string" }, "person1_latitude": { - "description": "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.", + "description": "Birth latitude for Person 1 (decimal degrees, positive = North). Optional if `location` is a place name — the resolver fills it in.", "type": "number" }, "person1_longitude": { - "description": "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`.", + "description": "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. 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.", "type": "string" }, "person2_latitude": { - "name": "explore_bi_wheel" + "name": "explore_bi_wheel", + "title": "Interactive Bi-Wheel Explorer" }
--- pinned/explore_human_design +++ observed/explore_human_design { "_meta": { + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.21.0", + "openai/toolInvocation/invoked": "Bodygraph ready", + "openai/toolInvocation/invoking": "Drawing your bodygraph…", + "openai/widgetAccessible": true, "ui": { - "resourceUri": "ui://openephemeris/bodygraph", + "resourceUri": "ui://openephemeris/bodygraph?v=4.21.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.21.0" }, "annotations": { "destructiveHint": false, - "description": "Generate an interactive Human Design Bodygraph with clickable centers, gates, and channels.\n\nCREDIT COST: 4 credits where the bodygraph renders (2 for the chart + 2 for the visual), 2 in text-only hosts that skip the render. For chart data alone at 2 credits — including the activations, design, personality, strategy and variables this tool does not return — use human_design_chart.\n\nReturns an embedded visual bodygraph explorer that lets you click any center or gate for instant Human Design interpretation. Shows defined/undefined centers, active gates, channels, Type, Profile, Authority, and Incarnation Cross. The chart is calculated using NASA JPL DE440 ephemerides for both Personality and Design positions. Use this instead of human_design_chart for a richer, interactive HD experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts. Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.", + "description": "Use this when the user asks 'what's my Human Design', 'am I a Generator / Projector / Manifestor / Reflector', 'show my bodygraph', 'what's my HD type and profile', 'what's my strategy and authority' or 'what's my incarnation cross'. Returns an interactive bodygraph (inline in Claude and ChatGPT; text summary elsewhere) showing defined/undefined centers, active gates, channels, Type, Profile, Authority and Incarnation Cross, with any center or gate clickable for interpretation. Birthplace may be a place name (`location`).\n\nCREDIT COST: 4 credits per call (2 chart + 2 render; +1 to resolve a place name). Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.", "inputSchema": { "properties": { "datetime": { - "description": "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.", + "description": "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.", "type": "string" }, "latitude": { - "description": "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.", + "description": "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.", "type": "number" }, "location": { - "description": "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.", + "description": "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.", "type": "string" }, "longitude": { - "description": "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.", + "description": "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.", "type": "string" } }, - "name": "explore_human_design" + "name": "explore_human_design", + "title": "Interactive Human Design Bodygraph Explorer" }
--- pinned/explore_human_design_connection +++ observed/explore_human_design_connection { "_meta": { + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.21.0", + "openai/toolInvocation/invoked": "Connection chart ready", + "openai/toolInvocation/invoking": "Overlaying both bodygraphs…", + "openai/widgetAccessible": true, "ui": { - "resourceUri": "ui://openephemeris/bodygraph", + "resourceUri": "ui://openephemeris/bodygraph?v=4.21.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.21.0" }, "annotations": { "destructiveHint": false, - "description": "Compare two people's Human Design charts and classify every connected channel by HD connection theory.\n\nCREDIT COST: 3 credits per call.\n\nClassifications: electromagnetic (attraction), companionship (sameness), dominance (one defines), and compromise (friction). Returns an interactive two-person overlay bodygraph in MCP Apps-capable hosts, with a text summary fallback elsewhere. Premium (Pro tier). NASA JPL DE440 ephemerides. Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.", + "description": "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).\n\nCREDIT COST: 5 credits per call (composite 3 + render 2). Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.", "inputSchema": { "properties": { "layout": { - "description": "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.", + "description": "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.", "enum": [ "graph", "mandala" - "description": "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.", + "description": "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.", "type": "string" }, "longitude": { - "description": "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.", + "description": "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.", "type": "string" }, "longitude": { + "render_token": { + "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" + }, "theme": { - "description": "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.", + "description": "Visual theme for the overlay bodygraph. Supplied by the embedded app to match the host; defaults to dark.", "enum": [ "light", "dark" - "name": "explore_human_design_connection" + "name": "explore_human_design_connection", + "title": "Human Design Connection (Synastry)" }
--- pinned/explore_human_design_transit +++ observed/explore_human_design_transit { "_meta": { + "openai/outputTemplate": "ui://openephemeris/bodygraph?v=4.21.0", + "openai/toolInvocation/invoked": "Transit overlay ready", + "openai/toolInvocation/invoking": "Overlaying the transits on your bodygraph…", + "openai/widgetAccessible": true, "ui": { - "resourceUri": "ui://openephemeris/bodygraph", + "resourceUri": "ui://openephemeris/bodygraph?v=4.21.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/bodygraph" + "ui/resourceUri": "ui://openephemeris/bodygraph?v=4.21.0" }, "annotations": { "destructiveHint": false, - "description": "Overlay the current (or a chosen) planetary transit on a person's natal Human Design bodygraph.\n\nCREDIT COST: 3 credits per call.\n\nHighlights the channels a transit temporarily COMPLETES with the natal chart and any centers it newly defines — the core of a Human Design transit reading. Returns an interactive overlay bodygraph in MCP Apps-capable hosts (Claude Desktop), with a text summary fallback elsewhere. Premium (Pro tier). Calculated with NASA JPL DE440 ephemerides. Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.", + "description": "Use this when the user asks 'what are today's Human Design transits for me', 'what gates are being activated for me right now', 'which channels does this transit complete in my chart' or 'how is the current sky affecting my bodygraph'. Returns an interactive overlay bodygraph (inline in Claude and ChatGPT; text summary elsewhere) highlighting the channels the transit temporarily COMPLETES with the natal chart and any centers it newly defines, for now or a chosen datetime. Birthplace may be a place name (`location`).\n\nCREDIT COST: 5 credits per call (chart 3 + render 2; +1 per place name). Human Design was originated by Ra Uru Hu; OpenEphemeris is an independent calculation service, not affiliated with Jovian Archive.", "inputSchema": { "properties": { "datetime": { - "description": "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.", + "description": "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.", "type": "string" }, "latitude": { - "description": "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.", + "description": "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.", "enum": [ "graph", "mandala" - "description": "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.", + "description": "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.", "type": "string" }, "longitude": { + "render_token": { + "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" + }, "theme": { - "description": "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.", + "description": "Visual theme for the overlay bodygraph. Supplied by the embedded app to match the host; defaults to dark.", "enum": [ "light", "dark" - "name": "explore_human_design_transit" + "name": "explore_human_design_transit", + "title": "Human Design Transit Overlay" }
--- pinned/explore_moon_phase +++ observed/explore_moon_phase { "_meta": { + "openai/outputTemplate": "ui://openephemeris/moon-phase?v=4.21.0", + "openai/toolInvocation/invoked": "Moon phase ready", + "openai/toolInvocation/invoking": "Reading the Moon…", + "openai/widgetAccessible": true, "ui": { - "resourceUri": "ui://openephemeris/moon-phase", + "resourceUri": "ui://openephemeris/moon-phase?v=4.21.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/moon-phase" + "ui/resourceUri": "ui://openephemeris/moon-phase?v=4.21.0" }, "annotations": { "destructiveHint": false, - "description": "Generate an interactive Moon Phase dial showing the current lunar illumination, phase name, zodiac sign, and void-of-course status as a beautiful circular visualization.\n\nReturns a visual dial with:\n • SVG crescent Moon showing real-time illumination percentage\n • Phase name and waxing/waning indicator\n • Current Moon sign with degree\n • Void-of-Course status with timing details\n • Lunar age (days in the synodic cycle)\n • Upcoming New Moon and Full Moon dates\n\nCREDIT COST: 3 credits per call (phase + void-of-course + aspects, 1 each).\n\nUse this instead of ephemeris_moon_phase for a rich, interactive lunar phase experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts.", + "description": "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) with:\n• SVG crescent Moon showing real-time illumination percentage\n• Phase name and waxing/waning indicator\n• Current Moon sign with degree\n• Void-of-Course status with timing details\n• Lunar age (days in the synodic cycle) and days to the next New and Full Moon\n• The tightest applying lunar aspects\n\nCREDIT COST: 3 credits per call (phase + void-of-course + aspects, 1 each).", "inputSchema": { "additionalProperties": false, "properties": { - "name": "explore_moon_phase" + "name": "explore_moon_phase", + "title": "Interactive Moon Phase Explorer" }
--- pinned/explore_natal_chart +++ observed/explore_natal_chart { "_meta": { + "openai/outputTemplate": "ui://openephemeris/chart-wheel?v=4.21.0", + "openai/toolInvocation/invoked": "Birth chart ready", + "openai/toolInvocation/invoking": "Casting your birth chart…", + "openai/widgetAccessible": true, "ui": { - "resourceUri": "ui://openephemeris/chart-wheel", + "resourceUri": "ui://openephemeris/chart-wheel?v=4.21.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/chart-wheel" + "ui/resourceUri": "ui://openephemeris/chart-wheel?v=4.21.0" }, "annotations": { "destructiveHint": false, - "description": "PRIMARY tool for any natal/birth-chart request. Renders an interactive, clickable chart wheel — prefer this over ephemeris_natal_chart when the user wants to SEE a chart. Returns an embedded visual chart explorer that lets you click any planet, house, or aspect line for instant astrological interpretation.\n\nCREDIT COST: 1 credit per call.\n\nSupports house system switching (Placidus, Whole Sign, Equal, Koch). The chart is computed using NASA JPL DE440 ephemerides for sub-arcsecond precision. Renders interactively in MCP Apps-capable hosts (Claude Desktop) and falls back to static SVG in other hosts.", + "description": "Use this when the user asks '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, together with the birth date and local time and its zone.\n\nCREDIT COST: 1 credit per call (+1 to resolve a place name).", "inputSchema": { "properties": { "bodies": { - "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, 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). Example: ['sun','moon','lilith','sedna'].", + "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 (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'].", "items": { "type": "string" }, - "description": "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`.", + "description": "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.", "type": "string" }, "house_system": { - "description": "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.", + "description": "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.", "type": "number" }, "location": { - "description": "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.", + "description": "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.", "type": "string" }, "longitude": { - "name": "explore_natal_chart" + "name": "explore_natal_chart", + "title": "Interactive Chart Wheel Explorer" }
--- pinned/explore_transit_timeline +++ observed/explore_transit_timeline { "_meta": { + "openai/outputTemplate": "ui://openephemeris/transit-timeline?v=4.21.0", + "openai/toolInvocation/invoked": "Transit timeline ready", + "openai/toolInvocation/invoking": "Searching your upcoming transits…", + "openai/widgetAccessible": true, "ui": { - "resourceUri": "ui://openephemeris/transit-timeline", + "resourceUri": "ui://openephemeris/transit-timeline?v=4.21.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/transit-timeline" + "ui/resourceUri": "ui://openephemeris/transit-timeline?v=4.21.0" }, "annotations": { "destructiveHint": false, - "description": "Generate an interactive Transit Timeline — a vertical, date-ordered list of upcoming transit hits (transiting planets forming a chosen aspect to natal chart positions) over a date range.\n\nReturns a visual timeline with:\n • Exact crossing dates grouped by month\n • Transiting planet glyph, the natal point it contacts, and the aspect\n • Zodiac position of each crossing and retrograde markers\n • Click any transit for a focused interpretation\n\nASPECT ANGLES: 0 = conjunction/return (default), 180 = opposition, 90 = square, 120 = trine, 60 = sextile. EFFICIENCY: specify transiting_planets and natal_points to keep compute fast. DEFAULT natal_points: sun, moon, mercury, venus, mars, jupiter, saturn. SEARCH RANGE LIMITS: Explorer/PayG → 1 year; Pro → 5 years; Startup → 10 years.\n\nCREDIT COST: 6 credits per call (natal chart + predictive transit search).\n\nUse this for a rich, interactive transit-forecast experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts.", + "description": "Use this when the user asks 'what transits are coming up for me', 'what's my forecast for the next year', 'when will Saturn hit my chart', 'show my upcoming transits' 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 glyph, the natal point it contacts, the aspect, zodiac position 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.\n\nASPECT 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.\nMAX SPAN: Explorer/PayG 1y, Pro 5y, Startup 10y, Scale 40y (longer = 400).\nCREDIT COST: 1 + span price: ≤1y 5 (6 total), ≤3y 10, ≤5y 15, ≤10y 25, ≤20y 40, ≤40y 70.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "natal_latitude": { - "description": "Latitude of birth location in decimal degrees. Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Latitude of birth location in decimal degrees.", "type": "number" }, "natal_longitude": { + "orb_deg": { + "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" + }, "start_date": { "description": "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.", "type": "string" - "name": "explore_transit_timeline" + "name": "explore_transit_timeline", + "title": "Interactive Transit Timeline" }
--- pinned/explore_vedic_chart +++ observed/explore_vedic_chart { "_meta": { + "openai/outputTemplate": "ui://openephemeris/vedic-chart?v=4.21.0", + "openai/toolInvocation/invoked": "Vedic chart ready", + "openai/toolInvocation/invoking": "Casting your Vedic chart…", + "openai/widgetAccessible": true, "ui": { - "resourceUri": "ui://openephemeris/vedic-chart", + "resourceUri": "ui://openephemeris/vedic-chart?v=4.21.0", "visibility": [ "model", "app" - "ui/resourceUri": "ui://openephemeris/vedic-chart" + "ui/resourceUri": "ui://openephemeris/vedic-chart?v=4.21.0" }, "annotations": { "destructiveHint": false, - "description": "Generate an interactive Vedic (Jyotish) birth chart as a South Indian fixed-sign Rashi grid, with clickable rashis showing sidereal placements, nakshatras, and the Lagna.\n\nCREDIT COST: 3 credits per call (chart calculation + visual render).\n\nReturns an embedded visual explorer that lets you click any rashi cell for its themes and any planets placed there. Shows sidereal (Lahiri by default) planet placements, nakshatra with pada, navamsa, and the Lagna (Ascendant) rashi. Uses NASA JPL DE440 ephemerides. Use this for a rich, interactive Jyotish experience in MCP Apps-capable hosts (Claude Desktop). Falls back to a text summary in other hosts.", + "description": "Use this when the user asks 'show my Vedic chart', 'my Jyotish chart', 'what's my nakshatra', 'my sidereal birth chart', 'my rashi 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`).\n\nCREDIT COST: 3 credits per call (chart + render; +1 to resolve a place name).", "inputSchema": { "properties": { "ayanamsa": { - "description": "ISO 8601 birth datetime in UTC, e.g. '1990-06-15T14:30:00Z'. Include 'Z' or a timezone offset.", + "description": "ISO 8601 birth datetime in UTC, e.g. '1990-06-15T14:30:00Z'. Must include 'Z' or a timezone offset.", "type": "string" }, "latitude": { - "description": "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.", + "description": "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.", "type": "number" }, "location": { - "description": "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.", + "description": "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.", "type": "string" }, "longitude": { - "description": "IANA timezone name for the birth location (e.g. 'Asia/Kolkata'). Recommended for accuracy if providing local birth time without a UTC offset.", + "description": "IANA timezone name for the birth location (e.g. 'Asia/Kolkata'). Used to convert a local birth time without a UTC offset.", "type": "string" } }, - "name": "explore_vedic_chart" + "name": "explore_vedic_chart", + "title": "Interactive Vedic Chart Explorer" }
--- pinned/human_design_chart +++ observed/human_design_chart { + "_meta": { + "openai/toolInvocation/invoked": "Human Design data computed", + "openai/toolInvocation/invoking": "Computing Human Design data…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate a full Human Design I Ching hexagram chart from birth data. Returns the person's Type (Generator, Manifesting Generator, Projector, Manifestor, Reflector), Strategy, Authority, Profile (e.g. 1/3, 2/4), defined and undefined Centers, activated Gates and Channels, Incarnation Cross, and both Personality (conscious) and Design (unconscious) planetary positions.\n\nReturns raw JSON. For a user-facing interactive bodygraph, use explore_human_design instead.\n\nCREDIT COST: 2 credits per call.\n\nHuman Design uses two calculation moments: the birth time (Personality) and ~88° of Sun motion before birth (~3 months prior, the Design calculation). The API handles this automatically.\n\nThe datetime must state its zone — pass an offset/'Z', or pass local time plus timezone. A zone-less datetime is rejected rather than assumed to be UTC: Human Design is minute-sensitive, and an hour of error changes the Profile and the Design Sun line.\n\nEXAMPLE (local birth time + zone): someone born 15 April 1990 at 14:30 in Chicago:\n datetime='1990-04-15T14:30:00', timezone='America/Chicago', latitude=41.8781, longitude=-87.6298\nEXAMPLE (already in UTC):\n datetime='1990-04-15T19:30:00Z', latitude=41.8781, longitude=-87.6298", + "description": "Use this when the Human Design chart is wanted as data — 'give me my HD activations', 'which planets sit in which gates, design and personality', 'what are my variables', 'my Human Design chart as JSON'. Returns Type, Strategy, Authority, Profile, defined and undefined Centers, activated Gates and Channels, Incarnation Cross, and both Personality (birth) and Design (~88° of Sun before birth) planetary positions.\n\nCREDIT COST: 2 credits per call.\n\nHD is minute-sensitive: a zone-less datetime is rejected, because an hour of error changes the Profile and the Design Sun line. Takes coordinates, not a place name.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "format": { - "description": "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.", + "description": "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.", "type": "boolean" }, "latitude": { - "description": "Latitude of birth location in decimal degrees (positive = North). Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Latitude of birth location in decimal degrees (positive = North).", "type": "number" }, "longitude": { - "name": "human_design_chart" + "name": "human_design_chart", + "title": "Human Design Chart" }
--- pinned/location_search +++ observed/location_search { + "_meta": { + "openai/toolInvocation/invoked": "Place found", + "openai/toolInvocation/invoking": "Looking up the place…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Resolve a place name to coordinates and IANA timezone — use this first whenever a user gives a birth city rather than latitude/longitude. NEVER recall coordinates from memory; always resolve them here. CREDIT COST: 1 credit per call. Returns display name, region (state/province), latitude, longitude, and IANA timezone. Pass the birth date as `date` to also get `utcOffsetAtDate`, the historically-correct UTC offset for that place on that date (1987 DST rules differ from today's). Post-1970 dates resolve locally and cost no extra credits; a pre-1970 date consults the API's historical correction overlay for the top match (1 extra credit) and returns its provenance — tzRuleSource, tzRuleCitation, tzOverlayVersion. When the result is `ambiguous` (several places share the name, e.g. \"portland\"), ASK the user which one they mean rather than assuming the first. Optional bias params (country/region/near) improve ranking; a trailing \"City, ST\" qualifier in the query is also honored.", + "description": "Use this when the user gives a birth city or any place name — 'born in Chicago', 'Portland', 'Mumbai, India' — 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.", "inputSchema": { "additionalProperties": false, "properties": { - "name": "location_search" + "name": "location_search", + "title": "Location Search" }
--- pinned/timezone_resolve +++ observed/timezone_resolve { + "_meta": { + "openai/toolInvocation/invoked": "Timezone resolved", + "openai/toolInvocation/invoking": "Resolving the timezone…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Resolve the IANA timezone for a latitude/longitude pair. Use when you have coordinates but need the timezone to interpret a local birth time. Pass `date` to also get the historically-correct UTC offset that applied on that date. CREDIT COST: 1 credit per call. If you are starting from a place name rather than coordinates, use location_search instead — it returns the timezone too, in the same single call.", + "description": "Use this when the user asks 'what timezone is this location in' or 'what was the UTC offset there on that date', or when latitude/longitude are known and the IANA timezone is needed to interpret a local birth time. Takes coordinates, not a place name. Returns the IANA zone and, with `date`, the historically-correct UTC offset that applied on that date. CREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { + "description": "Latitude in decimal degrees, -90 to 90 (north positive).", "type": "number" }, "longitude": { + "description": "Longitude in decimal degrees, -180 to 180 (east positive).", "type": "number" } }, - "name": "timezone_resolve" + "name": "timezone_resolve", + "title": "Timezone Resolve" }
--- pinned/vedic_chart +++ observed/vedic_chart { + "_meta": { + "openai/toolInvocation/invoked": "Vedic positions computed", + "openai/toolInvocation/invoking": "Computing Vedic positions…" + }, "annotations": { "destructiveHint": false, "idempotentHint": true, - "description": "Calculate a Vedic (Jyotish) natal chart with sidereal positions. Returns planet placements in rashis (sidereal signs), nakshatras with pada, navamsa placements, and bhavas (houses). Uses Whole Sign houses, sidereal zodiac with configurable ayanamsa.\n\nCREDIT COST: 1 credit per call.\n\nSUPPORTED AYANAMSA: lahiri (default), fagan_bradley, krishnamurti, raman, yukteshwar\n\nEXAMPLE: Vedic chart for someone born Jan 15, 1990 at 8:30 AM UTC in Mumbai:\n datetime='1990-01-15T08:30:00Z', latitude=19.076, longitude=72.8777", + "description": "Use this when the Vedic / Jyotish chart is wanted as data — 'my sidereal placements as JSON', 'nakshatra and pada for every planet as a table', 'my navamsa positions'. Takes coordinates, not a place name. Returns sidereal planet placements in rashis, nakshatras with pada, navamsa placements and bhavas (Whole Sign houses).\n\nSUPPORTED AYANAMSA: lahiri (default), fagan_bradley, krishnamurti, raman, yukteshwar\n\nCREDIT COST: 1 credit per call.", "inputSchema": { "additionalProperties": false, "properties": { - "description": "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`.", + "description": "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.", "type": "string" }, "latitude": { - "description": "Birth latitude in decimal degrees (north positive). Resolve from a place name with location_search; never recall coordinates from memory.", + "description": "Birth latitude in decimal degrees (north positive).", "type": "number" }, "longitude": { - "name": "vedic_chart" + "name": "vedic_chart", + "title": "Vedic Natal Chart" }
Current tools
Show all 42 tool fingerprints
Watch this server yourself
If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.
npx -y mcp-pin@0.2.3 -- <your @openephemeris/mcp-server command>
Or subscribe to this page's RSS feed to be told when it changes.
Badge
The badge states one fact about time and nothing else. It never claims a server is safe.
[](https://mcp-pin.gautamkhosla.com/servers/c09b0e0bc40f7221.html)