Skip to main content
Glama

Quick start

  1. Get a free API key at app.flightbyte.dev/signup.

  2. Connect the server. Use the hosted one, or run it locally:

    Address

    Key

    Hosted

    https://mcp.flightbyte.dev/mcp

    Authorization: Bearer <key> header

    Local

    npx -y @flightbyte/mcp

    FLIGHTBYTE_KEY environment variable

    In Claude Code, for example:

    claude mcp add --transport http flightbyte https://mcp.flightbyte.dev/mcp \
      --header "Authorization: Bearer $FLIGHTBYTE_KEY"

    Every other client is under Install.

  3. Ask: "Is TK1848 on time today?"

In Claude (claude.ai, Desktop or mobile) there is nothing to copy: FlightByte is in Claude's connector directory. Add it there, and the first time Claude needs your account it asks you to sign in to FlightByte and allow it. See Sign in with OAuth.

The docs tools work without a key or a sign-in, so an assistant can read the documentation before you have signed up.

Related MCP server: FlightTicketMCP

What you can ask

You ask

What happens

"Is TK1848 on time today? Which gate?"

get_flight returns the live snapshot: phase, gate, terminal, delay, and the best known departure and arrival times.

"TK1 from Istanbul tomorrow: when does it leave?"

TK1 flies two legs that day. The assistant passes origin: "IST" and gets the right one instead of a guess.

"Watch PC1001 on Friday and post every change to https://api.example.com/hooks/flights."

create_subscription starts the watch and hands you the signing secret, shown once.

"Our webhook stopped firing. Why?"

get_subscription and list_deliveries show the status and the HTTP code and error of every recent attempt.

"Add a FlightByte webhook receiver with signature verification to this Express app."

search_docs and get_doc_page pull the exact steps from the docs, so the code matches the API rather than a guess.

Tools

Docs: no key needed.

Tool

What it does

search_docs

Keyword search over the whole documentation: docs, API reference, guides and glossary. Returns titles, links and snippets.

get_doc_page

Any docs page as Markdown, from a link or a path like /docs/webhooks.

Flights: read-only.

Tool

What it does

get_flight

Live status of one flight leg: phase, gates, terminals, baggage belt, scheduled, estimated and actual times, delay, aircraft, codeshares, and every leg the number flies that day.GET /v1/flights/{carrier}/{flightNumber}/{date}

search_flights

The same lookup with query parameters.GET /v1/flights/search

get_flight_timeline

The airline's own change history for a leg, newest first.GET /v1/flights/{carrier}/{flightNumber}/{date}/timeline

Subscriptions

Tool

What it does

Access

create_subscription

Watch a flight and get a signed webhook for every change. Counts as a watched flight on your plan.POST /v1/subscriptions

writes

list_subscriptions

Your subscriptions, filtered by status, carrier, number or date.GET /v1/subscriptions

read-only

get_subscription

One subscription with its status and delivery counters.GET /v1/subscriptions/{id}

read-only

update_subscription

Change the webhook URL, event filter, delay threshold, headers or metadata.PATCH /v1/subscriptions/{id}

writes

pause_subscription

Stop polling and deliveries without losing anything.POST /v1/subscriptions/{id}/pause

writes

resume_subscription

Resume a paused or auto-suspended subscription.POST /v1/subscriptions/{id}/resume

writes

delete_subscription

Delete a subscription for good.DELETE /v1/subscriptions/{id}

destructive

send_test_event

Send a signed test webhook to the subscription's URL.POST /v1/subscriptions/{id}/test

writes

list_deliveries

Recent delivery attempts with HTTP status and errors.GET /v1/subscriptions/{id}/deliveries

read-only

list_events

Recent events with the exact payloads that were sent.GET /v1/subscriptions/{id}/events

read-only

Parameters carry the API's own names (carrier, flightNumber, date, origin, webhookUrl, Idempotency-Key, …), and the test suite checks every one against the OpenAPI document. Results are the API's JSON, as text and as structured content.

