Vedic astrology and astronomical ephemeris: kundali, panchanga, dashas, vargas, transits
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Clean-room Rust ephemeris and Vedic astrology engine, built for the agentic-AI era. Sub-arcsecond planetary precision, every algorithm traced to a primary source, any chart queryable as a property graph.
Website Β· Docs Β· Playground Β· API reference Β· Blog
clean-room Β· 0.103β³ mean longitude vs JPL Horizons Β· 1,147 tests (per push) + 24,350 oracle rows Β· MCP-native Β· BUSL-1.1 β Apache 2.0
Install Β· Quick start Β· Accuracy Β· What's inside Β· MCP + property graph Β· Provenance Β· License
| Platform | Install | Notes |
|---|---|---|
| Rust | cargo add vedaksha | full pipeline |
| Python | pip install vedaksha | engine via WebAssembly, py3-none-any, Python β₯ 3.9 β no Rust toolchain |
| WASM | npm install vedaksha-wasm | browser & edge, no data files |
| MCP | cargo install vedaksha-mcp | stdio + HTTP (bearer auth) |
| Docker | docker run -e VEDAKSHA_MCP_TOKEN=β¦ -p 3100:3100 ghcr.io/arthiqlabs/vedaksha-mcp | multi-arch (amd64 + arm64) |
Compute janam kundali (natal charts), panchanga, dashas, nakshatras, vargas, shadbala, ashtakavarga, muhurta and transits/gochara from a sub-arcsecond ephemeris (VSOP87A, ELP/MPP02, JPL DE440s/DE441).
The Rust path is a compiled doctest in crates/vedaksha/src/lib.rs.
Every Julian Day on the public surfaces is UT1, not TT and not TDB. The engine converts to TT internally for the dynamical terms and uses UT1 for Earth rotation, which fixes the ascendant, MC and all twelve cusps. Passing a TDB Julian Day adds ΞT worth of rotation instead of removing it β 0.289Β° (17.3β²) at today's ΞT β 69 s, on every cusp. The one exception is the raw SPK query (state_vector), which indexes the kernel directly and takes TDB.
These figures are reproducible, not just asserted: vedaksha-parity
is a separate harness (maintained by the same authors as this engine) that anyone can run against
their own copies of the reference kernels to check the published numbers below.
Every figure is printed by a named test. Reproduce the ephemeris tables with bash scripts/download_de440s.sh, then cargo test -p vedaksha-ephem-core --release -- --include-ignored --nocapture; the ayanamsha figures come from cargo test -p vedaksha-astro sidereal, and the cross-check against an independent Python derivation of the same primaries from cargo test -p vedaksha-astro --test ayanamsha_fixture.
What the headline 0.103β³ measures β precisely. It is a mean apparent geocentric ecliptic-longitude residual, not a general position-accuracy figure: the fixture also carries ref_latitude, ref_distance and ref_speed, but oracle_comparison.rs marks them dead_code and none of the three enters this number. It covers only the measured-ΞT era, 1900β2025, at 1,535 comparisons per body (15,350 total across 10 bodies) β the full 1900β2100 grid moves the mean to 0.878β³ for reasons unrelated to ephemeris accuracy (see below). And it compares against planetary-system barycentres, not physical planet centres, matching what the DE440s kernel stores and what SpkReader returns; querying centres instead would inject a spurious ~0.1β³ offset for the outer planets (scripts/generate_horizons_oracle.py) β the same order of magnitude as the headline mean itself. These three facts are also published as data in metrics.json's accuracy block (quantity, era, targetConvention), so the site renders them rather than anyone hand-copying this paragraph.
SpkReader vs JPL Horizons (DE441) β oracle_comparison.rs, 24,350 committed rows (10 bodies Γ 2,435 dates, 1900β2100). Horizons serves DE441, so this measures our DE440s pipeline against an independent kernel.
| Era | Comparisons | Mean | Max |
|---|---|---|---|
| 1900β2025 (ΞT measured) | 15,350 | 0.103β³ | 1.187β³ (Uranus) |
| 1900β2100 (all) | 24,350 | 0.878β³ | 44.912β³ (Moon, 2099) |
15,349 of 15,350 comparisons before 2026 are sub-arcsecond. Past 2025 the residual is ΞT prediction, not ephemeris error: our EspenakβMeeus extrapolation and Horizons' ΞT diverge by ~68 s at 2099, and the error scales with a body's angular rate β the Moon (0.64β³/s) picks up ~45β³, Pluto essentially none. At 2099-02-06, five bodies spanning 0.03β0.64β³/s all imply the same 66β71 s offset, which is the signature of a clock difference, not a position error.
AnalyticalProvider vs JPL Horizons β analytical_oracle.rs, 1900β2025: overall mean 0.239β³, worst case 1.896β³ (Neptune), Moon 0.169β³ mean via ELP/MPP02. 13,815 comparisons across 9 bodies (1,535 dates per body) over the measured-ΞT era; see metrics.json's accuracy.analytical block.
Per body, because the mean hides a pattern worth knowing before you pick this provider:
| body | meanβ³ | body | meanβ³ |
|---|---|---|---|
| Sun | 0.180 | Jupiter | 0.239 |
| Moon | 0.169 | Saturn | 0.251 |
| Mercury | 0.180 | Uranus | 0.267 |
| Venus | 0.180 | Neptune | 0.503 |
| Mars | 0.178 |
The inner bodies sit in a tight band at ~0.18β³ and the error then grows monotonically outward.
That is the truncation, and it is a property of how the series is cut rather than of any one
planet: scripts/generate_vsop87a.py drops terms below a uniform absolute amplitude of
1e-7 AU, applied identically to all eight. Saturn is not cut harder than Mercury β it retains
the most terms of any planet, 7,530 of 30,046. But an absolute cut leaves a residual whose size
scales with the orbit, so converting each body's angular error back into a position error gives
9Γ the threshold at 1 AU, 60Γ at Jupiter, 116Γ at Saturn, 249Γ at Uranus and 734Γ at Neptune.
Tightening the threshold would shrink this at the cost of the coefficient set, which is what
makes this provider viable in WASM and at the edge. If you need the outer planets to
sub-0.1β³, use SpkReader, where they are the best bodies rather than the worst: Jupiter
0.083β³ and Saturn 0.061β³ against the same oracle, versus ~0.13β³ for the inner planets.
Until 2026-08-20 those figures were 2.06β³ mean and 24.22β³ worst, and this README attributed the gap to VSOP87A being a truncated theory. That was wrong, and the wording protected a defect of ours: the analytical provider answered EarthMoonBarycenter with VSOP87A's Earth-centre series, so the observer sat 4,671 km off, and earth_state divided a barycentre-relative Moon by 1 + EMRAT instead of EMRAT for a further 56.8 km. Both are fixed. The second one moved the SPK path too, 0.106β³ β 0.103β³.
ELP/MPP02 Moon β lunar_horizons.rs: 0.015β³ at J2000, 0.020β0.053β³ across 1500β2500 CE.
docs/audit/2026-08-17-ayanamsha-cleanroom/.No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/vedaksha)<a href="https://allmcps.com/mcp/vedaksha"><img src="https://allmcps.com/api/badge/vedaksha?style=directory" alt="Vedaksha on AllMCPs" /></a>