# Reported issues for astrodynamics-mcp

Pod holds 20 of 75 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [astrodynamics-mcp](/mcp/astrodynamics-mcp).

## Most discussed

### Viz subsystem quality review: bugs, simplification, doc drift, test gaps

## Goal

End-of-subsystem review pass over the v0.4 viz surface before the release cut — the analogue of the v0.2 GMAT (#95) and v0.3 SPICE (#128) reviews. Roll findings into a single triaged backlog. Priority key: **P0** = correctness / resource leak, **P1** = user-visible drift or LLM-facing contract issue, **P2** = simplification or test polish.

## Scope

Review the viz tool modules (`tools/viz.py` or the plot / czml modules), the attachment plumbing in the server, the viz schemas, and every

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/135) · 2026-05-29 · closed · outside contributor · 1 comment

### Tool: czml_trajectory (gmat-czml wrapper for 3D Cesium views)

## Goal

Expose 3D trajectory visualisation by wrapping the `gmat-czml` sibling (`to_czml`), returning a CZML document as an MCP `EmbeddedResource` viewable in any Cesium client. Charter v0.4: the CZML tool is gated on `gmat-czml` shipping first.

## Tool surface

- **Name**: `czml_trajectory`
- **Inputs**:
  - `trajectory` — a state series in the canonical schema (an SGP4 propagation series, a GMAT ephemeris from the `[gmat]` tools, or a supplied state series).
  - `intervals: ... | None = None

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/133) · 2026-05-29 · closed · outside contributor · 1 comment

### [viz] extra wiring + PNG/CZML attachment plumbing

## Goal

Wire the `[viz]` optional extra and the attachment output channel the viz tools need — the cross-cutting groundwork for v0.4. The base install stays viz-free, mirroring the `[gmat]` / `[spice]` gates. No tool bodies yet.

## Scope

- `pyproject.toml`: `viz = ["matplotlib>=3.8", "gmat-czml>=0.3"]` under `[project.optional-dependencies]`; conditional tool registration (tools surface only when the extra imports).
- Attachment output channel: return PNGs as MCP `ImageContent` and CZML as an

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/131) · 2026-05-29 · closed · outside contributor · 1 comment

### SPICE subsystem quality review: bugs, simplification, doc drift, test gaps

## Goal

End-of-subsystem review pass over the v0.3 SPICE surface before the release cut — the analogue of the v0.2 GMAT subsystem review (#95). Roll the findings into a single triaged backlog of bugs, simplification opportunities, documentation drift, and test-coverage gaps. None of these block the v0.3 contract; they are quality / hygiene work to pay down once the SPICE surface lands. Priority key: **P0** = correctness / resource leak, **P1** = user-visible drift or LLM-facing contract issue, 

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/128) · 2026-05-29 · closed · outside contributor · 1 comment

### v0.2.0: per-parameter descriptions on every tool (Smithery +9pt, LLM ergonomics)

## Goal

Add per-parameter `description` strings to every tool function so the Smithery quality score's **Parameter descriptions** row (currently 0/8, 8.89pt) goes to 8/8. Substantial work — every parameter of every tool needs a one-line description that becomes part of the JSON Schema FastMCP generates and surfaces to MCP clients. ~46 parameters across 8 tools.

This is also a real ergonomic improvement beyond Smithery: any LLM connected to the server via MCP gets the per-parameter `description

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/62) · 2026-05-27 · closed · outside contributor · 1 comment

### Submit to upstream MCP registries (Official Registry, Anthropic MCPB Directory, Cursor)

## Goal