Built for assistants

  • Your key stays yours. The local server reads FLIGHTBYTE_KEY. The hosted server reads the key from each request's header, uses it for that request only, and never stores or logs it. Signed in with OAuth, the app never sees a key at all, and you can revoke it under Connected apps.

  • Secrets stay out of the chat. There are no tools to reveal or rotate a webhook signing secret, because either would put it into the model's context and from there into transcripts. create_subscription returns the secret once, as the API does, and tells the assistant to hand it to you. Reveal or rotate a secret yourself with the API: reveal, rotate.

  • Clients know what is safe. Read-only tools are marked read-only and delete_subscription is marked destructive, so clients can ask before running it. create_subscription tells the model it creates a billable watched flight and should only run when you ask for one.

  • Errors say what to do next. A flight number that flies twice comes back with its legs and "pass origin". A 429 comes back with how long to wait. A 402 watched_flight_limit says to stop, when the allowance resets, and where to upgrade; a 402 overage_cap_reached says the cap you set on extra flights is reached and where to raise or remove it.

  • Docs fetches stay on flightbyte.dev. get_doc_page refuses every other host.

Install

Replace YOUR_FLIGHTBYTE_KEY with your key. Every client below can use the hosted server; the local one needs Node.js 20 or later.

Hosted:

claude mcp add --transport http flightbyte https://mcp.flightbyte.dev/mcp \
  --header "Authorization: Bearer YOUR_FLIGHTBYTE_KEY"

Local:

claude mcp add flightbyte --env FLIGHTBYTE_KEY=YOUR_FLIGHTBYTE_KEY \
  -- npx -y @flightbyte/mcp

Add --scope user to have it in every project. To share it with a team through a committed .mcp.json, keep the key in each person's environment:

{
  "mcpServers": {
    "flightbyte": {
      "type": "http",
      "url": "https://mcp.flightbyte.dev/mcp",
      "headers": { "Authorization": "Bearer ${FLIGHTBYTE_KEY}" }
    }
  }
}

Click Add to Cursor at the top for the hosted server, or this link for the local one, then replace YOUR_FLIGHTBYTE_KEY in the installed entry. Or add it to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):

{
  "mcpServers": {
    "flightbyte": {
      "url": "https://mcp.flightbyte.dev/mcp",
      "headers": { "Authorization": "Bearer YOUR_FLIGHTBYTE_KEY" }
    }
  }
}

Local:

{
  "mcpServers": {
    "flightbyte": {
      "command": "npx",
      "args": ["-y", "@flightbyte/mcp"],
      "env": { "FLIGHTBYTE_KEY": "YOUR_FLIGHTBYTE_KEY" }
    }
  }
}

"Bearer ${env:FLIGHTBYTE_KEY}" also works, if Cursor was started from a shell that has the variable.

Click Install in VS Code at the top: VS Code asks for the key and stores it securely. Or add it to .vscode/mcp.json:

{
  "inputs": [
    { "type": "promptString", "id": "flightbyte_key", "description": "FlightByte API key", "password": true }
  ],
  "servers": {
    "flightbyte": {
      "type": "http",
      "url": "https://mcp.flightbyte.dev/mcp",
      "headers": { "Authorization": "Bearer ${input:flightbyte_key}" }
    }
  }
}

Local, from a terminal:

code --add-mcp '{"name":"flightbyte","type":"stdio","command":"npx","args":["-y","@flightbyte/mcp"],"env":{"FLIGHTBYTE_KEY":"YOUR_FLIGHTBYTE_KEY"}}'

Add the local server to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then quit and reopen Claude:

{
  "mcpServers": {
    "flightbyte": {
      "command": "npx",
      "args": ["-y", "@flightbyte/mcp"],
      "env": { "FLIGHTBYTE_KEY": "YOUR_FLIGHTBYTE_KEY" }
    }
  }
}

