Skip to main content

This is a mcp server Calculate celestial object positions and rise/set times

Project description

mcp-stargazing

Calculate the altitude, rise, and set times of celestial objects (Sun, Moon, planets, stars, and deep-space objects) for any location on Earth, with optional light pollution analysis.

Features

  • Altitude/Azimuth Calculation: Get elevation and compass direction for any celestial object.
  • Rise/Set Times: Determine when objects appear/disappear above the horizon.
  • Light Pollution Analysis: Load and analyze light pollution maps (GeoTIFF format).
  • Supports:
    • Solar system objects (Sun, Moon, planets)
    • Stars (e.g., "sirius")
    • Deep-space objects (e.g., "andromeda", "orion_nebula")
  • Time Zone Aware: Works with local or UTC times.

Installation

pip install astropy pytz numpy astroquery rasterio geopy

Usage

Calculate Altitude/Azimuth

from src.celestial import celestial_pos
from astropy.coordinates import EarthLocation
import pytz
from datetime import datetime

# Observer location (New York)
location = EarthLocation(lat=40.7128, lon=-74.0060)

# Time (local timezone-aware)
local_time = pytz.timezone("America/New_York").localize(datetime(2023, 10, 1, 12, 0))
altitude, azimuth = celestial_pos("sun", location, local_time)
print(f"Sun Position: Altitude={altitude:.1f}°, Azimuth={azimuth:.1f}°")

Calculate Rise/Set Times

from src.celestial import celestial_rise_set

rise, set_ = celestial_rise_set("andromeda", location, local_time.date())
print(f"Andromeda: Rise={rise.iso}, Set={set_.iso}")

Load Light Pollution Map

from src.light_pollution import load_map

# Load a GeoTIFF light pollution map
vriis_data, bounds, crs, transform = load_map("path/to/map.tif")
print(f"Map Bounds: {bounds}")

API Reference

celestial_pos(celestial_object, observer_location, time) (src/celestial.py)

  • Inputs:
    • celestial_object: Name (e.g., "sun", "andromeda").
    • observer_location: EarthLocation object.
    • time: datetime (timezone-aware) or Astropy Time.
  • Returns: (altitude_degrees, azimuth_degrees).

celestial_rise_set(celestial_object, observer_location, date, horizon=0.0) (src/celestial.py)

  • Inputs:
    • date: Timezone-aware datetime.
    • horizon: Horizon elevation (default: 0°).
  • Returns: (rise_time, set_time) as UTC Time objects.

load_map(map_path) (src/light_pollution.py)

  • Inputs:
    • map_path: Path to GeoTIFF file.
  • Returns: Tuple (vriis_data, bounds, crs, transform) for light pollution analysis.

Testing

Run tests with:

pytest tests/

Key Test Cases (tests/test_celestial.py)

def test_calculate_altitude_deepspace():
    """Test deep-space object resolution."""
    altitude, _ = celestial_pos("andromeda", NYC, Time.now())
    assert -90 <= altitude <= 90

def test_calculate_rise_set_sun():
    """Validate Sun rise/set times."""
    rise, set_ = celestial_rise_set("sun", NYC, datetime(2023, 10, 1))
    assert rise < set_

Project Structure

.
├── src/
│   ├── celestial.py          # Core celestial calculations
│   ├── light_pollution.py    # Light pollution map utilities
│   ├── utils.py              # Time/location helpers
│   └── main.py               # CLI entry point
├── tests/
│   ├── test_celestial.py
│   └── test_utils.py
└── README.md

Future Work

  • Add support for comets/asteroids.
  • Optimize SIMBAD queries for offline use.
  • Integrate light pollution data into visibility predictions.

Key Updates:

  1. Light Pollution: Added light_pollution.py to features and API reference.
  2. Dependencies: Added rasterio and geopy to installation instructions.
  3. Project Structure: Clarified file roles and test coverage.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_stargazing-0.1.3-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file mcp_stargazing-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: mcp_stargazing-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for mcp_stargazing-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 18c8eabf631957a1e704a3b2eca2fde2da8ab12a2c69b92ded50a9b7b3d1e996
MD5 53a18a3d9879f08a90acab02ba89ac3f
BLAKE2b-256 2186e876acdc782ee90ee301ae5a6f12ac1284c0621cff99ea640db5080dc95b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page