Prototyp · Vorschau: alle Server aus der offiziellen Registry, alle 30 Minuten synchronisiert. Bewertungen und Benutzerkonten folgen in einem späteren Schritt.
PopNx MCPMCP-Server für alle, die KI nutzen · in einfachen Worten erklärt

KeyFlight PNR Converter

von KeyflightVersion 1.0.0i★ –iLäuft in der Cloud
Name in der Registryio.keyflight/pnr

Installieren

Überblick

Beschreibung vom Entwickler (englisches Original)

Decode Amadeus, Sabre, Galileo and Worldspan PNRs into itineraries, JSON and PRO ticket PDFs.

Die drei Säulen von PopNx MCP

Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.

Was du damit machen kannst

Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.

  • Verbindung: Läuft in der Cloud
  • Transport: Streamable HTTP
  • Kategorie: Sonstiges
  • Das musst du eintragen: Authorization

Installation

Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.

Bevor du installierst

  • Basischecks: 1 von 1 bestanden
  • Läuft auf dem Server des Entwicklers: Was du fragst, läuft über dessen Server.
  • Das trägst du selbst ein: Authorization

Als geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.

Du brauchst

Welche App nutzt du?

Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.

Diese Adresse braucht einen Schlüssel in einem Header der Anfrage, und das Menü zum Hinzufügen von Connectors kann ihn nicht setzen. Nutze stattdessen Claude Code, Cursor oder VS Code.

Führe das in deinem Terminal aus

claude mcp add --transport http pnr https://keyflight.io/mcp --header 'Authorization: Bearer {api_key}'

Trag die leeren Werte ein, bevor du ihn startest.

In Cursor öffnen

Oder kopier die Einstellungen selbst

In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen

