# io.github.cyanheads/astronomy-mcp-server (npm · @cyanheads/astronomy-mcp-server)

Offline observational astronomy: positions, rise/set, moon phases, eclipses, and seasons.

- Trust score: 67/100 (medium)
- Change this week: +43
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-06

## Components

- npm · `@cyanheads/astronomy-mcp-server`: 67/100 (this document), [markdown](https://verifymcp.io/servers/cyanheads-astronomy-mcp-server/cyanheads-astronomy-mcp-server.md), [page](https://verifymcp.io/servers/cyanheads-astronomy-mcp-server/cyanheads-astronomy-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@cyanheads/astronomy-mcp-server`
- Version: `0.2.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-06.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Known CVEs were checked across the 127 of 134 dependencies we could resolve, so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Dependency health was assessed across the 127 of 134 dependencies we could resolve, so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 5 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2463 tokens (~164/item across 15 items; 5 tools + 10 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add cyanheads-astronomy-mcp-server -- npx -y @cyanheads/astronomy-mcp-server
```

### Codex

```bash
codex mcp add cyanheads-astronomy-mcp-server -- npx -y @cyanheads/astronomy-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cyanheads-astronomy-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@cyanheads/astronomy-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add cyanheads-astronomy-mcp-server --command npx --arg -y --arg @cyanheads/astronomy-mcp-server
```

### Hermes

```yaml
mcp_servers:
  cyanheads-astronomy-mcp-server:
    command: "npx"
    args: ["-y", "@cyanheads/astronomy-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "cyanheads-astronomy-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/astronomy-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-06 (score 67, +32)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail

### 2026-08-05 (score 35, +1)

- [security improvement] CVE-2026-69207 no longer affects this package
- [security improvement] Known CVEs: fail → partial

### 2026-08-04 (score 34, −1)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail

### 2026-08-02 (score 35, +30)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional] Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional] Tool coverage: Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.
- [functional] Capabilities: Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.
- [functional] Licence: Apache-2.0

### 2026-08-01 (score 5, −1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 6, −18)

- [security regression] Malware scan: pass → unverified
- [functional] Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional] Tool coverage: Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.
- [functional] Package version: 0.1.3 → 0.2.3

### 2026-07-27 (score 24)

First indexed and scored.

## MCP tools (5)

### `astronomy_get_sky_position` (~378 tokens)

astronomy-mcp-server: get sky position

Compute the apparent topocentric position of one solar-system body (sun, moon, mercury through neptune, pluto) or a named bright star for an observer location and instant. Returns equatorial (RA/Dec), refraction-corrected horizontal (altitude/azimuth), and ecliptic coordinates, plus distance, apparent magnitude, angular diameter, phase angle, illuminated fraction, and the constellation it falls in. Positions are parallax- and aberration-corrected for the given observer; default elevation is 0 m and the default time is now. Supply `star` (e.g. "Sirius", "Polaris") instead of `body` to target a catalog star; `body` is ignored when `star` is set. Pass an IANA `timezone` to also receive the observer-local time. This server does not geocode — resolve a place name to latitude/longitude upstream first.

Input parameters:

- `body` (string): Solar-system body to locate. Omit when targeting a named star via `star`.
- `elevation` (number): Observer elevation in meters above sea level. Default 0.
- `latitude` (number, required): Observer latitude in decimal degrees, north positive.
- `longitude` (number, required): Observer longitude in decimal degrees, east positive.
- `star` (string): Named bright star to locate (common name or Bayer designation, e.g. "Sirius", "Alpha Centauri"). Takes precedence over `body`.
- `time` (string): Instant of observation as an ISO 8601 UTC string, e.g. "2024-04-08T18:00:00Z". Defaults to now.
- `timezone` (string): IANA timezone for localized output, e.g. "America/Los_Angeles". When omitted, output is UTC-only.

Output parameters:

- `angular_diameter_arcsec`: Apparent angular diameter of the disc in arcseconds. Null for point-source convention bodies.
- `body` (string): The body or star this position is for, echoed from the request.
- `constellation` (object): The constellation the body currently falls within.
- `ecliptic` (object): Ecliptic-of-date coordinates of the body.
- `equatorial` (object): Apparent equatorial coordinates, corrected for precession, nutation, parallax, and aberration.
- `horizontal` (object): Refraction-corrected horizontal coordinates as seen from the observer.
- `illuminated_fraction`: Fraction of the disc illuminated, 0 to 1. Null when not applicable.
- `magnitude`: Apparent visual magnitude (lower is brighter). Null for bodies where the engine cannot compute it.
- `phase_angle_degrees`: Sun-body-observer phase angle in degrees. Null when not applicable (e.g. stars).
- `time_local` (string): The same instant in the observer-local timezone with offset, present only when a timezone was supplied.
- `time_utc` (string): The instant of the observation in ISO 8601 UTC.

### `astronomy_get_rise_set` (~329 tokens)

astronomy-mcp-server: get rise/set times

Compute rise, set, and culmination (transit) times for a body at an observer location, plus the maximum altitude at culmination. For the Sun, also returns the three twilight pairs (civil −6°, nautical −12°, astronomical −18°) so a single call answers "when does the sun set and when is it truly dark." Searches forward from `start` (default today) and returns the next `count` cycles (default 1). Circumpolar or never-rises situations are reported as null rise/set fields with an explanatory note rather than an error — the fact is the answer. Default elevation is 0 m; pass an IANA `timezone` for observer-local times. This server does not geocode — resolve coordinates upstream first.

Input parameters:

- `body` (string, required): The body to compute rise/set for. Twilight is included only when this is "sun".
- `count` (integer): Number of forward rise/set cycles to return. Default 1, max 31.
- `elevation` (number): Observer elevation in meters above sea level. Default 0.
- `latitude` (number, required): Observer latitude in decimal degrees, north positive.
- `longitude` (number, required): Observer longitude in decimal degrees, east positive.
- `start` (string): Search start as an ISO 8601 UTC string, e.g. "2024-06-21T00:00:00Z". Defaults to now.
- `timezone` (string): IANA timezone for localized output, e.g. "America/Los_Angeles". When omitted, output is UTC-only.

Output parameters:

- `body` (string): The body these rise/set cycles are for, echoed from the request.
- `events` (array): One entry per rise/set/transit cycle, searching forward from the start time.
- `totalCount` (number): Number of rise/set cycles returned.

### `astronomy_get_moon_phase` (~187 tokens)

astronomy-mcp-server: get moon phase

Report the Moon phase for an instant: illuminated fraction, phase name, synodic age in days since the new moon, phase angle, and the next four quarter phases (new, first quarter, full, last quarter) with timestamps. Answers "what is the moon phase tonight" and "when is the next full moon" in one call without iteration. The time defaults to now; pass an IANA `timezone` to also receive observer-local timestamps. The phase is geocentric — no observer location is needed.

Input parameters:

- `time` (string): Instant to evaluate as an ISO 8601 UTC string, e.g. "2024-12-15T00:00:00Z". Defaults to now.
- `timezone` (string): IANA timezone for localized output, e.g. "America/Los_Angeles". When omitted, output is UTC-only.

Output parameters:

- `age_days` (number): Synodic age in days since the previous new moon.
- `illuminated_fraction` (number): Fraction of the lunar disc illuminated, 0 to 1.
- `next_quarters` (array): The next four lunar quarter phases (new/first/full/last) in chronological order.
- `phase_angle_degrees` (number): Moon phase angle in degrees: 0 = new, 90 = first quarter, 180 = full, 270 = last quarter.
- `phase_name` (string): Human-readable phase name (New Moon, Waxing Crescent, First Quarter, …, Waning Crescent).
- `time_local` (string): The same instant in the observer-local timezone with offset, present only when a timezone was supplied.
- `time_utc` (string): The instant the phase was computed for, in ISO 8601 UTC.

### `astronomy_find_events` (~472 tokens)

astronomy-mcp-server: find sky events

Search forward from a start time for the next occurrences of one sky-event class, selected by the `event` enum: solar_eclipse, lunar_eclipse, equinox, solstice, moon_quarter, opposition, conjunction, max_elongation, or perigee_apogee. Only solar_eclipse takes an observer: pass latitude and longitude to get local circumstances (contact times plus `local_visible`). Every other class is geocentric and needs no location — a lunar eclipse is the same event everywhere the Moon is up, so it returns contact times and no `local_visible`. The body-relative events (opposition, conjunction, max_elongation, perigee_apogee) require a `body`: opposition applies to the superior planets (mars through pluto), conjunction to any planet, max_elongation to mercury and venus, and perigee_apogee to the moon (perigee/apogee), earth, or a planet (perihelion/aphelion). Returns the next `count` occurrences (default 1). Start defaults to now; pass an IANA `timezone` for observer-local timestamps.

Input parameters:

- `body` (string): Target body — required for opposition, conjunction, max_elongation, and perigee_apogee; ignored otherwise. "earth" is accepted only for perigee_apogee, which returns its perihelion and aphelion.
- `count` (integer): Number of forward occurrences to return. Default 1, max 20.
- `elevation` (number): Observer elevation in meters above sea level. Default 0.
- `event` (string, required): Which class of event to search for.
- `latitude` (number): Observer latitude in decimal degrees — required for solar_eclipse to get local circumstances, ignored by every other event.
- `longitude` (number): Observer longitude in decimal degrees — required for solar_eclipse, ignored by every other event.
- `start` (string): Search start as an ISO 8601 UTC string, e.g. "2024-01-01T00:00:00Z". Defaults to now.
- `timezone` (string): IANA timezone for localized output, e.g. "America/Los_Angeles". When omitted, output is UTC-only.

Output parameters:

- `events` (array): The next occurrences of the requested event class, in chronological order.
- `totalCount` (number): Number of event occurrences returned.

### `astronomy_list_visible` (~365 tokens)

astronomy-mcp-server: list visible bodies

The one-call "what is up right now" answer. For an observer location and instant, iterate every naked-eye solar-system body (and, with include_stars, the bundled bright stars), compute altitude and azimuth, keep those above the horizon, rank them brightest-and-highest first, and attach a plain-language visibility note to each. The whole sky is gated by the Sun's altitude into daylight / civil / nautical / astronomical twilight / dark, returned alongside the list. `time` is a single evaluation instant, not a window — for "tonight" pass a time after astronomical dusk (use astronomy_get_rise_set on the sun to find it). Default elevation 0 m; use min_altitude to skip objects grazing the horizon. This server does not geocode — resolve coordinates upstream first; pass an IANA timezone for observer-local times on each body.

Input parameters:

- `elevation` (number): Observer elevation in meters above sea level. Default 0.
- `include_stars` (boolean): Include the bundled bright stars alongside planets. Default false.
- `latitude` (number, required): Observer latitude in decimal degrees, north positive.
- `longitude` (number, required): Observer longitude in decimal degrees, east positive.
- `min_altitude` (number): Minimum altitude in degrees to include a body. Default 0 (above the horizon); use e.g. 5 to require clearance.
- `time` (string): Evaluation instant as an ISO 8601 UTC string, e.g. "2024-08-12T05:00:00Z". Defaults to now. A single instant, not a window.
- `timezone` (string): IANA timezone for localized output, e.g. "America/Los_Angeles". When omitted, output is UTC-only.

Output parameters:

- `bodies` (array): Every body (and optional star) above the minimum-altitude filter, ranked brightest-and-highest first.
- `sky_condition` (string): Sky condition derived from the Sun's altitude — the gate for whether faint objects are observable.
- `sun_altitude_degrees` (number): The Sun's altitude in degrees that produced the sky condition.
- `total_count` (number): Number of bodies returned above the minimum-altitude filter.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/cyanheads-astronomy-mcp-server/cyanheads-astronomy-mcp-server#diagnostics

## Score history

- 2026-08-06: 67
- 2026-08-05: 35
- 2026-08-04: 34
- 2026-08-03: 35
- 2026-08-02: 35
- 2026-08-01: 5
- 2026-07-31: 6
- 2026-07-30: 24
- 2026-07-28: 24
- 2026-07-27: 24

## Links

- npm package: https://www.npmjs.com/package/@cyanheads/astronomy-mcp-server
- Socket report: https://socket.dev/npm/package/@cyanheads/astronomy-mcp-server
- Repository: https://github.com/cyanheads/astronomy-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/cyanheads-astronomy-mcp-server/cyanheads-astronomy-mcp-server.xml
- Changelog JSON feed: https://verifymcp.io/servers/cyanheads-astronomy-mcp-server/cyanheads-astronomy-mcp-server.json
- HTML version of this page: https://verifymcp.io/servers/cyanheads-astronomy-mcp-server/cyanheads-astronomy-mcp-server
