Sign In

@squawk/mcp

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install
Package version was removed
This package version has been unpublished, mostly likely due to security reasons
This package has malicious versions linked to the ongoing "Mini Shai-Hulud" supply chain attack.

Affected versions:

0.9.10.9.20.9.3
+2 more
View campaign page

@squawk/mcp

Model Context Protocol server exposing squawk's aviation libraries as tools for LLM clients

unpublished
Source
npmnpm
Version
0.9.1
Version published
Weekly downloads
70
-30%
Maintainers
1
Weekly downloads
 
Created
Source

squawk logo  @squawk/mcp

MIT License npm TypeScript

Model Context Protocol (MCP) server that exposes the squawk aviation libraries as tools for LLM clients like Claude Desktop, Cursor, and any other MCP-compatible host. A single npx @squawk/mcp command starts a stdio server that surfaces airports, navaids, fixes, airways, procedures, airspace, ICAO aircraft registrations, weather (parsing and live AWC fetch), NOTAMs, flight plan parsing, great-circle geometry, and an E6B-style flight computer.

Part of the @squawk aviation library suite. See all packages on npm.

Quick start

Pick the snippet for your MCP client. Each one tells the host to spawn npx @squawk/mcp over stdio. After editing the config, restart the client; a squawk (or @squawk/mcp) entry should appear in the tool picker.

Claude Desktop

Open claude_desktop_config.json via Settings -> Developer -> Edit Config:

{
  "mcpServers": {
    "squawk": {
      "command": "npx",
      "args": ["-y", "@squawk/mcp"]
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (per-project) - same shape as Claude Desktop:

{
  "mcpServers": {
    "squawk": {
      "command": "npx",
      "args": ["-y", "@squawk/mcp"]
    }
  }
}

VS Code (GitHub Copilot Chat)

VS Code 1.99+ ships an MCP runtime that GitHub Copilot Chat can call into agent mode. Add to .vscode/mcp.json in your workspace, or to the user-level config via the MCP: Add Server command:

{
  "servers": {
    "squawk": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@squawk/mcp"]
    }
  }
}

Note the schema differs from the other clients: VS Code uses servers (not mcpServers) and requires an explicit "type": "stdio".

Continue.dev

Continue exposes MCP via its experimental config block. In ~/.continue/config.json:

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "npx",
          "args": ["-y", "@squawk/mcp"]
        }
      }
    ]
  }
}

Picking an install version

The snippets above pass the bare package name (@squawk/mcp), which lets npx pick whatever version it finds first - usually a previously cached one. For predictable behavior, pin the version explicitly in the client config:

{
  "mcpServers": {
    "squawk": {
      "command": "npx",
      "args": ["-y", "@squawk/mcp@0.9.0"]
    }
  }
}

Bump the pinned version when a new release ships (see npm for the latest). Pinning is the most reliable option because the resolved version is part of your config and never depends on cache state.

If you would rather have the server auto-update on every Claude Desktop (or other host) restart, use the @latest tag:

{
  "mcpServers": {
    "squawk": {
      "command": "npx",
      "args": ["-y", "@squawk/mcp@latest"]
    }
  }
}

@latest instructs npx to consult the registry for the newest version on every spawn. There is a caveat: the npx cache (under ~/.npm/_npx/) can still hold an older version that satisfies the resolved tag, in which case the cached copy is reused. If a newer release is published and the server still serves the old behavior after a host restart, clear the cache directory and restart again, or fall back to a pinned version. The host process itself also has to restart for any update to take effect, since each MCP server is a long-running stdio subprocess that loads its code once at spawn time.

Enabling the aircraft registry (optional peer)

@squawk/icao-registry-data is the largest snapshot in the suite (roughly 8 MB on disk after gzip). Most sessions never need a tail-number lookup, so the package is declared as an optional peer dependency of @squawk/mcp rather than a required dep - npm 7+ does not auto-install optional peers, which keeps the default npx @squawk/mcp install lean.

When the data package is not installed, lookup_aircraft_by_icao_hex is still listed in the tool catalog. The first invocation returns a structured isError: true result whose structuredContent.missingDataPackage.installCommand field names the exact command to run; the rest of the server keeps working normally. If you do not need aircraft lookups, no further action is required.

To enable lookups, install the data package alongside @squawk/mcp. Through npx the cleanest option is the -p flag, which adds extra packages to the temporary install npx builds:

{
  "mcpServers": {
    "squawk": {
      "command": "npx",
      "args": ["-y", "-p", "@squawk/icao-registry-data", "@squawk/mcp"]
    }
  }
}

Pinning works the same way:

{
  "mcpServers": {
    "squawk": {
      "command": "npx",
      "args": ["-y", "-p", "@squawk/icao-registry-data@0.8.3", "@squawk/mcp@0.9.0"]
    }
  }
}

