Demo

Ask the engine a question.

Each answer below comes from the code behind the compute API and the hosted MCP server, not from a mock. With it you get the JSON the API returns, the cURL command that asks the same question, the MCP tool call an assistant would make, and what the answer was compared against.

Pick a question

A birth chart for a date, time and place

The first run loads the compute API’s own calculations into this page, about 155 KB compressed. Nothing is sent.

On 15 June 1990 at 14:30 in Paris, France (UTC+2, which is 15 June 1990, 12:30 UTC), the Sun was at 24°08′ Gemini, the Moon at 15°38′ Pisces and the Ascendant at 2°27′ Libra.

BodyPositionMotion
Sun24°08′ GeminiDirect
Moon15°38′ PiscesDirect
Mercury5°43′ GeminiDirect
Venus18°48′ TaurusDirect
Mars11°03′ AriesDirect
Jupiter15°53′ CancerDirect
Saturn24°01′ CapricornRetrograde
Uranus8°09′ CapricornRetrograde
Neptune13°42′ CapricornRetrograde
Pluto15°24′ ScorpioRetrograde
Ascendant2°27′ Libra
Midheaven3°06′ Cancer

Whole-sign houses, so the first house is the Ascendant’s sign. The chart has 16 major aspects between the Sun, the Moon and the eight planets; the JSON lists them with their orbs.

Computed with the compute API’s own code when this page was built.

