Releases: cyanheads/astronomy-mcp-server
Release list
v0.2.3: ephemeris row-drop disclosure
ephemeris row-drop disclosure
- astronomy_get_ephemeris: a Horizons row missing a distance no longer fails the whole call with a schema-rejected NaN; unusable rows are dropped and disclosed via an optional dropped count and notice (#18)
- astronomy_get_ephemeris: invalid_step error message now lists all five accepted units (m, h, d, mo, y)
v0.2.2: content[] numeric parity, stargazing-plan moon step
content[] numeric parity, stargazing-plan moon step
- astronomy_get_sky_position, astronomy_get_rise_set, astronomy_get_moon_phase, astronomy_find_events, astronomy_get_ephemeris, astronomy_get_satellite_passes: format() now carries each field's exact value alongside its rounded display, so a content[]-only client recovers what structuredContent carries (#14)
- astronomy_list_visible: keeps only the distance's exact tail on its scan line to avoid a ~1.7x content[] size increase; astronomy_get_sky_position remains the full-precision lookup for any listed body (#14)
- astronomy_stargazing_plan: added an observer-relative astronomy_get_rise_set("moon") step, since the Moon's phase alone can't say whether it's above the horizon (#16)
v0.2.1: Ephemeris input validation and satellite pass-boundary fixes
Ephemeris input validation and satellite pass-boundary fixes
- astronomy_get_ephemeris: truncation notice now reaches structuredContent and content[] instead of being silently stripped (#11)
- astronomy_get_ephemeris: reject a lone observer coordinate, a backwards time range, and a malformed step before requesting Horizons (#13)
- astronomy_get_satellite_passes: a window opening mid-pass no longer reports the query boundary as a false rise time (#12)
- astronomy_get_satellite_passes: reject an element set SGP4 can't propagate to the window instead of returning an empty pass list (#17)
v0.2.0: earth apsides, find_events fixes, mcp-ts-core 0.11.0
earth apsides, find_events fixes, mcp-ts-core 0.11.0
- find_events: opposition/conjunction times were swapped for every planet, relative to astronomy-engine's convention (#7)
- find_events: moon_phase age_days over-reported by ~29.5d for ~1.5 days after a new moon (#8)
- find_events: an unsupported body for a body-relative event leaked astronomy-engine's raw internal errors instead of a clean validation error (#9)
- find_events: perigee_apogee accepts body "earth" for its heliocentric perihelion/aphelion; conjunction on mercury/venus now reports both inferior and superior passes via conjunction_kind (#10)
- find_events: corrected the description's claim that lunar eclipses take an observer and report local visibility (#15)
- horizons/satellite services adopt mcp-ts-core's canonical status/body error-data fields and correctly map fetch timeouts to their own typed unavailable contract
- repo hygiene (.gitattributes, funding link, security policy), Dockerfile hardening, a Socket install-time scanner, and a framework docs/scripts/skills resync
- deps: @cyanheads/mcp-ts-core ^0.10.9 -> ^0.11.0 (+ dev-dep bumps)
v0.1.3: readable content[] and prompt-injection hardening
readable content[] and prompt-injection hardening
Presentation pass on the content[] markdown twin, plus delimiting user-supplied input in the stargazing prompt.
Added:
astronomy_get_rise_setechoes abodyoutput field so content[]-only clients see which body the cycles describe (#3)
Changed:
astronomy_get_rise_set,astronomy_find_events,astronomy_list_visible,astronomy_get_satellite_passes— content[] now leads with human-readable headers and rounds precision instead of dumping raw fields (#3)astronomy_stargazing_plan— wraps user-supplied location and date in<location>/<date>tags framed as data, not instructions (#6)
115 tests pass; bun run devcheck clean.
v0.1.2: extension time validation and list_visible bug fixes
extension time validation and list_visible bug fixes
Four bug fixes across the gated extension tools and astronomy_list_visible.
Fixed:
- astronomy_get_ephemeris: topocentric (observer) calls returned distance_au NaN; the Horizons request now adds azimuth/elevation (QUANTITIES '1,4,9,20') for an observer so the CSV columns align (#1)
- astronomy_get_ephemeris / astronomy_get_satellite_passes: an unparseable start now rejects with invalid_time (InvalidParams) before any network call, instead of a generic error or a silently empty pass list; satellite passes also enforces the SGP4 1900-2100 span (#5)
- astronomy_list_visible: the default list is naked-eye only; telescopic Uranus, Neptune, and Pluto no longer appear (#4)
- astronomy_list_visible: sky_condition, sun_altitude_degrees, and total_count now ride the output and lead the content[] text, so content[]-only clients see the sky-condition gate (#2)
110 tests pass; bun run devcheck clean.
v0.1.1: Initial release
Initial release
Observational astronomy computed in-process via astronomy-engine — keyless, offline, and deterministic for a given (body, time, observer). Two network-backed extensions register only behind their config gate.
Added:
- Five keyless core tools —
astronomy_get_sky_position,astronomy_get_rise_set,astronomy_get_moon_phase,astronomy_find_events,astronomy_list_visible. astronomy://body/{body}reference resource and theastronomy_stargazing_planprompt.- Gated extensions —
astronomy_get_ephemeris(JPL Horizons) andastronomy_get_satellite_passes(CelesTrak TLE + SGP4). - Optional extension config (
ASTRONOMY_ENABLE_HORIZONS,ASTRONOMY_ENABLE_SATELLITES,ASTRONOMY_DEFAULT_TIMEZONE) declared inserver.jsonand documented in.env.example.
Changed:
- Distributed under the
@cyanheads/npm scope as@cyanheads/astronomy-mcp-server. - Server
description/websiteUrlderive frompackage.json;server.jsonruntimeHintset tobun.
Dependency bumps:
@types/node^26.0.0 → ^26.0.1
103 tests pass; bun run devcheck clean.