For non-npx setups (a local install, a global install, a Docker image), add @squawk/icao-registry-data to the same dependency manifest that pulls in @squawk/mcp and the runtime will resolve it through ordinary Node module resolution.

Pinning a specific Node binary

npx resolves node through whatever PATH the host launches with. On macOS, GUI apps often inherit a different PATH than your shell, so you may end up running an older Node than which node shows. Live weather fetch tools require Node >= 22 (for global fetch). If the startup log shows WARNING: global fetch() is unavailable, replace "command": "npx" with the absolute path to a modern node + the absolute path to the installed bin.js:

{
  "mcpServers": {
    "squawk": {
      "command": "/usr/local/bin/node",
      "args": ["/absolute/path/to/node_modules/@squawk/mcp/dist/bin.js"]
    }
  }
}

The server logs [squawk-mcp] node <version> on <platform>/<arch> and the tool-module count to stderr on every startup so you can verify the right runtime is being used.

Example prompts

Once connected, the model can answer things like "what airspace is over KJFK at 4500 feet?", "give me the live METAR for KSFO and KOAK", "parse this route: KJFK DCT MERIT J60 MARTN DCT KLAX", or "look up the aircraft with ICAO hex AC82EC".

Standalone CLI

You can run the server directly without an MCP host to verify that it starts and responds to protocol messages:

npx @squawk/mcp

The binary speaks MCP over stdio, so it expects an MCP client on the other end of stdin/stdout. Logs go to stderr.

Programmatic use

Embed the server inside another MCP host or a custom transport:

import { createSquawkMcpServer } from '@squawk/mcp';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';

const server = createSquawkMcpServer();
await server.connect(new StdioServerTransport());

Tool catalog

Tools are grouped by domain. Every tool returns both a human-readable text block and a structured JSON payload (structuredContent) so MCP clients with strict schemas can consume the results directly.

Geometry (@squawk/geo)

ToolPurpose
great_circle_distanceDistance in nautical miles between two positions
great_circle_bearingInitial true bearing from one position to another
great_circle_bearing_and_distanceBearing + distance in one call
great_circle_midpointMidpoint along the great-circle arc
great_circle_destinationDestination point given a bearing and distance

Airports (@squawk/airports + @squawk/airport-data)

ToolPurpose
get_airport_by_faa_idLook up an airport by FAA identifier
get_airport_by_icaoLook up an airport by ICAO code
find_nearest_airportsFind airports nearest a position with optional facility-type and runway-length filters
search_airportsSubstring search by airport name or city

Airspace (@squawk/airspace + @squawk/airspace-data)

ToolPurpose
query_airspace_at_positionClass B/C/D/E, SUA, and ARTCC features whose lateral polygon and vertical bounds contain a point + altitude
get_airspace_for_airportClass B/C/D/E2 surface-area sectors associated with an airport, with full polygon boundaries
find_artcc_for_positionUS ARTCC features containing a given position and altitude (typically one feature; multiple for oceanic CTA+FIR overlaps or stratum boundaries)
find_artcc_by_identifierAll ARTCC features for a 3-letter center code (e.g. "ZNY"), optionally narrowed to a single stratum, with full polygon boundaries

Navaids (@squawk/navaids + @squawk/navaid-data)

ToolPurpose
get_navaid_by_identLook up navaids by identifier
find_navaids_by_frequencyFind navaids tuned to a given MHz/kHz frequency
find_nearest_navaidsFind navaids nearest a position
search_navaidsSubstring search by name or identifier

Fixes (@squawk/fixes + @squawk/fix-data)

ToolPurpose
get_fix_by_identLook up fixes by identifier
find_nearest_fixesFind fixes nearest a position
search_fixesSubstring search by identifier

Airways (@squawk/airways + @squawk/airway-data)

ToolPurpose
get_airway_by_designationLook up airways by designation
expand_airway_segmentExpand an airway between an entry fix and an exit fix
find_airways_by_fixReverse lookup: airways that pass through a given fix
search_airwaysSubstring search by designation

Procedures (@squawk/procedures + @squawk/procedure-data)

Covers SIDs, STARs, and Instrument Approach Procedures (IAPs) from FAA CIFP.

ToolPurpose
find_procedures_by_identifierEvery procedure publishing a CIFP identifier (same name often appears at multiple airports)
get_procedure_by_airport_and_identifierResolve a specific procedure at a specific airport
find_procedures_by_airportProcedures associated with an airport
find_procedures_by_airport_and_runwayProcedures at an airport serving a specific runway (IAP runway match or RW* transition)
find_approaches_by_typeEvery IAP of a given approach classification (ILS, RNAV, VOR, etc.)
expand_procedureExpand a procedure into its leg sequence (with optional transition merge)
search_proceduresSubstring search by name or identifier, optionally filtered by procedure or approach type

ICAO aircraft registry (@squawk/icao-registry + @squawk/icao-registry-data)

