MCP server (LLM/agent integration)#
dsgp4 ships an optional Model Context Protocol (MCP) server
that exposes the library to large language models and agents: once connected, an LLM client
(Claude Desktop, Claude Code, IDEs, agent frameworks) can call dSGP4 directly — parse and
validate TLEs, propagate orbits, compute autodiff Jacobians and covariances, fit TLEs, run
ML-dSGP4 forecasts and render orbit plots — instead of writing and executing Python code.
Note
This layer is experimental. The library functionality behind it is stable, but the MCP Python SDK is still evolving quickly, so the server surface (tool names, output fields) may be adjusted in future releases.
Installation#
The server is an optional extra (it requires Python >= 3.10):
$ pip install dsgp4[mcp]
This installs the dsgp4-mcp command (equivalently: python -m dsgp4.mcp). Running it starts
an MCP server; on its own it just waits for a client, so the interesting part is registering it
with an LLM client, below.
Connecting it to an LLM#
An MCP client is the bridge: you register the server with the client once, and from then on the LLM sees the dSGP4 tools and calls them on its own when a conversation needs them (you can then simply paste a TLE in the chat and ask for an analysis).
Claude Code (terminal):
$ claude mcp add dsgp4 -- dsgp4-mcp
Claude Desktop (Settings → Developer → Edit Config, i.e. claude_desktop_config.json) and
most other command-based MCP clients (Cursor, VS Code, …):
{
"mcpServers": {
"dsgp4": {
"command": "dsgp4-mcp"
}
}
}
With this configuration the client launches dsgp4-mcp itself and talks to it over
stdin/stdout (the default stdio transport); there is nothing to keep running manually.
Note
The client must be able to find dsgp4-mcp in the environment where dsgp4[mcp] is installed.
If you installed it in a conda/virtual environment, either use the absolute path of the
dsgp4-mcp script in the command field, or use the environment’s interpreter explicitly:
"command": "/path/to/env/bin/python", "args": ["-m", "dsgp4.mcp"].
By default all the tool domains are enabled; a narrower server can be registered by adding
arguments, e.g. "args": ["--domains", "tle,propagation"].
URL-based clients (HTTP transport)#
Clients that connect to a URL instead of launching a command (web-based agents, remote setups, several clients sharing one server) can use the HTTP transport:
$ dsgp4-mcp --transport streamable-http --port 8000
and point the client at http://127.0.0.1:8000/mcp. Note that this endpoint speaks the MCP
JSON-RPC protocol — it is an API for MCP clients, not a web page for a browser. The server
binds 127.0.0.1 (local machine only) by default and has no authentication: do not expose it
on a network (--host 0.0.0.0) unless it is behind a reverse proxy or on a trusted network.
Trying it without an LLM#
The MCP Inspector provides a browser UI to explore and call the tools by hand:
$ npx @modelcontextprotocol/inspector dsgp4-mcp
What the LLM gets#
The tools are organized in six domains (each can be disabled via --domains):
Domain |
Tools |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Conventions shared by every tool: element-set inputs accept a TLE (two or three lines in one string) or a CCSDS OMM message; times are minutes since the element-set epoch or ISO 8601 UTC dates; output states are in the TEME frame, in km and km/s.
The server also exposes reference resources the model can read (dsgp4://reference/...:
conventions, the TLE and OMM formats, the nine differentiable SGP4 parameters and their
internal units, gravity constants, example element sets) and workflow prompts
(characterize_orbit, compare_orbits, uncertainty_analysis, tle_determination,
mldsgp4_training_guide) that guide the model through multi-tool analyses.
Once connected, things you can ask the LLM directly:
“Here is a TLE: … — validate it, describe the orbit and plot one revolution.”
“Propagate these three TLEs to 2024-03-27T12:00:00 UTC and compare their positions.”
“How sensitive is the position after one day to the mean motion? Show the Jacobian.”
“Map this covariance of the mean elements to a Cartesian covariance at epoch + 60 min.”
“Re-epoch this TLE to next Monday 00:00 UTC.”
Programmatic use#
The server can also be created and run from Python:
from dsgp4.mcp import create_server
server = create_server() # or create_server(domains=["tle", "propagation"])
server.run(transport="stdio")