faa-aircraft-registry-mcp-server
Decode N-numbers to aircraft, engine, status, and owner, and search the US civil aircraft registry (FAA Releasable Aircraft Database) by owner, type, or state — offline and keyless over an embedded SQLite + FTS5 mirror, with fail-safe owner-PII redaction.
Install / Use
claude mcp add cyanheads -- npx -y github:cyanheads/faa-aircraft-registry-mcp-serverIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
Data & AnalyticsSupported Platforms
Our assessment of faa-aircraft-registry-mcp-server
faa-aircraft-registry-mcp-server scores 83/100 on our quality scale, 435th of 587 Data & Analytics skills we index.
Its MCP Server is 19 KB long, well organised into 31 sections with 12 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 15 days ago, so faa-aircraft-registry-mcp-server is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
faa-aircraft-registry-mcp-server compared with similar skills
All 4 of these similar skills score higher than faa-aircraft-registry-mcp-server; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| faa-aircraft-registry-mcp-server (this skill)by cyanheads | 83 | 3 | 15d ago | MCP Server |
| claude-memby thedotmack | 100 | 96.6k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 91.8k | 20d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 74.5k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.2k | today | CLAUDE.md |
Frequently asked questions
- How do I install faa-aircraft-registry-mcp-server?
- Run
claude mcp add cyanheads -- npx -y github:cyanheads/faa-aircraft-registry-mcp-server. The install tabs above show the steps for each supported agent. - Which AI agents does faa-aircraft-registry-mcp-server work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is faa-aircraft-registry-mcp-server safe to use?
- It is Apache-2.0-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is faa-aircraft-registry-mcp-server still maintained?
- The repository was last updated 15 days ago, so faa-aircraft-registry-mcp-server is actively maintained.
Skill content
View source on GitHubPublic Hosted Server: https://faa-aircraft-registry.caseyjhand.com/mcp
</div>Overview
The US civil aircraft registry, mirrored offline from the FAA's Releasable Aircraft Database — there is no live FAA registry API. Decode an N-number to its aircraft, engine, and registered owner; resolve active, deregistered, or reserved status; search by owner, make/model, state, or Mode S code; and decode manufacturer/model codes to full aircraft specs. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.
Tools
| Tool | Description |
|:---|:---|
| faa_lookup_registration | Decode 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_status | Resolve an N-number across all three status files (active, deregistered, reserved) in priority order, returning a definitive recordType. |
| faa_search_registrations | Search active registrations by owner name, make/model, state, aircraft type, or Mode S code. |
| faa_search_aircraft_types | Search the aircraft reference table by manufacturer/model name, type, or category to discover manufacturer-model codes. |
| faa_get_aircraft_type | Decode a 6–7-character manufacturer/model/series code to aircraft specs — category, type, engine, seats, weight class, cruise speed, type-certificate data. |
Resources
| Resource | Description |
|:---|:---|
| 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 <sub>tool</sub>
- Accepts
N12345or12345— leadingNoptional, normalized before lookup - Resolves
MASTER→ACFTREF→ENGINEand decodes every coded field (aircraft type, engine type, status, airworthiness class, region) as both raw code and label - Returns the Mode S code in octal and hex; hex is the ICAO 24-bit address used by flight-tracking feeds
- Owner name/address included only when
FAA_REDACT_OWNER_PII=false; otherwiseownerRedacted: trueflags that they were withheld - Typed errors:
not_found(well-formed but no active registration — usefaa_get_registration_status),invalid_n_number(malformed input)
faa_get_registration_status <sub>tool</sub>
- Checks active (
MASTER), deregistered (DEREG), and reserved (RESERVED) files in priority order - Discriminated
recordType:active,deregistered,reserved, orunknown— a never-issued number resolves tounknown, not an error - Branch-specific fields populate per state (active: status + airworthiness + dates; deregistered: cancel date + serial + mfr/model code; reserved: reservation type + reserve/expiration/purge dates)
- Owner-PII-free — status facts only
- Typed error:
invalid_n_numberfor malformed input
faa_search_registrations <sub>tool</sub>
- Filters:
ownerName,makeModel,state,aircraftType,modeSCode— at least one required - Owner-name search disabled when
FAA_REDACT_OWNER_PIIis on; typedowner_search_disablederror names the alternative filters limit1–200 (default 25) andoffsetpagination; every response reportstotalCount, and a truncated page carriesnextOffset- Each result carries an N-number to pass to
faa_lookup_registrationfor full detail - Typed error:
no_filterswhen no filter is supplied
faa_search_aircraft_types <sub>tool</sub>
- Filters:
query(manufacturer/model name, full-text),aircraftTypecode,categorycode — at least one required - Returns reference summaries with the code to pass to
faa_get_aircraft_type limit1–200 (default 25) andoffsetpagination; every response reportstotalCount, and a truncated page carriesnextOffset- Typed error:
no_filterswhen no filter is supplied
faa_get_aircraft_type <sub>tool</sub>
- Accepts a 6–7-character uppercase alphanumeric manufacturer/model/series code
- Returns manufacturer, model, aircraft type, engine type, category, builder certification, seats, engines, weight class, cruise speed, and type-certificate data
- Discover codes by name first via
faa_search_aircraft_types - Typed errors:
not_found(well-formed code, no reference record),invalid_code(malformed input)
faa://registration/{nNumber} <sub>resource</sub>
- Same payload as
faa_lookup_registration—application/json, cached 1 hour, private scope nNumberacceptsN12345or12345(leadingNoptional)- Typed errors:
not_found,invalid_n_number— same conditions as the tool
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 — every query hits the local SQLite + FTS5 index; no API key, no runtime network, no rate limit
- Built on the framework
MirrorService:mirror:initbuilds the index out-of-band, and the HTTP server schedules a daily refresh aligned to the FAA's nightly re-release - Pre-joined
MASTER→ACFTREF→ENGINErecords — one call returns decoded aircraft, engine, and status instead of raw join codes - Fail-safe owner-PII redaction — defaults on, drops owner name/address from output, and disables owner-name search while active
- Composes with live flight-tracking feeds — the Mode S hex code returned here is the ICAO 24-bit address that OpenSky and similar feeds key on
Agent-friendly output:
- Coded fields surface both the raw FAA code and the decoded label — the label for reasoning, the code so nothing is lost
- Truncation disclosure — search tools flag
truncatedwithshown/capwhen the result set is capped, so a partial page is never read as the whole - Permissible-field honesty — fields the FAA leaves blank (year, cruise speed, co-owner names) stay absent rather than fabricated
- Discriminated output —
recordTypeandownerRedactedflags let callers branch on data, not string parsing
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:
{
"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:inithas run once, queries fail with a clear "run mirror:init" error.
Add the following to your MCP client configuration file:
{
"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):
{
"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):
{
"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:
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.
After installing, build the index out-of-band (never on server startup — a full parse of ~1M rows must not block start):
# Build the local index from the live FAA download (idempotent, resumable)
FAA_MIRROR_PATH=/path/to/faa-registry.db bun run mirror:init
# Verify it built (readiness + integrity check)
FAA_MIRROR_PATH=/path/to/faa-registry.db bun run mirror:verify
# Rebuild from the latest FAA r
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
96.6kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
91.8kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
74.5kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.2kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
