npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

seestar-mcp

v0.1.0

Published

MCP server for ZWO Seestar telescopes over ASCOM Alpaca

Readme

seestar-mcp

MCP server for ZWO Seestar telescopes (S50 / S50 Pro / S30) over ASCOM Alpaca.

Point your telescope at a target, image it, then stack and process what it captured — from Claude Code, Claude Desktop, or any other MCP host.

Two servers ship in this package:

  • seestar-mcp drives the telescope: find it, point it, image, download the frames.
  • astro-mcp processes the frames with Siril and GraXpert: align, stack, flatten the background, denoise, stretch, export.
you → Claude ─┬→ seestar-mcp → seestar_alp → Seestar
              │       MCP        Alpaca/HTTP    TCP
              └→ astro-mcp   → Siril, GraXpert → PNG

They meet at a directory of files, not in code, so you can run either on its own. The processing side is documented in docs/processing.md.

seestar_alp is the driver that speaks the telescope's own protocol. It can run anywhere on your network; this server only needs HTTP access to it (default port 5555).

The Alpaca core is generic, so the standard telescope tools also work against any other Alpaca device — including the ASCOM simulators, which is how you can try this without a telescope.

Status: early development. The tools work and are tested, but nothing here has been run against real hardware yet. Expect rough edges under the stars.

Requirements

  • Node.js 20 or newer
  • A running seestar_alp instance (or any ASCOM Alpaca device, for the generic tools)

Install

Claude Code:

claude mcp add seestar -- npx -y seestar-mcp --host seestar.local

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "seestar": {
      "command": "npx",
      "args": ["-y", "seestar-mcp", "--host", "seestar.local"]
    }
  }
}

Replace seestar.local with the address of the machine running seestar_alp. Don't know it? Leave --host out and ask the model to run alpaca_discover — it will broadcast on the local network and list what answers.

Options

Every option can be given as a flag or an environment variable.

| Flag | Environment | Default | What it does | |---|---|---|---| | --host <address> | SEESTAR_HOST | — | Address of the Alpaca server | | --port <number> | SEESTAR_PORT | 5555 | Alpaca port | | --device <number> | SEESTAR_DEVICE | 1 | Device number — see the warning below | | --device-type <type> | SEESTAR_DEVICE_TYPE | telescope | Any Alpaca device type | | --timeout <ms> | SEESTAR_TIMEOUT_MS | 10000 | Per-request timeout | | --profile <name> | SEESTAR_PROFILE | auto | auto, seestar, or generic | | --read-only | SEESTAR_READ_ONLY | off | Register only tools that cannot move the telescope | | --allow-destructive | SEESTAR_ALLOW_DESTRUCTIVE | off | Allow shutdown and reboot | | --no-raw | SEESTAR_ALLOW_RAW=0 | raw on | Hide the raw firmware passthrough | | --client-id <number> | SEESTAR_CLIENT_ID | random | Fixed Alpaca ClientID |

Device numbers start at 1. On seestar_alp, device 0 is the "federation" — a command sent to it goes to every telescope it manages. Your first scope is device 1.

--profile auto decides whether the Seestar tools apply by looking at how the driver describes itself when you connect. Force it with seestar or generic if the guess is wrong.

Tools

Finding and connecting — work with any Alpaca server

alpaca_discover · alpaca_devices · device_connect · device_info

Mount — standard ASCOM, works with any Alpaca telescope

telescope_status · telescope_goto · telescope_sync · telescope_abort · telescope_park · telescope_unpark · telescope_find_home · telescope_set_tracking · telescope_action

Any other device — focuser, filter wheel, dome, switch…

alpaca_get_property · alpaca_put

Seestar

seestar_state (battery, storage, firmware) · seestar_events (progress of everything slow) · seestar_view_state · seestar_settings · seestar_set_settings · seestar_startup · seestar_goto_target (plate-solved, centred) · seestar_stop_goto · seestar_autofocus · seestar_filter_wheel · seestar_dew_heater · seestar_raw · seestar_power

Imaging

imaging_start (single target or mosaic) · imaging_start_stack · imaging_stop · imaging_solve · imaging_last_image

Scheduler — plan a night and let the telescope run it

schedule_get · schedule_create · schedule_add_item · schedule_remove_item · schedule_control

Files — get what was captured onto this computer

imaging_albums · imaging_download

Processing (the astro-mcp server)

astro_tools · session_list · astro_inspect · process_session · astro_stack · astro_background_extract · astro_denoise · astro_deconvolve · astro_color_calibrate · astro_stretch · astro_remove_stars · astro_export · astro_run_script · astro_job

A session, roughly

  1. seestar_startup — unfold and calibrate; watch the Initialise event
  2. seestar_state — is there enough battery and disk for the night?
  3. seestar_goto_target — plate-solved goto, so the object is actually centred
  4. imaging_start — stack for as long as you like, or capture a mosaic
  5. seestar_events — how many frames have stacked, what stage the scope is in
  6. imaging_last_image — a URL to the latest frame, served by the telescope
  7. telescope_park — close the arm

Anything slow reports progress through seestar_events rather than blocking. seestar_goto_target and seestar_startup also take wait: true when you would rather have one answer than poll.

Then, once the frames are on your computer (imaging_download), hand them to the other server:

process_session { session: "M31", preset: "standard", output: "m31.png" }

See docs/processing.md for the presets, the individual steps, and what has to be installed for each.

Safety

  • --read-only registers only the tools that cannot move anything — the model never sees the rest.
  • seestar_power (shutdown, reboot) needs both --allow-destructive at startup and confirm: true in the call. A telescope that has been shut down cannot be woken remotely.
  • seestar_raw and alpaca_put have no guard rails by design. --no-raw hides the firmware one.

Without a telescope

yarn sim:fetch                                    # downloads the ASCOM simulators
.cache/omnisim/*/ascom.alpaca.simulators --urls=http://127.0.0.1:32323
npx -y seestar-mcp --host 127.0.0.1 --port 32323 --device 0 --profile generic

The simulators cover telescope, camera, focuser, filter wheel and more, so the standard tools all work. The Seestar-specific ones do not — nothing but a Seestar implements them.

Development

yarn install
yarn test          # unit + integration against the built-in fakes
yarn test:sim      # downloads the ASCOM simulators and tests against them
yarn test:siril    # downloads Siril and runs the processing pipeline for real
yarn typecheck
yarn lint

No telescope and no simulator are needed for the first suite: test/fake/ implements an Alpaca server with Seestar semantics in-process — a mount that takes time to slew, the firmware event stream, the scheduler, and injectable failures.

The second suite runs the same client against the ASCOM Alpaca Simulators, the reference implementation of the specification. The binaries are self-contained (no .NET runtime needed) and are cached in .cache/.

Before pointing this at real hardware, work through docs/hardware-checklist.md.

License

MIT