# Fly Frugal public travel MCP

The Fly Frugal MCP server exposes public, read-only travel data for ChatGPT, Claude, Muse, and other MCP clients. No private content, customer information, purchase data, or administrative operations are part of its tool surface.

## Connection

| Setting | Value |
| --- | --- |
| Server name | `flyfrugal-travel-data` |
| Production URL | `https://flyfrugal.fyi/mcp` |
| Transport | Streamable HTTP |
| Authentication | None |
| Access | Read-only public data |

Opening `/mcp` in a browser redirects to the human documentation at `https://flyfrugal.fyi/docs`. MCP clients send `POST` requests to `/mcp`.

## Tools

### `list_itineraries`

Lists published itinerary previews. It never returns the complete paid guide or its private PDF.

```json
{
  "limit": 24,
  "country": "Thailand"
}
```

- `limit` is optional, defaults to 24, and is capped at 50.
- `country` is optional and case-insensitive.
- Zero database writes.

### `get_itinerary`

Gets one published itinerary preview by slug.

```json
{ "slug": "thailand" }
```

- Returns `ITINERARY_NOT_FOUND` for an unpublished or unknown slug.
- Never includes full paid day-by-day content.
- Zero database writes.

### `list_flight_deals`

Lists current observed round-trip fares, ordered by fresh verified savings first.

```json
{
  "origin": "SFO",
  "nights": 7,
  "limit": 20
}
```

- `origin` is optional. Omitting it searches across supported departure airports.
- `nights` is optional, defaults to 7, and accepts 1–30.
- `limit` is optional, defaults to 20, and is capped at 50.
- Results may include the current fare, route, dates, airlines, layover information, Google price insight, savings, and observation timestamps.
- Fares are observations and can change or sell out.
- Zero database writes.

### `get_todays_deals`

Returns only verified savings whose Google price insight was checked today in the `America/Los_Angeles` product timezone.

```json
{
  "origin": "SFO",
  "nights": 7,
  "limit": 2
}
```

- Returns an empty list when no qualifying fresh deal exists; it never substitutes old data.
- `origin` is optional.
- `limit` defaults to 2 and is capped at 10.
- Zero database writes.

## Client setup

Use this authless remote MCP configuration:

```json
{
  "mcpServers": {
    "flyfrugal-travel-data": {
      "type": "http",
      "url": "https://flyfrugal.fyi/mcp"
    }
  }
}
```

### Claude

Open **Settings → Connectors → Add custom connector**, name it `Fly Frugal Travel Data`, and enter:

```text
https://flyfrugal.fyi/mcp
```

### ChatGPT

In a workspace that supports custom MCP apps:

1. Enable Developer mode.
2. Open **Workspace settings → Apps → Create**.
3. Set the MCP endpoint to `https://flyfrugal.fyi/mcp`.
4. Scan and approve the four read-only tools.

### Muse

Connect to the same authless MCP URL when Muse needs to discover public itineraries or fresh deals. Private content delivery uses Fly Frugal's separate internal service integration and is not part of this MCP server.

## Data and cost behavior

All tools are read-only and perform zero PlanetScale, R2, Queue, or D1 writes. List requests are explicitly bounded, and the database selects only public result columns. Repeated public responses may be cached where freshness permits.

## Related public documentation

- Human-readable public API: [`public-api.md`](./public-api.md)
- OpenAPI 3.1 contract: [`public-api.openapi.yaml`](./public-api.openapi.yaml)
