Award Flight Daily

com.awardflightdailyPublished by awardflightdaily.comOfficial publisherv1.26.0Updated Oct 24, 2026

Official airline award MCP. Search 12.3M+ award flights across 48 loyalty programs.

VerifiedStreamable HTTPWeb executableLocation & LifestyleFinance

Overview

AI-generated overview

Remote MCP server for searching and analyzing airline award flight availability across loyalty programs, with sweet-spot and transfer-partner lookups.

What you can do
  • Search award flights by origin, destination, date range, cabin, program, nonstop-only and mileage cap, with pagination
  • List loyalty programs and get per-program statistics such as routes, date range and cabin availability
  • View route availability calendars with mileage, taxes and seats per program
  • Find best-value sweet-spot redemptions ranked by minimum mileage
  • Check credit card to airline transfer partners, ratios and transfer speed
  • Get aggregate database statistics on records, routes and airport coverage
When to use it
Useful when planning award travel and you want an assistant to compare mileage redemptions, check date-by-date availability on a route, or see which credit card points transfer to which airline program.
Requirements
A remote streamable HTTP endpoint; no package, environment variable or header is declared in the manifest. The README describes a self-hosted variant that needs Python with fastmcp, pydantic and duckdb, plus a DuckDB database file path set via DUCKDB_PATH.
Before you install
The README describes read-only, parameterized queries, and write tools are only listed as a future idea. Availability data may be stale or incomplete, so confirm seats and pricing with the airline or program before transferring points or booking. No authentication is declared for the remote endpoint.

Installation

In SourceWeft

  1. Open Award Flight Daily in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.awardflightdaily%2Faward-flight-daily/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "award-flight-daily": {
      "type": "http",
      "url": "https://awardflightdaily.com/mcp-server/mcp"
    }
  }
}

README

Award Flight Daily MCP Server

A FastMCP server that wraps the Award Flight Daily database (12.3M award flight records across 25 loyalty programs) and exposes it to AI agents via tools.

Overview

The Award Flight Daily MCP server provides 7 core tools for searching, analyzing, and optimizing award travel:

  1. afd_search_award_flights - Core search across 12M+ records
  2. afd_list_programs - All 25 programs with statistics
  3. afd_get_program_details - Deep dive on a single program
  4. afd_get_route_availability - Calendar view for a route
  5. afd_find_sweet_spots - Best-value redemptions
  6. afd_check_transfer_partners - Credit card transfer ratios
  7. afd_get_market_stats - Aggregate database statistics

File Structure

mcp_server/├── __init__.py                 # Package definition├── config.py                   # Constants: programs, cabins, banks├── server.py                   # FastMCP server entry point (7 tools registered)├── db/│   ├── __init__.py│   └── queries.py             # DuckDB queries (read-only, parameterized)├── models/│   ├── __init__.py│   ├── inputs.py              # 8 Pydantic input models with validators│   └── responses.py           # Formatting helpers (JSON/Markdown)└── tools/    ├── __init__.py    ├── search.py              # afd_search_award_flights    ├── programs.py            # afd_list_programs, afd_get_program_details    ├── routes.py              # afd_get_route_availability    ├── sweet_spots.py         # afd_find_sweet_spots    ├── transfers.py           # afd_check_transfer_partners    └── analytics.py           # afd_get_market_stats

Configuration

All environment and program configuration lives in config.py:

  • MCP_SERVER_NAME: "awardflightdaily_mcp"
  • DUCKDB_PATH: Environment variable, defaults to /data/award_flights.duckdb
  • PROGRAMS: Dictionary of 25 programs (slug -> full name)
  • CABINS: Cabin class codes (Y/W/J/F)
  • BANKS: 7 credit card programs

Installation & Deployment

Requirements

fastmcp>=1.0.0pydantic>=2.0duckdb==1.1.3

Running

Stdio mode (local):

bash
python -m mcp_server.server

HTTP mode (remote):

bash
python -m mcp_server.server --http 8001

Tools API

1. Search Award Flights

