what is Mcp Stargazing?
Mcp Stargazing is a project that calculates the altitude, rise, and set times of celestial objects such as the Sun, Moon, planets, stars, and deep-space objects for any location on Earth.
how to use Mcp Stargazing?
To use Mcp Stargazing, install the required packages and run the provided Python scripts to calculate the position and rise/set times of celestial objects based on your location and the desired time.
key features of Mcp Stargazing?
- Altitude/Azimuth Calculation for celestial objects.
- Rise/Set Times for various celestial bodies.
- Supports solar system objects, stars, and deep-space objects.
- Time zone aware functionality.
use cases of Mcp Stargazing?
- Astronomers calculating the position of celestial objects for observation.
- Educators demonstrating celestial mechanics in classrooms.
- Hobbyists planning stargazing events based on rise/set times.
FAQ from Mcp Stargazing?
- Can Mcp Stargazing calculate positions for all celestial objects?
Yes! It supports a wide range of celestial objects including planets, stars, and deep-space entities.
- Is Mcp Stargazing easy to install?
Yes! You can install it using pip with a few simple commands.
- Does it require an internet connection?
No, once installed, it can work offline for calculations.
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.
Features
- Altitude/Azimuth Calculation: Get elevation and compass direction for any celestial object.
- Rise/Set Times: Determine when objects appear/disappear above the horizon.
- 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
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}")
src/celestial.py
)
API Reference (celestial_pos(celestial_object, observer_location, time)
- Inputs:
celestial_object
: Name (e.g.,"sun"
,"andromeda"
).observer_location
:EarthLocation
object.time
:datetime
(timezone-aware) or AstropyTime
.
- Returns:
(altitude_degrees, azimuth_degrees)
.
celestial_rise_set(celestial_object, observer_location, date, horizon=0.0)
- Inputs:
date
: Timezone-awaredatetime
.horizon
: Horizon elevation (default: 0°).
- Returns:
(rise_time, set_time)
as UTCTime
objects.
Testing
Run tests with:
pytest tests/
tests/test_celestial.py
)
Key Test Cases (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 calculations
│ └── utils.py # Time/location helpers
├── tests/
│ ├── test_celestial.py
│ └── test_utils.py
└── README.md
Future Work
- Add support for comets/asteroids.
- Optimize SIMBAD queries for offline use.
Key Updates:
- Deep-Space Support: Added examples for
"andromeda"
in usage and API docs. - Testing: Highlighted deep-space and edge-case tests.
- Dependencies: Added
astroquery
for SIMBAD integration. - Structure: Clarified file roles and test coverage.
Screen shots