Distribute `astrodynamics-mcp` to the upstream MCP registries beyond Smithery (#52), so the server is discoverable through Claude Desktop's "Browse extensions" UI, the Cursor MCP picker, and the aggregators (PulseMCP, GitHub MCP Registry, etc.) that ingest from the Official MCP Registry. Maximise reach without duplicating manual submission effort.

## Background

Smithery is one registry of many. As of May 2026, the ecosystem has settled into:

- **One canonical upstream** — `registry.m

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/53) · 2026-05-26 · closed · outside contributor · 1 comment

### porkchop: tool response is ~250 KB, blows free-tier 8000-token input cap on next model turn

## Problem

The `porkchop` tool returns the full grid of every (departure, arrival) cell from a scan — one record per cell with departure/arrival epochs, time-of-flight, C3, v_inf, declination, and more. For the eval suite's `porkchop_earth_mars_2026` prompt this serialises to **~250 KB / ~63k tokens** in a single tool response. When that response is fed back to the model on the next turn, the request exceeds GH Models' Free-plan input cap (8000 tokens, see [GitHub Models rate limits](https://do

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/42) · 2026-05-26 · closed · outside contributor · 1 comment

### Eval suite: Inspect AI runner, hybrid scorer, ~30 prompts

## Goal

The Inspect AI eval suite — ~30 prompts across three difficulty tiers with the hybrid trace + functional-tolerance scorer. The live tool-quality gate that catches tool-selection and arg-binding regressions which the static lint cannot.

## Scope

- `eval/` (separate top-level directory, **not packaged**):
  - `eval/prompts/` — one YAML per prompt, structured as:
    - `prompt:` — the natural-language user message.
    - `permitted_traces:` — list of permitted tool-call sequences (each a

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/18) · 2026-05-24 · closed · outside contributor · 8 comments

## Most recent

### Docs + README update for the v0.4 viz surface

## Goal

Surface the v0.4 viz additions across the docs site and the README. After this issue a visitor can install `[viz]`, understand the attachment model, and find the viz tools in the reference.

## Scope

### New / filled-in pages
- `docs/visualisation.md` — the plot tools, `czml_trajectory`, the attachment model (`ImageContent` / `EmbeddedResource`, additive to ASCII), and which clients render images / CZML.

### Updates to existing pages
- `docs/tool-reference.md` — auto-regenerate so the

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/136) · 2026-05-29 · closed · outside contributor · 0 comments

### Eval suite: viz coverage + example sessions for plots and CZML

## Goal

Extend the eval suite to cover the viz tools and add runnable example sessions for a static plot and a CZML export.

## Scope

### New prompts
- One per plot tool (`plot_ground_track`, `plot_trajectory`, `plot_porkchop`) and one for `czml_trajectory`, at the single-tool tier.
- At least one sequential prompt (e.g. `sgp4_propagate → plot_ground_track`).
- Goldens assert an **attachment is produced** and its declared type (`ImageContent` vs `EmbeddedResource`) alongside the permitted-trac

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/134) · 2026-05-29 · closed · outside contributor · 0 comments

### Tool: static-plot helpers (plot_ground_track / plot_trajectory / plot_porkchop) as PNG

## Goal

matplotlib static-plot tools returning PNG attachments, with the inline ASCII / table summary retained. Deterministic rendering per the attachment-plumbing issue (#131).

## Tool surface

### `plot_ground_track`
- **Inputs**: a state series or SGP4 propagation result; optional ground stations to overlay.
- **Output**: a sub-satellite ground-track PNG + an inline summary (revs, lat / lon extent).

### `plot_trajectory`
- **Inputs**: a state series; `projection` (2D / 3D); optional centra

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/132) · 2026-05-29 · closed · outside contributor · 0 comments

### v0.3.0 release cut

## Goal

Cut v0.3.0 once the SPICE surface, eval, review, and docs have landed. Aggregate the CHANGELOG, bump the version, tag, ship.

## Scope

### Release-cut PR (single PR)
- `CHANGELOG.md` — aggregate all v0.3 entries into one `## [0.3.0] — YYYY-MM-DD` section (release-cut aggregation, not per-PR). No process-meta sections (Reviewed / Acknowledgements / Peer-review-response).
- `pyproject.toml` — bump the version; pin the `spiceypy` minor.
- `uv.lock` — regenerate.
- `README.md` — SPICE tool

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/130) · 2026-05-29 · closed · outside contributor · 0 comments

### Docs + README update for the v0.3 SPICE surface

## Goal

Surface the v0.3 SPICE additions across the docs site and the README. After this issue a visitor can install `[spice]`, understand the kernel model, and find the SPICE tools in the reference without grepping the CHANGELOG.

## Scope

### New / filled-in pages
- `docs/spice-integration.md` — fill out the kickoff stub: the kernel model, the furnish-from-URL NAIF allowlist + cache, the concurrency / state-scope contract, the five tools, and when to pick a `spice_*` tool over the astropy-ba

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/129) · 2026-05-29 · closed · outside contributor · 0 comments

### Eval suite: SPICE coverage + example session (e) (SPICE / Horizons deep query)

## Goal

Extend the Inspect AI eval suite to cover the SPICE tools, and add the runnable example session the charter promises (session (e): SPICE / Horizons deep query). Charter §4: the suite grows toward ~50 prompts at v0.3 with SPICE coverage.

## Scope

### New prompts

