Most astrology apps let an “AI” guess where the planets are. The result looks plausible… and is wrong. At Llmastro it's the opposite: the sky is computed, never made up.
Accurate positions, not guesses
Planetary positions, houses and aspects are computed server-side by an astronomical ephemeris engine (Swiss Ephemeris), from your date, time and place of birth. Only then does the AI put that data into words. The model interprets; it never computes the sky.
It's a matter of principle: one can debate the meaning we ascribe to the stars, but their position is a verifiable fact. We refuse to leave it to the whims of a language model.
Checked against NASA
To prove it, we compare our calculations to the world reference: JPL Horizons, the ephemeris system of NASA's Jet Propulsion Laboratory. Here is the longitude difference between our engine and Horizons, in arcseconds (1″ = 1/3600 of a degree).
| Body | Difference vs NASA |
|---|---|
| Sun | 0,2″ |
| Moon | 1,5″ |
| Mars | 0,2″ |
| Jupiter | 0,1″ |
| Pluto | 0,4″ |
In other words, our positions match NASA's to less than one arcsecond. That's the rigor a daily ritual deserves: if the sky is right, the reading drawn from it deserves to be heard.
The calculation is a fact; the interpretation is a language. We own both, end to end.
An MCP server: the real sky, for your AI
Because we own this engine end to end, we open it via the Model Context Protocol (MCP) — the standard through which AI assistants (Claude, ChatGPT, agents) call external tools. Plug in your agent: it gets computed positions, never guessed, straight from the source.
19 tools exposed
Nineteen tools, all backed by the same server-side computed engine:
Positions & sky
| Tool | Input | Output |
|---|---|---|
get_planet_positions | datetime (ISO UTC) | ecliptic positions of all bodies (sign, degree, retro) |
get_moon_phase | datetime (ISO UTC) | moon phase, illumination %, description |
get_current_sky | latitude, longitude | the sky right now (current transits) for a place |
get_aspects | datetime (ISO UTC) | grid of major and minor aspects between bodies |
Natal chart & relationships
| Tool | Input | Output |
|---|---|---|
get_natal_chart | birth + zodiac (tropical/sidereal), houseSystem (7 systems) | full chart: houses, aspects, ASC/MC, moon phase, Hermetic Lots |
get_transits | birth + optional datetime | transit→natal aspects, sorted by orb |
get_synastry | two births | inter-chart aspects + harmony/tension summary |
get_composite_chart | two births | midpoint composite chart |
get_secondary_progressions | birth + targetDate | progressed positions (“a day for a year”) |
get_solar_return | birth + year (+ optional place) | instant + chart of the solar return |
get_lunar_return | birth + optional after | instant + chart of the next lunar return |
Celestial events
| Tool | Input | Output |
|---|---|---|
get_ingresses | body, start, end | sign-change dates (retrograde-robust) |
get_retrograde_windows | body, start, end | retrograde/direct stations over the range |
get_eclipse_details | datetime, kind | magnitude, obscuration, Saros of a known eclipse |
get_next_eclipse | from, kind, optional backward | next/previous eclipse: maximum, type, contacts |
Astrocartography, numerology, authority
| Tool | Input | Output |
|---|---|---|
get_astrocartography | datetime (ISO UTC) | planetary MC/IC lines + parans (crossings) |
get_life_path | date (YYYY-MM-DD) | life-path number (numerology) |
get_engine_diagnostic | — | active engine, native addon load status, real precision |
validate_against_horizons | datetime, optional bodies | delta vs JPL Horizons (NASA) in arcseconds — network required |
Architecture
The MCP server is a thin facade over our ephemeris engine: the LLM calls, the engine computes. Depending on the environment, computation is routed to Swiss Ephemeris (production precision) or the in-house AstraCore engine.
Every answer comes from the engine described above — aligned with JPL Horizons to under one arcsecond. The model puts it into words; it never computes.
Connect it to your AI
Two ways to plug the server in. Local (recommended): nothing is sent anywhere, your birth data stays on your machine. Hosted: nothing to install, you point at a URL; the server then receives the birth data (we neither log nor retain it).
Option 1: local (npx)
Public and free for non-commercial use. No account, no key. Add this entry to your client's MCP configuration (Claude Desktop, Cursor, VS Code, Windsurf, Cline, Zed…):
{
"mcpServers": {
"llmastro": {
"command": "npx",
"args": ["-y", "@cosmosos/mcp-ephemeris"]
}
}
}From the command line:
# Claude Code
claude mcp add llmastro -- npx -y @cosmosos/mcp-ephemeris
# Codex CLI
codex mcp add llmastro -- npx -y @cosmosos/mcp-ephemerisOption 2: hosted (URL)
Nothing to install, maximum precision (Swiss Ephemeris, sub-arcsecond) server-side. Point this URL from any client that supports remote (HTTP) MCP servers: https://mcp.llmastro.com/mcp
{
"mcpServers": {
"llmastro": {
"url": "https://mcp.llmastro.com/mcp"
}
}
}From the command line:
# Claude Code
claude mcp add --transport http llmastro https://mcp.llmastro.com/mcp
# Codex CLI
codex mcp add llmastro --url https://mcp.llmastro.com/mcpOn Claude Desktop: Settings → Connectors → Add custom connector → paste the URL.
Restart your client, then ask: “What's the moon phase today?” The answer comes from genuinely computed positions. (Local: Node.js 20+ required.)
Compatible clients
Claude Code, Claude Desktop, Cursor, Codex CLI, VS Code (Copilot), Windsurf, Cline (and Roo Code / Kilo Code forks), Zed, Continue, Goose, LibreChat, Cherry Studio, ChatGPT, and any MCP-compatible agent.
Source code: github.com/kairosastro-sketch/mcp-ephemeris
License
Free for personal use (personal, research, education, non-profits), under the PolyForm Noncommercial 1.0.0 license. Commercial or professional use: a paid license is required — contact us to obtain one.