MARS (MCP Astronomy Research Suite) is an agentic, tool-enabled system for
automated astronomy: a registry of purpose-built tools — SIMBAD, NED, VizieR,
ATNF, MAST, MPC, CASDA and ADS queries, plus local pulsar, variable-star,
optical photometry, plate-solving, HR-diagram and radio-source pipelines —
that an LLM agent plans and executes research tasks with. Serve them over MCP
to your own coding agent, or drive them from the mars console.
The algorithms behind the tools come from two production systems built around the Skynet Robotic Telescope Network at the University of North Carolina at Chapel Hill: Skynet itself, extracted directly into Python, and Astromancer, its light-curve, periodogram and star-cluster web application, ported from TypeScript. They are extractions, not rewrites — algorithms, constants, comments and known bugs are preserved, and the test suite checks bit-for-bit parity with recorded Skynet output rather than "fixing" it in transit.
From an MCP host (Claude Code, Claude Desktop, Codex, Cursor, …), with no
checkout — install skynet-mars on
Python 3.13 and register its server:
uv tool install --python 3.13 "skynet-mars[mcp]"
mars-mcp self-test # runs a pulsar detection end to end
claude mcp add --scope user mars -- /full/path/to/mars-mcpOther hosts, the optional data bundles (mars-mcp fetch-data), credentials
and where files go are in docs/installing.md.
From a checkout, run the console. It needs a model backend — Anthropic by
default (ANTHROPIC_API_KEY), or OpenAI-compatible, Gemini, or a local Ollama
daemon, switchable in the session with /backend:
uv sync
uv run marsThe console's commands, keys and flags are in
docs/tool-architecture.md §10.2;
backend settings are in §10.
Every tool is also a plain Python function (from tools.simbad import search_simbad), listed in
§2.
Three optional optical frames are Git LFS objects (git lfs pull); see
data/README.md.
| Path | What it holds |
|---|---|
tools/ |
The public tool surface: plain Python wrappers, the tool registry, the agent loop (agent/), the model port (llm/), the mars console (tui/), the MCP server (mcp/), and the benchmark harness (bench/). |
algorithms/ |
The extracted Skynet packages (wcs/, photometry/, fieldcal/, catalogs/, query/, shared skylib_lite/), the Astromancer ports (pulsar/, variable_star/, hrdiagram_py/), and the new radio/. |
skills/mars-tools/ |
The agent skill for using the tools, generated from tools/skill/source/. |
tests/ |
Algorithm-preservation and tool-smoke tests; no network by default. |
data/ |
Fixture frames, pulsar scans and recorded reference solves. |
benchmarks/, docs/ |
The model benchmark corpus; the documentation. |
docs/README.md— the documentation map.docs/installing.md— installing with no checkout, registeringmars-mcp, data bundles.docs/tool-architecture.md— the architecture: public tools, algorithm ownership, the agent loop, console, benchmark and MCP server.docs/repository-folders.md— every folder, its important files, and its configuration (WCS solver and ATLAS catalog setup, VizieR settings).docs/extraction.md— upstream provenance, severed dependencies and preserved parity quirks, per package.docs/pulsar-tool-pipeline.md— the four-stage pulsar chain.docs/benchmarking/README.md— the model benchmark and its results.docs/releasing.md— how releases and data bundles are cut.tests/README.md— what the test suite proves and what it does not cover.
Target dev, keep changes narrow, and run the checks CI enforces
(uv run pytest, python3 -m compileall tools algorithms tests,
git diff --check). See
CONTRIBUTING.md,
and AGENTS.md for
agentic contributors.
Copyright (C) 2026 Skynet Robotic Telescope Network.
MARS is licensed under the GNU General Public License v3.0 only
(GPL-3.0-only); the full text is LICENSE. It is the licence of
the Skynet projects it grew from: Astromancer and Skycat carry the same text.
The code under algorithms/ comes from three places (provenance per file in
docs/extraction.md):
- Skynet, by the same group as MARS:
skyliband the optical processing inskynet-db, extracted intoalgorithms/skylib_lite/,wcs/,photometry/,fieldcal/andcatalogs/. - Astromancer, by the same
group, GPL-3.0: ported to Python in
algorithms/pulsar/,algorithms/variable_star/andalgorithms/hrdiagram_py/. - Afterglow Core, Apache-2.0: parts of the query layer in
algorithms/query/. Apache-2.0 code may be combined into a GPL-3.0 work.
Files that carry their own third-party notice — for example the BSD-3-Clause
header in algorithms/skylib_lite/util/overlap.py — keep it, and those terms
apply to those files as well.
