@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 e8d31bdcf38fb2c7c80d032c · repository · RSS
39tools
2recorded versions
45dtracked
unchanged 12d
What changed
Changed between 4 September 2026 and 5 October 2026 (first seen 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 39 tool fingerprints
account_usage
acg_hits
acg_power_lines
auth_login
auth_logout
auth_status
bazi_annual_pillar
dev_list_allowed
dev_read_api
electional_moment_analysis
electional_station_tracker
ephemeris_angles_points
ephemeris_aspect_check
ephemeris_electional
ephemeris_house_cusps
ephemeris_moon_phase
ephemeris_natal_chart
ephemeris_next_eclipse
ephemeris_next_lunar_phase
ephemeris_planet_position
ephemeris_progressed_chart
ephemeris_relocation
ephemeris_retrograde_status
ephemeris_solar_return
ephemeris_synastry
ephemeris_transits
explore_bazi_chart
explore_bi_wheel
explore_human_design
explore_human_design_connection
explore_human_design_transit
explore_moon_phase
explore_natal_chart
explore_transit_timeline
explore_vedic_chart
human_design_chart
location_search
timezone_resolve
vedic_chart
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)