{
  "markdown": "# astrodynamics-mcp\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server that\ngives any MCP-capable LLM client (Claude Code, Cursor, ChatGPT desktop,\ncustom agents) authoritative astrodynamics tools: TLE/SGP4 propagation,\nLambert solving, ground-station access, time-scale and coordinate-frame\nconversions, porkchop scans, B-plane targeting, satellite metadata, and\n— with optional extras — full NASA GMAT mission execution (`[gmat]`),\nNASA SPICE / NAIF kernel queries (`[spice]`), and trajectory visualisation\n(`[viz]`).\n\n## Why\n\nLLMs reason well about astrodynamics concepts but cannot do the\nnumerical work — they cannot propagate orbits, solve Lambert problems,\nor query SPICE ephemerides. `astrodynamics-mcp` lets you plug\nauthoritative tools into any MCP-capable client so the LLM calls vetted\nupstream libraries instead of fabricating numbers. Every result carries\nexplicit units; every tool description tunes against an\n[Inspect AI eval suite](https://github.com/astro-tools/astrodynamics-mcp/tree/main/eval)\nthat measures whether the LLM picks the right tool and binds the right\narguments.\n\n## Tools\n\n| Tool              | What it does                                              | Backed by                |\n| ----------------- | --------------------------------------------------------- | ------------------------ |\n| `tle_lookup`      | Fetch current TLEs by NORAD ID, name, or group — from CelesTrak (default) or Space-Track. | CelesTrak `gp.php` API · Space-Track † |\n| `sgp4_propagate`  | Propagate TLEs across UTC ISO 8601 epochs in TEME / ICRF / GCRS / ITRS / CIRS. | `sgp4`            |\n| `lambert_solve`   | Solve Lambert's problem; multi-rev solutions enumerated; two-impulse Δv on demand. | `lamberthub`     |\n| `access_windows`  | Ground-station / observer access intervals over a window, with AOS / LOS / peak elevation. | `skyfield`     |\n| `time_convert`    | UTC / TAI / TT / TDB / UT1 / GPS / TCB / TCG conversions across ISO / JD / MJD / J2000-seconds / Unix. | `astropy.time`   |\n| `frame_transform` | State-vector transforms across ICRF / ITRS / GCRS / TEME / CIRS / TIRS / IAU body-fixed frames. | `astropy.coordinates` |\n| `porkchop`        | (depart × arrive) Δv / C3 grid for interplanetary transfers, ASCII contour, summary or full output. | `lamberthub` + JPL Horizons |\n| `bplane_target`   | B-plane element calculation and impulsive targeting for hyperbolic flybys. | in-house, JPL Horizons fed |\n| `satellite_metadata` | Physical & provenance metadata (mass, dimensions, COSPAR ID, launch, operator, decay status) for a NORAD ID. | ESA DISCOSweb † |\n\n**†** Credentialed source. Pass credentials as environment variables for\nthe stdio transport, or in the session-init `_meta` block for HTTP — see\n[Credentials](https://astro-tools.github.io/astrodynamics-mcp/credentials/).\nA tool called without its credential returns a typed\n`CredentialRequiredError`, never a silent failure.\n\n### GMAT tools (optional `[gmat]` extra)\n\nInstall the `[gmat]` extra and have a local [NASA GMAT](https://sourceforge.net/projects/gmat/)\ninstall, and five more tools register for driving real GMAT missions\n(they stay hidden otherwise):\n\n| Tool                    | What it does                                              | Backed by      |\n| ----------------------- | --------------------------------------------------------- | -------------- |\n| `gmat_run_mission`      | Run a complete GMAT mission; returns a parsed summary, report data, and pointers to large outputs. | `gmat-run`   |\n| `gmat_sweep`            | Parameter sweeps and Monte Carlo (grid / samples / Monte Carlo / Latin hypercube) over a mission. | `gmat-sweep` |\n| `gmat_execute_script`   | Escape hatch — run raw GMAT script text and return its reports verbatim; engine errors come back as data. | `gmat-run` |\n| `gmat_validate_script`  | Parse-validate a script without running it; returns errors, warnings, and the resource/command structure. | `gmat-run` |\n| `gmat_read_run_artefact`| Read the raw text of a file produced by a prior run (ephemerides, reports too large to inline). | run registry |\n\n### SPICE tools (optional `[spice]` extra)\n\nInstall the `[spice]` extra and seven more tools register, backed by NASA\nNAIF's CSPICE through [`spiceypy`](https://github.com/AndrewAnnex/SpiceyPy)\n(they stay hidden otherwise). They furnish kernels into a process-global\npool and query whatever the pool holds:\n\n| Tool                    | What it does                                              | Backed by      |\n| ----------------------- | --------------------------------------------------------- | -------------- |\n| `spice_load_kernel`     | Furnish a kernel into the pool from a local path or a NAIF `https` URL (allowlisted, cached); a meta-kernel furnishes all it lists. | `spiceypy` · NAIF |\n| `spice_list_kernels`    | List the kernels currently furnished in the pool, optionally filtered by category. | `spiceypy` |\n| `spice_unload_kernel`   | Drop a furnished kernel by the `name` `spice_load_kernel` returned. | `spiceypy` |\n| `spice_state`           | Position / velocity of a target relative to an observer at one or more epochs, from furnished SPK kernels. | `spiceypy` (SPK) |\n| `spice_frame_transform` | Rotate a vector between kernel-defined frames — in particular non-Earth body-fixed frames — or return the rotation matrix. | `spiceypy` (FK / PCK) |\n| `spice_body_parameters` | Read a body's radii, GM, and pole / prime-meridian orientation constants from furnished PCK kernels. | `spiceypy` (PCK) |\n| `spice_time_convert`    | Convert between the kernel-defined time systems ET / UTC / SCLK using furnished LSK / SCLK kernels. | `spiceypy` (LSK / SCLK) |\n\nThe kernel model, the NAIF furnish-from-URL allowlist, and the\nprocess-global pool's trust boundary are covered on the\n[SPICE integration](https://astro-tools.github.io/astrodynamics-mcp/spice-integration/)\npage.\n\n### Visualisation tools (optional `[viz]` extra)\n\nInstall the `[viz]` extra and four more tools register, backed by\n[`matplotlib`](https://matplotlib.org/) (static PNG plots) and the\n[`gmat-czml`](https://github.com/astro-tools/gmat-czml) sibling (CZML export)\n— they stay hidden otherwise. Each returns its picture as an attachment\n*alongside* a numeric summary, so a text-only client still gets the answer:\n\n| Tool                | What it does                                              | Backed by      |\n| ------------------- | --------------------------------------------------------- | -------------- |\n| `plot_ground_track` | Render a satellite's sub-satellite ground track as a PNG over a lon/lat graticule, with the latitude / longitude extent inline. | `matplotlib` |\n| `plot_trajectory`   | Render an orbit or transfer arc as a 2D or 3D PNG about a central body, with arc length and apsides inline. | `matplotlib` |\n| `plot_porkchop`     | Render a porkchop C3 contour as a PNG from a full `porkchop` grid result — no recompute — with the best cell marked. | `matplotlib` |\n| `czml_trajectory`   | Export a trajectory as a CZML document for a Cesium 3D client, returned as an embedded resource. | `gmat-czml`  |\n\nThe attachment model — additive PNG `ImageContent` / CZML `EmbeddedResource`\nbeside the structured summary — and which clients render each kind are covered\non the\n[Visualisation](https://astro-tools.github.io/astrodynamics-mcp/visualisation/)\npage.\n\nFull input / output JSON schemas live on the\n[Tool reference](https://astro-tools.github.io/astrodynamics-mcp/tool-reference/)\npage of the docs site.\n\n## Quick start\n\nInstall:\n\n```bash\nuv tool install astrodynamics-mcp            # or: pipx install astrodynamics-mcp\nuv tool install \"astrodynamics-mcp[gmat]\"    # adds the GMAT mission tools (needs a local GMAT install)\nuv tool install \"astrodynamics-mcp[spice]\"   # adds the SPICE tools (pulls spiceypy / bundled CSPICE)\nuv tool install \"astrodynamics-mcp[viz]\"     # adds the visualisation tools (pulls matplotlib / gmat-czml)\n```\n\n### Claude Code\n\nAdd to your Claude Code MCP settings:\n\n```json\n{\n  \"mcpServers\": {\n    \"astrodynamics-mcp\": {\n      \"command\": \"astrodynamics-mcp\",\n      \"args\": [\"stdio\"]\n    }\n  }\n}\n```\n\nRestart Claude Code. In a chat:\n\n> **You:** Compute the Hohmann Δv from a 250 km circular LEO to GEO.\n>\n> *(The model calls `lambert_solve` with the Hohmann geometry and\n> answers ≈ 3.91 km/s, citing the tool output — not the LLM's own\n> weights.)*\n\n### Cursor\n\n`~/.cursor/mcp.json` (or workspace-level `.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"astrodynamics-mcp\": {\n      \"command\": \"astrodynamics-mcp\",\n      \"args\": [\"stdio\"]\n    }\n  }\n}\n```\n\nRestart Cursor. The tools appear under the `astrodynamics` server group.\n\nSee\n[Pick a client](https://astro-tools.github.io/astrodynamics-mcp/pick-a-client/)\nin the docs for ChatGPT desktop, a raw Python MCP smoke client, and the\nStreamable HTTP transport for remote agents.\n\n## Supported clients\n\n| Client                       | Transport       | Verified              |\n| ---------------------------- | --------------- | --------------------- |\n| Claude Code                  | stdio           | ✅ Yes                |\n| Cursor                       | stdio           | ✅ Yes                |\n| ChatGPT desktop              | stdio           | ⏳ Expected to work   |\n| Raw Python (`mcp` SDK)       | stdio           | ✅ Yes                |\n| Remote agents                | Streamable HTTP | ⏳ Expected to work   |\n| LangGraph / AutoGen / CrewAI | any             | ⏳ Expected to work   |\n\n## What this is not\n\n- **Not a general-purpose astrodynamics framework.** Wraps vetted\n  upstream libraries; does not re-implement propagators, integrators,\n  or coordinate systems.\n- **Not an agent framework.** Exposes MCP tools; LangGraph, AutoGen,\n  CrewAI, and the LLM clients themselves consume them.\n- **Not an ML / inference server.** Tools that need their own ML\n  models (maneuver detection, neural propagators) belong in separate\n  MCP servers — kept modular for dependency isolation.\n- **Not a SaaS.** Runs locally or in your own infrastructure. No\n  hosted multi-tenant deployment.\n- **Not a web UI.** Tool consumption is via MCP clients; no browser\n  frontend, no desktop app, no notebook widget.\n\nFor direct (non-MCP) Python use of the same surfaces, reach for the\nupstream libraries:\n[`sgp4`](https://github.com/brandon-rhodes/python-sgp4),\n[`lamberthub`](https://github.com/jorgepiloto/lamberthub),\n[`skyfield`](https://rhodesmill.org/skyfield/),\n[`astropy`](https://www.astropy.org/),\n[`interplanetary-porkchop`](https://github.com/mlewicki/interplanetary-porkchop),\n[`spiceypy`](https://github.com/AndrewAnnex/SpiceyPy).\n\n## Built on\n\nThe official Anthropic\n[`modelcontextprotocol/python-sdk`](https://github.com/modelcontextprotocol/python-sdk)\n(MIT). The bundled FastMCP server class is the server primitive;\nstdio + Streamable HTTP transports are first-class.\n\n## Docs and links\n\n- **Docs site:** [astro-tools.github.io/astrodynamics-mcp](https://astro-tools.github.io/astrodynamics-mcp/)\n  — getting started, per-client setup, tool reference, recipes,\n  visualisation, data sources, eval suite, FAQ.\n- **Issue tracker:** [astro-tools/astrodynamics-mcp/issues](https://github.com/astro-tools/astrodynamics-mcp/issues)\n- **Discussions:** [orgs/astro-tools/discussions](https://github.com/orgs/astro-tools/discussions)\n  — usage help and open-ended questions.\n- **Eval suite:** [eval/README.md](https://github.com/astro-tools/astrodynamics-mcp/tree/main/eval#readme)\n  — the regression contract on tool-description quality.\n\n## Privacy\n\n`astrodynamics-mcp` runs entirely on your own machine and collects\nnothing — no telemetry, no analytics, no accounts. The only data that\nleaves your machine is the query parameters a tool sends to the data\nsource it wraps (CelesTrak / JPL Horizons / IERS with no auth, and —\nonly if you configure their credentials — Space-Track and ESA DISCOSweb).\nCredentials are read from local environment variables or the session\n`_meta` block and are sent only to their own service over HTTPS. See the\n[Privacy page](https://astro-tools.github.io/astrodynamics-mcp/privacy/)\nfor the full breakdown.\n\n## License\n\nMIT — see [LICENSE](https://github.com/astro-tools/astrodynamics-mcp/blob/main/LICENSE).\n\n<!-- mcp-name: io.github.astro-tools/astrodynamics-mcp -->\n\n",
  "bytes": 12311,
  "sha": "b472e92dbb8eae8aaa820f3b333abbaf3b1ffa2bd6b17af3759b7baa6668a13e",
  "repo_slug": "astro-tools/astrodynamics-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_astro_tools_astrodynamics_mcp_8b92b898/readme"
}