python
SearchInput(    origin="JFK",                      # Required: IATA code(s)    destination="NRT",                 # Required: IATA code(s)    date_from="2026-06-01",           # Required: YYYY-MM-DD    date_to="2026-06-30",             # Required: YYYY-MM-DD    cabin=CabinClass.BUSINESS,        # Optional: Y/W/J/F (default J)    source="united,aeroplan",         # Optional: program filter    direct_only=False,                # Optional: nonstop only    max_miles=100000,                 # Optional: mileage cap    min_seats=1,                      # Optional: min seats (default 1)    limit=50,                         # Optional: results limit (default 50, max 200)    offset=0,                         # Optional: pagination offset    response_format=ResponseFormat.JSON # Optional: JSON or Markdown)

Returns: Paginated flight results with mileage, taxes, seats, airlines, equipment.

2. List Programs

python
ListProgramsInput(    response_format=ResponseFormat.JSON)

Returns: All 25 programs with:

  • Total flights & routes
  • Date range
  • Cabin availability counts (Y/W/J/F)

3. Program Details

python
ProgramDetailInput(    program="united",  # Required: program slug    response_format=ResponseFormat.JSON)

Returns: Deep stats for one program:

  • Total availability
  • Unique routes & airports
  • Average & minimum mileage by cabin

4. Route Availability

python
RouteInput(    origin="JFK",    destination="NRT",    cabin=CabinClass.BUSINESS,    source=None,  # Optional: filter by program    response_format=ResponseFormat.JSON)

Returns: All dates for a route with mileage, taxes, seats per program.

5. Find Sweet Spots

python
SweetSpotInput(    cabin=CabinClass.BUSINESS,    origin=None,  # Optional    destination=None,  # Optional    limit=25,    response_format=ResponseFormat.JSON)

Returns: Best-value routes ranked by minimum mileage cost.

6. Transfer Partners

python
TransferInput(    bank="chase",      # Optional: bank slug    program="united",  # Optional: program slug    response_format=ResponseFormat.JSON)

Returns: Credit card → airline transfer mappings with:

  • Transfer ratio (e.g., "1:1")
  • Speed (e.g., "Instant", "1-2 days")

7. Market Stats

python
MarketStatsInput(    response_format=ResponseFormat.JSON)

Returns: Aggregate database stats:

  • Total records, programs, routes
  • Airport coverage
  • Cabin availability breakdown

Input Validation

All inputs use Pydantic with validation:

  • IATA codes: Must be exactly 3 alphabetic characters
  • Dates: YYYY-MM-DD format only
  • Cabin: Enum restricted to Y/W/J/F
  • Limit: 1-200 results
  • Offset: >= 0
  • Min seats: 1-9

Invalid inputs raise ValidationError with detailed messages.

Response Formats

JSON (default)

Full structured response with pagination metadata:

json
{  "total": 1234,  "count": 50,  "offset": 0,  "has_more": true,  "cabin": "J",  "results": [    {      "id": "...",      "source": "united",      "origin": "JFK",      "destination": "NRT",      "date": "2026-06-15",      "mileage": 75000,      "taxes": 11.20,      "seats": 2,      "direct": true,      "airlines": "United",      "equipment": "B787",      "updated_at": "2026-03-26T12:34:56"    }  ]}

Markdown

Human-readable output with formatting:

markdown
# Award Flight Search Results
**1234 flights found** | Cabin: Business | Showing 50
## JFK → NRT | 2026-06-15
- **75,000 miles** + $11.20 taxes | united- Nonstop | 2 seats | United B787
...

Database

All queries are:

  • Read-only (DuckDB in read-only mode)
  • Parameterized with proper escaping
  • Filtered on expired_at IS NULL (active records only)
  • Type-safe with CAST(? AS DATE) for dates

Connection is lazy-loaded on first query and reused.

Design Principles

  1. No monoliths - Each tool in its own module
  2. Separation of concerns - DB queries, models, tools, responses separate
  3. Type safety - Pydantic models on all inputs
  4. Defensive - All parameterized queries, validators on inputs
  5. Fast - Read-only DuckDB, lazy connection, caching via MCP layer
  6. Testable - Pure functions, no side effects

Error Handling

  • Invalid input: Pydantic ValidationError with field details
  • Database error: Returns error message string (no 500s)
  • No results: Friendly "No flights found" message

The MCP layer handles serialization of errors to the client.

Future Enhancements

  • Price tracking ($/mile value calculation)
  • Seat map integration
  • Award chart comparison
  • Frequent flyer earning rates
  • Stopover/layover optimization
  • Alert setup via MCP (future: read-write tools)

Source: README.md at commit 22cb27f

Tools

0
SourceWeft has not read this server's tools yet.

Version history

1
  1. v1.26.0LatestSep 16, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.