The JSON response
{
  "schema": "zodiacs.compute-api.chart.v1",
  "result": {
    "instant": "1990-06-15T12:30:00.000Z",
    "local": {
      "offsetMinutes": 120,
      "flags": [],
      "localMeanTime": null,
      "zoneHistory": "runtime",
      "zoneUncertain": false
    },
    "bodies": [
      {
        "body": "Sun",
        "lon": 84.14928002220142,
        "lat": -0.00001827703878788282,
        "speed": 0.9551305973047874,
        "retrograde": false,
        "sign": "gemini",
        "degree": 24.149280022201424
      },
      {
        "body": "Moon",
        "lon": 345.6367188970119,
        "lat": 3.1501089515977787,
        "speed": 13.369240872094679,
        "retrograde": false,
        "sign": "pisces",
        "degree": 15.63671889701186
      },
      {
        "body": "Mercury",
        "lon": 65.7265334199264,
        "lat": -1.659130144145581,
        "speed": 1.7170306078924114,
        "retrograde": false,
        "sign": "gemini",
        "degree": 5.7265334199263975
      },
      {
        "body": "Venus",
        "lon": 48.80186545784608,
        "lat": -1.9454777463945472,
        "speed": 1.1760216097229659,
        "retrograde": false,
        "sign": "taurus",
        "degree": 18.801865457846077
      },
      {
        "body": "Mars",
        "lon": 11.0560354451639,
        "lat": -1.985442010929648,
        "speed": 0.7189171010963946,
        "retrograde": false,
        "sign": "aries",
        "degree": 11.0560354451639
      },
      {
        "body": "Jupiter",
        "lon": 105.89399333781893,
        "lat": 0.1868222095489725,
        "speed": 0.2166527083602432,
        "retrograde": false,
        "sign": "cancer",
        "degree": 15.893993337818927
      },
      {
        "body": "Saturn",
        "lon": 294.0306398433936,
        "lat": 0.11719975460325133,
        "speed": -0.0586625626510795,
        "retrograde": true,
        "sign": "capricorn",
        "degree": 24.0306398433936
      },
      {
        "body": "Uranus",
        "lon": 278.16312067145714,
        "lat": -0.3255654628085348,
        "speed": -0.038934664019052434,
        "retrograde": true,
        "sign": "capricorn",
        "degree": 8.163120671457136
      },
      {
        "body": "Neptune",
        "lon": 283.7163219439272,
        "lat": 0.8770484012609031,
        "speed": -0.025031484796045333,
        "retrograde": true,
        "sign": "capricorn",
        "degree": 13.716321943927142
      },
      {
        "body": "Pluto",
        "lon": 225.40175398202936,
        "lat": 15.85358596624236,
        "speed": -0.02017257970976516,
        "retrograde": true,
        "sign": "scorpio",
        "degree": 15.40175398202939
      },
      {
        "body": "North Node",
        "lon": 308.1217975926026,
        "lat": 0,
        "speed": 0.013238202005254607,
        "retrograde": false,
        "sign": "aquarius",
        "degree": 8.121797592602661
      },
      {
        "body": "South Node",
        "lon": 128.1217975926026,
        "lat": 0,
        "speed": 0.013238202005254607,
        "retrograde": false,
        "sign": "leo",
        "degree": 8.121797592602604
      }
    ],
    "angles": {
      "asc": 182.4651150595028,
      "mc": 93.10546207243345,
      "dsc": 2.465115059502807,
      "ic": 273.1054620724335
    },
    "houses": {
      "system": "whole",
      "cusps": [
        180,
        210,
        240,
        270,
        300,
        330,
        0,
        30,
        60,
        90,
        120,
        150
      ]
    },
    "aspects": [
      {
        "a": "Moon",
        "b": "Pluto",
        "type": "trine",
        "orb": 0.23496491498258365,
        "applying": false
      },
      {
        "a": "Moon",
        "b": "Jupiter",
        "type": "trine",
        "orb": 0.25727444080700934,
        "applying": true
      },
      {
        "a": "Jupiter",
        "b": "Pluto",
        "type": "trine",
        "orb": 0.49223935578956457,
        "applying": false
      },
      {
        "a": "Neptune",
        "b": "Pluto",
        "type": "sextile",
        "orb": 1.6854320381021353,
        "applying": false
      },
      {
        "a": "Moon",
        "b": "Neptune",
        "type": "sextile",
        "orb": 1.920396953084719,
        "applying": false
      },
      {
        "a": "Jupiter",
        "b": "Neptune",
        "type": "opposition",
        "orb": 2.1776713938917283,
        "applying": false
      },
      {
        "a": "Mars",
        "b": "Neptune",
        "type": "square",
        "orb": 2.6602864987632984,
        "applying": true
      },
      {
        "a": "Mars",
        "b": "Uranus",
        "type": "square",
        "orb": 2.8929147737067638,
        "applying": false
      },
      {
        "a": "Venus",
        "b": "Jupiter",
        "type": "sextile",
        "orb": 2.9078721200271502,
        "applying": false
      },
      {
        "a": "Moon",
        "b": "Venus",
        "type": "sextile",
        "orb": 3.1651465608341596,
        "applying": true
      },
      {
        "a": "Venus",
        "b": "Pluto",
        "type": "opposition",
        "orb": 3.400111475816715,
        "applying": false
      },
      {
        "a": "Mars",
        "b": "Jupiter",
        "type": "square",
        "orb": 4.837957892655027,
        "applying": true
      },
      {
        "a": "Venus",
        "b": "Neptune",
        "type": "trine",
        "orb": 5.0855435139188785,
        "applying": false
      },
      {
        "a": "Venus",
        "b": "Saturn",
        "type": "trine",
        "orb": 5.228774385547524,
        "applying": true
      },
      {
        "a": "Uranus",
        "b": "Neptune",
        "type": "conjunction",
        "orb": 5.553201272470062,
        "applying": false
      },
      {
        "a": "Jupiter",
        "b": "Uranus",
        "type": "opposition",
        "orb": 7.73087266636179,
        "applying": false
      }
    ],
    "flags": [],
    "deltaT": {
      "seconds": 57.19704162597656,
      "sigma": 0.000846,
      "model": "iers-utc/1",
      "table": "2026-09-24",
      "tableDigest": "064d98b4a531053a",
      "segment": "observed"
    },
    "timeScale": {
      "input": "utc",
      "basis": "iers",
      "ut1MinusUtc": {
        "seconds": -0.013041666666662621,
        "sigma": 0.000846,
        "source": "observed"
      },
      "leapSeconds": {
        "taiMinusUtc": 25,
        "listed": true
      }
    }
  },
  "receipt": {
    "conventionIds": [
      "angleExclusions:exact-geographic-poles-and-ecliptic-horizon-coincidence",
      "angles:gast-and-true-obliquity",
      "aspects:major-aspects;sun-moon-eight-planets;no-nodes;applying-instantaneous-orb-rate",
      "assessment:finite-reference-cases-only",
      "broadDateRange:not-certified",
      "calendar:proleptic-gregorian",
      "conventionIds:zodiacs-conventions-registry;receipt-and-result;sorted-unique;in-receipt",
      "deltaT:tt-minus-ut1;value-in-result",
      "deltat-model:iers-utc/1",
      "deltat-segment:observed",
      "ephemeris:astronomy-engine@2.1.19",
      "house:whole",
      "inputSyntax:not-an-astronomical-accuracy-guarantee",
      "localTime:tzdb-shards-before-1970;host-intl-from-1970;flags-from-transition-record",
      "longitudeUnit:degrees-[0,360)",
      "moonNodes:instantaneous-geocentric-moon-orbit-plane",
      "moonPosition:astronomy-engine-geo-moon;no-light-time;no-aberration",
      "nutation:iau2000b;equation-of-equinoxes-with-two-complementary-terms",
      "planetPositions:aberrated-geocentric-ecliptic-of-date;no-deflection",
      "reference:supplied-instant",
      "speed:degrees-per-day;central-difference-plus-minus-0.001-day;nodes-plus-minus-0.25-day",
      "time-basis:iers",
      "time-scale:utc",
      "timeScale:tt-from-leap-seconds-and-ut1-from-iers-1972-to-table-end;delta-t-model-otherwise;in-result",
      "ut1-source:observed",
      "zodiac:tropical"
    ],
    "conventions": {
      "angles": "gast-and-true-obliquity",
      "aspects": "major-aspects;sun-moon-eight-planets;no-nodes;applying-instantaneous-orb-rate",
      "calendar": "proleptic-gregorian",
      "conventionIds": "zodiacs-conventions-registry;receipt-and-result;sorted-unique;in-receipt",
      "deltaT": "tt-minus-ut1;value-in-result",
      "localTime": "tzdb-shards-before-1970;host-intl-from-1970;flags-from-transition-record",
      "longitudeUnit": "degrees-[0,360)",
      "moonNodes": "instantaneous-geocentric-moon-orbit-plane",
      "moonPosition": "astronomy-engine-geo-moon;no-light-time;no-aberration",
      "nutation": "iau2000b;equation-of-equinoxes-with-two-complementary-terms",
      "planetPositions": "aberrated-geocentric-ecliptic-of-date;no-deflection",
      "speed": "degrees-per-day;central-difference-plus-minus-0.001-day;nodes-plus-minus-0.25-day",
      "timeScale": "tt-from-leap-seconds-and-ut1-from-iers-1972-to-table-end;delta-t-model-otherwise;in-result",
      "zodiac": "tropical"
    },
    "coordinates": {
      "latitude": 48.8566,
      "longitude": 2.3522
    },
    "coverage": {
      "angleExclusions": "exact-geographic-poles-and-ecliptic-horizon-coincidence",
      "assessment": "finite-reference-cases-only",
      "broadDateRange": "not-certified",
      "inputSyntax": "not-an-astronomical-accuracy-guarantee"
    },
    "engine": {
      "ephemeris": {
        "name": "astronomy-engine",
        "version": "2.1.19"
      },
      "name": "@zodiacs/engine",
      "version": "1.1.0-rc.1"
    },
    "houses": {
      "absenceReason": null,
      "actual": "whole",
      "requested": "whole"
    },
    "inputFlags": [],
    "instant": "1990-06-15T12:30:00.000Z",
    "localResolution": {
      "date": "1990-06-15",
      "gapShiftMinutes": 0,
      "offsetMinutes": 120,
      "policy": {
        "fold": "earlier",
        "gap": "shift-forward"
      },
      "time": "14:30",
      "timeZone": "Europe/Paris"
    },
    "provenance": {
      "runtime": {
        "name": "node",
        "tzdbVersion": "2026c"
      },
      "status": "claimed"
    },
    "reference": "supplied-instant",
    "resultFlags": [],
    "schema": "zodiacs.calculation-receipt.draft-v1",
    "sourceInstant": null,
    "timeKnown": true,
    "timeScale": "utc"
  },
  "backend": {
    "name": "@zodiacs/engine",
    "version": "1.1.0-rc.1",
    "ephemeris": {
      "name": "astronomy-engine",
      "version": "2.1.19"
    }
  },
  "cite": {
    "url": "https://zodiacs.org/developers/compute/#chart",
    "receipt": "sha256:79819f8b7f18d88d2f9199e29718bef60000bd98d492c602e4010330e8a782ea",
    "engine": "@zodiacs/engine",
    "version": "1.1.0-rc.1"
  }
}

