Skip to main content
Glama
MaxwellCalkin

N2YO Satellite Tracker MCP Server

get_satellite_trajectory

Calculate and visualize a satellite's trajectory over a specified time period using the NORAD ID and observer's coordinates for precise tracking and analysis.

Instructions

Get satellite trajectory over time period for visualization

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
noradIdYesNORAD catalog number of the satellite
observerAltNoObserver altitude in meters above sea level
observerLatYesObserver latitude in degrees
observerLngYesObserver longitude in degrees
secondsNoTime period in seconds for trajectory (max 3600)

Implementation Reference

  • Main MCP tool handler: validates args, calls N2YOClient.getSatelliteTrajectory, formats JSON response with trajectory data
    private async getSatelliteTrajectory(args: any): Promise<CallToolResult> { SatelliteValidator.validatePositionRequest(args); const trajectory = await this.n2yoClient.getSatelliteTrajectory( args.noradId, args.observerLat, args.observerLng, args.observerAlt || 0, args.seconds || 300 ); return { content: [ { type: "text", text: JSON.stringify({ satellite: { noradId: args.noradId }, observer: { latitude: args.observerLat, longitude: args.observerLng, altitude: args.observerAlt || 0, }, timeSpan: args.seconds || 300, trajectory: trajectory, count: trajectory.length, note: "Position data points over time for trajectory visualization" }, null, 2), }, ], }; }
  • Input schema definition for the tool, defining parameters, types, validation rules, and requirements
    { name: "get_satellite_trajectory", description: "Get satellite trajectory over time period for visualization", inputSchema: { type: "object", properties: { noradId: { type: "string", description: "NORAD catalog number of the satellite", }, observerLat: { type: "number", description: "Observer latitude in degrees", minimum: -90, maximum: 90, }, observerLng: { type: "number", description: "Observer longitude in degrees", minimum: -180, maximum: 180, }, observerAlt: { type: "number", description: "Observer altitude in meters above sea level", default: 0, }, seconds: { type: "number", description: "Time period in seconds for trajectory (max 3600)", default: 300, maximum: 3600, }, }, required: ["noradId", "observerLat", "observerLng"], }, },
  • src/server.ts:468-469 (registration)
    Dispatcher/registration in callTool switch statement that routes to the handler
    case "get_satellite_trajectory": return await this.getSatelliteTrajectory(args);
  • Core helper function that computes trajectory by fetching multiple position snapshots over time
    async getSatelliteTrajectory( noradId: string, observerLat: number, observerLng: number, observerAlt: number = 0, seconds: number = 300 ): Promise<SatellitePosition[]> { // Get multiple positions over time to show trajectory const positions = []; const steps = Math.min(10, Math.max(2, Math.floor(seconds / 30))); // Max 10 points for (let i = 0; i <= steps; i++) { const timeOffset = Math.floor((seconds / steps) * i); const stepPositions = await this.getPositions(noradId, observerLat, observerLng, observerAlt, timeOffset); if (stepPositions.length > 0) { positions.push(stepPositions[0]); } } return positions; }

Latest Blog Posts

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/MaxwellCalkin/N2YO-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server