Live Site: ndc-clearance.netlify.app
Public MCP Endpoint: https://mcp-ndc.sunrisehikers.io/mcp/sse
NDC Clearance is an interactive browser, validator, and diff tool for IATA NDC schemas, with an MCP server for agent workflows.
site/: Astro + Svelte static frontendbackend/: Ktor backend (validation, diff API, MCP)tools/: Kotlin CLI tooling (flatten schemas, download examples, build content catalog)ndc_schemas/: generated flattened schemasraw_ndc_schemas/: original schema sourcesndc_content/: canonical shared content for examples and future flowsiata_ndc_messages.json: version/message map
Canonical content now lives at repo root and is shared by both site and backend.
ndc_content/
examples/
files/iata/*.xml
files/custom/*.xml
sources/iata.generated.json
sources/custom.json
catalog.json
flows/
flows.json
sources/*.json: editable/generated source recordscatalog.json: generated merged read model used by frontend and backendflows.json: flow definitions (structure and validation now in place; flow UX is out of scope)- Example IDs are deterministic:
ex_<12 hex>from
source|message|version|source_page_id_or_url|file_name - Each example has a single
flow_id(notflow_ids) - For IATA records, flow is inferred automatically as one page = one flow (
flow_iata_page_<source_page_id>)
- Node.js
24 - Java
25
cd site
npm ci
npm run devdev and build run npm run copy-assets, which executes:
npm run copy-schemasnpm run copy-content(copiesndc_content/examples/**tosite/public/content/examples/**)
cd backend
./gradlew runEnvironment:
PORT(default8080)SCHEMA_ROOT(defaultsrc/main/resources/schemas)CONTENT_ROOT(defaultsrc/main/resources/content)POSTHOG_API_KEY(optional)
cd tools
./gradlew flatten
./gradlew download
./gradlew buildContentCatalog
./gradlew testcd tools && ./gradlew download
Downloads from IATA pages directly into canonicalndc_content/examples/files/iata/and writesndc_content/examples/sources/iata.generated.json.cd tools && ./gradlew buildContentCatalog
Mergesiata.generated.json+custom.json, validates flows/references, and emitsndc_content/examples/catalog.json.
- Place XML in
ndc_content/examples/files/custom/ - Add record(s) in
ndc_content/examples/sources/custom.json - Run
cd tools && ./gradlew buildContentCatalog
- Edit
ndc_content/flows/flows.jsonwith steps referencingexample_id - Run
cd tools && ./gradlew buildContentCatalogto validate:- referenced
example_idexists - step
messagematches referenced example message - duplicate flow IDs are rejected
- referenced
Available at /mcp/sse:
validate_ndc_xmllist_versionslist_schemasget_schema_fileslist_examples(optional:message,version; no filters returns all examples)get_example_content(required:example_id; optional:include_metadata, defaulttrue)
Examples/flows are exposed through MCP tools only. No REST endpoints were added for this content.
Run full stack locally:
docker-compose up --build- Site:
http://localhost:4321 - Backend:
http://localhost:8080
This project is independent and is not affiliated with, endorsed by, or sponsored by IATA.
AGPL
