astrolog-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@astrolog-mcpWhat's my natal chart for June 15 1990, 2:30 PM in Paris?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🔭 astrolog-mcp
Exact astrology chart data for any AI assistant. Calculated by Astrolog and the Swiss Ephemeris, served over MCP.
Ask your assistant about a birth chart and get real positions back, not made-up ones.
"What are my Sun, Moon and rising for 15 June 1990, 14:30, born in Paris, France?" →
Sun 24°09′ Gemini, Moon 15°38′ Pisces, Ascendant 2°28′ Libra— example output (plus houses, aspects, midpoints…)
Why
Accurate. Real ephemeris maths, not an LLM's guess. Chiron, Ceres and the dwarf planets included.
Works anywhere. Claude Desktop, Claude Code, Cursor, or any MCP client, over stdio or HTTP.
Fast. A typical warm call takes about 25 to 65 ms at the median on loopback (see the latency table), quick enough for voice assistants.
Offline places. Type a city name. The installer downloads the GeoNames tables once; no live geocoding service or API keys.
Private. No accounts, no logging of birth data, no birth data is kept after a call.
Facts, not fortune-telling. It returns numbers. Your assistant does the interpreting.
Related MCP server: astro-mcp
🚀 Quick start
# needs: Node.js 22.2+, make, tar, a C/C++ compiler (Linux/macOS, or Windows via WSL2)
git clone https://github.com/0xctx/astrolog-mcp.git && cd astrolog-mcp
npm ci && npm run install:astrolog && npm run buildThen connect it to your assistant: docs/clients.md has copy-paste configs for Claude Desktop, Claude Code and others. Prefer containers? docker compose up --build.
Tools
Tool | You get |
| A natal chart: bodies, houses, angles, aspects |
| The sky for a date (or now) against a natal chart |
| A composite or Davison chart for two people |
| A harmonic chart's midpoint structures |
| One day's ranked aspect hits, sign and house changes, retrograde changes and the Moon, with exact times |
Seven house systems, harmonics from 1 to 10000 (the daily reading caps its own by the day's length), place names or coordinates. See the tool reference.
📚 Docs
Claude Desktop, Claude Code, Cursor, HTTP | |
Every input, output and error | |
Installer options, requirements, troubleshooting | |
Environment variables | |
Docker, OAuth, limits, proxies, latency | |
Layout, tests, how results are verified | |
What you must do when you run or share it |
🤝 Contributing
Bug reports, ideas and pull requests are welcome. Start with CONTRIBUTING.md.
⭐ Like it?
A star helps other people find it.
📜 Licence
AGPL-3.0-only. It is built on Astrolog (GPL), the Swiss Ephemeris (AGPL or Professional licence) and place data from GeoNames (CC BY 4.0, credited to GeoNames). Details and notices: docs/licensing.md and NOTICE.
Available Tools
5 toolsget_chart_dataNatal chart dataARead-onlyIdempotent
Call this when someone asks to calculate a natal chart (birth chart) for a birth date, time and place: where the Sun, Moon, planets, houses and angles fall, and their aspects. Why: the numbers come from the configured engine with fixed settings, so the same input always gives the same numbers. With ENGINE=stub they are placeholders, and the text starts with a PLACEHOLDER line. Returns: a headline of the Sun, Moon and Ascendant positions; each requested body with sign, degree, minute, retrograde flag and house; the twelve house cusps; the four angles (ASC, MC, DSC, IC); the aspects, which are by default the 8 tightest of the five major aspects between bodies; the total count and a truncated flag; and the house system, the harmonic, the version of the engine that made the numbers, UT moment and place. Aspects: "aspects" chooses the set. "major" (default) reads the five major aspects between bodies, and nothing else; its output is unchanged. "all" reads the 17 vibrational aspects, such as semisquare, quincunx, quintile, septile and novile, between bodies and the angles ASC and MC, with each orb 16 degrees divided by the aspect's harmonic, and the five major ones at the wider of that and their major orb (trine 6, square 6, sextile 4), so the "all" set holds every major aspect (with aspect_limit 0, every one is listed). Only "all" reads the angles as targets and adds a strength to each item and set to the list. "aspect_limit" is how many to list, 8 by default; 0 lists every aspect. Harmonic H, from 1 to 10000 and 1 when left out, multiplies every longitude by H, and the houses and angles shown are the harmonic multiples of the natal ones, not recalculated cusps. Input ayanamsa sets the zodiac: tropical by default, or lahiri, fagan_bradley, raman or krishnamurti for sidereal longitudes; a sidereal result names the ayanamsa in meta. Gives positions and facts only, with no interpretation. Pass either place, or latitude, longitude and timezone.
| Name | Required | Description | Default |
|---|---|---|---|
| place | No | Birth place to look up, as a name like 'Austin, TX', or one of these shorthands, which stand alone with no region or country: 'NYC', 'New York', 'LA', 'L.A.', 'SF', 'San Fran', 'DC', 'Philly', 'Vegas', 'Peking' or 'Saigon'. Give this or latitude, longitude and timezone, not both. Anything else must be a place name in the GeoNames table, or latitude, longitude and time zone given directly. | |
| bodies | No | Object codes to return, such as Sun and Moo. Codes: Sun, Moo (Moon), Mer (Mercury), Ven (Venus), Mar (Mars), Jup (Jupiter), Sat (Saturn), Ura (Uranus), Nep (Neptune), Plu (Pluto), Chi (Chiron), Nor (Mean North Node, North Node), Cer (Ceres), Pal (Pallas), Jun (Juno), Ves (Vesta), Eri (Eris), Hau (Haumea), Mak (Makemake), Sed (Sedna). Leave out for all of them. | |
| aspects | No | Which aspects to list. "major" (default) lists the five major aspects between the bodies. "all" lists the 17 vibrational aspects, such as semisquare, quincunx, quintile, septile and novile, between the bodies and the angles ASC and MC. Each orb is 16 degrees divided by the harmonic, and the five major aspects take the wider of that and their major orb (trine 6, square 6, sextile 4), so the "all" set holds every "major" aspect. For example, quintile has an orb of 3.2 and semisquare 2. The aspect names results use, with other names people use and the angle (no input takes an aspect name): "major" has conjunction (conj, 0°), opposition (opp, 180°), trine (tri, 120°), square (sqr, quartile, 90°), sextile (sex, 60°); "all" adds quintile (qtl, 72°), biquintile (bi-quintile, 144°), septile (sep, 51°26′), biseptile (bi-septile, 102°51′), triseptile (tri-septile, 154°17′), semisquare (semi-square, octile, 45°), sesquiquadrate (sesquisquare, sesqui-square, trioctile, 135°), novile (nonile, 40°), binovile (bi-novile, 80°), quadnovile (quadri-novile, 160°), semisextile (semi-sextile, 30°), quincunx (inconjunct, 150°). | major |
| ayanamsa | No | Zodiac for the positions: tropical, lahiri, fagan_bradley, raman, krishnamurti. Leave out for tropical. A sidereal value such as lahiri gives sidereal longitudes, with the ayanamsa subtracted from the tropical ones. Pass the value even when a person uses another name for it: tropical is also called Western or sayana; lahiri is also called Lahiri, Chitra Paksha or Indian national ayanamsa; fagan_bradley is also called Fagan-Bradley, Fagan/Bradley or Western sidereal; raman is also called Raman or B. V. Raman; krishnamurti is also called Krishnamurti, KP or K.P.. | tropical |
| harmonic | No | Harmonic H, a whole number from 1 to 10000. Leave out for 1, the natal chart. Above 1 each longitude is multiplied by H, so the bodies, aspects, houses and angles are harmonic positions; the houses and angles are the harmonic multiples of the natal ones, not recalculated cusps. | |
| latitude | No | Birth latitude in signed decimal degrees, north positive, for example 30.2672. Give with longitude and timezone instead of place. | |
| timezone | No | IANA time zone name for the birth time, such as America/Chicago, America/New_York, America/Los_Angeles, or Europe/London. Give with latitude and longitude instead of place. | |
| longitude | No | Birth longitude in signed decimal degrees, east positive, for example -97.7431. Give with latitude and timezone instead of place. | |
| birth_date | Yes | Birth date in the local calendar of the birth place, as YYYY-MM-DD, for example 1990-06-15. | |
| birth_time | Yes | Birth clock time in the local time of the birth place, 24-hour HH:MM, for example 19:30. | |
| aspect_limit | No | How many aspects to list, tightest orb first for major, and by strength for all. Leave out for 8. 0 lists every aspect. The result always gives the total and whether the list was cut. | |
| house_system | No | House system that sets the house cusps: one of placidus, koch, equal, campanus, regiomontanus, porphyry, whole_sign. Leave out for placidus. Pass the value even when a person uses another name for it: placidus is also called Placidus or Plac; koch is also called Koch, birthplace houses or GOH; equal is also called Equal house or equal from the Ascendant; campanus is also called Campanus or Camp; regiomontanus is also called Regiomontanus or Regio; porphyry is also called Porphyry or Porph; whole_sign is also called Whole Sign, whole-sign houses, sign houses or WSH. | placidus |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Settings and provenance behind the numbers. |
| angles | Yes | The four angles: ASC, MC, DSC and IC. |
| bodies | Yes | The requested bodies in object-code order. |
| houses | Yes | The twelve house cusps, house 1 to 12. |
| aspects | Yes | Aspects between bodies. Only when aspects is all, also aspects between bodies and the angles ASC and MC, each item with a strength, and set says all. The total and whether the list was cut are always given. |
| missing | Yes | Requested object codes the engine did not compute. Empty when all were computed. |
| headline | Yes | The Sun, Moon and Ascendant positions as plain text. Only the bodies requested appear. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only the safety profile (readOnly, idempotent, closed-world), yet the description adds real behavioral context: deterministic output from a fixed configured engine, the ENGINE=stub placeholder caveat, the "positions and facts only, no interpretation" contract, and the fact that house/angle values under a harmonic are multiples rather than recalculated cusps. These are non-obvious traits an agent could not infer from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The trigger condition and the deterministic/stub caveats are correctly front-loaded and earn their place. However, the long "Aspects" and "Harmonic H" passages duplicate the schema's own parameter descriptions almost verbatim, bloating a definition that already has a 100%-covered schema sitting beside it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter astronomy tool with an output schema present, the description supplies enough semantic framing (determinism, stub behavior, interpretation-free output, harmonic caveat) to call it correctly. It over-delivers on return-value description that the output schema already owns, but nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already spells out bodies codes, aspect sets, ayanamsa aliases and house-system aliases in detail, so the description's aspects/harmonic/ayanamsa paragraphs largely restate structured content. It adds marginal framing ("same input always gives the same numbers", "pass either place or lat/long/timezone") but no parameter detail the schema lacks — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a precise verb and resource — calculate a natal (birth) chart for a date, time and place — and enumerates what it covers (Sun, Moon, planets, houses, angles, aspects). This is unambiguously distinct from the transit/composite/daily-transit siblings without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call this when someone asks to calculate a natal chart" is an explicit, actionable trigger condition, and the closing line gives the input-shape rule (place OR lat/long/timezone). It stops short of naming when to prefer a sibling tool such as get_transit_data or get_composite_data, so no exclusions or alternatives appear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_composite_dataComposite of two chartsARead-onlyIdempotent
Call this when someone asks how two people's charts combine, as one merged composite chart or as a Davison midpoint chart. Why: both charts come from the configured engine with fixed settings, so the same two people always give the same numbers. With ENGINE=stub they are placeholders, and the text starts with a PLACEHOLDER line. Returns: the composite's bodies with sign, degree, minute, retrograde flag and house; the twelve house cusps; the four angles (ASC, MC, DSC, IC); the aspects, which are by default the 8 tightest of the five major aspects between its bodies, with the total count and a truncated flag; and the kind, the two birth moments in UT, the Davison midpoint moment when the kind is davison, the house system and the engine's version. Aspects: "aspects" chooses the set. "major" (default) reads the five major aspects between the bodies, and nothing else; its output is unchanged. "all" reads the 17 vibrational aspects, such as semisquare, quincunx, quintile, septile and novile, between the bodies and the angles ASC and MC, with each orb 16 degrees divided by the aspect's harmonic, and the five major ones at the wider of that and their major orb (trine 6, square 6, sextile 4), so the "all" set holds every major aspect (with aspect_limit 0, every one is listed). Only "all" reads the angles as targets and adds a strength to each item and set to the list. "aspect_limit" is how many to list, 8 by default; 0 lists every aspect. A composite has no moment of its own: it uses the two birth moments and places. Input ayanamsa sets the zodiac of the composite: tropical by default, or lahiri, fagan_bradley, raman or krishnamurti for sidereal longitudes; a sidereal result names the ayanamsa in meta. Gives positions and facts only, with no interpretation. Give each person as place, or as latitude, longitude and timezone.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | "composite" merges the two charts into one chart. "davison" casts one chart for the midpoint of the two moments, in UT. | |
| aspects | No | Which aspects to list. "major" (default) lists the five major aspects between the bodies. "all" lists the 17 vibrational aspects, such as semisquare, quincunx, quintile, septile and novile, between the bodies and the angles ASC and MC. Each orb is 16 degrees divided by the harmonic, and the five major aspects take the wider of that and their major orb (trine 6, square 6, sextile 4), so the "all" set holds every "major" aspect. For example, quintile has an orb of 3.2 and semisquare 2. The aspect names results use, with other names people use and the angle (no input takes an aspect name): "major" has conjunction (conj, 0°), opposition (opp, 180°), trine (tri, 120°), square (sqr, quartile, 90°), sextile (sex, 60°); "all" adds quintile (qtl, 72°), biquintile (bi-quintile, 144°), septile (sep, 51°26′), biseptile (bi-septile, 102°51′), triseptile (tri-septile, 154°17′), semisquare (semi-square, octile, 45°), sesquiquadrate (sesquisquare, sesqui-square, trioctile, 135°), novile (nonile, 40°), binovile (bi-novile, 80°), quadnovile (quadri-novile, 160°), semisextile (semi-sextile, 30°), quincunx (inconjunct, 150°). | major |
| ayanamsa | No | Zodiac for the positions: tropical, lahiri, fagan_bradley, raman, krishnamurti. Leave out for tropical. A sidereal value such as lahiri gives sidereal longitudes, with the ayanamsa subtracted from the tropical ones. Pass the value even when a person uses another name for it: tropical is also called Western or sayana; lahiri is also called Lahiri, Chitra Paksha or Indian national ayanamsa; fagan_bradley is also called Fagan-Bradley, Fagan/Bradley or Western sidereal; raman is also called Raman or B. V. Raman; krishnamurti is also called Krishnamurti, KP or K.P.. | tropical |
| person_a | Yes | The first person: birth date, time and place, as a natal chart takes them. | |
| person_b | Yes | The second person: birth date, time and place, as a natal chart takes them. | |
| aspect_limit | No | How many aspects to list, tightest orb first for major, and by strength for all. Leave out for 8. 0 lists every aspect. The result always gives the total and whether the list was cut. | |
| house_system | No | House system that sets the house cusps: one of placidus, koch, equal, campanus, regiomontanus, porphyry, whole_sign. Leave out for placidus. Pass the value even when a person uses another name for it: placidus is also called Placidus or Plac; koch is also called Koch, birthplace houses or GOH; equal is also called Equal house or equal from the Ascendant; campanus is also called Campanus or Camp; regiomontanus is also called Regiomontanus or Regio; porphyry is also called Porphyry or Porph; whole_sign is also called Whole Sign, whole-sign houses, sign houses or WSH. | placidus |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | The kind, the input moments, the house systems and the provenance behind the numbers. |
| angles | Yes | The four angles of the composite: ASC, MC, DSC and IC. |
| bodies | Yes | The composite's bodies in object-code order. |
| houses | Yes | The twelve house cusps of the composite, house 1 to 12. |
| aspects | Yes | Aspects between the composite's bodies. Only when aspects is all, also aspects between them and the angles ASC and MC, each item with a strength, and set says all. The total and whether the list was cut are always given. |
| missing | Yes | Object codes the engine did not compute. Empty when all were computed. |
| headline | Yes | The Sun, Moon and Ascendant positions of the composite as plain text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/closed-world, so the bar is low, yet the description adds real behavioral context: the engine uses fixed settings so identical inputs always yield identical numbers, and with ENGINE=stub results are placeholders marked with a leading PLACEHOLDER line. It also flags that a composite has no moment of its own and that output is positions and facts with no interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The trigger and the "why" about engine determinism are correctly front-loaded, but the single dense block then re-derives large parts of the schema (full aspect-name lists, orb arithmetic, ayanamsa aliases) at length. Several sentences do not earn their place because they duplicate structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with nested person objects and four enums, the description supplies enough to invoke it correctly and warns about the stub/placeholder case. An output schema exists, so its return-value prose is redundant rather than necessary, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema descriptions are themselves extremely detailed, so the baseline is 3. Much of the description's parameter prose (ayanamsa values and aliases, aspect_limit default, the harmonic orb rule, the "all" set containing all "major" aspects) repeats what the schema already states verbatim, adding little beyond structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource (combine two people's charts) and enumerates the two supported modes, a merged composite and a Davison midpoint chart, which is exactly the discriminating fact versus the single-chart siblings. An agent can tell this apart from get_chart_data or get_harmonic_midpoints without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with an explicit trigger: "Call this when someone asks how two people's charts combine." That is a clear usage condition. It never states when NOT to use it or names a sibling as the alternative (e.g. for a single natal chart), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_transitsDaily transits for a birth chartARead-onlyIdempotent
Call this when someone asks what one whole local day holds for a birth chart, such as today's transits for a person: the transits and midpoint contacts ranked highest by score on one local day, when each goes exact, which transiting objects change sign or natal house, which change retrograde direction, and what the Moon does that day. Why: the natal chart comes from the configured engine, and the sky is read at local midnight, at the middle of the day and at the next midnight, as three engine reads in parallel with the same zodiac. Aspects, midpoints, exact times and the ranking are arithmetic on those positions, so the same input always gives the same numbers. With ENGINE=stub they are placeholders. Returns: a headline, the day's bounds and length, and the aspect hits across the pairings T to N, T to Nm, Tm to N and Tm to Nm, ranked by score, each with its orb, score, applying or separating, and its exact time, to the minute, or null; the sign and natal house changes with their times; the retrograde changes with their times; and the Moon's sign changes and its aspects that day, including a transiting midpoint that holds the Moon. Each list is up to limit (default 10, at most 50) with its total and a truncated flag. It also gives the codes the engine did not compute, the house system, the natal moment, the place and the provenance. Inputs: birth_date, birth_time and place, or latitude, longitude and timezone; date, the local day; day_timezone, the day's IANA zone, which defaults to the natal timezone; house_system; ayanamsa (tropical by default, or lahiri, fagan_bradley, raman or krishnamurti for sidereal longitudes), applied to the natal chart and every sky sample; aspects, "major" (default) or "all"; harmonic, from 1 up to 432 divided by the day's hours, rounded down; limit; and min_strength, which keeps only hits whose score, to two places, is at least that. The score is orb tightness times weight, divided by 1.5 (weight 1 plus 0.25 for an outer transiting body plus 0.25 for a key natal point). Tightness is 1 at exact and 0 at the edge of the orb. Gives positions and facts only, with no interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Local calendar day to read, as YYYY-MM-DD, for example 2026-10-14. The day runs from its local midnight to the next one. | |
| limit | No | How many items to list in each of hits, ingresses, stations, Moon sign changes and Moon aspects, from 1 to 50. Leave out for 10. Each list states its total and whether it was cut. | |
| place | No | Birth place to look up, as a name like 'Austin, TX', or one of these shorthands, which stand alone with no region or country: 'NYC', 'New York', 'LA', 'L.A.', 'SF', 'San Fran', 'DC', 'Philly', 'Vegas', 'Peking' or 'Saigon'. Give this or latitude, longitude and timezone, not both. Anything else must be a place name in the GeoNames table, or latitude, longitude and time zone given directly. | |
| aspects | No | Which aspects to rank. "major" (default) ranks the five major aspects: conjunction, sextile, square, trine and opposition, with the midpoint pairings built on them. "all" ranks the 17 vibrational aspects, such as semisquare, quintile, septile and novile, as well. A pair of points takes the lesser of 16 degrees divided by the aspect's harmonic and 2 degrees (1 degree above harmonic 4). A pair with a midpoint takes the midpoint orb: 1.5 degrees at harmonics 1 and 2, and 3 divided by the harmonic above. The aspect names results use, with other names people use and the angle (no input takes an aspect name): "major" has conjunction (conj, 0°), opposition (opp, 180°), trine (tri, 120°), square (sqr, quartile, 90°), sextile (sex, 60°); "all" adds quintile (qtl, 72°), biquintile (bi-quintile, 144°), septile (sep, 51°26′), biseptile (bi-septile, 102°51′), triseptile (tri-septile, 154°17′), semisquare (semi-square, octile, 45°), sesquiquadrate (sesquisquare, sesqui-square, trioctile, 135°), novile (nonile, 40°), binovile (bi-novile, 80°), quadnovile (quadri-novile, 160°), semisextile (semi-sextile, 30°), quincunx (inconjunct, 150°). | major |
| ayanamsa | No | Zodiac for the positions: tropical, lahiri, fagan_bradley, raman, krishnamurti. Leave out for tropical. A sidereal value such as lahiri gives sidereal longitudes, with the ayanamsa subtracted from the tropical ones. Pass the value even when a person uses another name for it: tropical is also called Western or sayana; lahiri is also called Lahiri, Chitra Paksha or Indian national ayanamsa; fagan_bradley is also called Fagan-Bradley, Fagan/Bradley or Western sidereal; raman is also called Raman or B. V. Raman; krishnamurti is also called Krishnamurti, KP or K.P.. | tropical |
| harmonic | No | Harmonic to read the chart and the sky in, a whole number from 1 up to the day's maximum: 432 divided by the day's hours, rounded down, so 18 on a 24-hour day and 17 on a 25-hour day. 1 is the ordinary daily reading; above 1, the natal chart and every sky sample are multiplied by it (longitude times harmonic, mod 360). | |
| latitude | No | Birth latitude in signed decimal degrees, north positive, for example 30.2672. Give with longitude and timezone instead of place. | |
| timezone | No | IANA time zone name for the birth time, such as America/Chicago, America/New_York, America/Los_Angeles, or Europe/London. Give with latitude and longitude instead of place. | |
| longitude | No | Birth longitude in signed decimal degrees, east positive, for example -97.7431. Give with latitude and timezone instead of place. | |
| birth_date | Yes | Birth date in the local calendar of the birth place, as YYYY-MM-DD, for example 1990-06-15. | |
| birth_time | Yes | Birth clock time in the local time of the birth place, 24-hour HH:MM, for example 19:30. | |
| day_timezone | No | IANA time zone of the day, such as America/New_York. Leave out for the natal timezone: the birth place's zone, from place or from timezone. | |
| house_system | No | House system that sets the house cusps: one of placidus, koch, equal, campanus, regiomontanus, porphyry, whole_sign. Leave out for placidus. Pass the value even when a person uses another name for it: placidus is also called Placidus or Plac; koch is also called Koch, birthplace houses or GOH; equal is also called Equal house or equal from the Ascendant; campanus is also called Campanus or Camp; regiomontanus is also called Regiomontanus or Regio; porphyry is also called Porphyry or Porph; whole_sign is also called Whole Sign, whole-sign houses, sign houses or WSH. | placidus |
| min_strength | No | Keep an aspect hit only when its score, not its tightness, is at least this, from 0 to 1, compared at the two places the score shows. The score is as the tool description says; the transit tool's min_strength compares its tightness instead. Leave out for 0, which keeps every hit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| day | Yes | |
| hits | Yes | |
| meta | Yes | Settings and provenance behind the numbers. |
| moon | Yes | |
| missing | Yes | Object codes an engine call did not compute, so the day leaves them out. Empty when all were computed. |
| headline | Yes | The date, the zone, the counts and the Moon's sign changes, as plain text. A harmonic above 1 starts with Harmonic N:. |
| stations | Yes | |
| ingresses | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses real behavioral traits: the natal chart comes from the configured engine, the sky is sampled at local midnight, midday and the next midnight as three parallel reads, results are deterministic ('the same input always gives the same numbers'), and ENGINE=stub yields placeholders. That is material operational context an agent cannot get from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded correctly (trigger first, then why, returns, inputs), but it is a single enormous run-on paragraph, and the long Returns enumeration largely duplicates what the existing output schema already specifies. The algorithmic 'Why' section earns its place; the restated input list does not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter tool with a complex ranked output, the description covers the trigger, the computation model, determinism and engine caveats, scoring semantics, and the zodiac/house/ayanamsa scoping. Even though an output schema exists, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds the ranking model that the schema does not state: score = orb tightness times weight divided by 1.5, weight bonuses for outer transiting bodies and key natal points, and tightness 1 at exact / 0 at orb edge. It also restates the harmonic cap and ayanamsa scope. This is genuine added meaning on top of a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise trigger and scope: a full local day of transits and midpoint contacts for a birth chart, ranked by score, with exact times, sign/house changes, retrograde stations and Moon behavior. That scope ('one whole local day') implicitly separates it from the sibling get_transit_data, which is not day-scoped. An agent knows exactly what this tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call this when someone asks what one whole local day holds for a birth chart, such as today's transits for a person' is an explicit, testable trigger condition. However, the description never names an alternative tool or states a when-not condition (the contrast with the transit tool's min_strength appears only in the schema, not the description), so routing guidance is clear but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_harmonic_midpointsHarmonic midpoint structuresARead-onlyIdempotent
Call this when someone asks which midpoint structures a birth chart has in one harmonic, such as harmonic 5 or 7, for a birth date, time and place. Why: the chart is cast once by the configured engine, each longitude is multiplied by the harmonic, and the classic midpoint method tests every pair of points, so the same input always gives the same structures. With ENGINE=stub they are placeholders, and the text starts with a PLACEHOLDER line. Returns: a headline with the structure count and the tightest structure; the harmonic positions of the bodies, Ascendant and Midheaven; up to limit structures (default 12, at most 50) ranked by orb, each with its focus point, the two points whose midpoint it is, the aspect, orb, strength and the midpoint's sign and degree; the total count; and the harmonic, house system, UT moment, place and provenance. Input ayanamsa sets the zodiac the longitudes are multiplied in: tropical by default, or lahiri, fagan_bradley, raman or krishnamurti for sidereal longitudes; a sidereal result names the ayanamsa in meta. Gives positions and facts only, with no interpretation. Pass either place, or latitude, longitude and timezone. One harmonic per call.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many midpoint structures to return, tightest orb first, from 1 to 50. Leave out for 12. | |
| place | No | Birth place to look up, as a name like 'Austin, TX', or one of these shorthands, which stand alone with no region or country: 'NYC', 'New York', 'LA', 'L.A.', 'SF', 'San Fran', 'DC', 'Philly', 'Vegas', 'Peking' or 'Saigon'. Give this or latitude, longitude and timezone, not both. Anything else must be a place name in the GeoNames table, or latitude, longitude and time zone given directly. | |
| ayanamsa | No | Zodiac for the positions: tropical, lahiri, fagan_bradley, raman, krishnamurti. Leave out for tropical. A sidereal value such as lahiri gives sidereal longitudes, with the ayanamsa subtracted from the tropical ones. Pass the value even when a person uses another name for it: tropical is also called Western or sayana; lahiri is also called Lahiri, Chitra Paksha or Indian national ayanamsa; fagan_bradley is also called Fagan-Bradley, Fagan/Bradley or Western sidereal; raman is also called Raman or B. V. Raman; krishnamurti is also called Krishnamurti, KP or K.P.. | tropical |
| harmonic | Yes | Harmonic H, a whole number from 1 to 10000, for example 5. Every longitude is multiplied by H before the midpoints are read; 1 is the natal chart. | |
| latitude | No | Birth latitude in signed decimal degrees, north positive, for example 30.2672. Give with longitude and timezone instead of place. | |
| timezone | No | IANA time zone name for the birth time, such as America/Chicago, America/New_York, America/Los_Angeles, or Europe/London. Give with latitude and longitude instead of place. | |
| longitude | No | Birth longitude in signed decimal degrees, east positive, for example -97.7431. Give with latitude and timezone instead of place. | |
| birth_date | Yes | Birth date in the local calendar of the birth place, as YYYY-MM-DD, for example 1990-06-15. | |
| birth_time | Yes | Birth clock time in the local time of the birth place, 24-hour HH:MM, for example 19:30. | |
| house_system | No | House system that sets the house cusps: one of placidus, koch, equal, campanus, regiomontanus, porphyry, whole_sign. Leave out for placidus. Pass the value even when a person uses another name for it: placidus is also called Placidus or Plac; koch is also called Koch, birthplace houses or GOH; equal is also called Equal house or equal from the Ascendant; campanus is also called Campanus or Camp; regiomontanus is also called Regiomontanus or Regio; porphyry is also called Porphyry or Porph; whole_sign is also called Whole Sign, whole-sign houses, sign houses or WSH. | placidus |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | Settings and provenance behind the numbers. |
| missing | Yes | Object codes the engine did not compute, so no structure uses them. Empty when all were computed. |
| headline | Yes | The harmonic, the number of midpoint structures and the tightest one, as plain text. |
| structures | Yes | Classic midpoint structures in this harmonic, ranked by orb. |
| harmonic_positions | Yes | Positions in the harmonic chart: each longitude is the natal longitude times the harmonic. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering read-only/idempotent/closed-world, the description still adds substantial behavior: determinism ('the same input always gives the same structures'), the ENGINE=stub placeholder mode with a PLACEHOLDER line, provenance/meta reporting, and the ayanamsa-subtraction behavior for sidereal. This is a good example of adding value beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the trigger, which is good, but the long 'Returns:' enumeration duplicates the output schema verbatim and bloats a single dense paragraph. Useful content, but the return-value inventory does not earn its space given a separate output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter engine-backed tool, the description covers the trigger, determinism, stub caveat, coordinate-vs-place input choice, harmonic semantics, and ayanamsa behavior, with the output schema carrying the return shape. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and includes inline enum explanations, so the schema already carries the parameter semantics. The description restates the ayanamsa zodiac effect and harmonic multiplication but adds no syntax or format detail the schema lacks. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource+scope: 'which midpoint structures a birth chart has in one harmonic, such as harmonic 5 or 7', and adds 'One harmonic per call'. An agent can tell this apart from a generic chart or transit call. It never names or contrasts the siblings (get_chart_data, get_transit_data), so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Call this when someone asks which midpoint structures...') and a scoping rule ('One harmonic per call'), plus the place-vs-coordinates input condition. No exclusions or named alternatives are given, so it is clear context without routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transit_dataTransits to a natal chartARead-onlyIdempotent
Call this when someone asks what the sky holds at one moment, now or at a given date and time, against a natal chart: which planets are transiting and which natal points they aspect at that moment. Why: the natal chart and the sky come from the configured engine with fixed settings, so the same input always gives the same numbers. With ENGINE=stub they are placeholders, and the text starts with a PLACEHOLDER line. Inputs: birth_date and birth_time give the birth moment in the local time of the birth place, with place, or with latitude, longitude and timezone. house_system names the natal house system. ayanamsa sets the zodiac of both the natal chart and the sky. harmonic sets the harmonic of both. bodies limits the transiting bodies, and so the midpoints made of them; the natal chart is always whole. transit_date and transit_time give the moment of the sky, with transit_timezone for its zone; leave out both for the sky now. Returns: the transiting bodies with sign, degree, minute and retrograde flag; the aspects, ranked by orb for the default reading and by strength for the others, the 15 tightest unless aspect_limit says otherwise, with the total and a truncated flag; and the sky moment, the birth moment, the house system and the harmonic. Reading: aspects is "major" (default) or "all" (17 vibrational aspects). A point pairing (T to N) takes each aspect's own transit orb; any pairing with a midpoint takes the classic midpoint orb. include lists the pairings, in any order: "points" (default: transiting bodies to natal points, T to N), "to_natal_midpoints" (to natal midpoints, T to Nm), "transit_midpoints" (midpoints of transiting bodies to natal points, Tm to N) and "midpoint_to_midpoint" (transit midpoints to natal midpoints, Tm to Nm). Every row names its pairing, the points or midpoint pairs involved, orb, strength and phase (applying, separating or unknown). The default reading keeps its keys, order, orb and strength, and only a row whose phase is unknown changes its applying (false) and text ("phase unknown"); any other reading ranks by strength. Every row has the same keys. min_strength keeps the aspects at or above a strength from 0 to 1, and aspect_limit sets how many to list, with 0 for all. Leave out transit_date and transit_time for the sky now. With harmonic above 1, the natal chart and the sky are both multiplied by the harmonic (longitude times harmonic, mod 360), and every longitude returned is that harmonic chart's. Input ayanamsa sets the zodiac for both the natal chart and the sky: tropical by default, or lahiri, fagan_bradley, raman or krishnamurti for sidereal longitudes; a sidereal result names the ayanamsa in meta. Gives positions and facts only, with no interpretation.
| Name | Required | Description | Default |
|---|---|---|---|
| place | No | Birth place to look up, as a name like 'Austin, TX', or one of these shorthands, which stand alone with no region or country: 'NYC', 'New York', 'LA', 'L.A.', 'SF', 'San Fran', 'DC', 'Philly', 'Vegas', 'Peking' or 'Saigon'. Give this or latitude, longitude and timezone, not both. Anything else must be a place name in the GeoNames table, or latitude, longitude and time zone given directly. | |
| bodies | No | Transiting bodies to return, such as Sun and Moo. The midpoints of transiting bodies (Tm) are made from these only; the natal chart is always whole. Codes: Sun, Moo (Moon), Mer (Mercury), Ven (Venus), Mar (Mars), Jup (Jupiter), Sat (Saturn), Ura (Uranus), Nep (Neptune), Plu (Pluto), Chi (Chiron), Nor (Mean North Node, North Node), Cer (Ceres), Pal (Pallas), Jun (Juno), Ves (Vesta), Eri (Eris), Hau (Haumea), Mak (Makemake), Sed (Sedna). Leave out for all of them. | |
| aspects | No | Which aspects to read. "major" (default) reads the five major aspects. "all" reads the 17 vibrational aspects, such as semisquare, quincunx, quintile, septile and novile. The orb depends on the pairing: a point pairing (T to N) takes the transit orb of the aspect's own harmonic, 2 degrees for harmonics 1 to 4 and 1 degree above; any pairing with a midpoint takes the classic midpoint orb, 1.5 degrees for conjunction and opposition and 1.5 × 2 ÷ harmonic for the others. Every row names its pairing, the rows of the default reading too. A row whose phase is unknown reads "phase unknown" and is never applying. The aspect names results use, with other names people use and the angle (no input takes an aspect name): "major" has conjunction (conj, 0°), opposition (opp, 180°), trine (tri, 120°), square (sqr, quartile, 90°), sextile (sex, 60°); "all" adds quintile (qtl, 72°), biquintile (bi-quintile, 144°), septile (sep, 51°26′), biseptile (bi-septile, 102°51′), triseptile (tri-septile, 154°17′), semisquare (semi-square, octile, 45°), sesquiquadrate (sesquisquare, sesqui-square, trioctile, 135°), novile (nonile, 40°), binovile (bi-novile, 80°), quadnovile (quadri-novile, 160°), semisextile (semi-sextile, 30°), quincunx (inconjunct, 150°). | major |
| include | No | Which pairings to read, as a list, in any order: rows are ranked together whatever the order. "points" (default) reads transiting bodies to natal points (T to N). "to_natal_midpoints" reads transiting bodies to natal midpoints (T to Nm). "transit_midpoints" reads midpoints of pairs of transiting bodies to natal points (Tm to N). "midpoint_to_midpoint" reads transit midpoints to natal midpoints (Tm to Nm). Each value gives its own rows, named by pairing. Repeating a value is refused. | |
| ayanamsa | No | Zodiac for the positions: tropical, lahiri, fagan_bradley, raman, krishnamurti. Leave out for tropical. A sidereal value such as lahiri gives sidereal longitudes, with the ayanamsa subtracted from the tropical ones. Pass the value even when a person uses another name for it: tropical is also called Western or sayana; lahiri is also called Lahiri, Chitra Paksha or Indian national ayanamsa; fagan_bradley is also called Fagan-Bradley, Fagan/Bradley or Western sidereal; raman is also called Raman or B. V. Raman; krishnamurti is also called Krishnamurti, KP or K.P.. | tropical |
| harmonic | No | Harmonic to read the chart and the sky in: 1 is the ordinary transit. Above 1, the natal chart and the sky are both multiplied by it (longitude times harmonic, mod 360) before the aspects are read. | |
| latitude | No | Birth latitude in signed decimal degrees, north positive, for example 30.2672. Give with longitude and timezone instead of place. | |
| timezone | No | IANA time zone name for the birth time, such as America/Chicago, America/New_York, America/Los_Angeles, or Europe/London. Give with latitude and longitude instead of place. | |
| longitude | No | Birth longitude in signed decimal degrees, east positive, for example -97.7431. Give with latitude and timezone instead of place. | |
| birth_date | Yes | Birth date in the local calendar of the birth place, as YYYY-MM-DD, for example 1990-06-15. | |
| birth_time | Yes | Birth clock time in the local time of the birth place, 24-hour HH:MM, for example 19:30. | |
| aspect_limit | No | How many aspects to list. The default reading ranks by orb, tightest first; the others rank by strength, to two places, with equal strengths in pairing order. Leave out for 15. 0 lists every aspect. The result always gives the total and whether the list was cut. | |
| house_system | No | House system that sets the house cusps: one of placidus, koch, equal, campanus, regiomontanus, porphyry, whole_sign. Leave out for placidus. Pass the value even when a person uses another name for it: placidus is also called Placidus or Plac; koch is also called Koch, birthplace houses or GOH; equal is also called Equal house or equal from the Ascendant; campanus is also called Campanus or Camp; regiomontanus is also called Regiomontanus or Regio; porphyry is also called Porphyry or Porph; whole_sign is also called Whole Sign, whole-sign houses, sign houses or WSH. | placidus |
| min_strength | No | Keep only the aspects whose strength is at least this, from 0 to 1: 1 at exact and 0 at the edge of the orb. Leave out or 0 keeps every aspect inside its orb. | |
| transit_date | No | Date of the sky to read, as YYYY-MM-DD in transit_timezone, for example 2000-06-15. Give with transit_time, or leave both out for the sky now. | |
| transit_time | No | Clock time of the sky to read, 24-hour HH:MM in transit_timezone, for example 12:00. Give with transit_date, or leave both out for the sky now. | |
| transit_timezone | No | IANA time zone name for transit_date and transit_time, such as America/New_York. Leave out for UT. Give only with transit_date and transit_time. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sky | Yes | The transiting bodies in object-code order. With harmonic above 1 these are the harmonic chart's longitudes. |
| meta | Yes | Settings and provenance behind the numbers. |
| aspects | Yes | Aspects between transiting points and natal points, or their midpoints, as the request chose them. |
| missing | Yes | Object codes the engine did not compute, for the sky or the natal chart. Empty when all were computed. |
| headline | Yes | The transiting Sun and Moon positions as plain text. Only the bodies in the sky appear. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety and recurrence are covered; the description goes further with genuinely additive behavior: identical input always yields identical numbers, ENGINE=stub returns placeholders whose text begins with a PLACEHOLDER line, and the tool gives facts only with no interpretation. The PLACEHOLDER and no-interpretation disclosures are things no annotation conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is at least front-loaded, opening with the trigger and a 'Why' line, but it is severely padded and repeats itself verbatim ('Leave out transit_date and transit_time for the sky now' appears twice, 'same keys' twice) and re-explains content the 100%-covered schema already carries (full aspect list, all ayanamsa and house-system aliases, orb formulas). Several long sentences do not earn their place against structured fields that already say the same thing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 17-parameter tool with enums and an output schema present (so return values need not be explained), the description covers the missing operational context: stub-mode behavior, determinism, the natal-vs-transiting distinction, and when to omit the transit moment. Nothing an agent needs in order to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3: every parameter is already documented in the schema, including enums, defaults, aliases and patterns. The description largely restates those same semantics (pairing definitions, orb rules, ayanamsa/house-system aliases, ranking behavior) rather than adding new meaning, so it does not clear the bar for a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('which planets are transiting and which natal points they aspect' against a natal chart at a given moment), so the agent knows exactly what computation this performs. It never names or distinguishes itself from the sibling tools get_daily_transits, get_chart_data or get_composite_data, so there is no sibling differentiation beyond the implicit 'one moment vs. daily' contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening trigger is explicit ('Call this when someone asks what the sky holds at one moment, now or at a given date and time, against a natal chart') and the omission rule for transit_date/transit_time is spelled out twice. There is no when-not guidance and no routing to alternatives such as get_daily_transits, which for a same-domain sibling set is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.0- First observed
get_chart_data - First observed
get_composite_data - First observed
get_daily_transits - First observed
get_harmonic_midpoints - First observed
get_transit_data
TDQS
Scored across 5 tools
The tools are largely distinct: natal chart, composite chart, harmonic midpoints, moment transits, and daily transits. The only notable overlap is get_transit_data versus get_daily_transits, both transit calculations, though the descriptions clearly separate a single moment from a whole local day.
All five tools use a consistent get_<noun phrase> pattern in snake_case. The minor variation between _data suffixes and direct nouns does not break the predictable convention.
Five tools is well-scoped for a focused astrology calculation server. Each tool covers a distinct chart or transit operation, with no filler or redundant entries.
The surface covers core natal, transit, daily transit, composite, and harmonic midpoint workflows. Notable gaps remain, such as synastry between two natal charts, progressions, and return charts, but core chart-data retrieval is well covered.
Related MCP Connectors
Western natal charts, horoscopes, transits and synastry for AI agents, verified vs NASA JPL.
Swiss Ephemeris for AI agents: exact natal charts, transits, synastry and birth-place resolution
Astrology app for ChatGPT and Claude: real charts from NASA JPL DE440, not AI guesses.
Аccess to personalized Enigmata astrological forecasts (day/week/month/thematic) for AI assistants
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceMulti-tradition astrology engine that computes real birth charts, transits, and synastry for AI agents via MCP tools.13-
- AlicenseNot gradedqualityBmaintenanceHigh-precision astrology tools for LLM agents, including natal charts, transits, progressions, synastry, and more, backed by Swiss Ephemeris.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access real-time Vedic astrology data and perform calculations like horoscopes, panchang, matchmaking, and planetary positions via the AstroChalit API.8 npmISC
- AlicenseAqualityAmaintenanceEnables MCP-compatible AI clients to access structured GetBirthChart astrology calculations such as natal charts, planet positions, the big three, moon sign, rising sign, aspects, and synastry through the public API.745 npmMIT