mcp

star 4

TypeScript MCP server development with geospatial tools, KQL Eventhouse queries, and Microsoft Fabric IQ ontology. USE FOR: mcp server, mcp tools, openmeteo, noaa wind, notam zones, nominatim geocoding, elevation api, sunrise sunset, air quality, osm poi, kql query, eventhouse table, balloon_telemetry, weather_observations, flight_alerts, fabric iq ontology, fabric extensibility, vitest tests. DO NOT USE FOR: Python simulator code, React components, CopilotKit hooks, frontend styling, CSS, event hubs producer, pytest.

fredgis By fredgis schedule Updated 3/5/2026

name: "mcp" description: "TypeScript MCP server development with geospatial tools, KQL Eventhouse queries, and Microsoft Fabric IQ ontology. USE FOR: mcp server, mcp tools, openmeteo, noaa wind, notam zones, nominatim geocoding, elevation api, sunrise sunset, air quality, osm poi, kql query, eventhouse table, balloon_telemetry, weather_observations, flight_alerts, fabric iq ontology, fabric extensibility, vitest tests. DO NOT USE FOR: Python simulator code, React components, CopilotKit hooks, frontend styling, CSS, event hubs producer, pytest."

Overview

The SkyNav MCP server exposes 8 geospatial tools via the Model Context Protocol, enabling LLMs and the CopilotKit agent to query weather, aviation zones, and geographic data. It also manages KQL queries for Eventhouse analytics and Fabric IQ ontology definitions.

MCP Server Architecture

Tool Registry

Tool API Source Purpose
get-weather OpenMeteo Current conditions and hourly forecast at coordinates
get-wind-profile NOAA GFS Wind speed/direction at multiple altitude levels
get-notams FAA NOTAM API Active aviation notices in a geographic area
geocode Nominatim Forward/reverse geocoding for location names
get-elevation Open-Elevation Terrain height at coordinates
get-sun-times sunrise-sunset.org Dawn, sunrise, sunset, dusk times
get-air-quality OpenMeteo AQI PM2.5, PM10, AQI at coordinates
search-pois OSM Overpass Nearby points of interest (landing sites, hospitals)

Tool Implementation Pattern

server.tool(
  "tool-name",
  { param: z.string().describe("What this param is for") },
  async ({ param }) => {
    const data = await fetchFromApi(param);
    return { content: [{ type: "text", text: JSON.stringify(data) }] };
  }
);

KQL Query Patterns

Eventhouse Tables

Table Key Columns Purpose
balloon_telemetry balloon_id, timestamp, latitude, longitude, altitude_m Real-time position and metrics
weather_observations station_id, timestamp, temperature, wind_speed Weather station data
flight_alerts alert_id, balloon_id, severity, timestamp, message Operational alerts

Common Query Patterns

// Time-window aggregation
balloon_telemetry
| where timestamp between (ago(1h) .. now())
| summarize avg_alt = avg(altitude_m), max_alt = max(altitude_m)
    by balloon_id, bin(timestamp, 5m)

// Anomaly detection
balloon_telemetry
| where balloon_id == "B-001"
| make-series alt = avg(altitude_m) on timestamp step 1m
| extend anomalies = series_decompose_anomalies(alt)

Fabric IQ Ontology

Six entities with N:N relationships:

  • BalloonPilot (via PilotBalloonCertification)
  • BalloonFlight (one-to-many)
  • FlightSite (launch/landing sites)
  • SiteRestrictedZone (proximity)
  • FlightWeatherWindow (flight-weather correlation)

Entity YAML files live in ontology/entities/ with properties, relationships, measures, and synonyms sections.

Testing Strategy

  • Vitest with MSW for mocking all external HTTP APIs
  • One test file per MCP tool: __tests__/tools/{tool-name}.test.ts
  • Test both success responses and error handling paths
  • Validate Zod schemas reject invalid inputs
  • KQL query tests validate string output against expected patterns

When NOT to Use

  • Python telemetry simulator → use iot-telemetry skill
  • React dashboard components → use reactjs skill
  • CopilotKit hooks and actions → use reactjs skill
Install via CLI
npx skills add https://github.com/fredgis/SkyNav --skill mcp
Repository Details
star Stars 4
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator