Releases: astro-tools/astrodynamics-mcp
v0.4.0
The visualisation release. Adds four visualisation tools behind an
optional [viz] extra — three matplotlib static-plot tools
(plot_ground_track, plot_trajectory, plot_porkchop) returning PNG
images, and czml_trajectory, which exports a CZML document for a Cesium
3D client via the gmat-czml sibling. Every viz tool returns its picture
alongside the numeric summary — a PNG ImageContent or a CZML
EmbeddedResource added to, never replacing, the structured / ASCII
output — so a text-only client still gets the answer. The tools register
only when the extra is importable (pip install astrodynamics-mcp[viz]),
so the base install stays viz-free.
Added
- Visualisation tools behind an optional
[viz]extra — three matplotlib
static-plot tools and one CZML export tool, plus the additive attachment
output channel they share.plot_ground_trackrenders a sub-satellite
ground track over a lon / lat graticule;plot_trajectoryrenders a 2D
or 3D orbit / transfer arc about a central body;plot_porkchoprenders
a C3 contour from an existingporkchopgrid with no recompute; and
czml_trajectoryexports a trajectory as a CZML document for a Cesium
client. PNGs come back asImageContent, CZML as anEmbeddedResource,
each beside the inline numeric summary that stays the default. PNG
rendering is deterministic — the headless Agg backend, a fixed DPI, and
stripped version / timestamp metadata chunks make repeated renders
byte-identical within a matplotlib version, so the same call returns an
identical image over stdio and Streamable HTTP. The slots register only
under the[viz]install, the same gate the[gmat]and[spice]
extras use (#131, #132, #133). - Eval-suite visualisation coverage — a single-tool prompt for each of the
four viz tools plus a sequentialsgp4_propagate→plot_ground_track
prompt, scored by an attachment-aware hybrid scorer that asserts an
attachment is produced and carries its declared type (ImageContent
versusEmbeddedResource); arequires_vizgate skips these prompts
when the extra is absent, mirroringrequires_spice/requires_gmat.
Plus two runnable example sessions — a static-plot session and a
CZML-export session — each shipping a markdown transcript and a Python
script that drives the same sequence against an in-process MCP server
(#134). - Documentation for the v0.4 surface: a Visualisation page covering the
plot tools,czml_trajectory, the additive attachment model
(ImageContent/EmbeddedResource), and which clients render images
versus CZML; tool-reference entries for all four tools; output-shaping
and supported-clients updates; the[viz]install line; and the viz
tools table in the README (#136).
v0.3.0
The SPICE / NAIF release. Adds seven SPICE tools behind an optional
[spice] extra — kernel furnishing, SPK ephemeris state, frame
rotations, body parameters, and kernel-defined time conversions — backed
by NASA NAIF's CSPICE through spiceypy. The tools register only when
spiceypy is importable (pip install astrodynamics-mcp[spice]), so the
base install stays SPICE-free.
Added
- SPICE tools behind an optional
[spice]extra — the kernel-management
trio (spice_load_kernel,spice_list_kernels,spice_unload_kernel)
plus four query tools:spice_state(SPK position / velocity with
light-time),spice_frame_transform(FK / PCK / TF frame rotations),
spice_body_parameters(PCK radii / GM / pole and prime-meridian
constants), andspice_time_convert(ET / UTC / SCLK via LSK / SCLK
kernels). The tools furnish kernels into a process-global pool and
query whatever the pool holds; every CSPICE call is serialised onto one
dedicated worker thread, andhttpsloads route through a NAIF-host
allowlist and the XDG kernel cache. The slots register identically on
stdio and Streamable HTTP (#120, #121, #122, #123, #124, #125, #126). - Eval-suite SPICE coverage plus a fourth runnable example session — a
Mars-state query that furnishes NAIF kernels and reads an SPK state —
shipping a markdown transcript and a Python script that drives the same
sequence against an in-process MCP server and asserts numerical
tolerance (#127). - Documentation for the v0.3 surface: a SPICE-integration design page
covering the kernel model, the NAIF furnish-from-URL allowlist, and the
process-global pool's trust boundary; tool-reference entries for all
seven tools; and the[spice]install line and tools table in the
README (#120, #129).
v0.2.2
Repository packaging only; no change to the installed package, tool
behaviour, or numerical output.
Added
- A root
.mcp.jsonand a.plugin/plugin.jsonmanifest, following the
Open Plugin Specification, so the repository
is auto-detectable — with real plugin metadata (name, description,
author, homepage, license, keywords) instead of placeholders — by
directory scanners such as the Cursor Directory. The.mcp.jsonruns
the server zero-install viauvxwith the[gmat]extra (so the GMAT
tools are available when a local GMAT install is present) and doubles as
a copy-paste client config.
Changed
- Standardised the client-config alias to
astrodynamics-mcp(from
astrodynamics) across the README, docs, and example transcripts, so
the alias the client groups the tools under matches the package and
plugin name.
v0.2.1
Packaging and metadata polish for directory submission; no change to tool
behaviour or numerical output.
Added
- A human-readable
titleon every tool's annotations (e.g. "TLE
Lookup", "GMAT Run Mission"), so MCP clients and directories can show a
display name alongside the tool id. - A Privacy page
and a README Privacy section documenting that the server runs locally
and collects nothing; the MCPB manifest now declares a
privacy_policiesURL. - Project logo committed to the repository.
Changed
- Refreshed the MCPB bundle's
long_descriptionto cover the full v0.2
tool surface (satellite_metadata, the GMAT tools, the Space-Track
source); it previously described only the eight v0.1 tools.
v0.2.0
The GMAT integration release. Adds GMAT mission execution, parameter
sweeps, and script validation behind an optional [gmat] extra;
credential passthrough for Space-Track and ESA DISCOSweb; a
satellite_metadata tool; and a wider eval suite and CI matrix. Drops
the Smithery publishing path.
Added
- GMAT integration tools behind an optional
[gmat]extra —
gmat_run_mission,gmat_sweep,gmat_execute_script,
gmat_validate_script, andgmat_read_run_artefact, wrapping
gmat-runandgmat-sweep. The tools register only whengmat-run
is importable (pip install astrodynamics-mcp[gmat]), so the base
install stays GMAT-free. Each call runsgmatpyin an isolated
subprocess: gmatpy bootstraps a single global Moderator that
successive runs in one interpreter would corrupt, and its C++ run loop
holds the GIL, so isolation keeps runs from leaking state into each
other or blocking the server's event loop (#70, #71, #72, #73, #82,
#91). - GMAT script skeletons shipped as MCP resources under
gmat-skeleton://URIs — 20 vetted mission archetypes (LEO / GEO /
lunar transfers, Hohmann, B-plane targeting, finite- and
electric-propulsion burns, LEO and lunar station-keeping, contact and
eclipse location, attitude pointing, constellations, control flow) to
seed LLM-assisted script authoring (#83). - Credential passthrough for credentialed data sources — environment
variables for the stdio transport, session-init_metametadata for
HTTP. A tool that needs a credential it cannot find raises a typed
CredentialRequiredError(stablecredential_required.<source>code,
naming the missing fields) rather than failing silently (#67). - Space-Track as an alternate source for
tle_lookupvia
source="space-track", for recent launches and as a CelesTrak
fallback. Requires Space-Track credentials; CelesTrak stays the
no-auth default (#74). satellite_metadata— physical and provenance metadata (mass,
bounding-box dimensions, COSPAR ID, launch date and site, operator,
mission type, decay status) for a NORAD ID, backed by ESA DISCOSweb.
Requires a DISCOSweb bearer token (#75).- Eval suite expanded to 40 prompts with GMAT-tool and credentialed-tool
coverage. GMAT and credentialed prompts skip — rather than fail — when
their prerequisites are absent, so the suite runs without secrets or a
GMAT install (#76). - Multi-model offline eval workflow for release-cut comparison across
the GitHub Models catalogue, separate from the per-PR gate (#69). - macOS added to the CI test matrix — now Ubuntu, Windows, and macOS ×
Python 3.10 / 3.11 / 3.12 (#68). - Documentation for the v0.2 surface: a GMAT-integration design page
recording the tool-granularity, HTTP-transport, and[gmat]-extra
decisions, plus tool-reference and recipe updates (#66, #77).
Changed
- Typed
AstroMCPErrorenvelopes now reach the wire on every tool — the
code,message, anddatafields serialise into the MCP error
response so the LLM consumer can branch on a stable code, and
non-finite (NaN/Inf) values are rejected at theQuantity
boundary instead of leaking into a response (#108). - Data-layer hardening across the adapters: per-event-loop client
lifecycle with clean shutdown, stale-cache fallback on upstream
outage, correct Space-Track query encoding, and caching of Horizons
in-band errors (#110).
Fixed
- Contained the basename fallback in
gmat_read_run_artefactso a
craftednamecannot escape the run's output directory — artefact
reads are confined to direct children of the run workspace (#109).
Removed
- Smithery publishing infrastructure. The canonical MCPB bundle ships
with an emptytools[](clients discover tools over the MCP protocol
at runtime), but Smithery requires a populatedtools[]to List a
server — an irreconcilable conflict — so the Smithery-specific bundle
and its publish job are removed. PyPI, the Official MCP Registry, and
the GitHub Release MCPB asset remain the distribution path (#64).
v0.1.5
What's Changed
- Cut v0.1.5: claim Output Schemas + Annotations + Parameter Descriptions on Smithery by @djankov in #63
Full Changelog: v0.1.4...v0.1.5
v0.1.4
What's Changed
Full Changelog: v0.1.3...v0.1.4
v0.1.3
What's Changed
Full Changelog: v0.1.2...v0.1.3
v0.1.2
What's Changed
Full Changelog: v0.1.1...v0.1.2
v0.1.1
What's Changed
Full Changelog: v0.1.0...v0.1.1