OpenEphemeris MCP Server

MCP serverMedia

Your AI can read the sky with sub-arcsecond precision, using NASA JPL's DE440 planetary data. Once added, it can cast natal charts, track transits, find eclipses, and build Human Design charts. Astrology answers come from exact astronomical calculation instead of rough estimates.

Use OpenEphemeris MCP Server in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add OpenEphemeris MCP Server and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use OpenEphemeris MCP Server

Details

Available today. Use it from your connected AI after setup.

Add it, then ask your AI for a natal chart, today's transits, or eclipse dates. Have a birth date, time, and place ready for the most accurate charts.

OpenEphemeris MCP ServerStart free

What your AI can do with it

  • Cast natal charts
  • Track planetary transits
  • Find eclipses
  • Generate Human Design charts
  • Pull precise planet positions for the dates you ask about
  • Answer astrology questions grounded in NASA JPL DE440 data

Install OpenEphemeris MCP Server

The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.

  • Claude Code

    claude mcp add --transport http --scope user openephemeris-mcp-server 'https://mcp.openephemeris.com/mcp'

    Run it once in your project, then open /mcp to approve any sign-in the server asks for.

  • Claude Desktop

    https://mcp.openephemeris.com/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=openephemeris-mcp-server&config=eyJ1cmwiOiJodHRwczovL21jcC5vcGVuZXBoZW1lcmlzLmNvbS9tY3AifQ==

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://mcp.openephemeris.com/mcp

    In Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.

  • Codex

    codex mcp add openephemeris-mcp-server --url 'https://mcp.openephemeris.com/mcp'

    Run it once, then sign in with codex mcp login openephemeris-mcp-server if the server asks for an account.

From the project's README

As published by openephemeris/openephemeris-mcp in README.md.

Use it in Claude: add https://mcp.openephemeris.com/mcp as a custom connector (leave the OAuth Client ID and Secret blank) or install the Open Ephemeris plugin from the Claude directory. Sign-in happens in the browser and creates a free account with 150 credits.

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.

Hosted endpoint: https://mcp.openephemeris.com/mcp (Streamable HTTP, MCP 2025-11-25 spec)

Quick Start

Install via Smithery (recommended)

The fastest way to connect any MCP-compatible client:

npx -y @smithery/cli install @open-ephemeris/openephemeris --client claude

Or browse the listing and copy connection snippets: smithery.ai/servers/open-ephemeris/openephemeris


Connect via AI SDK (Vercel AI SDK)

import Smithery from "@smithery/api"
import { createMCPClient } from "@ai-sdk/mcp"
import { generateText } from "ai"
import { anthropic } from "@ai-sdk/anthropic"
import { createConnection } from "@smithery/api/mcp"

const smithery = new Smithery()

const conn = await smithery.connections.create("{your-namespace}", {
  mcpUrl: "https://server.smithery.ai/open-ephemeris/openephemeris",
  headers: {
    apiKey: "your-openephemeris-api-key", // get one free at openephemeris.com/dashboard
  },
})

const { transport } = await createConnection({
  client: smithery,
  namespace: "{your-namespace}",
  connectionId: conn.connectionId,
})

const mcpClient = await createMCPClient({ transport })
const tools = await mcpClient.tools()

const { text } = await generateText({
  model: anthropic("claude-sonnet-4-20250514"),
  tools,
  prompt: "Calculate a natal chart for someone born April 15, 1990 at 2:30 PM in Chicago.",
})

await mcpClient.close()

Connect via MCP SDK (TypeScript)

import Smithery from "@smithery/api"
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { createConnection } from "@smithery/api/mcp"

const smithery = new Smithery()

const conn = await smithery.connections.create("{your-namespace}", {
  mcpUrl: "https://server.smithery.ai/open-ephemeris/openephemeris",
  headers: {
    apiKey: "your-openephemeris-api-key",
  },
})

const { transport } = await createConnection({
  client: smithery,
  namespace: "{your-namespace}",
  connectionId: conn.connectionId,
})

const mcpClient = new Client(
  { name: "my-app", version: "1.0.0" },
  { capabilities: {} }
)
await mcpClient.connect(transport)

const { tools } = await mcpClient.listTools()
const result = await mcpClient.callTool({
  name: "ephemeris_natal_chart",
  // A datetime that states a clock time must state its zone: either pass
  // `timezone` alongside the local time, or put a Z/±HH:MM offset on the value.
  arguments: {
    datetime: "1990-04-15T14:30:00",
    timezone: "America/Chicago",
    latitude: 41.8781,
    longitude: -87.6298,
    format: "llm",
  },
})

Connect directly (Streamable HTTP, no Smithery)

import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { Client } from "@modelcontextprotocol/sdk/client/index.js"

const transport = new StreamableHTTPClientTransport(
  new URL("https://mcp.openephemeris.com/mcp"),
  { requestInit: { headers: { "X-API-Key": "your-openephemeris-api-key" } } }
)

