# Flytoday (pypi · flytoday-mcp)

Unofficial read-only Flytoday: Iranian and international flights, hotels, villas, trains, buses.

- Trust score: 62/100 (medium)
- Change this week: −15
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-23

## Components

- pypi · `flytoday-mcp`: 62/100 (this document), [markdown](https://verifymcp.io/servers/sepehr071-flytoday-mcp/flytoday-mcp.md), [page](https://verifymcp.io/servers/sepehr071-flytoday-mcp/flytoday-mcp)

## Channel facts

- Registry: `pypi`
- Package: `flytoday-mcp`
- Version: `0.3.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-23.

- **Supply Chain Security**: 50/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 1 of 35 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to sepehr071/flytoday-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 62/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 5207 tokens (~236/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability check failed: the tool surface changed between 0.1.2 and 0.3.1: 0 tool removals, 22 breaking changes, 0 additions.
- **Tool Coverage**: 99/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 98% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "ft_flight_details" implies "refund" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the Flytoday MCP server?

Flytoday runs locally as a PyPI package, launched with uvx flytoday-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add sepehr071-flytoday-mcp -- uvx flytoday-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "sepehr071-flytoday-mcp": {
      "command": "uvx",
      "args": [
        "flytoday-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "sepehr071-flytoday-mcp": {
      "command": "uvx",
      "args": [
        "flytoday-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add sepehr071-flytoday-mcp -- uvx flytoday-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sepehr071-flytoday-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "flytoday-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add sepehr071-flytoday-mcp --command uvx --arg flytoday-mcp
```

### Hermes

```yaml
mcp_servers:
  sepehr071-flytoday-mcp:
    command: "uvx"
    args: ["flytoday-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "sepehr071-flytoday-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "flytoday-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add sepehr071-flytoday-mcp -t stdio -c uvx -a flytoday-mcp
```

### Other

```json
{
  "mcpServers": {
    "sepehr071-flytoday-mcp": {
      "command": "uvx",
      "args": [
        "flytoday-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-23 (score 62, −15)

- [security regression] Malware scan: pass → unverified

### 2026-10-22 (score 77, +15)

- [security regression] Stability: fail → unverified
- [security regression] Tool safety: pass → unverified
- [security improvement] Malware scan: unverified → pass
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] Package version: 0.3.0 → 0.3.1

### 2026-10-19 (score 62, −15)

- [security regression] Malware scan: pass → unverified

### 2026-10-18 (score 77, 0)

- [security regression] Stability: fail → unverified
- [security regression] Tool safety: pass → unverified
- [security regression] Malware scan: pass → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] Package version: 0.2.0 → 0.3.0

### 2026-10-16 (score 77, +15)

- [security regression] Stability: unverified → fail
- [security regression] Tool safety: pass → unverified
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] Package version: 0.1.2 → 0.2.0

### 2026-10-14 (score 62, +13)

- [security regression] Malware scan: pass → unverified
- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] First check of Destructive annotations: 0
- [functional] First check of Tool coverage: 98
- [functional] First check of Tool coverage: 100

### 2026-10-13 (score 49, 0)

- [functional] Package version: 0.1.1 → 0.1.2

### 2026-10-12 (score 49)

First indexed and scored.

## MCP tools (22)

### `ft_find_bus_city` (~97 tokens)

Find bus city

Bus city ids (4 digits) for a city name, or the popular cities when query is empty.

Use before ft_search_buses (Tehran '0001', Isfahan '0002', Shiraz '0004', Mashhad '0006').

Input parameters:

- `limit` (integer): Max cities.
- `query`: City name, Persian or latin, e.g. 'اصفهان' or 'shiraz'.

### `ft_bus_calendar` (~137 tokens)

Bus price calendar

Cheapest bus seat price per day for the next weeks (the site's price strip), in one cheap call.

Values are cached minimums per day (one row per company in the API) and can differ a little from a
live search; days without a listed bus are left out. Use it to pick a day, then ft_search_buses.

Input parameters:

- `destination` (string, required): 4-digit bus city id from ft_find_bus_city, e.g. '0001' (Tehran).
- `origin` (string, required): 4-digit bus city id from ft_find_bus_city, e.g. '0001' (Tehran).

### `ft_search_buses` (~244 tokens)

Search buses

Buses between two cities on a date: company, terminals, departure, bus type, seats left, price per seat.

A busy route lists over 100 buses (the raw reply is 1.5 MB): narrow with facility, sort or limit.
price_toman is per seat. Rows carry `fare_source_code`; `search_id` is at the top. The site's seat map
is not offered (it belongs to the booking flow). Searches are rate limited: do not repeat them in a loop.

Input parameters:

- `available_only` (boolean): Hide sold-out buses.
- `date` (string, required): Departure date YYYY-MM-DD, e.g. '2026-10-14'.
- `destination` (string, required): 4-digit bus city id from ft_find_bus_city, e.g. '0001' (Tehran).
- `facility`: Keep only buses with this facility, e.g. 'vip'.
- `limit` (integer): Max buses.
- `origin` (string, required): 4-digit bus city id from ft_find_bus_city, e.g. '0001' (Tehran).
- `sort` (string): Order of the results.

### `ft_cip` (~289 tokens)

CIP airport services

CIP / VIP airport lounge service with prices for a date and passenger mix, plus paid add-ons.

Only IKA and MHD sell CIP. `nationality` says which passports an offer is for (IKA lists one offer for
Iranian passports and one for all others). price_per_passenger_toman is per person (tax included); total_toman is for the
whole party; add-ons (wheelchair, pet, transfers) list their adult price. Nothing is held or booked.
Next: the user books on flytoday.ir.

Input parameters:

- `adults` (integer): Adults, e.g. 1.
- `airport` (string, required): Airport IATA code that sells CIP lounges: 'IKA' (Tehran Imam Khomeini, international) or 'MHD' (Mashhad, domestic and international).
- `children` (integer): Children, e.g. 0.
- `date` (string, required): Flight date YYYY-MM-DD, today or later and at most about 3 months ahead, e.g. '2026-10-20'.
- `direction` (string): 'departure' = leaving from this airport, 'arrival' = landing here.
- `flight_type` (string): Kind of flight.
- `full_text` (boolean): Skip text clips and item caps; return full texts.
- `infants` (integer): Infants, e.g. 0.

### `ft_esim_plans` (~117 tokens)

eSIM plans

eSIM data plans for a country with data amount, validity days and price, cheapest first.

Covers 200+ countries (no regional or global bundles). fare_code identifies the plan on flytoday.ir; plans
cannot be bought here. coverage_countries is how many countries the plan works in.

Input parameters:

- `country` (string, required): Country in English or Persian, or ISO code or slug, e.g. 'turkey', 'ترکیه', 'AE'.
- `limit` (integer): Max plans, cheapest first.

### `ft_visa` (~131 tokens)

Visa prices and requirements

Visa services of Flytoday: the country list with from-prices, or one country's prices, documents and process.

Without country: every country with visa type, from_price (in price_currency, often USD or EUR, not Toman)
and processing time. With country: price per visa type (foreign currency and Toman at Flytoday's rate),
validity, processing time and documents. Schengen is one entry, 'schengen'.

Input parameters:

- `country`: Country in English, Persian or slug, e.g. 'turkey', 'پاکستان', 'schengen'. Omit to list every country.

### `ft_activities` (~216 tokens)

Search activities

Tours, tickets and experiences in a destination that are on sale in the date range, with from-prices.

Only activities with a price in the range are listed (many are unavailable on given dates), cheapest
first. price_toman is the adult from-price; list_price_toman is the box-office price. region is the
destination matched; other_regions lists alternatives to retry with region_id. Next: ft_activity(activity_id).

Input parameters:

- `date_from`: First day YYYY-MM-DD; tomorrow or later (today is moved to tomorrow); default tomorrow.
- `date_to`: Last day YYYY-MM-DD, up to 90 days after date_from; default date_from + 30 days.
- `limit` (integer): Max activities, cheapest first.
- `query`: Destination, English or Persian, e.g. 'Dubai', 'دبی', 'Istanbul'. Needed unless region_id is given.
- `region_id`: Region id from an earlier call, e.g. 1234 (Dubai); skips the lookup.

### `ft_activity` (~151 tokens)

Activity details

One activity: description, highlights, options with adult prices, and the cheapest days in the range.

price_toman fields are adult prices. The range matters: an activity with no availability in it comes back
with available=false, so use a wide range (the default is about two months). Slow upstream (up to a minute).
Booking happens on flytoday.ir.

Input parameters:

- `activity_id` (integer, required): Activity id from ft_activities, e.g. 13049.
- `date_from`: Price calendar start YYYY-MM-DD; default today + 3 days.
- `date_to`: Price calendar end YYYY-MM-DD, up to 90 days after date_from; default date_from + 57 days.

### `ft_find_airport` (~141 tokens)

Find airport or city

Find the IATA codes the flight tools need, for domestic and international places.

Each hit has `code`, `type` (City or Airport) and, for a city, its `airports`. Use the city code
(THR, IST) in ft_search_flights and ft_flight_calendar: a city code covers all of its airports.
Without a query it lists the popular Iranian and international cities.

Input parameters:

- `domestic_only` (boolean): Only Iranian places.
- `limit` (integer): Max places.
- `query`: City or airport name, Persian or English ('mashhad', 'استانبول'); omit for popular places.

### `ft_search_flights` (~555 tokens)

Search flights

Search flights for a date: every flight with times, airline (airline_fa: Persian name), seats left, price and fare_source_code.

price_toman is one adult's fare (taxes included), total_toman the whole party. Round trip (return_date):
\`flights` are outbound options (total_toman = cheapest round trip with that outbound), `return_flights`
the returns for the cheapest outbound (`return_for` is its key; pass another key as outbound_key +
search_id for its returns). Filters apply to the outbound leg. Rate limited: page with search_id, never
search again. Next: ft_flight_details(fare_source_code); ft_flight_calendar finds the cheapest day first.

Input parameters:

- `adults` (integer): Adults (12+).
- `airlines`: Only these airline codes, e.g. ['W5', 'EP'] (codes appear in results).
- `cabin` (string): Cabin class.
- `children` (integer): Children (2-11).
- `date` (string, required): Gregorian date YYYY-MM-DD, e.g. '2026-10-23'.
- `depart_after`: Local time HH:MM, e.g. '18:00'.
- `depart_before`: Local time HH:MM, e.g. '18:00'.
- `destination` (string, required): IATA city code from ft_find_airport, e.g. 'THR' (covers IKA and THR), 'MHD', 'IST', 'DXB'.
- `direct_only` (boolean): Only flights without a stop or connection.
- `infants` (integer): Infants (under 2).
- `limit` (integer): Flights per page.
- `max_price_toman`: Highest fare in Toman (whole party).
- `origin` (string, required): IATA city code from ft_find_airport, e.g. 'THR' (covers IKA and THR), 'MHD', 'IST', 'DXB'.
- `outbound_key`: Round trip: `key` of the chosen outbound flight, to list the return flights for it (needs search_id).
- `page` (integer): Result page, 1-based. Pages above 1 need search_id.
- `return_date`: Return date YYYY-MM-DD for a round trip, e.g. '2026-10-26'; omit for one-way.
- `search_id`: searchId from an earlier result (valid about 15 minutes): pages and re-sorts without a new search.
- `sort` (string): Order: lowest price, shortest trip, earliest departure.
- `ticket_type`: Only charter or only system (scheduled) tickets.

### `ft_flight_calendar` (~228 tokens)

Flight price calendar

Cheapest one-adult fare per departure day around a date, in one cheap call (no search needed).

Use it to pick the cheapest day, then ft_search_flights for that day. Values are cached minimums
(price_toman, airline code) and can differ a little from a live search; days without a cached fare
are left out and past days are dropped. `cheapest` is the lowest day.

Input parameters:

- `date` (string, required): Centre of the window, Gregorian YYYY-MM-DD, e.g. '2026-10-23'.
- `destination` (string, required): IATA city code from ft_find_airport, e.g. 'THR' (covers IKA and THR), 'MHD', 'IST', 'DXB'.
- `origin` (string, required): IATA city code from ft_find_airport, e.g. 'THR' (covers IKA and THR), 'MHD', 'IST', 'DXB'.
- `window` (string): week = the date +-3 days, month = the date +-15 days.

### `ft_flight_details` (~143 tokens)

Flight fare details

Refund and change rules, confirmed baggage per segment and (international) entry notes of one fare.

The fare_source_code is valid only while its search lives (about 15 minutes); after that run
ft_search_flights again. Charter fares list cancellation penalties as text, system fares as
tiers (`penalties`, % of the fare by time before the flight).

Input parameters:

- `fare_source_code` (string, required): fare_source_code of a flight from ft_search_flights.
- `full_text` (boolean): Skip text clips and item caps; return full texts.
- `search_id`: search_id of that search; adds the entry and transit notes of an international fare.

### `ft_find_hotel_place` (~224 tokens)

Find hotel or stay place

Find the place ids the hotel and stay tools need. Which id goes where:

\`hotels` rows: kind 'city' (Iran) -> `city_id` for ft_search_hotels; kind 'region' (abroad, with international=true)
\-> `region_code` plus `country_code` for ft_search_hotels(international=true); kind 'hotel' -> `hotel_id` for
ft_hotel and ft_hotel_reviews. `stay_regions` rows (Iran only, villas and apartments) -> `region_code` for
ft_search_stays; they are NOT the same ids as the hotel city ids. Without a query it lists the popular hotel
places (and popular stay areas, which have no region_code: search them by name).

Input parameters:

- `international` (boolean): Look for places outside Iran (hotels only; stays are Iran only).
- `limit` (integer): Max rows per list.
- `query`: City, region or hotel name, Persian or English ('مشهد', 'Istanbul', 'رامسر').

### `ft_search_hotels` (~436 tokens)

Search hotels

Priced hotels of a city (Iran) or region (abroad) for dates, one row per hotel with its cheapest room offer.

Give city_id for Iran, or region_code + country_code with international=true. price_toman is the whole stay
for one room (per_night_toman = price / nights); image is the cover photo. Next: ft_hotel(hotel_id) or
ft_hotel_reviews. Rows with is_stay=true are apartments or villas: open them with ft_stay(property_id).
rooms_left is given only when the site counts rooms. Captcha-limited hard per IP: search once, then
filter and page; never loop.

Input parameters:

- `adults` (integer): Adults in the (single) room.
- `check_in` (string, required): Gregorian date YYYY-MM-DD, e.g. '2026-10-21'.
- `check_out` (string, required): Gregorian date YYYY-MM-DD, e.g. '2026-10-21'.
- `children_ages`: Ages (0-11) of the children, one entry each, e.g. [5, 8]. Omit for none.
- `city_id`: Iranian city id from ft_find_hotel_place, e.g. 10 (Mashhad).
- `country_code`: ISO country code of the DESTINATION for international, e.g. 'TR'.
- `international` (boolean): true for a hotel outside Iran (id from ft_find_hotel_place international).
- `limit` (integer): Hotels per page.
- `max_price_toman`: Max price of the WHOLE stay in Toman, e.g. 30000000.
- `page` (integer): Page number, 1-based.
- `refundable_only` (boolean): Only offers with free cancellation.
- `region_code`: Foreign region code from ft_find_hotel_place, e.g. '178267' (Istanbul).
- `sort` (string): price = cheapest first, score = best guest score first.
- `stars`: Only these star ratings, e.g. [4, 5].

### `ft_hotel` (~292 tokens)

Hotel rooms and prices

One hotel for dates: every room and meal-plan offer with whole-stay price, rooms left and cancellation terms,
the room details (size, beds, features) and the hotel basics (address, stars, score, facilities, check-in time).

price_toman is the whole stay for one room; per_night_toman = price / nights. Offers are cheapest first,
sold-out ones (rooms_left 0) last. Use after ft_search_hotels; the user books on flytoday.ir. Rate limited like
ft_search_hotels: one availability call per use.

Input parameters:

- `adults` (integer): Adults in the (single) room.
- `check_in` (string, required): Gregorian date YYYY-MM-DD, e.g. '2026-10-21'.
- `check_out` (string, required): Gregorian date YYYY-MM-DD, e.g. '2026-10-21'.
- `children_ages`: Ages (0-11) of the children, one entry each, e.g. [5, 8]. Omit for none.
- `country_code`: ISO country code of the DESTINATION for international, e.g. 'TR'.
- `hotel_id` (integer, required): Hotel id from ft_search_hotels or ft_find_hotel_place, e.g. 24.
- `international` (boolean): true for a hotel outside Iran (id from ft_find_hotel_place international).

### `ft_hotel_reviews` (~148 tokens)

Hotel reviews

Guest reviews of a hotel: score (1-10), text, pros, cons, trip type and nights. Mostly Persian text.

Use after ft_search_hotels / ft_hotel to judge a hotel; total_reviews tells how many pages exist.

Input parameters:

- `full_text` (boolean): Skip text clips and item caps; return full texts.
- `hotel_id` (integer, required): Hotel id, e.g. 24.
- `international` (boolean): true for a hotel outside Iran (id from ft_find_hotel_place international).
- `limit` (integer): Reviews per page.
- `order` (string): Review order.
- `page` (integer): Page number, 1-based.

### `ft_search_stays` (~228 tokens)

Search villas and stays

Villas, apartments and other private stays in Iran for dates, cheapest first.

Give both dates (strongly advised: only properties free on the dates are listed and total_toman is filled)
or none (base prices). price_per_night_toman and total_toman are Toman (the stay API is not in Rial like
hotels). property_id feeds ft_stay (calendar, details, reviews). Prices change a lot by date.

Input parameters:

- `check_in`
- `check_out`
- `guests` (integer): Number of guests.
- `limit` (integer): Properties per page.
- `max_price_toman`: Max price PER NIGHT in Toman, e.g. 5000000.
- `page` (integer): Page number, 1-based.
- `region_code`: Stay region code from ft_find_hotel_place `stay_regions`, e.g. '149' (Ramsar). Omit for all Iran.
- `sort` (string): cheapest = lowest nightly price first.
- `type`: Property type; omit for all types.

### `ft_stay` (~182 tokens)

Stay details and calendar

One villa / apartment: details (capacity, rooms, facilities, rules, host), the per-night price calendar with
blocked days, and the review summary with the latest reviews.

Calendar prices are Toman per night for that date (the base price in the details is only a reference).
A day is available=false when the host blocked it or it is already reserved. The user books on flytoday.ir.

Input parameters:

- `from_date`: First calendar day YYYY-MM-DD; default today.
- `full_text` (boolean): Skip text clips and item caps; return full texts.
- `guests` (integer): Number of guests (changes the price).
- `property_id` (integer, required): Property id from ft_search_stays, e.g. 3804.
- `to_date`: Last calendar day; default 14 days after from_date, at most 45.

### `ft_find_station` (~94 tokens)

Find train station

Train station codes (`station_code`) for a city name, or the 8 most popular stations when query is empty.

Use before ft_search_trains and ft_train_calendar, which need the codes (Tehran 1, Mashhad 191).

Input parameters:

- `limit` (integer): Max stations.
- `query`: City or station name, Persian or latin, e.g. 'مشهد' or 'isfahan'.

### `ft_search_trains` (~269 tokens)

Search trains

Trains between two stations on a date: one row per train class (wagon) with price per adult and seats left.

price_toman is per adult. Sales cover only about the next 16 days (no_result means outside it). Rows carry
\`fare_source_code` and `wagon_id`: pass them to ft_train_stops for stops and amenities. Other days: ft_train_calendar.
Searches are rate limited by the site: do not repeat them in a loop.

Input parameters:

- `adults` (integer): Adult passengers.
- `available_only` (boolean): Hide classes with no free seats for this party.
- `children` (integer): Children (2-12).
- `date` (string, required): Travel date YYYY-MM-DD, e.g. '2026-10-14'. Sales open ~16 days ahead.
- `destination` (integer, required): Train station code from ft_find_station, e.g. 1 (Tehran) or 191 (Mashhad).
- `infants` (integer): Infants (under 2).
- `limit` (integer): Max train classes.
- `origin` (integer, required): Train station code from ft_find_station, e.g. 1 (Tehran) or 191 (Mashhad).
- `sort` (string): Order of the results.

### `ft_train_calendar` (~102 tokens)

Train price calendar

Cheapest train price per day for the next ~16 days, with sold-out days flagged.

Use to pick a day; then ft_search_trains for that date.

Input parameters:

- `destination` (integer, required): Train station code from ft_find_station, e.g. 1 (Tehran) or 191 (Mashhad).
- `origin` (integer, required): Train station code from ft_find_station, e.g. 1 (Tehran) or 191 (Mashhad).

### `ft_train_stops` (~89 tokens)

Train stops

Stops of one train with arrival and departure times, plus (with wagon_id) the class amenities and extra meals.

Needs ids from a recent ft_search_trains result; they expire with the search.

Input parameters:

- `fare_source_code` (string, required): fare_source_code from a fresh ft_search_trains row.
- `wagon_id`: wagon_id from the same row; adds the class amenities and meals.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/sepehr071-flytoday-mcp/flytoday-mcp#diagnostics

## Score history

- 2026-10-23: 62
- 2026-10-22: 77
- 2026-10-21: 62
- 2026-10-20: 62
- 2026-10-19: 62
- 2026-10-18: 77
- 2026-10-17: 77
- 2026-10-16: 77
- 2026-10-15: 62
- 2026-10-14: 62
- 2026-10-13: 49
- 2026-10-12: 49

## Common questions

### What is the Flytoday MCP server?

Flytoday is an MCP server listed in the public MCP registry as io.github.sepehr071/flytoday-mcp. Unofficial read-only Flytoday: Iranian and international flights, hotels, villas, trains, buses. This page covers its PyPI package (flytoday-mcp).

### Is the Flytoday MCP server safe to use?

Flytoday scores 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Flytoday MCP server expose?

Flytoday exposes 22 tools: ft_find_bus_city, ft_bus_calendar, ft_search_buses, ft_cip, ft_esim_plans, and 17 more. Their descriptions and schemas cost roughly 4,513 tokens of context every time the server is loaded.

### Is the Flytoday MCP server still maintained?

Flytoday is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Flytoday MCP server under?

Flytoday declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/flytoday-mcp/
- Socket report: https://socket.dev/pypi/package/flytoday-mcp
- Repository: https://github.com/sepehr071/flytoday-mcp
- Changelog RSS feed: https://verifymcp.io/servers/sepehr071-flytoday-mcp/flytoday-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/sepehr071-flytoday-mcp/flytoday-mcp.json
- HTML version of this page: https://verifymcp.io/servers/sepehr071-flytoday-mcp/flytoday-mcp
