Sub-arcsecond astrology on NASA JPL DE440: natal, transits, Human Design, Vedic, BaZi.
OpenEphemeris MCP Server (com.openephemeris/open-ephemeris)
The OpenEphemeris MCP server provides sub-arcsecond ephemeris and astrology based on NASA JPL DE440, including natal charts, transits, and eclipses, along with Human Design. It exposes functionality through the Model Context Protocol and is published as @openephemeris/mcp-server.
๐ ๏ธ Key Features
Sub-arcsecond ephemeris
Astrology services: natal, transits, eclipses
Human Design support
Uses NASA JPL DE440 (Ephemeris)
๐ Use Cases
Generate natal information from DE440-based ephemeris
Compute transits and eclipse-related timing from DE440
Support Human Design workflows with ephemeris data
โก Developer Benefits
MCP server for integrating ephemeris/astrology into agent tooling
Package available on npm (@openephemeris/mcp-server)
Repository topics include MCP, ephemeris, and Human Design
โ ๏ธ Limitations
Scope described here centers on DE440-based ephemeris and related astrology/Human Design outputs
Model Context Protocol server for OpenEphemeris โ typed astrology tools powered by the NASA JPL DE440 ephemeris. Zero hallucination on planetary positions, dates, and degrees. Covers 1,100 years of astronomical data.
Click the "Install in Cursor" button above, then replace YOUR_API_KEY_HERE in Cursor MCP settings.
If you prefer manual setup, paste the mcpServers.openephemeris block from "Manual install" into ~/.cursor/mcp.json.
Claude Desktop (macOS/Windows)
Open the platform config file from the table above.
Add the same mcpServers.openephemeris block from "Manual install".
Restart Claude Desktop.
Windsurf
Open ~/.codeium/windsurf/mcp_config.json (or the legacy ~/.codeium/mcp_config.json path).
Add the mcpServers.openephemeris block from "Manual install".
Restart Windsurf.
Remote-only clients (Claude Web, ChatGPT, etc.)
The server is hosted at https://mcp.openephemeris.com/mcp with full Streamable HTTP support (MCP 2025-11-25 spec). Remote-only clients can connect directly โ no bridge/proxy required:
Claude Web: Add https://mcp.openephemeris.com/mcp as a custom connector URL โ leave OAuth Client ID and Secret blank. The server uses OAuth 2.1 + PKCE (Dynamic Client Registration), so Claude handles authentication via a browser popup automatically.
ChatGPT: Open Ephemeris is an approved app in the ChatGPT app directory. Open
the listing, click Install plugin, approve the sign-in (that also creates your
free OpenEphemeris account), then type @Open Ephemeris in any chat. Charts render inline,
exactly as they do in Claude. Prefer to wire it yourself? Settings โ Plugins โ Advanced โ
Developer mode โ + Create app accepts https://mcp.openephemeris.com/mcp with
Authentication on OAuth โ no client ID or secret to enter.
Via Smithery: Use the Smithery listing for managed connections with any client
Legacy SSE: retired in 3.20.0 โ use Streamable HTTP at /mcp
Auth and upgrade behavior in MCP clients
Missing/invalid credentials (401): tool call fails with a message that points users to sign up/sign in at https://openephemeris.com/login?signup=true&redirect=%2Fdashboard%3Ftab%3Daccount, then create/manage keys in https://openephemeris.com/dashboard?tab=account.
Tier-gated endpoint (403): tool call returns an upgrade-required message with https://openephemeris.com/pay and dashboard billing/key management link.
Out of credits (402): tool call returns a one-tap top-up link (Explorer's 150 free credits are one-time and do not reset; plan allowances renew each billing period) plus the dashboard usage link. Failed calls (any 4xx/5xx) are refunded.
Burst/rate limit (429): tool call returns retry guidance and links to dashboard usage monitoring.
What You Can Ask
code
"Calculate a natal chart for 1990-04-15 at 2:30 PM in Chicago."
"Find all Saturn transits to my natal Sun in the next 6 months."
"Get the current moon phase and void-of-course status."
"Find the next solar eclipse visible from Tokyo."
"Find the best time to sign a contract in March โ electional window."
"Generate a Human Design chart for my birth data."
"What is my Vedic (sidereal) chart?"
"Calculate my Chinese BaZi (Four Pillars) chart."
"Show me my Astrocartography power lines โ where is my Venus line on the map?"
"Find all ACG lines within 3ยฐ of Paris for my chart."
"Calculate a synastry chart between two people."
"Find the next Venus Star Point and my relationship to it."
"What are the active planetary stations in the next 3 months?"
"Calculate primary directions for the next 5 years."
"Find my Firdaria time lord period."
"What is the sidereal time and delta-T right now?"
Interactive Charts
Nine of the tools don't answer with JSON. They open a chart in the conversation โ a real one, drawn from the same calculation, that you can click around in.
This matters more than it sounds. A natal chart returned as JSON is a list of numbers you have to already understand to read. The same chart rendered as a wheel is something you can point at. Click a planet and you get that placement explained; click a house and you get what's in it. The chart stays on screen while you keep talking, and it doesn't cost another credit to keep looking at it.
These need a host that supports MCP Apps. Claude and ChatGPT both do, and they render
the same widget โ there is no separate ChatGPT build. MCP Apps (SEP-1865) was
co-authored by Anthropic and OpenAI and became the first official MCP extension in January
2026, so one ui:// resource serves both. In ChatGPT, install it from
the app directory; in Claude, add the connector (see Setup).
In a client without app support the same tools still work; you get the underlying data
instead of the picture, so nothing breaks, you just don't get the wheel.
Tool
What opens
What you can click
Credits
explore_natal_chart
Natal wheel โ planets, houses, aspects, angles
Planets, houses, aspect lines; recalculate with new settings
1
explore_bi_wheel
Two charts on one wheel: transits, synastry, progressions
Either wheel's planets, houses, and the aspects between them
2 (6 for solar/lunar return)
explore_human_design
Human Design bodygraph, with a mandala view toggle
Centers, gates, channels, planets, variables
4
explore_human_design_transit
Today's planets laid over a natal bodygraph
Transit-activated channels
5
explore_human_design_connection
Two bodygraphs combined, every shared channel classified
Connection channels by type
5
explore_vedic_chart
South Indian Rashi grid โ sidereal placements and Lagna
Each rashi, for its placements and nakshatras
3
explore_bazi_chart
Four Pillars (ๅๆฑๅฝ็) โ Year, Month, Day, Hour
Ask for these the way you'd ask a person: "show me my chart", "put today's transits over my Human Design", "what's the moon doing right now". The model picks the app.
Two things worth knowing. The chart wheel and bi-wheel accept a click on an aspect line, not just on the two planets it joins โ so "why does this line matter" is one click rather than a paragraph of setup. And the bodygraph's mandala toggle rearranges the whole chart into concentric rings without another API call, so switching views is free.
Typed tools are preferred for common workflows (natal, transits, moon phase, eclipse, synastry, relocation, electional, Human Design).
Generic tools: dev_list_allowed returns all currently allowlisted operations; dev_read_api invokes allowlisted GET (read) operations and dev_write_api invokes allowlisted POST/PUT/PATCH/DELETE (write/compute) operations, each by method + path. Read and write are kept as separate tools so a safe read surface never shares a tool with state-changing writes.
Security model: default-deny with explicit allowlist in config/dev-allowlist.json.
This server reports anonymous usage so we know which tools are worth maintaining and which are broken. Three events: session start, tool call, tool error.
What is sent: the tool name, how long it took, error status, which MCP client connected (e.g. Claude Desktop, Cursor) and its version, the server version, and a one-way SHA-256 prefix of your API key used as a stable anonymous id.
What is never sent: your API key or token, birth data, dates, names, coordinates, tool arguments, or tool results. No request or response bodies, ever.
To turn it off โ either works, checked before anything is sent:
bash
OPENEPHEMERIS_TELEMETRY=0
# or the cross-tool standard
DO_NOT_TRACK=1
Tool surface
By default the server advertises a focused core set of everyday tools rather than the entire catalog. Large tool lists cost context and make model tool-selection worse, so the default is tuned for real conversations: one interactive app per tradition, the primary data tool per domain, geocoding, and the allowlist-gated generic proxy.
Nothing is removed. The surface is a filter on tools/list only โ every tool stays registered and stays callable by name. If you know the tool you want, call it and it works, listed or not.
On the remote HTTP server, append ?profile=full to the connector URL (or send X-OE-Tool-Surface: full):
code
https://mcp.openephemeris.com/mcp?profile=full
Toolsets by tradition
If you work in one tradition, ask for it by name instead of taking the general-purpose default. You get that tradition in full โ including the long-tail tools the core set leaves out โ for a fraction of the context.
Human Design charts, transits, connection charts, penta, bodygraph
14
7,800
bazi
Four Pillars, Ten Gods, element balance, luck pillars, compatibility
13
7,200
electional
Timing windows, angle crossings, stations, moment analysis
10
4,600
moon
Phases, void-of-course, eclipses
9
4,100
venus
Star points, phases, elongations, stations
11
3,700
acg
Astrocartography lines and hits
7
3,700
vedic
Jyotish Rashi chart
7
3,400
โ
core (default)
36
19,100
โ
full
70
34,600
Every selection also includes geocoding (location_search, timezone_resolve), account_usage, and the allowlist-gated proxy โ so a birthplace is always resolvable and nothing is stranded.
Combine with commas; unknown names are ignored rather than rejected, so a typo degrades to a smaller surface instead of a dead connector. As with core/full, this only filters tools/list โ every tool remains callable by name.
Why it matters: tool definitions are re-sent to the model on every pass. astrology,moon advertises the same number of tools as the default but costs ~1,700 fewer tokens per message and covers more of the tradition.
The surface is fixed when the session initializes โ this server does not advertise tools.listChanged, so switching requires reconnecting. dev_list_allowed enumerates every operation reachable through the generic proxy regardless of surface.
Contributing & Support
Something wrong with a result?Open an issue โ include the tool, your inputs, and what you expected.
Want to contribute? See CONTRIBUTING.md. Integration examples and new skills are the most useful things you can add.
Found a security problem? Please report it privately โ see SECURITY.md.
npm install
npm run dev
npm run typecheck
npm test
npm run regen:dev-allowlist
npm run check:dev-allowlist
npm run sync:readme
npm run check:readme
npm run verify:release
Deploying the SSE Server to Fly.io
When you update the MCP server logic (handlers, bug fixes, hardening), you should deploy it so clients connecting via the remote https://mcp.openephemeris.com/mcp endpoint get the updates immediately.
Navigate to apps/api/mcp-server
Run fly deploy --remote-only
Note on NPM: Deploying to Fly.io instantly updates the web-accessible SSE tool. However, users installing your tool locally in Cursor/Desktop via npx @openephemeris/mcp-server will only receive the updates once a new version is published to NPM. If your changes are critical, you should bump the version in package.json and run npm publish (or your CI release pipeline) after deploying to Fly.
npm run verify:release is the release gate. It checks:
GET /calendar/astrology/cross-quarter, GET /calendar/astrology/lunar-standstill
catalogs
3
GET /catalogs/bodies, GET /catalogs/fixed-stars
chinese
9
POST /chinese/bazi, POST /chinese/bazi/annual-pillar
comparative
5
POST /comparative/composite, POST /comparative/composite/midpoint
eclipse
6
GET /eclipse/besselian-elements, GET /eclipse/lunar/global
electional
6
GET /electional/angle-crossings, GET /electional/aspect-search
ephemeris
38
GET /ephemeris/agro/calendar, GET /ephemeris/agro/daily
health
2
GET /health, GET /health/detailed
human-design
9
POST /human-design/chart, POST /human-design/composite
location
2
GET /location/autocomplete, GET /location/reverse
predictive
11
POST /predictive/primary-directions, POST /predictive/returns
root
1
GET /
tidal
2
GET /tidal/forcing, GET /tidal/forcing/deep-time
time
6
GET /time/delta-t, GET /time/equation-of-time
timezone
3
GET /timezone/coverage, POST /timezone/lookup
vedic
1
POST /vedic/chart
visualization
3
POST /visualization/bi-wheel, POST /visualization/bodygraph
Why OpenEphemeris for AI Agents?
Most LLMs (like Claude and ChatGPT) struggle heavily with astronomical calculations (trigonometry, Julian date conversions, and planetary lookups). OpenEphemeris serves as a secure, remote math engine.
By pairing LLMs with the OpenEphemeris MCP server, your agents can instantly access:
Zero-hallucination coordinates: Direct, sub-arcsecond NASA JPL DE440 calculations spanning 1,100 years of astronomical data.
LLM-optimized tokens (format=llm): We compress standard 25,000 token JSON chart responses into minimal text blocks, cutting your inference costs by 50โ73% depending on endpoint.
Ready-to-use astrology layers: Built-in support for Astrocartography geoJSON lines, Hermetic Lots, Fixed Stars, and complex Human Design matrix generation.
Install
Remote endpoint
Streamable HTTP
Hosted server - connect over the network, no local install.