const client = new Client({ name: "my-app", version: "1.0.0" }, { capabilities: {} })
await client.connect(transport)

One-click install (Cursor)

Replace YOUR_API_KEY_HERE in Cursor MCP settings with your API key from https://openephemeris.com/dashboard.

Cursor deeplink payload:

{
  "command": "npx",
  "args": [
    "-y",
    "@openephemeris/mcp-server"
  ],
  "env": {
    "OPENEPHEMERIS_PROFILE": "dev",
    "OPENEPHEMERIS_BACKEND_URL": "https://api.openephemeris.com",
    "OPENEPHEMERIS_API_KEY": "YOUR_API_KEY_HERE"
  }
}

Manual install (stdio MCP clients)

{
  "mcpServers": {
    "openephemeris": {
      "command": "npx",
      "args": ["-y", "@openephemeris/mcp-server"],
      "env": {
        "OPENEPHEMERIS_PROFILE": "dev",
        "OPENEPHEMERIS_BACKEND_URL": "https://api.openephemeris.com",
        "OPENEPHEMERIS_API_KEY": "YOUR_API_KEY_HERE"
      }
    }
  }
}

Platform guide

Detailed setup walkthroughs for each platform are in SETUP.md.

ClientInstall modeConfig location
SmitheryOne-clicksmithery.ai
CursorOne-click deeplink or manual~/.cursor/mcp.json
Claude Desktop (macOS)Manual~/Library/Application Support/Claude/claude_desktop_config.json
Claude Desktop (Windows)Manual%APPDATA%\Claude\claude_desktop_config.json
WindsurfManual~/.codeium/windsurf/mcp_config.json (or legacy ~/.codeium/mcp_config.json)
ChatGPTOne-clickOpen Ephemeris in the ChatGPT app directory
Claude Web / remote clientsHosted URLhttps://mcp.openephemeris.com/mcp

Client install walkthroughs

  1. Cursor
    • 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.
  2. 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.
  3. 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

"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.md).

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.

ToolWhat opensWhat you can clickCredits
explore_natal_chartNatal wheel — planets, houses, aspects, anglesPlanets, houses, aspect lines; recalculate with new settings1
explore_bi_wheelTwo charts on one wheel: transits, synastry, progressionsEither wheel's planets, houses, and the aspects between them2 (6 for solar/lunar return)
explore_human_designHuman Design bodygraph, with a mandala view toggleCenters, gates, channels, planets, variables4
explore_human_design_transitToday's planets laid over a natal bodygraphTransit-activated channels5
explore_human_design_connectionTwo bodygraphs combined, every shared channel classifiedConnection channels by type5
explore_vedic_chartSouth Indian Rashi grid — sidereal placements and LagnaEach rashi, for its placements and nakshatras3
explore_bazi_chartFour Pillars (四柱命盘) — Year, Month, Day, HourEach pillar3
explore_transit_timelineUpcoming transit hits in date orderIndividual hits6 for up to 1 year (priced by span)
explore_moon_phaseMoon dial — illumination, phase, sign, void-of-courseRecalculate for another moment3

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.

Tools at a Glance

CategoryToolTier
Natal chartephemeris_natal_chartExplorer
Transit forecastephemeris_transitsExplorer
Transit chart snapshotephemeris_natal_transitsExplorer
Moon phase / VOCephemeris_moon_phaseExplorer
Eclipse next visibleephemeris_next_eclipseExplorer
Electional windowephemeris_electionalPro
Moment analysiselectional_moment_analysisExplorer
Station trackerelectional_station_trackerExplorer
Aspect searchelectional_aspect_searchPro
Human Design charthuman_design_chartExplorer
HD compositehuman_design_compositeExplorer
HD transit overlayexplore_human_design_transitExplorer
HD connection (synastry)explore_human_design_connectionExplorer
HD pentahuman_design_pentaExplorer
HD return / oppositionhd_planetary_return, hd_oppositionExplorer
Vedic chartvedic_chartExplorer
BaZi (Chinese)chinese_baziExplorer
Synastryephemeris_synastryExplorer
Composite chartephemeris_compositeExplorer
Relocation chartephemeris_relocationExplorer
Progressed chartephemeris_progressed_chartExplorer
Solar returnephemeris_solar_returnExplorer
Lunar returnephemeris_lunar_returnExplorer
Planetary returnephemeris_planetary_returnExplorer
Astrocartography linesacg_power_linesPro
ACG hits at locationacg_hitsPro
Venus Star Pointsvenus_star_points + 4 moreExplorer
Chart wheel imageephemeris_chart_wheelExplorer
Bi-wheel imageephemeris_bi_wheelExplorer
Dignities / Midpoints / Fixed starsephemeris_dignities, ephemeris_midpoints, ephemeris_fixed_starsExplorer

Tooling Model

  • 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.
  • Deny prefixes block sensitive route families (/auth, /billing, /admin, etc.).

dev_read_api / dev_write_api input

