{"_id":"@cyanheads/ourairports-mcp-server","_rev":"11-e3e475fdfa468d950a185e0e424cb1f6","name":"@cyanheads/ourairports-mcp-server","dist-tags":{"latest":"0.2.4"},"versions":{"0.1.0":{"name":"@cyanheads/ourairports-mcp-server","version":"0.1.0","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/ourairports-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.1.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"2fa12cbafcfe6f6efd8d3cdfafa908a3d79db267","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.1.0.tgz","fileCount":79,"integrity":"sha512-pPaYCMGcu68+djIA/2tyPBucdSFbL19oCUWM3cYb3sTlFWUc+W7JAZHIIXU8L4/RvCg7UobsAj78mpbxoMRWTw==","signatures":[{"sig":"MEYCIQDAluC1Eg5M+OmzTvWKZJD6d+dlWc1pZJdprsKMAusQvQIhANVoY444nPBYAnL1cQT8bOEDCIgH7C4H42J1IHIvsGR8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20239866},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"2fa12cbafcfe6f6efd8d3cdfafa908a3d79db267","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-pPaYCMGcu68+djIA/2tyPBucdSFbL19oCUWM3cYb3sTlFWUc+W7JAZHIIXU8L4/RvCg7UobsAj78mpbxoMRWTw==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.2","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.8","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.1.0_1781374513509_0.9139287883028151","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cyanheads/ourairports-mcp-server","version":"0.1.1","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":{"url":"https://github.com/cyanheads/ourairports-mcp-server#readme","name":"cyanheads","email":"casey@caseyjhand.com"},"license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.1.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"82ecf3517521f35fc83685c8f08538f99a27d6bb","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.1.1.tgz","fileCount":80,"integrity":"sha512-IM8liBZXAKs5SvPYQl6LWVirY0ORuK1RS68udbkc3XylIt/UNO4IhFkqSwS3J0LpS5USRlI1G5UaI9x/DyOCgw==","signatures":[{"sig":"MEUCIQCYv0FUwFq3911x3O+uUuzPb3TQloOUNo5OSFBf+WQe2gIgeoCWmEtNv5IkIYdJKSDpsSsgFqUC4cw2qgLFKLtXlJA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20240444},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"bun":">=1.3.0","node":">=24.0.0"},"gitHead":"7ed170dd45856ef10690049c27f71816886c3f9c","mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.2","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.8","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.1.1_1781433643242_0.7898920241873659","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cyanheads/ourairports-mcp-server","version":"0.1.2","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/ourairports-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.1.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"a55b14aafa00ccd37fdea5af69f70d24ba9cbeeb","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.1.2.tgz","fileCount":81,"integrity":"sha512-wIsmGKHCw/5O6VBtazAl+KE4/bR7roiO1ftfO+KoBG7SIwr3lm4MfYnChBYq9hXOU5WXzGKRlhVDbyeAUwnZKw==","signatures":[{"sig":"MEQCIBlySi6n9ed65HdEdM3cCQGWrrhAs3izrz01hpyzAmEtAiB1lk233RBB5l0GOmWDC4Dn0mCFpTSkrvmCdXhQJfM5kg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20241686},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"a55b14aafa00ccd37fdea5af69f70d24ba9cbeeb","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-wIsmGKHCw/5O6VBtazAl+KE4/bR7roiO1ftfO+KoBG7SIwr3lm4MfYnChBYq9hXOU5WXzGKRlhVDbyeAUwnZKw==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.2","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.1.2_1781545534122_0.8330248149558541","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cyanheads/ourairports-mcp-server","version":"0.1.3","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/ourairports-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.1.3","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"6032296962478104b1887eb17edee23037a634d3","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.1.3.tgz","fileCount":82,"integrity":"sha512-5Fx9WZgHI/675L6ybst8mOENXajvFfVQIBSFU1G0Wcxd0adcFGywr5GcES4RwNrgVwwWRcbiuM8A9l8s4IZg5w==","signatures":[{"sig":"MEUCIFB2uYCM5nc2o+9JaFsUNA5RB9nwraypmhvb8toEemV/AiEAqlRsjpD/gHhGDsPsSMFyB4u4Nlmxt1jY9bTSH4wt5+c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20243871},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"6032296962478104b1887eb17edee23037a634d3","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-5Fx9WZgHI/675L6ybst8mOENXajvFfVQIBSFU1G0Wcxd0adcFGywr5GcES4RwNrgVwwWRcbiuM8A9l8s4IZg5w==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.2","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"26.0.0","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.1.3_1781978137441_0.05798557868224985","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cyanheads/ourairports-mcp-server","version":"0.1.4","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/ourairports-mcp-server#readme)","license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.1.4","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"2505d959562ca14ea01da2708270778d7f5c6450","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.1.4.tgz","fileCount":83,"integrity":"sha512-oBSTpFj7ihpWJ6ZjpXBxSbT0vWx0WJjIKkGzQM2/DxZRU1DZIzp2O88m4HpwOE9q3KG2WChChkkTBj+Hzi1Q3Q==","signatures":[{"sig":"MEQCIG/js7UwXqbjT1w7LtKO6VvQl1yem32+ZPqigl6kApgbAiAaJs0tVZv5KIrTRFzd9zT4b+e/UnSL6P//I1mim4bN0Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20251141},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"2505d959562ca14ea01da2708270778d7f5c6450","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-oBSTpFj7ihpWJ6ZjpXBxSbT0vWx0WJjIKkGzQM2/DxZRU1DZIzp2O88m4HpwOE9q3KG2WChChkkTBj+Hzi1Q3Q==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.2","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"26.0.1","@biomejs/biome":"2.5.1"},"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.1.4_1782850303992_0.4056229876710036","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cyanheads/ourairports-mcp-server","version":"0.1.5","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.1.5","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"75a390af27fb03d62f29f812b07f86aee4adc280","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.1.5.tgz","fileCount":84,"integrity":"sha512-/yCXzz7+nSDoGIeLJrXC9NKaJI3ndjTlzAtbtAS7QFAaP7D6WP2rDubl6z4eTH9R6BOvf6yOF6HjAKT5dVxxQg==","signatures":[{"sig":"MEUCIQCQgGAjgwyz2EBXTZO/vDEB9MZczOBUIV8tf3wBil0HEQIgQmvQiwRDfftGdLG85g6P9a2MfQqRSmElFFjecr3BRdY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20258774},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"75a390af27fb03d62f29f812b07f86aee4adc280","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-/yCXzz7+nSDoGIeLJrXC9NKaJI3ndjTlzAtbtAS7QFAaP7D6WP2rDubl6z4eTH9R6BOvf6yOF6HjAKT5dVxxQg==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.10","depcheck":"^1.4.7","tsc-alias":"^1.9.1","typescript":"^6.0.3","@types/node":"26.1.1","@biomejs/biome":"2.5.4","@socketsecurity/bun-security-scanner":"^1.1.2"},"trustedDependencies":["@socketsecurity/bun-security-scanner"],"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.1.5_1784409192451_0.9438231749968937","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cyanheads/ourairports-mcp-server","version":"0.2.0","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.2.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"dfc5fe20cfb63cefa942e9a2c3bce32b060d0f0a","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.2.0.tgz","fileCount":89,"integrity":"sha512-ENLGJK3pixLl8NDHB9Sp+MCfYK3dZJFt/bDsIRLRRRwjixBlbYDHy+bquVVcpLDrbQhq1B8KaZFiB4EBFiU6JA==","signatures":[{"sig":"MEQCIHg7MVjL7Z0JtXfWGlE6rL+8DyR3lJb5iV4RBBXmazcGAiACuleXxtVZd/Uv5ARi5ofZoXXIxxeYFwwAbk5DI8DA5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20291461},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"dfc5fe20cfb63cefa942e9a2c3bce32b060d0f0a","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-ENLGJK3pixLl8NDHB9Sp+MCfYK3dZJFt/bDsIRLRRRwjixBlbYDHy+bquVVcpLDrbQhq1B8KaZFiB4EBFiU6JA==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.10","depcheck":"^1.4.7","tsc-alias":"^1.9.1","typescript":"^6.0.3","@types/node":"26.1.1","@biomejs/biome":"2.5.4","@socketsecurity/bun-security-scanner":"^1.1.2"},"trustedDependencies":["@socketsecurity/bun-security-scanner"],"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.2.0_1784413164549_0.39710527946590135","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cyanheads/ourairports-mcp-server","version":"0.2.1","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.2.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"923828cdb46fba83d71bb6d230c43f65289a21fe","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.2.1.tgz","fileCount":90,"integrity":"sha512-s5DgYRs+X7xudeFfkbqHBSG4cDG1ORkKCMXvEQFUj24XoTda1xG6oUa+rBr+cJzDzWP1n1m66B0q/4WYk7ALOQ==","signatures":[{"sig":"MEUCIQDRhTfEOYD5hxblkTtct1JJzW947Vh70eIGQgZyrUY4RAIgSiGULvlVi/zCWCSCfniDZgcC2977PoOmoDT+HPMJmbw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20297631},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"923828cdb46fba83d71bb6d230c43f65289a21fe","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-s5DgYRs+X7xudeFfkbqHBSG4cDG1ORkKCMXvEQFUj24XoTda1xG6oUa+rBr+cJzDzWP1n1m66B0q/4WYk7ALOQ==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.10.14"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.10","depcheck":"^1.4.7","tsc-alias":"^1.9.1","typescript":"^6.0.3","@types/node":"26.1.1","@biomejs/biome":"2.5.4","@socketsecurity/bun-security-scanner":"^1.1.2"},"trustedDependencies":["@socketsecurity/bun-security-scanner"],"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.2.1_1784417875959_0.8525086543061822","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@cyanheads/ourairports-mcp-server","version":"0.2.2","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.2.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"faca2abc330fee746d51c25ea567fde8168b33f6","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.2.2.tgz","fileCount":91,"integrity":"sha512-Q4b0OpYM12CgxMeuLzi8L5uZhHPRmxbZAW646XjUDmOXmobj/1Z/+V+6DAZEqiqftmlZSJzELz1kVOKgSrU1xQ==","signatures":[{"sig":"MEUCIAS7B9ZtrmA5FPknrYxiR+Sfqil07fT1EMoILEF+XOSRAiEAyjdmB1m7cEloCMh83ad6BOTaMX5aQskEtbAAsRdEdHI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20304110},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"faca2abc330fee746d51c25ea567fde8168b33f6","engines":{"bun":">=1.3.0","node":">=24.0.0"},"mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-Q4b0OpYM12CgxMeuLzi8L5uZhHPRmxbZAW646XjUDmOXmobj/1Z/+V+6DAZEqiqftmlZSJzELz1kVOKgSrU1xQ==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.12.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.11","depcheck":"^1.4.7","tsc-alias":"^1.9.2","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"26.2.0","@biomejs/biome":"2.5.10","@socketsecurity/bun-security-scanner":"^1.1.2"},"trustedDependencies":["@socketsecurity/bun-security-scanner"],"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.2.2_1787626605734_0.3857734360102678","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@cyanheads/ourairports-mcp-server","version":"0.2.3","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/ourairports-mcp-server@0.2.3","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"bin":{"ourairports-mcp-server":"dist/index.js"},"dist":{"shasum":"a4b0ef32dae380577292e325ecdc41ec0790e97b","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.2.3.tgz","fileCount":92,"integrity":"sha512-xXtwbJzBTXyGwXQSlBnLNkEy0pvARwVaffx3s0HTFCskhyo51w8Mz9ZHsCy0KGJ/lbM4vrO0uc4suPnLqgDW1Q==","signatures":[{"sig":"MEYCIQDMcqzL8jTOnZbED52iQ3s6C5i6G6wnU9rNdvJ2yLewSgIhAPoyEdR4GSTnOVJ7WRq+YFmvqDhRpEH07mahYan78UgA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBdyooRYS4KBxgp4hMM2NwUgeW7aYgmZx5Xifoc8P/cRAiAsol3esKch6tjJM00mLPaPiVn0OaHv/YBOGe+ICrOmqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20306185},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"a4b0ef32dae380577292e325ecdc41ec0790e97b","engines":{"bun":">=1.4.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","audit:fix":"bun audit fix","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-xXtwbJzBTXyGwXQSlBnLNkEy0pvARwVaffx3s0HTFCskhyo51w8Mz9ZHsCy0KGJ/lbM4vrO0uc4suPnLqgDW1Q==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.9","vitest":"^5.0.1","depcheck":"^1.4.7","tsc-alias":"^1.9.5","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"26.6.1","@biomejs/biome":"2.5.14","@socketsecurity/bun-security-scanner":"^1.1.2"},"trustedDependencies":["@socketsecurity/bun-security-scanner"],"_npmOperationalInternal":{"tmp":"tmp/ourairports-mcp-server_0.2.3_1789845863359_0.13997923499786658","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"_id":"@cyanheads/ourairports-mcp-server@0.2.4","bin":{"ourairports-mcp-server":"dist/index.js"},"bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"dist":{"shasum":"26bb273c2182702c04c57ef856b448ef57edfdf8","tarball":"https://registry.npmjs.org/@cyanheads/ourairports-mcp-server/-/ourairports-mcp-server-0.2.4.tgz","fileCount":93,"integrity":"sha512-paTKaF5a3bBzEZW4FguQ0MX4Zq8s4efmd5e1M9ljyE6P5ONS5w2GzSwgFXRuFgb5d43p9AexviOelnUlwK76Ng==","signatures":[{"sig":"MEYCIQC5HQE4ws5WS23NmPBcv6KgfANySBKEtL90VKKg/5y0GQIhAJzrWuSKtb16Dydkq4MxXVHbOpU/b5LGcnHXv8bpFn3g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDlaE5WkanU/8owl3bDhn/qBftvG0rZzBae7Ejo7B0/fwIhAOYE8Wo8MkImf8YndolKKR+N3qun3liqoF0aAm5qOflO"}],"unpackedSize":20347473},"main":"dist/index.js","name":"@cyanheads/ourairports-mcp-server","type":"module","types":"dist/index.d.ts","author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","shasum":"26bb273c2182702c04c57ef856b448ef57edfdf8","engines":{"bun":">=1.4.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"license":"Apache-2.0","mcpName":"io.github.cyanheads/ourairports-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/ourairports-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/ourairports-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","audit:fix":"bun audit fix","build:data":"bun run scripts/build-data.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install","format:unsafe":"biome check --write --unsafe .","lint:packaging":"bun run scripts/lint-packaging.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"version":"0.2.4","_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"_integrity":"sha512-paTKaF5a3bBzEZW4FguQ0MX4Zq8s4efmd5e1M9ljyE6P5ONS5w2GzSwgFXRuFgb5d43p9AexviOelnUlwK76Ng==","repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","directories":{},"maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","pino-pretty":"^13.1.3","@cyanheads/mcp-ts-core":"^0.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.9","vitest":"^5.0.1","depcheck":"^1.4.7","tsc-alias":"^1.9.5","fast-check":"^4.10.2","typescript":"^7.0.2","@types/node":"26.6.2","@biomejs/biome":"2.5.14","@socketsecurity/bun-security-scanner":"^1.1.2"},"trustedDependencies":["@socketsecurity/bun-security-scanner"],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ourairports-mcp-server_0.2.4_1790230143707_0.3867246265196398"}}},"time":{"created":"2026-06-13T18:15:13.357Z","modified":"2026-09-24T06:09:04.065Z","0.1.0":"2026-06-13T18:15:13.790Z","0.1.1":"2026-06-14T10:40:43.513Z","0.1.2":"2026-06-15T17:45:34.465Z","0.1.3":"2026-06-20T17:55:37.688Z","0.1.4":"2026-06-30T20:11:44.259Z","0.1.5":"2026-07-18T21:13:12.686Z","0.2.0":"2026-07-18T22:19:24.826Z","0.2.1":"2026-07-18T23:37:56.232Z","0.2.2":"2026-08-25T02:56:45.989Z","0.2.3":"2026-09-19T19:24:23.588Z","0.2.4":"2026-09-24T06:09:03.885Z"},"bugs":{"url":"https://github.com/cyanheads/ourairports-mcp-server/issues"},"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","homepage":"https://github.com/cyanheads/ourairports-mcp-server#readme","keywords":["mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ourairports","aviation","airport","airports","iata","icao","navaid","runway","geospatial"],"repository":{"url":"git+https://github.com/cyanheads/ourairports-mcp-server.git","type":"git"},"description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"readme":"<div align=\"center\">\n  <h1>@cyanheads/ourairports-mcp-server</h1>\n  <p><b>Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.</b>\n  <div>6 Tools • 1 Resource</div>\n  </p>\n</div>\n\n<div align=\"center\">\n\n[![Version](https://img.shields.io/badge/Version-0.2.4-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/ourairports-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.0.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/ourairports-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/ourairports-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.0%2B-blueviolet.svg?style=flat-square)](https://bun.sh/)\n\n</div>\n\n<div align=\"center\">\n\n[![Install in Claude Desktop](https://img.shields.io/badge/Install_in-Claude_Desktop-D97757?style=for-the-badge&logo=anthropic&logoColor=white)](https://github.com/cyanheads/ourairports-mcp-server/releases/latest/download/ourairports-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=ourairports-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvb3VyYWlycG9ydHMtbWNwLXNlcnZlciJdfQ==) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22ourairports-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fourairports-mcp-server%22%5D%7D)\n\n</div>\n\n<div align=\"center\">\n\n[![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-67E8F9?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)\n\n</div>\n\n<div align=\"center\">\n\n**Public Hosted Server:** [https://ourairports.caseyjhand.com/mcp](https://ourairports.caseyjhand.com/mcp)\n\n</div>\n\n---\n\n## Overview\n\nOffline aviation reference data from the public-domain [OurAirports](https://ourairports.com/) dataset — airports, runways, navaids, and radio frequencies, bundled with the package rather than fetched at runtime. Resolve an airport by any code, search by name or facets, ground a coordinate in the nearest airports or navaids, and look up the countries and regions in the dataset. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.\n\n### Tools\n\n| Tool | Description |\n|:---|:---|\n| `ourairports_search_airports` | Full-text and faceted search over the airport corpus by name, municipality, country, region, or type. Ranked summaries, closed airports excluded by default. |\n| `ourairports_search_runways` | Search runways across all airports by surface, length, width, and lighting, joined back to their airports and filtered by country, region, or airport type. One flat `{ airport, runway }` row per matching runway. |\n| `ourairports_get_airport` | Full record for one airport resolved by any code (IATA/ICAO/GPS/local/ident), with its runways and radio frequencies inline. |\n| `ourairports_find_airports` | Airports within a radius of a coordinate, ranked nearest-first by great-circle distance, with distance and bearing. |\n| `ourairports_find_navaids` | Navigation aids (VOR, VOR-DME, DME, NDB, NDB-DME, TACAN, VORTAC) near a coordinate or serving a specific airport. |\n| `ourairports_list_countries` | Countries present in the dataset with ISO codes and airport counts; optional continent filter and nested regions. The lookup table for valid `country`/`region` filter values. |\n\n### Resources\n\n| Resource | Description |\n|:---|:---|\n| `airport://{code}` | Single airport record by any code (IATA/ICAO/GPS/local/ident), with runways and frequencies inline. |\n\nAll data is also reachable via `ourairports_get_airport` — tool-only clients lose nothing. Not exposed as a resource list (enumerating 85k airports is a dump, not a discovery aid); discovery is `ourairports_search_airports`.\n\n## Capability reference\n\n### `ourairports_search_airports` <sub>tool</sub>\n\n- Free-text search over name, municipality, and keywords; tokens are AND-matched (word order and partial words handled)\n- Faceted filters: `country` (ISO 3166-1 alpha-2), `region` (ISO 3166-2), and `type` — `country`/`region` are exact match, case-insensitive, with surrounding whitespace ignored\n- Closed airports excluded by default; opt in with `include_closed`\n- Results ranked operational/larger-airports-first, each with its full code set and coordinates for chaining into `ourairports_get_airport`\n- `limit` accepts 1–100 rows and defaults to `OURAIRPORTS_DEFAULT_SEARCH_LIMIT` (20); truncation reports the total matched count, cap, and recovery guidance\n\n---\n\n### `ourairports_search_runways` <sub>tool</sub>\n\n- Airport facets (`country`, `region`, `type`) narrow the airports first; runway facets (`surface`, `min_length_ft`, `min_width_ft`, `lighted`) then filter their runways\n- `surface` is a case-insensitive substring match against the raw upstream surface string (no controlled vocabulary — a shorter fragment like `asp` matches ASP, ASPH, and Asphalt), not an exact code\n- Returns one flat `{ airport, runway }` row per matching runway — an airport with three matching runways contributes three rows\n- `lengthFt` and `min_length_ft` are the full runway surface as OurAirports records it, including displaced thresholds and overruns — not usable takeoff or landing distance; each runway also carries `leDisplacedThresholdFt` / `heDisplacedThresholdFt` (`null` when none is recorded)\n- A runway whose length or width is unknown is excluded when the matching `min_*_ft` filter is set — never assumed to meet a threshold the data can't confirm\n- Closed airports and closed runways are both excluded unless `include_closed_airports` / `include_closed_runways` is set\n- `limit` accepts 1–100 rows and defaults to `OURAIRPORTS_DEFAULT_SEARCH_LIMIT` (20); truncation reports the total matched count, cap, and recovery guidance\n\n---\n\n### `ourairports_get_airport` <sub>tool</sub>\n\n- Resolves a single `code` case-insensitively across all five identifier spaces (priority: ident → ICAO → IATA → GPS → local); surrounding whitespace is ignored\n- Runways and radio frequencies inline; `include` trims the response to a subset, and the output's `included` field distinguishes a relation omitted by `include` from one that genuinely has no records\n- Echoes the airport's complete code set plus a `resolvedVia` / `resolutionNote`; when other airports carry the same code, the note names each one (ident, country, code space) and says whether resolution priority or dataset row order picked this airport, so a wrong resolution is self-correcting — pass the other airport's ident\n- Runways carry full-surface `lengthFt` plus per-end displaced thresholds (`leDisplacedThresholdFt` / `heDisplacedThresholdFt`)\n- Absent codes reported as `null`; closed airports always resolve\n- `unknown_code` error with a recovery hint when no identifier space matches\n\n---\n\n### `ourairports_find_airports` <sub>tool</sub>\n\n- Great-circle (haversine) ranking, nearest-first, each result with `distanceKm` and `bearingDeg` (degrees true) from the query point\n- `radius_km` (1–500, default 100); `limit` (1–50) defaults to `OURAIRPORTS_DEFAULT_SEARCH_LIMIT`, clamped to this tool's 50-row max; optional `type` filter; `include_closed` opt-in\n- Coordinate in, ranked airports out — no geocoding; resolve place names to lat/lon upstream first\n- `totalCount` is the filtered in-radius count before `limit`; truncation reports the cap and recovery guidance (narrow `radius_km`, add `type`, or raise `limit`)\n- Empty-radius guidance suggesting a wider `radius_km`\n\n---\n\n### `ourairports_find_navaids` <sub>tool</sub>\n\n- **Coordinate mode:** `latitude` + `longitude` (+ optional `radius_km`, 1–500, default 100) ranks navaids nearest-first with distance and bearing; `limit` (1–50) defaults to `OURAIRPORTS_DEFAULT_SEARCH_LIMIT`, clamped to 50\n- **Airport mode:** `airport_code` returns the navaids serving that airport\n- Exactly one mode required — supplying both or neither is a `mode_conflict` validation error\n- `frequencyKhz` is the stored value for every type (a VOR on 114.5 MHz reads 114500); `frequencyMhz` carries the VHF frequency of a VOR or VOR-DME and the paired VHF frequency of a DME, TACAN, or VORTAC, and is `null` for NDB and NDB-DME, which tune in kHz; an upstream `-1` placeholder reads as `null`\n- Each navaid carries its service-volume metadata as recorded upstream: `usageType` (HI, LO, BOTH, TERMINAL, RNAV), `power`, `magneticVariationDeg` (actual, positive east), `slavedVariationDeg` (the variation built into the radials), and `dmeFrequencyKhz` (the DME's paired VHF frequency) — `null` where the dataset has no value\n- `totalCount` is the match count before `limit` in both modes; truncation reports the cap and recovery guidance\n- Airport mode distinguishes \"airport not found\" (`unknown_code` error) from \"airport found but has no associated navaids\" (empty list with a note)\n- Airport mode adds a `resolutionNote` when `airport_code` is also a code of other airports, naming them by ident — the same note `ourairports_get_airport` returns\n\n---\n\n### `ourairports_list_countries` <sub>tool</sub>\n\n- Optional `continent` filter (AF, AN, AS, EU, NA, OC, SA); optional `include_regions` nests each country's ISO 3166-2 regions with their airport counts\n- Airport counts exclude closed airports\n- Countries sorted by name; the lookup table for valid `country` / `region` filter values used by `ourairports_search_airports`\n- Empty continent match returns a notice suggesting a call without the filter\n\n---\n\n### `airport://{code}` <sub>resource</sub>\n\n- Same record as `ourairports_get_airport`, including the same `resolutionNote` — runways and radio frequencies always inline, so there is no `include` / `included`\n- `code` resolves case-insensitively across all five identifier spaces (priority: ident → ICAO → IATA → GPS → local)\n- `unknown_code` error with a recovery hint when no identifier space matches\n\n## Features\n\nBuilt on [`@cyanheads/mcp-ts-core`](https://github.com/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.\n\nOurAirports-specific:\n\n- Bundled, public-domain dataset baked into the package and Docker image — zero runtime API, no key, no rate limit, no upstream outage\n- In-memory indices built once at startup: id maps, a priority-ordered unified code index, airport-ref joins for runways and frequencies, an ident-keyed navaid join, a flat `Float64Array` of coordinates, country/region maps, and a tokenized text-search index\n- Brute-force haversine nearest-neighbour over the coordinate array — a few milliseconds across 85k airports, no spatial-index dependency\n- CSVs parsed by header name, not column position, so an upstream column reorder can't silently misalign fields\n\nAgent-friendly output:\n\n- Honest sparsity — absent upstream fields (no IATA, no elevation, null runway dimensions) surface as `null`, never fabricated\n- Self-correcting resolution — every airport record echoes its full code set and a `resolvedVia` / `resolutionNote` that names every other airport sharing the code, by ident\n- Text output that matches the structured output — coordinates render at full precision, and upstream text is Markdown-escaped in `content` only, so names like `GRASS&amp;GRAVEL` display as recorded\n- Truncation and empty-result disclosure — total counts, applied caps, and recovery guidance so callers can broaden, narrow, or re-query without parsing prose\n\n## Getting started\n\n### Public Hosted Instance\n\nA public instance is available at `https://ourairports.caseyjhand.com/mcp` — no installation required. Point any MCP client at it via Streamable HTTP, with this client config:\n\n```json\n{\n  \"mcpServers\": {\n    \"ourairports-mcp-server\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://ourairports.caseyjhand.com/mcp\"\n    }\n  }\n}\n```\n\n### Self-Hosted / Local\n\nAdd the following to your MCP client configuration file.\n\n```json\n{\n  \"mcpServers\": {\n    \"ourairports-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"bunx\",\n      \"args\": [\"@cyanheads/ourairports-mcp-server@latest\"],\n      \"env\": {\n        \"MCP_TRANSPORT_TYPE\": \"stdio\",\n        \"MCP_LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\nOr with npx (no Bun required):\n\n```json\n{\n  \"mcpServers\": {\n    \"ourairports-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cyanheads/ourairports-mcp-server@latest\"],\n      \"env\": {\n        \"MCP_TRANSPORT_TYPE\": \"stdio\",\n        \"MCP_LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\nOr with Docker:\n\n```json\n{\n  \"mcpServers\": {\n    \"ourairports-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\", \"-i\", \"--rm\",\n        \"-e\", \"MCP_TRANSPORT_TYPE=stdio\",\n        \"ghcr.io/cyanheads/ourairports-mcp-server:latest\"\n      ]\n    }\n  }\n}\n```\n\nNo API key is required — the dataset ships with the package and the image.\n\nFor Streamable HTTP, set the transport and start the server:\n\n```sh\nMCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http\n# Server listens at http://localhost:3010/mcp\n```\n\n### Prerequisites\n\n- [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).\n- No API key, account, or external service — all data is bundled.\n\n### Installation\n\n1. **Clone the repository:**\n\n```sh\ngit clone https://github.com/cyanheads/ourairports-mcp-server.git\n```\n\n2. **Navigate into the directory:**\n\n```sh\ncd ourairports-mcp-server\n```\n\n3. **Install dependencies:**\n\n```sh\nbun install\n```\n\n4. **Fetch and bundle the dataset** (writes the six CSVs into `data/`):\n\n```sh\nbun run build:data\n```\n\n### Refreshing the data\n\nThe bundled snapshot is as fresh as the last `build:data` run (or, for the Docker image, the last build). To pull the latest daily drop from the OurAirports mirror, re-run `bun run build:data` and rebuild. To point at an existing local data drop without rebuilding, set `OURAIRPORTS_DATA_DIR`.\n\n## Configuration\n\n| Variable | Description | Default |\n|:---|:---|:---|\n| `OURAIRPORTS_DATA_DIR` | Directory holding the six OurAirports CSV files. Overridable to point at a fresher local data drop. | Bundled `data/` |\n| `OURAIRPORTS_DEFAULT_SEARCH_LIMIT` | Default result cap for the search/find tools when the caller omits `limit` (1–100). | `20` |\n| `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http`. | `stdio` |\n| `MCP_HTTP_PORT` | Port for the HTTP server. | `3010` |\n| `MCP_HTTP_ENDPOINT_PATH` | HTTP endpoint path where the server is mounted. | `/mcp` |\n| `MCP_AUTH_MODE` | Auth mode: `none`, `jwt`, or `oauth`. | `none` |\n| `MCP_SESSION_MODE` | HTTP session mode: `stateful`, `stateless`, or `auto`. This server uses stateless mode because no tool requests follow-up input. | `stateless` |\n| `MCP_LOG_LEVEL` | Log level (RFC 5424). | `info` |\n| `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |\n| `STORAGE_PROVIDER_TYPE` | Storage backend (unused on the data path — the index is in-memory). | `in-memory` |\n| `OTEL_ENABLED` | Enable [OpenTelemetry instrumentation](https://github.com/cyanheads/mcp-ts-core/tree/main/docs/telemetry). | `false` |\n\nSee [`.env.example`](./.env.example) for the full list of optional overrides.\n\n## Running the server\n\n### Local development\n\n- **Build and run:**\n\n  ```sh\n  # One-time data fetch + build\n  bun run build:data\n  bun run rebuild\n\n  # Run the built server\n  bun run start:stdio\n  # or\n  bun run start:http\n  ```\n\n- **Run checks and tests:**\n\n  ```sh\n  bun run devcheck   # Lint, format, typecheck, security\n  bun run test       # Vitest test suite\n  bun run lint:mcp   # Validate MCP definitions against spec\n  ```\n\n### Docker\n\n```sh\ndocker build -t ourairports-mcp-server .\ndocker run --rm -i -e MCP_TRANSPORT_TYPE=stdio ourairports-mcp-server\n```\n\nThe build stage runs `bun run build:data` so the dataset is fetched and baked into the image — the resulting container is fully self-contained and makes no network calls at runtime. The Dockerfile defaults to HTTP transport, stateless session mode, and logs to `/var/log/ourairports-mcp-server`. OpenTelemetry peer dependencies are installed by default — build with `--build-arg OTEL_ENABLED=false` to omit them.\n\n## Project structure\n\n| Directory | Purpose |\n|:---|:---|\n| `src/index.ts` | `createApp()` entry point — registers tools/resources and loads the bundled index at `setup()`. |\n| `src/config` | Server-specific environment variable parsing and validation with Zod. |\n| `src/mcp-server/tools` | Tool definitions (`*.tool.ts`). Six read-only airport/runway/navaid tools. |\n| `src/mcp-server/resources` | Resource definitions. The `airport://{code}` record. |\n| `src/services/airport-data` | The bundled-data service — CSV parsing, in-memory indices, code resolution, search, and the haversine geo scan. |\n| `scripts/build-data.ts` | Build-time fetcher that bundles the six OurAirports CSVs into `data/`. |\n| `framework-skills/` | Project development skills synced from `@cyanheads/mcp-ts-core`. |\n| `tests/` | Unit and integration tests mirroring `src/`. |\n\n## Development guide\n\nSee [`CLAUDE.md`/`AGENTS.md`](./CLAUDE.md) for development guidelines and architectural rules. The short version:\n\n- Handlers throw, framework catches — no `try/catch` in tool logic\n- Use `ctx.log` for request-scoped logging, `ctx.state` for tenant-scoped storage\n- Register new tools and resources via the barrels in `src/mcp-server/*/definitions/index.ts`\n- Surface upstream data as-is: report absent fields as `null`, never fabricate missing values\n\n## Attribution\n\nAirport, runway, navaid, and frequency data from [OurAirports](https://ourairports.com/), dedicated to the public domain. Attribution is a courtesy, not a requirement. Source CSVs are published daily at [davidmegginson.github.io/ourairports-data](https://davidmegginson.github.io/ourairports-data/).\n\nOurAirports is community-edited; the data is surfaced as-is and is not authoritative for real flight operations — treat it the way you would any crowd-sourced reference.\n\n## Contributing\n\nIssues are welcome. Run checks and tests before submitting:\n\n```sh\nbun run devcheck\nbun run test\n```\n\n## License\n\nApache-2.0 — see [LICENSE](./LICENSE) for details.\n","readmeFilename":"README.md"}