{
  "mcpServers": {
    "pnr": {
      "url": "https://keyflight.io/mcp",
      "headers": {
        "Authorization": "Bearer {api_key}"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

In VS Code öffnen

Oder kopier die Einstellungen selbst

In .vscode/mcp.json in deinem Projekt einfügen

{
  "servers": {
    "pnr": {
      "type": "http",
      "url": "https://keyflight.io/mcp",
      "headers": {
        "Authorization": "Bearer {api_key}"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

Diese Adresse braucht einen Schlüssel in einem Header der Anfrage, und das Menü zum Hinzufügen von Connectors kann ihn nicht setzen. Nutze stattdessen Claude Code, Cursor oder VS Code.

Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.

Werte, die du selbst einträgst

  • Authorization geheim erforderlich HTTP header
    Your KeyFlight API key as a Bearer token: Bearer kfp_… Keys come with the KeyFlight subscription for travel agents: https://keyflight.io/subscription

Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.

Was er kann

Die Tool-Liste dieses Servers haben wir noch nicht gelesen; wir prüfen die Endpunkte reihum.

Basischecksi

Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 6. Nov. 2026

  • ✓ Bestanden

    Entwickler passt zum Repo

    Der Registry-Name wurde über die Domain keyflight.io bestätigt (die Registry prüft, wem die Domain gehört)

  • … Noch nicht geprüft

    Wird noch gepflegt

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • … Noch nicht geprüft

    Hat eine Lizenz

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • … Noch nicht geprüft

    Endpunkt antwortet

    Noch nicht geprüft; wir prüfen die Endpunkte reihum

  • … Noch nicht geprüft

    Anmeldung mit OAuth

    Noch nicht geprüft; wir prüfen die Endpunkte reihum

  • … Noch nicht geprüft

    Keine versteckten Anweisungen in Tool-Beschreibungen

    Noch nicht geprüft; wir lesen die Tool-Liste, wenn wir den Endpunkt prüfen

Im Vergleich mit anderen in Sonstigesi

  • Mehr Sterne als 0 % der anderen 32435 Server in dieser Kategorie
  • Neuer in der Registry veröffentlicht als 69 % der anderen 32435 Server in dieser Kategorie
  • Basischecks gleich gut wie oder besser als bei 100 % der anderen 32435 Server in dieser Kategorie

Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.

Häufige Fragen

Ist KeyFlight PNR Converter sicher?

Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.

Welche Schlüssel oder Codes braucht er?

Das musst du eintragen: Authorization

Läuft er auf meinem Computer oder in der Cloud?

Er läuft in der Cloud des Entwicklers. Du verbindest dich übers Internet, ohne etwas zu installieren, aber was du sendest, läuft über die Server des Entwicklers.

Wird er noch gepflegt?

Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (1.0.0) kam vor 17 Tagen in die Registry.

Welche Apps können ihn nutzen?

Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Er verbindet sich per URL, also funktionieren auch Apps, die Remote-MCP-Server akzeptieren, zum Beispiel ChatGPT im Entwicklermodus.

Was kann ich stattdessen nutzen?

In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, Apify MCP Server

Alternativen

Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.

So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti

Spec Driven Development

von formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

Läuft auf deinem Computer★ 440MITAktualisiert vor 14 Monaten
Installieren

Remote Desktop Commander

von desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

Läuft in der Cloud★ 211Aktualisiert gestern
Installieren

Extract data from any website with thousands of scrapers, crawlers, and automations on Apify Store ⚡

Läuft in der CloudAktualisiert heute
Installieren

README vom Entwickler

README öffnen

Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.

KeyFlight PNR Converter: MCP server and PNR API

Paste a raw booking from a GDS (Amadeus, Sabre, Galileo, Worldspan) into Claude, Cursor or another AI assistant and get a readable itinerary, the booking as JSON, or a PRO ticket PDF.

KeyFlight runs a hosted Model Context Protocol server at https://keyflight.io/mcp and an HTTP API at https://keyflight.io/api/v1/pnr/decode. Both use the same decoder as the free PNR converter on keyflight.io.

This repository holds the documentation and examples. The server itself is hosted by KeyFlight: there is nothing to install or run. Full reference: keyflight.io/pnr-api.

Who it is for: travel agents and agencies who work with GDS bookings, and developers who add PNR decoding to a booking tool, CRM, chat bot or e-mail flow.

  • Get an API key
  • Connect an AI assistant (MCP)
  • MCP tools
  • PNR API over HTTP
  • Limits
  • Errors
  • Supported GDS formats

Get an API key

The MCP server and the PNR API take the same key, kfp_ followed by 43 letters, digits, - and _.

  1. Get the KeyFlight subscription (the subscription for travel agents).
  2. On the same page use "Already subscribed?", open the link we e-mail you and press "Create API key".
  3. Copy the key: it is shown once. A subscription can have 2 keys at a time; you revoke a key on the same page.

While the subscription is not active, the key answers 403 subscription_inactive. There is no free tier for the API or the MCP server. The PNR converter on the website is free for everyone, with no key.

Connect an AI assistant (MCP)

Server URLhttps://keyflight.io/mcp
TransportStreamable HTTP, POST only, no sessions and no server-sent event stream
Authenticationheader Authorization: Bearer kfp_…
Protocol versions2025-06-18, 2025-03-26, 2024-11-05
Claude Code
claude mcp add --transport http keyflight https://keyflight.io/mcp --header "Authorization: Bearer kfp_…"
Cursor (.cursor/mcp.json)
{

"mcpServers": { "keyflight": { "url": "https://keyflight.io/mcp", "headers": { "Authorization": "Bearer kfp_…" } } } }

Claude Desktop (claude_desktop_config.json, needs Node.js)

Claude Desktop connects through mcp-remote:

{

"mcpServers": { "keyflight": { "command": "npx", "args": [ "-y", "mcp-remote", "https://keyflight.io/mcp", "--header", "Authorization: Bearer kfp_…" ] } } }

Cline (cline_mcp_settings.json)

In Cline open MCP Servers → Configure MCP Servers and add:

{

"mcpServers": { "keyflight": { "type": "streamableHttp", "url": "https://keyflight.io/mcp", "headers": { "Authorization": "Bearer kfp_…" }, "disabled": false, "autoApprove": [] } } }

Step-by-step notes for AI agents that install the server: llms-install.md.

Then ask, for example: *"Decode this PNR and make a PRO ticket with a price of 850 EUR"* and paste the booking.

Other clients: any MCP client that supports Streamable HTTP and custom headers. Requests sent from web pages of other sites (with a browser Origin header) are refused with 403 origin_not_allowed, so connect from a desktop app, a CLI or your server. Without a client, see examples/mcp/raw-jsonrpc.sh: one JSON-RPC message per POST, JSON back.

MCP tools

decode_pnr: decode a PNR

Turns a raw PNR into a readable itinerary (text) and structured JSON: passengers, flights, airports, terminals, local times, flight duration, airline locators.

ArgumentTypeDefaultDescription
textstring, requiredThe PNR as the GDS shows it, up to 20,000 characters. The format is recognised from the text.
viewtable, lines2, lines3, whatsapptableLayout of the itinerary text.
time_format"24", "12""24"24 or 12 hour time.
date_format"short", "numeric""short"short: 3 May 2026, numeric: 03.05.2026.

Returns the itinerary text, then JSON: and the same JSON as the PNR API answer. Clients that read structuredContent get that JSON there.

Each decode that finds flights counts towards the monthly decodes of the subscription, like an API call. A text without flights returns an error and does not count. When the decodes of the month are used up, the tool returns an error until the 1st (UTC).

make_ticket: make a PRO ticket PDF

Makes a PRO ticket PDF (PNR, airline logos, class, optional price) from a raw PNR and returns a link to the PDF. Included in the KeyFlight subscription.

The ticket is a document for the traveller: it is not an airline ticket and its PNR is not checked against airline systems.

ArgumentTypeDefaultDescription
textstring, requiredThe PNR, up to 20,000 characters. Every flight needs a date and times.
passengersarray of strings, up to 20the names in the PNRPassenger names as on the ticket, e.g. "SMITH/JOHN MR".
pnrstringthe code in the text, or a random oneBooking code printed on the ticket, 5–8 letters and digits.
booking_classEconomy, Premium Economy, Business, First Classthe cabin of the first flight's booking classClass on the ticket.
pricestringno price on the ticketTotal price printed on the ticket, e.g. "1200.50".
currencystring, up to 10 characters"$"Currency next to the price, e.g. "USD", "€".
logonone, expeditionnoneLogo in the ticket header.
time_format"24", "12""24"24 or 12 hour time.
date_format"short", "numeric"short or numeric.

Returns a line PRO ticket PDF: https://keyflight.io/tickets/….pdf with the PNR, the number of flights and the passengers, and as structuredContent:

{ "url": "https://keyflight.io/tickets/….pdf", "pnr": "PQ7XNR", "passengers": ["JOHNSON JOHN", "JOHNSON JANE"], "segments": 2 }

Tickets do not count towards the monthly decodes; one key can make up to 30 tickets an hour.

Errors (no flights in the text, a flight without a date or time, no passenger names, a wrong pnr or option, more than 30 tickets in an hour) come back as tool results with isError: true, so the assistant can read them and fix the call.

PNR API over HTTP

POST https://keyflight.io/api/v1/pnr/decode with Content-Type: application/json and Authorization: Bearer kfp_…. The body is { "text": "…", "options": { … } }. The HTTP API returns data and the itinerary as text and HTML; PRO ticket PDFs come from the MCP tool make_ticket. The examples below send the Amadeus booking from examples/pnr-amadeus.txt.

curl
curl https://keyflight.io/api/v1/pnr/decode \

-H "Authorization: Bearer $KEYFLIGHT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "RP/LHRBA/LHRBA BA/BA 26APR26/1200Z PQ7XNR\nPQ7XNR/BA QLHR 03MAY\n1.JOHNSON JOHN\n2.JOHNSON JANE\n3 BA 178 Y 03MAY 7 LHRJFK HK2 0855 1205 03MAY E BA/PQ7XNR\n4 BA 117 Y 10MAY 7 JFKLHR HK2 1830 0640 11MAY E BA/PQ7XNR\n5 TKT/TIME LIMIT\n6 OPC LHRBA-10MAY:1900/1S2/Q TKT/T-BA\n7 FA PAX 125-2196837482/ETBA/GBP560.20/03MAY26/LHRBA2104/00390755/S3-4", "options": { "view": "table" } }'

Node.js 18+

examples/api/decode.mjs:

// Node.js 18+ (fetch is built in), in an ES module or an async function

const text = RP/LHRBA/LHRBA BA/BA 26APR26/1200Z PQ7XNR PQ7XNR/BA QLHR 03MAY 1.JOHNSON JOHN 2.JOHNSON JANE 3 BA 178 Y 03MAY 7 LHRJFK HK2 0855 1205 03MAY E BA/PQ7XNR 4 BA 117 Y 10MAY 7 JFKLHR HK2 1830 0640 11MAY E BA/PQ7XNR 5 TKT/TIME LIMIT 6 OPC LHRBA-10MAY:1900/1S2/Q TKT/T-BA 7 FA PAX 125-2196837482/ETBA/GBP560.20/03MAY26/LHRBA2104/00390755/S3-4;

const response = await fetch('https://keyflight.io/api/v1/pnr/decode', { method: 'POST', headers: { Authorization: Bearer ${process.env.KEYFLIGHT_API_KEY}, 'Content-Type': 'application/json', }, body: JSON.stringify({ text, options: { "view": "table" } }), }); const data = await response.json(); if (response.ok) { data.segments.forEach((s) => console.log(s.airlineCode, s.flightNumber, s.departure.date)); } else { console.error(response.status, data.error, data.message); }

Python

examples/api/decode.py (needs requests):

import os

import requests

text = """RP/LHRBA/LHRBA BA/BA 26APR26/1200Z PQ7XNR PQ7XNR/BA QLHR 03MAY 1.JOHNSON JOHN 2.JOHNSON JANE 3 BA 178 Y 03MAY 7 LHRJFK HK2 0855 1205 03MAY E BA/PQ7XNR 4 BA 117 Y 10MAY 7 JFKLHR HK2 1830 0640 11MAY E BA/PQ7XNR 5 TKT/TIME LIMIT 6 OPC LHRBA-10MAY:1900/1S2/Q TKT/T-BA 7 FA PAX 125-2196837482/ETBA/GBP560.20/03MAY26/LHRBA2104/00390755/S3-4"""

response = requests.post( "https://keyflight.io/api/v1/pnr/decode", headers={"Authorization": f"Bearer {os.environ['KEYFLIGHT_API_KEY']}"}, json={"text": text, "options": { "view": "table" }}, timeout=30, ) data = response.json() if response.ok: for s in data["segments"]: print(s["airlineCode"], s["flightNumber"], s"departure") else: print(response.status_code, data["error"], data["message"])

Options
FieldValuesDefault
textRequired. The booking as the GDS shows it, up to 20,000 characters.
options.viewtable, lines2, lines3, whatsapp: the layout of itinerary.table
options.timeFormat"24" (18:30), "12" (6:30 PM)"24"
options.dateFormat"short" (3 May 2026), "numeric" (03.05.2026)"short"
options.show.logotrue / false. Airline logos (HTML only).true
options.show.airportstrue / false. Airport names and terminals next to the city.true
options.show.cabintrue / false. Cabin and booking class: Economy (Y).false
options.show.statustrue / false. Segment status: Confirmed, Waitlisted.false
options.show.passengerstrue / false. Passenger names above the flights.false
options.show.pnrtrue / false. The booking reference and the airlines' references above the flights.false

An unknown option or a wrong value answers 400 invalid_option with the field and the allowed values.

Response

The full answer to the example above: examples/api/response-example.json (itinerary.html shortened). Main fields:

FieldMeaning
pnrCodeThe booking reference found in the text, or null.
passengers[].nameA passenger name as the PNR writes it.
segments[].airlineCode, airlineName, flightNumberAirline and flight number ("950" for UA0950).
segments[].bookingClass, cabinBooking class letter and cabin by it: Economy, Premium Economy, Business, First Class.
segments[].status, statusTextStatus code as in the PNR ("HK2") and Confirmed, Waitlisted or the code itself.
segments[].logoUrlAirline logo, 64×64 PNG.

| segments[].duration | Flight time in minutes across the two airports' time zones, or null

Nur der Anfang wird gezeigt; den Rest findest du im Repo

PopNx fragen