nina-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NINA_HOST | No | Host of the NINA Advanced API server. | 127.0.0.1 |
| NINA_PORT | No | Port of the NINA Advanced API server. | 1888 |
| TS_ALLOW_WRITES | No | Set to 'true' to enable write operations on Target Scheduler database. | false |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| nina_get_all_equipment_infoA | Get a single combined status snapshot of every equipment category NINA knows about (camera, mount, filter wheel, focuser, rotator, dome, flat device, guider, safety monitor, switch, weather). Good first call to orient yourself on what's connected before doing anything else. |
| nina_list_devicesA | List the devices NINA's device chooser sees for a given category
(e.g. every ASCOM/native mount driver detected), each with an Id you
can pass to |
| nina_connect_deviceA | Connect a piece of equipment. If |
| nina_disconnect_deviceC | Disconnect a piece of equipment. |
| nina_rescan_devicesA | Re-scan for available devices in a given category (useful after plugging in USB hardware or restarting an ASCOM driver). |
| nina_get_event_historyA | Get NINA's recent event/notification history (the same stream sent over its websocket), most recent first. Useful for polling status changes -- including Target Scheduler's TS-WAITSTART / TS-TARGETSTART / TS-NEWTARGETSTART events -- without holding an open websocket connection open from an MCP tool call. |
| nina_mount_infoA | Get full mount status: RA/Dec, altitude/azimuth, tracking state, parked/homed state, slewing state, site coordinates, and more. |
| nina_mount_homeA | Send the mount to its home position. Fails if not connected or parked (unpark first). |
| nina_mount_parkC | Park the mount. |
| nina_mount_unparkA | Unpark the mount. |
| nina_mount_set_tracking_modeA | Set the mount's tracking mode/rate. mode: one of "sidereal", "lunar", "solar", "king", "stopped". |
| nina_mount_slewA | Slew the mount to J2000 RA/Dec coordinates. ra: Right ascension in HOURS (0-24), not degrees.
dec: Declination in degrees (-90 to 90).
center: if True, plate-solve and iteratively center on the target
after the raw slew (requires camera + plate solver configured),
instead of just a raw GOTO.
rotate: if True, also rotate to |
| nina_mount_stop_slewA | Immediately stop any in-progress slew (including a center/rotate started via nina_mount_slew). |
| nina_mount_syncA | Sync the mount's internal position to the given J2000 RA (hours) / Dec (degrees), without moving it. Used to correct pointing model drift once you know your true position (e.g. after a plate solve). |
| nina_mount_meridian_flipB | Perform a meridian flip at the mount's current coordinates. |
| nina_mount_set_park_positionA | Set the mount's current position as its park position. Fails if the mount doesn't support this or is already parked. |
| nina_camera_infoA | Get full camera status: connection state, cooler on/off, current and target temperature, cooler power, gain/offset, binning, readout mode, and capabilities. |
| nina_camera_captureA | Capture a single exposure. duration: exposure length in seconds. gain: camera gain; omit to use the camera's current/default gain. save: whether to save the resulting image to disk. target_name: subfolder/name association for the saved file, if any. image_type: e.g. "LIGHT", "DARK", "FLAT", "BIAS" (NINA's own image type strings); omit to use the current default. solve: plate-solve the resulting image. wait_for_result: block until the exposure (and any requested download/processing) finishes. only_await_capture_completion: return as soon as the exposure itself finishes, without waiting for download/processing -- use with wait_for_result=True. get_result: include image statistics/metadata in the response. omit_image: don't include the actual image data (base64) in the response -- keep this True unless you specifically want the pixel data returned inline, since it can be large. resize / size / quality / scale: control a resized preview image if omit_image=False (size like "1920x1080", quality 1-100). stream: stream the image back as it's captured rather than after. only_save_raw: save only the raw sensor data, skipping NINA's normal processing pipeline. skip_auto_stretch: skip auto-stretch when producing a preview image. |
| nina_camera_abort_exposureB | Abort the exposure currently in progress. |
| nina_camera_capture_statisticsA | Get statistics (HFR, star count, mean ADU, etc.) for the most recently captured image. |
| nina_camera_coolA | Start cooling the camera to a target temperature (°C). temperature: target sensor temperature in Celsius. minutes: cool down over this many minutes rather than immediately, if supported by the camera. cancel: if True, cancel an in-progress cooldown instead of starting one (temperature/minutes are ignored in that case). |
| nina_camera_warmA | Warm the camera back up (turn off/ramp down the cooler). minutes: warm up over this many minutes rather than immediately. cancel: if True, cancel an in-progress warmup instead of starting one. |
| nina_camera_set_binningB | Set camera binning, e.g. "1x1", "2x2", "3x3". |
| nina_camera_set_readout_modeA | Set the camera's readout mode index (camera-specific; see nina_camera_info for the list of supported modes). |
| nina_camera_set_dew_heaterB | Turn the camera's dew heater on (True) or off (False), if the camera has one. |
| nina_camera_set_usb_limitC | Set the camera's USB bandwidth/traffic limit, if supported. |
| nina_sequence_get_jsonA | Get the currently loaded Advanced Sequence as NINA's own JSON structure (containers, instructions, triggers, conditions). |
| nina_sequence_get_stateA | Get the current run state of the loaded sequence: which item is executing, overall progress, and whether it's running/stopped. |
| nina_sequence_startA | Start running the currently loaded Advanced Sequence. skip_validation: skip NINA's pre-flight validation checks (equipment connected, safe to image, etc). Leave False unless you have a good reason. |
| nina_sequence_stopA | Stop the currently running sequence. |
| nina_sequence_resetA | Reset the loaded sequence back to its initial, not-yet-run state. |
| nina_sequence_skipA | Skip ahead in the running sequence. skip_type: "CurrentItems" (skip just the current instruction(s)), "ToEnd" (skip to the end area / shutdown), or "ToImaging" (skip straight to the imaging area). |
| nina_sequence_editA | Edit a single field of the loaded sequence in place, addressed by
path (as shown in |
| nina_sequence_list_availableA | List sequence files available in NINA's default sequence folder,
loadable by name via |
| nina_sequence_load_by_nameA | Load a saved sequence (by name, without the .json extension) from NINA's default sequence folder as the active Advanced Sequence. Fails if a sequence is currently running. |
| nina_sequence_load_jsonA | Load an entire Advanced Sequence from a raw JSON string (NINA's
own sequence export format, as returned by |
| nina_sequence_set_targetB | Update the coordinates/name/rotation of a DSO target container already present in the loaded sequence. name: display name for the target. ra: J2000 right ascension in hours. dec: J2000 declination in degrees. rotation: target sky position angle in degrees. index: which target container to update, if the sequence has more than one (0-based). |
| ts_list_tablesA | List every table in the Target Scheduler SQLite database. Start here -- table/column names vary across Target Scheduler versions (notably the TS5 migration), so don't assume names like "Project" or "Target" without checking first. |
| ts_describe_tableA | List the columns (name, type, nullability, PK) of a Target Scheduler database table, as returned by ts_list_tables. |
| ts_read_tableA | Read rows from a Target Scheduler database table. where_column / where_value: optionally filter to rows where this column equals this value. limit: max rows to return (capped at 2000). |
| ts_update_cellA | Update a single column on a single row in the Target Scheduler database, e.g. disabling a target or bumping a project's priority. Disabled by default for safety -- set the environment variable TS_ALLOW_WRITES=true to enable this tool, ideally after backing up schedulerdb.sqlite. Only ever touches one column on one row (identified by id_column=id_value); there's no bulk-edit or delete here on purpose. |
| ts_set_project_priorityA | Set the scheduling priority for a specific project in the database. project_id: The unique ID of the project. priority: Target priority integer. Lower values represent higher priority (e.g., 1 is highest). |
| ts_set_project_enabledA | Toggle the enabled/active state of a specific project. project_id: The unique ID of the project. enabled: True to enable/activate the project, False to disable. |
| ts_toggle_target_enabledC | Toggle the enabled/active state of a specific target. target_id: The unique ID of the target. enabled: True to enable/activate the target, False to disable. |
| ts_recent_eventsA | Get recent Target Scheduler status events forwarded through NINA: TS-WAITSTART (scheduler is waiting for the next imaging window), TS-NEWTARGETSTART / TS-TARGETSTART (scheduler picked a target and started imaging it, with target name, project name, coordinates, rotation, and expected end time). This is TS's actual live state -- the database only holds its configuration and historical progress. |
| nina_filterwheel_infoA | Get filter wheel status: connection state, current filter index, list of available filters, and their focus offsets. |
| nina_filterwheel_change_filterA | Change the active filter in the filter wheel. filter_id: The index/position of the filter to change to (0-indexed). Must be >= 0. |
| nina_focuser_infoA | Get focuser status: connection state, current step position, ambient temperature, moving state, and temperature compensation state. |
| nina_focuser_moveA | Move the focuser to a specific absolute step position. position: Target absolute position in steps. Must be >= 0. |
| nina_focuser_stopA | Immediately stop any in-progress focuser movement. |
| nina_rotator_infoA | Get rotator status: connection state, current sky and mechanical position angles in degrees, moving state, and direction settings. |
| nina_rotator_moveA | Slew the rotator to a specific sky angle. angle: Target sky position angle in degrees (0.0 to 360.0). |
| nina_rotator_stopA | Stop any in-progress rotator movement. |
| nina_dome_infoA | Get dome status: connection state, shutter state, azimuth angle, slewing state, parked state, and dome-follows-mount status. |
| nina_dome_openA | Open the dome shutter. |
| nina_dome_closeB | Close the dome shutter. |
| nina_dome_slewA | Slew the dome to a specific azimuth angle. azimuth: Target azimuth in degrees (0.0 to 360.0). North is 0.0, East is 90.0. |
| nina_guider_infoA | Get autoguider status: connection state, guiding state, and last guide step/RMS error info. |
| nina_guider_startB | Start the autoguider loop. calibrate: True to force a new calibration sequence, False to use existing calibration. |
| nina_guider_stopA | Stop autoguiding. |
| nina_switch_infoA | Get switch device status: connection and the state/value of each configured switch. |
| nina_switch_setA | Set a switch value (e.g. relay state or slider value). switch_index: Index of the switch. Must be >= 0. value: Target state (0.0 for OFF, 1.0 for ON, or intermediate value for sliders). |
| nina_flatdevice_infoA | Get flat panel/flat device status: connection, light on/off state, brightness, and cover open/closed status. |
| nina_flatdevice_set_lightA | Turn the flat panel light on (True) or off (False). |
| nina_safetymonitor_infoA | Get safety monitor status: connection and whether it currently reports conditions as safe. |
| nina_weather_infoA | Get weather station status: connection, cloud cover, wind, temperature, humidity, pressure, sky quality, rain rate (fields depend on what your weather device reports). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/anarcoiris/NINA-Smart-Scheduler'
If you have feedback or need assistance with the MCP directory API, please join our Discord server