ParameterTypeRequiredDescription
methoddev_read_api: GET · dev_write_api: POST|PUT|PATCH|DELETENoHTTP method (defaults to the tool's natural method)
pathstringYesAbsolute API path, e.g. /ephemeris/natal-chart
queryobjectNoQuery parameters
bodyobjectNoJSON body for non-GET requests
presetfull|simpleNoConvenience mapping to query.preset
formatjson|llm|llm_v2NoConvenience mapping to query.format (llm_v2 normalizes to llm)
output_modefull|simple|llm|llm_v2NoLegacy compatibility field

Environment Variables

VariableRequiredDescription
OPENEPHEMERIS_API_KEYYes (unless service key/JWT used)API key for OpenEphemeris
ASTROMCP_API_KEYNoLegacy alias for OPENEPHEMERIS_API_KEY (checked as fallback)
OPENEPHEMERIS_BACKEND_URLNoDefaults to https://api.openephemeris.com
OPENEPHEMERIS_PROFILENodev by default
OPENEPHEMERIS_TOOLSNocore (default) advertises a focused everyday tool set; full advertises every tool. See Tool surface
OPENEPHEMERIS_TELEMETRYNoSet to 0/false/off to disable anonymous usage reporting. DO_NOT_TRACK=1 also works. See Telemetry
OPENEPHEMERIS_JWTNoBearer token auth
OPENEPHEMERIS_DEV_ALLOWLIST_PATHNoOverride allowlist file path
MCP_USER_IDNoPer-instance user identifier

Legacy aliases (ASTROMCP_*, MERIDIAN_*) remain supported.

Telemetry

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 stable id for the session: a one-way SHA-256 prefix of your API key, or your account ID when you sign in with OAuth.

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:

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.

To advertise the full catalog:

OPENEPHEMERIS_TOOLS=full npx -y @openephemeris/mcp-server

On the remote HTTP server, append ?profile=full to the connector URL (or send X-OE-Tool-Surface: full):

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.

OPENEPHEMERIS_TOOLS=hd npx -y @openephemeris/mcp-server        # Human Design
OPENEPHEMERIS_TOOLS=astrology,moon npx -y @openephemeris/mcp-server
https://mcp.openephemeris.com/mcp?profile=hd,bazi
ToolsetWhat it coversToolsApprox. tokens
astrologyNatal, transits, synastry, progressions, returns, relocation, dignities, midpoints, lots, fixed stars, composites3215,800
hdHuman Design charts, transits, connection charts, penta, bodygraph147,800
baziFour Pillars, Ten Gods, element balance, luck pillars, compatibility137,200
electionalTiming windows, angle crossings, stations, moment analysis104,600
moonPhases, void-of-course, eclipses94,100
venusStar points, phases, elongations, stations113,700
acgAstrocartography lines and hits73,700
vedicJyotish Rashi chart73,400
—core (default)3619,100
—full7034,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.
  • Tools timing out? Check status.openephemeris.com first.

If this saved you from an LLM confidently inventing a Saturn position, a ⭐ helps other people find it.

Legal

This package is licensed under the MIT License. However, use of this package to access the OpenEphemeris API constitutes use of the Service and is governed by the OpenEphemeris Terms of Service. By using this package, you agree to those terms. See also the Privacy Policy and Acceptable Use Policy.

Development

The server source is maintained in a private monorepo; this repository holds the public docs, plugin, skills and examples. Bug reports and contributions are welcome — see CONTRIBUTING.md.

Architecture

┌─────────────────────────────────────────────────────────┐
│                    MCP Clients                          │
│  Smithery Gateway · Claude Web · ChatGPT · Remote apps  │
└──────────────────┬──────────────────────────────────────┘
                   │ Streamable HTTP (MCP 2025-11-25)
                   │ https://mcp.openephemeris.com/mcp
                   │
┌─────────────────────────────────────────────────────────┐
│          Cursor · Claude Desktop · Windsurf             │
└──────────────────┬──────────────────────────────────────┘
                   │ stdio JSON-RPC
                   │ npx @openephemeris/mcp-server
                   │
              ┌────▼────────────────────┐
              │  openephemeris-mcp      │
              │  Node.js MCP Server     │
              │  typed tools            │
              │  auth: Key > JWT        │
              └────────────┬────────────┘
                           │ HTTPS
                           ▼
              ┌────────────────────────┐
              │  OpenEphemeris API     │
              │  api.openephemeris.com │
              │  NASA JPL DE440        │
              │  1,100 years of data   │
              └────────────────────────┘

Shortened here. Read the whole README on GitHub.

Signals

GitHub stars
4
Forks
2
Last commit
Sep 2026
Weekly_downloads
998 weekly_downloads
Advanced
Delivery
open-ephemeris MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
Item type
mcp-server
Key
com-openephemeris-open-ephemeris
Source
github.com/openephemeris/openephemeris-mcp
Hosted endpoint
https://mcp.openephemeris.com/mcp