ToolPurpose
lookup_aircraft_by_icao_hexResolve a 24-bit ICAO hex address to an aircraft registration

@squawk/icao-registry-data is an optional peer dependency. Default installs of @squawk/mcp do not include it; the tool reports a structured "data not installed" error with the exact install command until the peer is added. See Enabling the aircraft registry for how to add it. Once present, the registry (~40 MB raw) is decompressed lazily on the first lookup so sessions that never need it do not pay the cost.

Weather (@squawk/weather + @squawk/weather/fetch)

ToolPurpose
parse_metarParse a user-supplied METAR/SPECI string
parse_tafParse a user-supplied TAF
parse_sigmetParse a US-domestic or ICAO SIGMET
parse_airmetParse an AIRMET bulletin
parse_pirepParse a PIREP report
parse_winds_aloftParse an FD (winds and temperatures aloft) bulletin
fetch_metarFetch and parse live METARs from the Aviation Weather Center
fetch_tafFetch and parse live TAFs
fetch_pirepFetch PIREPs near a center station
fetch_sigmetsFetch active US (CONUS) SIGMETs, optionally filtered by hazard
fetch_international_sigmetsFetch active international SIGMETs in ICAO format
fetch_winds_aloftFetch and parse a live FD winds-aloft forecast by region and period

NOTAMs (@squawk/notams)

ToolPurpose
parse_icao_notamParse an ICAO-format NOTAM
parse_faa_notamParse an FAA domestic (legacy) NOTAM

Flight plans (@squawk/flightplan)

ToolPurpose
parse_flightplan_routeParse an ICAO Item 15 route into structured route elements
compute_route_distanceTotal great-circle route distance with optional ETE

Flight computer (@squawk/flight-math)

Selected E6B calculations: any operation that embeds a non-trivial constant, formula, or model (WMM2025, NOAA solar, compressible-flow pitot equations, etc.) is exposed; trivial unit math is left to the model itself.

ToolPurpose
compute_density_altitudeDensity altitude from field observations
compute_true_altitudeTrue altitude from indicated altitude with temperature correction
compute_calibrated_airspeed_from_true_airspeedCAS from TAS via the ICAO compressible-flow equations
solve_wind_triangleHeading + groundspeed from TAS, course, and wind
compute_headwind_crosswindHeadwind/crosswind component breakdown
find_wind_from_trackReverse wind triangle from observed ground track
compute_crosswind_componentAbsolute crosswind for a runway
compute_top_of_descent_distanceTOD from glidepath angle
compute_top_of_descent_distance_from_rateTOD from descent rate + groundspeed
compute_required_descent_rateRequired descent rate over a distance
compute_required_climb_rateRequired climb rate over a distance
compute_visual_descent_pointVDP for a non-precision approach
recommend_holding_pattern_entryDirect/teardrop/parallel entry per AIM 5-3-8
compute_standard_rate_bank_angleBank angle for a 3 deg/sec turn at a given TAS
compute_turn_radiusTurn radius for a given TAS and bank angle
compute_glide_distance_with_windGlide distance scaled by groundspeed/TAS ratio
compute_solar_timesSunrise, sunset, civil twilight (NOAA algorithm)
is_daytimeDaytime/nighttime per FAR 1.1 at a UTC instant
compute_magnetic_declinationWMM2025 declination at a position
convert_true_to_magnetic_bearingTrue -> magnetic bearing using WMM2025
convert_magnetic_to_true_bearingMagnetic -> true bearing using WMM2025
compute_fuel_requiredFuel for a leg given distance, GS, and burn rate
compute_point_of_no_returnPNR with separate outbound/return groundspeeds
compute_equal_time_pointETP with separate continuing/returning groundspeeds

Server diagnostics

ToolPurpose
get_dataset_statusReport NASR cycle date, build timestamp, and record counts for every loaded snapshot (incl. lazy-load state)

Configuration

Environment variableEffect
SQUAWK_AWC_BASE_URLOverride the Aviation Weather Center base URL used by every fetch_* tool. Defaults to https://aviationweather.gov/api/data. Useful for proxies and regional mirrors.

Notes

  • The bundled datasets (airports, airspace, navaids, fixes, airways from FAA NASR; procedures from FAA CIFP) cover the contiguous United States plus the territories included in the respective FAA subscriptions. Outside the US the lookup tools will return empty results. Use get_dataset_status to confirm which NASR and CIFP cycles the running server is serving.
  • Live weather tools issue HTTPS requests to https://aviationweather.gov/api/data/... (or the override above). They are the only tools that touch the network at invocation time; everything else operates against bundled snapshots in memory.
  • The bundled snapshots are decompressed and indexed once when the server starts. Expect a few hundred milliseconds of startup time. The aircraft registration snapshot (the largest, and an optional peer dependency) is decompressed lazily on the first lookup_aircraft_by_icao_hex call, if the package is installed.

Keywords

aviation

FAQs

Package last updated on 11 May 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts