Faa Aircraft Registry Mcp Server

io.github.cyanheads由 GitHub 帳號 cyanheads 發布v0.1.12更新於 Oct 24, 2026

Offline, keyless lookup of the US civil aircraft registry — decode N-numbers, search records.

已驗證Streamable HTTP可網頁執行位置與生活資料與分析

概覽

AI 產生的概覽

離線、免金鑰查詢美國民用航空器登記資料庫:解析 N 編號、查詢登記狀態,並依機主、機型、州或 Mode S 碼檢索紀錄。

可以做什麼
將單一 N 編號解析為航空器、發動機、適航性、登記狀態與 Mode S 資訊,僅在關閉遮蔽時回傳機主資料。判定編號為有效、已註銷、保留或未知。依機主姓名、廠商/型號、廠商型號代碼、州、航空器類型或 Mode S 碼檢索有效登記,支援分頁。檢索航空器型號參考表,並將廠商/型號代碼解析為規格參數。透過以 N 編號為鍵的資源讀取完整登記紀錄。
適用情境
適合依尾號辨識美國民用航空器、確認登記是否仍有效,或在沒有 API 金鑰的情況下依機主、型號或州尋找航空器。可用於資料研究、航空資料處理,以及與航班追蹤 Mode S 碼交叉比對。
執行需求
可使用公開託管的 Streamable HTTP 端點,或透過 npx、bunx、Docker 在本機安裝(需 Node.js 24+ 或 Bun 1.4+)。本機使用需先從 FAA 資料庫下載並一次性建立索引(壓縮約 70 MB,磁碟佔用數百 MB),路徑由 FAA_MIRROR_PATH 指定;僅建立與更新索引時需要網路。無需 API 金鑰。
安裝前請注意
機主姓名與地址屬於個人資料,預設會遮蔽,且在將 FAA_REDACT_OWNER_PII 設為 false 前無法依機主姓名檢索;README 建議僅在可信任的本機安裝中關閉。索引建立完成前本機查詢會失敗,且需定期更新以保持資料最新。託管端點為第三方公開實例,查詢內容會傳送給該營運方。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Faa Aircraft Registry Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.cyanheads%2Ffaa-aircraft-registry-mcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "faa-aircraft-registry": {
      "type": "http",
      "url": "https://faa-aircraft-registry.caseyjhand.com/mcp"
    }
  }
}

README

@cyanheads/faa-aircraft-registry-mcp-server

Decode N-numbers to aircraft, engine, status, and owner; search the US civil aircraft registry by owner, type, or state; resolve active/deregistered/reserved status — offline via MCP. STDIO or Streamable HTTP.

5 Tools • 1 Resource


Overview

The US civil aircraft registry, searchable offline from the FAA's Releasable Aircraft Database. Decode an N-number to its aircraft, engine, and registered owner; check whether it's active, deregistered, or reserved; and search by owner, make and model, state, or Mode S code.

Tools

ToolDescription
faa_lookup_registrationDecode one N-number to its full pre-joined active record — aircraft make/model, engine, year, airworthiness, registration status, Mode S code, and registered owner (when redaction is off).
faa_get_registration_statusResolve an N-number across all three status files (active, deregistered, reserved) in priority order, returning a definitive recordType.
faa_search_registrationsSearch active registrations by owner name, make/model, exact manufacturer/model code, state, aircraft type, or Mode S code.
faa_search_aircraft_typesSearch the aircraft reference table by manufacturer/model name, type, or category to discover manufacturer-model codes.
faa_get_aircraft_typeDecode a 6–7-character manufacturer/model/series code to aircraft specs — category, type, engine, seats, weight class, cruise speed, type-certificate data.

Resources

ResourceDescription
faa://registration/{nNumber}Full registration record for one N-number — the same decoded, pre-joined payload as faa_lookup_registration.

Also reachable via faa_lookup_registration; search collections aren't exposed as resources.

Capability reference

faa_lookup_registration tool

  • Accepts N12345 or 12345; the leading N is optional
  • Returns decoded aircraft, engine, and status fields as raw code plus label, and the Mode S code in octal and hex (hex is the ICAO 24-bit address)
  • Owner name and address appear only when FAA_REDACT_OWNER_PII=false; otherwise ownerRedacted: true
  • Errors: not_found (no active registration; try faa_get_registration_status), invalid_n_number

faa_get_registration_status tool

  • Checks the active, deregistered, and reserved files in that order
  • recordType is active, deregistered, reserved, or unknown; a never-issued number returns unknown, not an error
  • Status facts only, no owner data
  • Error: invalid_n_number

