Natalengine
FreeNot checkedBirth chart calculator for Western Astrology, Vedic (Jyotish), Human Design, and Gene Keys. Clean data output for apps and AI integrations.
About
Birth chart calculator for Western Astrology, Vedic (Jyotish), Human Design, and Gene Keys. Clean data output for apps and AI integrations.
README
Birth chart calculation engine for Western Astrology, Human Design, and Gene Keys.
Returns clean, structured data for apps and AI integrations. No interpretation, just the facts.
Install
npm install natalengine
Quick Start
import {
calculateAstrology,
calculateHumanDesign,
calculateGeneKeys
} from 'natalengine';
// Western Astrology
const astro = calculateAstrology('1990-06-15', 14.5, -5, 40.7128, -74.0060);
console.log(astro.sun.sign.name); // "Gemini"
console.log(astro.moon.sign.name); // "Pisces"
console.log(astro.rising.sign.name); // "Libra"
console.log(astro.planets.venus.degree); // "19°08'41\""
// Human Design
const hd = calculateHumanDesign('1990-06-15', 14.5, -5);
console.log(hd.type.name); // "Manifestor"
console.log(hd.authority.name); // "Emotional Authority"
console.log(hd.profile.numbers); // "2/4"
console.log(hd.channels); // [{ gates: [12, 22], name: "..." }]
// Gene Keys
const gk = calculateGeneKeys(hd);
console.log(gk.activationSequence.lifeWork.gift); // "Discrimination"
console.log(gk.activationSequence.lifeWork.shadow); // "Vanity"
console.log(gk.activationSequence.lifeWork.siddhi); // "Purity"
API
calculateAstrology(birthDate, birthHour, timezone, latitude?, longitude?)
Returns Western natal chart data.
| Parameter | Type | Description |
|---|---|---|
| birthDate | string | YYYY-MM-DD format |
| birthHour | number | Decimal hours (14.5 = 2:30 PM) |
| timezone | number | UTC offset (-5 for EST) |
| latitude | number | Optional. Required for accurate Rising sign |
| longitude | number | Optional. Required for accurate Rising sign |
Returns:
{
sun: { sign, degree, longitude },
moon: { sign, degree, longitude },
rising: { sign, degree, longitude, accurate },
planets: {
mercury: { sign, degree, longitude },
venus: { sign, degree, longitude },
mars: { sign, degree, longitude },
jupiter: { sign, degree, longitude },
saturn: { sign, degree, longitude },
uranus: { sign, degree, longitude },
neptune: { sign, degree, longitude },
pluto: { sign, degree, longitude }
},
nodes: {
north: { sign, degree, longitude },
south: { sign, degree, longitude }
},
midheaven: { sign, degree, longitude },
aspects: [
{ planet1, planet2, aspect, orb, applying }
],
balance: {
elements: { fire, earth, air, water },
modalities: { cardinal, fixed, mutable },
dominantElement,
dominantModality
}
}
calculateHumanDesign(birthDate, birthHour, timezone, options?)
Returns Human Design chart data. options.nodeType selects 'true' (default,
the dominant HD convention) or 'mean' lunar nodes.
Every activation includes the full substructure — gate, line, color,
tone, base, and the raw longitude — so apps can build Variable/PHS
features or re-derive anything.
Returns:
{
type: { name, strategy, authority, notSelf, signature },
authority: { name, description },
profile: { numbers, name, theme },
definition: "Single Definition" | "Split Definition" | "Triple Split" | "Quadruple Split",
incarnationCross: { name, gates, theme },
centers: {
defined: [{ name, theme, biological }],
undefined: [{ name, theme, biological }],
definedNames: ["Sacral", "Throat", ...],
undefinedNames: ["Head", "Ajna", ...]
},
gates: {
personality: { sun, earth, moon, northNode, southNode, mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto },
design: { sun, earth, moon, northNode, southNode, mercury, venus, mars, jupiter, saturn, uranus, neptune, pluto },
all: [1, 2, 3, ...]
},
channels: [{ gates, name, centers, circuit, subcircuit }],
circuitAnalysis: { individual, tribal, collective, integration, dominant },
variable: {
determination: { arrow, color, tone, name, description, cognition },
environment: { arrow, color, tone, name, description },
motivation: { arrow, color, tone, name, description },
perspective: { arrow, color, tone, name, description },
notation: "RR LR" // [Determination, Environment | Motivation, Perspective]
},
meta: { birthDate, birthHour, timezone, nodeType, ephemeris, designSolarArc },
positions: {
personality: { date, sun, earth, moon, ... }, // Raw planetary data at birth
design: { date, dateTime, sun, earth, moon, ... } // Raw data at exactly 88° solar arc before
}
}
calculateGeneKeys(humanDesignData)
Returns Gene Keys profile from Human Design data.
Returns:
{
activationSequence: {
lifeWork: { key, line, keyLine, shadow, gift, siddhi },
evolution: { key, line, keyLine, shadow, gift, siddhi },
radiance: { key, line, keyLine, shadow, gift, siddhi },
purpose: { key, line, keyLine, shadow, gift, siddhi }
},
venusSequence: {
attraction: { key, line, keyLine, shadow, gift, siddhi },
iq: { key, line, keyLine, shadow, gift, siddhi },
eq: { key, line, keyLine, shadow, gift, siddhi },
sq: { key, line, keyLine, shadow, gift, siddhi }
},
pearlSequence: {
vocation: { key, line, keyLine, shadow, gift, siddhi },
culture: { key, line, keyLine, shadow, gift, siddhi },
pearl: { key, line, keyLine, shadow, gift, siddhi }
},
core: { ... }, // Same as vocation (Design Mars) - Venus Sequence lens
brand: { ... }, // Same as lifeWork (Personality Sun) - Pearl Sequence lens
allKeys: [...], // All 11 Gene Keys in the profile
primeGifts: [...], // The 4 gifts from Activation Sequence
summary: "Life's Work: 64.3 (Imagination), ..."
}
Timezone & geocoding (accurate birth data)
The largest real-world error source in birth charts is timezone handling — historical DST, wartime time, half-hour zones. Never estimate offsets from longitude. NatalEngine ships the accurate path:
import { searchPlaces, resolveUtcOffset, formatUtcOffset } from 'natalengine';
const places = await searchPlaces('Denver'); // Open-Meteo geocoding, no key
// → [{ name, label, latitude, longitude, timezone: 'America/Denver', ... }]
const offset = resolveUtcOffset('1944-06-15', '12:00', 'Europe/London');
// → 2 (British Double Summer Time — full IANA history via the Intl API)
const hd = calculateHumanDesign('1944-06-15', 12, offset);
Human Design extras
import { calculateHDTransits, compareHumanDesign, analyzePenta } from 'natalengine';
const transits = calculateHDTransits(hd, '2026-06-04'); // transit overlay + channel completions
const connection = compareHumanDesign(hdA, hdB); // electromagnetic/dominance/compromise/companionship
const team = analyzePenta([hdA, hdB, hdC], names); // group/Penta analysis
MCP Server (AI Integration)
NatalEngine includes an MCP server for Claude and other AI assistants.
Usage with Claude Code
Add to your Claude Code settings (~/.claude/settings.json):
{
"mcpServers": {
"natalengine": {
"command": "npx",
"args": ["natalengine-mcp"]
}
}
}
Then ask Claude:
"Calculate my birth chart for June 15, 1990 at 2:30 PM in New York"
Available Tools
| Tool | Description |
|---|---|
calculate_natal_chart |
Complete profile (all 3 systems) |
calculate_astrology |
Western natal chart |
calculate_human_design |
Human Design chart |
calculate_gene_keys |
Gene Keys profile |
get_planetary_positions |
Raw planetary longitudes |
Accuracy
- Planetary positions: VSOP87 via astronomy-engine
- Accuracy: ±1 arcminute
- Ascendant: Calculated from local sidereal time
- Human Design: 88° solar arc for design calculation
What's Included
| System | Data |
|---|---|
| Astrology | Sun, Moon, Rising, all planets, nodes, midheaven, aspects, elements, modalities |
| Human Design | Type, Strategy, Authority, Profile, Definition, Centers, Gates (13 planets × 2 with line/color/tone/base), Channels with circuitry, Incarnation Cross (192 named), Variable (4 arrows / PHS), Transits, Connection charts, Penta |
| Gene Keys | Activation Sequence, Venus Sequence, Pearl Sequence with shadow/gift/siddhi |
What's NOT Included
- Long-form interpretations or readings (keynote-level descriptions are included)
- Progressed charts
- Solar/Saturn returns (planned)
License
MIT
Install Natalengine in Claude Desktop, Claude Code & Cursor
unyly install natalengineInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add natalengine -- npx -y natalengineFAQ
Is Natalengine MCP free?
Yes, Natalengine MCP is free — one-click install via Unyly at no cost.
Does Natalengine need an API key?
No, Natalengine runs without API keys or environment variables.
Is Natalengine hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Natalengine in Claude Desktop, Claude Code or Cursor?
Open Natalengine on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
LibreOffice Tools
Enables AI agents to read, write, and edit Office documents via LibreOffice with token-efficient design. Supports multiple formats including DOCX, XLSX, PPTX, a
by passerbyflutterdannote/figma-use
Full Figma control: create shapes, text, components, set styles, auto-layout, variables, export. 80+ tools.
by dannoteLogo.dev
Search and retrieve company logos by brand or domain. Customize size, format, and theme to match your design needs. Accelerate design, prototyping, and content
by NOVA-3951PIX4Dmatic
Enables GUI automation for controlling PIX4Dmatic on Windows through MCP. Supports launching, focusing, capturing screenshots, sending hotkeys, clicking UI elem
by jangjo123Compare Natalengine with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All design MCPs
