
Satellite MCP Server
from BuildASpacePro
Performs satellite orbital mechanics calculations using natural language, with a built-in world cities database for location lookup.
Satellite MCP Server
A comprehensive Model Context Protocol (MCP) server for satellite orbital mechanics calculations with natural language processing capabilities.
β¨ Key Features
-
π°οΈ Satellite Access Window Calculations - Calculate when satellites are visible from ground locations
-
π World Cities Database - Built-in database of 200+ cities worldwide for easy location lookup
-
π£οΈ Natural Language Processing - Parse orbital parameters from text like "satellite at 700km in SSO over London"
-
π‘ TLE Generation - Generate Two-Line Elements from orbital descriptions
-
π Lighting Analysis - Ground and satellite lighting conditions (civil, nautical, astronomical twilight)
-
π Bulk Processing - Process multiple satellites and locations from CSV data
-
π 6 Orbit Types - Support for LEO, MEO, GEO, SSO, Molniya, and Polar orbits
Clone the repository
git clone cd mcp-orbit
Build the Docker image
make docker-build
Run the MCP server
make docker-run
Local Installation
Run the MCP server
make run
π Connecting to the MCP Server
The server communicates via JSON-RPC 2.0 over stdio. Here are the connection methods:
Claude Desktop Integration
Add to your Claude Desktop MCP configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%/Claude/claude_desktop_config.json
{ "mcpServers": { "satellite-mcp-server": { "command": "docker", "args": ["run", "--rm", "-i", "satellite-mcp-server:latest"] } } }
Direct Docker Connection
Interactive mode
docker run -it --rm satellite-mcp-server:latest
Pipe commands
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | docker run --rm -i satellite-mcp-server:latest
Local Python Connection
π οΈ Available Tools
-
calculate_access_windows- Basic satellite visibility calculations -
calculate_access_windows_by_city- City-based satellite passes -
calculate_bulk_access_windows- Multi-satellite/location analysis -
parse_orbital_elements- Natural language orbital parameter parsing -
calculate_access_windows_from_orbital_elements- Access windows from orbital text -
calculate_access_windows_from_orbital_elements_by_city- Combined orbital elements + city lookup -
search_cities- Find cities in the world database -
validate_tle- Validate Two-Line Element data -
get_orbit_types- Available orbit type definitions
ποΈ Project Structure
/
βββ src/
β βββ mcp_server.py # MCP server implementation
β βββ satellite_calc.py # Core orbital mechanics calculations
β βββ world_cities.py # World cities database
βββ docs/ # Documentation
βββ Dockerfile # Container definition
βββ docker-compose.yml # Multi-container setup
βββ Makefile # Build automation
π Dependencies
-
Skyfield - Satellite position calculations
-
NumPy - Numerical computations
-
MCP - Model Context Protocol implementation
-
Python 3.8+ - Runtime environment
π€ Contributing
This is a specialized MCP server for satellite orbital mechanics. For issues or enhancements, please check the documentation in the docs/ directory.
π License
[Add your license information here]
π Quick Start
Using Docker (Recommended)
Install dependencies
make install
If running locally without Docker
python -m src.mcp_server
π¬ Example Usage in LLMs
Example 1: Basic Satellite Pass Prediction
User Prompt:
"When will the ISS be visible from London tomorrow?"
MCP Tool Call:
{ "tool": "calculate_access_windows_by_city", "arguments": { "city_name": "London", "tle_line1": "1 25544U 98067A 24001.50000000 .00001234 00000-0 12345-4 0 9999", "tle_line2": "2 25544 51.6400 123.4567 0001234 12.3456 347.6543 15.49011999123456", "start_time": "2024-01-02T00:00:00Z", "end_time": "2024-01-03T00:00:00Z" } }
**Response:**The ISS will be visible from London 4 times tomorrow, with the best pass at 19:45 UTC reaching 78Β° elevation in the southwest sky during civil twilight.
Example 2: Natural Language Orbital Design
User Prompt:
"Create a sun-synchronous satellite at 700km altitude and show me when it passes over Tokyo."
MCP Tool Calls:
- Parse orbital elements:
{ "tool": "parse_orbital_elements", "arguments": { "orbital_text": "sun-synchronous satellite at 700km altitude" } }
- Calculate access windows:
{ "tool": "calculate_access_windows_from_orbital_elements_by_city", "arguments": { "orbital_text": "sun-synchronous satellite at 700km altitude", "city_name": "Tokyo", "start_time": "2024-01-01T00:00:00Z", "end_time": "2024-01-02T00:00:00Z" } }
**Response:**Generated SSO satellite (98.16Β° inclination, 98.6 min period) with 14 passes over Tokyo in 24 hours, including 6 daylight passes and 8 during various twilight conditions.
Example 3: Bulk Satellite Analysis
User Prompt:
"I have a CSV file with ground stations and want to analyze coverage for multiple satellites."
{ "tool": "calculate_bulk_access_windows", "arguments": { "locations_csv": "name,latitude,longitude,altitude\nMIT,42.3601,-71.0589,43\nCaltechm,34.1377,-118.1253,237", "satellites_csv": "name,tle_line1,tle_line2\nISS,1 25544U...,2 25544...\nHubble,1 20580U...,2 20580...", "start_time": "2024-01-01T00:00:00Z", "end_time": "2024-01-02T00:00:00Z" } }
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.