faa_search_registrations tool

  • Filters: ownerName, makeModel, manufacturerModelCode, state, aircraftType, modeSCode; at least one required, combined with AND
  • limit 1–200 (default 25) with offset paging; responses report totalCount and nextOffset when truncated
  • Each result carries an N-number to pass to faa_lookup_registration
  • Errors: no_filters, invalid_code, invalid_state, invalid_mode_s_code, invalid_aircraft_type, and owner_search_disabled (owner-name search is off while FAA_REDACT_OWNER_PII is on)

faa_search_aircraft_types tool

  • Filters: query (manufacturer/model name), aircraftType (1–9/H/O), category (1–3); at least one required
  • Returns summaries with the code to pass to faa_get_aircraft_type or faa_search_registrations.manufacturerModelCode
  • limit 1–200 (default 25) with offset paging; responses report totalCount and nextOffset when truncated
  • Errors: no_filters, invalid_aircraft_type, invalid_category

faa_get_aircraft_type tool

  • Accepts a 6–7-character uppercase alphanumeric manufacturer/model/series code; find codes with faa_search_aircraft_types
  • Returns manufacturer, model, type, engine, category, seats, engines, weight class, cruise speed, and type-certificate data
  • weightClass keeps the raw FAA string; weightClassLabel decodes it when known
  • Errors: not_found, invalid_code

faa://registration/{nNumber} resource

  • Same payload as faa_lookup_registration; application/json, cached 1 hour
  • nNumber accepts N12345 or 12345
  • Errors: not_found, invalid_n_number

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 registry-specific:

  • Offline and keyless at runtime: queries hit a local SQLite + FTS5 index with no API key or rate limit
  • Daily index refresh under HTTP transport, aligned to the FAA's nightly re-release
  • Pre-joined records: one call returns decoded aircraft, engine, and status
  • Owner name and address are redacted by default, and owner-name search is disabled until FAA_REDACT_OWNER_PII=false
  • Mode S hex codes match the ICAO 24-bit addresses used by flight-tracking feeds

Agent-friendly output:

  • Coded fields carry both the raw FAA code and the decoded label
  • Capped search results flag truncated with shown and cap
  • Fields the FAA leaves blank stay absent rather than filled in
  • recordType and ownerRedacted let callers branch on data

Getting started

Public Hosted Instance

A public instance is available at https://faa-aircraft-registry.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:

json
{  "mcpServers": {    "faa-aircraft-registry-mcp-server": {      "type": "streamable-http",      "url": "https://faa-aircraft-registry.caseyjhand.com/mcp"    }  }}

Self-Hosted / Local

First run requires building the local index — see First-run setup below. The package does not ship the FAA data; until mirror:init has run once, queries fail with a clear "run mirror:init" error.

The Desktop MCPB includes Node's SQLite driver and its cross-platform prebuilts. Build the local index with the bundle's mirror CLI before querying.

Add the following to your MCP client configuration file:

json
{  "mcpServers": {    "faa-aircraft-registry-mcp-server": {      "type": "stdio",      "command": "bunx",      "args": ["@cyanheads/faa-aircraft-registry-mcp-server@latest"],      "env": {        "MCP_TRANSPORT_TYPE": "stdio",        "MCP_LOG_LEVEL": "info",        "FAA_MIRROR_PATH": "/path/to/faa-registry.db"      }    }  }}

Or with npx (no Bun required):