**SPICE single-tool tier**:
- `spice_load_kernel` → `spice_state` (load a generic SPK + LSK, query a body state).
- `spice_body_parameters` for a body's radii / GM.
- `spice_time_convert` UTC↔ET with an LSK loaded.
- `spice_fr

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/127) · 2026-05-29 · closed · outside contributor · 0 comments

### Tool: spice_time_convert (leap-second-kernel-backed ET / UTC / SCLK)

## Goal

Time conversions backed by the loaded leap-second (and optional spacecraft-clock) kernels: `str2et` / `et2utc` / `sce2s` / `scs2e`. The final shape (a separate `spice_time_convert` vs. extending the v0.1 `time_convert`) follows the kickoff overlap decision (#120).

## Tool surface

- **Name**: `spice_time_convert` (pending the kickoff overlap decision).
- **Inputs**:
  - `value: str` — the input time.
  - `from_scale` / `to_scale` — among ET (TDB seconds past J2000), UTC, and SCLK (spac

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/126) · 2026-05-29 · closed · outside contributor · 0 comments

### Tool: spice_body_parameters (radii, GM, orientation constants)

## Goal

Physical-parameter lookups — triaxial radii, GM, and orientation constants for a body. Backed by spiceypy `bodvrd` / `bodvcd`, reading whatever the loaded PCK provides.

## Tool surface

- **Name**: `spice_body_parameters`
- **Inputs**:
  - `body: str` — body name or NAIF ID.
  - `parameters: list[str] | None = None` — which constants to fetch (radii / GM / orientation); default returns the common set.
- **Output**: each requested constant as `{value, unit}` (radii km, GM km³/s², angles

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/125) · 2026-05-29 · closed · outside contributor · 0 comments

### Tool: spice_frame_transform (FK / TF / PCK frame queries)

## Goal

Frame transforms across frames SPICE exposes that the astropy path does not — e.g. non-Earth body-fixed frames from a loaded FK / PCK. Backed by spiceypy `pxform` / `sxform`. The final shape (a separate `spice_frame_transform` vs. extending the v0.1 `frame_transform`) follows the kickoff overlap decision (#120).

## Tool surface

- **Name**: `spice_frame_transform` (pending the kickoff overlap decision).
- **Inputs**:
  - `state: ... | None` — a 3- or 6-vector to rotate, or omitted to r

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/124) · 2026-05-29 · closed · outside contributor · 0 comments

### Tool: spice_load_kernel / spice_list_kernels / spice_unload_kernel (kernel management)

## Goal

Kernel-pool management — the stateful foundation every other SPICE tool depends on. Backed by spiceypy `furnsh` / `ktotal`+`kdata` / `unload`, implementing the concurrency and kernel-state model chosen at kickoff (#120).

## Tool surface

### `spice_load_kernel`
- **Inputs**: `source: str` — a local path or an allowlisted NAIF URL; optional `kind` hint (SPK / LSK / PCK / FK / SCLK).
- **Output**: the furnished kernel's resolved name, type, source, and handle; whether it was served from 

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/122) · 2026-05-29 · closed · outside contributor · 0 comments

### Tool: spice_state (SPK state / ephemeris queries)

## Goal

SPK state queries — position and velocity of a target relative to an observer at a given epoch. Backed by spiceypy `spkezr` / `spkgeo`.

## Tool surface

- **Name**: `spice_state`
- **Inputs**:
  - `target: str` — body name or NAIF ID.
  - `observer: str` — body name or NAIF ID.
  - `epochs: list[str]` — UTC ISO 8601 epochs (include a time component).
  - `frame: str = "J2000"` — reference frame.
  - `aberration: str = "NONE"` — aberration correction (`NONE` / `LT` / `LT+S` / …).
- **Ou

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/123) · 2026-05-29 · closed · outside contributor · 0 comments

### [spice] extra wiring + conditional tool registration + XDG kernel cache

## Goal

Wire the `[spice]` optional extra and the conditional-registration mechanism agreed at the SPICE kickoff (#120), so the per-tool issues drop in clean. The base install stays SPICE-free, mirroring the `[gmat]` gate (#70). No tool bodies yet.

## Scope

- `pyproject.toml`: `spice = ["spiceypy>=6.0"]` under `[project.optional-dependencies]`.
- `astrodynamics_mcp/tools/spice.py` skeleton: top-level `try: import spiceypy` guard; tools registered only when spiceypy is importable. Stateful-too

[Read the thread](https://github.com/astro-tools/astrodynamics-mcp/issues/121) · 2026-05-29 · closed · outside contributor · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/astro-tools/astrodynamics-mcp/issues).