The same request with cURL

curl --silent --show-error https://zodiacs.org/api/v1/chart \
  --header 'Content-Type: application/json' \
  --data-raw '{"local":{"date":"1990-06-15","time":"14:30","zone":"Europe/Paris"},"latitude":48.8566,"longitude":2.3522,"houseSystem":"whole"}'

POST /api/v1/chart answers with the same JSON, with no key. Open it in the playground to send it and compare the two answers.

The same question as MCP tool calls

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "resolve_birth_time",
    "arguments": {
      "local": {
        "date": "1990-06-15",
        "time": "14:30",
        "zone": "Europe/Paris"
      },
      "longitude": 2.3522
    }
  }
}

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "calculate_natal_chart",
    "arguments": {
      "utc": "1990-06-15T12:30:00Z",
      "latitude": 48.8566,
      "longitude": 2.3522,
      "houseSystem": "whole"
    }
  }
}

The local MCP adapter takes the instant in UTC, so the local time is read first with resolve_birth_time, which runs the compute API’s time calculation. Both run on your own machine.

How this was checked

  • Computed by @zodiacs/engine 1.1.0-rc.1 with astronomy-engine 2.1.19, as the answer’s receipt names them. The local time was read with Node with tzdb 2026c.
  • An automated test compares the engine’s positions with NASA JPL Horizons at 2020 (ten bodies) and 1907 (Sun, Moon and Mars). The sample maximum difference is 14.8 arcseconds (Neptune, 2020).
  • Compared with Swiss Ephemeris 2.10.03 every tenth day from 1800 to 2026, the sample maximum difference in longitude is 22.9 arcseconds (Venus, 1878).
  • A sample maximum is the largest difference found in the cases measured. It is not a bound for every date.
  • The answer cites its receipt as sha256:79819f8b7f18d88d2f9199e29718bef60000bd98d492c602e4010330e8a782ea, the SHA-256 of the receipt’s canonical JSON, which the playground computes again.

What runs where

The first answers were computed when this page was built. When you change the date, time or place of the chart, or the date of the Mercury question, the page loads the compute API’s own calculations, the bundle the playground runs, and computes the new answer here. This page sends nothing to the API; the commands show how you would.

The compatibility answer is fixed. It compares two synthetic births with the hosted server’s get_compatibility tool.

Next steps