json
{  "mcpServers": {    "faa-aircraft-registry-mcp-server": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@cyanheads/faa-aircraft-registry-mcp-server@latest"],      "env": {        "MCP_TRANSPORT_TYPE": "stdio",        "MCP_LOG_LEVEL": "info",        "FAA_MIRROR_PATH": "/path/to/faa-registry.db"      }    }  }}

Or with Docker (mount a volume at /usr/src/app/.mirror so the built index persists across containers — build it once with docker exec … bun run mirror:init):

json
{  "mcpServers": {    "faa-aircraft-registry-mcp-server": {      "type": "stdio",      "command": "docker",      "args": [        "run", "-i", "--rm",        "-e", "MCP_TRANSPORT_TYPE=stdio",        "-v", "faa-registry:/usr/src/app/.mirror",        "ghcr.io/cyanheads/faa-aircraft-registry-mcp-server:latest"      ]    }  }}

For Streamable HTTP, set the transport and start the server:

sh
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http# Server listens at http://localhost:3010/mcp

FAA_MIRROR_PATH points the server at the index that mirror:init builds — set it to a persistent path so the index survives across runs. Owner PII is redacted by default; set FAA_REDACT_OWNER_PII=false only on a trusted local install to expose owner detail.

First-run setup

The FAA Releasable Aircraft Database is not bundled with the package — it is a public dataset (~70 MB compressed, refreshed daily by the FAA) that the operator downloads and indexes once before first use. Building the index produces a local SQLite file of a few hundred MB.

Build the index out-of-band (never on server startup — a full parse of ~1M rows must not block start). From a source checkout, run bun install && bun run build first. Then, from the checkout, installed package directory, or extracted MCPB directory, run the compiled commands below. Node and Bun both work; replace node with bun to use Bun's built-in SQLite. The Docker image supports bun run mirror:init, mirror:verify, and mirror:refresh.

sh
# Build the local index from the live FAA download (idempotent, resumable)FAA_MIRROR_PATH=/path/to/faa-registry.db node dist/cli/faa-mirror-init.js
# Verify it built (readiness + integrity check)FAA_MIRROR_PATH=/path/to/faa-registry.db node dist/cli/faa-mirror-verify.js
# Rebuild from the latest FAA release (run on a schedule, or out-of-band for stdio)FAA_MIRROR_PATH=/path/to/faa-registry.db node dist/cli/faa-mirror-refresh.js
  • Keep the path stable. Point FAA_MIRROR_PATH (and the same env var in your MCP client config) at a persistent location so the built index is reused across runs. Default: .mirror/faa-registry.db.
  • Daily refresh. Under HTTP transport the server schedules a daily mirror:refresh aligned to the FAA's nightly re-release (~11:30 PM Central). If an interrupted rebuild leaves the index empty, queries fail loudly with ServiceUnavailable until the rebuild succeeds. Under stdio, run mirror:refresh out-of-band (e.g. a cron job).
  • Docker. The image ships the mirror CLI and a writable .mirror data directory owned by the runtime user. Mount a volume there and run mirror:init once (e.g. docker exec <container> bun run mirror:init, or a one-shot init job against the shared volume) so the index persists across container restarts.
  • Until the index exists, every query fails with a ServiceUnavailable error whose recovery hint points to mirror:init — there is no live API to fall back to, so the cold state surfaces loudly rather than returning empty results.

The source URL is overridable via FAA_DATABASE_URL (for a private or cached mirror); it is read only at ingest time, never per request.

Prerequisites

  • Bun v1.4 or higher (or Node.js v24+). Bun uses built-in bun:sqlite; Node uses the included better-sqlite3 dependency, with bundled N-API prebuilts for macOS, Windows, and Linux (glibc/musl), on x64 and arm64.
  • Disk space for the built index (a few hundred MB) at FAA_MIRROR_PATH.
  • Network access at mirror:init / mirror:refresh time to download the FAA ZIP. Not needed at query time.

Installation

For local development or self-hosting from source:

  1. Clone the repository:
sh
git clone https://github.com/cyanheads/faa-aircraft-registry-mcp-server.git
  1. Navigate into the directory:
sh
cd faa-aircraft-registry-mcp-server
  1. Install dependencies:
sh
bun install
  1. Compile the server and build the index (see First-run setup):
sh
bun run buildbun run mirror:init

Configuration

VariableDescriptionDefault
FAA_REDACT_OWNER_PIIRedact owner name and address and disable owner-name search. Unset, empty, or malformed counts as true.true
FAA_MIRROR_PATHPath to the SQLite index file; use a persistent location..mirror/faa-registry.db
FAA_DATABASE_URLSource URL for the FAA database ZIP, read only by mirror:init / mirror:refresh.FAA registry ZIP
MCP_TRANSPORT_TYPETransport: stdio or http.stdio
MCP_SESSION_MODESession mode: auto, stateful, or stateless.stateless
MCP_HTTP_PORTPort for the HTTP server.3010
MCP_HTTP_ENDPOINT_PATHHTTP endpoint path where the MCP server is mounted./mcp
MCP_AUTH_MODEAuth mode: none, jwt, or oauth.none
MCP_LOG_LEVELLog level (RFC 5424).info
LOGS_DIRDirectory for log files (Node.js only).<project-root>/logs
LOG_TOOL_FAILURE_PAYLOADSLog each failed tool call's arguments and result (cap: LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES, default 16384).false
OTEL_ENABLEDEnable OpenTelemetry instrumentation.false

See .env.example for the full list of optional overrides.

Running the server

Local development

  • Build and run:

    sh
    # One-time buildbun run rebuild
    # Build the local index (see First-run setup)bun run mirror:init
    # Run the built serverbun run start:stdio# orbun run start:http
  • Run checks and tests:

    sh
    bun run devcheck   # Lint, format, typecheck, securitybun run test       # Vitest unit and integration testsbun run test:package # npm tarball + cleaned MCPB runtime checksbun run lint:mcp   # Validate MCP definitions against spec

Docker

sh
docker build -t faa-aircraft-registry-mcp-server .docker run --rm -e MCP_TRANSPORT_TYPE=http -p 3010:3010 \  -v faa-registry:/usr/src/app/.mirror faa-aircraft-registry-mcp-server# Build the index once against the mounted volume:docker run --rm -v faa-registry:/usr/src/app/.mirror faa-aircraft-registry-mcp-server bun run mirror:init

The Dockerfile defaults to HTTP transport with stateless sessions, ships the mirror:init/mirror:refresh/mirror:verify CLI, pre-creates a writable .mirror data directory owned by the runtime user (mount a volume there and run mirror:init once to build and persist the index), and logs to /var/log/faa-aircraft-registry-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Project structure

DirectoryPurpose
src/index.tscreateApp() entry point — registers tools and the resource, inits the registry service, and schedules the daily refresh under HTTP transport.
src/configServer-specific environment variable parsing and validation with Zod.
src/mcp-server/toolsTool definitions (*.tool.ts).
src/mcp-server/resourcesResource definitions (*.resource.ts).
src/services/registryRegistry service — the SQLite + FTS5 mirror, ingester, decode maps, N-number normalizer, and the owner-PII redaction gate.
src/cli/Mirror lifecycle CLI — compiled to dist/cli/ for mirror:init, mirror:refresh, mirror:verify.
tests/Unit and integration tests mirroring src/.

Development guide

See CLAUDE.md/AGENTS.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
  • Register new tools and resources via the barrels in src/mcp-server/*/definitions/index.ts

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

Apache-2.0 — see LICENSE for details.

The FAA Releasable Aircraft Database is a public-domain US Government work, published by the FAA Civil Aviation Registry. This project redistributes none of that data; operators download it directly from the FAA at install time.

來源:README.md,提交 6e10735

工具

5

faa_lookup_registration

faa-aircraft-registry-mcp-server: lookup registration

Decode one US civil aircraft N-number to its full registration record — aircraft make/model, engine, year manufactured, airworthiness, registration status, Mode S (ICAO 24-bit) code, and registered owner (when owner-PII redaction is off). Accepts "N12345" or "12345" (the leading N is optional). Returns ownerRedacted: true when owner details were withheld. A number that is known but inactive (deregistered or reserved) is not found here — use faa_get_registration_status for its current state.

輸入參數nNumber必填

faa_get_aircraft_type

faa-aircraft-registry-mcp-server: get aircraft type

Decode a 6–7-character FAA manufacturer/model/series code to aircraft specifications — manufacturer, model, aircraft category, aircraft type, engine type, number of engines, number of seats, weight class, cruise speed, and type-certificate data sheet/holder. Use faa_search_aircraft_types first to discover a code by manufacturer or model name.

輸入參數code必填

faa_search_registrations

faa-aircraft-registry-mcp-server: search registrations

Search active US civil aircraft registrations by owner name, make/model, exact manufacturerModelCode, state, aircraft type, or Mode S (hex) code. Discover codes with faa_search_aircraft_types, search registrations by manufacturerModelCode, then drill into N-numbers via faa_lookup_registration. Filters are AND-combined; at least one is required. Owner-name search is unavailable when this deployment redacts owner PII — use the other filters instead. Every response reports totalCount (all matches, not just this page); when more remain, it returns nextOffset — pass it back as offset to page forward.

輸入參數limitstateoffsetmakeModelmodeSCodeownerNameaircraftTypemanufacturerModelCode

faa_search_aircraft_types

faa-aircraft-registry-mcp-server: search aircraft types

Search FAA aircraft types by manufacturer/model name, aircraft type code, or category code to discover 6–7-character manufacturer/model/series codes and browse specifications. Pass a code to faa_get_aircraft_type for specs or faa_search_registrations as manufacturerModelCode for exact registration matches, then faa_lookup_registration for details. At least one filter is required. Every response reports totalCount (all matches, not just this page); when more remain, it returns nextOffset — pass it back as offset to page forward.

輸入參數limitqueryoffsetcategoryaircraftType

faa_get_registration_status

faa-aircraft-registry-mcp-server: get registration status

Resolve whether a US civil aircraft N-number is active, deregistered, reserved, or unknown, including the available registration and airworthiness status. Use this rather than faa_lookup_registration when a number may be inactive. A number that was never issued returns recordType "unknown" — a valid, informative answer, not an error. Accepts "N12345" or "12345".

輸入參數nNumber必填

版本歷史

5
  1. v0.1.12最新Oct 18, 2026
  2. v0.1.11Oct 16, 2026
  3. v0.1.10Oct 9, 2026
  4. v0.1.9Sep 21, 2026
  5. v0.1.8Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分