dda-mcp-server
# DDA MCP Server
An MCP (Model Context Protocol) server for controlling astronomy equipment. Supports Dark Dragons Astronomy devices and any ASCOM Alpaca-compatible equipment.
## Installation
```bash
npm install -g @darkdragonsastro/dda-mcp-server
```
Or run directly with npx:
```bash
npx @darkdragonsastro/dda-mcp-server
```
## Configuration
### Claude Desktop
Add to your Claude Desktop configuration file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"dda": {
"command": "npx",
"args": ["@darkdragonsastro/dda-mcp-server"]
}
}
}
```
### Claude Code
```bash
claude mcp add dda -- npx @darkdragonsastro/dda-mcp-server
```
## Tools
### Device Discovery
| Tool | Description |
|------|-------------|
| `discover_devices` | Discover Dark Dragons Astronomy devices on the local network via UDP broadcast |
| `discover_alpaca_devices` | Discover ASCOM Alpaca devices on the local network |
### Dark Dragons Astronomy Devices
#### DragonLAIR (Roll-off Roof Controller)
| Tool | Description |
|------|-------------|
| `get_device_status` | Get the current status of a device |
| `get_device_settings` | Get device settings including safety config, location, and motor settings |
| `open_roof` | Open the observatory roof |
| `close_roof` | Close the observatory roof |
| `abort_roof` | Abort the current roof operation |
| `get_mount_sensors` | Get status of mount sensors connected to a DragonLAIR |
| `locate_device` | Make a device beep/flash to help locate it physically |
#### Mount Sensor
| Tool | Description |
|------|-------------|
| `get_mount_sensor_status` | Get status of a standalone Mount Sensor (pitch, roll, safe position) |
#### DragonLIGHT (Flat Panel Controller)
| Tool | Description |
|------|-------------|
| `get_flat_panel_status` | Get flat panel status (on/off, brightness) |
| `turn_on_flat_panel` | Turn on the flat panel light |
| `turn_off_flat_panel` | Turn off the flat panel light |
| `set_flat_panel_brightness` | Set brightness level (0-255) |
### ASCOM Alpaca Devices
All Alpaca devices must first be connected using `alpaca_device_connect`.
#### Connection Management
| Tool | Description |
|------|-------------|
| `alpaca_device_connect` | Connect or disconnect any Alpaca device |
#### Telescope
| Tool | Description |
|------|-------------|
| `alpaca_telescope_status` | Get telescope position, tracking state, and slewing status |
| `alpaca_telescope_slew` | Slew to coordinates (RA/Dec or Alt/Az) |
| `alpaca_telescope_park` | Park or unpark the telescope |
| `alpaca_telescope_tracking` | Enable or disable tracking |
| `alpaca_telescope_abort` | Abort any slew in progress |
#### Camera
| Tool | Description |
|------|-------------|
| `alpaca_camera_status` | Get camera temperature, cooler state, and exposure status |
| `alpaca_camera_cooler` | Control cooler on/off and set target temperature |
| `alpaca_camera_expose` | Start a light or dark exposure |
| `alpaca_camera_abort` | Abort the current exposure |
#### Focuser
| Tool | Description |
|------|-------------|
| `alpaca_focuser_status` | Get focuser position, temperature, and movement state |
| `alpaca_focuser_move` | Move focuser to a specific position |
| `alpaca_focuser_halt` | Halt focuser movement |
#### Filter Wheel
| Tool | Description |
|------|-------------|
| `alpaca_filterwheel_status` | Get current filter position and available filters |
| `alpaca_filterwheel_set` | Change to a specific filter position |
#### Dome
| Tool | Description |
|------|-------------|
| `alpaca_dome_status` | Get dome shutter state, position, and slewing status |
| `alpaca_dome_shutter` | Open or close the dome shutter |
| `alpaca_dome_slew` | Slew dome to a specific azimuth |
#### Rotator
| Tool | Description |
|------|-------------|
| `alpaca_rotator_status` | Get rotator position and movement state |
| `alpaca_rotator_move` | Move rotator to absolute or relative position |
| `alpaca_rotator_halt` | Halt rotator movement |
#### Switch
| Tool | Description |
|------|-------------|
| `alpaca_switch_status` | Get status of all switches on a device |
| `alpaca_switch_set` | Set a switch on or off |
| `alpaca_switch_set_value` | Set a switch to a specific value |
#### Cover Calibrator
| Tool | Description |
|------|-------------|
| `alpaca_covercalibrator_status` | Get cover and calibrator state |
| `alpaca_covercalibrator_cover` | Open, close, or halt the cover |
| `alpaca_covercalibrator_calibrator` | Turn calibrator on (with brightness) or off |
#### Safety Monitor
| Tool | Description |
|------|-------------|
| `alpaca_safetymonitor_status` | Get safety monitor status (safe/unsafe) |
#### Observing Conditions (Weather)
| Tool | Description |
|------|-------------|
| `alpaca_observingconditions_status` | Get weather data (temperature, humidity, wind, cloud cover, etc.) |
## Supported Devices
### Dark Dragons Astronomy
- **DragonLAIR** - Roll-off roof controller with mount sensor integration
- **DragonLIGHT** - Flat panel controller for calibration frames
- **Mount Sensor** - Detects telescope position for safe roof operation
### ASCOM Alpaca Compatible
Any device implementing the ASCOM Alpaca API:
- Telescopes / Mounts
- Cameras (CCD/CMOS)
- Focusers
- Filter Wheels
- Domes
- Rotators
- Switches / Power Controllers
- Cover Calibrators / Flat Panels
- Safety Monitors
- Weather Stations
## License
ISC
TDQS
Scored across 43 tools
Most tools clearly specify the device type and action (e.g., alpaca_telescope_slew, open_roof). However, a few pairs like get_mount_sensors vs. get_mount_sensor_status and alpaca_switch_set vs. alpaca_switch_set_value could cause misselection.
Native device tools use verb_noun (open_roof, get_device_status), while Alpaca tools follow alpaca_<device>_<action> consistently. The dual scheme is predictable, though alpaca_device_connect slightly deviates from the standard pattern.
At 43 tools, the server far exceeds the 25-tool threshold for 'too many'. Many tools are simple status or control operations per device that could be consolidated into generic get_status or set_command functions.
The set covers discovery, connection, status, and control for all major device types (telescope, focuser, dome, camera, etc.). Minor gaps exist, such as no set_device_settings for native devices and no image retrieval for camera, but core workflows are represented.