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 分