Or skip the key: add FlightByte from Claude's connector directory, or add the hosted server under Customize → Connectors → Add custom connector with the URL https://mcp.flightbyte.dev/mcp (on Team and Enterprise plans an Owner adds it under Organization settings → Connectors). If the dialog asks, pick Sign in when needed and Use Claude's published identity. The docs tools work right away; the first time Claude calls a tool that needs your account, it shows a Connect button, you sign in to FlightByte and allow it, and the call goes through. See Sign in with OAuth.

  • Streamable HTTP: https://mcp.flightbyte.dev/mcp with the header Authorization: Bearer YOUR_FLIGHTBYTE_KEY (or x-api-key: YOUR_FLIGHTBYTE_KEY).

  • stdio: command npx, arguments -y @flightbyte/mcp, environment FLIGHTBYTE_KEY=YOUR_FLIGHTBYTE_KEY.

Both speak MCP 2026-07-28 and the 2025 revisions (2024-11-05 to 2025-11-25); the client's first message picks one. A Streamable HTTP client that supports MCP authorization can sign in with OAuth instead of sending a key.

Sign in with OAuth

The hosted server is an OAuth 2.1 protected resource, as the MCP authorization spec describes, so clients that take OAuth and no API key (Claude's connectors) can use it with your account.

  • Signed out, initialize, tools/list, search_docs and get_doc_page work. Calling an API tool answers 401 with WWW-Authenticate: Bearer resource_metadata="https://mcp.flightbyte.dev/.well-known/oauth-protected-resource/mcp", which is what makes the client offer to sign in.

  • The authorization server is the FlightByte API (https://api.flightbyte.dev, metadata at /.well-known/oauth-authorization-server). You sign in to the dashboard and allow the app there; it acts as one of your API keys, so that key's plan, quota, logs and watched flights apply. Clients identify themselves with a Client ID Metadata Document (as Claude and Claude Code do) or register dynamically; PKCE is required, and refresh tokens rotate.

  • Scopes: flights:read (the flight tools), subscriptions:read (listing watches, deliveries and events) and subscriptions:write (creating, changing and deleting watches, and test events). A tool outside the granted scopes answers 403 insufficient_scope.

  • Tokens are never passed through. The MCP spec forbids sending a client's token on to another API, so this server trades it at the authorization server (RFC 8693) for a short-lived token for the API, with a client secret of its own, and keeps the trade in memory until it expires. Revoking the app under Connected apps, or revoking the key it acts as, stops it on its next request.

  • API keys work exactly as before, in either header. OAuth is off unless FLIGHTBYTE_OAUTH_CLIENT_SECRET is set.

Configuration

Variable

Used by

Default

Meaning

FLIGHTBYTE_KEY

local

none

Your API key. Without it the API tools explain how to set one and the docs tools still work. The hosted server ignores it and reads the key from each request.

FLIGHTBYTE_API_URL

both

https://api.flightbyte.dev/v1

API base URL, e.g. http://localhost:3000/v1 for a local API.

FLIGHTBYTE_DOCS_URL

both

https://flightbyte.dev

Docs site that serves /llms-full.txt and <page>.md.

PORT

HTTP

8080

Listening port.

HOST

HTTP

127.0.0.1 (0.0.0.0 in Docker)

Listening address.

RATE_LIMIT_PER_MINUTE

HTTP

120

Requests to /mcp per client IP per minute; 0 turns it off.

TRUST_PROXY

HTTP

0 (1 in Docker)

How many reverse proxies' X-Forwarded-For entries to trust when finding the client IP.

ALLOWED_HOSTS

HTTP

loopback names on a loopback HOST, otherwise any

Comma-separated Host values accepted on /mcp, against DNS rebinding.

FLIGHTBYTE_OAUTH_CLIENT_SECRET

HTTP

none

Turns OAuth on: this server's secret at the authorization server, used only to trade tokens. Must match the API's OAUTH_MCP_CLIENT_SECRET.

MCP_PUBLIC_URL

HTTP

https://mcp.flightbyte.dev

This server's public origin; the OAuth resource is <MCP_PUBLIC_URL>/mcp and must equal the API's OAUTH_MCP_RESOURCE.

FLIGHTBYTE_OAUTH_ISSUER

HTTP

https://api.flightbyte.dev

The authorization server named in the protected resource metadata.

FLIGHTBYTE_OAUTH_TOKEN_URL

HTTP

<issuer>/oauth/token

Where tokens are traded, e.g. the API's internal address.

FLIGHTBYTE_OAUTH_CLIENT_ID

HTTP

flightbyte-mcp

This server's client id at the authorization server.

Self-hosting

The hosted server is this repository's Dockerfile: a stateless Streamable HTTP server with no database. Its one secret is the OAuth client secret, and only when OAuth is on.

docker build -t flightbyte-mcp .
docker run -p 8080:8080 flightbyte-mcp

It serves POST /mcp and GET /healthz. Each request gets a fresh server bound to the key in its headers; responses are plain JSON with no sessions, so it scales to any number of replicas. Requests in the 2026-07-28 format are served by the SDK's per-request handler, and 2025-era requests by a JSON-mode Streamable HTTP transport. Deployment notes for Dokploy are in DEPLOY.md.

Development

Running the server needs Node.js 20 or later; developing it needs 22.12 or later.

npm install
npm run build        # TypeScript → dist/
npm test             # builds, then runs everything against a local mock of the API and docs
npm run typecheck
npm run lint

The tests never touch the real API and need no key. They cover every tool's request mapping, the error mapping, docs parsing and ranking, and both transports end to end: the built dist/stdio.js and dist/http.js are spawned and driven by MCP clients on protocol 2025-11-25 and 2026-07-28, including one built on the v1 SDK. A drift check fails when a tool's parameter names, locations, required fields or enums stop matching spec/openapi.json, a copy of the public OpenAPI document. When the API changes:

npm run sync:openapi
npm test

Try it by hand with the MCP Inspector, or against a local API:

npx @modelcontextprotocol/inspector node dist/stdio.js
FLIGHTBYTE_API_URL=http://localhost:3000/v1 FLIGHTBYTE_KEY=your-local-key node dist/stdio.js
src/
  stdio.ts            bin entry: stdio transport, key from FLIGHTBYTE_KEY
  http.ts             HTTP entry: POST /mcp, GET /healthz, env config
  http-app.ts         request handling, protocol routing, key extraction, the OAuth gate, per-IP rate limit
  oauth.ts            protected resource metadata, WWW-Authenticate challenges, the token trade
  server.ts           createServer(): registers every tool on an McpServer
  tools/api-tools.ts  the 13 API tools, one definition per OpenAPI operation
  tools/docs-tools.ts search_docs and get_doc_page
  docs.ts             llms-full.txt parsing, ranking, caching, page fetches
  api.ts              fetch wrapper for the REST API
  errors.ts           error envelope → tool error with next steps
spec/openapi.json     copy of the public OpenAPI document (npm run sync:openapi)
server.json           MCP Registry entry: the npm package and the hosted remote
  1. Bump version in package.json and in both places in server.json; a test fails if they differ.

  2. npm publish. It runs typecheck, lint and tests first, and publishes publicly under the @flightbyte scope.

  3. Publish server.json to the MCP Registry: mcp-publisher login dns --domain flightbyte.dev …, then mcp-publisher publish.

  4. Redeploy the Docker image behind mcp.flightbyte.dev.

License

MIT

Available Tools

15 tools
create_subscriptionCreate a subscriptionA

Watch a flight: FlightByte polls it on an adaptive schedule and POSTs a signed webhook to webhookUrl for every change (status, gates, terminals, times, delays, departure, arrival, baggage carousel, cancellation, diversion, aircraft, route, codeshares) until the flight is over. Each new subscription counts as a watched flight on the user's plan (Free: 3 per month) and starts outbound requests to the URL, so only call this when the user asked to watch or be notified about a specific flight and gave the webhook URL. If the flight number operates more than one leg that day the call is refused with the list of legs: pass origin. Flights up to seven days ahead are accepted and wait as pending until published. The response includes the signing secret in full; this is the only time it is shown, so relay it to the user to store for webhook signature verification. Pass Idempotency-Key to make a retry return the same subscription.

NameRequiredDescriptionDefault
dateYesLocal departure date at the origin airport, YYYY-MM-DD. A flight that leaves at 23:50 and lands the next morning belongs to the day it left. Live records cover a few days back to about two days ahead.
eventsNoChange types to deliver; omit to deliver all 23. Common picks: "flight.departed", "flight.arrived", "flight.cancelled", "flight.diverted", "departure.gate.changed", "arrival.baggage.changed", "delay.increased".
originNoDeparture airport, IATA code (e.g. "IST"; the upstream code such as "ISL" also works). Picks the leg when the flight number operates more than one leg that day.
secretNoBring your own signing secret, only when the user explicitly provides one their receiver already uses. Normally omit it: FlightByte generates one and returns it once.
carrierYesAirline code: the 2-character IATA code (e.g. "TK") or 3-character ICAO code (e.g. "THY"). For flight "TK1848" this is "TK".
headersNoExtra HTTP headers sent with every delivery, e.g. {"Authorization": "Bearer <receiver token>"}.
flightIdNoExact leg pick: a providerFlightId from a previous response's `alternates`, or a flightId from an error's list of legs.
metadataNoString map echoed back in every webhook, e.g. {"bookingId": "BK-1042"}. Use it to tie deliveries to your own records.
webhookUrlYesThe user's public http(s) endpoint that receives a signed POST for every change. Addresses that resolve to private, loopback or link-local ranges are refused. Never invent one.
destinationNoArrival airport, IATA code (e.g. "JFK"). Narrows further when several legs leave the same airport.
flightNumberYesFlight number without the airline code: 1 to 4 digits and an optional letter suffix. For "TK1848" this is "1848". Leading zeros are ignored.
Idempotency-KeyNoAny unique string (e.g. a UUID). Replaying the same key within 24 hours returns the original subscription instead of creating a second one.
delayThresholdMinutesNoDelay changes smaller than this many minutes are not delivered. 1 to 240; the default is 1.
delete_subscriptionDelete a subscriptionA
DestructiveIdempotent

Permanently delete a subscription: its polling and webhook deliveries stop and it cannot be restored. Confirm with the user first, and prefer pause_subscription if they may want it back. Events and deliveries already recorded stay on FlightByte's side for 30 days.

NameRequiredDescriptionDefault
idYesSubscription id, e.g. "sub_7Kd91mQx0Zb2", as returned by create_subscription or list_subscriptions.
get_doc_pageRead a FlightByte docs pageA
Read-onlyIdempotent

Fetch one FlightByte documentation page as Markdown. Accepts a URL from search_docs (anchors are ignored) or a path such as "/docs/webhooks", "/docs/reference/subscriptions/create-subscription", "/guides/verifying-webhook-signatures" or "/glossary/flight-phase". "/docs" is the introduction, with links to every page. Works without an API key.

NameRequiredDescriptionDefault
pathYesDocs path or URL, e.g. "/docs/errors" or "https://flightbyte.dev/docs/webhooks#verifying-signatures".
get_flightGet a flightA
Read-only

Look up the live status of one flight leg by airline code, flight number and local departure date, e.g. TK1848 on 2026-10-18 → carrier "TK", flightNumber "1848", date "2026-10-18". Returns FlightByte's flight snapshot: status.phase to branch on (scheduled, boarding, departed, en_route, landed, arrived, cancelled, diverted, redirected, unknown) with delayed/cancelled/diverted flags; departure and arrival airports with terminal, gate and baggage carousel; scheduled, estimated and actual gate and runway times in UTC and local time (bestTimeUtc is the best single time, delayMinutes the gate delay); aircraft, codeshares, the airline timeline, cached, and alternates: every leg this flight number operates that day. Some numbers fly more than one leg a day (TK1 is SAW→AMS in the morning and IST→JFK later): without a selector the default leg is returned, so pass origin when the user named a departure airport. For updates over time, create a subscription instead of calling this repeatedly.

NameRequiredDescriptionDefault
dateYesLocal departure date at the origin airport, YYYY-MM-DD. A flight that leaves at 23:50 and lands the next morning belongs to the day it left. Live records cover a few days back to about two days ahead.
originNoDeparture airport, IATA code (e.g. "IST"; the upstream code such as "ISL" also works). Picks the leg when the flight number operates more than one leg that day.
carrierYesAirline code: the 2-character IATA code (e.g. "TK") or 3-character ICAO code (e.g. "THY"). For flight "TK1848" this is "TK".
refreshNotrue skips FlightByte's cache and asks upstream now (counts as a normal request). Leave unset unless the user needs a guaranteed fresh answer.
flightIdNoExact leg pick: a providerFlightId from a previous response's `alternates`, or a flightId from an error's list of legs.
destinationNoArrival airport, IATA code (e.g. "JFK"). Narrows further when several legs leave the same airport.
flightNumberYesFlight number without the airline code: 1 to 4 digits and an optional letter suffix. For "TK1848" this is "1848". Leading zeros are ignored.
get_flight_timelineFlight timelineA
Read-only

The airline's own change history for one flight leg, newest first, as {flightKey, count, data}; each entry has occurredAt, title, source and events in the airline's words (e.g. "Actual Gate Arrival changed to 13:35"). Use it for "what changed" or "why is it late" questions. get_flight already contains the same timeline, so call this only when the history alone is needed.

NameRequiredDescriptionDefault
dateYesLocal departure date at the origin airport, YYYY-MM-DD. A flight that leaves at 23:50 and lands the next morning belongs to the day it left. Live records cover a few days back to about two days ahead.
originNoDeparture airport, IATA code (e.g. "IST"; the upstream code such as "ISL" also works). Picks the leg when the flight number operates more than one leg that day.
carrierYesAirline code: the 2-character IATA code (e.g. "TK") or 3-character ICAO code (e.g. "THY"). For flight "TK1848" this is "TK".
destinationNoArrival airport, IATA code (e.g. "JFK"). Narrows further when several legs leave the same airport.
flightNumberYesFlight number without the airline code: 1 to 4 digits and an optional letter suffix. For "TK1848" this is "1848". Leading zeros are ignored.
get_subscriptionGet a subscriptionA
Read-only

Fetch one subscription: status (active, pending, paused, completed, suspended) and statusReason, flightKey, flightResolved, webhook URL, event filter, delay threshold, deliveredCount/failedCount, and the last poll, change and delivery times. The secret is masked.

NameRequiredDescriptionDefault
idYesSubscription id, e.g. "sub_7Kd91mQx0Zb2", as returned by create_subscription or list_subscriptions.
list_deliveriesList deliveriesA
Read-only

Recent webhook delivery attempts for a subscription, newest first: eventId, attempt, status, httpStatus, error, durationMs, at and changeTypes. Use it to debug a receiver that is not getting webhooks or is answering with errors. Records are kept for 30 days.

NameRequiredDescriptionDefault
idYesSubscription id, e.g. "sub_7Kd91mQx0Zb2", as returned by create_subscription or list_subscriptions.
limitNoHow many attempts, 1 to 100. Default 25.
list_eventsList sent eventsA
Read-only

Recent events generated for a subscription, newest first, with the exact webhook payloads that were sent (the list of changes and the flight snapshot at the time). Use it to see what changed and when, or to replay a payload into a local receiver.

NameRequiredDescriptionDefault
idYesSubscription id, e.g. "sub_7Kd91mQx0Zb2", as returned by create_subscription or list_subscriptions.
limitNoHow many events, 1 to 100. Default 25.
list_subscriptionsList subscriptionsA
Read-only

List the subscriptions owned by this API key, newest first, as {total, data}. All filters are optional; page with limit and offset. Secrets are masked (secretHint). Use it to find a subscription id before get, update, pause, resume, delete or log calls.

NameRequiredDescriptionDefault
dateNoLocal departure date at the origin airport, YYYY-MM-DD. A flight that leaves at 23:50 and lands the next morning belongs to the day it left. Live records cover a few days back to about two days ahead.
limitNoPage size, 1 to 200. Default 25.
offsetNoHow many to skip, for paging. Default 0.
statusNoOnly subscriptions in this state: active (being polled), pending (flight not published yet), paused, completed (flight over) or suspended (20 failed deliveries in a row).
carrierNoAirline code: the 2-character IATA code (e.g. "TK") or 3-character ICAO code (e.g. "THY"). For flight "TK1848" this is "TK".
flightNumberNoFlight number without the airline code: 1 to 4 digits and an optional letter suffix. For "TK1848" this is "1848". Leading zeros are ignored.
pause_subscriptionPause a subscriptionA
Idempotent

Stop polling and webhook deliveries for a subscription without deleting it. Nothing is lost; resume_subscription continues it. Returns the updated subscription.

NameRequiredDescriptionDefault
idYesSubscription id, e.g. "sub_7Kd91mQx0Zb2", as returned by create_subscription or list_subscriptions.
resume_subscriptionResume a subscriptionA
Idempotent

Resume a paused subscription, or one that was suspended after 20 consecutive failed deliveries (fix the receiver first; send_test_event checks it). A completed subscription cannot be resumed: create a new one. Returns the updated subscription.

NameRequiredDescriptionDefault
idYesSubscription id, e.g. "sub_7Kd91mQx0Zb2", as returned by create_subscription or list_subscriptions.
search_docsSearch the FlightByte docsA
Read-onlyIdempotent

Keyword search over the whole FlightByte documentation: the docs, the API reference, the engineering guides and the glossary. Returns the best-matching sections with title, URL and a snippet. Use it before answering questions about the API (authentication, quotas, errors, flight lookups, leg selection, subscriptions, webhook payloads and change types, signature verification, retries) or before writing integration code, then read the full page with get_doc_page. Works without an API key.

NameRequiredDescriptionDefault
limitNoHow many sections to return, 1 to 10. Default 5.
queryYesKeywords, e.g. "verify webhook signature", "429 retry", "flight number two legs origin", "baggage carousel event".
search_flightsSearch flightsA
Read-only

The same lookup as get_flight (same parameters, same snapshot), sent as query parameters to /v1/flights/search. Use either one, not both. Returns FlightByte's flight snapshot: status.phase to branch on (scheduled, boarding, departed, en_route, landed, arrived, cancelled, diverted, redirected, unknown) with delayed/cancelled/diverted flags; departure and arrival airports with terminal, gate and baggage carousel; scheduled, estimated and actual gate and runway times in UTC and local time (bestTimeUtc is the best single time, delayMinutes the gate delay); aircraft, codeshares, the airline timeline, cached, and alternates: every leg this flight number operates that day. When the flight number operates several legs that day, pass origin (and optionally destination) to pick one; without a selector the default leg is returned and every leg is listed under alternates.

NameRequiredDescriptionDefault
dateYesLocal departure date at the origin airport, YYYY-MM-DD. A flight that leaves at 23:50 and lands the next morning belongs to the day it left. Live records cover a few days back to about two days ahead.
originNoDeparture airport, IATA code (e.g. "IST"; the upstream code such as "ISL" also works). Picks the leg when the flight number operates more than one leg that day.
carrierYesAirline code: the 2-character IATA code (e.g. "TK") or 3-character ICAO code (e.g. "THY"). For flight "TK1848" this is "TK".
refreshNotrue skips FlightByte's cache and asks upstream now (counts as a normal request). Leave unset unless the user needs a guaranteed fresh answer.
flightIdNoExact leg pick: a providerFlightId from a previous response's `alternates`, or a flightId from an error's list of legs.
destinationNoArrival airport, IATA code (e.g. "JFK"). Narrows further when several legs leave the same airport.
flightNumberYesFlight number without the airline code: 1 to 4 digits and an optional letter suffix. For "TK1848" this is "1848". Leading zeros are ignored.
send_test_eventSend a test eventA

Send a signed subscription.test webhook through the real delivery pipeline to the subscription's webhookUrl, signed with its real secret, and return the eventId. Use it to prove a receiver and its signature check work before the first real change, then call list_deliveries to see how the delivery went.

NameRequiredDescriptionDefault
idYesSubscription id, e.g. "sub_7Kd91mQx0Zb2", as returned by create_subscription or list_subscriptions.
update_subscriptionUpdate a subscriptionA
Idempotent

Change a subscription's webhookUrl, events filter, delayThresholdMinutes, headers or metadata. Send only the fields to change; headers and metadata replace the stored maps. The flight cannot be changed: create a new subscription for a different flight.

NameRequiredDescriptionDefault
idYesSubscription id, e.g. "sub_7Kd91mQx0Zb2", as returned by create_subscription or list_subscriptions.
eventsNoChange types to deliver; omit to deliver all 23. Common picks: "flight.departed", "flight.arrived", "flight.cancelled", "flight.diverted", "departure.gate.changed", "arrival.baggage.changed", "delay.increased".
headersNoExtra HTTP headers sent with every delivery, e.g. {"Authorization": "Bearer <receiver token>"}.
metadataNoString map echoed back in every webhook, e.g. {"bookingId": "BK-1042"}. Use it to tie deliveries to your own records.
webhookUrlNoThe user's public http(s) endpoint that receives a signed POST for every change. Addresses that resolve to private, loopback or link-local ranges are refused. Never invent one.
delayThresholdMinutesNoDelay changes smaller than this many minutes are not delivered. 1 to 240; the default is 1.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updatesv1.0.0
    • First observedcreate_subscription
    • First observeddelete_subscription
    • First observedget_doc_page
    • First observedget_flight
    • First observedget_flight_timeline
    • First observedget_subscription
    • First observedlist_deliveries
    • First observedlist_events
    • First observedlist_subscriptions
    • First observedpause_subscription
    • First observedresume_subscription
    • First observedsearch_docs
    • First observedsearch_flights
    • First observedsend_test_event
    • First observedupdate_subscription

TDQS

A4.1/5.0

Scored across 15 tools

Disambiguation3/5

The subscription tools (get/list/update/pause/resume/delete) are cleanly separated, but get_flight and search_flights are explicitly the same lookup with the same payload, differing only in HTTP method, and get_flight_timeline duplicates the `timeline` already embedded in get_flight. The descriptions do call out these overlaps ('use either one, not both', 'call this only when the history alone is needed'), which mitigates but does not remove the misselection risk.

Naming Consistency5/5

Every tool is snake_case with a verb-first pattern: search_docs, get_doc_page, get_flight, search_flights, get_flight_timeline, create/list/get/update/pause/resume/delete_subscription, send_test_event, list_deliveries, list_events. Resource nouns are consistent (_subscription, _deliveries) and no conventions are mixed.

Tool Count4/5

15 tools is at the top of the well-scoped range and the surface maps cleanly onto four areas: docs, flight lookup, subscription lifecycle, and webhook observability. One tool is arguably redundant (search_flights vs get_flight), which keeps it just short of ideal.

Completeness4/5

Subscription lifecycle is fully covered (create/list/get/update/pause/resume/delete plus test event, deliveries and events for debugging), and docs plus flight lookup are covered. Minor gaps: no way to look up an airport/airline/route or search flights by route, so agents must rely on flight-number lookups or docs for that context.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive flight tracking capabilities using the OpenSky Network API, enabling real-time flight data, geographic searches, historical data, and airport operations through MCP tools.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides AI assistants with access to real-time flight data, airport schedules, delays, and aviation reference databases through natural language queries.
    12
    182 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to ask what aircraft are flying near a location, track a specific flight's live position, route, aircraft details and photo, and surface emergency-squawking or military aircraft. It exposes four tools (flights_near, track_flight, emergencies, military_aircraft) backed by merged volunteer ADS-B networks and a global snapshot.
    2
    MIT