get_radio_passes
Find upcoming satellite radio communication windows for your location by entering satellite ID and coordinates to plan observation sessions.
Instructions
Get upcoming radio communication passes of a satellite for an observer location
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| noradId | Yes | NORAD catalog number of the satellite | |
| observerLat | Yes | Observer latitude in degrees | |
| observerLng | Yes | Observer longitude in degrees | |
| observerAlt | No | Observer altitude in meters above sea level | |
| days | No | Number of days to look ahead (max 10) | |
| minElevation | No | Minimum elevation in degrees (max 90) |
Implementation Reference
- src/server.ts:219-261 (registration)Tool registration including name, description, and input schema definition.{ name: "get_radio_passes", description: "Get upcoming radio communication passes of a satellite for an observer location", 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, }, days: { type: "number", description: "Number of days to look ahead (max 10)", default: 10, maximum: 10, }, minElevation: { type: "number", description: "Minimum elevation in degrees (max 90)", default: 10, maximum: 90, }, }, required: ["noradId", "observerLat", "observerLng"], }, },
- src/server.ts:995-1025 (handler)Primary MCP tool handler: validates args, fetches radio passes from client, formats and returns CallToolResult.private async getRadioPasses(args: any): Promise<CallToolResult> { SatelliteValidator.validateVisualPassRequest(args); // Same validation as visual passes const passes = await this.n2yoClient.getRadioPasses( args.noradId, args.observerLat, args.observerLng, args.observerAlt || 0, args.days || 10, args.minElevation || 10 ); return { content: [ { type: "text", text: JSON.stringify({ satellite: { noradId: args.noradId }, observer: { latitude: args.observerLat, longitude: args.observerLng, altitude: args.observerAlt || 0, }, radioPasses: passes, count: passes.length, note: "Radio passes optimized for communication windows with elevation and timing data" }, null, 2), }, ], }; }
- src/n2yo-client.ts:461-479 (handler)Core N2YO client method implementing the radio passes API call (mocked response).async getRadioPasses( noradId: string, observerLat: number, observerLng: number, observerAlt: number = 0, days: number = 10, minElevation: number = 10 ): Promise<RadioPass[]> { const response = await this.makeRequest(`/radiopasses/${noradId}/${observerLat}/${observerLng}/${observerAlt}/${days}/${minElevation}`, { id: noradId, observer_lat: observerLat, observer_lng: observerLng, observer_alt: observerAlt, days, min_elevation: minElevation, }); return response.passes || []; }
- src/n2yo-client.ts:54-67 (schema)TypeScript interface defining the structure of radio pass data.export interface RadioPass { startAz: number; startAzCompass: string; startEl: number; startUTC: number; maxAz: number; maxAzCompass: string; maxEl: number; maxUTC: number; endAz: number; endAzCompass: string; endEl: number; endUTC: number; }
- src/server.ts:456-457 (registration)Dispatch registration in callTool switch statement.case "get_radio_passes": return await this.getRadioPasses(args);