
faa-traffic-delays-mcp-server
io.github.cyanheadsv0.1.1更新於 Oct 1, 2026
Track FAA ground stops, delay programs, airport delays, the operations plan, and ATCSCC advisories.
安裝
在 SourceWeft 中
- 開啟 儀表板中的 faa-traffic-delays-mcp-server,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
faa-traffic-delays-mcp-server
Track FAA ground stops, delay programs, airport delays, the operations plan, and ATCSCC advisories via MCP. STDIO or Streamable HTTP.
Overview
Real-time air traffic management status from the FAA Air Traffic Control System Command Center (ATCSCC), read from the NAS Status feed behind nasstatus.faa.gov and the ATCSCC advisories database. Check US airports for ground stops, Ground Delay Programs, delays, and closures; list every active event nationwide, en-route Airspace Flow Programs included; and read the operations plan for later in the day and the full advisory behind each program. Runs as a stdio process or a local Streamable HTTP server.
Tools
Capability reference
faa_delays_get_airport_status tool
airports: 1–25 codes, each a 3-character FAA identifier (SEA) or its ICAO code (KSEA,PHNL), case-insensitive, as an array or a comma-separated string; a code not in the bundled FAA NASR directory fails the whole call asunknown_airport(withunknownCodes) before any FAA request- One row per airport, in request order:
status(closed,ground_stop,ground_delay_program,delays,restrictions_only,no_active_events),listedInFeed, the resolvedairportName,requestedAsfor an ICAO input, and each active event —groundStop,groundDelayProgramwith a per-15-minutedelayProfile,arrivalDelay/departureDelaybands,closure,closureNotam,deicing runwayConfiguration(runways andarrivalRatePerHour) only for airports the feed lists;isPacingAirportandtimezoneare omitted with anoticewhen the FAA pacing-airport list can't be read
faa_delays_list_active_events tool
- Optional
event_typesfilter overground_stop,ground_delay_program,airspace_flow_program,arrival_delay,departure_delay,airport_closure,closure_notam,deicing(aliasesgs,gdp,afp); rows sorted by severity, withreason, delay figures, times, and anadvisoryreference where the FAA links one totalActiveandcountsByTypecover the whole feed before the filter, andshown/appliedEventTypesecho what was returned;airspace_flow_programrows carryafpdetail (constrained area, departure and arrival filters, altitudes, delay profile)enRouteFeed(ok,unavailable,format_changed) reports whether Airspace Flow Programs were read: an en-route failure omits them with anoticeinstead of failing the call, unless they are the only type requested
faa_delays_get_operations_plan tool
- No input;
terminalPlannedandenRoutePlanneditems carrytext,timeQualifier(after,until,by,between),timeUtc(HHMMwith no date), andlikelihood(possible,probable,expected) announcementslists current ATCSCC announcements ([]when none, absent with anoticewhen that list can't be read);advisoryopens the full plan text withfaa_delays_get_advisory
faa_delays_get_advisory tool
advisory_number(1–999) anddate(UTC,YYYY-MM-DD;MM/DD/YYYYaccepted), taken from anadvisoryreference'snumberanddate; numbers restart at 1 each UTC day, and past advisories stay readable- Returns
title,controlElement,subject,effectiveTime,sentAt, and the fulltext; a number the database doesn't hold returnsfound: falsewithguidancerather than an error - Text past 50,000 characters is cut and reported through
truncatedandtotalChars; page failures surface asadvisory_service_unavailableoradvisory_contract_changed
faa_delays_list_reference tool
topic:event_types,terms,artccs,pacing_airports, oridentifiers- Only
pacing_airportscalls the FAA (live, cached 6 hours);identifiersalso reports the bundled NASR airport directory's cycle date and airport count
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
FAA-specific:
- Reads the NAS Status feed (
nasstatus.faa.gov/api) and the ATCSCC advisories database (www.fly.faa.gov/adv), keyless; FAA status and NASR airport data are US federal works in the public domain (17 U.S.C. §105), published by the Federal Aviation Administration - Airport codes are checked against a bundled snapshot of the FAA NASR airport directory, with ICAO codes mapped to FAA identifiers by lookup (
KSEA→SEA,PHNL→HNL), so a mistyped code fails instead of reading as a quiet airport - Each feed is cached in process for 60 seconds (the pacing-airport list for 6 hours) with one shared in-flight request, and requests to each FAA host are paced; an expired snapshot is never served when a refresh fails
- Tolerant parsing of the undocumented feed: an unreadable row is skipped and counted in the
notice, and a wrong-typed field is dropped rather than coerced
Agent-friendly output:
- Typed failure reasons: an outage (
feed_unavailable), a slow or throttled FAA (retry_deadline_exceeded,upstream_rate_limited,pacer_shed), and a format change (feed_contract_changed, not retryable) stay distinct; each recovery hint names the tool to call next, and rate-limit errors carryretryAfterwhen it is known - Graceful partial failure: a secondary FAA list that can't be read (pacing airports, en-route events, announcements) is omitted with a flag or
noticeinstead of failing the call - Freshness on every feed tool:
fetchedAtfor the snapshot,updatedAton each event, and anoticewhen an arrival or departure delay entry was last updated more than 6 hours earlier, since the FAA feed can keep a delay entry after it lapses - FAA-authored text (reasons, NOTAMs, comments, announcements, advisory text) is flattened, quoted, or fenced in
content[]so it reads as data, and stays verbatim instructuredContent
Limitations:
- Informational, not operational. Not an operational source for flight planning: no substitute for an official preflight briefing or airline operations data.
- Undocumented upstream.
nasstatus.faa.gov/api/*is the dashboard's private backend: no schema, terms, versioning, or published limits, and it can change without notice. The server fails withfeed_contract_changedrather than guess. - Airport coverage is event-driven. The feed lists only airports with an active event, so runway configuration and arrival rate are unavailable for airports without one, and
no_active_eventsmeans no FAA program, not on-time flights. Per-flight EDCTs are not in the feed. - En-route row shape is inferred, not observed. Airspace Flow Program rows follow the shape the NAS Status dashboard's own code reads; a mismatch degrades the national list with
enRouteFeed: "format_changed"rather than failing it. - The airport directory is a snapshot. An identifier the FAA assigns after the bundled NASR cycle is rejected as unknown until the next refresh. US airports only.
Getting started
Add the following to your MCP client configuration file.
Or with npx (no Bun required):
Or with Docker:
For Streamable HTTP, set the transport and start the server:
Prerequisites
- Bun v1.4.0 or higher (or Node.js v24+).
- No API key or account: the FAA feeds are public.
Installation
- Clone the repository:
- Navigate into the directory:
- Install dependencies:
- Configure environment (optional):
Configuration
The server reads no environment variables of its own: the FAA hosts, cache lifetimes, and request pacing are fixed in the services. These framework variables cover transport, logging, and telemetry.
See .env.example for the common framework overrides.
Running the server
Local development
-
Build and run the production version:
-
Run checks and tests:
-
Refresh the airport directory from the current FAA NASR cycle (needs network access and the system
unzip):
Project structure
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
- Handlers throw, framework catches — no
try/catchin tool logic - Use
ctx.logfor logging; FAA feeds are cached in process, not inctx.state - Register new tools in
allToolDefinitionsinsrc/mcp-server/tools/definitions/index.ts - Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields
Contributing
Issues are welcome. Run checks and tests before submitting:
License
This project is licensed under the Apache 2.0 License. See the LICENSE file for details.
來源:README.md,提交 01bd4f3
工具
0版本歷史
1- v0.1.1最新Oct 1, 2026
